@co0ontty/wand 1.49.0 → 1.49.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/server.js +111 -89
- package/dist/structured-session-manager.d.ts +2 -0
- package/dist/structured-session-manager.js +25 -43
- package/dist/types.d.ts +0 -5
- package/dist/upload-routes.js +10 -4
- package/dist/web-ui/content/scripts.js +31 -31
- package/dist/web-ui/content/styles.css +1 -1
- package/dist/web-ui/embedded-assets.d.ts +1 -1
- package/dist/web-ui/embedded-assets.js +3 -3
- package/package.json +1 -1
|
@@ -2,35 +2,35 @@ if("serviceWorker"in navigator){fetch("/sw.js",{cache:"no-cache"}).then(function
|
|
|
2
2
|
\u89E3\u51B3\u529E\u6CD5\uFF08\u4EFB\u9009\u4E00\u79CD\uFF09\uFF1A
|
|
3
3
|
1) \u4ECE `+location.origin+`/cert/server.crt \u4E0B\u8F7D\u672C\u673A\u81EA\u7B7E\u8BC1\u4E66\uFF0C\u5BFC\u5165\u5230\u7CFB\u7EDF/\u6D4F\u89C8\u5668"\u53D7\u4FE1\u4EFB\u6839\u8BC1\u4E66\u9881\u53D1\u673A\u6784"
|
|
4
4
|
2) \u5728\u672C\u673A\u7528 mkcert \u7B7E\u53D1\u53D7\u4FE1\u4EFB\u8BC1\u4E66\uFF0C\u5E76\u5728 ~/.wand/config.json \u914D\u7F6E tls.certPath / tls.keyPath
|
|
5
|
-
3) \u7528\u5185\u7F51 CA \u6216 Let's Encrypt \u7ED9\u57DF\u540D\u7B7E\u771F\u8BC1\u4E66\uFF08\u540C\u4E0A\u914D\u7F6E tls\uFF09`):console.log("SW registration failed:",an)});var reloading=!1,pageReady=!1;setTimeout(function(){pageReady=!0},3e3),navigator.serviceWorker.addEventListener("controllerchange",function(){reloading||!pageReady||(reloading=!0,location.reload())})}(function(){function Et(){var je="browser";return window.matchMedia("(display-mode: window-controls-overlay)").matches?je="window-controls-overlay":window.matchMedia("(display-mode: standalone)").matches?je="standalone":window.matchMedia("(display-mode: fullscreen)").matches?je="fullscreen":navigator.standalone===!0&&(je="standalone"),document.documentElement.setAttribute("data-display-mode",je),document.documentElement.classList.toggle("is-pwa",je!=="browser"),je}Et(),["standalone","window-controls-overlay","fullscreen"].forEach(function(je){window.matchMedia("(display-mode: "+je+")").addEventListener("change",Et)});try{var an=navigator&&navigator.userAgent||"";/WandApp\//.test(an)&&document.documentElement.classList.add("is-wand-app")}catch{}})(),(function(){var Et="${escapeHtml(configPath)}",an="wand-chat-expand-state-v1",je=[function(){}];(function(){try{var t=localStorage.getItem("wand-ls-schema"),n=t==null?0:parseInt(t,10);n>=0||(n=0);for(var i=n;i<je.length;i++)try{je[i]()}catch{}n<je.length&&localStorage.setItem("wand-ls-schema",String(je.length))}catch{}})();function _i(e,t){try{var n=localStorage.getItem(e);return n==="true"?!0:n==="false"?!1:t}catch{return t}}function Ee(e,t){try{localStorage.setItem(e,String(!!t))}catch{}}var r={selectedId:(function(){try{return localStorage.getItem("wand-selected-session")||null}catch{return null}})(),pollTimer:null,config:null,sessions:[],suggestionTimer:null,terminal:null,terminalFitInProgress:!1,terminalSessionId:null,terminalOutput:"",terminalOutputMarker:0,terminalLiveStreamSessions:{},syncOutputBuffer:null,syncOutputDeadline:0,syncFramingResidue:!1,lastChunkAt:0,terminalHealthTimer:null,lastTerminalResyncAt:0,terminalAutoFollow:!0,terminalProgrammaticScrollUntil:0,terminalScrollIdleTimer:null,terminalScrollThreshold:12,showTerminalJumpToBottom:!1,terminalViewportEl:null,terminalViewportScrollHandler:null,terminalViewportTouchHandler:null,terminalViewportTouchStartHandler:null,terminalTouchStartY:0,terminalComposing:!1,resizeObserver:null,resizeHandler:null,resizeTimer:null,inputQueue:Promise.resolve(),pendingMessages:[],messageQueue:[],crossSessionQueue:(function(){try{var e=localStorage.getItem("wand-cross-session-queue"),t=e?JSON.parse(e):[];return Array.isArray(t)?t:[]}catch{return[]}})(),structuredInputQueue:[],queueBarHoverIndex:null,queueBarDrag:null,drafts:{},isSyncingInputBox:!1,loginPending:!1,loginChecked:!1,bootstrapping:!0,sessionsDrawerOpen:_i("wand-sidebar-open",!1),sidebarPinned:_i("wand-sidebar-pinned",!0),sidebarCollapsed:_i("wand-sidebar-collapsed",!1),modalOpen:!1,presetValue:"",cwdValue:"",modeValue:"managed",chatMode:"managed",chatModel:(function(){try{return localStorage.getItem("wand-chat-model")||""}catch{return""}})(),chatThinking:(function(){try{var e=localStorage.getItem("wand-thinking-effort")||"off";return e==="off"||e==="standard"||e==="deep"||e==="max"?e:"off"}catch{return"off"}})(),availableModels:[],availableCodexModels:[],modelsRefreshing:!1,sessionCreateKind:"structured",sessionCreateWorktree:!1,sessionTool:"claude",activeWorktreeMergeSessionId:null,worktreeMergeCheckResult:null,worktreeMergeLoading:!1,worktreeMergeSubmitting:!1,worktreeMergeError:"",preferredCommand:"claude",structuredRunner:"claude-cli-print",lastResize:{cols:0,rows:0},isOnline:navigator.onLine,deferredPrompt:null,showInstallPrompt:!1,ws:null,wsConnected:!1,lastWsMessageAt:0,wsHeartbeatCheckTimer:null,_updateBubbleShown:!1,notificationHistory:{},delayedNotificationTimer:null,notifSound:(function(){try{var e=localStorage.getItem("wand-notif-sound");return e===null?!0:e==="true"}catch{return!0}})(),notifVolume:(function(){try{var e=localStorage.getItem("wand-notif-volume");return e===null?80:Math.max(0,Math.min(100,parseInt(e,10)||80))}catch{return 80}})(),notifBubble:(function(){try{var e=localStorage.getItem("wand-notif-bubble");return e===null?!0:e==="true"}catch{return!0}})(),toolContentCache:{},lastSeqBySession:{},currentView:"terminal",terminalScale:(function(){try{var e=localStorage.getItem("wand-terminal-scale");return e?parseFloat(e):1}catch{return 1}})(),terminalBaseFontSize:13,keyboardPopupOpen:!1,filePanelOpen:(function(){try{return localStorage.getItem("wand-file-panel-open")==="true"}catch{return!1}})(),topbarMoreOpen:!1,gitStatus:null,gitStatusSessionId:null,gitStatusLoading:!1,gitStatusInflight:null,gitStatusLastFetchAt:0,quickCommitOpen:!1,quickCommitSubmitting:!1,quickCommitGenerating:!1,quickCommitError:"",quickCommitForm:{customMessage:"",tag:"",tagEdited:!1},quickCommitPushing:!1,quickCommitPushError:"",quickCommitResult:null,quickCommitDragAction:"commit",quickCommitSubmoduleIntent:!1,chatStickToBottom:!0,chatUnreadCount:0,chatUnreadStartIndex:-1,chatScrollThreshold:160,chatIsProgrammaticScroll:!1,chatScrollElement:null,chatScrollHandler:null,chatScrollWheelHandler:null,chatScrollTouchStartHandler:null,chatScrollTouchMoveHandler:null,chatTouchStartY:0,chatInitialRenderDone:!1,lastForegroundSyncAt:0,foregroundSyncTimer:null,wsReconnectAttempts:0,wsReconnectTimer:null,currentMessages:[],lastRenderedHash:0,lastRenderedMsgCount:0,lastRenderedEmpty:null,renderPending:!1,chatPageSize:20,chatRenderedCount:20,currentTask:null,terminalInteractive:!1,miniKeyboardVisible:!1,modifiers:{ctrl:!1,alt:!1,shift:!1},joystickPos:(function(){try{var e=localStorage.getItem("wand-ball-pos");if(!e)return null;var t=JSON.parse(e);return t&&typeof t=="object"?t:null}catch{return null}})(),joystickPinnedOpen:!1,joystickRootEl:null,joystickPanelEl:null,joystickBackdropEl:null,joystickBallEl:null,joystickPointerId:null,joystickGesture:null,joystickPressStart:null,joystickLongPressTimer:null,joystickMoveHandler:null,joystickUpHandler:null,joystickResizeHandler:null,fileSearchQuery:"",fileExplorerLoading:!1,allFiles:[],fileExplorerCwd:"",fileExplorerTruncated:!1,fileExplorerTotal:0,claudeHistory:[],claudeHistoryLoaded:!1,claudeHistoryExpanded:!1,claudeHistoryExpandedDirs:{},archivedExpanded:!1,sessionsManageMode:!1,selectedSessionIds:{},selectedClaudeHistoryIds:{},codexHistory:[],codexHistoryLoaded:!1,codexHistoryExpandedDirs:{},selectedCodexHistoryIds:{},askUserSelections:{},queueEpoch:0,pendingAttachments:[],workingDir:(function(){try{var e=localStorage.getItem("wand-working-dir");return e||""}catch{return""}})()},Di="\u4E2D\u6587",Vr={\u4E2D\u6587:{"subagent.tag":"\u5B50\u4EE3\u7406","subagent.handoff":"{parent} \u8BA9 {sub} \u5E2E\u5FD9","subagent.handoff.with_desc":"{parent} \u8BA9 {sub} \u5E2E\u5FD9\uFF1A","subagent.continued":"\u7EE7\u7EED\u8F93\u51FA","subagent.task.done":"\u4EFB\u52A1\u5B8C\u6210","subagent.task.failed":"\u4EFB\u52A1\u5931\u8D25","subagent.running":"\u8FD0\u884C\u4E2D","subagent.no_output":"\uFF08\u65E0\u8F93\u51FA\uFF09","subagent.helper_fallback_prefix":"\u534F\u4F5C\u732B\xB7","subagent.title_aria":"\u70B9\u51FB\u5C55\u5F00 / \u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA","subagent.tag_title":"\u5B50\u4EE3\u7406 / subagent","ui.expand":"\u5C55\u5F00","ui.collapse":"\u6536\u8D77","ui.expand_panel_aria":"\u5C55\u5F00\u5B50\u4EE3\u7406\u8F93\u51FA","ui.collapse_panel_aria":"\u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA"},English:{"subagent.tag":"Subagent","subagent.handoff":"{parent} asked {sub} for help","subagent.handoff.with_desc":"{parent} asked {sub} for help with: ","subagent.continued":"continued","subagent.task.done":"Task complete","subagent.task.failed":"Task failed","subagent.running":"Running","subagent.no_output":"(no output)","subagent.helper_fallback_prefix":"Helper\xB7","subagent.title_aria":"Click to expand / collapse subagent output","subagent.tag_title":"Subagent","ui.expand":"Expand","ui.collapse":"Collapse","ui.expand_panel_aria":"Expand subagent output","ui.collapse_panel_aria":"Collapse subagent output"}};function ls(){var e=r.config&&typeof r.config.language=="string"?r.config.language.trim():"";if(!e)return Di;if(Vr[e])return e;var t=e.toLowerCase();return t==="english"||t==="en"||t.indexOf("english")===0||t.indexOf("\u82F1")===0?"English":t==="\u4E2D\u6587"||t==="zh"||t.indexOf("zh")===0||t.indexOf("\u4E2D")===0||t.indexOf("chinese")===0?"\u4E2D\u6587":"English"}function Je(e,t){var n=ls(),i=Vr[n]||Vr[Di],a=i&&e in i?i[e]:null;if(a==null){var s=Vr[Di];a=s&&e in s?s[e]:e}if(t&&typeof a=="string")for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(a=a.split("{"+o+"}").join(t[o]));return a}var Td={shield:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>',shieldCheck:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/><polyline points="9 12 11 14 15 10"/>',keyboard:'<rect x="2" y="6" width="20" height="12" rx="2"/><line x1="6" y1="10" x2="6" y2="10"/><line x1="10" y1="10" x2="10" y2="10"/><line x1="14" y1="10" x2="14" y2="10"/><line x1="18" y1="10" x2="18" y2="10"/><line x1="6" y1="14" x2="6" y2="14"/><line x1="18" y1="14" x2="18" y2="14"/><line x1="9" y1="14" x2="15" y2="14"/>',cloud:'<path d="M17.5 19a4.5 4.5 0 1 0-1-8.9 6 6 0 0 0-11.5 1.7A4 4 0 0 0 6 19h11.5z"/>',terminal:'<polyline points="4 7 9 12 4 17"/><line x1="12" y1="17" x2="20" y2="17"/>',chat:'<path d="M21 12a8 8 0 0 1-12.9 6.3L3 20l1.7-5.1A8 8 0 1 1 21 12z"/>',folder:'<path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',folderOpen:'<path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2"/><path d="M3 9h18l-2 8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',trash:'<polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 13a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6"/><path d="M14 11v6"/><path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>',slash:'<polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>',chevronDown:'<polyline points="6 9 12 15 18 9"/>',chevronUp:'<polyline points="6 15 12 9 18 15"/>',chevronRight:'<polyline points="9 6 15 12 9 18"/>',bell:'<path d="M18 16v-5a6 6 0 1 0-12 0v5l-2 2h16z"/><path d="M10 21a2 2 0 0 0 4 0"/>',music:'<path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/>',vibrate:'<rect x="9" y="4" width="6" height="16" rx="1"/><path d="M5 8v8"/><path d="M3 10v4"/><path d="M19 8v8"/><path d="M21 10v4"/>',globe:'<circle cx="12" cy="12" r="9"/><line x1="3" y1="12" x2="21" y2="12"/><path d="M12 3a14 14 0 0 1 0 18"/><path d="M12 3a14 14 0 0 0 0 18"/>',smartphone:'<rect x="6" y="2" width="12" height="20" rx="2.5"/><line x1="11" y1="18" x2="13" y2="18"/>',desktop:'<rect x="3" y="4" width="18" height="12" rx="2"/><line x1="8" y1="20" x2="16" y2="20"/><line x1="12" y1="16" x2="12" y2="20"/>',link:'<path d="M10 14a4.5 4.5 0 0 0 6.36 0l3-3a4.5 4.5 0 1 0-6.36-6.36l-1.42 1.41"/><path d="M14 10a4.5 4.5 0 0 0-6.36 0l-3 3a4.5 4.5 0 1 0 6.36 6.36l1.42-1.41"/>',palette:'<circle cx="13.5" cy="6.5" r="1"/><circle cx="17.5" cy="10.5" r="1"/><circle cx="8.5" cy="7.5" r="1"/><circle cx="6.5" cy="12.5" r="1"/><path d="M12 3a9 9 0 1 0 0 18 1.5 1.5 0 0 0 1.1-2.5 1.5 1.5 0 0 1 1.1-2.5h2.3A4.5 4.5 0 0 0 21 11.5C21 6.8 16.97 3 12 3z"/>',play:'<polygon points="6 4 20 12 6 20 6 4"/>',inbox:'<polyline points="22 13 16 13 14 16 10 16 8 13 2 13"/><path d="M5 5h14l3 8v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6z"/>',zap:'<polygon points="13 2 4 14 11 14 10 22 20 9 13 9 13 2"/>',wrench:'<path d="M14.7 6.3a4 4 0 1 1 4 4l-9 9-3.5 1 1-3.5 7.5-7.5z"/>',paw:'<circle cx="7.5" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="12" cy="6.8" r="2" fill="currentColor" stroke="none"/><circle cx="16.5" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="18" cy="13.3" r="1.8" fill="currentColor" stroke="none"/><path d="M7.2 16.3c.5-2.9 2.3-4.8 4.8-4.8s4.3 1.9 4.8 4.8c.3 1.8-.9 3.2-2.6 2.6-.8-.3-1.4-.6-2.2-.6s-1.4.3-2.2.6c-1.7.6-2.9-.8-2.6-2.6z" fill="currentColor" stroke="none"/>',edit:'<path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z"/>',check:'<polyline points="5 12 10 17 19 7"/>',signal:'<path d="M2 12a15 15 0 0 1 20 0"/><path d="M5 16a10 10 0 0 1 14 0"/><path d="M9 20a4 4 0 0 1 6 0"/><circle cx="12" cy="20" r="0.5" fill="currentColor"/>',file:'<path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><polyline points="14 3 14 9 20 9"/>',image:'<rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.5"/><polyline points="3 18 9 12 14 17 21 12"/>',sigma:'<polyline points="18 4 6 4 13 12 6 20 18 20"/>',x:'<path d="M18 6 6 18"/><path d="M6 6l12 12"/>',plus:'<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>',mic:'<rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><line x1="12" y1="18" x2="12" y2="21"/><line x1="9" y1="21" x2="15" y2="21"/>',paperclip:'<path d="M21.44 11.05 12.25 20.24a6 6 0 0 1-8.49-8.49l8.84-8.84a4 4 0 1 1 5.66 5.66L9.41 17.41a2 2 0 1 1-2.83-2.83l8.84-8.83"/>'};function J(e,t){var n=Td[e];if(!n)return"";t=t||{};var i=t.size||14,a=t.strokeWidth||1.8,s=t.cls?' class="'+t.cls+'"':"",o=t.fill||"none";return"<svg"+s+' width="'+i+'" height="'+i+'" viewBox="0 0 24 24" fill="'+o+'" stroke="currentColor" stroke-width="'+a+'" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+n+"</svg>"}var mt=null,Vt=0,ur=null,Kr=0;function ji(e){if(!e)return{active:!1};if(e.archived)return{active:!1};var t=!!e.permissionBlocked,n=!!(ae(e)&&e.structuredState&&e.structuredState.inFlight),i=!ae(e)&&e.status==="running";return{active:n||i||t,inFlight:n,ptyRunning:i,permissionBlocked:t}}function Ld(e){var t=Math.max(0,Math.floor(e/1e3));if(t<60)return t+"s";var n=Math.floor(t/60),i=t%60;if(n<60)return n+"m"+(i?" "+i+"s":"");var a=Math.floor(n/60),s=n%60;return a+"h"+(s?" "+s+"m":"")}function Ni(e){var t=ji(e),n=document.querySelector(".main-header-row"),i=n?n.querySelector(".session-status-pill"):null,a=document.querySelector(".chat-messages");if(n&&(n.classList.toggle("is-running",t.active),n.classList.toggle("is-permission-blocked",t.permissionBlocked)),i){var s=i.querySelector(".session-status-elapsed");if(t.inFlight){Kr||(Kr=Vt>0?Vt:Date.now());var o=Ld(Date.now()-Kr);s||(s=document.createElement("span"),s.className="session-status-elapsed",i.appendChild(s)),s.textContent=o}else Kr=0,s&&s.remove()}t.active?ur||(ur=setInterval(function(){var l=r.sessions.find(function(d){return d.id===r.selectedId});Ni(l)},1e3)):ur&&(clearInterval(ur),ur=null)}function Ri(e,t){Ni(t);var n=document.querySelector(".composer-top-row"),i=document.querySelector(".structured-status-bar"),a=document.querySelector(".input-composer");if(!t||!ae(t)){i&&i.remove(),a&&a.classList.remove("in-flight"),clearInterval(mt),mt=null;return}var s=t.structuredState&&t.structuredState.inFlight;if(s){if(mt||(Vt=Date.now()),a&&a.classList.add("in-flight"),!i&&n){var o=document.createElement("div");o.className="structured-status-bar",o.innerHTML='<span class="status-bar-dot"></span><span class="status-bar-label">\u56DE\u590D\u4E2D</span><span class="status-bar-timer">0.0s</span>',n.appendChild(o),i=o}else if(i&&i.classList.contains("completed")){i.classList.remove("completed"),i.style.animation="none",i.querySelector(".status-bar-label").textContent="\u56DE\u590D\u4E2D";var l=i.querySelector(".status-bar-dot");l&&(l.style.display=""),Vt=Date.now()}mt||(mt=setInterval(function(){var c=document.querySelector(".structured-status-bar:not(.completed)");if(!c){clearInterval(mt),mt=null;return}var u=((Date.now()-Vt)/1e3).toFixed(1),f=c.querySelector(".status-bar-timer");f&&(f.textContent=u+"s")},100))}else if(clearInterval(mt),mt=null,a&&a.classList.remove("in-flight"),i&&!i.classList.contains("completed")){var d=Vt?((Date.now()-Vt)/1e3).toFixed(1):"0.0";i.classList.add("completed"),i.querySelector(".status-bar-label").textContent="\u5B8C\u6210",i.querySelector(".status-bar-timer").textContent=d+"s";var l=i.querySelector(".status-bar-dot");l&&(l.style.display="none"),Vt=0,setTimeout(function(){i.parentNode&&i.remove()},3e3)}}function _n(){var e=document.getElementById("chat-output");if(!e)return r.chatScrollElement=null,null;var t=e.querySelector(".chat-messages");return t?(r.chatScrollElement=t,t):(r.chatScrollElement=null,null)}function Fi(e){var t=e||_n();return t?Math.abs(t.scrollTop)<r.chatScrollThreshold:!0}function Bm(e){r.chatStickToBottom=!!e,r.chatStickToBottom&&fr({removeDivider:!0}),Ye()}function fr(e){e=e||{};var t=r.chatUnreadCount>0||r.chatUnreadStartIndex>=0;if(r.chatUnreadCount=0,r.chatUnreadStartIndex=-1,e.removeDivider!==!1){var n=_n();if(n){var i=n.querySelector(".chat-unread-divider");i&&i.parentNode&&i.parentNode.removeChild(i)}}t&&Ye()}function Wi(e){if(e||(e=_n()),!!e){var t=e.querySelector(".chat-unread-divider");if(r.chatUnreadStartIndex<0||r.chatUnreadCount<=0){t&&t.parentNode&&t.parentNode.removeChild(t);return}for(var n=r.chatUnreadStartIndex,i=e.querySelectorAll(".chat-message"),a=null,s=0;s<i.length;s++){var o=i[s].getAttribute("data-msg-index");if(o!==null){var l=parseInt(o,10);if(!isNaN(l)&&l<n){a=i[s];break}}}var d=r.chatUnreadCount+" \u6761\u65B0\u6D88\u606F";t||(t=document.createElement("div"),t.className="chat-unread-divider",t.setAttribute("role","separator"),t.innerHTML='<span class="chat-unread-divider-line"></span><span class="chat-unread-divider-label"></span><span class="chat-unread-divider-line"></span>'),t.querySelector(".chat-unread-divider-label").textContent=d,a?(t.nextSibling!==a||t.parentNode!==e)&&e.insertBefore(t,a):(t.parentNode!==e||t.nextSibling!==null)&&e.appendChild(t)}}function Ye(){var e=document.getElementById("chat-unread-bubble");if(e){var t=r.sessions.find(function(l){return l.id===r.selectedId}),n=!Fi(),i=!!t&&r.currentView==="chat"&&n;e.classList.toggle("visible",i),e.classList.toggle("has-unread",r.chatUnreadCount>0);var a=e.querySelector(".chat-unread-bubble-count");a&&(r.chatUnreadCount>0?(a.textContent=r.chatUnreadCount>99?"99+":String(r.chatUnreadCount),a.classList.add("visible")):(a.textContent="",a.classList.remove("visible")));var s=r.chatUnreadCount>0?r.chatUnreadCount+" \u6761\u65B0\u6D88\u606F\uFF0C\u70B9\u51FB\u67E5\u770B":"\u56DE\u5230\u6700\u65B0\u6D88\u606F";e.setAttribute("aria-label",s),e.setAttribute("title",s);var o=document.getElementById("chat-output");o&&o.classList.toggle("has-jump-btn",i)}}function Bd(e){var t=_n();if(!(!t||!t.isConnected)){r.chatIsProgrammaticScroll=!0;var n=function(){r.chatIsProgrammaticScroll=!1,r.chatStickToBottom=!0,fr({removeDivider:!0}),Ye()};if(e&&typeof t.scrollTo=="function"){t.scrollTo({top:0,behavior:"smooth"}),setTimeout(n,260);return}t.scrollTop=0,requestAnimationFrame(n)}}function pr(){var e=_n();if(!(!e||!e.isConnected)){if(r.chatScrollElement===e&&r.chatScrollHandler){Ye();return}r.chatScrollElement&&(r.chatScrollHandler&&r.chatScrollElement.removeEventListener("scroll",r.chatScrollHandler),r.chatScrollWheelHandler&&r.chatScrollElement.removeEventListener("wheel",r.chatScrollWheelHandler),r.chatScrollTouchStartHandler&&r.chatScrollElement.removeEventListener("touchstart",r.chatScrollTouchStartHandler),r.chatScrollTouchMoveHandler&&r.chatScrollElement.removeEventListener("touchmove",r.chatScrollTouchMoveHandler)),r.chatScrollElement=e,r.chatScrollHandler=function(){if(e.isConnected){if(r.chatIsProgrammaticScroll){Ye();return}var t=Fi(e);t?(r.chatStickToBottom=!0,fr({removeDivider:!0})):r.chatStickToBottom=!1,Ye()}},r.chatScrollWheelHandler=function(t){r.chatIsProgrammaticScroll||t.deltaY<0&&(r.chatStickToBottom=!1,Ye())},r.chatScrollTouchStartHandler=function(t){!t.touches||t.touches.length===0||(r.chatTouchStartY=t.touches[0].clientY)},r.chatScrollTouchMoveHandler=function(t){if(!r.chatIsProgrammaticScroll&&!(!t.touches||t.touches.length===0)){var n=t.touches[0].clientY-r.chatTouchStartY;n>4&&(r.chatStickToBottom=!1,Ye())}},e.addEventListener("scroll",r.chatScrollHandler,{passive:!0}),e.addEventListener("wheel",r.chatScrollWheelHandler,{passive:!0}),e.addEventListener("touchstart",r.chatScrollTouchStartHandler,{passive:!0}),e.addEventListener("touchmove",r.chatScrollTouchMoveHandler,{passive:!0}),Ye()}}function ds(){r.chatRenderedCount>=r.currentMessages.length||(r.chatRenderedCount+=r.chatPageSize,He(!0))}var vr=null;function Md(){vr&&(vr.disconnect(),vr=null);var e=document.getElementById("chat-load-more-sentinel");if(e){var t=e.querySelector(".chat-load-more-btn");t&&(t.onclick=function(){ds()}),!(typeof IntersectionObserver>"u")&&(vr=new IntersectionObserver(function(n){for(var i=0;i<n.length;i++)if(n[i].isIntersecting){ds();break}},{root:_n(),rootMargin:"200px"}),vr.observe(e))}}function ye(){try{r.selectedId?localStorage.setItem("wand-selected-session",r.selectedId):localStorage.removeItem("wand-selected-session")}catch{}}function zi(e){return e&&Array.isArray(e.queuedMessages)?e.queuedMessages:r.structuredInputQueue}function Ad(){var e=r.sessions.find(function(t){return t.id===r.selectedId});return zi(e)}function Jr(e){var t=zi(e);r.structuredInputQueue=Array.isArray(t)?t.slice():[]}function cs(e,t){return!!(e&&Array.isArray(e.content)&&e.content.some(function(n){return n&&typeof n=="object"&&n[t]}))}function qd(e){return!!(e&&e.role==="user"&&cs(e,"__queued"))}function Od(e){return!!(e&&e.role==="assistant"&&cs(e,"__processing"))}function mr(e){if(!Array.isArray(e))return[];for(var t=!1,n=[],i=0;i<e.length;i++){var a=e[i];if(qd(a)||Od(a)){t=!0;continue}n.push(a)}return t?n:e}function Pd(e,t){if(!e||!Array.isArray(e.messages))return e;var n=e.sessionKind||t&&t.sessionKind;if(n!=="structured")return e;var i=mr(e.messages);return i===e.messages?e:Object.assign({},e,{messages:i})}function us(){try{var e=Ad();if(!r.selectedId||e.length===0)return;localStorage.setItem("wand-structured-queue",JSON.stringify({sessionId:r.selectedId,items:e}))}catch{}}function fs(e){try{var t=localStorage.getItem("wand-structured-queue");if(!t)return;var n=JSON.parse(t);(!e||!n||n.sessionId===e)&&localStorage.removeItem("wand-structured-queue")}catch{localStorage.removeItem("wand-structured-queue")}}function ps(){var e=r.sessions.find(function(i){return i.id===r.selectedId});if(e&&Array.isArray(e.queuedMessages)){Jr(e),us();return}try{var t=localStorage.getItem("wand-structured-queue");if(!t)return;var n=JSON.parse(t);if(!n||n.sessionId!==r.selectedId||!Array.isArray(n.items))return;r.structuredInputQueue=n.items.slice(0,10)}catch{r.structuredInputQueue=[]}}function Kt(){try{if(r.crossSessionQueue.length===0){localStorage.removeItem("wand-cross-session-queue");return}localStorage.setItem("wand-cross-session-queue",JSON.stringify(r.crossSessionQueue))}catch{}}function sn(){return r.config&&r.config.defaultCwd||"/tmp"}function vs(){try{var e=localStorage.getItem(an);if(!e)return{};var t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Hd(e){try{if(!e||Object.keys(e).length===0){localStorage.removeItem(an);return}localStorage.setItem(an,JSON.stringify(e))}catch{}}function _d(){var e=r.selectedId;if(!e)return{};var t=vs(),n=t[e];return n&&typeof n=="object"?n:{}}function rt(e){if(!e||!r.selectedId)return null;var t=_d();return typeof t[e]=="boolean"?t[e]:null}function Dd(e,t){if(!(!e||!r.selectedId)){var n=vs(),i=r.selectedId,a=n[i];(!a||typeof a!="object")&&(a={}),a[e]=!!t,n[i]=a,Hd(n)}}function ms(e,t){return e?e.uuid?"msg:"+e.uuid:e.id?"msg:"+e.id:e.messageId?"msg:"+e.messageId:e.turnId?"msg:"+e.turnId:"msg:"+(typeof t=="number"?t:0):"msg:unknown-"+(typeof t=="number"?t:0)}function Jt(e,t){for(var n=[],i=0;i<t.length;i++){var a=t[i];a==null||a===""||n.push(String(a))}return e+":"+n.join(":")}function Dn(e){return!e||!e.dataset?"":e.dataset.expandKey||""}function jd(e,t){if(!e)return!1;switch(t){case"tool-card":case"diff":return!e.classList.contains("collapsed");case"thinking":return e.classList.contains("expanded")&&!e.classList.contains("collapsed");case"inline-tool":return e.classList.contains("inline-tool-open");case"terminal":{var n=e.querySelector(".term-body");return n?n.style.display!=="none":e.dataset.expanded==="true"}case"tool-group":return e.getAttribute("data-expanded")==="true";case"subagent-reply":return e.getAttribute("data-expanded")==="true";case"subagent-panel":return e.getAttribute("data-expanded")==="true";default:return!1}}function Ui(e,t,n){if(e)switch(t){case"tool-card":case"diff":{e.classList.toggle("collapsed",!n);break}case"thinking":{e.classList.toggle("collapsed",!n),e.classList.toggle("expanded",!!n);var i=e.querySelector(".thinking-inline-preview");if(i){var a=e.dataset.thinking||"",s=a.slice(0,57)+(a.length>60?"\u2026":"");i.textContent=n?a:s}var o=e.querySelector(".thinking-inline-action");o&&(o.textContent=n?"\u6536\u8D77":"\u5C55\u5F00");break}case"inline-tool":{e.classList.toggle("inline-tool-open",!!n);var l=e.querySelector(".inline-tool-expanded");l&&(l.style.display=n?"block":"none");break}case"terminal":{var d=e.querySelector(".term-body");d&&(d.style.display=n?"block":"none"),e.dataset.expanded=n?"true":"false";var c=e.querySelector(".term-toggle-icon");c&&(c.textContent=n?"\u25BC":"\u25B6");break}case"tool-group":{e.setAttribute("data-expanded",n?"true":"false");var u=e.querySelector(".tool-group-body");u&&(u.style.display=n?"block":"none");var f=e.querySelector(".tool-group-chevron");f&&(f.style.transform=n?"rotate(180deg)":"");break}case"subagent-reply":{e.setAttribute("data-expanded",n?"true":"false");var v=e.querySelector(".subagent-reply-toggle-label");v&&(v.textContent=n?"\u6536\u8D77":"\u5C55\u5F00");var m=e.querySelector(".subagent-reply-toggle");m&&(m.setAttribute("aria-expanded",n?"true":"false"),m.setAttribute("aria-label",n?"\u6536\u8D77\u5B50\u4EE3\u7406\u56DE\u590D":"\u5C55\u5F00\u5B50\u4EE3\u7406\u56DE\u590D\u5168\u6587"));break}case"subagent-panel":{e.setAttribute("data-expanded",n?"true":"false");for(var y=e.querySelectorAll(".subagent-panel-toggle"),g=0;g<y.length;g++){var b=y[g];b.setAttribute("aria-expanded",n?"true":"false"),b.setAttribute("aria-label",n?"\u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA":"\u5C55\u5F00\u5B50\u4EE3\u7406\u8F93\u51FA");var w=b.querySelector(".subagent-panel-toggle-label");w&&(w.textContent=n?"\u6536\u8D77":"\u5C55\u5F00")}var k=e.querySelector(".subagent-panel-body");k&&(n?k.scrollTop=0:k.scrollTop=k.scrollHeight);break}}}function Cn(e,t){var n=Dn(e);n&&Dd(n,jd(e,t))}function Vi(e){!e||!r.selectedId||e.querySelectorAll("[data-expand-key]").forEach(function(t){var n=Dn(t),i=t.dataset.expandKind||"",a=rt(n);a===null||!i||Ui(t,i,a)})}function It(e){var t=e||{};r.lastRenderedHash=0,r.lastRenderedMsgCount=0,r.lastRenderedEmpty=null,r.renderPending=!1,r.chatRenderedCount=r.chatPageSize,r.askUserSelections={},r.chatScrollElement&&(r.chatScrollHandler&&r.chatScrollElement.removeEventListener("scroll",r.chatScrollHandler),r.chatScrollWheelHandler&&r.chatScrollElement.removeEventListener("wheel",r.chatScrollWheelHandler),r.chatScrollTouchStartHandler&&r.chatScrollElement.removeEventListener("touchstart",r.chatScrollTouchStartHandler),r.chatScrollTouchMoveHandler&&r.chatScrollElement.removeEventListener("touchmove",r.chatScrollTouchMoveHandler)),r.chatScrollElement=null,r.chatScrollHandler=null,r.chatScrollWheelHandler=null,r.chatScrollTouchStartHandler=null,r.chatScrollTouchMoveHandler=null,r.chatIsProgrammaticScroll=!1,t.preserveStickState||(r.chatStickToBottom=!0,r.chatUnreadCount=0,r.chatUnreadStartIndex=-1,r.chatInitialRenderDone=!1)}function Ge(){return r.workingDir||sn()}window.addEventListener("beforeinstallprompt",function(e){e.preventDefault(),r.deferredPrompt=e,r.showInstallPrompt=!0,gs()}),window.addEventListener("online",function(){r.isOnline=!0,Yr()}),window.addEventListener("offline",function(){r.isOnline=!1,Yr()});function Yr(){var e=document.getElementById("offline-banner");if(!r.isOnline&&!e){var t=document.createElement("div");t.id="offline-banner",t.className="offline-banner",t.textContent="You are offline - some features may be limited",document.body.appendChild(t)}else r.isOnline&&e&&e.remove()}function gs(){var e=!!(r.showInstallPrompt&&r.deferredPrompt),t=document.getElementById("pwa-install-button");t&&t.classList.toggle("hidden",!e);var n=document.getElementById("topbar-install-item");n&&n.classList.toggle("hidden",!e)}function Nd(){var e=document.getElementById("app");e&&(e.innerHTML='<div class="boot-loading"><div class="boot-loading-card"><div class="boot-loading-spinner"></div><div class="boot-loading-text">\u6B63\u5728\u8FDE\u63A5 Wand\u2026</div></div></div>')}function gr(e,t){if(r.config&&!document.hidden){var n=t&&t.immediate===!0,i=Date.now();!n&&i-r.lastForegroundSyncAt<1500||(r.lastForegroundSyncAt=i,r.foregroundSyncTimer&&(clearTimeout(r.foregroundSyncTimer),r.foregroundSyncTimer=null),Rd(e,n))}}function Rd(e,t){return!r.config||document.hidden?Promise.resolve():(ql(),t?za("resume-force"):(!r.ws||r.ws.readyState!==WebSocket.OPEN&&r.ws.readyState!==WebSocket.CONNECTING)&&Si(),r.claudeHistoryLoaded&&Ms(),dn({skipSelectedOutputReload:!0}).catch(function(n){console.error("[wand] foreground sync failed:",e,n)}))}function Fd(){window.__wandForegroundSyncBound||(window.__wandForegroundSyncBound=!0,document.addEventListener("visibilitychange",function(){document.hidden?Wa():(gr("visibility"),jr("visibility"))}),window.addEventListener("focus",function(){gr("focus")}),window.addEventListener("pageshow",function(){gr("pageshow")}),window.addEventListener("resume",function(){gr("resume")}),window.addEventListener("wand-android-resume",function(){gr("android-resume",{immediate:!0}),jr("android-resume")}),window.addEventListener("wand-ime-state",function(e){var t=e&&e.detail&&e.detail.state;if(t==="shown"||t==="hidden")try{at("native-ime-"+t,{forceReplay:!0}),gt("native-ime")}catch{}}),window.addEventListener("wand-android-network",function(e){var t=e&&e.detail&&e.detail.state;if(t==="lost"){r.isOnline=!1;try{Yr()}catch{}return}if(t==="available"||t==="changed"||t==="validated"){r.isOnline=!0;try{Yr()}catch{}za("android-network-"+t)}}))}function Wd(){fetch("/api/session-check",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():{authed:!1}}).then(function(e){return!e||!e.authed?(r.loginChecked=!0,Yt(),null):fetch("/api/config",{credentials:"same-origin"}).then(function(t){return t.ok?t.json():(r.loginChecked=!0,Yt(),null)})}).then(function(e){e&&(r.config=e,r.loginChecked=!0,requestAnimationFrame(function(){try{Yt({skipShellChrome:!0})}catch{}Fd(),Ml(),Ht(),ko(),vm(),e.updateAvailable&&e.latestVersion&&ad(e.currentVersion||"-",e.latestVersion),Pn&&vf(),wn&&mf(),r.claudeHistoryLoaded||setTimeout(function(){r.claudeHistoryLoaded||Xr()},600)}))}).catch(function(){if(r.loginChecked=!0,!navigator.onLine){var e=document.getElementById("app");e&&(e.innerHTML='<div class="boot-loading"><div class="boot-loading-card"><div class="boot-loading-text" style="font-size:1.3em;margin-bottom:12px;display:flex;align-items:center;justify-content:center;gap:8px">'+J("signal",{size:20,strokeWidth:1.8})+'<span>\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668</span></div><div class="boot-loading-text" style="opacity:0.7;font-size:0.95em">\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u6216\u786E\u8BA4 Wand \u670D\u52A1\u6B63\u5728\u8FD0\u884C\u3002</div><button onclick="location.reload()" style="margin-top:18px;padding:8px 24px;border-radius:8px;border:1px solid rgba(150,118,85,0.3);background:rgba(255,255,255,0.8);cursor:pointer;font-size:0.95em">\u91CD\u8BD5</button></div></div>'),window.addEventListener("online",function(){location.reload()},{once:!0});return}Yt()})}document.addEventListener("click",function(e){if(!Ne()&&!r.sidebarPinned&&!r.sidebarCollapsed&&r.sessionsDrawerOpen){var t=e.target;!t||!(t instanceof Element)||t.closest("#sessions-drawer")||t.closest("#sessions-toggle-button")||t.closest(".floating-sidebar-toggle")||t.closest(".sidebar-tile-bubble")||t.closest(".modal-backdrop, .modal-overlay, .modal-container, [role='dialog'], [role='menu'], .topbar-more-menu, .sidebar-header-overflow, .folder-picker-dropdown, .path-suggestions, .permission-prompt-overlay, .restart-overlay")||Wu()}},!0),Nd(),Wd();function Yt(e){var t=e&&e.skipShellChrome,n=document.getElementById("app"),i=r.config!==null,a=r.modalOpen,s=!i||!!document.getElementById("output");if(s&&Dr(),document.documentElement.classList.add("no-transition"),r.sidebarPinned&&!r.sidebarCollapsed&&!Ne()&&(r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",!0)),n.innerHTML=i?Vd():Ud(),It(),ru(),Er(),oi(),Gn(we()),di(),t||Sr(),i&&r.filePanelOpen&&Pt(),document.body.offsetHeight,requestAnimationFrame(function(){document.documentElement.classList.remove("no-transition")}),a&&r.modalOpen){var o=document.getElementById("session-modal");if(o){o.classList.remove("hidden");var l=document.getElementById("cwd");l&&(l.value=r.cwdValue),xr()}}if(i&&r.selectedId&&r.gitStatusSessionId!==r.selectedId&&Tn(r.selectedId),i){var d=r.sessions.find(function(c){return c.id===r.selectedId});Ni(d)}}function zd(){var e=r.sessions.find(function(n){return n.id===r.selectedId}),t=e&&e.approvalStats;return!t||t.total===0?'<span class="approval-stats hidden" id="approval-stats"></span>':'<span class="approval-stats" id="approval-stats"><span class="approval-stats-divider"></span><span class="approval-stats-badge" id="approval-stats-badge" title="\u672C\u6B21\u4F1A\u8BDD\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1"><svg class="approval-stats-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg><span class="approval-stats-total">'+t.total+'</span></span><span class="approval-stats-popup" id="approval-stats-popup"><span class="approval-stats-popup-title">\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1</span>'+(t.command>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("terminal",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u547D\u4EE4\u6267\u884C</span><span class="approval-stats-row-count">'+t.command+"</span></span>":"")+(t.file>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("edit",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u6587\u4EF6\u5199\u5165</span><span class="approval-stats-row-count">'+t.file+"</span></span>":"")+(t.tool>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("wrench",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5176\u4ED6\u5DE5\u5177</span><span class="approval-stats-row-count">'+t.tool+"</span></span>":"")+'<span class="approval-stats-row approval-stats-row-total"><span class="approval-stats-row-icon">'+J("sigma",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5408\u8BA1</span><span class="approval-stats-row-count">'+t.total+"</span></span></span></span>"}function Ud(){return r.loginChecked?'<div class="login-container"><div class="login-card"><div class="login-header"><div class="login-logo"><div class="login-logo-icon">W</div><span class="login-logo-text">Wand</span></div><div class="login-subtitle">\u5728\u6D4F\u89C8\u5668\u4E2D\u8FD0\u884C\u672C\u673A\u7EC8\u7AEF</div></div><form id="login-form" class="login-body" autocomplete="on"><input type="text" name="username" autocomplete="username" value="wand" tabindex="-1" aria-hidden="true" style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none" readonly /><p class="login-hint">\u8F93\u5165 Wand \u8BBF\u95EE\u5BC6\u7801\u4EE5\u8FDB\u5165\u63A7\u5236\u53F0\u3002</p><div class="field"><label class="field-label" for="password">\u5BC6\u7801</label><div class="password-field"><input id="password" type="password" class="field-input password-input" placeholder="\u8F93\u5165\u8BBF\u95EE\u5BC6\u7801" autocomplete="current-password" data-error="false" aria-describedby="password-hint login-error" aria-invalid="false" /><button id="toggle-password-button" type="button" class="password-toggle" aria-label="\u663E\u793A\u5BC6\u7801" aria-pressed="false">\u663E\u793A</button></div><p id="password-hint" class="hint">\u4F7F\u7528\u4F60\u5728 Wand \u4E2D\u8BBE\u7F6E\u7684\u8BBF\u95EE\u5BC6\u7801\u3002</p><p id="login-error" class="error-message hidden" role="alert"></p></div><button id="login-button" type="submit" class="btn btn-primary btn-block">\u8FDB\u5165\u63A7\u5236\u53F0</button>'+(ca()?'<button id="login-switch-server-button" class="btn btn-ghost btn-block login-switch-server" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="8" rx="2"/><rect x="2" y="13" width="20" height="8" rx="2"/><line x1="6" y1="7" x2="6.01" y2="7"/><line x1="6" y1="17" x2="6.01" y2="17"/></svg><span>\u5207\u6362\u670D\u52A1\u5668</span></button>':"")+"</form></div></div>":'<div class="login-container"><div class="login-card login-card-loading"><div class="login-header"><div class="login-logo"><div class="login-logo-icon">W</div><span class="login-logo-text">Wand</span></div><div class="login-subtitle">\u6B63\u5728\u6062\u590D\u767B\u5F55\u72B6\u6001</div></div><div class="login-body"><div class="login-status"><span class="login-spinner" aria-hidden="true"></span><div><p class="login-hint">\u6B63\u5728\u68C0\u67E5\u672C\u5730\u767B\u5F55\u4F1A\u8BDD\uFF0C\u8BF7\u7A0D\u5019\u3002</p><p class="login-muted">\u5982\u679C\u4F60\u521A\u5237\u65B0\u9875\u9762\uFF0C\u8FD9\u662F\u6B63\u5E38\u73B0\u8C61\u3002</p></div></div></div></div></div>'}function Vd(){var e="<\/script>",t=r.sessions.find(function(y){return y.id===r.selectedId}),n=t?Ti(t.command):"\u672A\u9009\u62E9\u4F1A\u8BDD",i=t?t.mode+" | "+t.status:"\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB",a=r.selectedId&&r.drafts[r.selectedId]||"",s=r.sessionsDrawerOpen?" open":"",o=As()?" open":"",l=Tu(),d=_t(l,r.chatMode),c=Ne(),u=!!r.sidebarPinned&&!!r.sidebarCollapsed,f=u||!c&&(!!r.sidebarPinned||!!r.sessionsDrawerOpen),v=u?" sidebar-collapsed":"",m=u?" collapsed":"";return'<div class="app-container"><div id="sessions-drawer-backdrop" class="drawer-backdrop'+o+'"></div><div class="main-layout'+(r.sessionsDrawerOpen?" sidebar-open":"")+(f?" sidebar-pinned":"")+v+'"><aside id="sessions-drawer" class="sidebar'+s+(f?" pinned":"")+m+'"><div class="sidebar-header"><div class="sidebar-header-main"><div class="topbar-logo-icon">W</div><span class="sidebar-title">\u4F1A\u8BDD</span><span class="session-count" id="session-count">'+String(r.sessions.length)+'</span></div><div class="sidebar-header-actions"><div class="sidebar-header-more"><button id="sidebar-more-btn" class="btn btn-ghost btn-sm" type="button" title="\u66F4\u591A\u64CD\u4F5C"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1.5"/><circle cx="12" cy="12" r="1.5"/><circle cx="12" cy="19" r="1.5"/></svg></button><div class="sidebar-header-overflow" id="sidebar-overflow-menu"><button class="overflow-item" id="sidebar-home-btn" type="button"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg><span>\u56DE\u5230\u9996\u9875</span></button><button class="overflow-item" id="sidebar-refresh-btn" type="button"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg><span>\u5237\u65B0\u9875\u9762</span></button></div></div><button id="sidebar-pin-btn" class="btn btn-ghost btn-sm sidebar-pin-toggle'+(r.sidebarPinned?" pinned":"")+'" type="button" title="'+(r.sidebarPinned?"\u5DF2\u56FA\u5B9A\u5E38\u9A7B\uFF08\u70B9\u51FB\u89E3\u9664\u9501\u5B9A\uFF09":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B")+'" aria-label="'+(r.sidebarPinned?"\u89E3\u9664\u56FA\u5B9A\u5E38\u9A7B":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B")+'" aria-pressed="'+(r.sidebarPinned?"true":"false")+'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="17" x2="12" y2="22"/><path d="M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24z"/></svg></button><button id="sidebar-collapse-btn" class="btn btn-ghost btn-sm sidebar-collapse-toggle'+(u?" collapsed":"")+'" type="button" title="'+(u?"\u5C55\u5F00\u4E3A\u5168\u5C3A\u5BF8":"\u6536\u8D77\u4E3A\u7A84\u6761")+'" aria-label="'+(u?"\u5C55\u5F00\u4E3A\u5168\u5C3A\u5BF8":"\u6536\u8D77\u4E3A\u7A84\u6761")+'">'+(u?'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="10 6 16 12 10 18"/><line x1="20" y1="5" x2="20" y2="19"/></svg>':'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="14 6 8 12 14 18"/><line x1="4" y1="5" x2="4" y2="19"/></svg>')+'</button><button id="close-drawer-button" class="btn btn-ghost btn-icon sidebar-close drawer-close-btn" type="button" aria-label="\u5173\u95ED\u83DC\u5355"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div></div><div class="sidebar-body"><div id="sessions-panel"><div class="sessions-list" id="sessions-list">'+Ji()+'</div></div></div><div class="sidebar-footer"><button id="drawer-new-session-button" class="btn btn-primary btn-block"><span>+</span> \u65B0\u4F1A\u8BDD</button><div class="sidebar-footer-actions"><button id="file-panel-toggle-btn" class="btn btn-ghost btn-sm'+(r.filePanelOpen?" active":"")+'" type="button" title="\u67E5\u770B\u6587\u4EF6"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg><span>\u6587\u4EF6</span></button><button id="settings-button" class="btn btn-ghost btn-sm" type="button" title="\u8BBE\u7F6E"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg><span>\u8BBE\u7F6E</span></button><button id="pwa-install-button" class="btn btn-ghost btn-sm hidden" title="\u5B89\u88C5\u5E94\u7528"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg><span>\u5B89\u88C5</span></button>'+(ca()?'<button id="switch-server-button" class="btn btn-ghost btn-sm sidebar-switch-server" type="button" title="\u5207\u6362\u670D\u52A1\u5668"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="8" rx="2"/><rect x="2" y="13" width="20" height="8" rx="2"/><line x1="6" y1="7" x2="6.01" y2="7"/><line x1="6" y1="17" x2="6.01" y2="17"/></svg><span>\u5207\u6362</span></button>':"")+'<button id="logout-button" class="btn btn-ghost btn-sm sidebar-logout" type="button" title="\u9000\u51FA\u767B\u5F55"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg><span>\u9000\u51FA</span></button></div></div></aside><main class="main-content"><div class="main-header-row"><div class="topbar-left"><button id="sessions-toggle-button" class="floating-sidebar-toggle'+(r.sessionsDrawerOpen?" active":"")+'" aria-label="\u5207\u6362\u4F1A\u8BDD\u4FA7\u680F" type="button"><span class="hamburger-icon"><span></span><span></span><span></span></span></button><span class="topbar-brand" aria-hidden="true">W</span></div><div class="topbar-center">'+(t?'<span class="topbar-session-title" title="'+p(t.command||"")+'">'+p(Ti(t.command))+'</span><span class="session-status-pill '+$s(t)+'" title="'+p(wr(t))+'"><span class="session-status-dot"></span><span class="session-status-text">'+p(wr(t))+'</span></span><span class="current-task hidden" id="current-task"></span>'+(t.cwd?'<span class="topbar-cwd" id="topbar-cwd" title="'+p(t.cwd)+'" role="button" tabindex="0">'+p(t.cwd)+"</span>":""):'<span class="topbar-tagline">Wand \u63A7\u5236\u53F0</span><span class="current-task hidden" id="current-task"></span>')+'</div><div class="topbar-right"><button id="topbar-file-button" class="topbar-btn square'+(r.filePanelOpen?" active":"")+'" type="button" aria-label="\u6587\u4EF6" title="\u67E5\u770B\u6587\u4EF6\uFF08\u53EF\u4FEE\u6539\u8DEF\u5F84\uFF09"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg></button><span id="topbar-git-slot" class="topbar-git-slot">'+hs()+"</span>"+(t?Kd(t):"")+'</div></div><div id="file-panel-backdrop" class="file-panel-backdrop'+(r.filePanelOpen?" open":"")+'"></div><div id="file-side-panel" class="file-side-panel'+(r.filePanelOpen?" open":"")+'"><div class="file-side-panel-header"><div class="file-side-panel-title-group"><span class="file-side-panel-icon">'+Ae("folder-open",{size:16})+'</span><span class="file-side-panel-title">\u6587\u4EF6</span></div><div class="file-side-panel-header-actions"><button class="file-side-panel-iconbtn" id="file-explorer-refresh" type="button" title="\u5237\u65B0" aria-label="\u5237\u65B0\u6587\u4EF6\u5217\u8868">'+Ae("refresh",{size:15})+'</button><button id="file-side-panel-close" class="file-side-panel-iconbtn close" type="button" aria-label="\u5173\u95ED\u6587\u4EF6\u9762\u677F" title="\u5173\u95ED">'+Ae("x",{size:16})+'</button></div></div><div class="file-side-panel-body"><div class="file-explorer-header"><button class="file-explorer-up" id="file-explorer-up" type="button" title="\u8FD4\u56DE\u4E0A\u7EA7\u76EE\u5F55" aria-label="\u8FD4\u56DE\u4E0A\u7EA7\u76EE\u5F55">'+Ae("arrow-up",{size:15})+'</button><input type="text" class="file-explorer-path" id="file-explorer-cwd" value="'+p(t&&t.cwd?t.cwd:sn())+'" title="'+p(t&&t.cwd?t.cwd:sn())+'" placeholder="\u8F93\u5165\u8DEF\u5F84\u5E76\u56DE\u8F66..." spellcheck="false" autocomplete="off" autocapitalize="off" autocorrect="off" aria-label="\u5F53\u524D\u8DEF\u5F84\uFF0C\u53EF\u76F4\u63A5\u4FEE\u6539\u540E\u56DE\u8F66" /></div><div class="file-search-box"><span class="file-search-icon">'+Ae("search",{size:14})+'</span><input type="text" id="file-search-input" class="file-search-input" placeholder="\u641C\u7D22\u5F53\u524D\u76EE\u5F55\u2026" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /><button class="file-search-clear" id="file-search-clear" type="button" aria-label="\u6E05\u9664\u641C\u7D22" title="\u6E05\u9664">'+Ae("x",{size:13})+'</button></div><div class="file-explorer" id="file-explorer">'+Bc(t&&t.cwd?t.cwd:sn())+'</div></div></div><div id="output" class="terminal-container'+(r.selectedId?"":" hidden")+' active"><div class="terminal-scale-overlay" aria-label="\u7EC8\u7AEF\u7F29\u653E\u63A7\u4EF6"><button id="terminal-scale-down-top" class="terminal-scale-overlay-btn terminal-scale-btn" type="button" title="\u7F29\u5C0F">\u2212</button><span class="terminal-scale-overlay-label terminal-scale-label" id="terminal-scale-label-top">'+Math.round(r.terminalScale*100)+'%</span><button id="terminal-scale-up-top" class="terminal-scale-overlay-btn terminal-scale-btn" type="button" title="\u653E\u5927">+</button><span class="terminal-scale-overlay-divider"></span><button id="page-refresh-btn" class="terminal-scale-overlay-btn" type="button" title="\u5237\u65B0\u9875\u9762">\u21BB</button></div><button id="terminal-jump-bottom" class="terminal-jump-bottom'+(r.showTerminalJumpToBottom?" visible":"")+'" type="button" title="\u56DE\u5230\u5E95\u90E8" aria-label="\u56DE\u5230\u5E95\u90E8"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8l4.5 4.5L12.5 8"/></svg></button></div><div id="chat-output" class="chat-container hidden"><button id="chat-unread-bubble" class="chat-unread-bubble" type="button" title="\u56DE\u5230\u6700\u65B0\u6D88\u606F" aria-label="\u56DE\u5230\u6700\u65B0\u6D88\u606F"><span class="chat-unread-bubble-icon"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8l4.5 4.5L12.5 8"/></svg></span><span class="chat-unread-bubble-count" aria-hidden="true"></span></button><div id="queue-bar-host" class="queue-bar-host" hidden></div></div><div id="blank-chat" class="blank-chat'+(r.selectedId?" hidden":"")+'"><div class="blank-chat-inner"><div class="blank-chat-logo">W</div><h2 class="blank-chat-title">Wand</h2><p class="blank-chat-subtitle">\u652F\u6301\u7EC8\u7AEF PTY \u4F1A\u8BDD\u4E0E\u7ED3\u6784\u5316 chat \u4F1A\u8BDD\uFF0C\u4E24\u79CD\u6A21\u5F0F\u53EF\u5E76\u5B58\u3002</p><div class="blank-chat-tools"><button class="blank-chat-tool-btn" id="welcome-tool-claude" type="button"><span class="tool-icon">'+J("terminal",{size:16,strokeWidth:1.8})+'</span>\u65B0\u5EFA\u7EC8\u7AEF\u4F1A\u8BDD</button><button class="blank-chat-tool-btn" id="welcome-tool-codex" type="button"><span class="tool-icon tool-icon-text">\u2318</span>\u65B0\u5EFA Codex \u4F1A\u8BDD</button><button class="blank-chat-tool-btn" id="welcome-tool-structured" type="button"><span class="tool-icon">'+J("chat",{size:16,strokeWidth:1.8})+'</span>\u65B0\u5EFA\u7ED3\u6784\u5316\u4F1A\u8BDD</button></div><div class="blank-chat-cwd-wrap"><div class="blank-chat-cwd" id="blank-chat-cwd" role="button" tabindex="0" title="\u70B9\u51FB\u5207\u6362\u5DE5\u4F5C\u76EE\u5F55"><span class="blank-chat-cwd-icon">'+J("folder",{size:13,strokeWidth:1.8})+'</span><span class="blank-chat-cwd-path" id="blank-chat-cwd-path">'+p(Ge())+'</span><span class="blank-chat-cwd-arrow" id="blank-chat-cwd-arrow">'+J("chevronDown",{size:11,strokeWidth:2})+'</span></div><div class="blank-chat-cwd-dropdown hidden" id="blank-chat-cwd-dropdown"></div></div></div></div><div class="input-panel'+(r.selectedId?"":" hidden")+'"><div class="composer-top-row"><div id="todo-progress" class="todo-progress hidden"><div class="todo-progress-header" id="todo-progress-toggle"><div class="todo-progress-left"><span class="todo-progress-ring" id="todo-progress-ring" aria-hidden="true" style="--progress:0"><svg width="16" height="16" viewBox="0 0 36 36"><circle class="todo-ring-track" cx="18" cy="18" r="15.5" fill="none" stroke-width="4"/><circle class="todo-ring-fill" cx="18" cy="18" r="15.5" fill="none" stroke-width="4" stroke-linecap="round"/></svg></span><span class="todo-progress-counter" id="todo-progress-counter"></span><span class="todo-progress-task" id="todo-progress-task"></span></div><svg class="todo-progress-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 15 12 9 18 15"/></svg></div></div><div class="todo-progress-body hidden" id="todo-progress-body"><ul class="todo-progress-list" id="todo-progress-list"></ul></div></div><div class="input-composer'+(a?" has-text":"")+'"><div class="composer-status-row" id="composer-status-row">'+Pu(t)+'<span class="permission-actions hidden" id="permission-actions"><span class="permission-actions-label" id="permission-actions-label">\u7B49\u5F85\u6388\u6743</span><button id="approve-permission-btn" class="btn btn-permission btn-permission-approve" type="button">\u6279\u51C6</button><button id="deny-permission-btn" class="btn btn-permission btn-permission-deny" type="button">\u62D2\u7EDD</button></span>'+zd()+'</div><div class="composer-main-row"><div class="composer-actions-left"><button id="attach-btn" class="btn-circle btn-circle-action" type="button" title="\u66F4\u591A" aria-label="\u66F4\u591A" aria-haspopup="menu" aria-expanded="false">'+J("plus",{size:18,strokeWidth:2.2})+'</button><input type="file" id="file-upload-input" multiple tabindex="-1" style="position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0,0,0,0);pointer-events:none"></div><div class="composer-input-wrap"><textarea id="input-box" class="input-textarea" placeholder="'+co(t,r.terminalInteractive)+'" rows="1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" enterkeyhint="send">'+p(a)+'</textarea><button id="prompt-optimize-btn" class="prompt-optimize-btn" type="button" title="\u63D0\u793A\u8BCD\u4F18\u5316\uFF08AI\uFF09" aria-label="\u63D0\u793A\u8BCD\u4F18\u5316"><svg class="prompt-optimize-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l1.6 4.4L18 9l-4.4 1.6L12 15l-1.6-4.4L6 9l4.4-1.6z" fill="currentColor" opacity="0.25"/><path d="M12 3l1.6 4.4L18 9l-4.4 1.6L12 15l-1.6-4.4L6 9l4.4-1.6z"/><path d="M19 14l.7 1.9L21.6 17l-1.9.7L19 19.6l-.7-1.9L16.4 17l1.9-.7z" fill="currentColor" opacity="0.35"/><path d="M5 4l.5 1.4L7 6l-1.5.6L5 8l-.5-1.4L3 6l1.5-.6z" fill="currentColor" opacity="0.35"/></svg><span class="prompt-optimize-spinner" aria-hidden="true"></span></button><div class="voice-input-mode hidden" id="voice-input-mode"><button id="voice-record-btn" class="voice-record-btn" type="button"><span class="voice-record-pulse" aria-hidden="true"></span><span class="voice-record-label">\u6309\u4F4F \u8BF4\u8BDD</span></button><button id="voice-cancel-btn" class="voice-cancel-btn" type="button" title="\u9000\u51FA\u8BED\u97F3\u6A21\u5F0F" aria-label="\u9000\u51FA\u8BED\u97F3\u6A21\u5F0F">'+J("x",{size:14,strokeWidth:2})+'</button></div></div><div class="composer-actions-right"><button id="stop-button" class="btn-circle btn-circle-stop hidden" title="\u505C\u6B62"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><rect x="3" y="3" width="10" height="10" rx="2"/></svg></button><button id="send-input-button" class="btn-circle btn-circle-send" title="\u53D1\u9001"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg></button></div></div><div id="attachment-preview" class="attachment-preview hidden"></div>'+(t?(function(){var y="";if((t.provider==="claude"||t.provider==="codex")&&t.claudeSessionId){var g=t.provider==="codex"?"\u70B9\u51FB\u590D\u5236 Codex thread ID":"\u70B9\u51FB\u590D\u5236 Claude \u4F1A\u8BDD ID";y+='<span id="claude-session-id-badge" class="claude-session-id-badge" data-claude-id="'+p(t.claudeSessionId)+'" title="'+g+'">'+J("cloud",{size:11,strokeWidth:1.7,cls:"claude-session-id-icon"})+'<span class="claude-session-id-text">'+p(t.claudeSessionId.slice(0,8))+"</span></span>"}if(t.exitCode!==void 0&&t.exitCode!==null){var b=!ae(t)||t.exitCode!==0;b&&(y&&(y+='<span class="session-info-separator">|</span>'),y+='<span id="session-exit-display" class="session-exit-display">\u9000\u51FA\u7801='+t.exitCode+"</span>")}return y?'<div class="input-session-info-bar">'+y+"</div>":""})():"")+'</div><div class="composer-plus-popover hidden" id="composer-plus-popover" role="menu" aria-label="\u66F4\u591A\u64CD\u4F5C"><button class="plus-popover-item" id="plus-attach-item" type="button" role="menuitem">'+J("paperclip",{size:14,strokeWidth:1.8,cls:"plus-popover-icon"})+'<span class="plus-popover-label">\u4E0A\u4F20\u9644\u4EF6</span></button><button class="plus-popover-item'+(r.terminalInteractive?" is-on":"")+'" id="terminal-interactive-toggle-top" type="button" role="menuitemcheckbox" aria-checked="'+(r.terminalInteractive?"true":"false")+'">'+J("keyboard",{size:14,strokeWidth:1.8,cls:"plus-popover-icon"})+'<span class="plus-popover-label">\u7EC8\u7AEF\u4EA4\u4E92</span><span class="plus-popover-toggle-state">'+(r.terminalInteractive?"\u5F00":"\u5173")+'</span></button><div class="plus-popover-sep" aria-hidden="true"></div><div class="plus-popover-trio-wrap">'+fa(t,{kind:"popover"})+'</div></div><div class="voice-transcript-bubble hidden" id="voice-transcript-bubble" aria-live="polite"><div class="voice-transcript-text" id="voice-transcript-text"></div><div class="voice-transcript-hint" id="voice-transcript-hint"><span class="voice-wave" aria-hidden="true"><i></i><i></i><i></i><i></i></span><span class="voice-transcript-status" id="voice-transcript-status">\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88</span></div><span class="voice-bubble-arrow" aria-hidden="true"></span></div><p id="action-error" class="error-message hidden"></p></div><section id="folder-picker-modal" class="modal-backdrop hidden"><div class="modal folder-picker-modal"><div class="modal-header"><h2 class="modal-title">\u9009\u62E9\u5DE5\u4F5C\u76EE\u5F55</h2><button id="close-folder-picker" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body"><div class="folder-picker-quick-row"><button class="folder-picker-quick-btn btn-with-icon" data-path="/tmp">'+J("trash",{size:13,strokeWidth:1.7})+'<span>\u4E34\u65F6\u76EE\u5F55</span></button><button class="folder-picker-quick-btn btn-with-icon" data-path="/">'+J("folder",{size:13,strokeWidth:1.7})+'<span>\u6839\u76EE\u5F55</span></button></div><div id="folder-breadcrumb" class="folder-breadcrumb"></div><div class="folder-picker"><span class="folder-picker-icon">'+J("folder",{size:15,strokeWidth:1.7})+'</span><input type="text" id="folder-picker-input" class="folder-picker-input" value="" placeholder="\u8F93\u5165\u6216\u9009\u62E9\u5DE5\u4F5C\u76EE\u5F55..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></div><div id="folder-picker-dropdown" class="folder-picker-dropdown hidden"></div><div id="folder-picker-validation" class="folder-picker-validation"></div></div></div></section></main></div></div>'+Zc()+ic()+ac()+ks()}function hs(){if(!r.selectedId||!r.gitStatus||!r.gitStatus.isGit||r.gitStatusSessionId!==r.selectedId)return"";var e=r.gitStatus.branch||"?",t=r.gitStatus.modifiedCount||0,n=e+(t?" \xB7 "+t+" \u4E2A\u6587\u4EF6\u5F85\u63D0\u4EA4":" \xB7 \u5DE5\u4F5C\u533A\u5E72\u51C0");return'<button id="topbar-git-badge" class="topbar-git-badge" type="button" title="'+p(n)+'" aria-label="\u5FEB\u6377\u63D0\u4EA4"><svg class="topbar-git-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="9" r="2"/><path d="M6 8v8"/><path d="M18 11v1a3 3 0 0 1-3 3H9"/></svg><span class="topbar-git-branch">'+p(e)+"</span>"+(t>0?'<span class="topbar-git-count">\xB7'+t+"</span>":'<span class="topbar-git-clean" aria-hidden="true">\u2713</span>')+"</button>"}function Ki(){var e=document.getElementById("topbar-git-slot");if(e){e.innerHTML=hs();var t=document.getElementById("topbar-git-badge");t&&t.addEventListener("click",function(n){n.preventDefault(),bs()})}}function Kd(e){if(!e)return"";var t=r.topbarMoreOpen,n=!!e.claudeSessionId,i=!!e.cwd,a=e.worktreeEnabled&&e.worktree&&e.worktree.branch&&e.worktree.path,s=e.worktreeMergeStatus==="merged"&&e.worktreeMergeInfo&&e.worktreeMergeInfo.cleanupDone===!1,o=e.status==="running"||e.worktreeMergeStatus==="merging",l=a&&e.worktreeMergeStatus!=="merged",d=s,c=n||i||!0,u=l||d||!0,f='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',v='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.5 19a4.5 4.5 0 1 0-1.5-8.74A6 6 0 1 0 6 14h11.5z"/></svg>',m='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>',y='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="9" x2="20" y2="9"/><line x1="4" y1="15" x2="20" y2="15"/><line x1="10" y1="3" x2="8" y2="21"/><line x1="16" y1="3" x2="14" y2="21"/></svg>',g='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 7h10"/><path d="M7 12h10"/><path d="M7 17h10"/><path d="M5 7l-2 2 2 2"/><path d="M19 15l2 2-2 2"/></svg>',b='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg>',w="";if(n){var k=e.provider==="codex"?"\u590D\u5236 Codex thread ID":"\u590D\u5236 Claude \u4F1A\u8BDD ID";w+='<button class="topbar-more-item" data-action="copy-claude-session-id" type="button" role="menuitem">'+v+"<span>"+k+"</span></button>"}i&&(w+='<button class="topbar-more-item" data-action="copy-cwd" type="button" role="menuitem">'+m+"<span>\u590D\u5236\u5DE5\u4F5C\u76EE\u5F55</span></button>"),w+='<button class="topbar-more-item" data-action="copy-session-id" type="button" role="menuitem">'+y+"<span>\u590D\u5236\u4F1A\u8BDD ID</span></button>";var E="";l?E+='<button class="topbar-more-item" data-action="worktree-merge" type="button" role="menuitem"'+(o?" disabled":"")+">"+g+"<span>\u5408\u5E76\u5230\u4E3B\u5206\u652F\u2026</span></button>":d&&(E+='<button class="topbar-more-item" data-action="worktree-cleanup" type="button" role="menuitem">'+g+"<span>\u91CD\u8BD5 worktree \u6E05\u7406</span></button>"),E+='<button class="topbar-more-item topbar-more-item-danger" data-action="delete-session" type="button" role="menuitem">'+b+"<span>\u5220\u9664\u5F53\u524D\u4F1A\u8BDD</span></button>";var L=c&&u?'<div class="topbar-more-divider" role="separator"></div>':"";return'<div class="topbar-more-wrap"><button id="topbar-more-button" class="topbar-btn square'+(t?" active":"")+'" type="button" aria-label="\u5F53\u524D\u4F1A\u8BDD\u64CD\u4F5C" aria-haspopup="menu" aria-expanded="'+(t?"true":"false")+'" title="\u5F53\u524D\u4F1A\u8BDD\u64CD\u4F5C"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg></button><div id="topbar-more-menu" class="topbar-more-menu'+(t?"":" hidden")+'" role="menu" aria-label="\u5F53\u524D\u4F1A\u8BDD">'+w+L+E+"</div></div>"}function Tn(e,t){if(!e)return Promise.resolve(null);var n=t&&t.force,i=Date.now();if(!n&&r.gitStatusSessionId===e&&r.gitStatus&&i-r.gitStatusLastFetchAt<1e3)return Promise.resolve(r.gitStatus);if(r.gitStatusInflight&&r.gitStatusInflight.sessionId===e)return r.gitStatusInflight.promise;r.gitStatusLoading=!0;var a=fetch("/api/sessions/"+encodeURIComponent(e)+"/git-status",{credentials:"same-origin"}).then(function(s){return s.ok?s.json():{isGit:!1}}).then(function(s){return r.gitStatus=s||{isGit:!1},r.gitStatusSessionId=e,r.gitStatusLastFetchAt=Date.now(),Ki(),s}).catch(function(){return r.gitStatus={isGit:!1},r.gitStatusSessionId=e,r.gitStatusLastFetchAt=Date.now(),Ki(),null}).finally(function(){r.gitStatusLoading=!1,r.gitStatusInflight&&r.gitStatusInflight.sessionId===e&&(r.gitStatusInflight=null)});return r.gitStatusInflight={sessionId:e,promise:a},a}var Ln=null,Bn=null,Mm=null;function Jd(e){return e==="commit-tag"||e==="commit-tag-push"||e==="commit-push"?e:"commit"}function Yd(e){return e=Jd(e),e==="commit-tag-push"?{action:e,label:"Commit + Tag + Push",verb:"\u63D0\u4EA4\u3001\u6253 Tag \u5E76\u63A8\u9001",withTag:!0,push:!0,tone:"all"}:e==="commit-tag"?{action:e,label:"Commit + Tag",verb:"\u63D0\u4EA4\u5E76\u6253 Tag",withTag:!0,push:!1,tone:"tag"}:e==="commit-push"?{action:e,label:"Commit + Push",verb:"\u63D0\u4EA4\u5E76\u63A8\u9001",withTag:!1,push:!0,tone:"push"}:{action:"commit",label:"Commit",verb:"\u4EC5\u63D0\u4EA4",withTag:!1,push:!1,tone:"commit"}}function bs(){if(r.selectedId){r.quickCommitOpen=!0,r.quickCommitSubmitting=!1,r.quickCommitAutoGenerating=!1,r.quickCommitError="",r.quickCommitForm={customMessage:"",tag:"",tagEdited:!1},r.quickCommitPushing=!1,r.quickCommitPushError="",r.quickCommitResult=null,r.quickCommitDragAction="commit",Qn(),un(),$n(),Ot();var e=document.getElementById("quick-commit-modal");e&&(e.classList.remove("hidden"),Ue=document.activeElement,ui(e)),Ln&&document.removeEventListener("keydown",Ln),Ln=function(t){t.key==="Escape"&&r.quickCommitOpen&&!r.quickCommitSubmitting&&!r.quickCommitPushing&&jn()},document.addEventListener("keydown",Ln),Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()})}}function jn(){r.quickCommitOpen=!1,r.quickCommitSubmitting=!1,r.quickCommitError="",r.quickCommitResult=null,r.quickCommitDragAction="commit";var e=document.getElementById("quick-commit-modal");e&&e.classList.add("hidden"),Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ln&&(document.removeEventListener("keydown",Ln),Ln=null),Bn&&(Bn(),Bn=null),Ue&&typeof Ue.focus=="function"&&Ue.focus()}function Ot(){var e=document.getElementById("quick-commit-modal");if(e){Bn&&(Bn(),Bn=null);var t=ks(),n=document.createElement("div");n.innerHTML=t;var i=n.querySelector("#quick-commit-modal");i&&(e.innerHTML=i.innerHTML,ys())}}function ys(){var e=document.getElementById("quick-commit-close-btn");e&&e.addEventListener("click",jn);var t=document.getElementById("quick-commit-cancel-btn");t&&t.addEventListener("click",jn);var n=document.getElementById("quick-commit-ai-btn");n&&n.addEventListener("click",Xd);var i=document.getElementById("quick-commit-message");i&&(i.addEventListener("input",function(){r.quickCommitForm.customMessage=i.value}),i.addEventListener("keydown",function(o){(o.metaKey||o.ctrlKey)&&o.key==="Enter"&&(o.preventDefault(),Nn("commit"))}));var a=document.getElementById("quick-commit-tag");a&&(a.addEventListener("input",function(){r.quickCommitForm.tag=a.value,r.quickCommitForm.tagEdited=!0}),a.addEventListener("keydown",function(o){o.key==="Enter"&&(o.preventDefault(),Nn("commit-tag"))}));var s=document.getElementById("quick-commit-push-after-btn");s&&s.addEventListener("click",function(){var o=r.quickCommitResult||{};Zd({pushCommits:!0,pushTags:!!o.tagName,closeOnSuccess:!0})}),$d()}function Gd(e){var t=!!(e&&e.tag),n=!!(e&&e.push);return t&&n?"commit-tag-push":t?"commit-tag":n?"commit-push":"commit"}var Qd=58;function ws(e){return e==="tag"?{action:"commit-tag",sub:!1}:e==="push"?{action:"commit-push",sub:!1}:e==="sub"?{action:"commit",sub:!0}:{action:"commit",sub:!1}}function $d(){var e=document.getElementById("qc-dock-field"),t=document.getElementById("qc-dock-stage"),n=document.getElementById("qc-dock-launch"),i=document.getElementById("qc-dock-cluster");if(!e||!t||!n||!i)return;var a=["commit","tag","push"],s={};if(a.forEach(function(C){s[C]=e.querySelector('[data-chip="'+C+'"]')}),!s.commit||!s.tag||!s.push)return;s.sub=e.querySelector('[data-chip="sub"]');var o=!!s.sub,l=o?a.concat(["sub"]):a;function d(C){return s[C]?s[C].offsetWidth:90}function c(){return s.commit?s.commit.offsetHeight:38}function u(){return window.matchMedia&&window.matchMedia("(max-width: 720px)").matches}function f(){var C=e.clientWidth,A=e.clientHeight,B=c(),z=d("commit"),se=d("tag"),ne=d("push");if(u()&&o){var K=Math.max(8,A*.2-B/2),re=Math.min(A-B-8,A*.7-B/2),U=function(ue){return Math.max(8,C*.27-ue/2)},q=function(ue){return Math.min(C-ue-8,C*.73-ue/2)};return{commit:{x:U(z),y:K},tag:{x:q(se),y:K},push:{x:U(ne),y:re},sub:{x:q(d("sub")),y:re}}}var N=u(),V=N?Math.max(8,A*.18-B/2):Math.max(8,A*.12),te=N?Math.min(A-B-8,A*.72-B/2):Math.min(A-B-8,A*.88-B),X=N?.24:.28,oe=N?.76:.72,le={commit:{x:Math.max(8,(C-z)/2),y:V},tag:{x:Math.max(8,C*X-se/2),y:te},push:{x:Math.min(C-ne-8,C*oe-ne/2),y:te}};if(o){var ce=d("sub");le.sub={x:Math.min(C-ce-8,C*.94-ce/2),y:Math.max(8,Math.min(A-B-8,(A-B)/2))}}return le}var v={};function m(C,A,B){s[C]&&(s[C].style.transform="translate("+A.toFixed(1)+"px,"+B.toFixed(1)+"px)")}function y(C){v=f(),l.forEach(function(A){s[A].classList.toggle("qc-chip--anim",!!C),m(A,v[A].x,v[A].y)})}y(!1);var g=null;function b(C,A,B){var z=c(),se=5,ne=l.filter(function(N){return C.indexOf(N)>=0}),K=ne.reduce(function(N,V){return N+d(V)},0)+Math.max(0,ne.length-1)*se,re=e.clientHeight,U=A-K/2,q=Math.max(2,Math.min(re-z-2,B-z/2));return ne.forEach(function(N){m(N,U,q),U+=d(N)+se}),{x:A-K/2-7,y:q-7,w:K+14,h:z+14}}function w(C){i.classList.add("is-active"),i.style.transform="translate("+C.x.toFixed(1)+"px,"+C.y.toFixed(1)+"px)",i.style.width=C.w.toFixed(1)+"px",i.style.height=C.h.toFixed(1)+"px"}function k(){i.classList.remove("is-active")}function E(C){return Gd({commit:!0,tag:C.indexOf("tag")>=0,push:C.indexOf("push")>=0})}function L(C){return C.indexOf("sub")>=0}function S(C){var A=document.getElementById("qc-dock-launch-label");A&&(A.textContent=C)}function M(C,A){var B=n.getBoundingClientRect();return C>=B.left&&C<=B.right&&A>=B.top&&A<=B.bottom}function D(C){return function(A){if(!(s[C].disabled||Gr())){g={anchor:C,pointerId:A.pointerId,startX:A.clientX,startY:A.clientY,moved:!1,members:[C]},l.forEach(function(B){s[B].classList.remove("qc-chip--anim")}),s[C].classList.add("is-grabbing");try{s[C].setPointerCapture(A.pointerId)}catch{}t.classList.add("is-dragging"),A.preventDefault()}}}function W(C){if(!(!g||g.pointerId!==C.pointerId)){(Math.abs(C.clientX-g.startX)>3||Math.abs(C.clientY-g.startY)>3)&&(g.moved=!0);var A=e.getBoundingClientRect(),B=C.clientX-A.left,z=C.clientY-A.top;a.forEach(function(K){if(!(g.members.indexOf(K)>=0)){var re=v[K].x+d(K)/2,U=v[K].y+c()/2,q=B-re,N=z-U;Math.sqrt(q*q+N*N)<Qd&&(g.members.push(K),s[K].classList.remove("qc-chip--anim"),s[K].classList.add("is-attached"))}});var se=b(g.members,B,z),ne=M(C.clientX,C.clientY);t.setAttribute("data-hot",ne?"1":"0"),t.setAttribute("data-action",E(g.members)),g.members.length>1?w(se):k(),S(ne?"\u677E\u624B\u6267\u884C":"\u63D0\u4EA4")}}function Y(C,A){if(!(!g||g.pointerId!==C.pointerId)){var B=g;g=null,t.classList.remove("is-dragging"),t.setAttribute("data-hot","0"),S("\u63D0\u4EA4"),k(),l.forEach(function(se){s[se].classList.remove("is-grabbing","is-attached")});try{s[B.anchor].releasePointerCapture(B.pointerId)}catch{}if(!A&&!B.moved){var z=ws(B.anchor);Nn(z.action,z.sub);return}if(!A&&M(C.clientX,C.clientY)){Nn(E(B.members),L(B.members));return}t.setAttribute("data-action","commit"),y(!0)}}var O=function(){r.quickCommitOpen&&!g&&y(!1)};window.addEventListener("resize",O),l.forEach(function(C){var A=s[C];A.addEventListener("pointerdown",D(C)),A.addEventListener("pointermove",W),A.addEventListener("pointerup",function(B){Y(B,!1)}),A.addEventListener("pointercancel",function(B){Y(B,!0)}),A.addEventListener("keydown",function(B){if(!(A.disabled||Gr())&&(B.key==="Enter"||B.key===" "||B.key==="Spacebar")){B.preventDefault();var z=ws(C);Nn(z.action,z.sub)}})}),n.addEventListener("click",function(){n.disabled||Gr()||g||Nn("commit")}),Bn=function(){window.removeEventListener("resize",O),g=null}}function Xd(){if(!(!r.selectedId||r.quickCommitGenerating)){var e=document.getElementById("quick-commit-message");e&&(r.quickCommitForm.customMessage=e.value);var t=document.getElementById("quick-commit-tag");t&&(r.quickCommitForm.tag=t.value),r.quickCommitGenerating=!0,r.quickCommitError="",Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/generate-commit-message",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}).then(function(n){return n.json().then(function(i){return{ok:n.ok,data:i}})}).then(function(n){if(!n.ok)throw new Error(n.data&&n.data.error||"AI \u751F\u6210\u5931\u8D25\u3002");var i=n.data||{},a=typeof i.message=="string"?i.message:"",s=typeof i.suggestedTag=="string"?i.suggestedTag.trim():"",o=(r.quickCommitForm.customMessage||"").trim();!o&&a&&(r.quickCommitForm.customMessage=a),s&&(r.quickCommitForm.tagEdited||(r.quickCommitForm.tag=s),r.quickCommitDragAction="commit-tag")}).catch(function(n){r.quickCommitError=n&&n.message||"AI \u751F\u6210\u5931\u8D25\u3002"}).finally(function(){r.quickCommitGenerating=!1,r.quickCommitOpen&&Ot()})}}function Nn(e,t){if(!(!r.selectedId||r.quickCommitSubmitting)){var n=document.getElementById("quick-commit-message");n&&(r.quickCommitForm.customMessage=n.value);var i=document.getElementById("quick-commit-tag");i&&(r.quickCommitForm.tag=i.value);var a=r.quickCommitForm||{},s=Yd(e||r.quickCommitDragAction||"commit"),o=s.withTag,l=o?(a.tag||"").trim():"",d=(a.customMessage||"").trim(),c=!d,u={branch:(r.gitStatus||{}).branch||"",commitHash:(r.gitStatus||{}).lastCommit&&(r.gitStatus||{}).lastCommit.shortHash?(r.gitStatus||{}).lastCommit.shortHash:(r.gitStatus||{}).head?(r.gitStatus||{}).head.substring(0,7):"",commitSubject:(r.gitStatus||{}).lastCommit&&(r.gitStatus||{}).lastCommit.subject?(r.gitStatus||{}).lastCommit.subject:"",tag:(r.gitStatus||{}).latestTag||""},f={autoMessage:c,customMessage:c?"":d,tag:l,autoTag:!!(o&&!l),push:!!s.push,submodule:!!t};r.quickCommitSubmitting=!0,r.quickCommitSubmoduleIntent=!!t,r.quickCommitAutoGenerating=c||f.autoTag,r.quickCommitError="",r.quickCommitPushError="",r.quickCommitResult=null,r.quickCommitDragAction=s.action,Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/quick-commit",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}).then(function(v){return v.json().then(function(m){return{ok:v.ok,data:m}})}).then(function(v){if(!v.ok)throw new Error(v.data&&v.data.error||"\u5FEB\u6377\u63D0\u4EA4\u5931\u8D25\u3002");var m=v.data||{},y=m.commit&&m.commit.hash?m.commit.hash.substring(0,7):"",g=m.tag&&m.tag.name?m.tag.name:"",b=Array.isArray(m.submoduleCommits)?m.submoduleCommits:[],w=b.length>0?"\u5DF2\u5148\u63D0\u4EA4 "+b.length+" \u4E2A submodule\uFF08"+b.map(function(E){return E.path}).join("\u3001")+"\uFF09\uFF0C":"",k=w+"\u5DF2\u63D0\u4EA4"+(y?" "+y:"")+(g?"\uFF0C\u5DF2\u6253 Tag "+g:"");r.quickCommitResult={action:s.action,includeSubmodule:!!t,pushed:!!m.pushed,pushError:m.pushError||"",commitHash:y,commitMessage:m.commit&&m.commit.message?m.commit.message:d,tagName:g,oldTag:u.tag,oldCommitHash:u.commitHash,oldCommitSubject:u.commitSubject,submoduleCount:b.length},s.push&&!m.pushError?(typeof T=="function"&&T(k+"\uFF0C\u5DF2\u63A8\u9001\u3002","success"),jn()):(typeof T=="function"&&T(k+(m.pushError?"\uFF1Bpush \u5931\u8D25\uFF1A"+m.pushError:"\u3002"),m.pushError?"error":"success"),r.selectedId&&Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()}))}).catch(function(v){r.quickCommitError=v&&v.message||"\u5FEB\u6377\u63D0\u4EA4\u5931\u8D25\u3002"}).finally(function(){r.quickCommitSubmitting=!1,r.quickCommitAutoGenerating=!1,r.quickCommitOpen&&Ot()})}}function Zd(e){if(!(!r.selectedId||r.quickCommitPushing)){var t=!!(e&&e.pushCommits),n=!!(e&&e.pushTags),i=!!(e&&e.closeOnSuccess);if(!(!t&&!n)){var a=r.quickCommitResult||{},s=!!a.includeSubmodule;r.quickCommitPushing=!0,r.quickCommitPushError="",Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/git/push",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({pushCommits:t,pushTags:n,submodule:s,tag:a.tagName||""})}).then(function(o){return o.json().then(function(l){return{ok:o.ok,data:l}})}).then(function(o){var l=o.data||{};if(!o.ok)throw new Error(l&&l.error||"\u63A8\u9001\u5931\u8D25\u3002");if(l.error){r.quickCommitPushError=l.error,typeof T=="function"&&T("\u63A8\u9001\u5931\u8D25\uFF1A"+l.error,"error");return}var d=[];l.pushedCommits&&d.push("commits"),l.pushedTags&&d.push("tags");var c=d.length?d.join(" \u548C "):"\uFF08\u65E0\u5185\u5BB9\uFF09";typeof T=="function"&&T("\u5DF2\u63A8\u9001 "+c,"success"),r.quickCommitResult&&(r.quickCommitResult.pushed=!0),i?(jn(),r.selectedId&&Tn(r.selectedId,{force:!0})):r.selectedId&&Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()})}).catch(function(o){r.quickCommitPushError=o&&o.message||"\u63A8\u9001\u5931\u8D25\u3002",typeof T=="function"&&T(r.quickCommitPushError,"error")}).finally(function(){r.quickCommitPushing=!1,r.quickCommitOpen&&Ot()})}}}function ec(e){var t=(e||"").trim();if(t==="??")return{letter:"U",cls:"untracked",title:"\u672A\u8DDF\u8E2A"};if(t==="!!")return{letter:"I",cls:"ignored",title:"\u5DF2\u5FFD\u7565"};for(var n="",i=0;i<e.length;i++)if(e[i]&&e[i]!=="."&&e[i]!==" "){n=e[i];break}n=(n||t[0]||"?").toUpperCase();var a={A:{cls:"add",title:"\u65B0\u589E"},M:{cls:"mod",title:"\u4FEE\u6539"},D:{cls:"del",title:"\u5220\u9664"},R:{cls:"ren",title:"\u91CD\u547D\u540D"},C:{cls:"ren",title:"\u590D\u5236"},T:{cls:"mod",title:"\u7C7B\u578B\u53D8\u66F4"},U:{cls:"del",title:"\u51B2\u7A81"}},s=a[n]||{cls:"other",title:"\u5DF2\u66F4\u6539"};return{letter:n,cls:s.cls,title:s.title}}function Am(e){var t=e.map(function(n){var i=ec(n.status||""),a=n.path||"",s=a.lastIndexOf("/"),o=s>=0?a.slice(0,s+1):"",l=s>=0?a.slice(s+1):a,d="";if(n.isSubmodule){var c=n.submoduleState||{},u=[];c.commitChanged&&u.push("\u65B0\u6307\u9488"),c.hasTrackedChanges&&u.push("dirty"),c.hasUntracked&&u.push("\u672A\u8DDF\u8E2A");var f=u.length?"submodule \xB7 "+u.join(" / "):"submodule";d='<span class="qc-submodule-badge">'+p(f)+"</span>"}return'<div class="qc-file-row" title="'+p(a)+'"><span class="qc-file-badge qc-badge-'+i.cls+'" title="'+p(i.title)+'">'+p(i.letter)+'</span><span class="qc-file-path">'+(o?'<span class="qc-file-dir">'+p(o)+"</span>":"")+'<span class="qc-file-name">'+p(l)+"</span></span>"+d+"</div>"}).join("");return t||'<div class="qc-empty">\u6CA1\u6709\u53EF\u63D0\u4EA4\u7684\u6539\u52A8\u3002</div>'}function Gr(){return r.quickCommitSubmitting||r.quickCommitPushing}function Qr(e,t,n,i){return'<div class="qc-pair'+(i?" "+i:"")+'"><div class="qc-pair-label">'+p(e)+'</div><div class="qc-pair-flow"><div class="qc-pair-value qc-pair-value--from">'+t+'</div><div class="qc-pair-arrow" aria-hidden="true">\u2192</div><div class="qc-pair-value qc-pair-value--to">'+n+"</div></div></div>"}function tc(){var e=r.gitStatus||{};if(e.hasSubmodule===!0)return!0;for(var t=e.files||[],n=0;n<t.length;n++)if(t[n]&&t[n].isSubmodule===!0)return!0;return!1}function nc(e){var t=!e||Gr(),n=tc();if(r.quickCommitSubmitting){var i=r.quickCommitSubmoduleIntent?"\uFF08\u542B submodule\uFF09":"",a=(r.quickCommitAutoGenerating?"AI \u751F\u6210 + \u63D0\u4EA4\u4E2D\u2026":"\u6267\u884C\u4E2D\u2026")+i;return'<div class="qc-dock-wrap"><div class="qc-dock-busy" role="status"><span class="qc-dock-busy-dot"></span>'+p(a)+"</div></div>"}function s(l,d,c){return'<button type="button" class="qc-chip qc-chip--'+l+'" data-chip="'+l+'"'+(c?' title="'+p(c)+'"':"")+(t?" disabled":"")+'><span class="qc-chip-dot" aria-hidden="true"></span><span class="qc-chip-label">'+d+"</span></button>"}var o=t?e?"":"\u5DE5\u4F5C\u533A\u5E72\u51C0\uFF0C\u65E0\u53EF\u63D0\u4EA4":"\u62D6\u52A8\u78C1\u5438\u7EC4\u5408 \xB7 \u4E22\u8FDB\u63D0\u4EA4\u533A\u6267\u884C \xB7 \u5355\u51FB\u76F4\u63A5\u6267\u884C\u8BE5\u9879"+(n?" \xB7 Sub \u7403\u53EF\u9009\uFF0C\u7EB3\u5165\u540E\u9012\u5F52\u5904\u7406 submodule":"");return'<div class="qc-dock-wrap qc-dock-wrap--magnetic"'+(t?' data-disabled="1"':"")+'><div id="qc-dock-stage" class="qc-dock-stage" data-action="commit" data-hot="0"><div id="qc-dock-field" class="qc-dock-field"><div id="qc-dock-cluster" class="qc-dock-cluster" aria-hidden="true"></div>'+s("commit","Commit")+s("tag","Tag")+s("push","Push")+(n?s("sub","Sub","\u63D0\u4EA4\u7236\u4ED3\u5E93\u5E76\u9012\u5F52\u8FDB\u5165 submodule\uFF08commit / tag / \u5206\u522B\u63A8\u9001\uFF09"):"")+'</div><button type="button" id="qc-dock-launch" class="qc-dock-launch"'+(t?" disabled":"")+' aria-label="\u6267\u884C\u63D0\u4EA4"><span class="qc-dock-launch-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h12M13 6l6 6-6 6"/></svg></span><span id="qc-dock-launch-label" class="qc-dock-launch-label">\u63D0\u4EA4</span></button></div><div class="qc-dock-hint">'+p(o)+"</div></div>"}function rc(){var e=r.quickCommitResult;if(!e)return"";var t=e.oldCommitHash?"<code>"+p(e.oldCommitHash)+"</code>"+(e.oldCommitSubject?"<span>"+p(e.oldCommitSubject)+"</span>":""):'<span class="qc-muted">\u65E0</span>',n=e.commitHash?"<code>"+p(e.commitHash)+"</code><span>"+p(e.commitMessage||"")+"</span>":'<span class="qc-muted">\u65E0</span>',i=e.oldTag?"<code>"+p(e.oldTag)+"</code>":'<span class="qc-muted">\u65E0 tag</span>',a=e.tagName?"<code>"+p(e.tagName)+"</code>":'<span class="qc-muted">\u672A\u6253 tag</span>',s=e.pushed?'<span class="qc-result-pushed">\u5DF2\u63A8\u9001</span>':'<button id="quick-commit-push-after-btn" class="btn btn-primary btn-sm" type="button"'+(r.quickCommitPushing?" disabled":"")+">"+(r.quickCommitPushing?"\u63A8\u9001\u4E2D...":"Push & Close")+"</button>";return'<section class="qc-result-panel">'+Qr("Commit",t,n,"")+Qr("Tag",i,a,"qc-pair--tag")+(e.pushError||r.quickCommitPushError?'<p class="error-message">'+p(e.pushError||r.quickCommitPushError)+"</p>":"")+'<div class="qc-result-actions"><button id="quick-commit-cancel-btn" class="btn btn-ghost btn-sm" type="button">\u5173\u95ED</button>'+s+"</div></section>"}function ks(){var e=r.gitStatus||{},t=r.quickCommitForm||{customMessage:"",tag:"",tagEdited:!1},n=(e.modifiedCount||0)>0,i=r.quickCommitGenerating,a=e.lastCommit||{},s=a.shortHash?"<code>"+p(a.shortHash)+"</code><span>"+p(a.subject||"")+"</span>":e.head?"<code>"+p(e.head.substring(0,7))+"</code>":'<span class="qc-muted">\u65E0 commit</span>',o=e.latestTag?"<code>"+p(e.latestTag)+"</code>":'<span class="qc-muted">\u65E0 tag</span>',l='<input type="text" id="quick-commit-tag" class="field-input qc-tag-field-input" placeholder="\u7559\u7A7A\u5219 AI \u751F\u6210" value="'+p(t.tag||"")+'"'+(r.quickCommitSubmitting?" disabled":"")+">",d='<textarea id="quick-commit-message" class="field-input qc-message-input" rows="3" placeholder="New commit message" '+(r.quickCommitSubmitting?"disabled":"")+">"+p(t.customMessage||"")+"</textarea>",c=[];c.push(e.branch||"(no branch)"),c.push(n?(e.modifiedCount||0)+" \u4E2A\u6539\u52A8":"\u5DE5\u4F5C\u533A\u5E72\u51C0"),typeof e.ahead=="number"&&e.ahead>0&&c.push("\u2191"+e.ahead),typeof e.behind=="number"&&e.behind>0&&c.push("\u2193"+e.behind);var u=r.quickCommitResult?"":'<section class="qc-release-panel"><div class="qc-message-header"><span class="qc-section-title">New</span><button type="button" id="quick-commit-ai-btn" class="btn btn-ghost btn-sm qc-ai-btn"'+(i?" disabled":"")+' title="AI \u751F\u6210 commit message \u4E0E tag"><svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.5l1.4 3.6L13 6.5 9.4 7.9 8 11.5 6.6 7.9 3 6.5l3.6-1.4L8 1.5zM12.5 10.5l.7 1.8 1.8.7-1.8.7-.7 1.8-.7-1.8-1.8-.7 1.8-.7.7-1.8z" fill="currentColor"/></svg><span>'+(i?"\u751F\u6210\u4E2D...":"AI")+"</span></button></div>"+Qr("Commit",s,d,"qc-pair--commit")+Qr("Tag",o,l,"qc-pair--tag")+(r.quickCommitError?'<p class="error-message">'+p(r.quickCommitError)+"</p>":"")+nc(n)+'<div class="qc-modal-actions"><button id="quick-commit-cancel-btn" class="btn btn-ghost btn-sm" type="button">\u53D6\u6D88</button></div></section>',f=rc();return'<section id="quick-commit-modal" class="modal-backdrop'+(r.quickCommitOpen?"":" hidden")+'"><div class="modal quick-commit-modal" role="dialog" aria-labelledby="quick-commit-title"><div class="modal-header"><div><h2 id="quick-commit-title" class="modal-title">\u5FEB\u6377\u63D0\u4EA4</h2><p class="modal-subtitle">'+p(c.join(" \xB7 "))+'</p></div><button id="quick-commit-close-btn" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body">'+u+f+"</div></div></section>"}function ic(){return'<section id="worktree-merge-modal" class="modal-backdrop hidden"><div class="modal worktree-merge-modal"><div class="modal-header"><div><h2 class="modal-title">\u5408\u5E76 Worktree</h2><p class="modal-subtitle">\u68C0\u67E5\u5F53\u524D\u4EFB\u52A1\u5206\u652F\u5E76\u5FEB\u6377\u5408\u5E76\u5230\u4E3B\u5206\u652F\u3002</p></div><button id="close-worktree-merge-button" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body"><div id="worktree-merge-content" class="worktree-merge-content"></div><p id="worktree-merge-error" class="error-message hidden"></p><div class="worktree-merge-actions"><button id="worktree-merge-cancel-button" class="btn btn-secondary">\u53D6\u6D88</button><button id="worktree-merge-confirm-button" class="btn btn-primary">\u786E\u8BA4\u5408\u5E76\u5E76\u6E05\u7406</button></div></div></div></section>'}function ac(){return'<section id="settings-modal" class="modal-backdrop hidden"><div class="modal settings-modal"><div class="modal-header settings-modal-header"><div class="settings-modal-title-group"><h2 class="modal-title">\u8BBE\u7F6E</h2><p class="settings-modal-subtitle">\u8C03\u6574\u5E94\u7528\u914D\u7F6E\u3001\u901A\u77E5\u3001\u5B89\u5168\u548C\u663E\u793A\u504F\u597D</p></div><button id="close-settings-button" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body settings-modal-body"><div class="settings-layout"><aside class="settings-sidebar"><div class="settings-sidebar-header"><div class="settings-sidebar-title">\u504F\u597D\u8BBE\u7F6E</div><div class="settings-sidebar-hint">\u5DE6\u4FA7\u5207\u6362\u5206\u533A\uFF0C\u53F3\u4FA7\u67E5\u770B\u8BE6\u7EC6\u8BF4\u660E\u4E0E\u9009\u9879\u3002</div></div><div class="settings-tabs" role="tablist" aria-label="\u8BBE\u7F6E\u5206\u7EC4" aria-orientation="vertical"><button class="settings-tab active" data-tab="about" role="tab" aria-selected="true" aria-controls="settings-tab-about"><span class="settings-tab-main">\u5173\u4E8E</span><span class="settings-tab-meta">\u7248\u672C\u3001\u66F4\u65B0\u4E0E\u8FDE\u63A5\u65B9\u5F0F</span></button><button class="settings-tab" data-tab="general" role="tab" aria-selected="false" aria-controls="settings-tab-general"><span class="settings-tab-main">\u57FA\u672C\u914D\u7F6E</span><span class="settings-tab-meta">\u4E3B\u673A\u3001\u6A21\u5F0F\u3001\u8BED\u8A00\u3001\u76EE\u5F55</span></button><button class="settings-tab" data-tab="notifications" role="tab" aria-selected="false" aria-controls="settings-tab-notifications"><span class="settings-tab-main">\u901A\u77E5</span><span class="settings-tab-meta">\u63D0\u793A\u97F3\u4E0E\u6D4F\u89C8\u5668\u901A\u77E5</span></button><button class="settings-tab" data-tab="security" role="tab" aria-selected="false" aria-controls="settings-tab-security"><span class="settings-tab-main">\u5B89\u5168</span><span class="settings-tab-meta">\u5BC6\u7801\u4E0E\u8BC1\u4E66</span></button><button class="settings-tab" data-tab="presets" role="tab" aria-selected="false" aria-controls="settings-tab-presets"><span class="settings-tab-main">\u547D\u4EE4\u9884\u8BBE</span><span class="settings-tab-meta">\u67E5\u770B\u5DF2\u6709\u9884\u8BBE</span></button><button class="settings-tab" data-tab="display" role="tab" aria-selected="false" aria-controls="settings-tab-display"><span class="settings-tab-main">\u663E\u793A</span><span class="settings-tab-meta">\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00\u884C\u4E3A</span></button></div></aside><div class="settings-content"><div class="settings-panel active" id="settings-tab-about" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u5173\u4E8E Wand</h3><p class="settings-panel-desc">\u67E5\u770B\u7248\u672C\u4FE1\u606F\u3001\u66F4\u65B0\u72B6\u6001\u548C Android App \u8FDE\u63A5\u65B9\u5F0F\u3002</p></div><div class="settings-about-info"><div class="settings-about-row"><span class="settings-label">\u5305\u540D</span><span class="settings-value" id="settings-pkg-name">-</span></div><div class="settings-about-row"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-version">-</span></div><div class="settings-about-row"><span class="settings-label">Node.js \u8981\u6C42</span><span class="settings-value" id="settings-node-req">-</span></div><div class="settings-about-row"><span class="settings-label">\u4ED3\u5E93\u5730\u5740</span><span class="settings-value" id="settings-repo-url"><a href="#" target="_blank" rel="noopener">-</a></span></div></div><div class="settings-update-section" id="web-update-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("globe",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">Web \u7AEF</h4><p class="settings-section-sub">\u6D4F\u89C8\u5668\u8BBF\u95EE\u7684\u670D\u52A1\u7248\u672C</p></div></div><div class="settings-about-row"><span class="settings-label">\u6700\u65B0\u7248\u672C</span><span class="settings-value" id="settings-latest-version">-</span></div><div class="settings-update-actions"><button id="check-update-button" class="btn btn-secondary btn-sm">\u68C0\u67E5\u66F4\u65B0</button><button id="do-update-button" class="btn btn-primary btn-sm hidden">\u66F4\u65B0\u5230\u6700\u65B0\u7248</button><button id="do-restart-button" class="btn btn-success btn-sm hidden">\u91CD\u542F\u751F\u6548</button></div><p id="update-message" class="hint hidden"></p><div class="settings-toggle-row"><div class="settings-toggle-text"><span class="settings-toggle-title">Beta \u901A\u9053</span><span class="settings-toggle-desc">\u66F4\u65B0\u5230 npm beta \u7248\u672C\uFF08tag + commit \u5C3E\u6807\uFF09\uFF0C\u5C1D\u9C9C\u65B0\u529F\u80FD\uFF0C\u53EF\u80FD\u4E0D\u7A33\u5B9A\u3002</span></div><label class="settings-switch"><input type="checkbox" id="beta-channel-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><div class="settings-toggle-row"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc">\u68C0\u6D4B\u5230\u65B0\u7248\u672C\u5C06\u81EA\u52A8\u4E0B\u8F7D\u5B89\u88C5\u5E76\u91CD\u542F\u670D\u52A1\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-web-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div></div><div class="settings-update-section hidden" id="android-apk-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("smartphone",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">Android App</h4><p class="settings-section-sub">\u539F\u751F\u5BA2\u6237\u7AEF\u7248\u672C\u4E0E APK \u4E0B\u8F7D</p></div></div><div id="android-apk-current-row" class="settings-about-row hidden"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-android-apk-current">-</span></div><div id="android-apk-github-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u7EBF\u4E0A\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-android-apk-github">-</span><button id="download-github-apk-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="android-apk-local-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u672C\u5730\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-android-apk-local">-</span><button id="download-local-apk-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="android-auto-update-row" class="settings-toggle-row hidden"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc" id="android-auto-update-hint">\u68C0\u6D4B\u5230\u65B0\u7248 APK \u65F6\u81EA\u52A8\u62C9\u8D77\u4E0B\u8F7D\uFF0C\u5B89\u88C5\u4ECD\u9700\u5728\u7CFB\u7EDF\u4E2D\u786E\u8BA4\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-apk-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><p id="android-apk-message" class="hint hidden"></p></div><div class="settings-update-section hidden" id="macos-dmg-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("desktop",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">macOS App</h4><p class="settings-section-sub">\u539F\u751F\u5BA2\u6237\u7AEF\u7248\u672C\u4E0E DMG \u4E0B\u8F7D</p></div></div><div id="macos-dmg-current-row" class="settings-about-row hidden"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-macos-dmg-current">-</span></div><div id="macos-dmg-github-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u7EBF\u4E0A\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-macos-dmg-github">-</span><button id="download-github-dmg-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="macos-dmg-local-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u672C\u5730\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-macos-dmg-local">-</span><button id="download-local-dmg-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="macos-auto-update-row" class="settings-toggle-row hidden"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc" id="macos-auto-update-hint">\u68C0\u6D4B\u5230\u65B0\u7248 DMG \u5C06\u81EA\u52A8\u4E0B\u8F7D\u5E76\u6302\u8F7D\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-dmg-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><p id="macos-dmg-message" class="hint hidden"></p></div><div class="settings-update-section" id="android-connect-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("link",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">App \u8FDE\u63A5\u7801</h4><p class="settings-section-sub">\u7C98\u8D34\u5230 Android App \u5373\u53EF\u81EA\u52A8\u8FDE\u63A5\uFF0C\u65E0\u9700\u5BC6\u7801\uFF1B\u6539\u5BC6\u7801\u540E\u5931\u6548\u3002</p></div></div><div class="settings-connect-url-box"><code id="android-connect-code" class="settings-connect-url-text">-</code><button id="copy-connect-code-button" class="btn btn-secondary btn-sm" type="button" title="\u590D\u5236\u8FDE\u63A5\u7801">\u590D\u5236</button></div><div class="settings-connect-qr-box"><div class="settings-connect-qr-wrap" id="android-connect-qr-wrap" title="\u70B9\u51FB\u653E\u5927"><canvas id="android-connect-qr" width="180" height="180"></canvas><div class="settings-connect-qr-empty" id="android-connect-qr-empty">\u751F\u6210\u4E2D\u2026</div></div><p class="settings-connect-qr-hint">\u7528 Wand App \u626B\u4E00\u626B\uFF0C\u5373\u53EF\u4E00\u952E\u586B\u5165\u670D\u52A1\u5668\u5730\u5740\u4E0E\u8FDE\u63A5\u7801\u3002</p></div></div></div><div class="settings-panel" id="settings-tab-notifications" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u901A\u77E5</h3><p class="settings-panel-desc">\u8BBE\u7F6E\u63D0\u793A\u97F3\u3001\u7CFB\u7EDF\u901A\u77E5\u548C\u6D4F\u89C8\u5668\u901A\u77E5\u7684\u884C\u4E3A\u3002</p></div><div class="settings-notification-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("bell",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u901A\u77E5\u504F\u597D</h4><p class="settings-section-sub">\u63D0\u793A\u97F3\u4E0E\u5E94\u7528\u5185\u901A\u77E5\u6C14\u6CE1</p></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-notif-sound">\u64AD\u653E\u63D0\u793A\u97F3</label><span class="settings-toggle-desc">\u91CD\u8981\u901A\u77E5\uFF08\u7248\u672C\u66F4\u65B0\u3001\u6743\u9650\u7B49\u5F85\u7B49\uFF09\u65F6\u64AD\u653E\u67D4\u548C\u63D0\u793A\u97F3\u3002</span></div><label class="settings-switch"><input id="cfg-notif-sound" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div><div class="settings-range-row" id="notif-volume-field"><label class="settings-range-label" for="cfg-notif-volume">\u97F3\u91CF</label><input id="cfg-notif-volume" type="range" min="0" max="100" step="5" class="settings-range" /><span id="cfg-notif-volume-val" class="settings-range-value">80%</span></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-notif-bubble">\u5E94\u7528\u5185\u901A\u77E5\u6C14\u6CE1</label><span class="settings-toggle-desc">\u5728\u9875\u9762\u9876\u90E8\u5F39\u51FA\u6D6E\u52A8\u901A\u77E5\u6C14\u6CE1\u3002</span></div><label class="settings-switch"><input id="cfg-notif-bubble" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div id="native-sound-section" class="settings-notification-section hidden"><div class="settings-section-head"><span class="settings-section-icon">'+J("music",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u7CFB\u7EDF\u901A\u77E5\u94C3\u58F0</h4><p class="settings-section-sub">\u9009\u62E9 Android \u7CFB\u7EDF\u901A\u77E5\u4F7F\u7528\u7684\u94C3\u58F0</p></div></div><div class="settings-row-with-action"><select id="native-sound-select" class="field-input field-select"></select><button id="native-sound-preview" class="btn btn-secondary btn-sm btn-with-icon" type="button">'+J("play",{size:11,strokeWidth:1.8,fill:"currentColor"})+'<span>\u8BD5\u542C</span></button></div></div><div id="native-haptic-section" class="settings-notification-section hidden"><div class="settings-section-head"><span class="settings-section-icon">'+J("vibrate",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u89E6\u611F\u53CD\u9988</h4><p class="settings-section-sub">\u6309\u94AE\u64CD\u4F5C\u548C\u4EFB\u52A1\u5B8C\u6210\u65F6\u63D0\u4F9B\u632F\u52A8\u53CD\u9988</p></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-haptic-enabled">\u542F\u7528\u89E6\u611F\u53CD\u9988</label></div><label class="settings-switch"><input id="cfg-haptic-enabled" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div class="settings-notification-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("globe",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u6D4F\u89C8\u5668\u901A\u77E5</h4><p class="settings-section-sub">\u6765\u81EA\u7CFB\u7EDF\u901A\u77E5\u4E2D\u5FC3\u7684\u5F39\u7A97</p></div></div><div class="settings-about-row"><span class="settings-label">\u6388\u6743\u72B6\u6001</span><span class="settings-value" id="notification-permission-status">-</span></div><div class="settings-update-actions"><button id="notification-request-btn" class="btn btn-primary btn-sm hidden" type="button">\u6388\u6743\u901A\u77E5</button><button id="notification-reset-btn" class="btn btn-ghost btn-sm hidden" type="button">\u91CD\u65B0\u6388\u6743</button><button id="notification-test-btn" class="btn btn-secondary btn-sm" type="button">\u53D1\u9001\u6D4B\u8BD5\u901A\u77E5</button><button id="notification-test-delay-btn" class="btn btn-ghost btn-sm" type="button">10 \u79D2\u540E\u53D1\u9001</button></div><p id="notification-test-message" class="hint hidden"></p></div></div><div class="settings-panel" id="settings-tab-general" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u57FA\u672C\u914D\u7F6E</h3><p class="settings-panel-desc">\u914D\u7F6E\u670D\u52A1\u76D1\u542C\u5730\u5740\u3001\u9ED8\u8BA4\u6A21\u5F0F\u3001\u8BED\u8A00\u548C\u5DE5\u4F5C\u76EE\u5F55\u3002</p></div><div class="field-row"><div class="field"><label class="field-label" for="cfg-host">\u76D1\u542C\u5730\u5740 (host)</label><input id="cfg-host" type="text" class="field-input" placeholder="127.0.0.1" /></div><div class="field"><label class="field-label" for="cfg-port">\u7AEF\u53E3 (port)</label><input id="cfg-port" type="number" class="field-input" placeholder="8443" min="1" max="65535" /></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-https">\u542F\u7528 HTTPS</label><span class="settings-toggle-desc">\u4F7F\u7528\u81EA\u7B7E\u540D\u8BC1\u4E66\u52A0\u5BC6\u6D4F\u89C8\u5668\u5230\u670D\u52A1\u7684\u8FDE\u63A5\uFF0Chost \u4E3A\u975E 127.0.0.1 \u65F6\u5EFA\u8BAE\u5F00\u542F\u3002</span></div><label class="settings-switch"><input id="cfg-https" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div><div class="field-row"><div class="field"><label class="field-label" for="cfg-mode">\u9ED8\u8BA4\u6267\u884C\u6A21\u5F0F</label><select id="cfg-mode" class="field-input"><option value="default">default</option><option value="assist">assist</option><option value="agent">agent</option><option value="agent-max">agent-max</option><option value="auto-edit">auto-edit</option><option value="full-access">full-access</option><option value="native">native</option><option value="managed">managed</option></select></div><div class="field"><label class="field-label" for="cfg-language">\u56DE\u590D\u8BED\u8A00</label><select id="cfg-language" class="field-input"><option value="">\u81EA\u52A8\uFF08\u4E0D\u6307\u5B9A\uFF09</option><option value="\u4E2D\u6587">\u4E2D\u6587</option><option value="English">English</option><option value="\u65E5\u672C\u8A9E">\u65E5\u672C\u8A9E</option><option value="\uD55C\uAD6D\uC5B4">\uD55C\uAD6D\uC5B4</option><option value="Espa\xF1ol">Espa\xF1ol</option><option value="Fran\xE7ais">Fran\xE7ais</option><option value="Deutsch">Deutsch</option><option value="\u0420\u0443\u0441\u0441\u043A\u0438\u0439">\u0420\u0443\u0441\u0441\u043A\u0438\u0439</option></select></div></div><p class="field-hint" style="margin-top:-4px;">\u8BBE\u7F6E\u56DE\u590D\u8BED\u8A00\u540E\uFF0CClaude \u5C06\u5C3D\u91CF\u4F7F\u7528\u6307\u5B9A\u8BED\u8A00\u56DE\u590D\u3002</p><div class="field"><label class="field-label" for="cfg-structured-runner">\u7ED3\u6784\u5316\u4F1A\u8BDD Runner</label><select id="cfg-structured-runner" class="field-input"><option value="sdk">SDK\uFF08@anthropic-ai/claude-agent-sdk\uFF0C\u9ED8\u8BA4\uFF09</option><option value="cli">CLI\uFF08spawn claude -p\uFF09</option></select><p class="field-hint" style="margin-top:4px;">SDK \u6A21\u5F0F\u4F7F\u7528\u5B98\u65B9 Agent SDK \u66FF\u4EE3 CLI subprocess\uFF0C\u63A5\u53E3\u66F4\u6574\u6D01\uFF0C\u529F\u80FD\u7B49\u4EF7\u3002\u4FDD\u5B58\u540E\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u7ACB\u5373\u751F\u6548\u3002</p></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-inherit-env">\u7EE7\u627F\u73AF\u5883\u53D8\u91CF</label><span class="settings-toggle-desc">\u542F\u52A8 PTY / \u7ED3\u6784\u5316\u5B50\u8FDB\u7A0B\u65F6\uFF0C\u628A\u5F53\u524D\u670D\u52A1\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF\u4F20\u7ED9 claude / codex\u3002\u5173\u95ED\u540E\u5B50\u8FDB\u7A0B\u4EC5\u83B7\u5F97\u6700\u5C0F\u53EF\u7528\u73AF\u5883\uFF08PATH/HOME/SHELL/LANG/TERM \u7B49\uFF09\uFF0C\u53EF\u7528\u4E8E\u9694\u79BB API key \u7B49\u654F\u611F\u51ED\u636E\u3002</span></div><div class="settings-toggle-aside"><button type="button" id="cfg-view-env-btn" class="btn btn-secondary btn-sm" title="\u67E5\u770B\u5B9E\u9645\u4F1A\u6CE8\u5165\u5230\u5B50\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF">\u67E5\u770B</button><label class="settings-switch"><input id="cfg-inherit-env" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div class="field"><label class="field-label" for="cfg-default-model">\u9ED8\u8BA4\u6A21\u578B</label><div class="settings-row-with-action"><select id="cfg-default-model" class="field-input field-select"><option value="">\u8DDF\u968F Claude Code \u9ED8\u8BA4</option></select><button type="button" id="cfg-default-model-refresh" class="btn btn-secondary btn-sm" title="\u5237\u65B0\u6A21\u578B\u5217\u8868">\u5237\u65B0</button></div><p class="field-hint" id="cfg-default-model-version">\u65B0\u5EFA\u4F1A\u8BDD\u65F6\u9ED8\u8BA4\u4F7F\u7528\u8BE5\u6A21\u578B\uFF1B\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u53EF\u5728\u8F93\u5165\u6846\u5207\u6362\u3002</p></div><div class="field"><label class="field-label" for="cfg-cwd">\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55</label><input id="cfg-cwd" type="text" class="field-input" placeholder="/home/user" /></div><div class="field"><label class="field-label" for="cfg-shell">Shell</label><input id="cfg-shell" type="text" class="field-input" placeholder="/bin/bash" /></div>'+(typeof WandNative<"u"&&typeof WandNative.getAppIcon=="function"?'<div class="settings-app-icon-block"><div class="settings-section-head"><span class="settings-section-icon">'+J("palette",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u5E94\u7528\u56FE\u6807</h4><p class="settings-section-sub">\u9009\u62E9 App \u542F\u52A8\u5668\u56FE\u6807\uFF0C\u8FD4\u56DE\u684C\u9762\u540E\u751F\u6548</p></div></div><div id="app-icon-picker" class="settings-app-icon-picker"><button type="button" class="settings-app-icon-option" data-icon="shorthair"><span class="settings-app-icon-preview">'+Ci.user+'</span><span class="settings-app-icon-label">\u8D5B\u535A\u864E\u599E</span></button><button type="button" class="settings-app-icon-option" data-icon="garfield"><span class="settings-app-icon-preview">'+Ci.assistant+'</span><span class="settings-app-icon-label">\u52E4\u52B3\u521D\u4E8C</span></button></div><p id="app-icon-message" class="hint hidden"></p></div>':"")+'<div class="settings-actions settings-actions-sticky"><button id="save-config-button" class="btn btn-primary btn-block">\u4FDD\u5B58\u914D\u7F6E</button></div><p id="config-message" class="hint hidden settings-status-message"></p></div><div class="settings-panel" id="settings-tab-security" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u5B89\u5168</h3><p class="settings-panel-desc">\u7BA1\u7406\u767B\u5F55\u5BC6\u7801\u4E0E SSL \u8BC1\u4E66\uFF0C\u654F\u611F\u53D8\u66F4\u8BF7\u786E\u8BA4\u540E\u518D\u4FDD\u5B58\u3002</p></div><div class="settings-card"><div class="settings-card-head"><span class="settings-card-icon">\u{1F512}</span><div class="settings-card-head-text"><h3 class="settings-card-title">\u4FEE\u6539\u5BC6\u7801</h3><p class="settings-card-desc">\u81F3\u5C11 6 \u4E2A\u5B57\u7B26\uFF1B\u4FDD\u5B58\u540E\u4E0B\u6B21\u767B\u5F55\u751F\u6548\u3002</p></div></div><form id="change-password-form" autocomplete="on" onsubmit="return false;"><input type="text" name="username" autocomplete="username" value="wand" tabindex="-1" aria-hidden="true" style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none" readonly /><div class="field"><label class="field-label" for="new-password">\u65B0\u5BC6\u7801</label><input id="new-password" type="password" class="field-input" placeholder="\u8F93\u5165\u65B0\u5BC6\u7801\uFF08\u81F3\u5C11 6 \u4E2A\u5B57\u7B26\uFF09" autocomplete="new-password" /></div><div class="field"><label class="field-label" for="confirm-password">\u786E\u8BA4\u5BC6\u7801</label><input id="confirm-password" type="password" class="field-input" placeholder="\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801" autocomplete="new-password" /></div><div class="settings-card-actions"><button id="save-password-button" class="btn btn-primary" type="submit">\u4FDD\u5B58\u5BC6\u7801</button></div><p id="settings-error" class="error-message hidden"></p><p id="settings-success" class="hint settings-success-message hidden"></p></form></div><div class="settings-card"><div class="settings-card-head"><span class="settings-card-icon">\u{1F510}</span><div class="settings-card-head-text"><h3 class="settings-card-title">SSL \u8BC1\u4E66</h3><p class="settings-card-desc" id="cert-status">\u52A0\u8F7D\u4E2D...</p></div></div><div class="field"><label class="field-label" for="cert-key-file">\u79C1\u94A5\u6587\u4EF6 (.key)</label><div class="file-picker"><input id="cert-key-file" type="file" class="file-picker-input" accept=".key,.pem" /><label for="cert-key-file" class="file-picker-trigger"><svg class="file-picker-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg><span class="file-picker-label">\u9009\u62E9\u79C1\u94A5</span></label><span class="file-picker-name" data-default="\u672A\u9009\u62E9\u6587\u4EF6">\u672A\u9009\u62E9\u6587\u4EF6</span></div></div><div class="field"><label class="field-label" for="cert-cert-file">\u8BC1\u4E66\u6587\u4EF6 (.crt/.pem)</label><div class="file-picker"><input id="cert-cert-file" type="file" class="file-picker-input" accept=".crt,.pem,.cert" /><label for="cert-cert-file" class="file-picker-trigger"><svg class="file-picker-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg><span class="file-picker-label">\u9009\u62E9\u8BC1\u4E66</span></label><span class="file-picker-name" data-default="\u672A\u9009\u62E9\u6587\u4EF6">\u672A\u9009\u62E9\u6587\u4EF6</span></div></div><div class="settings-card-actions"><button id="upload-cert-button" class="btn btn-primary">\u4E0A\u4F20\u8BC1\u4E66</button></div><p id="cert-message" class="hint hidden"></p></div></div><div class="settings-panel" id="settings-tab-presets" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u547D\u4EE4\u9884\u8BBE</h3><p class="settings-panel-desc">\u5F53\u524D\u547D\u4EE4\u9884\u8BBE\u4ECE config.json \u8BFB\u53D6\uFF0C\u53EF\u5728\u8FD9\u91CC\u5FEB\u901F\u67E5\u770B\u5DF2\u6709\u914D\u7F6E\u3002</p></div><div id="presets-list" class="presets-list"></div></div><div class="settings-panel" id="settings-tab-display" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u663E\u793A</h3><p class="settings-panel-desc">\u63A7\u5236\u804A\u5929\u89C6\u56FE\u91CC\u4E0D\u540C\u5361\u7247\u7C7B\u578B\u7684\u9ED8\u8BA4\u5C55\u5F00\u72B6\u6001\u3002</p></div><div class="settings-section-title">\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00\u72B6\u6001</div><p class="hint settings-inline-hint">\u8BBE\u7F6E\u7ED3\u6784\u5316\u804A\u5929\u89C6\u56FE\u4E2D\u5404\u7C7B\u5361\u7247\u7684\u9ED8\u8BA4\u5C55\u5F00/\u6298\u53E0\u72B6\u6001\u3002\u624B\u52A8\u64CD\u4F5C\u7684\u5C55\u5F00\u72B6\u6001\u4F18\u5148\u4E8E\u6B64\u9ED8\u8BA4\u8BBE\u7F6E\u3002</p><div class="switch-card-list"><label class="switch-card" for="cfg-card-edit"><div class="switch-card-header"><span class="switch-card-title">\u7F16\u8F91\u5361\u7247 (Edit/Write)</span><input id="cfg-card-edit" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u6587\u4EF6\u7F16\u8F91\u548C\u5199\u5165\u64CD\u4F5C\u7684 diff \u89C6\u56FE</div></label><label class="switch-card" for="cfg-card-inline"><div class="switch-card-header"><span class="switch-card-title">\u5185\u8054\u5DE5\u5177 (Read/Glob/Grep)</span><input id="cfg-card-inline" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u6587\u4EF6\u8BFB\u53D6\u3001\u641C\u7D22\u7B49\u5DE5\u5177\u7684\u7ED3\u679C</div></label><label class="switch-card" for="cfg-card-terminal"><div class="switch-card-header"><span class="switch-card-title">\u7EC8\u7AEF\u8F93\u51FA (Bash)</span><input id="cfg-card-terminal" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u547D\u4EE4\u884C\u6267\u884C\u7ED3\u679C</div></label><label class="switch-card" for="cfg-card-thinking"><div class="switch-card-header"><span class="switch-card-title">\u601D\u8003\u8FC7\u7A0B (Thinking)</span><input id="cfg-card-thinking" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">Claude \u7684\u601D\u8003\u8FC7\u7A0B\u5757</div></label><label class="switch-card" for="cfg-card-toolgroup"><div class="switch-card-header"><span class="switch-card-title">\u5DE5\u5177\u7EC4</span><input id="cfg-card-toolgroup" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u8FDE\u7EED\u540C\u7C7B\u5DE5\u5177\u8C03\u7528\u7684\u6298\u53E0\u7EC4</div></label></div><div class="settings-actions settings-actions-sticky"><button id="save-display-button" class="btn btn-primary btn-block">\u4FDD\u5B58\u663E\u793A\u8BBE\u7F6E</button></div><p id="display-message" class="hint hidden settings-status-message"></p></div></div></div></section>'}function xs(){var e=Date.now()-864e5,t=[];return r.sessions.forEach(function(n){if(!n.archived){var i=n.startedAt?new Date(n.startedAt).getTime():0;t.push({kind:"session",ref:n,t:isFinite(i)?i:0})}}),r.claudeHistoryLoaded&&Rn().forEach(function(n){if(n.timestamp){var i=new Date(n.timestamp).getTime();!isFinite(i)||i<=e||t.push({kind:"history",ref:n,t:i})}}),t.sort(function(n,i){return i.t-n.t}),t}function sc(){var e=r.sessions.filter(function(a){return a.archived}),t=[];t.push(Ss());var n=xs(),i=fc();return n.length>0&&t.push(cc(n)),e.length>0&&t.push(dc(e)),n.length===0&&e.length===0&&!i?Ss()+'<div class="empty-state"><strong>\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u8BB0\u5F55</strong><br>\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB\u4F60\u7684\u7B2C\u4E00\u6B21\u5BF9\u8BDD\u3002</div>':(i&&t.push(i),t.join(""))}function oc(){return!!r.sidebarPinned&&!!r.sidebarCollapsed}function lc(){var e=xs(),t=e.map(function(i,a){var s=a+1;if(i.kind==="session"){var o=i.ref,l=o.id===r.selectedId?" active":"",d=o.summary||o.command||"\u4F1A\u8BDD "+s;return'<button class="sidebar-collapsed-tile'+l+'" type="button" data-collapsed-session-id="'+p(o.id)+'" title="'+p(d)+'">'+s+"</button>"}var c=i.ref,u=c.firstUserMessage||"(\u7A7A\u4F1A\u8BDD)",f=u+" \xB7 "+Bs(c.timestamp);return'<button class="sidebar-collapsed-tile history" type="button" data-collapsed-history-id="'+p(c.claudeSessionId)+'" data-cwd="'+p(c.cwd||"")+'" title="'+p(f)+'">'+s+"</button>"}).join(""),n='<button class="sidebar-collapsed-tile add" type="button" data-collapsed-new-session="1" title="\u65B0\u5EFA\u4F1A\u8BDD" aria-label="\u65B0\u5EFA\u4F1A\u8BDD"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg></button>';return'<div class="sidebar-collapsed-tiles">'+t+n+"</div>"}function Ji(){return oc()?lc():sc()}function Ss(){if(!r.sessionsManageMode)return'<div class="session-manage-bar"><span class="sidebar-intro">\u6700\u8FD1\u7684\u4F1A\u8BDD\u8BB0\u5F55</span><button class="btn btn-ghost btn-xs session-manage-toggle" data-action="toggle-manage-mode" type="button"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg><span>\u7BA1\u7406</span></button></div>';var e=Es().length,t=Is().length,n=e+t,i=n>0,a=mc(),s=a>0&&n>=a,o=s?"\u53D6\u6D88\u5168\u9009":"\u5168\u9009",l=s?"clear-selection":"select-all-visible",d=a===0?" disabled":"",c='<button class="session-manage-exit" data-action="toggle-manage-mode" type="button" aria-label="\u9000\u51FA\u7BA1\u7406\u6A21\u5F0F" title="\u9000\u51FA\u7BA1\u7406\u6A21\u5F0F"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button>',u=i?'<span class="session-manage-count">'+n+'</span><span class="session-manage-summary-label">\u5DF2\u9009\u62E9</span>':'<span class="session-manage-summary-label muted">\u9009\u62E9\u8981\u7BA1\u7406\u7684\u9879\u76EE</span>';return'<div class="session-manage-bar active">'+c+'<div class="session-manage-summary">'+u+'</div><div class="session-manage-actions"><button class="btn btn-ghost btn-xs" data-action="'+l+'" type="button"'+d+">"+o+'</button><button class="btn btn-danger btn-xs" data-action="delete-selected" type="button"'+(i?"":" disabled")+">\u5220\u9664"+(i?" "+n:"")+"</button></div></div>"}function qm(e,t,n){return'<section class="session-group"><div class="session-group-title">'+p(e)+"</div>"+t.map(function(i){return Zi(i,n)}).join("")+"</section>"}function dc(e){var t=!!r.archivedExpanded,n=t?"▾":"▸",i='<div class="session-group-title claude-history-toggle" data-action="toggle-archived-group"><span class="chevron">'+n+'</span> \u5DF2\u5F52\u6863 <span class="history-count">'+e.length+"</span></div>";if(!t)return'<section class="session-group">'+i+"</section>";var a=e.map(function(s){return Zi(s,"sessions")}).join("");return'<section class="session-group">'+i+a+"</section>"}function cc(e){var t='<section class="session-group session-group--recent">';return t+=e.map(function(n){return n.kind==="session"?Zi(n.ref,"sessions"):Yi(n.ref,"history")}).join(""),t+="</section>",t}function uc(){var e=Date.now()-864e5;return Rn().filter(function(t){return!t.timestamp||new Date(t.timestamp).getTime()<=e})}function fc(){var e=uc(),t=!!r.claudeHistoryLoaded,n=Ec(),i=!!r.codexHistoryLoaded,a=t&&i,s=(t?e.length:0)+(i?n.length:0);if(a&&s===0)return"";var o=!!r.claudeHistoryExpanded,l=o?"▾":"▸",d=a?s>999?"999+":String(s):"\xB7\xB7\xB7",c='<div class="session-group-title claude-history-toggle session-history-toggle" id="claude-history-toggle" role="button" tabindex="0" aria-expanded="'+o+'" title="'+(o?"\u6536\u8D77\u5386\u53F2\u4F1A\u8BDD":"\u5C55\u5F00\u5386\u53F2\u4F1A\u8BDD")+'"><span class="chevron">'+l+'</span> \u5386\u53F2\u4F1A\u8BDD <span class="history-count'+(a?"":" loading")+'">'+d+"</span></div>",u=o?'<div class="session-history-body">'+pc(e)+wc(n)+"</div>":"";return'<section class="session-group session-group--history">'+c+u+"</section>"}function pc(e){if(!r.claudeHistoryLoaded)return'<div class="claude-history-loading">\u626B\u63CF\u5386\u53F2\u4F1A\u8BDD\u4E2D\u2026</div>';if(e.length===0)return"";var t={},n=[];e.forEach(function(s){t[s.cwd]||(t[s.cwd]=[],n.push(s.cwd)),t[s.cwd].push(s)});var i='<div class="sidebar-history-toolbar"><button class="btn btn-ghost btn-xs sidebar-history-clear" data-action="clear-all-history" type="button">\u6E05\u7A7A\u5168\u90E8</button></div>',a="";return n.forEach(function(s){var o=s.split("/").filter(Boolean).slice(-3).join("/"),l=!!r.claudeHistoryExpandedDirs[s];a+=kc(s,o,t[s].length,l),l&&(a+=t[s].map(function(d){return Yi(d,"history")}).join(""))}),i+'<div class="sidebar-history-scroll">'+a+"</div>"}function Rn(){var e=new Set;return r.sessions.forEach(function(t){t.claudeSessionId&&e.add(t.claudeSessionId)}),r.claudeHistory.filter(function(t){return t.hasConversation&&!t.managedByWand&&!e.has(t.claudeSessionId)})}function Es(){return Object.keys(r.selectedSessionIds).filter(function(e){return!!r.selectedSessionIds[e]})}function Is(){return Object.keys(r.selectedClaudeHistoryIds).filter(function(e){return!!r.selectedClaudeHistoryIds[e]})}function $r(){r.selectedSessionIds={},r.selectedClaudeHistoryIds={}}function vc(e){r.sessionsManageMode=typeof e=="boolean"?e:!r.sessionsManageMode,r.sessionsManageMode&&!r.claudeHistoryLoaded&&Xr().then(me),r.sessionsManageMode||($r(),Pr()),me()}function Cs(){return r.sessions.slice()}function mc(){return Cs().length+Rn().length}function Ts(){if(!r.claudeHistoryLoaded){Xr().then(Ts);return}r.claudeHistoryExpanded=!0;var e={};Cs().forEach(function(n){e[n.id]=!0});var t={};Rn().forEach(function(n){t[n.claudeSessionId]=!0}),r.selectedSessionIds=e,r.selectedClaudeHistoryIds=t,me()}function gc(){$r(),me()}function hr(e,t){if(!(!r.sessionsManageMode||!t)){var n=e==="history"?r.selectedClaudeHistoryIds:r.selectedSessionIds;n[t]?delete n[t]:n[t]=!0,me()}}function Ls(e,t,n){if(!r.sessionsManageMode)return"";var i=e==="history"?!!r.selectedClaudeHistoryIds[t]:!!r.selectedSessionIds[t];return'<label class="session-manage-check"><input type="checkbox" data-action="toggle-selection" data-kind="'+p(e)+'" data-id="'+p(t)+'"'+(i?" checked":"")+' aria-label="'+p(n)+'"><span></span></label>'}function Fn(e,t){return typeof window.wandConfirm=="function"?window.wandConfirm(e,Object.assign({type:"danger",danger:!0,okLabel:"\u5220\u9664"},t||{})):Promise.resolve(window.confirm(e))}function hc(){var e=Es(),t=Is(),n=e.length+t.length;n&&Fn("\u786E\u8BA4\u5220\u9664\u6240\u9009 "+n+" \u9879\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u6240\u9009 "+n+" \u9879"}).then(function(i){if(i){var a=[];e.length>0&&a.push(fetch("/api/sessions/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({sessionIds:e})}).then(function(s){return s.json()})),t.length>0&&a.push(fetch("/api/claude-history/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({claudeSessionIds:t})}).then(function(s){return s.json()})),Promise.all(a).then(function(){return e.indexOf(r.selectedId)!==-1&&(r.selectedId=null,ye()),r.claudeHistory=r.claudeHistory.filter(function(s){return t.indexOf(s.claudeSessionId)===-1}),$r(),Ht()}).catch(function(){var s=document.getElementById("action-error");Ke(s,"\u65E0\u6CD5\u6279\u91CF\u5220\u9664\u6240\u9009\u9879\u76EE\u3002")})}})}function bc(){var e=Date.now()-864e5,t=Rn().filter(function(n){return!n.timestamp||new Date(n.timestamp).getTime()<=e});if(t.length)return Fn("\u786E\u8BA4\u6E05\u7A7A\u5F53\u524D\u663E\u793A\u7684 "+t.length+" \u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u6E05\u7A7A Claude \u5386\u53F2",okLabel:"\u6E05\u7A7A"}).then(function(n){if(n){var i=t.map(function(a){return a.claudeSessionId});return fetch("/api/claude-history/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({claudeSessionIds:i})}).then(function(a){return a.json()}).then(function(a){if(a&&a.error)throw new Error(a.error);r.claudeHistory=r.claudeHistory.filter(function(s){return i.indexOf(s.claudeSessionId)===-1}),$r(),me()}).catch(function(){var a=document.getElementById("action-error");Ke(a,"\u65E0\u6CD5\u6E05\u7A7A\u5386\u53F2\u4F1A\u8BDD\u3002")})}})}function yc(e,t,n,i){var a=i?"\u25BE":"\u25B8";return'<div class="claude-history-directory-header codex-history-directory-header" data-action="toggle-codex-history-directory" data-cwd="'+p(e)+'" role="button" tabindex="0"><div class="session-group-title claude-history-directory-title"><span class="chevron">'+a+'</span><span class="claude-history-directory-label">'+p(t)+" ("+n+")</span></div></div>"}function wc(e){if(!r.codexHistoryLoaded)return'<div class="claude-history-loading">\u626B\u63CF Codex \u5386\u53F2\u4F1A\u8BDD\u4E2D\u2026</div>';if(e.length===0)return"";var t={},n=[];e.forEach(function(a){t[a.cwd]||(t[a.cwd]=[],n.push(a.cwd)),t[a.cwd].push(a)});var i='<div class="sidebar-history-section-label">Codex</div>';return n.forEach(function(a){var s=a.split("/").filter(Boolean).slice(-3).join("/"),o=!!r.codexHistoryExpandedDirs[a];i+=yc(a,s,t[a].length,o),o&&(i+=t[a].map(function(l){return Yi(l,"codex")}).join(""))}),'<div class="sidebar-history-scroll codex-history-scroll">'+i+"</div>"}function kc(e,t,n,i){var a=i?"▾":"▸";return'<div class="claude-history-directory-header" data-action="toggle-history-directory" data-cwd="'+p(e)+'" role="button" tabindex="0"><div class="session-group-title claude-history-directory-title"><span class="chevron">'+a+'</span><span class="claude-history-directory-label">'+p(t)+" ("+n+')</span><button class="btn btn-danger btn-xs claude-history-directory-clear-btn" data-action="delete-history-directory" data-cwd="'+p(e)+'" type="button" aria-label="\u6E05\u7A7A\u6B64\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD" title="\u6E05\u7A7A\u6B64\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD">\u6E05\u7A7A\u6B64\u76EE\u5F55</button></div></div>'}function Yi(e,t){var n=t==="codex",i=n?"resume-codex-history":"resume-history",a=n?"delete-codex-history":"delete-history",s=n?r.selectedCodexHistoryIds:r.selectedClaudeHistoryIds,o=e.claudeSessionId.slice(0,8),l=e.firstUserMessage||"(\u7A7A\u4F1A\u8BDD)",d=Bs(e.timestamp),c=Ls(t,e.claudeSessionId,"\u9009\u62E9\u5386\u53F2\u4F1A\u8BDD "+l),u=r.sessionsManageMode?"":'<button class="session-action-btn delete-btn" data-action="'+a+'" data-claude-session-id="'+e.claudeSessionId+'" type="button" aria-label="\u5220\u9664\u4F1A\u8BDD" title="\u9690\u85CF\u6B64\u5386\u53F2\u4F1A\u8BDD"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg></button>',f=r.sessionsManageMode?"":'<button class="session-action-btn" data-action="'+i+'" data-claude-session-id="'+e.claudeSessionId+'" data-cwd="'+p(e.cwd)+'" type="button" aria-label="\u6062\u590D\u4F1A\u8BDD" title="'+(n?"\u6062\u590D\u6B64 Codex \u5386\u53F2\u4F1A\u8BDD":"\u6062\u590D\u6B64 Claude \u5386\u53F2\u4F1A\u8BDD")+'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 4v6h6"/><path d="M3.51 15a9 9 0 105.64-11.36L3 10"/></svg></button>';return'<div class="session-item claude-history-item'+(r.sessionsManageMode&&s[e.claudeSessionId]?" selected":"")+'" data-claude-history-id="'+e.claudeSessionId+'" data-cwd="'+p(e.cwd)+'" role="button" tabindex="0"><div class="session-item-content"><div class="session-item-row">'+c+'<div class="session-main"><div class="session-command claude-history-preview">'+p(l)+'</div><div class="session-meta"><span class="session-id" title="'+p(e.claudeSessionId)+'">'+p(o)+"</span><span>"+p(d)+'</span></div></div><span class="session-actions">'+f+u+"</span></div></div></div>"}function Bs(e){if(!e)return"";try{var t=new Date(e),n=new Date,i=n-t,a=Math.floor(i/6e4);if(a<1)return"\u521A\u521A";if(a<60)return a+" \u5206\u949F\u524D";var s=Math.floor(a/60);if(s<24)return s+" \u5C0F\u65F6\u524D";var o=Math.floor(s/24);return o<30?o+" \u5929\u524D":t.toLocaleDateString()}catch{return""}}function Ms(){return fetch("/api/claude-history",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){r.claudeHistory=e||[],r.claudeHistoryLoaded=!0,me()}).catch(function(){r.claudeHistoryLoaded=!0,r.claudeHistory=[],me()})}var Wn=null;function Xr(){return Sc(),r.claudeHistoryLoaded?Promise.resolve():Wn||(Wn=Ms().then(function(){Wn=null},function(){Wn=null}),Wn)}function xc(){return fetch("/api/codex-history",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){r.codexHistory=e||[],r.codexHistoryLoaded=!0,me()}).catch(function(){r.codexHistoryLoaded=!0,r.codexHistory=[],me()})}var zn=null;function Sc(){return r.codexHistoryLoaded?Promise.resolve():zn||(zn=xc().then(function(){zn=null},function(){zn=null}),zn)}function Ec(){var e=new Set;return r.sessions.forEach(function(t){t.claudeSessionId&&e.add(t.claudeSessionId)}),r.codexHistory.filter(function(t){return t.hasConversation&&!t.managedByWand&&!e.has(t.claudeSessionId)})}function Ne(){return window.innerWidth<=768}function As(){return!!r.sessionsDrawerOpen&&(Ne()||!r.sidebarPinned)}function Gi(e){r.filePanelOpen=e;try{localStorage.setItem("wand-file-panel-open",String(r.filePanelOpen))}catch{}r.filePanelOpen&&Ne()&&(r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1)),on(),r.filePanelOpen&&Pt()}function Zr(){Gi(!r.filePanelOpen)}function Ic(){var e=document.getElementById("file-side-panel"),t=document.querySelector(".main-content"),n=document.getElementById("file-panel-toggle-btn"),i=document.getElementById("file-panel-backdrop");e&&e.classList.toggle("open",r.filePanelOpen),t&&t.classList.toggle("file-panel-open",r.filePanelOpen),i&&i.classList.toggle("open",r.filePanelOpen),n&&n.classList.toggle("active",r.filePanelOpen)}function on(){Er(),Ic()}function Cc(e){var t=document.getElementById("file-explorer-cwd");if(t){var n=e&&e.cwd?e.cwd:sn();t.tagName==="INPUT"?document.activeElement!==t&&(t.value=n):t.textContent=n,t.title=n}}function qs(){r.filePanelOpen&&Gi(!1)}function Os(e){var t=r.terminalScale+e;if(t=Math.max(.5,Math.min(2,t)),t=Math.round(t*4)/4,t!==r.terminalScale){r.terminalScale=t;try{localStorage.setItem("wand-terminal-scale",String(t))}catch{}Ps(),Tc()}}function Ps(){if(!(!r.terminal||!r.terminal.element)){var e=r.terminalBaseFontSize*r.terminalScale,t=Math.max(1,Math.round(e)),n=Math.max(1,Math.round(e*1.5));r.terminal.element.style.setProperty("--term-font-size",t+"px"),r.terminal.element.style.setProperty("--term-row-height",n+"px"),typeof r.terminal.remeasure=="function"&&requestAnimationFrame(function(){r.terminal&&r.terminal.remeasure()})}}function Tc(){var e=document.getElementById("terminal-scale-label-top");e&&(e.textContent=Math.round(r.terminalScale*100)+"%")}var Lc={"chevron-left":'<path d="M15 18l-6-6 6-6"/>',"arrow-up":'<path d="M12 19V5"/><path d="M5 12l7-7 7 7"/>',refresh:'<path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 4v5h-5"/>',eye:'<path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/>',"eye-off":'<path d="M17.94 17.94A10.94 10.94 0 0 1 12 19c-7 0-11-7-11-7a19.86 19.86 0 0 1 4.22-5.18"/><path d="M1 1l22 22"/><path d="M9.9 4.24A10.94 10.94 0 0 1 12 4c7 0 11 7 11 7a19.83 19.83 0 0 1-3.36 4.27"/><path d="M14.12 14.12a3 3 0 1 1-4.24-4.24"/>',x:'<path d="M18 6L6 18"/><path d="M6 6l12 12"/>',search:'<circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/>',copy:'<rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V5a2 2 0 0 1 2-2h10"/>',clipboard:'<rect x="8" y="3" width="8" height="4" rx="1"/><path d="M16 5h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/>',edit:'<path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4z"/>',save:'<path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"/><path d="M17 21v-8H7v8"/><path d="M7 3v5h8"/>',"rotate-ccw":'<path d="M3 12a9 9 0 1 0 3-6.7"/><path d="M3 4v5h5"/>',"wrap-text":'<path d="M3 6h18"/><path d="M3 12h15a3 3 0 1 1 0 6h-4"/><path d="M16 16l-2 2 2 2"/><path d="M3 18h6"/>',type:'<path d="M4 7V4h16v3"/><path d="M9 20h6"/><path d="M12 4v16"/>',minus:'<path d="M5 12h14"/>',plus:'<path d="M12 5v14"/><path d="M5 12h14"/>',"send-to-input":'<path d="M22 2L11 13"/><path d="M22 2l-7 20-4-9-9-4z"/>',terminal:'<polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>',"folder-open":'<path d="M6 14l1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"/>',info:'<circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/>'};function Ae(e,t){t=t||{};var n=Lc[e]||"",i=t.size||16,a=t.className?" "+t.className:"";return'<svg class="wand-icon wand-icon-'+e+a+'" width="'+i+'" height="'+i+'" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+n+"</svg>"}function Bc(e){var t=e||sn();return t?'<div class="file-tree" id="file-tree" data-cwd="'+p(t)+'"><div class="tree-loading">\u52A0\u8F7D\u4E2D\u2026</div></div>':'<div class="file-explorer empty">\u672A\u914D\u7F6E\u5DE5\u4F5C\u76EE\u5F55\u3002</div>'}var Mc={png:"\u{1F5BC}\uFE0F",jpg:"\u{1F5BC}\uFE0F",jpeg:"\u{1F5BC}\uFE0F",gif:"\u{1F5BC}\uFE0F",webp:"\u{1F5BC}\uFE0F",svg:"\u{1F5BC}\uFE0F",avif:"\u{1F5BC}\uFE0F",bmp:"\u{1F5BC}\uFE0F",ico:"\u{1F5BC}\uFE0F",heic:"\u{1F5BC}\uFE0F",heif:"\u{1F5BC}\uFE0F",pdf:"\u{1F4D5}",doc:"\u{1F4D8}",docx:"\u{1F4D8}",odt:"\u{1F4D8}",xls:"\u{1F4CA}",xlsx:"\u{1F4CA}",csv:"\u{1F4CA}",tsv:"\u{1F4CA}",ppt:"\u{1F4D9}",pptx:"\u{1F4D9}",mp4:"\u{1F3AC}",webm:"\u{1F3AC}",mov:"\u{1F3AC}",mkv:"\u{1F3AC}",m4v:"\u{1F3AC}",ogv:"\u{1F3AC}",mp3:"\u{1F3B5}",wav:"\u{1F3B5}",ogg:"\u{1F3B5}",m4a:"\u{1F3B5}",flac:"\u{1F3B5}",aac:"\u{1F3B5}",opus:"\u{1F3B5}",zip:"\u{1F4E6}",tar:"\u{1F4E6}",gz:"\u{1F4E6}",tgz:"\u{1F4E6}",bz2:"\u{1F4E6}","7z":"\u{1F4E6}",rar:"\u{1F4E6}",xz:"\u{1F4E6}",md:"\u{1F4DD}",markdown:"\u{1F4DD}",mdx:"\u{1F4DD}",rst:"\u{1F4DD}",txt:"\u{1F4DD}",log:"\u{1F4DD}",html:"\u{1F310}",htm:"\u{1F310}",xml:"\u{1F310}",css:"\u{1F3A8}",scss:"\u{1F3A8}",less:"\u{1F3A8}",json:"\u2699\uFE0F",jsonc:"\u2699\uFE0F",yaml:"\u2699\uFE0F",yml:"\u2699\uFE0F",toml:"\u2699\uFE0F",ini:"\u2699\uFE0F",cfg:"\u2699\uFE0F",conf:"\u2699\uFE0F",env:"\u2699\uFE0F",editorconfig:"\u2699\uFE0F",ts:"\u{1F4DC}",tsx:"\u{1F4DC}",js:"\u{1F4DC}",jsx:"\u{1F4DC}",mjs:"\u{1F4DC}",cjs:"\u{1F4DC}",py:"\u{1F4DC}",rb:"\u{1F4DC}",go:"\u{1F4DC}",rs:"\u{1F4DC}",java:"\u{1F4DC}",c:"\u{1F4DC}",cpp:"\u{1F4DC}",h:"\u{1F4DC}",hpp:"\u{1F4DC}",cs:"\u{1F4DC}",swift:"\u{1F4DC}",kt:"\u{1F4DC}",scala:"\u{1F4DC}",php:"\u{1F4DC}",sh:"\u{1F4DC}",bash:"\u{1F4DC}",zsh:"\u{1F4DC}",fish:"\u{1F4DC}",lua:"\u{1F4DC}",sql:"\u{1F4DC}",graphql:"\u{1F4DC}",proto:"\u{1F4DC}",vue:"\u{1F4DC}",svelte:"\u{1F4DC}",diff:"\u{1F4DC}",patch:"\u{1F4DC}",ttf:"\u{1F524}",otf:"\u{1F524}",woff:"\u{1F524}",woff2:"\u{1F524}",eot:"\u{1F524}"};function Hs(e){if(!e)return"\u{1F4C4}";if(e.type==="dir")return"\u{1F4C1}";var t=(e.name||"").toLowerCase();if(t==="dockerfile")return"\u{1F433}";if(t==="makefile")return"\u{1F6E0}\uFE0F";if(t==="license")return"\u{1F4DC}";if(t==="readme")return"\u{1F4DD}";var n=t.lastIndexOf(".");if(n<0||n===t.length-1)return"\u{1F4C4}";var i=t.slice(n+1);return Mc[i]||"\u{1F4C4}"}function Ac(e){if(!e)return"";var t=Date.parse(e);return isNaN(t)?"":new Date(t).toLocaleString()}function _s(){if(r.fileExplorerCwd)return r.fileExplorerCwd;if(r.selectedId){var e=r.sessions.find(function(t){return t.id===r.selectedId});if(e&&e.cwd)return e.cwd}return sn()}function Pt(e){e=e||{};var t=document.getElementById("file-explorer"),n=document.getElementById("file-explorer-cwd");if(t){var i=e.cwd||_s();if(!i){t.innerHTML='<div class="file-explorer empty">\u6CA1\u6709\u53EF\u663E\u793A\u7684\u5DE5\u4F5C\u76EE\u5F55\u3002</div>';return}r.fileExplorerCwd=i,r.fileExplorerLoading=!0,r.allFiles=[],r.fileExplorerTruncated=!1,r.fileExplorerTotal=0,t.innerHTML='<div class="file-explorer"><div class="tree-loading" style="padding:12px;color:var(--text-muted);font-size:0.8125rem;">\u52A0\u8F7D\u4E2D\u2026</div></div>',n&&(n.tagName==="INPUT"?document.activeElement!==n&&(n.value=i):n.textContent=i,n.title=i);var a="/api/directory?q="+encodeURIComponent(i)+"&gitStatus=true";fetch(a,{credentials:"same-origin"}).then(function(s){if(!s.ok)throw new Error("Failed to load directory.");return s.json()}).then(function(s){r.fileExplorerLoading=!1;var o,l,d;if(Array.isArray(s)?(o=s,l=!1,d=s.length):(o=s&&s.items||[],l=!!(s&&s.truncated),d=s&&s.total||o.length),!o||o.length===0){t.innerHTML='<div class="file-explorer empty">\u7A7A\u76EE\u5F55\u6216\u65E0\u6CD5\u8BBF\u95EE\u3002</div>';return}r.allFiles=o,r.fileExplorerTruncated=l,r.fileExplorerTotal=d,Ds()}).catch(function(){r.fileExplorerLoading=!1,t.innerHTML='<div class="file-explorer empty">\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8DEF\u5F84\u6216\u6743\u9650\u3002</div>'})}}function Ds(){var e=document.getElementById("file-explorer");if(e){var t=r.fileExplorerCwd||"";if(t){var n=r.fileSearchQuery,i=r.allFiles||[],a=i;if(n){var s=n.toLowerCase();a=i.filter(function(d){return d.name.toLowerCase().indexOf(s)!==-1})}if(a.length===0){e.innerHTML='<div class="file-explorer empty">'+(n?"\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6":"\u7A7A\u76EE\u5F55")+"</div>";return}var o="";if(!n&&r.fileExplorerTruncated){var l=i.length;o='<div class="tree-truncated" title="\u540E\u7AEF\u6309\u5B57\u6BCD\u5E8F\u6700\u591A\u8FD4\u56DE '+l+' \u9879">\u663E\u793A\u524D '+l+" \u9879 / \u5171 "+r.fileExplorerTotal+" \u9879</div>"}e.innerHTML='<div class="file-tree" id="file-tree" data-cwd="'+p(t)+'">'+a.map(function(d){return js(d)}).join("")+"</div>"+o,Ns()}}}function js(e,t){t=t||0;var n=p(e.name),i=e.type==="dir",a=Hs(e),s=i?"\u25B8":"",o=i?"":" empty",l=e.gitStatus,d=qc(l),c="";return!i&&typeof e.size=="number"&&(c='<span class="tree-meta" title="\u5927\u5C0F\uFF1A'+p(vn(e.size))+(e.mtime?`
|
|
6
|
-
\u4FEE\u6539\u65F6\u95F4\uFF1A`+p(
|
|
7
|
-
`)?" ":"";t.value=n+i+e,t.dispatchEvent(new Event("input",{bubbles:!0}));try{t.focus(),t.setSelectionRange(t.value.length,t.value.length)}catch{}return!0}function ei(e){if(navigator.clipboard&&navigator.clipboard.writeText)return navigator.clipboard.writeText(e).then(function(){return!0}).catch(function(){return t()});return Promise.resolve(t());function t(){try{var n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.left="-9999px",document.body.appendChild(n),n.select();var i=document.execCommand("copy");return document.body.removeChild(n),i}catch{return!1}}}function Ct(e){if(typeof window.showToast=="function"){window.showToast(e);return}var t=document.createElement("div");t.className="wand-mini-toast",t.textContent=e,document.body.appendChild(t),setTimeout(function(){t.classList.add("show")},10),setTimeout(function(){t.classList.remove("show"),setTimeout(function(){t.remove()},220)},1600)}function Un(){var e=document.getElementById("file-context-menu");e&&e.remove(),document.removeEventListener("click",Un,!0),document.removeEventListener("scroll",Un,!0)}function Rs(e,t,n){Un();var i=n.dataset.path||"",a=n.dataset.type||"file",s=r.fileExplorerCwd||"",o=i;s&&i.indexOf(s)===0&&(o=i.slice(s.length).replace(/^\/+/,"")||".");var l=document.createElement("div");l.id="file-context-menu",l.className="file-context-menu";var
|
|
5
|
+
3) \u7528\u5185\u7F51 CA \u6216 Let's Encrypt \u7ED9\u57DF\u540D\u7B7E\u771F\u8BC1\u4E66\uFF08\u540C\u4E0A\u914D\u7F6E tls\uFF09`):console.log("SW registration failed:",an)});var reloading=!1,pageReady=!1;setTimeout(function(){pageReady=!0},3e3),navigator.serviceWorker.addEventListener("controllerchange",function(){reloading||!pageReady||(reloading=!0,location.reload())})}(function(){function Et(){var je="browser";return window.matchMedia("(display-mode: window-controls-overlay)").matches?je="window-controls-overlay":window.matchMedia("(display-mode: standalone)").matches?je="standalone":window.matchMedia("(display-mode: fullscreen)").matches?je="fullscreen":navigator.standalone===!0&&(je="standalone"),document.documentElement.setAttribute("data-display-mode",je),document.documentElement.classList.toggle("is-pwa",je!=="browser"),je}Et(),["standalone","window-controls-overlay","fullscreen"].forEach(function(je){window.matchMedia("(display-mode: "+je+")").addEventListener("change",Et)});try{var an=navigator&&navigator.userAgent||"";/WandApp\//.test(an)&&document.documentElement.classList.add("is-wand-app")}catch{}})(),(function(){var Et="${escapeHtml(configPath)}",an="wand-chat-expand-state-v1",je=[function(){}];(function(){try{var t=localStorage.getItem("wand-ls-schema"),n=t==null?0:parseInt(t,10);n>=0||(n=0);for(var i=n;i<je.length;i++)try{je[i]()}catch{}n<je.length&&localStorage.setItem("wand-ls-schema",String(je.length))}catch{}})();function _i(e,t){try{var n=localStorage.getItem(e);return n==="true"?!0:n==="false"?!1:t}catch{return t}}function Ee(e,t){try{localStorage.setItem(e,String(!!t))}catch{}}var r={selectedId:(function(){try{return localStorage.getItem("wand-selected-session")||null}catch{return null}})(),pollTimer:null,config:null,sessions:[],suggestionTimer:null,terminal:null,terminalFitInProgress:!1,terminalSessionId:null,terminalOutput:"",terminalOutputMarker:0,terminalLiveStreamSessions:{},syncOutputBuffer:null,syncOutputDeadline:0,syncFramingResidue:!1,lastChunkAt:0,terminalHealthTimer:null,lastTerminalResyncAt:0,terminalAutoFollow:!0,terminalProgrammaticScrollUntil:0,terminalScrollIdleTimer:null,terminalScrollThreshold:12,showTerminalJumpToBottom:!1,terminalViewportEl:null,terminalViewportScrollHandler:null,terminalViewportTouchHandler:null,terminalViewportTouchStartHandler:null,terminalTouchStartY:0,terminalComposing:!1,resizeObserver:null,resizeHandler:null,resizeTimer:null,inputQueue:Promise.resolve(),pendingMessages:[],messageQueue:[],crossSessionQueue:(function(){try{var e=localStorage.getItem("wand-cross-session-queue"),t=e?JSON.parse(e):[];return Array.isArray(t)?t:[]}catch{return[]}})(),structuredInputQueue:[],queueBarHoverIndex:null,queueBarDrag:null,drafts:{},isSyncingInputBox:!1,loginPending:!1,loginChecked:!1,bootstrapping:!0,sessionsDrawerOpen:_i("wand-sidebar-open",!1),sidebarPinned:_i("wand-sidebar-pinned",!0),sidebarCollapsed:_i("wand-sidebar-collapsed",!1),modalOpen:!1,presetValue:"",cwdValue:"",modeValue:"managed",chatMode:"managed",chatModel:(function(){try{return localStorage.getItem("wand-chat-model")||""}catch{return""}})(),chatThinking:(function(){try{var e=localStorage.getItem("wand-thinking-effort")||"off";return e==="off"||e==="standard"||e==="deep"||e==="max"?e:"off"}catch{return"off"}})(),availableModels:[],availableCodexModels:[],modelsRefreshing:!1,sessionCreateKind:"structured",sessionCreateWorktree:!1,sessionTool:"claude",activeWorktreeMergeSessionId:null,worktreeMergeCheckResult:null,worktreeMergeLoading:!1,worktreeMergeSubmitting:!1,worktreeMergeError:"",preferredCommand:"claude",structuredRunner:"claude-cli-print",lastResize:{cols:0,rows:0},isOnline:navigator.onLine,deferredPrompt:null,showInstallPrompt:!1,ws:null,wsConnected:!1,lastWsMessageAt:0,wsHeartbeatCheckTimer:null,_updateBubbleShown:!1,notificationHistory:{},delayedNotificationTimer:null,notifSound:(function(){try{var e=localStorage.getItem("wand-notif-sound");return e===null?!0:e==="true"}catch{return!0}})(),notifVolume:(function(){try{var e=localStorage.getItem("wand-notif-volume");return e===null?80:Math.max(0,Math.min(100,parseInt(e,10)||80))}catch{return 80}})(),notifBubble:(function(){try{var e=localStorage.getItem("wand-notif-bubble");return e===null?!0:e==="true"}catch{return!0}})(),toolContentCache:{},lastSeqBySession:{},currentView:"terminal",terminalScale:(function(){try{var e=localStorage.getItem("wand-terminal-scale");return e?parseFloat(e):1}catch{return 1}})(),terminalBaseFontSize:13,keyboardPopupOpen:!1,filePanelOpen:(function(){try{return localStorage.getItem("wand-file-panel-open")==="true"}catch{return!1}})(),topbarMoreOpen:!1,gitStatus:null,gitStatusSessionId:null,gitStatusLoading:!1,gitStatusInflight:null,gitStatusLastFetchAt:0,quickCommitOpen:!1,quickCommitSubmitting:!1,quickCommitGenerating:!1,quickCommitError:"",quickCommitForm:{customMessage:"",tag:"",tagEdited:!1},quickCommitPushing:!1,quickCommitPushError:"",quickCommitResult:null,quickCommitDragAction:"commit",quickCommitSubmoduleIntent:!1,chatStickToBottom:!0,chatUnreadCount:0,chatUnreadStartIndex:-1,chatScrollThreshold:160,chatIsProgrammaticScroll:!1,chatScrollElement:null,chatScrollHandler:null,chatScrollWheelHandler:null,chatScrollTouchStartHandler:null,chatScrollTouchMoveHandler:null,chatTouchStartY:0,chatInitialRenderDone:!1,lastForegroundSyncAt:0,foregroundSyncTimer:null,wsReconnectAttempts:0,wsReconnectTimer:null,currentMessages:[],lastRenderedHash:0,lastRenderedMsgCount:0,lastRenderedEmpty:null,renderPending:!1,chatPageSize:20,chatRenderedCount:20,currentTask:null,terminalInteractive:!1,miniKeyboardVisible:!1,modifiers:{ctrl:!1,alt:!1,shift:!1},joystickPos:(function(){try{var e=localStorage.getItem("wand-ball-pos");if(!e)return null;var t=JSON.parse(e);return t&&typeof t=="object"?t:null}catch{return null}})(),joystickPinnedOpen:!1,joystickRootEl:null,joystickPanelEl:null,joystickBackdropEl:null,joystickBallEl:null,joystickPointerId:null,joystickGesture:null,joystickPressStart:null,joystickLongPressTimer:null,joystickMoveHandler:null,joystickUpHandler:null,joystickResizeHandler:null,fileSearchQuery:"",fileExplorerLoading:!1,allFiles:[],fileExplorerCwd:"",fileExplorerTruncated:!1,fileExplorerTotal:0,claudeHistory:[],claudeHistoryLoaded:!1,claudeHistoryExpanded:!1,claudeHistoryExpandedDirs:{},archivedExpanded:!1,sessionsManageMode:!1,selectedSessionIds:{},selectedClaudeHistoryIds:{},codexHistory:[],codexHistoryLoaded:!1,codexHistoryExpandedDirs:{},selectedCodexHistoryIds:{},askUserSelections:{},queueEpoch:0,pendingAttachments:[],workingDir:(function(){try{var e=localStorage.getItem("wand-working-dir");return e||""}catch{return""}})()},Di="\u4E2D\u6587",Vr={\u4E2D\u6587:{"subagent.tag":"\u5B50\u4EE3\u7406","subagent.handoff":"{parent} \u8BA9 {sub} \u5E2E\u5FD9","subagent.handoff.with_desc":"{parent} \u8BA9 {sub} \u5E2E\u5FD9\uFF1A","subagent.continued":"\u7EE7\u7EED\u8F93\u51FA","subagent.task.done":"\u4EFB\u52A1\u5B8C\u6210","subagent.task.failed":"\u4EFB\u52A1\u5931\u8D25","subagent.running":"\u8FD0\u884C\u4E2D","subagent.no_output":"\uFF08\u65E0\u8F93\u51FA\uFF09","subagent.helper_fallback_prefix":"\u534F\u4F5C\u732B\xB7","subagent.title_aria":"\u70B9\u51FB\u5C55\u5F00 / \u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA","subagent.tag_title":"\u5B50\u4EE3\u7406 / subagent","ui.expand":"\u5C55\u5F00","ui.collapse":"\u6536\u8D77","ui.expand_panel_aria":"\u5C55\u5F00\u5B50\u4EE3\u7406\u8F93\u51FA","ui.collapse_panel_aria":"\u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA"},English:{"subagent.tag":"Subagent","subagent.handoff":"{parent} asked {sub} for help","subagent.handoff.with_desc":"{parent} asked {sub} for help with: ","subagent.continued":"continued","subagent.task.done":"Task complete","subagent.task.failed":"Task failed","subagent.running":"Running","subagent.no_output":"(no output)","subagent.helper_fallback_prefix":"Helper\xB7","subagent.title_aria":"Click to expand / collapse subagent output","subagent.tag_title":"Subagent","ui.expand":"Expand","ui.collapse":"Collapse","ui.expand_panel_aria":"Expand subagent output","ui.collapse_panel_aria":"Collapse subagent output"}};function ls(){var e=r.config&&typeof r.config.language=="string"?r.config.language.trim():"";if(!e)return Di;if(Vr[e])return e;var t=e.toLowerCase();return t==="english"||t==="en"||t.indexOf("english")===0||t.indexOf("\u82F1")===0?"English":t==="\u4E2D\u6587"||t==="zh"||t.indexOf("zh")===0||t.indexOf("\u4E2D")===0||t.indexOf("chinese")===0?"\u4E2D\u6587":"English"}function Je(e,t){var n=ls(),i=Vr[n]||Vr[Di],a=i&&e in i?i[e]:null;if(a==null){var s=Vr[Di];a=s&&e in s?s[e]:e}if(t&&typeof a=="string")for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(a=a.split("{"+o+"}").join(t[o]));return a}var Cc={shield:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>',shieldCheck:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/><polyline points="9 12 11 14 15 10"/>',keyboard:'<rect x="2" y="6" width="20" height="12" rx="2"/><line x1="6" y1="10" x2="6" y2="10"/><line x1="10" y1="10" x2="10" y2="10"/><line x1="14" y1="10" x2="14" y2="10"/><line x1="18" y1="10" x2="18" y2="10"/><line x1="6" y1="14" x2="6" y2="14"/><line x1="18" y1="14" x2="18" y2="14"/><line x1="9" y1="14" x2="15" y2="14"/>',cloud:'<path d="M17.5 19a4.5 4.5 0 1 0-1-8.9 6 6 0 0 0-11.5 1.7A4 4 0 0 0 6 19h11.5z"/>',terminal:'<polyline points="4 7 9 12 4 17"/><line x1="12" y1="17" x2="20" y2="17"/>',chat:'<path d="M21 12a8 8 0 0 1-12.9 6.3L3 20l1.7-5.1A8 8 0 1 1 21 12z"/>',folder:'<path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',folderOpen:'<path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2"/><path d="M3 9h18l-2 8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',trash:'<polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 13a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6"/><path d="M14 11v6"/><path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>',slash:'<polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>',chevronDown:'<polyline points="6 9 12 15 18 9"/>',chevronUp:'<polyline points="6 15 12 9 18 15"/>',chevronRight:'<polyline points="9 6 15 12 9 18"/>',bell:'<path d="M18 16v-5a6 6 0 1 0-12 0v5l-2 2h16z"/><path d="M10 21a2 2 0 0 0 4 0"/>',music:'<path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/>',vibrate:'<rect x="9" y="4" width="6" height="16" rx="1"/><path d="M5 8v8"/><path d="M3 10v4"/><path d="M19 8v8"/><path d="M21 10v4"/>',globe:'<circle cx="12" cy="12" r="9"/><line x1="3" y1="12" x2="21" y2="12"/><path d="M12 3a14 14 0 0 1 0 18"/><path d="M12 3a14 14 0 0 0 0 18"/>',smartphone:'<rect x="6" y="2" width="12" height="20" rx="2.5"/><line x1="11" y1="18" x2="13" y2="18"/>',desktop:'<rect x="3" y="4" width="18" height="12" rx="2"/><line x1="8" y1="20" x2="16" y2="20"/><line x1="12" y1="16" x2="12" y2="20"/>',link:'<path d="M10 14a4.5 4.5 0 0 0 6.36 0l3-3a4.5 4.5 0 1 0-6.36-6.36l-1.42 1.41"/><path d="M14 10a4.5 4.5 0 0 0-6.36 0l-3 3a4.5 4.5 0 1 0 6.36 6.36l1.42-1.41"/>',palette:'<circle cx="13.5" cy="6.5" r="1"/><circle cx="17.5" cy="10.5" r="1"/><circle cx="8.5" cy="7.5" r="1"/><circle cx="6.5" cy="12.5" r="1"/><path d="M12 3a9 9 0 1 0 0 18 1.5 1.5 0 0 0 1.1-2.5 1.5 1.5 0 0 1 1.1-2.5h2.3A4.5 4.5 0 0 0 21 11.5C21 6.8 16.97 3 12 3z"/>',play:'<polygon points="6 4 20 12 6 20 6 4"/>',inbox:'<polyline points="22 13 16 13 14 16 10 16 8 13 2 13"/><path d="M5 5h14l3 8v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6z"/>',zap:'<polygon points="13 2 4 14 11 14 10 22 20 9 13 9 13 2"/>',wrench:'<path d="M14.7 6.3a4 4 0 1 1 4 4l-9 9-3.5 1 1-3.5 7.5-7.5z"/>',paw:'<circle cx="7.5" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="12" cy="6.8" r="2" fill="currentColor" stroke="none"/><circle cx="16.5" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="18" cy="13.3" r="1.8" fill="currentColor" stroke="none"/><path d="M7.2 16.3c.5-2.9 2.3-4.8 4.8-4.8s4.3 1.9 4.8 4.8c.3 1.8-.9 3.2-2.6 2.6-.8-.3-1.4-.6-2.2-.6s-1.4.3-2.2.6c-1.7.6-2.9-.8-2.6-2.6z" fill="currentColor" stroke="none"/>',edit:'<path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z"/>',check:'<polyline points="5 12 10 17 19 7"/>',signal:'<path d="M2 12a15 15 0 0 1 20 0"/><path d="M5 16a10 10 0 0 1 14 0"/><path d="M9 20a4 4 0 0 1 6 0"/><circle cx="12" cy="20" r="0.5" fill="currentColor"/>',file:'<path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><polyline points="14 3 14 9 20 9"/>',image:'<rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.5"/><polyline points="3 18 9 12 14 17 21 12"/>',sigma:'<polyline points="18 4 6 4 13 12 6 20 18 20"/>',x:'<path d="M18 6 6 18"/><path d="M6 6l12 12"/>',plus:'<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>',mic:'<rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><line x1="12" y1="18" x2="12" y2="21"/><line x1="9" y1="21" x2="15" y2="21"/>',paperclip:'<path d="M21.44 11.05 12.25 20.24a6 6 0 0 1-8.49-8.49l8.84-8.84a4 4 0 1 1 5.66 5.66L9.41 17.41a2 2 0 1 1-2.83-2.83l8.84-8.83"/>'};function J(e,t){var n=Cc[e];if(!n)return"";t=t||{};var i=t.size||14,a=t.strokeWidth||1.8,s=t.cls?' class="'+t.cls+'"':"",o=t.fill||"none";return"<svg"+s+' width="'+i+'" height="'+i+'" viewBox="0 0 24 24" fill="'+o+'" stroke="currentColor" stroke-width="'+a+'" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+n+"</svg>"}var mt=null,Vt=0,dr=null,Kr=0;function ji(e){if(!e)return{active:!1};if(e.archived)return{active:!1};var t=!!e.permissionBlocked,n=!!(se(e)&&e.structuredState&&e.structuredState.inFlight),i=!se(e)&&e.status==="running";return{active:n||i||t,inFlight:n,ptyRunning:i,permissionBlocked:t}}function Tc(e){var t=Math.max(0,Math.floor(e/1e3));if(t<60)return t+"s";var n=Math.floor(t/60),i=t%60;if(n<60)return n+"m"+(i?" "+i+"s":"");var a=Math.floor(n/60),s=n%60;return a+"h"+(s?" "+s+"m":"")}function Ni(e){var t=ji(e),n=document.querySelector(".main-header-row"),i=n?n.querySelector(".session-status-pill"):null,a=document.querySelector(".chat-messages");if(n&&(n.classList.toggle("is-running",t.active),n.classList.toggle("is-permission-blocked",t.permissionBlocked)),i){var s=i.querySelector(".session-status-elapsed");if(t.inFlight){Kr||(Kr=Vt>0?Vt:Date.now());var o=Tc(Date.now()-Kr);s||(s=document.createElement("span"),s.className="session-status-elapsed",i.appendChild(s)),s.textContent=o}else Kr=0,s&&s.remove()}t.active?dr||(dr=setInterval(function(){var l=r.sessions.find(function(c){return c.id===r.selectedId});Ni(l)},1e3)):dr&&(clearInterval(dr),dr=null)}function Ri(e,t){Ni(t);var n=document.querySelector(".composer-top-row"),i=document.querySelector(".structured-status-bar"),a=document.querySelector(".input-composer");if(!t||!se(t)){i&&i.remove(),a&&a.classList.remove("in-flight"),clearInterval(mt),mt=null;return}var s=t.structuredState&&t.structuredState.inFlight;if(s){if(mt||(Vt=Date.now()),a&&a.classList.add("in-flight"),!i&&n){var o=document.createElement("div");o.className="structured-status-bar",o.innerHTML='<span class="status-bar-dot"></span><span class="status-bar-label">\u56DE\u590D\u4E2D</span><span class="status-bar-timer">0.0s</span>',n.appendChild(o),i=o}else if(i&&i.classList.contains("completed")){i.classList.remove("completed"),i.style.animation="none",i.querySelector(".status-bar-label").textContent="\u56DE\u590D\u4E2D";var l=i.querySelector(".status-bar-dot");l&&(l.style.display=""),Vt=Date.now()}mt||(mt=setInterval(function(){var d=document.querySelector(".structured-status-bar:not(.completed)");if(!d){clearInterval(mt),mt=null;return}var u=((Date.now()-Vt)/1e3).toFixed(1),f=d.querySelector(".status-bar-timer");f&&(f.textContent=u+"s")},100))}else if(clearInterval(mt),mt=null,a&&a.classList.remove("in-flight"),i&&!i.classList.contains("completed")){var c=Vt?((Date.now()-Vt)/1e3).toFixed(1):"0.0";i.classList.add("completed"),i.querySelector(".status-bar-label").textContent="\u5B8C\u6210",i.querySelector(".status-bar-timer").textContent=c+"s";var l=i.querySelector(".status-bar-dot");l&&(l.style.display="none"),Vt=0,setTimeout(function(){i.parentNode&&i.remove()},3e3)}}function _n(){var e=document.getElementById("chat-output");if(!e)return r.chatScrollElement=null,null;var t=e.querySelector(".chat-messages");return t?(r.chatScrollElement=t,t):(r.chatScrollElement=null,null)}function Fi(e){var t=e||_n();return t?Math.abs(t.scrollTop)<r.chatScrollThreshold:!0}function Lm(e){r.chatStickToBottom=!!e,r.chatStickToBottom&&ur({removeDivider:!0}),Ye()}function ur(e){e=e||{};var t=r.chatUnreadCount>0||r.chatUnreadStartIndex>=0;if(r.chatUnreadCount=0,r.chatUnreadStartIndex=-1,e.removeDivider!==!1){var n=_n();if(n){var i=n.querySelector(".chat-unread-divider");i&&i.parentNode&&i.parentNode.removeChild(i)}}t&&Ye()}function Wi(e){if(e||(e=_n()),!!e){var t=e.querySelector(".chat-unread-divider");if(r.chatUnreadStartIndex<0||r.chatUnreadCount<=0){t&&t.parentNode&&t.parentNode.removeChild(t);return}for(var n=r.chatUnreadStartIndex,i=e.querySelectorAll(".chat-message"),a=null,s=0;s<i.length;s++){var o=i[s].getAttribute("data-msg-index");if(o!==null){var l=parseInt(o,10);if(!isNaN(l)&&l<n){a=i[s];break}}}var c=r.chatUnreadCount+" \u6761\u65B0\u6D88\u606F";t||(t=document.createElement("div"),t.className="chat-unread-divider",t.setAttribute("role","separator"),t.innerHTML='<span class="chat-unread-divider-line"></span><span class="chat-unread-divider-label"></span><span class="chat-unread-divider-line"></span>'),t.querySelector(".chat-unread-divider-label").textContent=c,a?(t.nextSibling!==a||t.parentNode!==e)&&e.insertBefore(t,a):(t.parentNode!==e||t.nextSibling!==null)&&e.appendChild(t)}}function Ye(){var e=document.getElementById("chat-unread-bubble");if(e){var t=r.sessions.find(function(l){return l.id===r.selectedId}),n=!Fi(),i=!!t&&r.currentView==="chat"&&n;e.classList.toggle("visible",i),e.classList.toggle("has-unread",r.chatUnreadCount>0);var a=e.querySelector(".chat-unread-bubble-count");a&&(r.chatUnreadCount>0?(a.textContent=r.chatUnreadCount>99?"99+":String(r.chatUnreadCount),a.classList.add("visible")):(a.textContent="",a.classList.remove("visible")));var s=r.chatUnreadCount>0?r.chatUnreadCount+" \u6761\u65B0\u6D88\u606F\uFF0C\u70B9\u51FB\u67E5\u770B":"\u56DE\u5230\u6700\u65B0\u6D88\u606F";e.setAttribute("aria-label",s),e.setAttribute("title",s);var o=document.getElementById("chat-output");o&&o.classList.toggle("has-jump-btn",i)}}function Lc(e){var t=_n();if(!(!t||!t.isConnected)){r.chatIsProgrammaticScroll=!0;var n=function(){r.chatIsProgrammaticScroll=!1,r.chatStickToBottom=!0,ur({removeDivider:!0}),Ye()};if(e&&typeof t.scrollTo=="function"){t.scrollTo({top:0,behavior:"smooth"}),setTimeout(n,260);return}t.scrollTop=0,requestAnimationFrame(n)}}function fr(){var e=_n();if(!(!e||!e.isConnected)){if(r.chatScrollElement===e&&r.chatScrollHandler){Ye();return}r.chatScrollElement&&(r.chatScrollHandler&&r.chatScrollElement.removeEventListener("scroll",r.chatScrollHandler),r.chatScrollWheelHandler&&r.chatScrollElement.removeEventListener("wheel",r.chatScrollWheelHandler),r.chatScrollTouchStartHandler&&r.chatScrollElement.removeEventListener("touchstart",r.chatScrollTouchStartHandler),r.chatScrollTouchMoveHandler&&r.chatScrollElement.removeEventListener("touchmove",r.chatScrollTouchMoveHandler)),r.chatScrollElement=e,r.chatScrollHandler=function(){if(e.isConnected){if(r.chatIsProgrammaticScroll){Ye();return}var t=Fi(e);t?(r.chatStickToBottom=!0,ur({removeDivider:!0})):r.chatStickToBottom=!1,Ye()}},r.chatScrollWheelHandler=function(t){r.chatIsProgrammaticScroll||t.deltaY<0&&(r.chatStickToBottom=!1,Ye())},r.chatScrollTouchStartHandler=function(t){!t.touches||t.touches.length===0||(r.chatTouchStartY=t.touches[0].clientY)},r.chatScrollTouchMoveHandler=function(t){if(!r.chatIsProgrammaticScroll&&!(!t.touches||t.touches.length===0)){var n=t.touches[0].clientY-r.chatTouchStartY;n>4&&(r.chatStickToBottom=!1,Ye())}},e.addEventListener("scroll",r.chatScrollHandler,{passive:!0}),e.addEventListener("wheel",r.chatScrollWheelHandler,{passive:!0}),e.addEventListener("touchstart",r.chatScrollTouchStartHandler,{passive:!0}),e.addEventListener("touchmove",r.chatScrollTouchMoveHandler,{passive:!0}),Ye()}}function cs(){r.chatRenderedCount>=r.currentMessages.length||(r.chatRenderedCount+=r.chatPageSize,He(!0))}var pr=null;function Bc(){pr&&(pr.disconnect(),pr=null);var e=document.getElementById("chat-load-more-sentinel");if(e){var t=e.querySelector(".chat-load-more-btn");t&&(t.onclick=function(){cs()}),!(typeof IntersectionObserver>"u")&&(pr=new IntersectionObserver(function(n){for(var i=0;i<n.length;i++)if(n[i].isIntersecting){cs();break}},{root:_n(),rootMargin:"200px"}),pr.observe(e))}}function be(){try{r.selectedId?localStorage.setItem("wand-selected-session",r.selectedId):localStorage.removeItem("wand-selected-session")}catch{}}function zi(e){return e&&Array.isArray(e.queuedMessages)?e.queuedMessages:r.structuredInputQueue}function Mc(){var e=r.sessions.find(function(t){return t.id===r.selectedId});return zi(e)}function Jr(e){var t=zi(e);r.structuredInputQueue=Array.isArray(t)?t.slice():[]}function ds(e,t){return!!(e&&Array.isArray(e.content)&&e.content.some(function(n){return n&&typeof n=="object"&&n[t]}))}function Ac(e){return!!(e&&e.role==="user"&&ds(e,"__queued"))}function qc(e){return!!(e&&e.role==="assistant"&&ds(e,"__processing"))}function vr(e){if(!Array.isArray(e))return[];for(var t=!1,n=[],i=0;i<e.length;i++){var a=e[i];if(Ac(a)||qc(a)){t=!0;continue}n.push(a)}return t?n:e}function Oc(e,t){if(!e||!Array.isArray(e.messages))return e;var n=e.sessionKind||t&&t.sessionKind;if(n!=="structured")return e;var i=vr(e.messages);return i===e.messages?e:Object.assign({},e,{messages:i})}function us(){try{var e=Mc();if(!r.selectedId||e.length===0)return;localStorage.setItem("wand-structured-queue",JSON.stringify({sessionId:r.selectedId,items:e}))}catch{}}function fs(e){try{var t=localStorage.getItem("wand-structured-queue");if(!t)return;var n=JSON.parse(t);(!e||!n||n.sessionId===e)&&localStorage.removeItem("wand-structured-queue")}catch{localStorage.removeItem("wand-structured-queue")}}function ps(){var e=r.sessions.find(function(i){return i.id===r.selectedId});if(e&&Array.isArray(e.queuedMessages)){Jr(e),us();return}try{var t=localStorage.getItem("wand-structured-queue");if(!t)return;var n=JSON.parse(t);if(!n||n.sessionId!==r.selectedId||!Array.isArray(n.items))return;r.structuredInputQueue=n.items.slice(0,10)}catch{r.structuredInputQueue=[]}}function Kt(){try{if(r.crossSessionQueue.length===0){localStorage.removeItem("wand-cross-session-queue");return}localStorage.setItem("wand-cross-session-queue",JSON.stringify(r.crossSessionQueue))}catch{}}function sn(){return r.config&&r.config.defaultCwd||"/tmp"}function vs(){try{var e=localStorage.getItem(an);if(!e)return{};var t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Pc(e){try{if(!e||Object.keys(e).length===0){localStorage.removeItem(an);return}localStorage.setItem(an,JSON.stringify(e))}catch{}}function Hc(){var e=r.selectedId;if(!e)return{};var t=vs(),n=t[e];return n&&typeof n=="object"?n:{}}function rt(e){if(!e||!r.selectedId)return null;var t=Hc();return typeof t[e]=="boolean"?t[e]:null}function _c(e,t){if(!(!e||!r.selectedId)){var n=vs(),i=r.selectedId,a=n[i];(!a||typeof a!="object")&&(a={}),a[e]=!!t,n[i]=a,Pc(n)}}function ms(e,t){return e?e.uuid?"msg:"+e.uuid:e.id?"msg:"+e.id:e.messageId?"msg:"+e.messageId:e.turnId?"msg:"+e.turnId:"msg:"+(typeof t=="number"?t:0):"msg:unknown-"+(typeof t=="number"?t:0)}function Jt(e,t){for(var n=[],i=0;i<t.length;i++){var a=t[i];a==null||a===""||n.push(String(a))}return e+":"+n.join(":")}function Dn(e){return!e||!e.dataset?"":e.dataset.expandKey||""}function Dc(e,t){if(!e)return!1;switch(t){case"tool-card":case"diff":return!e.classList.contains("collapsed");case"thinking":return e.classList.contains("expanded")&&!e.classList.contains("collapsed");case"inline-tool":return e.classList.contains("inline-tool-open");case"terminal":{var n=e.querySelector(".term-body");return n?n.style.display!=="none":e.dataset.expanded==="true"}case"tool-group":return e.getAttribute("data-expanded")==="true";case"subagent-reply":return e.getAttribute("data-expanded")==="true";case"subagent-panel":return e.getAttribute("data-expanded")==="true";default:return!1}}function Ui(e,t,n){if(e)switch(t){case"tool-card":case"diff":{e.classList.toggle("collapsed",!n);break}case"thinking":{e.classList.toggle("collapsed",!n),e.classList.toggle("expanded",!!n);var i=e.querySelector(".thinking-inline-preview");if(i){var a=e.dataset.thinking||"",s=a.slice(0,57)+(a.length>60?"\u2026":"");i.textContent=n?a:s}var o=e.querySelector(".thinking-inline-action");o&&(o.textContent=n?"\u6536\u8D77":"\u5C55\u5F00");break}case"inline-tool":{e.classList.toggle("inline-tool-open",!!n);var l=e.querySelector(".inline-tool-expanded");l&&(l.style.display=n?"block":"none");break}case"terminal":{var c=e.querySelector(".term-body");c&&(c.style.display=n?"block":"none"),e.dataset.expanded=n?"true":"false";var d=e.querySelector(".term-toggle-icon");d&&(d.textContent=n?"\u25BC":"\u25B6");break}case"tool-group":{e.setAttribute("data-expanded",n?"true":"false");var u=e.querySelector(".tool-group-body");u&&(u.style.display=n?"block":"none");var f=e.querySelector(".tool-group-chevron");f&&(f.style.transform=n?"rotate(180deg)":"");break}case"subagent-reply":{e.setAttribute("data-expanded",n?"true":"false");var v=e.querySelector(".subagent-reply-toggle-label");v&&(v.textContent=n?"\u6536\u8D77":"\u5C55\u5F00");var m=e.querySelector(".subagent-reply-toggle");m&&(m.setAttribute("aria-expanded",n?"true":"false"),m.setAttribute("aria-label",n?"\u6536\u8D77\u5B50\u4EE3\u7406\u56DE\u590D":"\u5C55\u5F00\u5B50\u4EE3\u7406\u56DE\u590D\u5168\u6587"));break}case"subagent-panel":{e.setAttribute("data-expanded",n?"true":"false");for(var y=e.querySelectorAll(".subagent-panel-toggle"),g=0;g<y.length;g++){var b=y[g];b.setAttribute("aria-expanded",n?"true":"false"),b.setAttribute("aria-label",n?"\u6536\u8D77\u5B50\u4EE3\u7406\u8F93\u51FA":"\u5C55\u5F00\u5B50\u4EE3\u7406\u8F93\u51FA");var w=b.querySelector(".subagent-panel-toggle-label");w&&(w.textContent=n?"\u6536\u8D77":"\u5C55\u5F00")}var k=e.querySelector(".subagent-panel-body");k&&(n?k.scrollTop=0:k.scrollTop=k.scrollHeight);break}}}function Cn(e,t){var n=Dn(e);n&&_c(n,Dc(e,t))}function Vi(e){!e||!r.selectedId||e.querySelectorAll("[data-expand-key]").forEach(function(t){var n=Dn(t),i=t.dataset.expandKind||"",a=rt(n);a===null||!i||Ui(t,i,a)})}function It(e){var t=e||{};r.lastRenderedHash=0,r.lastRenderedMsgCount=0,r.lastRenderedEmpty=null,r.renderPending=!1,r.chatRenderedCount=r.chatPageSize,r.askUserSelections={},r.chatScrollElement&&(r.chatScrollHandler&&r.chatScrollElement.removeEventListener("scroll",r.chatScrollHandler),r.chatScrollWheelHandler&&r.chatScrollElement.removeEventListener("wheel",r.chatScrollWheelHandler),r.chatScrollTouchStartHandler&&r.chatScrollElement.removeEventListener("touchstart",r.chatScrollTouchStartHandler),r.chatScrollTouchMoveHandler&&r.chatScrollElement.removeEventListener("touchmove",r.chatScrollTouchMoveHandler)),r.chatScrollElement=null,r.chatScrollHandler=null,r.chatScrollWheelHandler=null,r.chatScrollTouchStartHandler=null,r.chatScrollTouchMoveHandler=null,r.chatIsProgrammaticScroll=!1,t.preserveStickState||(r.chatStickToBottom=!0,r.chatUnreadCount=0,r.chatUnreadStartIndex=-1,r.chatInitialRenderDone=!1)}function Ge(){return r.workingDir||sn()}window.addEventListener("beforeinstallprompt",function(e){e.preventDefault(),r.deferredPrompt=e,r.showInstallPrompt=!0,gs()}),window.addEventListener("online",function(){r.isOnline=!0,Yr()}),window.addEventListener("offline",function(){r.isOnline=!1,Yr()});function Yr(){var e=document.getElementById("offline-banner");if(!r.isOnline&&!e){var t=document.createElement("div");t.id="offline-banner",t.className="offline-banner",t.textContent="You are offline - some features may be limited",document.body.appendChild(t)}else r.isOnline&&e&&e.remove()}function gs(){var e=!!(r.showInstallPrompt&&r.deferredPrompt),t=document.getElementById("pwa-install-button");t&&t.classList.toggle("hidden",!e);var n=document.getElementById("topbar-install-item");n&&n.classList.toggle("hidden",!e)}function jc(){var e=document.getElementById("app");e&&(e.innerHTML='<div class="boot-loading"><div class="boot-loading-card"><div class="boot-loading-spinner"></div><div class="boot-loading-text">\u6B63\u5728\u8FDE\u63A5 Wand\u2026</div></div></div>')}function mr(e,t){if(r.config&&!document.hidden){var n=t&&t.immediate===!0,i=Date.now();!n&&i-r.lastForegroundSyncAt<1500||(r.lastForegroundSyncAt=i,r.foregroundSyncTimer&&(clearTimeout(r.foregroundSyncTimer),r.foregroundSyncTimer=null),Nc(e,n))}}function Nc(e,t){return!r.config||document.hidden?Promise.resolve():(Al(),t?za("resume-force"):(!r.ws||r.ws.readyState!==WebSocket.OPEN&&r.ws.readyState!==WebSocket.CONNECTING)&&Si(),r.claudeHistoryLoaded&&Ms(),cn({skipSelectedOutputReload:!0}).catch(function(n){console.error("[wand] foreground sync failed:",e,n)}))}function Rc(){window.__wandForegroundSyncBound||(window.__wandForegroundSyncBound=!0,document.addEventListener("visibilitychange",function(){document.hidden?Wa():(mr("visibility"),jr("visibility"))}),window.addEventListener("focus",function(){mr("focus")}),window.addEventListener("pageshow",function(){mr("pageshow")}),window.addEventListener("resume",function(){mr("resume")}),window.addEventListener("wand-android-resume",function(){mr("android-resume",{immediate:!0}),jr("android-resume")}),window.addEventListener("wand-ime-state",function(e){var t=e&&e.detail&&e.detail.state;if(t==="shown"||t==="hidden")try{at("native-ime-"+t,{forceReplay:!0}),gt("native-ime")}catch{}}),window.addEventListener("wand-android-network",function(e){var t=e&&e.detail&&e.detail.state;if(t==="lost"){r.isOnline=!1;try{Yr()}catch{}return}if(t==="available"||t==="changed"||t==="validated"){r.isOnline=!0;try{Yr()}catch{}za("android-network-"+t)}}))}function Fc(){fetch("/api/session-check",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():{authed:!1}}).then(function(e){return!e||!e.authed?(r.loginChecked=!0,Yt(),null):fetch("/api/config",{credentials:"same-origin"}).then(function(t){return t.ok?t.json():(r.loginChecked=!0,Yt(),null)})}).then(function(e){e&&(r.config=e,r.loginChecked=!0,requestAnimationFrame(function(){try{Yt({skipShellChrome:!0})}catch{}Rc(),Bl(),Ht(),wo(),pm(),e.updateAvailable&&e.latestVersion&&ic(e.currentVersion||"-",e.latestVersion),Pn&&pf(),wn&&vf(),r.claudeHistoryLoaded||setTimeout(function(){r.claudeHistoryLoaded||Xr()},600)}))}).catch(function(){if(r.loginChecked=!0,!navigator.onLine){var e=document.getElementById("app");e&&(e.innerHTML='<div class="boot-loading"><div class="boot-loading-card"><div class="boot-loading-text" style="font-size:1.3em;margin-bottom:12px;display:flex;align-items:center;justify-content:center;gap:8px">'+J("signal",{size:20,strokeWidth:1.8})+'<span>\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668</span></div><div class="boot-loading-text" style="opacity:0.7;font-size:0.95em">\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u6216\u786E\u8BA4 Wand \u670D\u52A1\u6B63\u5728\u8FD0\u884C\u3002</div><button onclick="location.reload()" style="margin-top:18px;padding:8px 24px;border-radius:8px;border:1px solid rgba(150,118,85,0.3);background:rgba(255,255,255,0.8);cursor:pointer;font-size:0.95em">\u91CD\u8BD5</button></div></div>'),window.addEventListener("online",function(){location.reload()},{once:!0});return}Yt()})}document.addEventListener("click",function(e){if(!Ne()&&!r.sidebarPinned&&!r.sidebarCollapsed&&r.sessionsDrawerOpen){var t=e.target;!t||!(t instanceof Element)||t.closest("#sessions-drawer")||t.closest("#sessions-toggle-button")||t.closest(".floating-sidebar-toggle")||t.closest(".sidebar-tile-bubble")||t.closest(".modal-backdrop, .modal-overlay, .modal-container, [role='dialog'], [role='menu'], .topbar-more-menu, .sidebar-header-overflow, .folder-picker-dropdown, .path-suggestions, .permission-prompt-overlay, .restart-overlay")||Fu()}},!0),jc(),Fc();function Yt(e){var t=e&&e.skipShellChrome,n=document.getElementById("app"),i=r.config!==null,a=r.modalOpen,s=!i||!!document.getElementById("output");if(s&&Dr(),document.documentElement.classList.add("no-transition"),r.sidebarPinned&&!r.sidebarCollapsed&&!Ne()&&(r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",!0)),n.innerHTML=i?Uc():zc(),It(),nu(),Sr(),oi(),Gn(ye()),ci(),t||xr(),i&&r.filePanelOpen&&Pt(),document.body.offsetHeight,requestAnimationFrame(function(){document.documentElement.classList.remove("no-transition")}),a&&r.modalOpen){var o=document.getElementById("session-modal");if(o){o.classList.remove("hidden");var l=document.getElementById("cwd");l&&(l.value=r.cwdValue),kr()}}if(i&&r.selectedId&&r.gitStatusSessionId!==r.selectedId&&Tn(r.selectedId),i){var c=r.sessions.find(function(d){return d.id===r.selectedId});Ni(c)}}function Wc(){var e=r.sessions.find(function(n){return n.id===r.selectedId}),t=e&&e.approvalStats;return!t||t.total===0?'<span class="approval-stats hidden" id="approval-stats"></span>':'<span class="approval-stats" id="approval-stats"><span class="approval-stats-divider"></span><span class="approval-stats-badge" id="approval-stats-badge" title="\u672C\u6B21\u4F1A\u8BDD\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1"><svg class="approval-stats-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg><span class="approval-stats-total">'+t.total+'</span></span><span class="approval-stats-popup" id="approval-stats-popup"><span class="approval-stats-popup-title">\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1</span>'+(t.command>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("terminal",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u547D\u4EE4\u6267\u884C</span><span class="approval-stats-row-count">'+t.command+"</span></span>":"")+(t.file>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("edit",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u6587\u4EF6\u5199\u5165</span><span class="approval-stats-row-count">'+t.file+"</span></span>":"")+(t.tool>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("wrench",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5176\u4ED6\u5DE5\u5177</span><span class="approval-stats-row-count">'+t.tool+"</span></span>":"")+'<span class="approval-stats-row approval-stats-row-total"><span class="approval-stats-row-icon">'+J("sigma",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5408\u8BA1</span><span class="approval-stats-row-count">'+t.total+"</span></span></span></span>"}function zc(){return r.loginChecked?'<div class="login-container"><div class="login-card"><div class="login-header"><div class="login-logo"><div class="login-logo-icon">W</div><span class="login-logo-text">Wand</span></div><div class="login-subtitle">\u5728\u6D4F\u89C8\u5668\u4E2D\u8FD0\u884C\u672C\u673A\u7EC8\u7AEF</div></div><form id="login-form" class="login-body" autocomplete="on"><input type="text" name="username" autocomplete="username" value="wand" tabindex="-1" aria-hidden="true" style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none" readonly /><p class="login-hint">\u8F93\u5165 Wand \u8BBF\u95EE\u5BC6\u7801\u4EE5\u8FDB\u5165\u63A7\u5236\u53F0\u3002</p><div class="field"><label class="field-label" for="password">\u5BC6\u7801</label><div class="password-field"><input id="password" type="password" class="field-input password-input" placeholder="\u8F93\u5165\u8BBF\u95EE\u5BC6\u7801" autocomplete="current-password" data-error="false" aria-describedby="password-hint login-error" aria-invalid="false" /><button id="toggle-password-button" type="button" class="password-toggle" aria-label="\u663E\u793A\u5BC6\u7801" aria-pressed="false">\u663E\u793A</button></div><p id="password-hint" class="hint">\u4F7F\u7528\u4F60\u5728 Wand \u4E2D\u8BBE\u7F6E\u7684\u8BBF\u95EE\u5BC6\u7801\u3002</p><p id="login-error" class="error-message hidden" role="alert"></p></div><button id="login-button" type="submit" class="btn btn-primary btn-block">\u8FDB\u5165\u63A7\u5236\u53F0</button>'+(da()?'<button id="login-switch-server-button" class="btn btn-ghost btn-block login-switch-server" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="8" rx="2"/><rect x="2" y="13" width="20" height="8" rx="2"/><line x1="6" y1="7" x2="6.01" y2="7"/><line x1="6" y1="17" x2="6.01" y2="17"/></svg><span>\u5207\u6362\u670D\u52A1\u5668</span></button>':"")+"</form></div></div>":'<div class="login-container"><div class="login-card login-card-loading"><div class="login-header"><div class="login-logo"><div class="login-logo-icon">W</div><span class="login-logo-text">Wand</span></div><div class="login-subtitle">\u6B63\u5728\u6062\u590D\u767B\u5F55\u72B6\u6001</div></div><div class="login-body"><div class="login-status"><span class="login-spinner" aria-hidden="true"></span><div><p class="login-hint">\u6B63\u5728\u68C0\u67E5\u672C\u5730\u767B\u5F55\u4F1A\u8BDD\uFF0C\u8BF7\u7A0D\u5019\u3002</p><p class="login-muted">\u5982\u679C\u4F60\u521A\u5237\u65B0\u9875\u9762\uFF0C\u8FD9\u662F\u6B63\u5E38\u73B0\u8C61\u3002</p></div></div></div></div></div>'}function Uc(){var e="<\/script>",t=r.sessions.find(function(y){return y.id===r.selectedId}),n=t?Ti(t.command):"\u672A\u9009\u62E9\u4F1A\u8BDD",i=t?t.mode+" | "+t.status:"\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB",a=r.selectedId&&r.drafts[r.selectedId]||"",s=r.sessionsDrawerOpen?" open":"",o=As()?" open":"",l=Cu(),c=_t(l,r.chatMode),d=Ne(),u=!!r.sidebarPinned&&!!r.sidebarCollapsed,f=u||!d&&(!!r.sidebarPinned||!!r.sessionsDrawerOpen),v=u?" sidebar-collapsed":"",m=u?" collapsed":"";return'<div class="app-container"><div id="sessions-drawer-backdrop" class="drawer-backdrop'+o+'"></div><div class="main-layout'+(r.sessionsDrawerOpen?" sidebar-open":"")+(f?" sidebar-pinned":"")+v+'"><aside id="sessions-drawer" class="sidebar'+s+(f?" pinned":"")+m+'"><div class="sidebar-header"><div class="sidebar-header-main"><div class="topbar-logo-icon">W</div><span class="sidebar-title">\u4F1A\u8BDD</span><span class="session-count" id="session-count">'+String(r.sessions.length)+'</span></div><div class="sidebar-header-actions"><div class="sidebar-header-more"><button id="sidebar-more-btn" class="btn btn-ghost btn-sm" type="button" title="\u66F4\u591A\u64CD\u4F5C"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1.5"/><circle cx="12" cy="12" r="1.5"/><circle cx="12" cy="19" r="1.5"/></svg></button><div class="sidebar-header-overflow" id="sidebar-overflow-menu"><button class="overflow-item" id="sidebar-home-btn" type="button"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg><span>\u56DE\u5230\u9996\u9875</span></button><button class="overflow-item" id="sidebar-refresh-btn" type="button"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg><span>\u5237\u65B0\u9875\u9762</span></button></div></div><button id="sidebar-pin-btn" class="btn btn-ghost btn-sm sidebar-pin-toggle'+(r.sidebarPinned?" pinned":"")+'" type="button" title="'+(r.sidebarPinned?"\u5DF2\u56FA\u5B9A\u5E38\u9A7B\uFF08\u70B9\u51FB\u89E3\u9664\u9501\u5B9A\uFF09":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B")+'" aria-label="'+(r.sidebarPinned?"\u89E3\u9664\u56FA\u5B9A\u5E38\u9A7B":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B")+'" aria-pressed="'+(r.sidebarPinned?"true":"false")+'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="17" x2="12" y2="22"/><path d="M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24z"/></svg></button><button id="sidebar-collapse-btn" class="btn btn-ghost btn-sm sidebar-collapse-toggle'+(u?" collapsed":"")+'" type="button" title="'+(u?"\u5C55\u5F00\u4E3A\u5168\u5C3A\u5BF8":"\u6536\u8D77\u4E3A\u7A84\u6761")+'" aria-label="'+(u?"\u5C55\u5F00\u4E3A\u5168\u5C3A\u5BF8":"\u6536\u8D77\u4E3A\u7A84\u6761")+'">'+(u?'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="10 6 16 12 10 18"/><line x1="20" y1="5" x2="20" y2="19"/></svg>':'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="14 6 8 12 14 18"/><line x1="4" y1="5" x2="4" y2="19"/></svg>')+'</button><button id="close-drawer-button" class="btn btn-ghost btn-icon sidebar-close drawer-close-btn" type="button" aria-label="\u5173\u95ED\u83DC\u5355"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div></div><div class="sidebar-body"><div id="sessions-panel"><div class="sessions-list" id="sessions-list">'+Ji()+'</div></div></div><div class="sidebar-footer"><button id="drawer-new-session-button" class="btn btn-primary btn-block"><span>+</span> \u65B0\u4F1A\u8BDD</button><div class="sidebar-footer-actions"><button id="file-panel-toggle-btn" class="btn btn-ghost btn-sm'+(r.filePanelOpen?" active":"")+'" type="button" title="\u67E5\u770B\u6587\u4EF6"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg><span>\u6587\u4EF6</span></button><button id="settings-button" class="btn btn-ghost btn-sm" type="button" title="\u8BBE\u7F6E"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg><span>\u8BBE\u7F6E</span></button><button id="pwa-install-button" class="btn btn-ghost btn-sm hidden" title="\u5B89\u88C5\u5E94\u7528"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg><span>\u5B89\u88C5</span></button>'+(da()?'<button id="switch-server-button" class="btn btn-ghost btn-sm sidebar-switch-server" type="button" title="\u5207\u6362\u670D\u52A1\u5668"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="8" rx="2"/><rect x="2" y="13" width="20" height="8" rx="2"/><line x1="6" y1="7" x2="6.01" y2="7"/><line x1="6" y1="17" x2="6.01" y2="17"/></svg><span>\u5207\u6362</span></button>':"")+'<button id="logout-button" class="btn btn-ghost btn-sm sidebar-logout" type="button" title="\u9000\u51FA\u767B\u5F55"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg><span>\u9000\u51FA</span></button></div></div></aside><main class="main-content"><div class="main-header-row"><div class="topbar-left"><button id="sessions-toggle-button" class="floating-sidebar-toggle'+(r.sessionsDrawerOpen?" active":"")+'" aria-label="\u5207\u6362\u4F1A\u8BDD\u4FA7\u680F" type="button"><span class="hamburger-icon"><span></span><span></span><span></span></span></button><span class="topbar-brand" aria-hidden="true">W</span></div><div class="topbar-center">'+(t?'<span class="topbar-session-title" title="'+p(t.command||"")+'">'+p(Ti(t.command))+'</span><span class="session-status-pill '+$s(t)+'" title="'+p(yr(t))+'"><span class="session-status-dot"></span><span class="session-status-text">'+p(yr(t))+'</span></span><span class="current-task hidden" id="current-task"></span>'+(t.cwd?'<span class="topbar-cwd" id="topbar-cwd" title="'+p(t.cwd)+'" role="button" tabindex="0">'+p(t.cwd)+"</span>":""):'<span class="topbar-tagline">Wand \u63A7\u5236\u53F0</span><span class="current-task hidden" id="current-task"></span>')+'</div><div class="topbar-right"><button id="topbar-file-button" class="topbar-btn square'+(r.filePanelOpen?" active":"")+'" type="button" aria-label="\u6587\u4EF6" title="\u67E5\u770B\u6587\u4EF6\uFF08\u53EF\u4FEE\u6539\u8DEF\u5F84\uFF09"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg></button><span id="topbar-git-slot" class="topbar-git-slot">'+hs()+"</span>"+(t?Vc(t):"")+'</div></div><div id="file-panel-backdrop" class="file-panel-backdrop'+(r.filePanelOpen?" open":"")+'"></div><div id="file-side-panel" class="file-side-panel'+(r.filePanelOpen?" open":"")+'"><div class="file-side-panel-header"><div class="file-side-panel-title-group"><span class="file-side-panel-icon">'+Ae("folder-open",{size:16})+'</span><span class="file-side-panel-title">\u6587\u4EF6</span></div><div class="file-side-panel-header-actions"><button class="file-side-panel-iconbtn" id="file-explorer-refresh" type="button" title="\u5237\u65B0" aria-label="\u5237\u65B0\u6587\u4EF6\u5217\u8868">'+Ae("refresh",{size:15})+'</button><button id="file-side-panel-close" class="file-side-panel-iconbtn close" type="button" aria-label="\u5173\u95ED\u6587\u4EF6\u9762\u677F" title="\u5173\u95ED">'+Ae("x",{size:16})+'</button></div></div><div class="file-side-panel-body"><div class="file-explorer-header"><button class="file-explorer-up" id="file-explorer-up" type="button" title="\u8FD4\u56DE\u4E0A\u7EA7\u76EE\u5F55" aria-label="\u8FD4\u56DE\u4E0A\u7EA7\u76EE\u5F55">'+Ae("arrow-up",{size:15})+'</button><input type="text" class="file-explorer-path" id="file-explorer-cwd" value="'+p(t&&t.cwd?t.cwd:sn())+'" title="'+p(t&&t.cwd?t.cwd:sn())+'" placeholder="\u8F93\u5165\u8DEF\u5F84\u5E76\u56DE\u8F66..." spellcheck="false" autocomplete="off" autocapitalize="off" autocorrect="off" aria-label="\u5F53\u524D\u8DEF\u5F84\uFF0C\u53EF\u76F4\u63A5\u4FEE\u6539\u540E\u56DE\u8F66" /></div><div class="file-search-box"><span class="file-search-icon">'+Ae("search",{size:14})+'</span><input type="text" id="file-search-input" class="file-search-input" placeholder="\u641C\u7D22\u5F53\u524D\u76EE\u5F55\u2026" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /><button class="file-search-clear" id="file-search-clear" type="button" aria-label="\u6E05\u9664\u641C\u7D22" title="\u6E05\u9664">'+Ae("x",{size:13})+'</button></div><div class="file-explorer" id="file-explorer">'+Ld(t&&t.cwd?t.cwd:sn())+'</div></div></div><div id="output" class="terminal-container'+(r.selectedId?"":" hidden")+' active"><div class="terminal-scale-overlay" aria-label="\u7EC8\u7AEF\u7F29\u653E\u63A7\u4EF6"><button id="terminal-scale-down-top" class="terminal-scale-overlay-btn terminal-scale-btn" type="button" title="\u7F29\u5C0F">\u2212</button><span class="terminal-scale-overlay-label terminal-scale-label" id="terminal-scale-label-top">'+Math.round(r.terminalScale*100)+'%</span><button id="terminal-scale-up-top" class="terminal-scale-overlay-btn terminal-scale-btn" type="button" title="\u653E\u5927">+</button><span class="terminal-scale-overlay-divider"></span><button id="page-refresh-btn" class="terminal-scale-overlay-btn" type="button" title="\u5237\u65B0\u9875\u9762">\u21BB</button></div><button id="terminal-jump-bottom" class="terminal-jump-bottom'+(r.showTerminalJumpToBottom?" visible":"")+'" type="button" title="\u56DE\u5230\u5E95\u90E8" aria-label="\u56DE\u5230\u5E95\u90E8"><svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8l4.5 4.5L12.5 8"/></svg></button></div><div id="chat-output" class="chat-container hidden"><button id="chat-unread-bubble" class="chat-unread-bubble" type="button" title="\u56DE\u5230\u6700\u65B0\u6D88\u606F" aria-label="\u56DE\u5230\u6700\u65B0\u6D88\u606F"><span class="chat-unread-bubble-icon"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 3.5v9M3.5 8l4.5 4.5L12.5 8"/></svg></span><span class="chat-unread-bubble-count" aria-hidden="true"></span></button><div id="queue-bar-host" class="queue-bar-host" hidden></div></div><div id="blank-chat" class="blank-chat'+(r.selectedId?" hidden":"")+'"><div class="blank-chat-inner"><div class="blank-chat-logo">W</div><h2 class="blank-chat-title">Wand</h2><p class="blank-chat-subtitle">\u652F\u6301\u7EC8\u7AEF PTY \u4F1A\u8BDD\u4E0E\u7ED3\u6784\u5316 chat \u4F1A\u8BDD\uFF0C\u4E24\u79CD\u6A21\u5F0F\u53EF\u5E76\u5B58\u3002</p><div class="blank-chat-tools"><button class="blank-chat-tool-btn" id="welcome-tool-claude" type="button"><span class="tool-icon">'+J("terminal",{size:16,strokeWidth:1.8})+'</span>\u65B0\u5EFA\u7EC8\u7AEF\u4F1A\u8BDD</button><button class="blank-chat-tool-btn" id="welcome-tool-codex" type="button"><span class="tool-icon tool-icon-text">\u2318</span>\u65B0\u5EFA Codex \u4F1A\u8BDD</button><button class="blank-chat-tool-btn" id="welcome-tool-structured" type="button"><span class="tool-icon">'+J("chat",{size:16,strokeWidth:1.8})+'</span>\u65B0\u5EFA\u7ED3\u6784\u5316\u4F1A\u8BDD</button></div><div class="blank-chat-cwd-wrap"><div class="blank-chat-cwd" id="blank-chat-cwd" role="button" tabindex="0" title="\u70B9\u51FB\u5207\u6362\u5DE5\u4F5C\u76EE\u5F55"><span class="blank-chat-cwd-icon">'+J("folder",{size:13,strokeWidth:1.8})+'</span><span class="blank-chat-cwd-path" id="blank-chat-cwd-path">'+p(Ge())+'</span><span class="blank-chat-cwd-arrow" id="blank-chat-cwd-arrow">'+J("chevronDown",{size:11,strokeWidth:2})+'</span></div><div class="blank-chat-cwd-dropdown hidden" id="blank-chat-cwd-dropdown"></div></div></div></div><div class="input-panel'+(r.selectedId?"":" hidden")+'"><div class="composer-top-row"><div id="todo-progress" class="todo-progress hidden"><div class="todo-progress-header" id="todo-progress-toggle"><div class="todo-progress-left"><span class="todo-progress-ring" id="todo-progress-ring" aria-hidden="true" style="--progress:0"><svg width="16" height="16" viewBox="0 0 36 36"><circle class="todo-ring-track" cx="18" cy="18" r="15.5" fill="none" stroke-width="4"/><circle class="todo-ring-fill" cx="18" cy="18" r="15.5" fill="none" stroke-width="4" stroke-linecap="round"/></svg></span><span class="todo-progress-counter" id="todo-progress-counter"></span><span class="todo-progress-task" id="todo-progress-task"></span></div><svg class="todo-progress-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 15 12 9 18 15"/></svg></div></div><div class="todo-progress-body hidden" id="todo-progress-body"><ul class="todo-progress-list" id="todo-progress-list"></ul></div></div><div class="input-composer'+(a?" has-text":"")+'"><div class="composer-status-row" id="composer-status-row">'+Ou(t)+'<span class="permission-actions hidden" id="permission-actions"><span class="permission-actions-label" id="permission-actions-label">\u7B49\u5F85\u6388\u6743</span><button id="approve-permission-btn" class="btn btn-permission btn-permission-approve" type="button">\u6279\u51C6</button><button id="deny-permission-btn" class="btn btn-permission btn-permission-deny" type="button">\u62D2\u7EDD</button></span>'+Wc()+'</div><div class="composer-main-row"><div class="composer-actions-left"><button id="attach-btn" class="btn-circle btn-circle-action" type="button" title="\u66F4\u591A" aria-label="\u66F4\u591A" aria-haspopup="menu" aria-expanded="false">'+J("plus",{size:18,strokeWidth:2.2})+'</button><input type="file" id="file-upload-input" multiple tabindex="-1" style="position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0,0,0,0);pointer-events:none"></div><div class="composer-input-wrap"><textarea id="input-box" class="input-textarea" placeholder="'+lo(t,r.terminalInteractive)+'" rows="1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" enterkeyhint="send">'+p(a)+'</textarea><button id="prompt-optimize-btn" class="prompt-optimize-btn" type="button" title="\u63D0\u793A\u8BCD\u4F18\u5316\uFF08AI\uFF09" aria-label="\u63D0\u793A\u8BCD\u4F18\u5316"><svg class="prompt-optimize-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3l1.6 4.4L18 9l-4.4 1.6L12 15l-1.6-4.4L6 9l4.4-1.6z" fill="currentColor" opacity="0.25"/><path d="M12 3l1.6 4.4L18 9l-4.4 1.6L12 15l-1.6-4.4L6 9l4.4-1.6z"/><path d="M19 14l.7 1.9L21.6 17l-1.9.7L19 19.6l-.7-1.9L16.4 17l1.9-.7z" fill="currentColor" opacity="0.35"/><path d="M5 4l.5 1.4L7 6l-1.5.6L5 8l-.5-1.4L3 6l1.5-.6z" fill="currentColor" opacity="0.35"/></svg><span class="prompt-optimize-spinner" aria-hidden="true"></span></button><div class="voice-input-mode hidden" id="voice-input-mode"><button id="voice-record-btn" class="voice-record-btn" type="button"><span class="voice-record-pulse" aria-hidden="true"></span><span class="voice-record-label">\u6309\u4F4F \u8BF4\u8BDD</span></button><button id="voice-cancel-btn" class="voice-cancel-btn" type="button" title="\u9000\u51FA\u8BED\u97F3\u6A21\u5F0F" aria-label="\u9000\u51FA\u8BED\u97F3\u6A21\u5F0F">'+J("x",{size:14,strokeWidth:2})+'</button></div></div><div class="composer-actions-right"><button id="stop-button" class="btn-circle btn-circle-stop hidden" title="\u505C\u6B62"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><rect x="3" y="3" width="10" height="10" rx="2"/></svg></button><button id="send-input-button" class="btn-circle btn-circle-send" title="\u53D1\u9001"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg></button></div></div><div id="attachment-preview" class="attachment-preview hidden"></div></div><div class="composer-plus-popover hidden" id="composer-plus-popover" role="menu" aria-label="\u66F4\u591A\u64CD\u4F5C"><button class="plus-popover-item" id="plus-attach-item" type="button" role="menuitem">'+J("paperclip",{size:14,strokeWidth:1.8,cls:"plus-popover-icon"})+'<span class="plus-popover-label">\u4E0A\u4F20\u9644\u4EF6</span></button><button class="plus-popover-item'+(r.terminalInteractive?" is-on":"")+'" id="terminal-interactive-toggle-top" type="button" role="menuitemcheckbox" aria-checked="'+(r.terminalInteractive?"true":"false")+'">'+J("keyboard",{size:14,strokeWidth:1.8,cls:"plus-popover-icon"})+'<span class="plus-popover-label">\u7EC8\u7AEF\u4EA4\u4E92</span><span class="plus-popover-toggle-state">'+(r.terminalInteractive?"\u5F00":"\u5173")+'</span></button><div class="plus-popover-sep" aria-hidden="true"></div><div class="plus-popover-trio-wrap">'+fa(t,{kind:"popover"})+'</div></div><div class="voice-transcript-bubble hidden" id="voice-transcript-bubble" aria-live="polite"><div class="voice-transcript-text" id="voice-transcript-text"></div><div class="voice-transcript-hint" id="voice-transcript-hint"><span class="voice-wave" aria-hidden="true"><i></i><i></i><i></i><i></i></span><span class="voice-transcript-status" id="voice-transcript-status">\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88</span></div><span class="voice-bubble-arrow" aria-hidden="true"></span></div><p id="action-error" class="error-message hidden"></p></div><section id="folder-picker-modal" class="modal-backdrop hidden"><div class="modal folder-picker-modal"><div class="modal-header"><h2 class="modal-title">\u9009\u62E9\u5DE5\u4F5C\u76EE\u5F55</h2><button id="close-folder-picker" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body"><div class="folder-picker-quick-row"><button class="folder-picker-quick-btn btn-with-icon" data-path="/tmp">'+J("trash",{size:13,strokeWidth:1.7})+'<span>\u4E34\u65F6\u76EE\u5F55</span></button><button class="folder-picker-quick-btn btn-with-icon" data-path="/">'+J("folder",{size:13,strokeWidth:1.7})+'<span>\u6839\u76EE\u5F55</span></button></div><div id="folder-breadcrumb" class="folder-breadcrumb"></div><div class="folder-picker"><span class="folder-picker-icon">'+J("folder",{size:15,strokeWidth:1.7})+'</span><input type="text" id="folder-picker-input" class="folder-picker-input" value="" placeholder="\u8F93\u5165\u6216\u9009\u62E9\u5DE5\u4F5C\u76EE\u5F55..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></div><div id="folder-picker-dropdown" class="folder-picker-dropdown hidden"></div><div id="folder-picker-validation" class="folder-picker-validation"></div></div></div></section></main></div></div>'+Xd()+rd()+id()+ks()}function hs(){if(!r.selectedId||!r.gitStatus||!r.gitStatus.isGit||r.gitStatusSessionId!==r.selectedId)return"";var e=r.gitStatus.branch||"?",t=r.gitStatus.modifiedCount||0,n=e+(t?" \xB7 "+t+" \u4E2A\u6587\u4EF6\u5F85\u63D0\u4EA4":" \xB7 \u5DE5\u4F5C\u533A\u5E72\u51C0");return'<button id="topbar-git-badge" class="topbar-git-badge" type="button" title="'+p(n)+'" aria-label="\u5FEB\u6377\u63D0\u4EA4"><svg class="topbar-git-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="9" r="2"/><path d="M6 8v8"/><path d="M18 11v1a3 3 0 0 1-3 3H9"/></svg><span class="topbar-git-branch">'+p(e)+"</span>"+(t>0?'<span class="topbar-git-count">\xB7'+t+"</span>":'<span class="topbar-git-clean" aria-hidden="true">\u2713</span>')+"</button>"}function Ki(){var e=document.getElementById("topbar-git-slot");if(e){e.innerHTML=hs();var t=document.getElementById("topbar-git-badge");t&&t.addEventListener("click",function(n){n.preventDefault(),bs()})}}function Vc(e){if(!e)return"";var t=r.topbarMoreOpen,n=!!e.claudeSessionId,i=!!e.cwd,a=e.worktreeEnabled&&e.worktree&&e.worktree.branch&&e.worktree.path,s=e.worktreeMergeStatus==="merged"&&e.worktreeMergeInfo&&e.worktreeMergeInfo.cleanupDone===!1,o=e.status==="running"||e.worktreeMergeStatus==="merging",l=a&&e.worktreeMergeStatus!=="merged",c=s,d=n||i||!0,u=l||c||!0,f='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',v='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.5 19a4.5 4.5 0 1 0-1.5-8.74A6 6 0 1 0 6 14h11.5z"/></svg>',m='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>',y='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="9" x2="20" y2="9"/><line x1="4" y1="15" x2="20" y2="15"/><line x1="10" y1="3" x2="8" y2="21"/><line x1="16" y1="3" x2="14" y2="21"/></svg>',g='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 7h10"/><path d="M7 12h10"/><path d="M7 17h10"/><path d="M5 7l-2 2 2 2"/><path d="M19 15l2 2-2 2"/></svg>',b='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg>',w="";if(n){var k=e.provider==="codex"?"\u590D\u5236 Codex thread ID":"\u590D\u5236 Claude \u4F1A\u8BDD ID";w+='<button class="topbar-more-item" data-action="copy-claude-session-id" type="button" role="menuitem">'+v+"<span>"+k+"</span></button>"}i&&(w+='<button class="topbar-more-item" data-action="copy-cwd" type="button" role="menuitem">'+m+"<span>\u590D\u5236\u5DE5\u4F5C\u76EE\u5F55</span></button>"),w+='<button class="topbar-more-item" data-action="copy-session-id" type="button" role="menuitem">'+y+"<span>\u590D\u5236\u4F1A\u8BDD ID</span></button>";var E="";l?E+='<button class="topbar-more-item" data-action="worktree-merge" type="button" role="menuitem"'+(o?" disabled":"")+">"+g+"<span>\u5408\u5E76\u5230\u4E3B\u5206\u652F\u2026</span></button>":c&&(E+='<button class="topbar-more-item" data-action="worktree-cleanup" type="button" role="menuitem">'+g+"<span>\u91CD\u8BD5 worktree \u6E05\u7406</span></button>"),E+='<button class="topbar-more-item topbar-more-item-danger" data-action="delete-session" type="button" role="menuitem">'+b+"<span>\u5220\u9664\u5F53\u524D\u4F1A\u8BDD</span></button>";var L=d&&u?'<div class="topbar-more-divider" role="separator"></div>':"";return'<div class="topbar-more-wrap"><button id="topbar-more-button" class="topbar-btn square'+(t?" active":"")+'" type="button" aria-label="\u5F53\u524D\u4F1A\u8BDD\u64CD\u4F5C" aria-haspopup="menu" aria-expanded="'+(t?"true":"false")+'" title="\u5F53\u524D\u4F1A\u8BDD\u64CD\u4F5C"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg></button><div id="topbar-more-menu" class="topbar-more-menu'+(t?"":" hidden")+'" role="menu" aria-label="\u5F53\u524D\u4F1A\u8BDD">'+w+L+E+"</div></div>"}function Tn(e,t){if(!e)return Promise.resolve(null);var n=t&&t.force,i=Date.now();if(!n&&r.gitStatusSessionId===e&&r.gitStatus&&i-r.gitStatusLastFetchAt<1e3)return Promise.resolve(r.gitStatus);if(r.gitStatusInflight&&r.gitStatusInflight.sessionId===e)return r.gitStatusInflight.promise;r.gitStatusLoading=!0;var a=fetch("/api/sessions/"+encodeURIComponent(e)+"/git-status",{credentials:"same-origin"}).then(function(s){return s.ok?s.json():{isGit:!1}}).then(function(s){return r.gitStatus=s||{isGit:!1},r.gitStatusSessionId=e,r.gitStatusLastFetchAt=Date.now(),Ki(),s}).catch(function(){return r.gitStatus={isGit:!1},r.gitStatusSessionId=e,r.gitStatusLastFetchAt=Date.now(),Ki(),null}).finally(function(){r.gitStatusLoading=!1,r.gitStatusInflight&&r.gitStatusInflight.sessionId===e&&(r.gitStatusInflight=null)});return r.gitStatusInflight={sessionId:e,promise:a},a}var Ln=null,Bn=null,Bm=null;function Kc(e){return e==="commit-tag"||e==="commit-tag-push"||e==="commit-push"?e:"commit"}function Jc(e){return e=Kc(e),e==="commit-tag-push"?{action:e,label:"Commit + Tag + Push",verb:"\u63D0\u4EA4\u3001\u6253 Tag \u5E76\u63A8\u9001",withTag:!0,push:!0,tone:"all"}:e==="commit-tag"?{action:e,label:"Commit + Tag",verb:"\u63D0\u4EA4\u5E76\u6253 Tag",withTag:!0,push:!1,tone:"tag"}:e==="commit-push"?{action:e,label:"Commit + Push",verb:"\u63D0\u4EA4\u5E76\u63A8\u9001",withTag:!1,push:!0,tone:"push"}:{action:"commit",label:"Commit",verb:"\u4EC5\u63D0\u4EA4",withTag:!1,push:!1,tone:"commit"}}function bs(){if(r.selectedId){r.quickCommitOpen=!0,r.quickCommitSubmitting=!1,r.quickCommitAutoGenerating=!1,r.quickCommitError="",r.quickCommitForm={customMessage:"",tag:"",tagEdited:!1},r.quickCommitPushing=!1,r.quickCommitPushError="",r.quickCommitResult=null,r.quickCommitDragAction="commit",Qn(),un(),$n(),Ot();var e=document.getElementById("quick-commit-modal");e&&(e.classList.remove("hidden"),Ue=document.activeElement,ui(e)),Ln&&document.removeEventListener("keydown",Ln),Ln=function(t){t.key==="Escape"&&r.quickCommitOpen&&!r.quickCommitSubmitting&&!r.quickCommitPushing&&jn()},document.addEventListener("keydown",Ln),Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()})}}function jn(){r.quickCommitOpen=!1,r.quickCommitSubmitting=!1,r.quickCommitError="",r.quickCommitResult=null,r.quickCommitDragAction="commit";var e=document.getElementById("quick-commit-modal");e&&e.classList.add("hidden"),Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ln&&(document.removeEventListener("keydown",Ln),Ln=null),Bn&&(Bn(),Bn=null),Ue&&typeof Ue.focus=="function"&&Ue.focus()}function Ot(){var e=document.getElementById("quick-commit-modal");if(e){Bn&&(Bn(),Bn=null);var t=ks(),n=document.createElement("div");n.innerHTML=t;var i=n.querySelector("#quick-commit-modal");i&&(e.innerHTML=i.innerHTML,ys())}}function ys(){var e=document.getElementById("quick-commit-close-btn");e&&e.addEventListener("click",jn);var t=document.getElementById("quick-commit-cancel-btn");t&&t.addEventListener("click",jn);var n=document.getElementById("quick-commit-ai-btn");n&&n.addEventListener("click",$c);var i=document.getElementById("quick-commit-message");i&&(i.addEventListener("input",function(){r.quickCommitForm.customMessage=i.value}),i.addEventListener("keydown",function(o){(o.metaKey||o.ctrlKey)&&o.key==="Enter"&&(o.preventDefault(),Nn("commit"))}));var a=document.getElementById("quick-commit-tag");a&&(a.addEventListener("input",function(){r.quickCommitForm.tag=a.value,r.quickCommitForm.tagEdited=!0}),a.addEventListener("keydown",function(o){o.key==="Enter"&&(o.preventDefault(),Nn("commit-tag"))}));var s=document.getElementById("quick-commit-push-after-btn");s&&s.addEventListener("click",function(){var o=r.quickCommitResult||{};Xc({pushCommits:!0,pushTags:!!o.tagName,closeOnSuccess:!0})}),Qc()}function Yc(e){var t=!!(e&&e.tag),n=!!(e&&e.push);return t&&n?"commit-tag-push":t?"commit-tag":n?"commit-push":"commit"}var Gc=58;function ws(e){return e==="tag"?{action:"commit-tag",sub:!1}:e==="push"?{action:"commit-push",sub:!1}:e==="sub"?{action:"commit",sub:!0}:{action:"commit",sub:!1}}function Qc(){var e=document.getElementById("qc-dock-field"),t=document.getElementById("qc-dock-stage"),n=document.getElementById("qc-dock-launch"),i=document.getElementById("qc-dock-cluster");if(!e||!t||!n||!i)return;var a=["commit","tag","push"],s={};if(a.forEach(function(I){s[I]=e.querySelector('[data-chip="'+I+'"]')}),!s.commit||!s.tag||!s.push)return;s.sub=e.querySelector('[data-chip="sub"]');var o=!!s.sub,l=o?a.concat(["sub"]):a;function c(I){return s[I]?s[I].offsetWidth:90}function d(){return s.commit?s.commit.offsetHeight:38}function u(){return window.matchMedia&&window.matchMedia("(max-width: 720px)").matches}function f(){var I=e.clientWidth,A=e.clientHeight,B=d(),z=c("commit"),ae=c("tag"),ne=c("push");if(u()&&o){var K=Math.max(8,A*.2-B/2),re=Math.min(A-B-8,A*.7-B/2),U=function(ue){return Math.max(8,I*.27-ue/2)},q=function(ue){return Math.min(I-ue-8,I*.73-ue/2)};return{commit:{x:U(z),y:K},tag:{x:q(ae),y:K},push:{x:U(ne),y:re},sub:{x:q(c("sub")),y:re}}}var N=u(),V=N?Math.max(8,A*.18-B/2):Math.max(8,A*.12),te=N?Math.min(A-B-8,A*.72-B/2):Math.min(A-B-8,A*.88-B),X=N?.24:.28,oe=N?.76:.72,le={commit:{x:Math.max(8,(I-z)/2),y:V},tag:{x:Math.max(8,I*X-ae/2),y:te},push:{x:Math.min(I-ne-8,I*oe-ne/2),y:te}};if(o){var de=c("sub");le.sub={x:Math.min(I-de-8,I*.94-de/2),y:Math.max(8,Math.min(A-B-8,(A-B)/2))}}return le}var v={};function m(I,A,B){s[I]&&(s[I].style.transform="translate("+A.toFixed(1)+"px,"+B.toFixed(1)+"px)")}function y(I){v=f(),l.forEach(function(A){s[A].classList.toggle("qc-chip--anim",!!I),m(A,v[A].x,v[A].y)})}y(!1);var g=null;function b(I,A,B){var z=d(),ae=5,ne=l.filter(function(N){return I.indexOf(N)>=0}),K=ne.reduce(function(N,V){return N+c(V)},0)+Math.max(0,ne.length-1)*ae,re=e.clientHeight,U=A-K/2,q=Math.max(2,Math.min(re-z-2,B-z/2));return ne.forEach(function(N){m(N,U,q),U+=c(N)+ae}),{x:A-K/2-7,y:q-7,w:K+14,h:z+14}}function w(I){i.classList.add("is-active"),i.style.transform="translate("+I.x.toFixed(1)+"px,"+I.y.toFixed(1)+"px)",i.style.width=I.w.toFixed(1)+"px",i.style.height=I.h.toFixed(1)+"px"}function k(){i.classList.remove("is-active")}function E(I){return Yc({commit:!0,tag:I.indexOf("tag")>=0,push:I.indexOf("push")>=0})}function L(I){return I.indexOf("sub")>=0}function S(I){var A=document.getElementById("qc-dock-launch-label");A&&(A.textContent=I)}function M(I,A){var B=n.getBoundingClientRect();return I>=B.left&&I<=B.right&&A>=B.top&&A<=B.bottom}function _(I){return function(A){if(!(s[I].disabled||Gr())){g={anchor:I,pointerId:A.pointerId,startX:A.clientX,startY:A.clientY,moved:!1,members:[I]},l.forEach(function(B){s[B].classList.remove("qc-chip--anim")}),s[I].classList.add("is-grabbing");try{s[I].setPointerCapture(A.pointerId)}catch{}t.classList.add("is-dragging"),A.preventDefault()}}}function W(I){if(!(!g||g.pointerId!==I.pointerId)){(Math.abs(I.clientX-g.startX)>3||Math.abs(I.clientY-g.startY)>3)&&(g.moved=!0);var A=e.getBoundingClientRect(),B=I.clientX-A.left,z=I.clientY-A.top;a.forEach(function(K){if(!(g.members.indexOf(K)>=0)){var re=v[K].x+c(K)/2,U=v[K].y+d()/2,q=B-re,N=z-U;Math.sqrt(q*q+N*N)<Gc&&(g.members.push(K),s[K].classList.remove("qc-chip--anim"),s[K].classList.add("is-attached"))}});var ae=b(g.members,B,z),ne=M(I.clientX,I.clientY);t.setAttribute("data-hot",ne?"1":"0"),t.setAttribute("data-action",E(g.members)),g.members.length>1?w(ae):k(),S(ne?"\u677E\u624B\u6267\u884C":"\u63D0\u4EA4")}}function Y(I,A){if(!(!g||g.pointerId!==I.pointerId)){var B=g;g=null,t.classList.remove("is-dragging"),t.setAttribute("data-hot","0"),S("\u63D0\u4EA4"),k(),l.forEach(function(ae){s[ae].classList.remove("is-grabbing","is-attached")});try{s[B.anchor].releasePointerCapture(B.pointerId)}catch{}if(!A&&!B.moved){var z=ws(B.anchor);Nn(z.action,z.sub);return}if(!A&&M(I.clientX,I.clientY)){Nn(E(B.members),L(B.members));return}t.setAttribute("data-action","commit"),y(!0)}}var O=function(){r.quickCommitOpen&&!g&&y(!1)};window.addEventListener("resize",O),l.forEach(function(I){var A=s[I];A.addEventListener("pointerdown",_(I)),A.addEventListener("pointermove",W),A.addEventListener("pointerup",function(B){Y(B,!1)}),A.addEventListener("pointercancel",function(B){Y(B,!0)}),A.addEventListener("keydown",function(B){if(!(A.disabled||Gr())&&(B.key==="Enter"||B.key===" "||B.key==="Spacebar")){B.preventDefault();var z=ws(I);Nn(z.action,z.sub)}})}),n.addEventListener("click",function(){n.disabled||Gr()||g||Nn("commit")}),Bn=function(){window.removeEventListener("resize",O),g=null}}function $c(){if(!(!r.selectedId||r.quickCommitGenerating)){var e=document.getElementById("quick-commit-message");e&&(r.quickCommitForm.customMessage=e.value);var t=document.getElementById("quick-commit-tag");t&&(r.quickCommitForm.tag=t.value),r.quickCommitGenerating=!0,r.quickCommitError="",Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/generate-commit-message",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}).then(function(n){return n.json().then(function(i){return{ok:n.ok,data:i}})}).then(function(n){if(!n.ok)throw new Error(n.data&&n.data.error||"AI \u751F\u6210\u5931\u8D25\u3002");var i=n.data||{},a=typeof i.message=="string"?i.message:"",s=typeof i.suggestedTag=="string"?i.suggestedTag.trim():"",o=(r.quickCommitForm.customMessage||"").trim();!o&&a&&(r.quickCommitForm.customMessage=a),s&&(r.quickCommitForm.tagEdited||(r.quickCommitForm.tag=s),r.quickCommitDragAction="commit-tag")}).catch(function(n){r.quickCommitError=n&&n.message||"AI \u751F\u6210\u5931\u8D25\u3002"}).finally(function(){r.quickCommitGenerating=!1,r.quickCommitOpen&&Ot()})}}function Nn(e,t){if(!(!r.selectedId||r.quickCommitSubmitting)){var n=document.getElementById("quick-commit-message");n&&(r.quickCommitForm.customMessage=n.value);var i=document.getElementById("quick-commit-tag");i&&(r.quickCommitForm.tag=i.value);var a=r.quickCommitForm||{},s=Jc(e||r.quickCommitDragAction||"commit"),o=s.withTag,l=o?(a.tag||"").trim():"",c=(a.customMessage||"").trim(),d=!c,u={branch:(r.gitStatus||{}).branch||"",commitHash:(r.gitStatus||{}).lastCommit&&(r.gitStatus||{}).lastCommit.shortHash?(r.gitStatus||{}).lastCommit.shortHash:(r.gitStatus||{}).head?(r.gitStatus||{}).head.substring(0,7):"",commitSubject:(r.gitStatus||{}).lastCommit&&(r.gitStatus||{}).lastCommit.subject?(r.gitStatus||{}).lastCommit.subject:"",tag:(r.gitStatus||{}).latestTag||""},f={autoMessage:d,customMessage:d?"":c,tag:l,autoTag:!!(o&&!l),push:!!s.push,submodule:!!t};r.quickCommitSubmitting=!0,r.quickCommitSubmoduleIntent=!!t,r.quickCommitAutoGenerating=d||f.autoTag,r.quickCommitError="",r.quickCommitPushError="",r.quickCommitResult=null,r.quickCommitDragAction=s.action,Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/quick-commit",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}).then(function(v){return v.json().then(function(m){return{ok:v.ok,data:m}})}).then(function(v){if(!v.ok)throw new Error(v.data&&v.data.error||"\u5FEB\u6377\u63D0\u4EA4\u5931\u8D25\u3002");var m=v.data||{},y=m.commit&&m.commit.hash?m.commit.hash.substring(0,7):"",g=m.tag&&m.tag.name?m.tag.name:"",b=Array.isArray(m.submoduleCommits)?m.submoduleCommits:[],w=b.length>0?"\u5DF2\u5148\u63D0\u4EA4 "+b.length+" \u4E2A submodule\uFF08"+b.map(function(E){return E.path}).join("\u3001")+"\uFF09\uFF0C":"",k=w+"\u5DF2\u63D0\u4EA4"+(y?" "+y:"")+(g?"\uFF0C\u5DF2\u6253 Tag "+g:"");r.quickCommitResult={action:s.action,includeSubmodule:!!t,pushed:!!m.pushed,pushError:m.pushError||"",commitHash:y,commitMessage:m.commit&&m.commit.message?m.commit.message:c,tagName:g,oldTag:u.tag,oldCommitHash:u.commitHash,oldCommitSubject:u.commitSubject,submoduleCount:b.length},s.push&&!m.pushError?(typeof T=="function"&&T(k+"\uFF0C\u5DF2\u63A8\u9001\u3002","success"),jn()):(typeof T=="function"&&T(k+(m.pushError?"\uFF1Bpush \u5931\u8D25\uFF1A"+m.pushError:"\u3002"),m.pushError?"error":"success"),r.selectedId&&Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()}))}).catch(function(v){r.quickCommitError=v&&v.message||"\u5FEB\u6377\u63D0\u4EA4\u5931\u8D25\u3002"}).finally(function(){r.quickCommitSubmitting=!1,r.quickCommitAutoGenerating=!1,r.quickCommitOpen&&Ot()})}}function Xc(e){if(!(!r.selectedId||r.quickCommitPushing)){var t=!!(e&&e.pushCommits),n=!!(e&&e.pushTags),i=!!(e&&e.closeOnSuccess);if(!(!t&&!n)){var a=r.quickCommitResult||{},s=!!a.includeSubmodule;r.quickCommitPushing=!0,r.quickCommitPushError="",Ot(),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/git/push",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({pushCommits:t,pushTags:n,submodule:s,tag:a.tagName||""})}).then(function(o){return o.json().then(function(l){return{ok:o.ok,data:l}})}).then(function(o){var l=o.data||{};if(!o.ok)throw new Error(l&&l.error||"\u63A8\u9001\u5931\u8D25\u3002");if(l.error){r.quickCommitPushError=l.error,typeof T=="function"&&T("\u63A8\u9001\u5931\u8D25\uFF1A"+l.error,"error");return}var c=[];l.pushedCommits&&c.push("commits"),l.pushedTags&&c.push("tags");var d=c.length?c.join(" \u548C "):"\uFF08\u65E0\u5185\u5BB9\uFF09";typeof T=="function"&&T("\u5DF2\u63A8\u9001 "+d,"success"),r.quickCommitResult&&(r.quickCommitResult.pushed=!0),i?(jn(),r.selectedId&&Tn(r.selectedId,{force:!0})):r.selectedId&&Tn(r.selectedId,{force:!0}).then(function(){r.quickCommitOpen&&Ot()})}).catch(function(o){r.quickCommitPushError=o&&o.message||"\u63A8\u9001\u5931\u8D25\u3002",typeof T=="function"&&T(r.quickCommitPushError,"error")}).finally(function(){r.quickCommitPushing=!1,r.quickCommitOpen&&Ot()})}}}function Zc(e){var t=(e||"").trim();if(t==="??")return{letter:"U",cls:"untracked",title:"\u672A\u8DDF\u8E2A"};if(t==="!!")return{letter:"I",cls:"ignored",title:"\u5DF2\u5FFD\u7565"};for(var n="",i=0;i<e.length;i++)if(e[i]&&e[i]!=="."&&e[i]!==" "){n=e[i];break}n=(n||t[0]||"?").toUpperCase();var a={A:{cls:"add",title:"\u65B0\u589E"},M:{cls:"mod",title:"\u4FEE\u6539"},D:{cls:"del",title:"\u5220\u9664"},R:{cls:"ren",title:"\u91CD\u547D\u540D"},C:{cls:"ren",title:"\u590D\u5236"},T:{cls:"mod",title:"\u7C7B\u578B\u53D8\u66F4"},U:{cls:"del",title:"\u51B2\u7A81"}},s=a[n]||{cls:"other",title:"\u5DF2\u66F4\u6539"};return{letter:n,cls:s.cls,title:s.title}}function Mm(e){var t=e.map(function(n){var i=Zc(n.status||""),a=n.path||"",s=a.lastIndexOf("/"),o=s>=0?a.slice(0,s+1):"",l=s>=0?a.slice(s+1):a,c="";if(n.isSubmodule){var d=n.submoduleState||{},u=[];d.commitChanged&&u.push("\u65B0\u6307\u9488"),d.hasTrackedChanges&&u.push("dirty"),d.hasUntracked&&u.push("\u672A\u8DDF\u8E2A");var f=u.length?"submodule \xB7 "+u.join(" / "):"submodule";c='<span class="qc-submodule-badge">'+p(f)+"</span>"}return'<div class="qc-file-row" title="'+p(a)+'"><span class="qc-file-badge qc-badge-'+i.cls+'" title="'+p(i.title)+'">'+p(i.letter)+'</span><span class="qc-file-path">'+(o?'<span class="qc-file-dir">'+p(o)+"</span>":"")+'<span class="qc-file-name">'+p(l)+"</span></span>"+c+"</div>"}).join("");return t||'<div class="qc-empty">\u6CA1\u6709\u53EF\u63D0\u4EA4\u7684\u6539\u52A8\u3002</div>'}function Gr(){return r.quickCommitSubmitting||r.quickCommitPushing}function Qr(e,t,n,i){return'<div class="qc-pair'+(i?" "+i:"")+'"><div class="qc-pair-label">'+p(e)+'</div><div class="qc-pair-flow"><div class="qc-pair-value qc-pair-value--from">'+t+'</div><div class="qc-pair-arrow" aria-hidden="true">\u2192</div><div class="qc-pair-value qc-pair-value--to">'+n+"</div></div></div>"}function ed(){var e=r.gitStatus||{};if(e.hasSubmodule===!0)return!0;for(var t=e.files||[],n=0;n<t.length;n++)if(t[n]&&t[n].isSubmodule===!0)return!0;return!1}function td(e){var t=!e||Gr(),n=ed();if(r.quickCommitSubmitting){var i=r.quickCommitSubmoduleIntent?"\uFF08\u542B submodule\uFF09":"",a=(r.quickCommitAutoGenerating?"AI \u751F\u6210 + \u63D0\u4EA4\u4E2D\u2026":"\u6267\u884C\u4E2D\u2026")+i;return'<div class="qc-dock-wrap"><div class="qc-dock-busy" role="status"><span class="qc-dock-busy-dot"></span>'+p(a)+"</div></div>"}function s(l,c,d){return'<button type="button" class="qc-chip qc-chip--'+l+'" data-chip="'+l+'"'+(d?' title="'+p(d)+'"':"")+(t?" disabled":"")+'><span class="qc-chip-dot" aria-hidden="true"></span><span class="qc-chip-label">'+c+"</span></button>"}var o=t?e?"":"\u5DE5\u4F5C\u533A\u5E72\u51C0\uFF0C\u65E0\u53EF\u63D0\u4EA4":"\u62D6\u52A8\u78C1\u5438\u7EC4\u5408 \xB7 \u4E22\u8FDB\u63D0\u4EA4\u533A\u6267\u884C \xB7 \u5355\u51FB\u76F4\u63A5\u6267\u884C\u8BE5\u9879"+(n?" \xB7 Sub \u7403\u53EF\u9009\uFF0C\u7EB3\u5165\u540E\u9012\u5F52\u5904\u7406 submodule":"");return'<div class="qc-dock-wrap qc-dock-wrap--magnetic"'+(t?' data-disabled="1"':"")+'><div id="qc-dock-stage" class="qc-dock-stage" data-action="commit" data-hot="0"><div id="qc-dock-field" class="qc-dock-field"><div id="qc-dock-cluster" class="qc-dock-cluster" aria-hidden="true"></div>'+s("commit","Commit")+s("tag","Tag")+s("push","Push")+(n?s("sub","Sub","\u63D0\u4EA4\u7236\u4ED3\u5E93\u5E76\u9012\u5F52\u8FDB\u5165 submodule\uFF08commit / tag / \u5206\u522B\u63A8\u9001\uFF09"):"")+'</div><button type="button" id="qc-dock-launch" class="qc-dock-launch"'+(t?" disabled":"")+' aria-label="\u6267\u884C\u63D0\u4EA4"><span class="qc-dock-launch-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h12M13 6l6 6-6 6"/></svg></span><span id="qc-dock-launch-label" class="qc-dock-launch-label">\u63D0\u4EA4</span></button></div><div class="qc-dock-hint">'+p(o)+"</div></div>"}function nd(){var e=r.quickCommitResult;if(!e)return"";var t=e.oldCommitHash?"<code>"+p(e.oldCommitHash)+"</code>"+(e.oldCommitSubject?"<span>"+p(e.oldCommitSubject)+"</span>":""):'<span class="qc-muted">\u65E0</span>',n=e.commitHash?"<code>"+p(e.commitHash)+"</code><span>"+p(e.commitMessage||"")+"</span>":'<span class="qc-muted">\u65E0</span>',i=e.oldTag?"<code>"+p(e.oldTag)+"</code>":'<span class="qc-muted">\u65E0 tag</span>',a=e.tagName?"<code>"+p(e.tagName)+"</code>":'<span class="qc-muted">\u672A\u6253 tag</span>',s=e.pushed?'<span class="qc-result-pushed">\u5DF2\u63A8\u9001</span>':'<button id="quick-commit-push-after-btn" class="btn btn-primary btn-sm" type="button"'+(r.quickCommitPushing?" disabled":"")+">"+(r.quickCommitPushing?"\u63A8\u9001\u4E2D...":"Push & Close")+"</button>";return'<section class="qc-result-panel">'+Qr("Commit",t,n,"")+Qr("Tag",i,a,"qc-pair--tag")+(e.pushError||r.quickCommitPushError?'<p class="error-message">'+p(e.pushError||r.quickCommitPushError)+"</p>":"")+'<div class="qc-result-actions"><button id="quick-commit-cancel-btn" class="btn btn-ghost btn-sm" type="button">\u5173\u95ED</button>'+s+"</div></section>"}function ks(){var e=r.gitStatus||{},t=r.quickCommitForm||{customMessage:"",tag:"",tagEdited:!1},n=(e.modifiedCount||0)>0,i=r.quickCommitGenerating,a=e.lastCommit||{},s=a.shortHash?"<code>"+p(a.shortHash)+"</code><span>"+p(a.subject||"")+"</span>":e.head?"<code>"+p(e.head.substring(0,7))+"</code>":'<span class="qc-muted">\u65E0 commit</span>',o=e.latestTag?"<code>"+p(e.latestTag)+"</code>":'<span class="qc-muted">\u65E0 tag</span>',l='<input type="text" id="quick-commit-tag" class="field-input qc-tag-field-input" placeholder="\u7559\u7A7A\u5219 AI \u751F\u6210" value="'+p(t.tag||"")+'"'+(r.quickCommitSubmitting?" disabled":"")+">",c='<textarea id="quick-commit-message" class="field-input qc-message-input" rows="3" placeholder="New commit message" '+(r.quickCommitSubmitting?"disabled":"")+">"+p(t.customMessage||"")+"</textarea>",d=[];d.push(e.branch||"(no branch)"),d.push(n?(e.modifiedCount||0)+" \u4E2A\u6539\u52A8":"\u5DE5\u4F5C\u533A\u5E72\u51C0"),typeof e.ahead=="number"&&e.ahead>0&&d.push("\u2191"+e.ahead),typeof e.behind=="number"&&e.behind>0&&d.push("\u2193"+e.behind);var u=r.quickCommitResult?"":'<section class="qc-release-panel"><div class="qc-message-header"><span class="qc-section-title">New</span><button type="button" id="quick-commit-ai-btn" class="btn btn-ghost btn-sm qc-ai-btn"'+(i?" disabled":"")+' title="AI \u751F\u6210 commit message \u4E0E tag"><svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M8 1.5l1.4 3.6L13 6.5 9.4 7.9 8 11.5 6.6 7.9 3 6.5l3.6-1.4L8 1.5zM12.5 10.5l.7 1.8 1.8.7-1.8.7-.7 1.8-.7-1.8-1.8-.7 1.8-.7.7-1.8z" fill="currentColor"/></svg><span>'+(i?"\u751F\u6210\u4E2D...":"AI")+"</span></button></div>"+Qr("Commit",s,c,"qc-pair--commit")+Qr("Tag",o,l,"qc-pair--tag")+(r.quickCommitError?'<p class="error-message">'+p(r.quickCommitError)+"</p>":"")+td(n)+'<div class="qc-modal-actions"><button id="quick-commit-cancel-btn" class="btn btn-ghost btn-sm" type="button">\u53D6\u6D88</button></div></section>',f=nd();return'<section id="quick-commit-modal" class="modal-backdrop'+(r.quickCommitOpen?"":" hidden")+'"><div class="modal quick-commit-modal" role="dialog" aria-labelledby="quick-commit-title"><div class="modal-header"><div><h2 id="quick-commit-title" class="modal-title">\u5FEB\u6377\u63D0\u4EA4</h2><p class="modal-subtitle">'+p(d.join(" \xB7 "))+'</p></div><button id="quick-commit-close-btn" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body">'+u+f+"</div></div></section>"}function rd(){return'<section id="worktree-merge-modal" class="modal-backdrop hidden"><div class="modal worktree-merge-modal"><div class="modal-header"><div><h2 class="modal-title">\u5408\u5E76 Worktree</h2><p class="modal-subtitle">\u68C0\u67E5\u5F53\u524D\u4EFB\u52A1\u5206\u652F\u5E76\u5FEB\u6377\u5408\u5E76\u5230\u4E3B\u5206\u652F\u3002</p></div><button id="close-worktree-merge-button" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body"><div id="worktree-merge-content" class="worktree-merge-content"></div><p id="worktree-merge-error" class="error-message hidden"></p><div class="worktree-merge-actions"><button id="worktree-merge-cancel-button" class="btn btn-secondary">\u53D6\u6D88</button><button id="worktree-merge-confirm-button" class="btn btn-primary">\u786E\u8BA4\u5408\u5E76\u5E76\u6E05\u7406</button></div></div></div></section>'}function id(){return'<section id="settings-modal" class="modal-backdrop hidden"><div class="modal settings-modal"><div class="modal-header settings-modal-header"><div class="settings-modal-title-group"><h2 class="modal-title">\u8BBE\u7F6E</h2><p class="settings-modal-subtitle">\u8C03\u6574\u5E94\u7528\u914D\u7F6E\u3001\u901A\u77E5\u3001\u5B89\u5168\u548C\u663E\u793A\u504F\u597D</p></div><button id="close-settings-button" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body settings-modal-body"><div class="settings-layout"><aside class="settings-sidebar"><div class="settings-sidebar-header"><div class="settings-sidebar-title">\u504F\u597D\u8BBE\u7F6E</div><div class="settings-sidebar-hint">\u5DE6\u4FA7\u5207\u6362\u5206\u533A\uFF0C\u53F3\u4FA7\u67E5\u770B\u8BE6\u7EC6\u8BF4\u660E\u4E0E\u9009\u9879\u3002</div></div><div class="settings-tabs" role="tablist" aria-label="\u8BBE\u7F6E\u5206\u7EC4" aria-orientation="vertical"><button class="settings-tab active" data-tab="about" role="tab" aria-selected="true" aria-controls="settings-tab-about"><span class="settings-tab-main">\u5173\u4E8E</span><span class="settings-tab-meta">\u7248\u672C\u3001\u66F4\u65B0\u4E0E\u8FDE\u63A5\u65B9\u5F0F</span></button><button class="settings-tab" data-tab="general" role="tab" aria-selected="false" aria-controls="settings-tab-general"><span class="settings-tab-main">\u57FA\u672C\u914D\u7F6E</span><span class="settings-tab-meta">\u4E3B\u673A\u3001\u6A21\u5F0F\u3001\u8BED\u8A00\u3001\u76EE\u5F55</span></button><button class="settings-tab" data-tab="notifications" role="tab" aria-selected="false" aria-controls="settings-tab-notifications"><span class="settings-tab-main">\u901A\u77E5</span><span class="settings-tab-meta">\u63D0\u793A\u97F3\u4E0E\u6D4F\u89C8\u5668\u901A\u77E5</span></button><button class="settings-tab" data-tab="security" role="tab" aria-selected="false" aria-controls="settings-tab-security"><span class="settings-tab-main">\u5B89\u5168</span><span class="settings-tab-meta">\u5BC6\u7801\u4E0E\u8BC1\u4E66</span></button><button class="settings-tab" data-tab="presets" role="tab" aria-selected="false" aria-controls="settings-tab-presets"><span class="settings-tab-main">\u547D\u4EE4\u9884\u8BBE</span><span class="settings-tab-meta">\u67E5\u770B\u5DF2\u6709\u9884\u8BBE</span></button><button class="settings-tab" data-tab="display" role="tab" aria-selected="false" aria-controls="settings-tab-display"><span class="settings-tab-main">\u663E\u793A</span><span class="settings-tab-meta">\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00\u884C\u4E3A</span></button></div></aside><div class="settings-content"><div class="settings-panel active" id="settings-tab-about" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u5173\u4E8E Wand</h3><p class="settings-panel-desc">\u67E5\u770B\u7248\u672C\u4FE1\u606F\u3001\u66F4\u65B0\u72B6\u6001\u548C Android App \u8FDE\u63A5\u65B9\u5F0F\u3002</p></div><div class="settings-about-info"><div class="settings-about-row"><span class="settings-label">\u5305\u540D</span><span class="settings-value" id="settings-pkg-name">-</span></div><div class="settings-about-row"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-version">-</span></div><div class="settings-about-row"><span class="settings-label">Node.js \u8981\u6C42</span><span class="settings-value" id="settings-node-req">-</span></div><div class="settings-about-row"><span class="settings-label">\u4ED3\u5E93\u5730\u5740</span><span class="settings-value" id="settings-repo-url"><a href="#" target="_blank" rel="noopener">-</a></span></div></div><div class="settings-update-section" id="web-update-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("globe",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">Web \u7AEF</h4><p class="settings-section-sub">\u6D4F\u89C8\u5668\u8BBF\u95EE\u7684\u670D\u52A1\u7248\u672C</p></div></div><div class="settings-about-row"><span class="settings-label">\u6700\u65B0\u7248\u672C</span><span class="settings-value" id="settings-latest-version">-</span></div><div class="settings-update-actions"><button id="check-update-button" class="btn btn-secondary btn-sm">\u68C0\u67E5\u66F4\u65B0</button><button id="do-update-button" class="btn btn-primary btn-sm hidden">\u66F4\u65B0\u5230\u6700\u65B0\u7248</button><button id="do-restart-button" class="btn btn-success btn-sm hidden">\u91CD\u542F\u751F\u6548</button></div><p id="update-message" class="hint hidden"></p><div class="settings-toggle-row"><div class="settings-toggle-text"><span class="settings-toggle-title">Beta \u901A\u9053</span><span class="settings-toggle-desc">\u66F4\u65B0\u5230 npm beta \u7248\u672C\uFF08tag + commit \u5C3E\u6807\uFF09\uFF0C\u5C1D\u9C9C\u65B0\u529F\u80FD\uFF0C\u53EF\u80FD\u4E0D\u7A33\u5B9A\u3002</span></div><label class="settings-switch"><input type="checkbox" id="beta-channel-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><div class="settings-toggle-row"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc">\u68C0\u6D4B\u5230\u65B0\u7248\u672C\u5C06\u81EA\u52A8\u4E0B\u8F7D\u5B89\u88C5\u5E76\u91CD\u542F\u670D\u52A1\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-web-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div></div><div class="settings-update-section hidden" id="android-apk-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("smartphone",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">Android App</h4><p class="settings-section-sub">\u539F\u751F\u5BA2\u6237\u7AEF\u7248\u672C\u4E0E APK \u4E0B\u8F7D</p></div></div><div id="android-apk-current-row" class="settings-about-row hidden"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-android-apk-current">-</span></div><div id="android-apk-github-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u7EBF\u4E0A\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-android-apk-github">-</span><button id="download-github-apk-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="android-apk-local-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u672C\u5730\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-android-apk-local">-</span><button id="download-local-apk-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="android-auto-update-row" class="settings-toggle-row hidden"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc" id="android-auto-update-hint">\u68C0\u6D4B\u5230\u65B0\u7248 APK \u65F6\u81EA\u52A8\u62C9\u8D77\u4E0B\u8F7D\uFF0C\u5B89\u88C5\u4ECD\u9700\u5728\u7CFB\u7EDF\u4E2D\u786E\u8BA4\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-apk-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><p id="android-apk-message" class="hint hidden"></p></div><div class="settings-update-section hidden" id="macos-dmg-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("desktop",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">macOS App</h4><p class="settings-section-sub">\u539F\u751F\u5BA2\u6237\u7AEF\u7248\u672C\u4E0E DMG \u4E0B\u8F7D</p></div></div><div id="macos-dmg-current-row" class="settings-about-row hidden"><span class="settings-label">\u5F53\u524D\u7248\u672C</span><span class="settings-value" id="settings-macos-dmg-current">-</span></div><div id="macos-dmg-github-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u7EBF\u4E0A\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-macos-dmg-github">-</span><button id="download-github-dmg-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="macos-dmg-local-row" class="settings-about-row settings-about-row-action hidden"><span class="settings-label">\u672C\u5730\u7248\u672C</span><span class="settings-value settings-value-flex" id="settings-macos-dmg-local">-</span><button id="download-local-dmg-btn" class="btn btn-secondary btn-sm hidden" type="button">\u4E0B\u8F7D</button></div><div id="macos-auto-update-row" class="settings-toggle-row hidden"><div class="settings-toggle-text"><span class="settings-toggle-title">\u81EA\u52A8\u66F4\u65B0</span><span class="settings-toggle-desc" id="macos-auto-update-hint">\u68C0\u6D4B\u5230\u65B0\u7248 DMG \u5C06\u81EA\u52A8\u4E0B\u8F7D\u5E76\u6302\u8F7D\u3002</span></div><label class="settings-switch"><input type="checkbox" id="auto-update-dmg-toggle" class="switch-toggle"><span class="switch-slider"></span></label></div><p id="macos-dmg-message" class="hint hidden"></p></div><div class="settings-update-section" id="android-connect-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("link",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">App \u8FDE\u63A5\u7801</h4><p class="settings-section-sub">\u7C98\u8D34\u5230 Android App \u5373\u53EF\u81EA\u52A8\u8FDE\u63A5\uFF0C\u65E0\u9700\u5BC6\u7801\uFF1B\u6539\u5BC6\u7801\u540E\u5931\u6548\u3002</p></div></div><div class="settings-connect-url-box"><code id="android-connect-code" class="settings-connect-url-text">-</code><button id="copy-connect-code-button" class="btn btn-secondary btn-sm" type="button" title="\u590D\u5236\u8FDE\u63A5\u7801">\u590D\u5236</button></div><div class="settings-connect-qr-box"><div class="settings-connect-qr-wrap" id="android-connect-qr-wrap" title="\u70B9\u51FB\u653E\u5927"><canvas id="android-connect-qr" width="180" height="180"></canvas><div class="settings-connect-qr-empty" id="android-connect-qr-empty">\u751F\u6210\u4E2D\u2026</div></div><p class="settings-connect-qr-hint">\u7528 Wand App \u626B\u4E00\u626B\uFF0C\u5373\u53EF\u4E00\u952E\u586B\u5165\u670D\u52A1\u5668\u5730\u5740\u4E0E\u8FDE\u63A5\u7801\u3002</p></div></div></div><div class="settings-panel" id="settings-tab-notifications" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u901A\u77E5</h3><p class="settings-panel-desc">\u8BBE\u7F6E\u63D0\u793A\u97F3\u3001\u7CFB\u7EDF\u901A\u77E5\u548C\u6D4F\u89C8\u5668\u901A\u77E5\u7684\u884C\u4E3A\u3002</p></div><div class="settings-notification-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("bell",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u901A\u77E5\u504F\u597D</h4><p class="settings-section-sub">\u63D0\u793A\u97F3\u4E0E\u5E94\u7528\u5185\u901A\u77E5\u6C14\u6CE1</p></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-notif-sound">\u64AD\u653E\u63D0\u793A\u97F3</label><span class="settings-toggle-desc">\u91CD\u8981\u901A\u77E5\uFF08\u7248\u672C\u66F4\u65B0\u3001\u6743\u9650\u7B49\u5F85\u7B49\uFF09\u65F6\u64AD\u653E\u67D4\u548C\u63D0\u793A\u97F3\u3002</span></div><label class="settings-switch"><input id="cfg-notif-sound" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div><div class="settings-range-row" id="notif-volume-field"><label class="settings-range-label" for="cfg-notif-volume">\u97F3\u91CF</label><input id="cfg-notif-volume" type="range" min="0" max="100" step="5" class="settings-range" /><span id="cfg-notif-volume-val" class="settings-range-value">80%</span></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-notif-bubble">\u5E94\u7528\u5185\u901A\u77E5\u6C14\u6CE1</label><span class="settings-toggle-desc">\u5728\u9875\u9762\u9876\u90E8\u5F39\u51FA\u6D6E\u52A8\u901A\u77E5\u6C14\u6CE1\u3002</span></div><label class="settings-switch"><input id="cfg-notif-bubble" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div id="native-sound-section" class="settings-notification-section hidden"><div class="settings-section-head"><span class="settings-section-icon">'+J("music",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u7CFB\u7EDF\u901A\u77E5\u94C3\u58F0</h4><p class="settings-section-sub">\u9009\u62E9 Android \u7CFB\u7EDF\u901A\u77E5\u4F7F\u7528\u7684\u94C3\u58F0</p></div></div><div class="settings-row-with-action"><select id="native-sound-select" class="field-input field-select"></select><button id="native-sound-preview" class="btn btn-secondary btn-sm btn-with-icon" type="button">'+J("play",{size:11,strokeWidth:1.8,fill:"currentColor"})+'<span>\u8BD5\u542C</span></button></div></div><div id="native-haptic-section" class="settings-notification-section hidden"><div class="settings-section-head"><span class="settings-section-icon">'+J("vibrate",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u89E6\u611F\u53CD\u9988</h4><p class="settings-section-sub">\u6309\u94AE\u64CD\u4F5C\u548C\u4EFB\u52A1\u5B8C\u6210\u65F6\u63D0\u4F9B\u632F\u52A8\u53CD\u9988</p></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-haptic-enabled">\u542F\u7528\u89E6\u611F\u53CD\u9988</label></div><label class="settings-switch"><input id="cfg-haptic-enabled" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div class="settings-notification-section"><div class="settings-section-head"><span class="settings-section-icon">'+J("globe",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u6D4F\u89C8\u5668\u901A\u77E5</h4><p class="settings-section-sub">\u6765\u81EA\u7CFB\u7EDF\u901A\u77E5\u4E2D\u5FC3\u7684\u5F39\u7A97</p></div></div><div class="settings-about-row"><span class="settings-label">\u6388\u6743\u72B6\u6001</span><span class="settings-value" id="notification-permission-status">-</span></div><div class="settings-update-actions"><button id="notification-request-btn" class="btn btn-primary btn-sm hidden" type="button">\u6388\u6743\u901A\u77E5</button><button id="notification-reset-btn" class="btn btn-ghost btn-sm hidden" type="button">\u91CD\u65B0\u6388\u6743</button><button id="notification-test-btn" class="btn btn-secondary btn-sm" type="button">\u53D1\u9001\u6D4B\u8BD5\u901A\u77E5</button><button id="notification-test-delay-btn" class="btn btn-ghost btn-sm" type="button">10 \u79D2\u540E\u53D1\u9001</button></div><p id="notification-test-message" class="hint hidden"></p></div></div><div class="settings-panel" id="settings-tab-general" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u57FA\u672C\u914D\u7F6E</h3><p class="settings-panel-desc">\u914D\u7F6E\u670D\u52A1\u76D1\u542C\u5730\u5740\u3001\u9ED8\u8BA4\u6A21\u5F0F\u3001\u8BED\u8A00\u548C\u5DE5\u4F5C\u76EE\u5F55\u3002</p></div><div class="field-row"><div class="field"><label class="field-label" for="cfg-host">\u76D1\u542C\u5730\u5740 (host)</label><input id="cfg-host" type="text" class="field-input" placeholder="127.0.0.1" /></div><div class="field"><label class="field-label" for="cfg-port">\u7AEF\u53E3 (port)</label><input id="cfg-port" type="number" class="field-input" placeholder="8443" min="1" max="65535" /></div></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-https">\u542F\u7528 HTTPS</label><span class="settings-toggle-desc">\u4F7F\u7528\u81EA\u7B7E\u540D\u8BC1\u4E66\u52A0\u5BC6\u6D4F\u89C8\u5668\u5230\u670D\u52A1\u7684\u8FDE\u63A5\uFF0Chost \u4E3A\u975E 127.0.0.1 \u65F6\u5EFA\u8BAE\u5F00\u542F\u3002</span></div><label class="settings-switch"><input id="cfg-https" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div><div class="field-row"><div class="field"><label class="field-label" for="cfg-mode">\u9ED8\u8BA4\u6267\u884C\u6A21\u5F0F</label><select id="cfg-mode" class="field-input"><option value="default">default</option><option value="assist">assist</option><option value="agent">agent</option><option value="agent-max">agent-max</option><option value="auto-edit">auto-edit</option><option value="full-access">full-access</option><option value="native">native</option><option value="managed">managed</option></select></div><div class="field"><label class="field-label" for="cfg-language">\u56DE\u590D\u8BED\u8A00</label><select id="cfg-language" class="field-input"><option value="">\u81EA\u52A8\uFF08\u4E0D\u6307\u5B9A\uFF09</option><option value="\u4E2D\u6587">\u4E2D\u6587</option><option value="English">English</option><option value="\u65E5\u672C\u8A9E">\u65E5\u672C\u8A9E</option><option value="\uD55C\uAD6D\uC5B4">\uD55C\uAD6D\uC5B4</option><option value="Espa\xF1ol">Espa\xF1ol</option><option value="Fran\xE7ais">Fran\xE7ais</option><option value="Deutsch">Deutsch</option><option value="\u0420\u0443\u0441\u0441\u043A\u0438\u0439">\u0420\u0443\u0441\u0441\u043A\u0438\u0439</option></select></div></div><p class="field-hint" style="margin-top:-4px;">\u8BBE\u7F6E\u56DE\u590D\u8BED\u8A00\u540E\uFF0CClaude \u5C06\u5C3D\u91CF\u4F7F\u7528\u6307\u5B9A\u8BED\u8A00\u56DE\u590D\u3002</p><div class="field"><label class="field-label" for="cfg-structured-runner">\u7ED3\u6784\u5316\u4F1A\u8BDD Runner</label><select id="cfg-structured-runner" class="field-input"><option value="sdk">SDK\uFF08@anthropic-ai/claude-agent-sdk\uFF0C\u9ED8\u8BA4\uFF09</option><option value="cli">CLI\uFF08spawn claude -p\uFF09</option></select><p class="field-hint" style="margin-top:4px;">SDK \u6A21\u5F0F\u4F7F\u7528\u5B98\u65B9 Agent SDK \u66FF\u4EE3 CLI subprocess\uFF0C\u63A5\u53E3\u66F4\u6574\u6D01\uFF0C\u529F\u80FD\u7B49\u4EF7\u3002\u4FDD\u5B58\u540E\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u7ACB\u5373\u751F\u6548\u3002</p></div><div class="settings-toggle-row"><div class="settings-toggle-text"><label class="settings-toggle-title" for="cfg-inherit-env">\u7EE7\u627F\u73AF\u5883\u53D8\u91CF</label><span class="settings-toggle-desc">\u542F\u52A8 PTY / \u7ED3\u6784\u5316\u5B50\u8FDB\u7A0B\u65F6\uFF0C\u628A\u5F53\u524D\u670D\u52A1\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF\u4F20\u7ED9 claude / codex\u3002\u5173\u95ED\u540E\u5B50\u8FDB\u7A0B\u4EC5\u83B7\u5F97\u6700\u5C0F\u53EF\u7528\u73AF\u5883\uFF08PATH/HOME/SHELL/LANG/TERM \u7B49\uFF09\uFF0C\u53EF\u7528\u4E8E\u9694\u79BB API key \u7B49\u654F\u611F\u51ED\u636E\u3002</span></div><div class="settings-toggle-aside"><button type="button" id="cfg-view-env-btn" class="btn btn-secondary btn-sm" title="\u67E5\u770B\u5B9E\u9645\u4F1A\u6CE8\u5165\u5230\u5B50\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF">\u67E5\u770B</button><label class="settings-switch"><input id="cfg-inherit-env" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></label></div></div><div class="field"><label class="field-label" for="cfg-default-model">\u9ED8\u8BA4\u6A21\u578B</label><div class="settings-row-with-action"><select id="cfg-default-model" class="field-input field-select"><option value="">\u8DDF\u968F Claude Code \u9ED8\u8BA4</option></select><button type="button" id="cfg-default-model-refresh" class="btn btn-secondary btn-sm" title="\u5237\u65B0\u6A21\u578B\u5217\u8868">\u5237\u65B0</button></div><p class="field-hint" id="cfg-default-model-version">\u65B0\u5EFA\u4F1A\u8BDD\u65F6\u9ED8\u8BA4\u4F7F\u7528\u8BE5\u6A21\u578B\uFF1B\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u53EF\u5728\u8F93\u5165\u6846\u5207\u6362\u3002</p></div><div class="field"><label class="field-label" for="cfg-cwd">\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55</label><input id="cfg-cwd" type="text" class="field-input" placeholder="/home/user" /></div><div class="field"><label class="field-label" for="cfg-shell">Shell</label><input id="cfg-shell" type="text" class="field-input" placeholder="/bin/bash" /></div>'+(typeof WandNative<"u"&&typeof WandNative.getAppIcon=="function"?'<div class="settings-app-icon-block"><div class="settings-section-head"><span class="settings-section-icon">'+J("palette",{size:18,strokeWidth:1.7})+'</span><div class="settings-section-head-text"><h4 class="settings-section-heading">\u5E94\u7528\u56FE\u6807</h4><p class="settings-section-sub">\u9009\u62E9 App \u542F\u52A8\u5668\u56FE\u6807\uFF0C\u8FD4\u56DE\u684C\u9762\u540E\u751F\u6548</p></div></div><div id="app-icon-picker" class="settings-app-icon-picker"><button type="button" class="settings-app-icon-option" data-icon="shorthair"><span class="settings-app-icon-preview">'+Ci.user+'</span><span class="settings-app-icon-label">\u8D5B\u535A\u864E\u599E</span></button><button type="button" class="settings-app-icon-option" data-icon="garfield"><span class="settings-app-icon-preview">'+Ci.assistant+'</span><span class="settings-app-icon-label">\u52E4\u52B3\u521D\u4E8C</span></button></div><p id="app-icon-message" class="hint hidden"></p></div>':"")+'<div class="settings-actions settings-actions-sticky"><button id="save-config-button" class="btn btn-primary btn-block">\u4FDD\u5B58\u914D\u7F6E</button></div><p id="config-message" class="hint hidden settings-status-message"></p></div><div class="settings-panel" id="settings-tab-security" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u5B89\u5168</h3><p class="settings-panel-desc">\u7BA1\u7406\u767B\u5F55\u5BC6\u7801\u4E0E SSL \u8BC1\u4E66\uFF0C\u654F\u611F\u53D8\u66F4\u8BF7\u786E\u8BA4\u540E\u518D\u4FDD\u5B58\u3002</p></div><div class="settings-card"><div class="settings-card-head"><span class="settings-card-icon">\u{1F512}</span><div class="settings-card-head-text"><h3 class="settings-card-title">\u4FEE\u6539\u5BC6\u7801</h3><p class="settings-card-desc">\u81F3\u5C11 6 \u4E2A\u5B57\u7B26\uFF1B\u4FDD\u5B58\u540E\u4E0B\u6B21\u767B\u5F55\u751F\u6548\u3002</p></div></div><form id="change-password-form" autocomplete="on" onsubmit="return false;"><input type="text" name="username" autocomplete="username" value="wand" tabindex="-1" aria-hidden="true" style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none" readonly /><div class="field"><label class="field-label" for="new-password">\u65B0\u5BC6\u7801</label><input id="new-password" type="password" class="field-input" placeholder="\u8F93\u5165\u65B0\u5BC6\u7801\uFF08\u81F3\u5C11 6 \u4E2A\u5B57\u7B26\uFF09" autocomplete="new-password" /></div><div class="field"><label class="field-label" for="confirm-password">\u786E\u8BA4\u5BC6\u7801</label><input id="confirm-password" type="password" class="field-input" placeholder="\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801" autocomplete="new-password" /></div><div class="settings-card-actions"><button id="save-password-button" class="btn btn-primary" type="submit">\u4FDD\u5B58\u5BC6\u7801</button></div><p id="settings-error" class="error-message hidden"></p><p id="settings-success" class="hint settings-success-message hidden"></p></form></div><div class="settings-card"><div class="settings-card-head"><span class="settings-card-icon">\u{1F510}</span><div class="settings-card-head-text"><h3 class="settings-card-title">SSL \u8BC1\u4E66</h3><p class="settings-card-desc" id="cert-status">\u52A0\u8F7D\u4E2D...</p></div></div><div class="field"><label class="field-label" for="cert-key-file">\u79C1\u94A5\u6587\u4EF6 (.key)</label><div class="file-picker"><input id="cert-key-file" type="file" class="file-picker-input" accept=".key,.pem" /><label for="cert-key-file" class="file-picker-trigger"><svg class="file-picker-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg><span class="file-picker-label">\u9009\u62E9\u79C1\u94A5</span></label><span class="file-picker-name" data-default="\u672A\u9009\u62E9\u6587\u4EF6">\u672A\u9009\u62E9\u6587\u4EF6</span></div></div><div class="field"><label class="field-label" for="cert-cert-file">\u8BC1\u4E66\u6587\u4EF6 (.crt/.pem)</label><div class="file-picker"><input id="cert-cert-file" type="file" class="file-picker-input" accept=".crt,.pem,.cert" /><label for="cert-cert-file" class="file-picker-trigger"><svg class="file-picker-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline></svg><span class="file-picker-label">\u9009\u62E9\u8BC1\u4E66</span></label><span class="file-picker-name" data-default="\u672A\u9009\u62E9\u6587\u4EF6">\u672A\u9009\u62E9\u6587\u4EF6</span></div></div><div class="settings-card-actions"><button id="upload-cert-button" class="btn btn-primary">\u4E0A\u4F20\u8BC1\u4E66</button></div><p id="cert-message" class="hint hidden"></p></div></div><div class="settings-panel" id="settings-tab-presets" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u547D\u4EE4\u9884\u8BBE</h3><p class="settings-panel-desc">\u5F53\u524D\u547D\u4EE4\u9884\u8BBE\u4ECE config.json \u8BFB\u53D6\uFF0C\u53EF\u5728\u8FD9\u91CC\u5FEB\u901F\u67E5\u770B\u5DF2\u6709\u914D\u7F6E\u3002</p></div><div id="presets-list" class="presets-list"></div></div><div class="settings-panel" id="settings-tab-display" role="tabpanel"><div class="settings-panel-header"><h3 class="settings-panel-title">\u663E\u793A</h3><p class="settings-panel-desc">\u63A7\u5236\u804A\u5929\u89C6\u56FE\u91CC\u4E0D\u540C\u5361\u7247\u7C7B\u578B\u7684\u9ED8\u8BA4\u5C55\u5F00\u72B6\u6001\u3002</p></div><div class="settings-section-title">\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00\u72B6\u6001</div><p class="hint settings-inline-hint">\u8BBE\u7F6E\u7ED3\u6784\u5316\u804A\u5929\u89C6\u56FE\u4E2D\u5404\u7C7B\u5361\u7247\u7684\u9ED8\u8BA4\u5C55\u5F00/\u6298\u53E0\u72B6\u6001\u3002\u624B\u52A8\u64CD\u4F5C\u7684\u5C55\u5F00\u72B6\u6001\u4F18\u5148\u4E8E\u6B64\u9ED8\u8BA4\u8BBE\u7F6E\u3002</p><div class="switch-card-list"><label class="switch-card" for="cfg-card-edit"><div class="switch-card-header"><span class="switch-card-title">\u7F16\u8F91\u5361\u7247 (Edit/Write)</span><input id="cfg-card-edit" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u6587\u4EF6\u7F16\u8F91\u548C\u5199\u5165\u64CD\u4F5C\u7684 diff \u89C6\u56FE</div></label><label class="switch-card" for="cfg-card-inline"><div class="switch-card-header"><span class="switch-card-title">\u5185\u8054\u5DE5\u5177 (Read/Glob/Grep)</span><input id="cfg-card-inline" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u6587\u4EF6\u8BFB\u53D6\u3001\u641C\u7D22\u7B49\u5DE5\u5177\u7684\u7ED3\u679C</div></label><label class="switch-card" for="cfg-card-terminal"><div class="switch-card-header"><span class="switch-card-title">\u7EC8\u7AEF\u8F93\u51FA (Bash)</span><input id="cfg-card-terminal" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u547D\u4EE4\u884C\u6267\u884C\u7ED3\u679C</div></label><label class="switch-card" for="cfg-card-thinking"><div class="switch-card-header"><span class="switch-card-title">\u601D\u8003\u8FC7\u7A0B (Thinking)</span><input id="cfg-card-thinking" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">Claude \u7684\u601D\u8003\u8FC7\u7A0B\u5757</div></label><label class="switch-card" for="cfg-card-toolgroup"><div class="switch-card-header"><span class="switch-card-title">\u5DE5\u5177\u7EC4</span><input id="cfg-card-toolgroup" type="checkbox" class="switch-toggle" /><span class="switch-slider"></span></div><div class="switch-card-desc">\u8FDE\u7EED\u540C\u7C7B\u5DE5\u5177\u8C03\u7528\u7684\u6298\u53E0\u7EC4</div></label></div><div class="settings-actions settings-actions-sticky"><button id="save-display-button" class="btn btn-primary btn-block">\u4FDD\u5B58\u663E\u793A\u8BBE\u7F6E</button></div><p id="display-message" class="hint hidden settings-status-message"></p></div></div></div></section>'}function xs(){var e=Date.now()-864e5,t=[];return r.sessions.forEach(function(n){if(!n.archived){var i=n.startedAt?new Date(n.startedAt).getTime():0;t.push({kind:"session",ref:n,t:isFinite(i)?i:0})}}),r.claudeHistoryLoaded&&Rn().forEach(function(n){if(n.timestamp){var i=new Date(n.timestamp).getTime();!isFinite(i)||i<=e||t.push({kind:"history",ref:n,t:i})}}),t.sort(function(n,i){return i.t-n.t}),t}function ad(){var e=r.sessions.filter(function(a){return a.archived}),t=[];t.push(Ss());var n=xs(),i=ud();return n.length>0&&t.push(cd(n)),e.length>0&&t.push(ld(e)),n.length===0&&e.length===0&&!i?Ss()+'<div class="empty-state"><strong>\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u8BB0\u5F55</strong><br>\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB\u4F60\u7684\u7B2C\u4E00\u6B21\u5BF9\u8BDD\u3002</div>':(i&&t.push(i),t.join(""))}function sd(){return!!r.sidebarPinned&&!!r.sidebarCollapsed}function od(){var e=xs(),t=e.map(function(i,a){var s=a+1;if(i.kind==="session"){var o=i.ref,l=o.id===r.selectedId?" active":"",c=o.summary||o.command||"\u4F1A\u8BDD "+s;return'<button class="sidebar-collapsed-tile'+l+'" type="button" data-collapsed-session-id="'+p(o.id)+'" title="'+p(c)+'">'+s+"</button>"}var d=i.ref,u=d.firstUserMessage||"(\u7A7A\u4F1A\u8BDD)",f=u+" \xB7 "+Bs(d.timestamp);return'<button class="sidebar-collapsed-tile history" type="button" data-collapsed-history-id="'+p(d.claudeSessionId)+'" data-cwd="'+p(d.cwd||"")+'" title="'+p(f)+'">'+s+"</button>"}).join(""),n='<button class="sidebar-collapsed-tile add" type="button" data-collapsed-new-session="1" title="\u65B0\u5EFA\u4F1A\u8BDD" aria-label="\u65B0\u5EFA\u4F1A\u8BDD"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg></button>';return'<div class="sidebar-collapsed-tiles">'+t+n+"</div>"}function Ji(){return sd()?od():ad()}function Ss(){if(!r.sessionsManageMode)return'<div class="session-manage-bar"><span class="sidebar-intro">\u6700\u8FD1\u7684\u4F1A\u8BDD\u8BB0\u5F55</span><button class="btn btn-ghost btn-xs session-manage-toggle" data-action="toggle-manage-mode" type="button"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg><span>\u7BA1\u7406</span></button></div>';var e=Es().length,t=Is().length,n=e+t,i=n>0,a=vd(),s=a>0&&n>=a,o=s?"\u53D6\u6D88\u5168\u9009":"\u5168\u9009",l=s?"clear-selection":"select-all-visible",c=a===0?" disabled":"",d='<button class="session-manage-exit" data-action="toggle-manage-mode" type="button" aria-label="\u9000\u51FA\u7BA1\u7406\u6A21\u5F0F" title="\u9000\u51FA\u7BA1\u7406\u6A21\u5F0F"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button>',u=i?'<span class="session-manage-count">'+n+'</span><span class="session-manage-summary-label">\u5DF2\u9009\u62E9</span>':'<span class="session-manage-summary-label muted">\u9009\u62E9\u8981\u7BA1\u7406\u7684\u9879\u76EE</span>';return'<div class="session-manage-bar active">'+d+'<div class="session-manage-summary">'+u+'</div><div class="session-manage-actions"><button class="btn btn-ghost btn-xs" data-action="'+l+'" type="button"'+c+">"+o+'</button><button class="btn btn-danger btn-xs" data-action="delete-selected" type="button"'+(i?"":" disabled")+">\u5220\u9664"+(i?" "+n:"")+"</button></div></div>"}function Am(e,t,n){return'<section class="session-group"><div class="session-group-title">'+p(e)+"</div>"+t.map(function(i){return Zi(i,n)}).join("")+"</section>"}function ld(e){var t=!!r.archivedExpanded,n=t?"▾":"▸",i='<div class="session-group-title claude-history-toggle" data-action="toggle-archived-group"><span class="chevron">'+n+'</span> \u5DF2\u5F52\u6863 <span class="history-count">'+e.length+"</span></div>";if(!t)return'<section class="session-group">'+i+"</section>";var a=e.map(function(s){return Zi(s,"sessions")}).join("");return'<section class="session-group">'+i+a+"</section>"}function cd(e){var t='<section class="session-group session-group--recent">';return t+=e.map(function(n){return n.kind==="session"?Zi(n.ref,"sessions"):Yi(n.ref,"history")}).join(""),t+="</section>",t}function dd(){var e=Date.now()-864e5;return Rn().filter(function(t){return!t.timestamp||new Date(t.timestamp).getTime()<=e})}function ud(){var e=dd(),t=!!r.claudeHistoryLoaded,n=Sd(),i=!!r.codexHistoryLoaded,a=t&&i,s=(t?e.length:0)+(i?n.length:0);if(a&&s===0)return"";var o=!!r.claudeHistoryExpanded,l=o?"▾":"▸",c=a?s>999?"999+":String(s):"\xB7\xB7\xB7",d='<div class="session-group-title claude-history-toggle session-history-toggle" id="claude-history-toggle" role="button" tabindex="0" aria-expanded="'+o+'" title="'+(o?"\u6536\u8D77\u5386\u53F2\u4F1A\u8BDD":"\u5C55\u5F00\u5386\u53F2\u4F1A\u8BDD")+'"><span class="chevron">'+l+'</span> \u5386\u53F2\u4F1A\u8BDD <span class="history-count'+(a?"":" loading")+'">'+c+"</span></div>",u=o?'<div class="session-history-body">'+fd(e)+yd(n)+"</div>":"";return'<section class="session-group session-group--history">'+d+u+"</section>"}function fd(e){if(!r.claudeHistoryLoaded)return'<div class="claude-history-loading">\u626B\u63CF\u5386\u53F2\u4F1A\u8BDD\u4E2D\u2026</div>';if(e.length===0)return"";var t={},n=[];e.forEach(function(s){t[s.cwd]||(t[s.cwd]=[],n.push(s.cwd)),t[s.cwd].push(s)});var i='<div class="sidebar-history-toolbar"><button class="btn btn-ghost btn-xs sidebar-history-clear" data-action="clear-all-history" type="button">\u6E05\u7A7A\u5168\u90E8</button></div>',a="";return n.forEach(function(s){var o=s.split("/").filter(Boolean).slice(-3).join("/"),l=!!r.claudeHistoryExpandedDirs[s];a+=wd(s,o,t[s].length,l),l&&(a+=t[s].map(function(c){return Yi(c,"history")}).join(""))}),i+'<div class="sidebar-history-scroll">'+a+"</div>"}function Rn(){var e=new Set;return r.sessions.forEach(function(t){t.claudeSessionId&&e.add(t.claudeSessionId)}),r.claudeHistory.filter(function(t){return t.hasConversation&&!t.managedByWand&&!e.has(t.claudeSessionId)})}function Es(){return Object.keys(r.selectedSessionIds).filter(function(e){return!!r.selectedSessionIds[e]})}function Is(){return Object.keys(r.selectedClaudeHistoryIds).filter(function(e){return!!r.selectedClaudeHistoryIds[e]})}function $r(){r.selectedSessionIds={},r.selectedClaudeHistoryIds={}}function pd(e){r.sessionsManageMode=typeof e=="boolean"?e:!r.sessionsManageMode,r.sessionsManageMode&&!r.claudeHistoryLoaded&&Xr().then(ve),r.sessionsManageMode||($r(),Pr()),ve()}function Cs(){return r.sessions.slice()}function vd(){return Cs().length+Rn().length}function Ts(){if(!r.claudeHistoryLoaded){Xr().then(Ts);return}r.claudeHistoryExpanded=!0;var e={};Cs().forEach(function(n){e[n.id]=!0});var t={};Rn().forEach(function(n){t[n.claudeSessionId]=!0}),r.selectedSessionIds=e,r.selectedClaudeHistoryIds=t,ve()}function md(){$r(),ve()}function gr(e,t){if(!(!r.sessionsManageMode||!t)){var n=e==="history"?r.selectedClaudeHistoryIds:r.selectedSessionIds;n[t]?delete n[t]:n[t]=!0,ve()}}function Ls(e,t,n){if(!r.sessionsManageMode)return"";var i=e==="history"?!!r.selectedClaudeHistoryIds[t]:!!r.selectedSessionIds[t];return'<label class="session-manage-check"><input type="checkbox" data-action="toggle-selection" data-kind="'+p(e)+'" data-id="'+p(t)+'"'+(i?" checked":"")+' aria-label="'+p(n)+'"><span></span></label>'}function Fn(e,t){return typeof window.wandConfirm=="function"?window.wandConfirm(e,Object.assign({type:"danger",danger:!0,okLabel:"\u5220\u9664"},t||{})):Promise.resolve(window.confirm(e))}function gd(){var e=Es(),t=Is(),n=e.length+t.length;n&&Fn("\u786E\u8BA4\u5220\u9664\u6240\u9009 "+n+" \u9879\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u6240\u9009 "+n+" \u9879"}).then(function(i){if(i){var a=[];e.length>0&&a.push(fetch("/api/sessions/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({sessionIds:e})}).then(function(s){return s.json()})),t.length>0&&a.push(fetch("/api/claude-history/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({claudeSessionIds:t})}).then(function(s){return s.json()})),Promise.all(a).then(function(){return e.indexOf(r.selectedId)!==-1&&(r.selectedId=null,be()),r.claudeHistory=r.claudeHistory.filter(function(s){return t.indexOf(s.claudeSessionId)===-1}),$r(),Ht()}).catch(function(){var s=document.getElementById("action-error");Ke(s,"\u65E0\u6CD5\u6279\u91CF\u5220\u9664\u6240\u9009\u9879\u76EE\u3002")})}})}function hd(){var e=Date.now()-864e5,t=Rn().filter(function(n){return!n.timestamp||new Date(n.timestamp).getTime()<=e});if(t.length)return Fn("\u786E\u8BA4\u6E05\u7A7A\u5F53\u524D\u663E\u793A\u7684 "+t.length+" \u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u6E05\u7A7A Claude \u5386\u53F2",okLabel:"\u6E05\u7A7A"}).then(function(n){if(n){var i=t.map(function(a){return a.claudeSessionId});return fetch("/api/claude-history/batch-delete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({claudeSessionIds:i})}).then(function(a){return a.json()}).then(function(a){if(a&&a.error)throw new Error(a.error);r.claudeHistory=r.claudeHistory.filter(function(s){return i.indexOf(s.claudeSessionId)===-1}),$r(),ve()}).catch(function(){var a=document.getElementById("action-error");Ke(a,"\u65E0\u6CD5\u6E05\u7A7A\u5386\u53F2\u4F1A\u8BDD\u3002")})}})}function bd(e,t,n,i){var a=i?"\u25BE":"\u25B8";return'<div class="claude-history-directory-header codex-history-directory-header" data-action="toggle-codex-history-directory" data-cwd="'+p(e)+'" role="button" tabindex="0"><div class="session-group-title claude-history-directory-title"><span class="chevron">'+a+'</span><span class="claude-history-directory-label">'+p(t)+" ("+n+")</span></div></div>"}function yd(e){if(!r.codexHistoryLoaded)return'<div class="claude-history-loading">\u626B\u63CF Codex \u5386\u53F2\u4F1A\u8BDD\u4E2D\u2026</div>';if(e.length===0)return"";var t={},n=[];e.forEach(function(a){t[a.cwd]||(t[a.cwd]=[],n.push(a.cwd)),t[a.cwd].push(a)});var i='<div class="sidebar-history-section-label">Codex</div>';return n.forEach(function(a){var s=a.split("/").filter(Boolean).slice(-3).join("/"),o=!!r.codexHistoryExpandedDirs[a];i+=bd(a,s,t[a].length,o),o&&(i+=t[a].map(function(l){return Yi(l,"codex")}).join(""))}),'<div class="sidebar-history-scroll codex-history-scroll">'+i+"</div>"}function wd(e,t,n,i){var a=i?"▾":"▸";return'<div class="claude-history-directory-header" data-action="toggle-history-directory" data-cwd="'+p(e)+'" role="button" tabindex="0"><div class="session-group-title claude-history-directory-title"><span class="chevron">'+a+'</span><span class="claude-history-directory-label">'+p(t)+" ("+n+')</span><button class="btn btn-danger btn-xs claude-history-directory-clear-btn" data-action="delete-history-directory" data-cwd="'+p(e)+'" type="button" aria-label="\u6E05\u7A7A\u6B64\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD" title="\u6E05\u7A7A\u6B64\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD">\u6E05\u7A7A\u6B64\u76EE\u5F55</button></div></div>'}function Yi(e,t){var n=t==="codex",i=n?"resume-codex-history":"resume-history",a=n?"delete-codex-history":"delete-history",s=n?r.selectedCodexHistoryIds:r.selectedClaudeHistoryIds,o=e.claudeSessionId.slice(0,8),l=e.firstUserMessage||"(\u7A7A\u4F1A\u8BDD)",c=Bs(e.timestamp),d=Ls(t,e.claudeSessionId,"\u9009\u62E9\u5386\u53F2\u4F1A\u8BDD "+l),u=r.sessionsManageMode?"":'<button class="session-action-btn delete-btn" data-action="'+a+'" data-claude-session-id="'+e.claudeSessionId+'" type="button" aria-label="\u5220\u9664\u4F1A\u8BDD" title="\u9690\u85CF\u6B64\u5386\u53F2\u4F1A\u8BDD"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg></button>',f=r.sessionsManageMode?"":'<button class="session-action-btn" data-action="'+i+'" data-claude-session-id="'+e.claudeSessionId+'" data-cwd="'+p(e.cwd)+'" type="button" aria-label="\u6062\u590D\u4F1A\u8BDD" title="'+(n?"\u6062\u590D\u6B64 Codex \u5386\u53F2\u4F1A\u8BDD":"\u6062\u590D\u6B64 Claude \u5386\u53F2\u4F1A\u8BDD")+'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 4v6h6"/><path d="M3.51 15a9 9 0 105.64-11.36L3 10"/></svg></button>';return'<div class="session-item claude-history-item'+(r.sessionsManageMode&&s[e.claudeSessionId]?" selected":"")+'" data-claude-history-id="'+e.claudeSessionId+'" data-cwd="'+p(e.cwd)+'" role="button" tabindex="0"><div class="session-item-content"><div class="session-item-row">'+d+'<div class="session-main"><div class="session-command claude-history-preview">'+p(l)+'</div><div class="session-meta"><span class="session-id" title="'+p(e.claudeSessionId)+'">'+p(o)+"</span><span>"+p(c)+'</span></div></div><span class="session-actions">'+f+u+"</span></div></div></div>"}function Bs(e){if(!e)return"";try{var t=new Date(e),n=new Date,i=n-t,a=Math.floor(i/6e4);if(a<1)return"\u521A\u521A";if(a<60)return a+" \u5206\u949F\u524D";var s=Math.floor(a/60);if(s<24)return s+" \u5C0F\u65F6\u524D";var o=Math.floor(s/24);return o<30?o+" \u5929\u524D":t.toLocaleDateString()}catch{return""}}function Ms(){return fetch("/api/claude-history",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){r.claudeHistory=e||[],r.claudeHistoryLoaded=!0,ve()}).catch(function(){r.claudeHistoryLoaded=!0,r.claudeHistory=[],ve()})}var Wn=null;function Xr(){return xd(),r.claudeHistoryLoaded?Promise.resolve():Wn||(Wn=Ms().then(function(){Wn=null},function(){Wn=null}),Wn)}function kd(){return fetch("/api/codex-history",{credentials:"same-origin"}).then(function(e){return e.ok?e.json():[]}).then(function(e){r.codexHistory=e||[],r.codexHistoryLoaded=!0,ve()}).catch(function(){r.codexHistoryLoaded=!0,r.codexHistory=[],ve()})}var zn=null;function xd(){return r.codexHistoryLoaded?Promise.resolve():zn||(zn=kd().then(function(){zn=null},function(){zn=null}),zn)}function Sd(){var e=new Set;return r.sessions.forEach(function(t){t.claudeSessionId&&e.add(t.claudeSessionId)}),r.codexHistory.filter(function(t){return t.hasConversation&&!t.managedByWand&&!e.has(t.claudeSessionId)})}function Ne(){return window.innerWidth<=768}function As(){return!!r.sessionsDrawerOpen&&(Ne()||!r.sidebarPinned)}function Gi(e){r.filePanelOpen=e;try{localStorage.setItem("wand-file-panel-open",String(r.filePanelOpen))}catch{}r.filePanelOpen&&Ne()&&(r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1)),on(),r.filePanelOpen&&Pt()}function Zr(){Gi(!r.filePanelOpen)}function Ed(){var e=document.getElementById("file-side-panel"),t=document.querySelector(".main-content"),n=document.getElementById("file-panel-toggle-btn"),i=document.getElementById("file-panel-backdrop");e&&e.classList.toggle("open",r.filePanelOpen),t&&t.classList.toggle("file-panel-open",r.filePanelOpen),i&&i.classList.toggle("open",r.filePanelOpen),n&&n.classList.toggle("active",r.filePanelOpen)}function on(){Sr(),Ed()}function Id(e){var t=document.getElementById("file-explorer-cwd");if(t){var n=e&&e.cwd?e.cwd:sn();t.tagName==="INPUT"?document.activeElement!==t&&(t.value=n):t.textContent=n,t.title=n}}function qs(){r.filePanelOpen&&Gi(!1)}function Os(e){var t=r.terminalScale+e;if(t=Math.max(.5,Math.min(2,t)),t=Math.round(t*4)/4,t!==r.terminalScale){r.terminalScale=t;try{localStorage.setItem("wand-terminal-scale",String(t))}catch{}Ps(),Cd()}}function Ps(){if(!(!r.terminal||!r.terminal.element)){var e=r.terminalBaseFontSize*r.terminalScale,t=Math.max(1,Math.round(e)),n=Math.max(1,Math.round(e*1.5));r.terminal.element.style.setProperty("--term-font-size",t+"px"),r.terminal.element.style.setProperty("--term-row-height",n+"px"),typeof r.terminal.remeasure=="function"&&requestAnimationFrame(function(){r.terminal&&r.terminal.remeasure()})}}function Cd(){var e=document.getElementById("terminal-scale-label-top");e&&(e.textContent=Math.round(r.terminalScale*100)+"%")}var Td={"chevron-left":'<path d="M15 18l-6-6 6-6"/>',"arrow-up":'<path d="M12 19V5"/><path d="M5 12l7-7 7 7"/>',refresh:'<path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 4v5h-5"/>',eye:'<path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/>',"eye-off":'<path d="M17.94 17.94A10.94 10.94 0 0 1 12 19c-7 0-11-7-11-7a19.86 19.86 0 0 1 4.22-5.18"/><path d="M1 1l22 22"/><path d="M9.9 4.24A10.94 10.94 0 0 1 12 4c7 0 11 7 11 7a19.83 19.83 0 0 1-3.36 4.27"/><path d="M14.12 14.12a3 3 0 1 1-4.24-4.24"/>',x:'<path d="M18 6L6 18"/><path d="M6 6l12 12"/>',search:'<circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/>',copy:'<rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V5a2 2 0 0 1 2-2h10"/>',clipboard:'<rect x="8" y="3" width="8" height="4" rx="1"/><path d="M16 5h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/>',edit:'<path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4z"/>',save:'<path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"/><path d="M17 21v-8H7v8"/><path d="M7 3v5h8"/>',"rotate-ccw":'<path d="M3 12a9 9 0 1 0 3-6.7"/><path d="M3 4v5h5"/>',"wrap-text":'<path d="M3 6h18"/><path d="M3 12h15a3 3 0 1 1 0 6h-4"/><path d="M16 16l-2 2 2 2"/><path d="M3 18h6"/>',type:'<path d="M4 7V4h16v3"/><path d="M9 20h6"/><path d="M12 4v16"/>',minus:'<path d="M5 12h14"/>',plus:'<path d="M12 5v14"/><path d="M5 12h14"/>',"send-to-input":'<path d="M22 2L11 13"/><path d="M22 2l-7 20-4-9-9-4z"/>',terminal:'<polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>',"folder-open":'<path d="M6 14l1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"/>',info:'<circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/>'};function Ae(e,t){t=t||{};var n=Td[e]||"",i=t.size||16,a=t.className?" "+t.className:"";return'<svg class="wand-icon wand-icon-'+e+a+'" width="'+i+'" height="'+i+'" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+n+"</svg>"}function Ld(e){var t=e||sn();return t?'<div class="file-tree" id="file-tree" data-cwd="'+p(t)+'"><div class="tree-loading">\u52A0\u8F7D\u4E2D\u2026</div></div>':'<div class="file-explorer empty">\u672A\u914D\u7F6E\u5DE5\u4F5C\u76EE\u5F55\u3002</div>'}var Bd={png:"\u{1F5BC}\uFE0F",jpg:"\u{1F5BC}\uFE0F",jpeg:"\u{1F5BC}\uFE0F",gif:"\u{1F5BC}\uFE0F",webp:"\u{1F5BC}\uFE0F",svg:"\u{1F5BC}\uFE0F",avif:"\u{1F5BC}\uFE0F",bmp:"\u{1F5BC}\uFE0F",ico:"\u{1F5BC}\uFE0F",heic:"\u{1F5BC}\uFE0F",heif:"\u{1F5BC}\uFE0F",pdf:"\u{1F4D5}",doc:"\u{1F4D8}",docx:"\u{1F4D8}",odt:"\u{1F4D8}",xls:"\u{1F4CA}",xlsx:"\u{1F4CA}",csv:"\u{1F4CA}",tsv:"\u{1F4CA}",ppt:"\u{1F4D9}",pptx:"\u{1F4D9}",mp4:"\u{1F3AC}",webm:"\u{1F3AC}",mov:"\u{1F3AC}",mkv:"\u{1F3AC}",m4v:"\u{1F3AC}",ogv:"\u{1F3AC}",mp3:"\u{1F3B5}",wav:"\u{1F3B5}",ogg:"\u{1F3B5}",m4a:"\u{1F3B5}",flac:"\u{1F3B5}",aac:"\u{1F3B5}",opus:"\u{1F3B5}",zip:"\u{1F4E6}",tar:"\u{1F4E6}",gz:"\u{1F4E6}",tgz:"\u{1F4E6}",bz2:"\u{1F4E6}","7z":"\u{1F4E6}",rar:"\u{1F4E6}",xz:"\u{1F4E6}",md:"\u{1F4DD}",markdown:"\u{1F4DD}",mdx:"\u{1F4DD}",rst:"\u{1F4DD}",txt:"\u{1F4DD}",log:"\u{1F4DD}",html:"\u{1F310}",htm:"\u{1F310}",xml:"\u{1F310}",css:"\u{1F3A8}",scss:"\u{1F3A8}",less:"\u{1F3A8}",json:"\u2699\uFE0F",jsonc:"\u2699\uFE0F",yaml:"\u2699\uFE0F",yml:"\u2699\uFE0F",toml:"\u2699\uFE0F",ini:"\u2699\uFE0F",cfg:"\u2699\uFE0F",conf:"\u2699\uFE0F",env:"\u2699\uFE0F",editorconfig:"\u2699\uFE0F",ts:"\u{1F4DC}",tsx:"\u{1F4DC}",js:"\u{1F4DC}",jsx:"\u{1F4DC}",mjs:"\u{1F4DC}",cjs:"\u{1F4DC}",py:"\u{1F4DC}",rb:"\u{1F4DC}",go:"\u{1F4DC}",rs:"\u{1F4DC}",java:"\u{1F4DC}",c:"\u{1F4DC}",cpp:"\u{1F4DC}",h:"\u{1F4DC}",hpp:"\u{1F4DC}",cs:"\u{1F4DC}",swift:"\u{1F4DC}",kt:"\u{1F4DC}",scala:"\u{1F4DC}",php:"\u{1F4DC}",sh:"\u{1F4DC}",bash:"\u{1F4DC}",zsh:"\u{1F4DC}",fish:"\u{1F4DC}",lua:"\u{1F4DC}",sql:"\u{1F4DC}",graphql:"\u{1F4DC}",proto:"\u{1F4DC}",vue:"\u{1F4DC}",svelte:"\u{1F4DC}",diff:"\u{1F4DC}",patch:"\u{1F4DC}",ttf:"\u{1F524}",otf:"\u{1F524}",woff:"\u{1F524}",woff2:"\u{1F524}",eot:"\u{1F524}"};function Hs(e){if(!e)return"\u{1F4C4}";if(e.type==="dir")return"\u{1F4C1}";var t=(e.name||"").toLowerCase();if(t==="dockerfile")return"\u{1F433}";if(t==="makefile")return"\u{1F6E0}\uFE0F";if(t==="license")return"\u{1F4DC}";if(t==="readme")return"\u{1F4DD}";var n=t.lastIndexOf(".");if(n<0||n===t.length-1)return"\u{1F4C4}";var i=t.slice(n+1);return Bd[i]||"\u{1F4C4}"}function Md(e){if(!e)return"";var t=Date.parse(e);return isNaN(t)?"":new Date(t).toLocaleString()}function _s(){if(r.fileExplorerCwd)return r.fileExplorerCwd;if(r.selectedId){var e=r.sessions.find(function(t){return t.id===r.selectedId});if(e&&e.cwd)return e.cwd}return sn()}function Pt(e){e=e||{};var t=document.getElementById("file-explorer"),n=document.getElementById("file-explorer-cwd");if(t){var i=e.cwd||_s();if(!i){t.innerHTML='<div class="file-explorer empty">\u6CA1\u6709\u53EF\u663E\u793A\u7684\u5DE5\u4F5C\u76EE\u5F55\u3002</div>';return}r.fileExplorerCwd=i,r.fileExplorerLoading=!0,r.allFiles=[],r.fileExplorerTruncated=!1,r.fileExplorerTotal=0,t.innerHTML='<div class="file-explorer"><div class="tree-loading" style="padding:12px;color:var(--text-muted);font-size:0.8125rem;">\u52A0\u8F7D\u4E2D\u2026</div></div>',n&&(n.tagName==="INPUT"?document.activeElement!==n&&(n.value=i):n.textContent=i,n.title=i);var a="/api/directory?q="+encodeURIComponent(i)+"&gitStatus=true";fetch(a,{credentials:"same-origin"}).then(function(s){if(!s.ok)throw new Error("Failed to load directory.");return s.json()}).then(function(s){r.fileExplorerLoading=!1;var o,l,c;if(Array.isArray(s)?(o=s,l=!1,c=s.length):(o=s&&s.items||[],l=!!(s&&s.truncated),c=s&&s.total||o.length),!o||o.length===0){t.innerHTML='<div class="file-explorer empty">\u7A7A\u76EE\u5F55\u6216\u65E0\u6CD5\u8BBF\u95EE\u3002</div>';return}r.allFiles=o,r.fileExplorerTruncated=l,r.fileExplorerTotal=c,Ds()}).catch(function(){r.fileExplorerLoading=!1,t.innerHTML='<div class="file-explorer empty">\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8DEF\u5F84\u6216\u6743\u9650\u3002</div>'})}}function Ds(){var e=document.getElementById("file-explorer");if(e){var t=r.fileExplorerCwd||"";if(t){var n=r.fileSearchQuery,i=r.allFiles||[],a=i;if(n){var s=n.toLowerCase();a=i.filter(function(c){return c.name.toLowerCase().indexOf(s)!==-1})}if(a.length===0){e.innerHTML='<div class="file-explorer empty">'+(n?"\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6":"\u7A7A\u76EE\u5F55")+"</div>";return}var o="";if(!n&&r.fileExplorerTruncated){var l=i.length;o='<div class="tree-truncated" title="\u540E\u7AEF\u6309\u5B57\u6BCD\u5E8F\u6700\u591A\u8FD4\u56DE '+l+' \u9879">\u663E\u793A\u524D '+l+" \u9879 / \u5171 "+r.fileExplorerTotal+" \u9879</div>"}e.innerHTML='<div class="file-tree" id="file-tree" data-cwd="'+p(t)+'">'+a.map(function(c){return js(c)}).join("")+"</div>"+o,Ns()}}}function js(e,t){t=t||0;var n=p(e.name),i=e.type==="dir",a=Hs(e),s=i?"\u25B8":"",o=i?"":" empty",l=e.gitStatus,c=Ad(l),d="";return!i&&typeof e.size=="number"&&(d='<span class="tree-meta" title="\u5927\u5C0F\uFF1A'+p(vn(e.size))+(e.mtime?`
|
|
6
|
+
\u4FEE\u6539\u65F6\u95F4\uFF1A`+p(Md(e.mtime)):"")+'">'+p(vn(e.size))+"</span>"),'<div class="tree-item" data-path="'+p(e.path)+'" data-type="'+p(e.type)+'" data-name="'+p(e.name)+'" tabindex="0"><span class="tree-toggle'+o+'">'+s+'</span><span class="tree-icon">'+a+'</span><span class="tree-name">'+n+"</span>"+d+(c?'<span class="git-status-badge '+c.class+'" title="'+c.title+'">'+c.text+"</span>":"")+"</div>"}function Ad(e){return e?e.staged==="added"?{text:"A",class:"git-added",title:"\u5DF2\u6682\u5B58\uFF08\u65B0\u589E\uFF09"}:e.staged==="modified"?{text:"M",class:"git-modified",title:"\u5DF2\u6682\u5B58\uFF08\u4FEE\u6539\uFF09"}:e.staged==="deleted"?{text:"D",class:"git-deleted",title:"\u5DF2\u6682\u5B58\uFF08\u5220\u9664\uFF09"}:e.staged==="renamed"?{text:"R",class:"git-renamed",title:"\u5DF2\u6682\u5B58\uFF08\u91CD\u547D\u540D\uFF09"}:e.unstaged==="modified"?{text:"M",class:"git-unstaged",title:"\u672A\u6682\u5B58\uFF08\u4FEE\u6539\uFF09"}:e.unstaged==="deleted"?{text:"D",class:"git-unstaged-deleted",title:"\u672A\u6682\u5B58\uFF08\u5220\u9664\uFF09"}:e.untracked?{text:"?",class:"git-untracked",title:"\u672A\u8DDF\u8E2A"}:null:null}function Ns(){var e=document.getElementById("file-tree");if(e){e.querySelectorAll(".tree-item[data-type='dir']").forEach(function(i){i.addEventListener("click",function(a){qd(i)})}),e.querySelectorAll(".tree-item[data-type='file']").forEach(function(i){var a=function(){$i(i.dataset.path)};i.addEventListener("click",a),i.addEventListener("dblclick",a)});var t=null,n=!1;e.querySelectorAll(".tree-item").forEach(function(i){i.addEventListener("contextmenu",function(a){a.preventDefault(),Rs(a.clientX,a.clientY,i)}),i.addEventListener("touchstart",function(a){n=!1,t=setTimeout(function(){n=!0;var s=a.touches&&a.touches[0];Rs(s?s.clientX:0,s?s.clientY:0,i)},500)},{passive:!0}),i.addEventListener("touchend",function(){t&&(clearTimeout(t),t=null)}),i.addEventListener("touchmove",function(){t&&(clearTimeout(t),t=null)})})}}function qd(e){var t=e.dataset.path,n=e.querySelector(".tree-toggle"),i=e.nextElementSibling;if(i&&i.classList.contains("tree-children")){var a=i.classList.contains("open");i.classList.toggle("open"),n&&n.classList.toggle("open",!a);var s=e.querySelector(".tree-icon");s&&(s.textContent=a?"\u{1F4C1}":"\u{1F4C2}");return}n&&n.classList.add("open");var o=e.querySelector(".tree-icon");o&&(o.textContent="\u{1F4C2}");var l="/api/directory?q="+encodeURIComponent(t)+"&gitStatus=true";fetch(l,{credentials:"same-origin"}).then(function(c){return c.json()}).then(function(c){var d;Array.isArray(c)?d=c:d=c&&c.items||[];var u=document.createElement("div");u.className="tree-children open",!d||d.length===0?u.innerHTML='<div class="tree-item" style="color:var(--text-muted);cursor:default;"><span class="tree-toggle empty">\u25B8</span><span class="tree-name">\uFF08\u7A7A\u76EE\u5F55\uFF09</span></div>':u.innerHTML=d.map(function(f){return js(f)}).join(""),e.parentNode.insertBefore(u,e.nextSibling),Ns()}).catch(function(){})}function Od(){var e=_s();if(e){var t=e.replace(/\/+$/,"").replace(/\/[^\/]+$/,"");t||(t="/"),t!==e&&Pt({cwd:t})}}function Qi(e){var t=document.getElementById("input-box");if(!t)return!1;var n=t.value||"",i=n&&!n.endsWith(" ")&&!n.endsWith(`
|
|
7
|
+
`)?" ":"";t.value=n+i+e,t.dispatchEvent(new Event("input",{bubbles:!0}));try{t.focus(),t.setSelectionRange(t.value.length,t.value.length)}catch{}return!0}function ei(e){if(navigator.clipboard&&navigator.clipboard.writeText)return navigator.clipboard.writeText(e).then(function(){return!0}).catch(function(){return t()});return Promise.resolve(t());function t(){try{var n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.left="-9999px",document.body.appendChild(n),n.select();var i=document.execCommand("copy");return document.body.removeChild(n),i}catch{return!1}}}function Ct(e){if(typeof window.showToast=="function"){window.showToast(e);return}var t=document.createElement("div");t.className="wand-mini-toast",t.textContent=e,document.body.appendChild(t),setTimeout(function(){t.classList.add("show")},10),setTimeout(function(){t.classList.remove("show"),setTimeout(function(){t.remove()},220)},1600)}function Un(){var e=document.getElementById("file-context-menu");e&&e.remove(),document.removeEventListener("click",Un,!0),document.removeEventListener("scroll",Un,!0)}function Rs(e,t,n){Un();var i=n.dataset.path||"",a=n.dataset.type||"file",s=r.fileExplorerCwd||"",o=i;s&&i.indexOf(s)===0&&(o=i.slice(s.length).replace(/^\/+/,"")||".");var l=document.createElement("div");l.id="file-context-menu",l.className="file-context-menu";var c=[];a==="file"?c.push({label:"\u6253\u5F00\u9884\u89C8",icon:"\u{1F441}",run:function(){$i(i)}}):c.push({label:"\u8FDB\u5165\u6B64\u76EE\u5F55",icon:"\u{1F4C2}",run:function(){Pt({cwd:i})}}),c.push({label:"\u590D\u5236\u5B8C\u6574\u8DEF\u5F84",icon:"\u{1F4CB}",run:function(){ei(i).then(function(){Ct("\u5DF2\u590D\u5236\u8DEF\u5F84")})}}),o&&o!==i&&c.push({label:"\u590D\u5236\u76F8\u5BF9\u8DEF\u5F84",icon:"\u{1F4CB}",run:function(){ei(o).then(function(){Ct("\u5DF2\u590D\u5236\u76F8\u5BF9\u8DEF\u5F84")})}}),c.push({label:"\u7C98\u8D34\u8DEF\u5F84\u5230\u8F93\u5165\u6846",icon:"\u270F\uFE0F",run:function(){Qi(i)&&Ct("\u5DF2\u7C98\u8D34\u5230\u8F93\u5165\u6846")}}),a==="file"&&c.push({label:"\u4E0B\u8F7D\u6587\u4EF6",icon:"\u2B07",run:function(){var y=document.createElement("a");y.href="/api/file-raw?download=1&path="+encodeURIComponent(i),y.rel="noopener",document.body.appendChild(y),y.click(),y.remove()}}),l.innerHTML=c.map(function(y,g){return'<button type="button" class="file-context-menu-item" data-idx="'+g+'"><span class="ctx-icon">'+y.icon+'</span><span class="ctx-label">'+p(y.label)+"</span></button>"}).join(""),document.body.appendChild(l);var d=window.innerWidth,u=window.innerHeight,f=l.getBoundingClientRect(),v=Math.min(e,d-f.width-8),m=Math.min(t,u-f.height-8);l.style.left=Math.max(8,v)+"px",l.style.top=Math.max(8,m)+"px",l.querySelectorAll(".file-context-menu-item").forEach(function(y){y.addEventListener("click",function(g){g.stopPropagation();var b=parseInt(y.dataset.idx,10);Un(),c[b]&&c[b].run()})}),setTimeout(function(){document.addEventListener("click",Un,!0),document.addEventListener("scroll",Un,!0)},0)}var P=null;function $i(e){var t=P&&P.overlay;if(t){P.path=e,P.editing=!1,P.dirty=!1;var o=t.querySelector(".file-preview-title");o&&(o.innerHTML='<span class="file-preview-icon">\u{1F4C4}</span><div class="file-preview-name-block"><div class="file-preview-name-row"><span class="file-preview-filename">\u52A0\u8F7D\u4E2D\u2026</span></div><span class="file-preview-path" title=""></span></div>');var l=t.querySelector(".file-preview-toolbar");l&&(l.innerHTML="");var c=t.querySelector(".file-preview-path");c&&(c.textContent="",c.title="");var d=t.querySelector(".file-preview-body");d&&(d.innerHTML='<div class="file-preview-loading">\u52A0\u8F7D\u9884\u89C8\u2026</div>')}else{t=document.createElement("div"),t.className="file-preview-overlay",t.innerHTML='<div class="file-preview-modal" tabindex="-1"><div class="file-preview-header"><div class="file-preview-title"><span class="file-preview-icon">\u{1F4C4}</span><div class="file-preview-name-block"><div class="file-preview-name-row"><span class="file-preview-filename">\u52A0\u8F7D\u4E2D\u2026</span></div><span class="file-preview-path" title=""></span></div></div><div class="file-preview-toolbar"></div><button class="file-preview-close" title="\u5173\u95ED (Esc)" aria-label="\u5173\u95ED">'+Ae("x",{size:18})+'</button></div><div class="file-preview-body"><div class="file-preview-loading">\u52A0\u8F7D\u9884\u89C8\u2026</div></div></div>',document.body.appendChild(t);var n=t.querySelector(".file-preview-close"),i=function(){if(P&&P.dirty&&typeof yn=="function"){yn({type:"warning",title:"\u653E\u5F03\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF1F",message:"\u5F53\u524D\u6587\u4EF6\u6709\u672A\u4FDD\u5B58\u7684\u6539\u52A8\uFF0C\u5173\u95ED\u540E\u4F1A\u4E22\u5931\u3002",buttons:[{label:"\u7EE7\u7EED\u7F16\u8F91",value:!1,kind:"ghost"},{label:"\u653E\u5F03\u4FEE\u6539",value:!0,kind:"danger",autofocus:!0}],cancelValue:!1}).then(function(f){f&&a()});return}a()},a=function(){t.remove(),document.removeEventListener("keydown",s),P=null};n.addEventListener("click",i),t.addEventListener("click",function(f){f.target===t&&i()});var s=function(f){if((f.key==="s"||f.key==="S")&&(f.ctrlKey||f.metaKey)&&P&&P.editing){f.preventDefault(),Ks();return}if(f.key==="Escape"){if(P&&P.editing){f.preventDefault(),Vs();return}i();return}P&&(f.target&&(f.target.tagName==="INPUT"||f.target.tagName==="TEXTAREA")||P.editing||(f.key==="ArrowLeft"?(f.preventDefault(),Fs(-1)):f.key==="ArrowRight"&&(f.preventDefault(),Fs(1))))};document.addEventListener("keydown",s),P={overlay:t,close:i,path:e,data:null,editing:!1,dirty:!1}}var u=t.querySelector(".file-preview-path");u&&(u.textContent=e,u.title=e),fetch("/api/file-preview?path="+encodeURIComponent(e),{credentials:"same-origin"}).then(function(f){return f.json().then(function(v){return{ok:f.ok,status:f.status,data:v}})}).then(function(f){var v=t.querySelector(".file-preview-body");if(!f.ok||f.data&&f.data.error){var m=f.data&&f.data.error||"\u52A0\u8F7D\u5931\u8D25";f.status===413&&f.data&&f.data.size&&(m+="\uFF08\u6587\u4EF6\u5927\u5C0F\uFF1A"+vn(f.data.size)+"\uFF09"),v.innerHTML='<div class="file-preview-error"><span class="preview-error-icon">\u26A0</span><span>'+p(m)+"</span></div>",f.status===413&&Xi(t,{kind:"binary",path:e,name:e.split("/").pop()||e,ext:"",size:f.data&&f.data.size||0});return}P.data=f.data,Ws(t,f.data)}).catch(function(){var f=t.querySelector(".file-preview-body");f.innerHTML='<div class="file-preview-error"><span class="preview-error-icon">\u26A0</span><span>\u52A0\u8F7D\u9884\u89C8\u5931\u8D25</span></div>'})}function Fs(e){if(P){var t=(r.allFiles||[]).filter(function(l){return l.type==="file"});if(t.length){for(var n=P.path,i=-1,a=0;a<t.length;a++)if(t[a].path===n){i=a;break}if(!(i<0)){var s=(i+e+t.length)%t.length,o=t[s].path;o&&o!==n&&$i(o)}}}}function Ws(e,t){var n=e.querySelector(".file-preview-filename");n&&(n.textContent=t.name);var i=e.querySelector(".file-preview-icon");i&&(i.textContent=Hs({name:t.name,type:"file"}));var a=e.querySelector(".file-preview-title"),s=e.querySelector(".file-preview-lang");s&&s.remove();var o=document.createElement("span");o.className="file-preview-lang";var l={image:"\u56FE\u7247",pdf:"PDF",video:"\u89C6\u9891",audio:"\u97F3\u9891",binary:"\u4E8C\u8FDB\u5236"};t.kind==="text"?o.textContent=t.lang||(t.ext||"").replace(".","")||"text":o.textContent=l[t.kind]||(t.ext||"").replace(".","")||t.kind,a&&a.appendChild(o),Xi(e,t);var c=e.querySelector(".file-preview-body");c.innerHTML="",c.classList.remove("kind-text","kind-image","kind-pdf","kind-video","kind-audio","kind-binary"),c.classList.add("kind-"+(t.kind||"text")),t.kind==="image"?Hd(c,t):t.kind==="pdf"?_d(c,t):t.kind==="video"?Dd(c,t):t.kind==="audio"?jd(c,t):t.kind==="binary"?Nd(c,t):t.lang==="markdown"||/\.(md|markdown|mdx)$/i.test(t.name||"")?c.innerHTML='<div class="markdown-preview">'+zd(t.content||"")+"</div>":Pd(c,t)}function Pd(e,t){var n=Ys(t.content||"",t.lang),i=n.split(`
|
|
8
8
|
`),a=i.map(function(s,o){return o+1});e.innerHTML='<div class="code-preview-wrapper"><div class="code-preview-lines">'+a.join(`
|
|
9
9
|
`)+'</div><div class="code-preview-content"><pre>'+i.join(`
|
|
10
|
-
`)+"</pre></div></div>"}function _c(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="image-preview-wrapper"><img class="image-preview-img" src="'+n+'" alt="'+p(t.name)+'" /></div>';var i=e.querySelector(".image-preview-img");if(i){var a=!1;i.addEventListener("click",function(){a=!a,i.classList.toggle("zoomed",a)})}}function Dc(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<iframe class="pdf-preview-frame" src="'+n+'" title="'+p(t.name)+'"></iframe>'}function jc(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="media-preview-wrapper"><video class="media-preview-video" controls preload="metadata" src="'+n+'">\u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 video \u6807\u7B7E\u3002</video><div class="media-preview-meta">'+p(vn(t.size))+"</div></div>"}function Nc(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="media-preview-wrapper audio"><div class="media-preview-icon">\u{1F3B5}</div><div class="media-preview-name">'+p(t.name)+'</div><audio class="media-preview-audio" controls preload="metadata" src="'+n+'">\u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 audio \u6807\u7B7E\u3002</audio><div class="media-preview-meta">'+p(vn(t.size))+"</div></div>"}function Rc(e,t){var n="/api/file-raw?download=1&path="+encodeURIComponent(t.path);e.innerHTML='<div class="binary-preview-card"><div class="binary-preview-icon">\u{1F4E6}</div><div class="binary-preview-name">'+p(t.name)+'</div><div class="binary-preview-meta"><span>'+p((t.ext||"").replace(/^\./,"")||"\u672A\u77E5\u683C\u5F0F")+"</span><span>\xB7</span><span>"+p(vn(t.size))+'</span></div><div class="binary-preview-path" title="'+p(t.path)+'">'+p(t.path)+'</div><div class="binary-preview-actions"><a class="binary-preview-btn" href="'+n+'" download="'+p(t.name)+'">\u4E0B\u8F7D\u6587\u4EF6</a><button class="binary-preview-btn" type="button" data-action="view-cat">\u5728\u7EC8\u7AEF\u4E2D\u67E5\u770B</button></div></div>';var i=e.querySelector('[data-action="view-cat"]');i&&i.addEventListener("click",function(){Qi('cat -- "'+t.path+'"')&&Ct("\u547D\u4EE4\u5DF2\u7C98\u8D34\u5230\u8F93\u5165\u6846")})}function Xi(e,t){var n=e.querySelector(".file-preview-toolbar");if(n){if(n.innerHTML="",n.classList.remove("editing"),P&&P.editing){n.classList.add("editing"),br(e,t);return}var i=[];t.kind==="text"&&i.push({label:"\u7F16\u8F91\u6587\u4EF6 (E)",icon:Ae("edit"),primary:!0,action:function(){Fc()}}),i.push({label:"\u590D\u5236\u8DEF\u5F84",icon:Ae("clipboard"),action:function(){ei(t.path).then(function(){Ct("\u5DF2\u590D\u5236\u8DEF\u5F84")})}}),i.push({label:"\u7C98\u8D34\u5230\u8F93\u5165\u6846",icon:Ae("send-to-input"),action:function(){Qi(t.path)&&Ct("\u5DF2\u7C98\u8D34\u5230\u8F93\u5165\u6846")}}),i.push({label:"\u4E0B\u8F7D",icon:Ae("download"),action:function(){var a=document.createElement("a");a.href="/api/file-raw?download=1&path="+encodeURIComponent(t.path),a.download=t.name||"",document.body.appendChild(a),a.click(),a.remove()}}),t.kind==="text"&&(i.push({label:"\u590D\u5236\u5168\u90E8\u5185\u5BB9",icon:Ae("copy"),action:function(){ei(t.content||"").then(function(){Ct("\u5DF2\u590D\u5236\u5185\u5BB9")})}}),i.push({label:"\u5207\u6362\u81EA\u52A8\u6362\u884C",icon:Ae("wrap-text"),toggleClass:"toolbar-active",getInitial:function(){var a=e.querySelector(".code-preview-content pre");return a&&a.classList.contains("wrap")},action:function(a){var s=e.querySelector(".code-preview-content pre");s&&(s.classList.toggle("wrap"),a.classList.toggle("toolbar-active",s.classList.contains("wrap")))}}),i.push({kind:"group",className:"toolbar-group-fontsize",children:[{label:"\u7F29\u5C0F\u5B57\u53F7",icon:Ae("minus"),action:function(){Js(e,-1)}},{kind:"label",icon:Ae("type"),label:"\u5B57\u53F7"},{label:"\u653E\u5927\u5B57\u53F7",icon:Ae("plus"),action:function(){Js(e,1)}}]})),zs(n,i,e)}}function zs(e,t,n){t.forEach(function(i){if(i.kind==="group"){var a=document.createElement("div");a.className="file-preview-toolbar-group"+(i.className?" "+i.className:""),i.children.forEach(function(s){if(s.kind==="label"){var o=document.createElement("span");o.className="file-preview-toolbar-grouplabel",o.title=s.label||"",o.innerHTML=s.icon||"",a.appendChild(o);return}a.appendChild(Us(s))}),e.appendChild(a);return}e.appendChild(Us(i))})}function Us(e){var t=document.createElement("button");return t.type="button",t.className="file-preview-toolbar-btn",e.primary&&t.classList.add("primary"),e.danger&&t.classList.add("danger"),t.title=e.label,t.setAttribute("aria-label",e.label),t.innerHTML='<span class="toolbar-icon">'+(e.icon||"")+"</span>"+(e.text?'<span class="toolbar-text">'+p(e.text)+"</span>":""),e.getInitial&&e.getInitial()&&t.classList.add("toolbar-active"),t.addEventListener("click",function(n){n.stopPropagation(),typeof e.action=="function"&&e.action(t)}),t}function br(e,t){var n=e.querySelector(".file-preview-toolbar");if(n){n.innerHTML="";var i=P&&P.saving,a=[{label:"\u4FDD\u5B58 (Ctrl+S)",icon:Ae("save"),text:"\u4FDD\u5B58",primary:!0,action:function(){Ks()}},{label:"\u64A4\u9500\u6539\u52A8",icon:Ae("rotate-ccw"),action:function(){Wc()}},{label:"\u9000\u51FA\u7F16\u8F91 (Esc)",icon:Ae("x"),action:function(){Vs()}}];zs(n,a,e),i&&n.querySelectorAll(".file-preview-toolbar-btn").forEach(function(s){s.disabled=!0})}}function Fc(){if(!(!P||!P.data)){var e=P.data;if(e.kind==="text"){P.editing=!0,P.dirty=!1,P.originalContent=e.content||"";var t=P.overlay,n=t.querySelector(".file-preview-body");if(n){n.classList.add("editing"),n.innerHTML='<div class="code-editor-wrapper"><textarea class="code-editor-textarea" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off" wrap="off"></textarea></div>';var i=n.querySelector(".code-editor-textarea");i&&(i.value=e.content||"",i.addEventListener("input",function(){var a=i.value!==(P.originalContent||"");a!==P.dirty&&(P.dirty=a,yr())}),i.addEventListener("keydown",function(a){if(a.key==="Tab"){a.preventDefault();var s=i.selectionStart,o=i.selectionEnd,l=" ";i.value=i.value.slice(0,s)+l+i.value.slice(o),i.selectionStart=i.selectionEnd=s+l.length,i.dispatchEvent(new Event("input"))}}),setTimeout(function(){i.focus(),i.setSelectionRange(0,0),i.scrollTop=0},30)),Xi(t,e),yr()}}}}function Vs(){if(!(!P||!P.editing)){var e=function(){P.editing=!1,P.dirty=!1;var t=P.overlay,n=t.querySelector(".file-preview-body");n&&n.classList.remove("editing"),Ws(t,P.data),yr()};if(P.dirty&&typeof yn=="function"){yn({type:"warning",title:"\u653E\u5F03\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF1F",message:"\u5F53\u524D\u6587\u4EF6\u6709\u672A\u4FDD\u5B58\u7684\u6539\u52A8\uFF0C\u9000\u51FA\u7F16\u8F91\u540E\u4F1A\u4E22\u5931\u3002",buttons:[{label:"\u7EE7\u7EED\u7F16\u8F91",value:!1,kind:"ghost"},{label:"\u653E\u5F03\u4FEE\u6539",value:!0,kind:"danger",autofocus:!0}],cancelValue:!1}).then(function(t){t&&e()});return}e()}}function Wc(){if(!(!P||!P.editing)){var e=P.overlay,t=e.querySelector(".code-editor-textarea");t&&(t.value=P.originalContent||"",P.dirty=!1,yr(),t.focus())}}function Ks(){if(!(!P||!P.editing)&&!P.saving){var e=P.overlay,t=e.querySelector(".code-editor-textarea");if(t){var n=t.value;if(n===(P.originalContent||"")){Ct("\u6CA1\u6709\u6539\u52A8");return}P.saving=!0,br(e,P.data),fetch("/api/file-write",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:P.path,content:n})}).then(function(i){return i.json().then(function(a){return{ok:i.ok,status:i.status,data:a}})}).then(function(i){if(P.saving=!1,!i.ok||i.data&&i.data.error){var a=i.data&&i.data.error||"\u4FDD\u5B58\u5931\u8D25 ("+i.status+")";Ct(a),br(e,P.data);return}if(P.data.content=n,P.data.size=i.data&&i.data.size||n.length,P.originalContent=n,P.dirty=!1,Ct("\u5DF2\u4FDD\u5B58"),yr(),br(e,P.data),typeof Pt=="function")try{Pt()}catch{}}).catch(function(i){P.saving=!1,Ct("\u4FDD\u5B58\u5931\u8D25\uFF1A"+(i&&i.message?i.message:"\u7F51\u7EDC\u9519\u8BEF")),br(e,P.data)})}}}function yr(){if(P){var e=P.overlay;if(e){var t=e.querySelector(".file-preview-name-row");if(t){var n=t.querySelector(".file-preview-dirty");if(P.dirty){if(!n){var i=document.createElement("span");i.className="file-preview-dirty",i.title="\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539",i.textContent="\u25CF \u672A\u4FDD\u5B58",t.appendChild(i)}}else n&&n.remove()}}}}function Js(e,t){var n=e.querySelector(".code-preview-content pre"),i=e.querySelector(".code-preview-lines");if(n){var a=parseFloat(getComputedStyle(n).fontSize)||13,s=Math.max(10,Math.min(22,a+t));n.style.fontSize=s+"px",i&&(i.style.fontSize=s+"px")}}function Ys(e,t){var n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),i=zc();if(!i)return n;var a=[];for(var s in i){var o=i[s];o&&o.pattern&&a.push({pattern:o.pattern,cls:o.cls,priority:o.priority||5})}a.sort(function(c,u){return u.priority-c.priority});var l=a.map(function(c){return"("+c.pattern.source+")"}),d=new RegExp(l.join("|"),"gm");return n.replace(d,function(c){for(var u=0;u<a.length;u++){var f=a[u],v=new RegExp("^"+f.pattern.source+"$","gm");if(v.test(c))return'<span class="'+f.cls+'">'+c+"</span>"}return c})}function zc(){return{comment:{pattern:/\/\/.*|#[^\n]*/y,cls:"syntax-comment",priority:1},string:{pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`/y,cls:"syntax-string",priority:2},keyword:{pattern:/\b(?:async|await|break|case|catch|class|const|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|namespace|new|null|of|override|private|protected|public|readonly|return|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|yield|abstract|as|base|bool|byte|char|decimal|double|event|explicit|extern|false|fixed|float|foreach|goto|implicit|in|int|internal|is|lock|long|object|operator|out|params|partial|readonly|ref|sbyte|sealed|short|sizeof|stackalloc|string|struct|switch|throw|true|try|uint|ulong|unchecked|unsafe|ushort|using|virtual|volatile|where|while|with|yield|def|elif|else|except|exec|finally|for|from|global|if|import|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield|True|False|None|and|in|is|lambda|not|or|fn|pub|use|mod|impl|trait|struct|enum|match|loop|while|for|if|else|return|self|super|crate|where|async|await|move|ref|mut|static|const|unsafe|extern|use|as|impl|struct|enum|type|fn|let|loop|if|else|match|return|self|Self|mod|pub|crate|macro|derive|where|async|await|dyn|self|package|func|go|return|defer|go|if|else|switch|case|default|for|range|select|break|continue|fallthrough|const|struct|enum|type|interface|map|chan|var|nil|true|false|iota|len|cap|append|make|new|panic|recover|select|else|if|elif|end|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while|end|and|begin|do|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/y,cls:"syntax-keyword",priority:3},number:{pattern:/\b(?:0x[\da-fA-F]+|0b[01]+|0o[0-7]+|\d+\.?\d*(?:e[+-]?\d+)?)\b/y,cls:"syntax-number",priority:2},function:{pattern:/\b[A-Z][a-zA-Z0-9]*[a-z]\w*(?=\s*\()/y,cls:"syntax-function",priority:4},type:{pattern:/\b(?:string|number|boolean|void|any|unknown|never|object|symbol|bigint|Array|Object|String|Number|Boolean|Map|Set|WeakMap|WeakSet|Promise|Error|Type|Interface|Enum|Class|Struct|Impl|Trait|fn|fnc|func|function|def|proc|fun|pub|static|const|let|var|int|float|double|bool|char|byte|string|u8|u16|u32|u64|i8|i16|i32|i64|f32|f64|usize|isize|str|Vec|HashMap|Option|Result|Box|Rc|Arc|Cell|RefCell)\b/y,cls:"syntax-type",priority:4},operator:{pattern:/[+\-*/%=<>!&|^~?:]+|\.\.\.?/y,cls:"syntax-operator",priority:5},punctuation:{pattern:/[{}[\]();,\.]/y,cls:"syntax-punctuation",priority:6}}}function Uc(e){if(!e)return"";var t=p(e);t=t.replace(/```(\w*)\n([\s\S]*?)```/g,function(i,a,s){var o=Ys(s.trim(),a),l=o.replace(/_/g,"_").replace(/\*/g,"*");return'<pre><code class="language-'+a+'">'+l+"</code></pre>"}),t=t.replace(/`([^`]+)`/g,function(i,a){return"<code>"+a.replace(/_/g,"_").replace(/\*/g,"*")+"</code>"}),t=t.replace(/^######\s+(.*)$/gm,"<h6>$1</h6>"),t=t.replace(/^#####\s+(.*)$/gm,"<h5>$1</h5>"),t=t.replace(/^####\s+(.*)$/gm,"<h4>$1</h4>"),t=t.replace(/^###\s+(.*)$/gm,"<h3>$1</h3>"),t=t.replace(/^##\s+(.*)$/gm,"<h2>$1</h2>"),t=t.replace(/^#\s+(.*)$/gm,"<h1>$1</h1>"),t=t.replace(/\*\*\*(.+?)\*\*\*/g,"<strong><em>$1</em></strong>"),t=t.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),t=t.replace(/\*(.+?)\*/g,"<em>$1</em>"),t=t.replace(/(^|[^\w])___(\S(?:[^\n]*?\S)?)___(?!\w)/g,"$1<strong><em>$2</em></strong>"),t=t.replace(/(^|[^\w])__(\S(?:[^\n]*?\S)?)__(?!\w)/g,"$1<strong>$2</strong>"),t=t.replace(/(^|[^\w])_(\S(?:[^\n_]*?\S)?)_(?!\w)/g,"$1<em>$2</em>"),t=t.replace(/~~(.+?)~~/g,"<del>$1</del>"),t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener">$1</a>'),t=t.replace(/!\[([^\]]*)\]\(([^)]+)\)/g,'<img src="$2" alt="$1">'),t=t.replace(/^>\s+(.*)$/gm,"<blockquote>$1</blockquote>"),t=t.replace(/^---+$/gm,"<hr>"),t=t.replace(/^\*\*\*+$/gm,"<hr>"),t=t.replace(/^[\-\*]\s+(.*)$/gm,"<li>$1</li>"),t=t.replace(/(<li>.*<\/li>\n?)+/g,"<ul>$&</ul>"),t=t.replace(/^\d+\.\s+(.*)$/gm,"<li>$1</li>"),t=td(t);var n=t.split(/\n{2,}/);return t=n.map(function(i){return i=i.trim(),i?/^<(h[1-6]|ul|ol|li|blockquote|pre|table|hr|div)/.test(i)?i:"<p>"+i.replace(/\n/g,"<br>")+"</p>":""}).join(`
|
|
11
|
-
`),t}function
|
|
12
|
-
`)[0].trim();return l.slice(0,100)}}}return""}function Zi(e){var t=e.id===r.selectedId?" active":"",n=r.sessionsManageMode&&r.selectedSessionIds[e.id]?" selected":"",i=
|
|
13
|
-
`))+'"':"";return'<span class="session-kind-badge worktree"'+n+">Worktree</span>"+
|
|
14
|
-
`),
|
|
10
|
+
`)+"</pre></div></div>"}function Hd(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="image-preview-wrapper"><img class="image-preview-img" src="'+n+'" alt="'+p(t.name)+'" /></div>';var i=e.querySelector(".image-preview-img");if(i){var a=!1;i.addEventListener("click",function(){a=!a,i.classList.toggle("zoomed",a)})}}function _d(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<iframe class="pdf-preview-frame" src="'+n+'" title="'+p(t.name)+'"></iframe>'}function Dd(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="media-preview-wrapper"><video class="media-preview-video" controls preload="metadata" src="'+n+'">\u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 video \u6807\u7B7E\u3002</video><div class="media-preview-meta">'+p(vn(t.size))+"</div></div>"}function jd(e,t){var n="/api/file-raw?path="+encodeURIComponent(t.path);e.innerHTML='<div class="media-preview-wrapper audio"><div class="media-preview-icon">\u{1F3B5}</div><div class="media-preview-name">'+p(t.name)+'</div><audio class="media-preview-audio" controls preload="metadata" src="'+n+'">\u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 audio \u6807\u7B7E\u3002</audio><div class="media-preview-meta">'+p(vn(t.size))+"</div></div>"}function Nd(e,t){var n="/api/file-raw?download=1&path="+encodeURIComponent(t.path);e.innerHTML='<div class="binary-preview-card"><div class="binary-preview-icon">\u{1F4E6}</div><div class="binary-preview-name">'+p(t.name)+'</div><div class="binary-preview-meta"><span>'+p((t.ext||"").replace(/^\./,"")||"\u672A\u77E5\u683C\u5F0F")+"</span><span>\xB7</span><span>"+p(vn(t.size))+'</span></div><div class="binary-preview-path" title="'+p(t.path)+'">'+p(t.path)+'</div><div class="binary-preview-actions"><a class="binary-preview-btn" href="'+n+'" download="'+p(t.name)+'">\u4E0B\u8F7D\u6587\u4EF6</a><button class="binary-preview-btn" type="button" data-action="view-cat">\u5728\u7EC8\u7AEF\u4E2D\u67E5\u770B</button></div></div>';var i=e.querySelector('[data-action="view-cat"]');i&&i.addEventListener("click",function(){Qi('cat -- "'+t.path+'"')&&Ct("\u547D\u4EE4\u5DF2\u7C98\u8D34\u5230\u8F93\u5165\u6846")})}function Xi(e,t){var n=e.querySelector(".file-preview-toolbar");if(n){if(n.innerHTML="",n.classList.remove("editing"),P&&P.editing){n.classList.add("editing"),hr(e,t);return}var i=[];t.kind==="text"&&i.push({label:"\u7F16\u8F91\u6587\u4EF6 (E)",icon:Ae("edit"),primary:!0,action:function(){Rd()}}),i.push({label:"\u590D\u5236\u8DEF\u5F84",icon:Ae("clipboard"),action:function(){ei(t.path).then(function(){Ct("\u5DF2\u590D\u5236\u8DEF\u5F84")})}}),i.push({label:"\u7C98\u8D34\u5230\u8F93\u5165\u6846",icon:Ae("send-to-input"),action:function(){Qi(t.path)&&Ct("\u5DF2\u7C98\u8D34\u5230\u8F93\u5165\u6846")}}),i.push({label:"\u4E0B\u8F7D",icon:Ae("download"),action:function(){var a=document.createElement("a");a.href="/api/file-raw?download=1&path="+encodeURIComponent(t.path),a.download=t.name||"",document.body.appendChild(a),a.click(),a.remove()}}),t.kind==="text"&&(i.push({label:"\u590D\u5236\u5168\u90E8\u5185\u5BB9",icon:Ae("copy"),action:function(){ei(t.content||"").then(function(){Ct("\u5DF2\u590D\u5236\u5185\u5BB9")})}}),i.push({label:"\u5207\u6362\u81EA\u52A8\u6362\u884C",icon:Ae("wrap-text"),toggleClass:"toolbar-active",getInitial:function(){var a=e.querySelector(".code-preview-content pre");return a&&a.classList.contains("wrap")},action:function(a){var s=e.querySelector(".code-preview-content pre");s&&(s.classList.toggle("wrap"),a.classList.toggle("toolbar-active",s.classList.contains("wrap")))}}),i.push({kind:"group",className:"toolbar-group-fontsize",children:[{label:"\u7F29\u5C0F\u5B57\u53F7",icon:Ae("minus"),action:function(){Js(e,-1)}},{kind:"label",icon:Ae("type"),label:"\u5B57\u53F7"},{label:"\u653E\u5927\u5B57\u53F7",icon:Ae("plus"),action:function(){Js(e,1)}}]})),zs(n,i,e)}}function zs(e,t,n){t.forEach(function(i){if(i.kind==="group"){var a=document.createElement("div");a.className="file-preview-toolbar-group"+(i.className?" "+i.className:""),i.children.forEach(function(s){if(s.kind==="label"){var o=document.createElement("span");o.className="file-preview-toolbar-grouplabel",o.title=s.label||"",o.innerHTML=s.icon||"",a.appendChild(o);return}a.appendChild(Us(s))}),e.appendChild(a);return}e.appendChild(Us(i))})}function Us(e){var t=document.createElement("button");return t.type="button",t.className="file-preview-toolbar-btn",e.primary&&t.classList.add("primary"),e.danger&&t.classList.add("danger"),t.title=e.label,t.setAttribute("aria-label",e.label),t.innerHTML='<span class="toolbar-icon">'+(e.icon||"")+"</span>"+(e.text?'<span class="toolbar-text">'+p(e.text)+"</span>":""),e.getInitial&&e.getInitial()&&t.classList.add("toolbar-active"),t.addEventListener("click",function(n){n.stopPropagation(),typeof e.action=="function"&&e.action(t)}),t}function hr(e,t){var n=e.querySelector(".file-preview-toolbar");if(n){n.innerHTML="";var i=P&&P.saving,a=[{label:"\u4FDD\u5B58 (Ctrl+S)",icon:Ae("save"),text:"\u4FDD\u5B58",primary:!0,action:function(){Ks()}},{label:"\u64A4\u9500\u6539\u52A8",icon:Ae("rotate-ccw"),action:function(){Fd()}},{label:"\u9000\u51FA\u7F16\u8F91 (Esc)",icon:Ae("x"),action:function(){Vs()}}];zs(n,a,e),i&&n.querySelectorAll(".file-preview-toolbar-btn").forEach(function(s){s.disabled=!0})}}function Rd(){if(!(!P||!P.data)){var e=P.data;if(e.kind==="text"){P.editing=!0,P.dirty=!1,P.originalContent=e.content||"";var t=P.overlay,n=t.querySelector(".file-preview-body");if(n){n.classList.add("editing"),n.innerHTML='<div class="code-editor-wrapper"><textarea class="code-editor-textarea" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off" wrap="off"></textarea></div>';var i=n.querySelector(".code-editor-textarea");i&&(i.value=e.content||"",i.addEventListener("input",function(){var a=i.value!==(P.originalContent||"");a!==P.dirty&&(P.dirty=a,br())}),i.addEventListener("keydown",function(a){if(a.key==="Tab"){a.preventDefault();var s=i.selectionStart,o=i.selectionEnd,l=" ";i.value=i.value.slice(0,s)+l+i.value.slice(o),i.selectionStart=i.selectionEnd=s+l.length,i.dispatchEvent(new Event("input"))}}),setTimeout(function(){i.focus(),i.setSelectionRange(0,0),i.scrollTop=0},30)),Xi(t,e),br()}}}}function Vs(){if(!(!P||!P.editing)){var e=function(){P.editing=!1,P.dirty=!1;var t=P.overlay,n=t.querySelector(".file-preview-body");n&&n.classList.remove("editing"),Ws(t,P.data),br()};if(P.dirty&&typeof yn=="function"){yn({type:"warning",title:"\u653E\u5F03\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\uFF1F",message:"\u5F53\u524D\u6587\u4EF6\u6709\u672A\u4FDD\u5B58\u7684\u6539\u52A8\uFF0C\u9000\u51FA\u7F16\u8F91\u540E\u4F1A\u4E22\u5931\u3002",buttons:[{label:"\u7EE7\u7EED\u7F16\u8F91",value:!1,kind:"ghost"},{label:"\u653E\u5F03\u4FEE\u6539",value:!0,kind:"danger",autofocus:!0}],cancelValue:!1}).then(function(t){t&&e()});return}e()}}function Fd(){if(!(!P||!P.editing)){var e=P.overlay,t=e.querySelector(".code-editor-textarea");t&&(t.value=P.originalContent||"",P.dirty=!1,br(),t.focus())}}function Ks(){if(!(!P||!P.editing)&&!P.saving){var e=P.overlay,t=e.querySelector(".code-editor-textarea");if(t){var n=t.value;if(n===(P.originalContent||"")){Ct("\u6CA1\u6709\u6539\u52A8");return}P.saving=!0,hr(e,P.data),fetch("/api/file-write",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:P.path,content:n})}).then(function(i){return i.json().then(function(a){return{ok:i.ok,status:i.status,data:a}})}).then(function(i){if(P.saving=!1,!i.ok||i.data&&i.data.error){var a=i.data&&i.data.error||"\u4FDD\u5B58\u5931\u8D25 ("+i.status+")";Ct(a),hr(e,P.data);return}if(P.data.content=n,P.data.size=i.data&&i.data.size||n.length,P.originalContent=n,P.dirty=!1,Ct("\u5DF2\u4FDD\u5B58"),br(),hr(e,P.data),typeof Pt=="function")try{Pt()}catch{}}).catch(function(i){P.saving=!1,Ct("\u4FDD\u5B58\u5931\u8D25\uFF1A"+(i&&i.message?i.message:"\u7F51\u7EDC\u9519\u8BEF")),hr(e,P.data)})}}}function br(){if(P){var e=P.overlay;if(e){var t=e.querySelector(".file-preview-name-row");if(t){var n=t.querySelector(".file-preview-dirty");if(P.dirty){if(!n){var i=document.createElement("span");i.className="file-preview-dirty",i.title="\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539",i.textContent="\u25CF \u672A\u4FDD\u5B58",t.appendChild(i)}}else n&&n.remove()}}}}function Js(e,t){var n=e.querySelector(".code-preview-content pre"),i=e.querySelector(".code-preview-lines");if(n){var a=parseFloat(getComputedStyle(n).fontSize)||13,s=Math.max(10,Math.min(22,a+t));n.style.fontSize=s+"px",i&&(i.style.fontSize=s+"px")}}function Ys(e,t){var n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),i=Wd();if(!i)return n;var a=[];for(var s in i){var o=i[s];o&&o.pattern&&a.push({pattern:o.pattern,cls:o.cls,priority:o.priority||5})}a.sort(function(d,u){return u.priority-d.priority});var l=a.map(function(d){return"("+d.pattern.source+")"}),c=new RegExp(l.join("|"),"gm");return n.replace(c,function(d){for(var u=0;u<a.length;u++){var f=a[u],v=new RegExp("^"+f.pattern.source+"$","gm");if(v.test(d))return'<span class="'+f.cls+'">'+d+"</span>"}return d})}function Wd(){return{comment:{pattern:/\/\/.*|#[^\n]*/y,cls:"syntax-comment",priority:1},string:{pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`/y,cls:"syntax-string",priority:2},keyword:{pattern:/\b(?:async|await|break|case|catch|class|const|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|namespace|new|null|of|override|private|protected|public|readonly|return|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|yield|abstract|as|base|bool|byte|char|decimal|double|event|explicit|extern|false|fixed|float|foreach|goto|implicit|in|int|internal|is|lock|long|object|operator|out|params|partial|readonly|ref|sbyte|sealed|short|sizeof|stackalloc|string|struct|switch|throw|true|try|uint|ulong|unchecked|unsafe|ushort|using|virtual|volatile|where|while|with|yield|def|elif|else|except|exec|finally|for|from|global|if|import|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield|True|False|None|and|in|is|lambda|not|or|fn|pub|use|mod|impl|trait|struct|enum|match|loop|while|for|if|else|return|self|super|crate|where|async|await|move|ref|mut|static|const|unsafe|extern|use|as|impl|struct|enum|type|fn|let|loop|if|else|match|return|self|Self|mod|pub|crate|macro|derive|where|async|await|dyn|self|package|func|go|return|defer|go|if|else|switch|case|default|for|range|select|break|continue|fallthrough|const|struct|enum|type|interface|map|chan|var|nil|true|false|iota|len|cap|append|make|new|panic|recover|select|else|if|elif|end|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while|end|and|begin|do|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/y,cls:"syntax-keyword",priority:3},number:{pattern:/\b(?:0x[\da-fA-F]+|0b[01]+|0o[0-7]+|\d+\.?\d*(?:e[+-]?\d+)?)\b/y,cls:"syntax-number",priority:2},function:{pattern:/\b[A-Z][a-zA-Z0-9]*[a-z]\w*(?=\s*\()/y,cls:"syntax-function",priority:4},type:{pattern:/\b(?:string|number|boolean|void|any|unknown|never|object|symbol|bigint|Array|Object|String|Number|Boolean|Map|Set|WeakMap|WeakSet|Promise|Error|Type|Interface|Enum|Class|Struct|Impl|Trait|fn|fnc|func|function|def|proc|fun|pub|static|const|let|var|int|float|double|bool|char|byte|string|u8|u16|u32|u64|i8|i16|i32|i64|f32|f64|usize|isize|str|Vec|HashMap|Option|Result|Box|Rc|Arc|Cell|RefCell)\b/y,cls:"syntax-type",priority:4},operator:{pattern:/[+\-*/%=<>!&|^~?:]+|\.\.\.?/y,cls:"syntax-operator",priority:5},punctuation:{pattern:/[{}[\]();,\.]/y,cls:"syntax-punctuation",priority:6}}}function zd(e){if(!e)return"";var t=p(e);t=t.replace(/```(\w*)\n([\s\S]*?)```/g,function(i,a,s){var o=Ys(s.trim(),a),l=o.replace(/_/g,"_").replace(/\*/g,"*");return'<pre><code class="language-'+a+'">'+l+"</code></pre>"}),t=t.replace(/`([^`]+)`/g,function(i,a){return"<code>"+a.replace(/_/g,"_").replace(/\*/g,"*")+"</code>"}),t=t.replace(/^######\s+(.*)$/gm,"<h6>$1</h6>"),t=t.replace(/^#####\s+(.*)$/gm,"<h5>$1</h5>"),t=t.replace(/^####\s+(.*)$/gm,"<h4>$1</h4>"),t=t.replace(/^###\s+(.*)$/gm,"<h3>$1</h3>"),t=t.replace(/^##\s+(.*)$/gm,"<h2>$1</h2>"),t=t.replace(/^#\s+(.*)$/gm,"<h1>$1</h1>"),t=t.replace(/\*\*\*(.+?)\*\*\*/g,"<strong><em>$1</em></strong>"),t=t.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),t=t.replace(/\*(.+?)\*/g,"<em>$1</em>"),t=t.replace(/(^|[^\w])___(\S(?:[^\n]*?\S)?)___(?!\w)/g,"$1<strong><em>$2</em></strong>"),t=t.replace(/(^|[^\w])__(\S(?:[^\n]*?\S)?)__(?!\w)/g,"$1<strong>$2</strong>"),t=t.replace(/(^|[^\w])_(\S(?:[^\n_]*?\S)?)_(?!\w)/g,"$1<em>$2</em>"),t=t.replace(/~~(.+?)~~/g,"<del>$1</del>"),t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener">$1</a>'),t=t.replace(/!\[([^\]]*)\]\(([^)]+)\)/g,'<img src="$2" alt="$1">'),t=t.replace(/^>\s+(.*)$/gm,"<blockquote>$1</blockquote>"),t=t.replace(/^---+$/gm,"<hr>"),t=t.replace(/^\*\*\*+$/gm,"<hr>"),t=t.replace(/^[\-\*]\s+(.*)$/gm,"<li>$1</li>"),t=t.replace(/(<li>.*<\/li>\n?)+/g,"<ul>$&</ul>"),t=t.replace(/^\d+\.\s+(.*)$/gm,"<li>$1</li>"),t=ec(t);var n=t.split(/\n{2,}/);return t=n.map(function(i){return i=i.trim(),i?/^<(h[1-6]|ul|ol|li|blockquote|pre|table|hr|div)/.test(i)?i:"<p>"+i.replace(/\n/g,"<br>")+"</p>":""}).join(`
|
|
11
|
+
`),t}function qm(e){var t=Ge();return e.selectedId?"":'<div class="folder-picker-compact" id="folder-picker-container"><div class="folder-picker-compact-row"><span class="folder-picker-compact-icon">'+J("folder",{size:13,strokeWidth:1.7})+'</span><input type="text" id="folder-picker-input" class="folder-picker-compact-input" value="'+p(t)+'" placeholder="\u5DE5\u4F5C\u76EE\u5F55" autocomplete="off" /><button type="button" id="folder-picker-toggle" class="folder-picker-toggle" title="\u9009\u62E9\u76EE\u5F55" aria-label="\u9009\u62E9\u76EE\u5F55">'+J("chevronDown",{size:11,strokeWidth:2})+'</button></div><div id="folder-picker-dropdown" class="folder-picker-dropdown hidden"><div class="folder-picker-quick-row"><button class="folder-picker-quick-btn" data-path="/tmp">\u4E34\u65F6</button><button class="folder-picker-quick-btn" data-path="/">\u6839\u76EE\u5F55</button></div></div><div id="folder-picker-validation" class="folder-picker-validation"></div></div>'}function Om(e){var t=Ge(),n=t;if(e.selectedId){var i=e.sessions.find(function(s){return s.id===e.selectedId});n=i&&i.cwd?i.cwd:t}var a=n;return a.length>28&&(a="..."+a.slice(-25)),'<div class="working-dir-indicator" id="working-dir-indicator" title="'+p(n)+'" data-path="'+p(n)+'"><span class="working-dir-indicator-icon">'+J("folder",{size:12,strokeWidth:1.7})+'</span><span class="working-dir-indicator-path">'+p(a)+"</span></div>"}function Gs(e){if(!e)return"";var t=Date.now(),n=new Date(e).getTime(),i=Math.max(0,t-n),a=Math.floor(i/1e3);if(a<60)return"\u521A\u521A";var s=Math.floor(a/60);if(s<60)return s+"\u5206\u949F\u524D";var o=Math.floor(s/60);if(o<24)return o+"\u5C0F\u65F6\u524D";var l=Math.floor(o/24);return l<30?l+"\u5929\u524D":Math.floor(l/30)+"\u4E2A\u6708\u524D"}function Qs(e){if(!e)return"";var t=Date.now(),n=new Date(e).getTime(),i=Math.max(0,t-n),a=Math.floor(i/1e3),s=Math.floor(a/60),o=Math.floor(s/60);return o>0?o+"h"+(s%60>0?s%60+"m":""):s>0?s+"m":a+"s"}function yr(e){if(!e)return"";if(e.archived)return"\u5DF2\u5F52\u6863";if(e.permissionBlocked)return"\u7B49\u5F85\u6388\u6743";if(se(e)&&e.structuredState&&e.structuredState.inFlight)return"\u601D\u8003\u4E2D";var t={idle:"\u7A7A\u95F2",stopped:"\u5DF2\u505C\u6B62",running:"\u8FD0\u884C\u4E2D",exited:"\u5DF2\u9000\u51FA",failed:"\u5DF2\u5931\u8D25"};return t[e.status]||e.status}function $s(e){return e?e.archived?"archived":e.permissionBlocked?"permission-blocked":se(e)&&e.structuredState&&e.structuredState.inFlight?"running":e.status||"":""}function Ud(e){return e?e.permissionBlocked?"\u7B49\u5F85\u4F60\u7684\u6388\u6743":e.status!=="running"?"":e.id===r.selectedId&&r.currentTask&&r.currentTask.title?r.currentTask.title:e.currentTaskTitle?e.currentTaskTitle:"":""}function Vd(e){var t=e&&e.messages;if(!t||t.length===0)return"";for(var n=t.length-1;n>=0;n--){var i=t[n];if(!(!i||i.role!=="user")){var a=i.content;if(typeof a=="string"){var s=a.trim();if(s)return s;continue}if(Array.isArray(a))for(var o=0;o<a.length;o++){var l=a[o];if(!(!l||l.type!=="text"||!l.text)&&!l.__queued){var c=String(l.text).trim();if(c)return c}}}}return""}function Kd(e){var t=e&&e.messages;if(!t||t.length===0)return"";for(var n=t.length-1;n>=0;n--){var i=t[n];if(i.role==="assistant"){for(var a=i.content||[],s=0;s<a.length;s++)if(a[s].type==="text"&&a[s].text&&a[s].text.trim()){var o=a[s].text.trim();o=o.replace(/^#+\s+/gm,"").replace(/\*\*/g,"").replace(/`/g,"");var l=o.split(`
|
|
12
|
+
`)[0].trim();return l.slice(0,100)}}}return""}function Zi(e){var t=e.id===r.selectedId?" active":"",n=r.sessionsManageMode&&r.selectedSessionIds[e.id]?" selected":"",i=yr(e),a=$s(e),s="",o=Ls("sessions",e.id,"\u9009\u62E9\u4F1A\u8BDD "+e.command);if((e.provider==="claude"||e.provider==="codex")&&e.claudeSessionId&&e.status!=="running"&&!r.sessionsManageMode&&!se(e)){var l=e.provider==="codex"?"\u6062\u590D Codex \u4F1A\u8BDD":"\u6062\u590D Claude \u4F1A\u8BDD";s='<button class="session-action-btn" data-action="resume" data-session-id="'+e.id+'" type="button" aria-label="'+l+'" title="'+l+'"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 4v6h6"/><path d="M3.51 15a9 9 0 105.64-11.36L3 10"/></svg></button>'}var c=!r.sessionsManageMode&&e.worktreeEnabled&&e.worktree&&e.worktree.branch&&e.worktree.path,d=e.worktreeMergeStatus==="merged"&&e.worktreeMergeInfo&&e.worktreeMergeInfo.cleanupDone===!1,u=e.status==="running"||e.worktreeMergeStatus==="merging",f=d?"\u91CD\u8BD5\u6E05\u7406 worktree":"\u5408\u5E76\u5230\u4E3B\u5206\u652F",v=c&&e.worktreeMergeStatus!=="merged"?'<button class="session-action-btn merge-btn" data-action="worktree-merge" data-session-id="'+e.id+'" type="button" aria-label="'+p(f)+'" title="'+p(f)+'"'+(u?" disabled":"")+'><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 7h10"/><path d="M7 12h10"/><path d="M7 17h10"/><path d="M5 7l-2 2 2 2"/><path d="M19 15l2 2-2 2"/></svg></button>':d?'<button class="session-action-btn merge-btn" data-action="worktree-cleanup" data-session-id="'+e.id+'" type="button" aria-label="\u91CD\u8BD5\u6E05\u7406 worktree" title="\u91CD\u8BD5\u6E05\u7406 worktree"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg></button>':"",m=r.sessionsManageMode?"":'<button class="session-action-btn delete-btn" data-action="delete-session" data-session-id="'+e.id+'" type="button" aria-label="\u5220\u9664\u4F1A\u8BDD" title="\u5220\u9664\u6B64\u4F1A\u8BDD"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/></svg></button>',y='<span class="session-actions">'+s+v+m+"</span>",g=e.summary?'<div class="session-title">'+p(e.summary)+"</div>":'<div class="session-command">'+p(e.resumedFromSessionId?e.command.replace(/\s+--resume\s+\S+/,"").replace(/\s+resume\s+[0-9a-f-]+/,""):e.command)+"</div>",b=Ud(e),w="";e.status==="running"&&b&&(w='<div class="session-activity">'+p(b)+"</div>");var k="";e.status==="running"?k='<span class="session-time" title="\u5DF2\u8FD0\u884C '+p(Qs(e.startedAt))+'">'+p(Qs(e.startedAt))+"</span>":e.endedAt?k='<span class="session-time" title="'+p(new Date(e.endedAt).toLocaleString())+'">'+p(Gs(e.endedAt))+"</span>":e.startedAt&&(k='<span class="session-time" title="'+p(new Date(e.startedAt).toLocaleString())+'">'+p(Gs(e.startedAt))+"</span>");var E=Xs(e),L=e.autoRecovered?'<span class="session-recovery-hint">\u81EA\u52A8\u6062\u590D</span>':"";return'<div class="session-item'+t+n+'" data-session-id="'+e.id+'" role="button" tabindex="0"><div class="session-item-content"><div class="session-item-row">'+o+'<div class="session-main"><div class="session-title-row">'+g+k+"</div>"+w+'<div class="session-meta"><span class="session-status '+a+'">'+p(i)+"</span>"+E+L+"</div></div>"+y+"</div></div></div>"}function Jd(e){if(!e||!e.worktreeMergeStatus)return"";var t={ready:"\u53EF\u5408\u5E76",checking:"\u68C0\u67E5\u4E2D",merging:"\u5408\u5E76\u4E2D",merged:e.worktreeMergeInfo&&e.worktreeMergeInfo.cleanupDone===!1?"\u5DF2\u5408\u5E76\u5F85\u6E05\u7406":"\u5DF2\u5408\u5E76",failed:"\u5408\u5E76\u5931\u8D25"};return t[e.worktreeMergeStatus]||""}function Yd(e){var t=Jd(e);return t?'<span class="session-kind-badge worktree-merge '+p(e.worktreeMergeStatus||"")+'">'+p(t)+"</span>":""}function Xs(e){if(!e||!e.worktreeEnabled)return"";var t=[];e.worktree&&e.worktree.branch&&t.push("Worktree: "+e.worktree.branch),e.worktree&&e.worktree.path&&t.push("Path: "+e.worktree.path);var n=t.length>0?' title="'+p(t.join(`
|
|
13
|
+
`))+'"':"";return'<span class="session-kind-badge worktree"'+n+">Worktree</span>"+Yd(e)}function Pm(e){if(!e)return"";var t=se(e)?'<span class="session-kind-badge structured">Structured</span>':'<span class="session-kind-badge pty">PTY</span>';return t+Xs(e)}function Gd(e){var t=[{id:"managed",label:"\u6258\u7BA1",desc:"\u5168\u81EA\u52A8\u5B8C\u6210\u4EFB\u52A1"},{id:"full-access",label:"\u5168\u6743\u9650",desc:"\u81EA\u52A8\u786E\u8BA4\u6743\u9650"},{id:"auto-edit",label:"\u81EA\u52A8\u7F16\u8F91",desc:"\u81EA\u52A8\u786E\u8BA4\u4FEE\u6539"},{id:"default",label:"\u6807\u51C6",desc:"\u9010\u6B65\u786E\u8BA4\u64CD\u4F5C"},{id:"native",label:"\u539F\u751F",desc:"\u539F\u751F\u7ED3\u6784\u5316\u8F93\u51FA"}];return t.map(function(n){var i=n.id===e?" active":"";return'<button type="button" class="mode-card'+i+'" data-mode="'+n.id+'"><span class="mode-card-label">'+n.label+'</span><span class="mode-card-desc">'+n.desc+"</span></button>"}).join("")}function Qd(e){var t=[{id:"claude",label:"Claude",desc:"\u5B8C\u6574 Claude \u4F1A\u8BDD\u80FD\u529B"},{id:"codex",label:"Codex",desc:"\u7ED3\u6784\u5316 JSONL \u6216 PTY \u4F1A\u8BDD"}];return t.map(function(n){var i=n.id===e?" active":"";return'<button type="button" class="mode-card provider-card'+i+'" data-provider="'+n.id+'"><span class="mode-card-label">'+n.label+'</span><span class="mode-card-desc">'+n.desc+"</span></button>"}).join("")}function $d(e){var t=[{id:"structured",label:"\u7ED3\u6784\u5316",desc:"\u667A\u80FD\u5BF9\u8BDD\u6A21\u5F0F"},{id:"pty",label:"PTY",desc:"\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u4F1A\u8BDD"}];return t.map(function(n){var i=n.id===e?" active":"",a="";return'<button type="button" class="mode-card session-kind-card'+i+a+'" data-session-kind="'+n.id+'"><span class="mode-card-label">'+n.label+'</span><span class="mode-card-desc">'+n.desc+"</span></button>"}).join("")}function Hm(e){return'<label class="session-inline-toggle" for="session-worktree-toggle" title="\u4E3A\u8BE5\u4F1A\u8BDD\u521B\u5EFA\u72EC\u7ACB\u7684 git worktree \u5206\u652F"><svg class="session-inline-toggle-icon" viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2.2"/><circle cx="18" cy="6" r="2.2"/><circle cx="12" cy="18" r="2.2"/><path d="M6 8.2v3.4a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8.2"/><path d="M12 13.6v2.2"/></svg><span class="session-inline-toggle-label">Worktree \u6A21\u5F0F</span><input id="session-worktree-toggle" type="checkbox" class="switch-toggle"'+(e?" checked":"")+' /><span class="switch-slider" aria-hidden="true"></span></label>'}function Zs(e){var t=r.sessionTool||"claude";return e==="structured"?t==="codex"?"Codex JSONL \u7ED3\u6784\u5316\u804A\u5929\u754C\u9762\uFF0C\u652F\u6301\u591A\u8F6E\u5BF9\u8BDD\u548C\u5DE5\u5177\u8C03\u7528\u5C55\u793A\u3002":"\u7ED3\u6784\u5316\u804A\u5929\u754C\u9762\uFF0C\u652F\u6301\u591A\u8F6E\u5BF9\u8BDD\u3001\u6D41\u5F0F\u8F93\u51FA\u548C\u5DE5\u5177\u8C03\u7528\u5C55\u793A\u3002":t==="codex"?"Codex PTY \u7EC8\u7AEF\u4F1A\u8BDD\uFF1Bterminal \u662F\u539F\u59CB\u8F93\u51FA\uFF0Cchat \u662F\u89E3\u6790\u540E\u7684\u9605\u8BFB\u89C6\u56FE\u3002":"\u539F\u59CB PTY \u7EC8\u7AEF\u4F1A\u8BDD\uFF0C\u652F\u6301\u6301\u7EED\u4EA4\u4E92\u3001\u7EC8\u7AEF\u89C6\u56FE\u548C\u6743\u9650\u6D41\u3002"}function Xd(){var e=ht(),t=_t(e,r.modeValue||r.chatMode||"default"),n=r.sessionCreateKind||"structured",i=r.sessionCreateWorktree===!0;return'<section id="session-modal" class="modal-backdrop hidden"><div class="modal session-modal"><div class="modal-header"><div><h2 class="modal-title">\u65B0\u5BF9\u8BDD</h2><p class="modal-subtitle">\u542F\u52A8 Claude \u6216 Codex \u4F1A\u8BDD\uFF0C\u9009\u62E9 provider\u3001\u4F1A\u8BDD\u7C7B\u578B\u3001\u6A21\u5F0F\u548C\u5DE5\u4F5C\u76EE\u5F55\u3002</p></div><button id="close-modal-button" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body"><div class="field"><label class="field-label">Provider</label><div id="provider-cards" class="mode-cards">'+Qd(e)+'</div></div><div class="field"><label class="field-label">\u4F1A\u8BDD\u7C7B\u578B</label><div id="session-kind-cards" class="mode-cards">'+$d(n)+'</div><div class="field-hint session-kind-hint-row"><span id="session-kind-description">'+p(Zs(n))+'</span></div></div><div class="field"><label class="field-label">\u6A21\u5F0F</label><div id="mode-cards" class="mode-cards">'+Gd(t)+'</div><p id="mode-description" class="field-hint">'+p(co(e,t))+'</p></div><div class="field"><label class="field-label" for="cwd">\u5DE5\u4F5C\u76EE\u5F55</label><div class="suggestions-wrap"><input id="cwd" type="text" class="field-input" autocomplete="off" placeholder="'+p(Ge())+'" /><div id="cwd-suggestions" class="suggestions hidden"></div></div><p class="field-hint">\u7559\u7A7A\u5219\u4F7F\u7528\u4E0A\u65B9\u76EE\u5F55\uFF0C\u652F\u6301\u8DEF\u5F84\u81EA\u52A8\u8865\u5168\u3002</p><div id="recent-paths-bubbles" class="recent-paths-bubbles"></div></div></div><div class="modal-footer"><button id="run-button" class="btn btn-primary btn-block">\u542F\u52A8\u4F1A\u8BDD</button><p id="modal-error" class="error-message hidden"></p></div></div></section>'}function Zd(e,t){if(!(!r.selectedId||!e)){var n=r.selectedId+":"+e;if(r.toolContentCache[n]){t(null,r.toolContentCache[n]);return}fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/tool-content/"+encodeURIComponent(e),{credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){i.error?t(i.error,null):(r.toolContentCache[n]=i,t(null,i))}).catch(function(){t("\u52A0\u8F7D\u5931\u8D25",null)})}}function Mn(e){return!!(r.config&&r.config.cardDefaults&&r.config.cardDefaults[e])}function ea(e,t,n,i){if(!(!e||e.dataset.truncated!=="true"||e.dataset.loaded==="true")){var a=e.dataset.toolUseId;a&&(t&&(t.innerHTML='<div class="tool-content-loading">\u52A0\u8F7D\u4E2D\u2026</div>'),e.dataset.loaded="loading",Zd(a,function(s,o){if(s){t&&(t.innerHTML=i||'<div class="tool-content-error">\u52A0\u8F7D\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5</div>'),e.dataset.loaded="";return}e.dataset.truncated="false",e.dataset.loaded="true";var l=typeof o.content=="string"?o.content:JSON.stringify(o.content);n(l,o)}))}}window.__tcToggle=function(e,t){var n=t.closest(".tool-use-card")||t.closest(".inline-diff");if(n){var i=n.classList.contains("collapsed");n.classList.toggle("collapsed");var a=n.dataset.expandKind||"tool-card";if(Cn(n,a),i){var s=n.querySelector(".tool-use-result");ea(n,s,function(o){s&&(s.innerHTML='<pre class="tool-use-result-content">'+p(o)+"</pre>")},`<div class="tool-content-error" onclick="__tcToggle(null, this.closest('.tool-use-card,.inline-diff').querySelector('.tool-use-header,.diff-header'))">\u52A0\u8F7D\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5</div>`)}}e&&(e.preventDefault(),e.stopPropagation())},window.__thinkingToggle=function(e){var t=e.classList.contains("collapsed");if(t){e.classList.remove("collapsed"),e.classList.add("expanded"),e.querySelector(".thinking-inline-preview").textContent=e.dataset.thinking||"";var n=e.querySelector(".thinking-inline-action");n&&(n.textContent="\u6536\u8D77")}else{e.classList.remove("expanded"),e.classList.add("collapsed");var i=(e.dataset.thinking||"").slice(0,57)+((e.dataset.thinking||"").length>60?"\u2026":"");e.querySelector(".thinking-inline-preview").textContent=i;var n=e.querySelector(".thinking-inline-action");n&&(n.textContent="\u5C55\u5F00")}Cn(e,"thinking")},window.__subagentReplyToggle=function(e,t){e&&(e.preventDefault(),e.stopPropagation());var n=t&&t.closest?t.closest(".subagent-reply"):null;if(n){var i=n.getAttribute("data-expanded")==="true";Ui(n,"subagent-reply",!i),Cn(n,"subagent-reply")}},window.__subagentPanelToggle=function(e,t){e&&(e.preventDefault(),e.stopPropagation());var n=t&&t.closest?t.closest(".subagent-panel"):null;if(n){var i=n.getAttribute("data-expanded")==="true";Ui(n,"subagent-panel",!i),Cn(n,"subagent-panel")}};function eu(e){if(e)for(var t=e.querySelectorAll('.subagent-panel[data-expanded="false"]'),n=0;n<t.length;n++){var i=t[n].querySelector(".subagent-panel-body");i&&(i.scrollTop=i.scrollHeight)}}window.__inlineToolToggle=function(e){var t=e.classList.toggle("inline-tool-open"),n=e.querySelector(".inline-tool-expanded");n&&(n.style.display=t?"block":"none");var i=e.querySelector(".inline-tool-status");i&&(e.dataset.status==="error"?i.textContent="\u2717":e.dataset.status==="done"&&(i.textContent="\u2713")),t&&ea(e,n,function(a){e.dataset.result=a,n&&(n.innerHTML='<div class="inline-tool-result">'+Xl(a,"")+"</div>")}),Cn(e,"inline-tool")},window.__terminalExpand=function(e){var t=e.closest(".inline-terminal");if(t){var n=t.querySelector(".term-body");if(n){var i=n.style.display==="none";n.style.display=i?"block":"none",t.dataset.expanded=i?"true":"false";var a=e.querySelector(".term-toggle-icon");if(a&&(a.textContent=i?"\u25BC":"\u25B6"),Cn(t,"terminal"),i){var s=n.querySelector(".term-output");ea(t,s,function(o){if(s){for(var l=o.split(`
|
|
14
|
+
`),c="",d=0;d<l.length;d++)!l[d]&&d===l.length-1||(c+='<div class="term-line">'+p(l[d])+"</div>");s.innerHTML=c}})}}}};function _m(e){var t=document.querySelector(".thinking-streaming");if(t){var n=t.querySelector(".thinking-streaming-text");if(n){var i=e.split(`
|
|
15
15
|
`),a=i.slice(-3);n.textContent=a.join(`
|
|
16
|
-
`),n.scrollTop=n.scrollHeight}}}window.__askSelect=function(e,t,n,i){var a=r.askUserSelections[e];if(a||(a={submitted:!1},r.askUserSelections[e]=a),!a.submitted){var s=a[t]||[];if(i){var o=s.indexOf(n);o===-1?s.push(n):s.splice(o,1)}else s=s[0]===n?[]:[n];a[t]=s,window.__askRender(e)}},window.__askRender=function(e){var t=document.querySelector('[data-tool-use-id="'+e+'"]');if(t){var n=r.askUserSelections[e]||{};t.querySelectorAll(".ask-user-option").forEach(function(o){var l=parseInt(o.dataset.questionIndex,10),
|
|
16
|
+
`),n.scrollTop=n.scrollHeight}}}window.__askSelect=function(e,t,n,i){var a=r.askUserSelections[e];if(a||(a={submitted:!1},r.askUserSelections[e]=a),!a.submitted){var s=a[t]||[];if(i){var o=s.indexOf(n);o===-1?s.push(n):s.splice(o,1)}else s=s[0]===n?[]:[n];a[t]=s,window.__askRender(e)}},window.__askRender=function(e){var t=document.querySelector('[data-tool-use-id="'+e+'"]');if(t){var n=r.askUserSelections[e]||{};t.querySelectorAll(".ask-user-option").forEach(function(o){var l=parseInt(o.dataset.questionIndex,10),c=parseInt(o.dataset.optionIndex,10),d=(n[l]||[]).indexOf(c)!==-1;o.classList.toggle("selected",d)});var i=t.querySelector(".ask-user-submit");if(i){var a=t.querySelectorAll(".ask-user-question-group"),s=!0;a.forEach(function(o,l){(!n[l]||n[l].length===0)&&(s=!1)}),i.disabled=!s||!!n.submitted,n.submitted&&(i.textContent="\u5DF2\u63D0\u4EA4...",i.classList.add("ask-user-submitted"))}}},window.__askSubmit=function(e){var t=r.askUserSelections[e];if(!(!t||t.submitted||!r.selectedId)){var n=document.querySelector('[data-tool-use-id="'+e+'"]');if(n){var i=n.querySelectorAll(".ask-user-question-group"),a=[],s=!0;if(i.forEach(function(l,c){var d=t[c]||[];if(d.length===0){s=!1;return}var u=[];d.forEach(function(f){var v=l.querySelector('[data-option-index="'+f+'"]');v&&u.push(v.dataset.optionLabel)}),a.push(u.join(", "))}),!!s){t.submitted=!0,window.__askRender(e);var o=a.join(`
|
|
17
17
|
`);fetch("/api/sessions/"+r.selectedId+"/input",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:o+`
|
|
18
|
-
`,view:r.currentView})}).catch(function(l){console.error("[wand] Error sending answer:",l),t.submitted=!1,window.__askRender(e)})}}}};function nu(){if(!r.__globalListenersBound){r.__globalListenersBound=!0,document.addEventListener("click",function(){var t=document.getElementById("sidebar-overflow-menu");t&&t.classList.remove("open")}),window.addEventListener("resize",function(){var t=document.getElementById("sidebar-overflow-menu");t&&t.classList.remove("open")});var e=function(){r.topbarMoreOpen=!1;var t=document.getElementById("topbar-more-menu"),n=document.getElementById("topbar-more-button");t&&t.classList.add("hidden"),n&&(n.classList.remove("active"),n.setAttribute("aria-expanded","false"))};document.addEventListener("click",function(t){if(r.topbarMoreOpen){var n=document.getElementById("topbar-more-menu"),i=n&&n.parentElement;i&&!i.contains(t.target)&&e()}}),document.addEventListener("keydown",function(t){t.key==="Escape"&&r.topbarMoreOpen&&e()}),document.addEventListener("click",function(t){if(r.plusPopoverOpen){var n=document.getElementById("composer-plus-popover"),i=document.getElementById("attach-btn");n&&n.contains(t.target)||i&&i.contains(t.target)||ci()}}),document.addEventListener("keydown",function(t){t.key==="Escape"&&r.plusPopoverOpen&&ci()}),document.addEventListener("click",function(t){if(!t.target.closest(".folder-picker-container")){var n=document.getElementById("folder-picker-dropdown");n&&n.classList.add("hidden")}})}}function ru(){nu();var e=document.getElementById("login-button");if(e){e.addEventListener("click",da);var t=document.getElementById("login-form");t&&t.addEventListener("submit",function(h){h.preventDefault(),da()});var n=document.getElementById("login-switch-server-button");n&&n.addEventListener("click",so);var i=document.getElementById("password"),a=document.getElementById("toggle-password-button");a&&i&&a.addEventListener("click",function(){var h=i.type==="text";i.type=h?"password":"text",a.textContent=h?"\u663E\u793A":"\u9690\u85CF",a.setAttribute("aria-label",h?"\u663E\u793A\u5BC6\u7801":"\u9690\u85CF\u5BC6\u7801"),a.setAttribute("aria-pressed",h?"false":"true"),i.focus()}),i&&(i.addEventListener("keydown",function(h){h.key==="Enter"&&da()}),i.addEventListener("input",function(){i.dataset.error="false",i.setAttribute("aria-invalid","false");var h=document.getElementById("login-error");h&&Li(h)}),i.focus());return}var s=document.getElementById("welcome-input");s&&(s.addEventListener("keydown",function(h){h.key==="Enter"&&!h.shiftKey&&(h.preventDefault(),Vo())}),s.focus());var o=document.getElementById("welcome-send-btn");o&&o.addEventListener("click",function(){Vo()});var l=document.getElementById("welcome-tool-claude");l&&l.addEventListener("click",function(){_o()});var d=document.getElementById("welcome-tool-codex");d&&d.addEventListener("click",function(){r.sessionTool="codex",r.preferredCommand="codex",r.modeValue="full-access",_o()});var c=document.getElementById("welcome-tool-structured");c&&c.addEventListener("click",function(){Eo().then(function(){Ft(!0)}).catch(function(h){T(h&&h.message||"\u65E0\u6CD5\u542F\u52A8\u7ED3\u6784\u5316\u4F1A\u8BDD\u3002","error")})}),xf();var u=document.getElementById("sessions-list");u&&(u.addEventListener("click",au),u.addEventListener("keydown",su),u.addEventListener("mouseover",Ju),u.addEventListener("mouseout",Yu),Rp(u)),window.addEventListener("scroll",$t,!0),window.addEventListener("resize",$t),document.addEventListener("click",ou);var f=document.getElementById("provider-cards");f&&f.addEventListener("click",function(h){var I=h.target.closest(".provider-card");if(!(!I||I.classList.contains("disabled"))){var _=I.getAttribute("data-provider");_&&(r.sessionTool=_,r.preferredCommand=_,xr())}});var v=document.getElementById("session-kind-cards");v&&v.addEventListener("click",function(h){var I=h.target.closest(".session-kind-card");if(!(!I||I.classList.contains("disabled"))){var _=I.getAttribute("data-session-kind");_&&(r.sessionCreateKind=_,xr())}});var m=document.getElementById("mode-cards");m&&m.addEventListener("click",function(h){var I=h.target.closest(".mode-card");if(I){var _=I.getAttribute("data-mode");_&&(r.modeValue=_,xr())}});var y=document.getElementById("session-worktree-toggle");y&&y.addEventListener("change",function(){r.sessionCreateWorktree=this.checked});var g=document.getElementById("cwd");g&&(g.addEventListener("input",function(){r.cwdValue=this.value}),g.addEventListener("change",function(){r.cwdValue=this.value}),g.addEventListener("input",jo),g.addEventListener("focus",jo),g.addEventListener("blur",function(){setTimeout(er,120)}));var b=document.getElementById("sessions-toggle-button");b&&b.addEventListener("click",Fu);var w=document.getElementById("sessions-drawer-backdrop");w&&w.addEventListener("click",Ir);var k=document.getElementById("close-drawer-button");k&&k.addEventListener("click",Ir);var E=document.getElementById("sidebar-collapse-btn");E&&E.addEventListener("click",Gu);var L=document.getElementById("sidebar-pin-btn");L&&L.addEventListener("click",Qu);var S=document.getElementById("sidebar-more-btn"),M=document.getElementById("sidebar-overflow-menu");S&&M&&S.addEventListener("click",function(h){h.stopPropagation();var I=!M.classList.contains("open");M.classList.toggle("open",I),I&&Xu(M)});var D=document.getElementById("sidebar-home-btn");D&&D.addEventListener("click",function(){r.selectedId=null,ye(),It(),jt(),Yt()});var W=document.getElementById("sidebar-refresh-btn");W&&W.addEventListener("click",function(){window.location.reload()});var Y=document.getElementById("logout-button");Y&&Y.addEventListener("click",oo);var O=document.getElementById("switch-server-button");O&&O.addEventListener("click",so);var C=document.getElementById("settings-button");C&&C.addEventListener("click",tf);var A=document.getElementById("close-settings-button");A&&A.addEventListener("click",$n);var B=document.getElementById("settings-modal");B&&B.addEventListener("click",function(h){h.target.id==="settings-modal"&&$n()});var z=document.getElementById("save-password-button");z&&z.addEventListener("click",nf);for(var se=document.querySelectorAll(".settings-tab"),ne=0;ne<se.length;ne++)se[ne].addEventListener("click",function(h){var I=h.currentTarget||this,_=I&&I.getAttribute?I.getAttribute("data-tab"):null;_&&ha(_)});var K=document.getElementById("save-config-button");K&&K.addEventListener("click",df);var re=document.getElementById("cfg-default-model-refresh");re&&re.addEventListener("click",Hu);var U=document.getElementById("cfg-view-env-btn");U&&U.addEventListener("click",_u);var q=document.getElementById("save-display-button");q&&q.addEventListener("click",cf);var N=document.getElementById("app-icon-picker");if(N)for(var V=N.querySelectorAll(".settings-app-icon-option"),te=0;te<V.length;te++)V[te].addEventListener("click",function(){var h=this.getAttribute("data-icon");if(!(!h||typeof WandNative>"u"||typeof WandNative.setAppIcon!="function"))try{WandNative.setAppIcon(h),qo(h);var I=document.getElementById("app-icon-message");I&&(I.textContent="\u56FE\u6807\u5DF2\u5207\u6362\uFF0C\u8FD4\u56DE\u684C\u9762\u540E\u751F\u6548",I.style.color="var(--success)",I.classList.remove("hidden"),setTimeout(function(){I.classList.add("hidden")},3e3))}catch{}});var X=document.getElementById("upload-cert-button");X&&X.addEventListener("click",uf);for(var oe=document.querySelectorAll(".file-picker-input"),le=0;le<oe.length;le++)(function(h){h.addEventListener("change",function(){var I=h.closest(".file-picker");if(I){var _=I.querySelector(".file-picker-name");_&&(h.files&&h.files[0]?(_.textContent=h.files[0].name,I.classList.add("file-picker-has-file")):(_.textContent=_.getAttribute("data-default")||"\u672A\u9009\u62E9\u6587\u4EF6",I.classList.remove("file-picker-has-file")))}})})(oe[le]);var ce=document.getElementById("check-update-button");ce&&ce.addEventListener("click",Ao);var ue=document.getElementById("do-update-button");ue&&ue.addEventListener("click",ff);var Se=document.getElementById("do-restart-button");Se&&Se.addEventListener("click",pf);var Ie=document.getElementById("auto-update-web-toggle");Ie&&Ie.addEventListener("change",function(){ba("web",Ie.checked)});var qe=document.getElementById("auto-update-apk-toggle");qe&&qe.addEventListener("change",function(){ba("apk",qe.checked)});var H=document.getElementById("auto-update-dmg-toggle");H&&H.addEventListener("change",function(){ba("dmg",H.checked)});var R=document.getElementById("beta-channel-toggle");R&&R.addEventListener("change",function(){gf(R.checked?"beta":"stable")});var de=document.getElementById("copy-connect-code-button");de&&de.addEventListener("click",function(){var h=document.getElementById("android-connect-code");h&&Xn(h.textContent,de)});var Ce=document.getElementById("cfg-notif-sound");Ce&&(Ce.checked=r.notifSound,Ce.addEventListener("change",function(){r.notifSound=Ce.checked;try{localStorage.setItem("wand-notif-sound",String(r.notifSound))}catch{}r.notifSound&&Ai();var h=document.getElementById("notif-volume-field");h&&(h.style.display=r.notifSound?"":"none")}));var Q=document.getElementById("cfg-notif-volume"),Z=document.getElementById("cfg-notif-volume-val"),xe=function(h){if(h){var I=Number(h.min||0),_=Number(h.max||100),pe=Number(h.value||0),St=_>I?Math.max(0,Math.min(100,(pe-I)/(_-I)*100)):0;h.style.setProperty("--range-fill",St+"%")}};if(Q){Q.value=r.notifVolume,Z&&(Z.textContent=r.notifVolume+"%"),xe(Q);var ke=document.getElementById("notif-volume-field");ke&&(ke.style.display=r.notifSound?"":"none");var x=null;Q.addEventListener("input",function(){r.notifVolume=parseInt(Q.value,10),Z&&(Z.textContent=r.notifVolume+"%"),xe(Q);try{localStorage.setItem("wand-notif-volume",String(r.notifVolume))}catch{}if(Re&&typeof WandNative.setNotificationVolume=="function")try{WandNative.setNotificationVolume(r.notifVolume)}catch{}}),Q.addEventListener("change",function(){Ai()})}var Fe=document.getElementById("cfg-notif-bubble");Fe&&(Fe.checked=r.notifBubble,Fe.addEventListener("change",function(){r.notifBubble=Fe.checked;try{localStorage.setItem("wand-notif-bubble",String(r.notifBubble))}catch{}}));var Xe=document.getElementById("notification-request-btn");Xe&&Xe.addEventListener("click",function(){if(Re){window._onNativePermissionResult=function(){pn(),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}}else typeof Notification<"u"&&Notification.requestPermission().then(function(){pn()})});var Ze=document.getElementById("notification-reset-btn");Ze&&Ze.addEventListener("click",hf);var et=document.getElementById("notification-test-btn");et&&et.addEventListener("click",Po);var ut=document.getElementById("notification-test-delay-btn");if(ut&&ut.addEventListener("click",bf),pn(),Re&&typeof WandNative.getAvailableSounds=="function"){var We=document.getElementById("native-sound-section"),_e=document.getElementById("native-sound-select"),De=document.getElementById("native-sound-preview");if(We&&_e){We.classList.remove("hidden");try{var ie=JSON.parse(WandNative.getAvailableSounds()),Oe=WandNative.getNotificationSound();_e.innerHTML="";for(var tt=0;tt<ie.length;tt++){var ft=document.createElement("option");ft.value=ie[tt].id,ft.textContent=ie[tt].name,ie[tt].id===Oe&&(ft.selected=!0),_e.appendChild(ft)}_e.addEventListener("change",function(){try{WandNative.setNotificationSound(_e.value)}catch{}}),De&&De.addEventListener("click",function(){try{WandNative.previewSound(_e.value)}catch{}})}catch{}}}if(Re&&typeof WandNative.isHapticEnabled=="function"){var yt=document.getElementById("native-haptic-section"),st=document.getElementById("cfg-haptic-enabled");if(yt&&st){yt.classList.remove("hidden");try{st.checked=WandNative.isHapticEnabled()}catch{}st.addEventListener("change",function(){try{WandNative.setHapticEnabled(st.checked)}catch{}st.checked&&ir("medium")})}}var Pe=document.getElementById("topbar-new-session-button");Pe&&Pe.addEventListener("click",ma);var zt=document.getElementById("drawer-new-session-button");zt&&zt.addEventListener("click",ma);var xn=document.getElementById("close-modal-button");xn&&xn.addEventListener("click",un);var pt=document.getElementById("close-worktree-merge-button");pt&&pt.addEventListener("click",Qn);var en=document.getElementById("worktree-merge-cancel-button");en&&en.addEventListener("click",Qn);var tn=document.getElementById("worktree-merge-confirm-button");tn&&tn.addEventListener("click",ef);var Mt=document.getElementById("run-button");Mt&&Mt.addEventListener("click",yf);var wt=document.getElementById("approve-permission-btn");wt&&wt.addEventListener("click",Tv);var Sn=document.getElementById("deny-permission-btn");Sn&&Sn.addEventListener("click",Lv);var nn=document.getElementById("auto-approve-toggle");nn&&nn.addEventListener("click",Bv);var ar=document.getElementById("send-input-button");ar&&ar.addEventListener("click",function(){jt(),Jf()});var sr=document.getElementById("stop-button");sr&&sr.addEventListener("click",Pa),document.addEventListener("change",function(h){var I=h.target;if(!(!I||I.nodeType!==1)&&!(typeof I.matches!="function"||!I.matches("[data-mode-control]"))){var _=I.getAttribute("data-mode-control"),pe=I.value;_==="mode"?(r.chatMode=pe,Yn(),T&&T("\u65B0\u4F1A\u8BDD\u6A21\u5F0F\uFF1A"+pe,"info")):_==="model"?Du(pe):_==="thinking"&&Ou(pe),I.closest&&I.closest("#composer-plus-popover")&&ci()}});var or=document.getElementById("session-modal");or&&or.addEventListener("click",function(h){h.target.id==="session-modal"&&un(),h.target.id==="worktree-merge-modal"&&Qn()});var fe=document.getElementById("input-box");fe&&(gl(fe),fe.addEventListener("keydown",Tf),fe.addEventListener("paste",Pf),fe.addEventListener("input",function(){r.terminalComposing||No(fe)||(ev(fe),it(fe.value,!0),fi(fe))}),fe.addEventListener("compositionstart",function(){r.terminalInteractive&&(r.terminalComposing=!0)}),fe.addEventListener("compositionend",function(){r.terminalComposing&&(r.terminalComposing=!1,r.terminalInteractive&&No(fe))}),fe.addEventListener("focus",function(){jt(),Jp({target:fe})}),fe.addEventListener("blur",Yp));var ot=document.getElementById("attach-btn"),ee=document.getElementById("file-upload-input"),Te=document.getElementById("composer-plus-popover"),Le=document.getElementById("plus-attach-item");ot&&Te&&ot.addEventListener("click",function(h){h.stopPropagation(),zu()}),Le&&ee&&Le.addEventListener("click",function(){ci(),ee.click()}),ee&&ee.addEventListener("change",function(){var h=ee.files;if(h)for(var I=0;I<h.length;I++)ya(h[I]);ee.value=""});var kt=document.getElementById("voice-btn");kt&&kt.addEventListener("click",function(){Ea()});var vt=document.getElementById("voice-cancel-btn");vt&&vt.addEventListener("click",function(){Ea(!1)});var ve=document.getElementById("voice-record-btn");ve&&(ve.addEventListener("pointerdown",Rf),ve.addEventListener("pointermove",Ff),ve.addEventListener("pointerup",Wo),ve.addEventListener("pointercancel",Wo));var nt=document.getElementById("prompt-optimize-btn");nt&&nt.addEventListener("click",function(){_f()});var xt=document.querySelector(".input-composer");xt&&(xt.addEventListener("dragover",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.add("drag-over")}),xt.addEventListener("dragleave",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.remove("drag-over")}),xt.addEventListener("drop",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.remove("drag-over");var I=h.dataTransfer&&h.dataTransfer.files;if(I)for(var _=0;_<I.length;_++)ya(I[_])}));var lr=["terminal-interactive-toggle-top"];lr.forEach(function(h){var I=document.getElementById(h);I&&I.addEventListener("click",Mp)});var F=document.getElementById("pwa-install-button");F&&F.addEventListener("click",function(){r.deferredPrompt&&(r.deferredPrompt.prompt(),r.deferredPrompt.userChoice.then(function(){r.deferredPrompt=null,r.showInstallPrompt=!1,gs()}))});var j=document.getElementById("file-panel-toggle-btn");j&&j.addEventListener("click",Zr);var G=document.getElementById("file-side-panel-close");G&&G.addEventListener("click",qs);var ge=document.getElementById("file-panel-backdrop");ge&&ge.addEventListener("click",qs);var Be=document.getElementById("topbar-file-button");Be&&Be.addEventListener("click",Zr);var At=document.getElementById("topbar-cwd");At&&(At.addEventListener("click",function(){r.filePanelOpen||Zr()}),At.addEventListener("keydown",function(h){(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),r.filePanelOpen||Zr())}));var dr=document.getElementById("topbar-more-button"),qi=document.getElementById("topbar-more-menu");dr&&qi&&(dr.addEventListener("click",function(h){h.stopPropagation(),r.topbarMoreOpen=!r.topbarMoreOpen,qi.classList.toggle("hidden",!r.topbarMoreOpen),dr.classList.toggle("active",r.topbarMoreOpen),dr.setAttribute("aria-expanded",r.topbarMoreOpen?"true":"false")}),qi.addEventListener("click",function(h){var I=h.target&&h.target.closest?h.target.closest(".topbar-more-item"):null;if(I){var _=I.getAttribute("data-action");switch(r.topbarMoreOpen=!1,qi.classList.add("hidden"),dr.classList.remove("active"),dr.setAttribute("aria-expanded","false"),_){case"copy-claude-session-id":ra("claudeSessionId",we()&&we().provider==="codex"?"Codex thread ID \u5DF2\u590D\u5236":"Claude \u4F1A\u8BDD ID \u5DF2\u590D\u5236");break;case"copy-cwd":ra("cwd","\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u590D\u5236");break;case"copy-session-id":ra("id","\u4F1A\u8BDD ID \u5DF2\u590D\u5236");break;case"worktree-merge":r.selectedId&&To(r.selectedId);break;case"worktree-cleanup":r.selectedId&&Lo(r.selectedId);break;case"delete-session":r.selectedId&&(function(pe){Fn("\u786E\u5B9A\u8981\u5220\u9664\u5F53\u524D\u4F1A\u8BDD\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u5F53\u524D\u4F1A\u8BDD"}).then(function(St){St&&ll(pe)})})(r.selectedId);break}}}));var cd=document.getElementById("terminal-scale-down-top"),ud=document.getElementById("terminal-scale-up-top");cd&&cd.addEventListener("click",function(){Os(-.25)}),ud&&ud.addEventListener("click",function(){Os(.25)});var fd=document.getElementById("page-refresh-btn");fd&&fd.addEventListener("click",function(h){if(h&&h.shiftKey){location.reload();return}An(),It({preserveStickState:!0}),Nr(!0)});var pd=document.getElementById("terminal-jump-bottom");pd&&pd.addEventListener("click",function(){gt("force")});var vd=document.getElementById("chat-unread-bubble");vd&&vd.addEventListener("click",function(){Bd(!0)});var md=document.getElementById("file-explorer-refresh");md&&md.addEventListener("click",function(){Pt()});var gd=document.getElementById("file-explorer-up");gd&&gd.addEventListener("click",Pc);var ze=document.getElementById("file-explorer-cwd");if(ze&&ze.tagName==="INPUT"){var cr=ze.value,hd=function(h){var I=(h||"").trim();return I?(I=I.replace(/\/{2,}/g,"/"),I.length>1&&(I=I.replace(/\/+$/,"")),I):""};ze.addEventListener("focus",function(){cr=ze.value,setTimeout(function(){try{ze.select()}catch{}},0)}),ze.addEventListener("keydown",function(h){if(h.key==="Enter"){h.preventDefault();var I=hd(ze.value);if(!I)return;cr=I,ze.value=I,Pt({cwd:I}),ze.blur()}else h.key==="Escape"&&(h.preventDefault(),ze.value=cr,ze.blur())}),ze.addEventListener("blur",function(){var h=hd(ze.value);if(!h){ze.value=cr;return}if(h===cr){ze.value=h;return}cr=h,ze.value=h,Pt({cwd:h})})}var Oi=document.getElementById("file-search-input"),zr=document.getElementById("file-search-clear");Oi&&Oi.addEventListener("input",function(h){r.fileSearchQuery=h.target.value.trim(),zr&&zr.classList.toggle("visible",r.fileSearchQuery.length>0),Ds()}),zr&&zr.addEventListener("click",function(){r.fileSearchQuery="",Oi&&(Oi.value=""),zr.classList.remove("visible")});var he=document.getElementById("folder-picker-input"),Me=document.getElementById("folder-picker-dropdown"),as=null,Ut=-1,En=[];function bd(h){he&&he.classList.add("invalid");var I=document.getElementById("folder-picker-validation");I&&(I.textContent=h,I.classList.add("visible"))}function yd(){he&&he.classList.remove("invalid");var h=document.getElementById("folder-picker-validation");h&&(h.textContent="",h.classList.remove("visible"))}function Cm(h){if(!h.length)return"";var I='<div class="folder-recent-section"><div class="folder-recent-title">\u6700\u8FD1\u4F7F\u7528</div>';return h.forEach(function(_){var pe=_.path||_;I+='<div class="folder-recent-item" data-path="'+p(pe)+'"><span class="folder-recent-item-path">'+p(pe)+"</span></div>"}),I+="</div>",I}function Tm(){Me&&ta(function(h){var I=Cm(h);I?(Me.innerHTML=I,Me.classList.remove("hidden"),Me.querySelectorAll(".folder-recent-item").forEach(function(_){_.addEventListener("click",function(){var pe=this.dataset.path;he&&(he.value=pe,Gt(pe),rn(pe))})})):Ur()})}var wd=document.getElementById("working-dir-indicator");wd&&wd.addEventListener("click",function(){r.selectedId=null,ye(),r.drafts={},Yt(),setTimeout(function(){var h=document.getElementById("folder-picker-input");h&&h.focus()},50)});var ss=document.getElementById("folder-picker-toggle"),Me=document.getElementById("folder-picker-dropdown");ss&&Me&&ss.addEventListener("click",function(){Me.classList.toggle("hidden"),ss.classList.toggle("open")});var Pi=document.querySelector(".folder-picker-compact");if(Pi&&(Pi.addEventListener("dragover",function(h){h.preventDefault(),h.stopPropagation(),this.classList.add("drag-over")}),Pi.addEventListener("dragleave",function(h){h.preventDefault(),h.stopPropagation(),this.classList.remove("drag-over")}),Pi.addEventListener("drop",function(h){h.preventDefault(),h.stopPropagation(),this.classList.remove("drag-over");var I=h.dataTransfer&&h.dataTransfer.items;if(I)for(var _=0;_<I.length;_++){var pe=I[_];if(pe.kind==="file"&&pe.webkitGetAsEntry){var St=pe.webkitGetAsEntry();if(St&&St.isDirectory&&he){var qt=St.fullPath;he.value=qt,Gt(qt),rn(qt);break}}}})),Me&&Me.addEventListener("click",function(h){var I=h.target.closest(".folder-picker-quick-btn");if(I&&he){var _=I.dataset.path;he.value=_,Gt(_),rn(_),Me.classList.add("hidden");var pe=document.getElementById("folder-picker-toggle");pe&&pe.classList.remove("open")}}),he){var Lm=Ge();rn(Lm),he.addEventListener("focus",function(){var h=this.value.trim();h?rn(h):Tm()}),he.addEventListener("input",function(h){var I=h.target.value.trim();Ut=-1,as&&clearTimeout(as),as=setTimeout(function(){I?rn(I):Ur()},150)}),he.addEventListener("keydown",function(h){if(h.key==="Escape")Ur(),this.blur();else if(h.key==="ArrowDown")h.preventDefault(),En.length>0&&(Ut=Math.min(Ut+1,En.length-1),kd());else if(h.key==="ArrowUp")h.preventDefault(),Ut>0&&(Ut--,kd());else if(h.key==="Enter"&&Ut>=0){h.preventDefault();var I=En[Ut];if(I){var _=I.dataset.path;if(_===".."){var pe=he.value.trim(),St=pe.substring(0,pe.lastIndexOf("/"));St&&(he.value=St||"/",Gt(he.value),rn(St||"/"))}else he.value=_,Gt(_),Ur()}}})}function kd(){En.forEach(function(h,I){h.classList.toggle("active",I===Ut)})}function rn(h){Me&&(Me.innerHTML='<div class="folder-picker-loading">\u52A0\u8F7D\u4E2D...</div>',Me.classList.remove("hidden"),Ut=-1,En=[],fetch("/api/folders?q="+encodeURIComponent(h),{credentials:"same-origin"}).then(function(I){return I.json().then(function(_){return{ok:I.ok,status:I.status,data:_}})}).then(function(I){var _=I.data;if(!I.ok||_.error){bd(_.error||"\u8DEF\u5F84\u65E0\u6548"),Me.innerHTML='<div class="folder-picker-error">'+p(_.error||"\u8DEF\u5F84\u65E0\u6548")+"</div>";return}yd(),renderBreadcrumb(_.currentPath||h);var pe=_.items||[],St=_.currentPath||h;if(pe.length===0){Me.innerHTML='<div class="folder-picker-loading">\u7A7A\u76EE\u5F55</div>';return}Me.innerHTML=pe.map(function(qt){var Hi=qt.type==="parent"?"\u21A9\uFE0F":"\u{1F4C1}",os=qt.type==="parent"?".. (\u8FD4\u56DE\u4E0A\u7EA7)":qt.name;return'<div class="folder-picker-item" data-path="'+p(qt.path)+'" data-type="'+qt.type+'"><span class="folder-picker-item-icon">'+Hi+"</span><span>"+p(os)+"</span></div>"}).join(""),En=Array.from(Me.querySelectorAll(".folder-picker-item")),En.forEach(function(qt){qt.addEventListener("click",function(){var Hi=this.dataset.path,os=this.dataset.type;if(he)if(os==="parent"){var Id=he.value.trim(),Cd=Id.substring(0,Id.lastIndexOf("/"));he.value=Cd||"/",Gt(he.value),rn(Cd||"/")}else he.value=Hi,Gt(Hi),yd(),Ur()})})}).catch(function(I){bd("\u52A0\u8F7D\u5931\u8D25"),Me.innerHTML='<div class="folder-picker-error">\u52A0\u8F7D\u5931\u8D25</div>'}))}function Ur(){Me&&Me.classList.add("hidden"),Ut=-1,En=[]}var In=document.getElementById("folder-picker-modal"),xd=document.getElementById("close-folder-picker");function lg(){if(In){In.classList.remove("hidden"),he&&(he.value=Ge());var h=Ge();rn(h),renderBreadcrumb(h)}}xd&&In&&xd.addEventListener("click",function(){In.classList.add("hidden")}),In&&In.addEventListener("click",function(h){h.target===In&&In.classList.add("hidden")});var Sd=document.getElementById("topbar-git-badge");Sd&&Sd.addEventListener("click",function(h){h.preventDefault(),bs()});var Ed=document.getElementById("quick-commit-modal");Ed&&Ed.addEventListener("click",function(h){h.target.id==="quick-commit-modal"&&!r.quickCommitSubmitting&&jn()}),ys(),Jn(),nv(),ov(),ip(),Bt()}function Gt(e){r.workingDir=e;try{localStorage.setItem("wand-working-dir",e)}catch{}iu(e)}function ta(e){fetch("/api/recent-paths",{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){e(t||[])}).catch(function(){e([])})}function iu(e){return fetch("/api/recent-paths",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({path:e})}).catch(function(){})}function na(e){var t=r.sessions.find(function(n){return n.id===e});t&&t.status!=="running"&&!ae(t)?pl(e):Dt(e),jt()}function au(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest(".sidebar-collapsed-tile");if(n&&n instanceof HTMLElement){if(n.dataset.collapsedNewSession){e.preventDefault(),e.stopPropagation(),ma();return}if(n.dataset.collapsedSessionId){e.preventDefault(),e.stopPropagation(),na(n.dataset.collapsedSessionId);return}if(n.dataset.collapsedHistoryId){e.preventDefault(),e.stopPropagation();var i=n.dataset.collapsedHistoryId,a=n.dataset.cwd||"";bi(i,a).then(function(v){v&&v.id&&(r.selectedId=v.id,ye(),r.drafts[v.id]="",dn().then(function(){Dt(v.id)}))});return}}var s=t.closest("#claude-history-toggle");if(s){e.preventDefault(),e.stopPropagation(),r.claudeHistoryExpanded=!r.claudeHistoryExpanded,r.claudeHistoryExpanded&&!r.claudeHistoryLoaded&&Xr(),me();return}var o=t.closest("[data-action]");if(o&&o instanceof HTMLElement){if(e.preventDefault(),e.stopPropagation(),o.dataset.action==="toggle-manage-mode")vc();else if(o.dataset.action==="select-all-visible")Ts();else if(o.dataset.action==="clear-selection")gc();else if(o.dataset.action==="delete-selected")hc();else if(o.dataset.action==="toggle-selection")hr(o.dataset.kind,o.dataset.id);else if(o.dataset.action==="delete-session"&&o.dataset.sessionId)(function(v){Fn("\u786E\u8BA4\u5220\u9664\u8FD9\u4E2A\u4F1A\u8BDD\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u4F1A\u8BDD"}).then(function(m){m&&ll(v)})})(o.dataset.sessionId);else if(o.dataset.action==="delete-history"&&o.dataset.claudeSessionId)(function(v,m){Fn("\u786E\u8BA4\u9690\u85CF\u8FD9\u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u9690\u85CF\u5386\u53F2\u4F1A\u8BDD",okLabel:"\u9690\u85CF"}).then(function(y){y&&dl(v,m)})})(o.dataset.claudeSessionId,o.closest(".session-item"));else if(o.dataset.action==="toggle-history-directory"&&o.dataset.cwd){var l=o.dataset.cwd;r.claudeHistoryExpandedDirs[l]=!r.claudeHistoryExpandedDirs[l],me()}else if(o.dataset.action==="delete-history-directory"&&o.dataset.cwd)(function(v,m){var y=Np(v),g=Rn().filter(function(b){return b.cwd===v}).length;Fn("\u786E\u8BA4\u6E05\u7A7A\u6B64\u76EE\u5F55\u4E0B\u7684 "+g+" \u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u6E05\u7A7A\u76EE\u5F55\u5386\u53F2",okLabel:"\u6E05\u7A7A"}).then(function(b){b&&(cl(y,!0),jp(v,m,y))})})(o.dataset.cwd,o);else if(o.dataset.action==="clear-all-history")bc();else if(o.dataset.action==="toggle-archived-group")r.archivedExpanded=!r.archivedExpanded,me();else if(o.dataset.action==="resume"&&o.dataset.sessionId)Wp(o);else if(o.dataset.action==="resume-history"&&o.dataset.claudeSessionId)Kp(o);else if(o.dataset.action==="resume-codex-history"&&o.dataset.claudeSessionId)zp(o);else if(o.dataset.action==="delete-codex-history"&&o.dataset.claudeSessionId)Vp(o);else if(o.dataset.action==="toggle-codex-history-directory"&&o.dataset.cwd){var d=o.dataset.cwd;r.codexHistoryExpandedDirs[d]=!r.codexHistoryExpandedDirs[d],me()}else o.dataset.action==="worktree-merge"&&o.dataset.sessionId?To(o.dataset.sessionId):o.dataset.action==="worktree-cleanup"&&o.dataset.sessionId&&Lo(o.dataset.sessionId);return}var c=t.closest(".session-item");if(c){if(r.sessionsManageMode){c.dataset.sessionId?hr("sessions",c.dataset.sessionId):c.dataset.claudeHistoryId&&hr("history",c.dataset.claudeHistoryId);return}if(c.classList.contains("swiped")){Pr();return}if(ul)return;if(c.dataset.sessionId)na(c.dataset.sessionId);else if(c.dataset.claudeHistoryId){var u=c.dataset.claudeHistoryId,f=c.dataset.cwd;bi(u,f).then(function(v){v&&v.id&&(r.selectedId=v.id,ye(),r.drafts[v.id]="",dn().then(function(){Dt(v.id),jt()}))})}}}}function su(e){if(!(e.key!=="Enter"&&e.key!==" ")){var t=e.target.closest(".session-item");if(t){if(e.preventDefault(),r.sessionsManageMode){t.dataset.sessionId?hr("sessions",t.dataset.sessionId):t.dataset.claudeHistoryId&&hr("history",t.dataset.claudeHistoryId);return}if(t.dataset.sessionId)na(t.dataset.sessionId);else if(t.dataset.claudeHistoryId){var n=t.dataset.claudeHistoryId,i=t.dataset.cwd;bi(n,i).then(function(a){a&&a.id&&(r.selectedId=a.id,ye(),r.drafts[a.id]="",dn().then(function(){Dt(a.id),jt()}))})}}}}function ra(e,t){var n=r.sessions.find(function(a){return a.id===r.selectedId});if(n){var i=n[e];if(!i){T("\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9\u3002","error");return}Xn(String(i),null,function(){T(t||"\u5DF2\u590D\u5236","info")})}}function ou(e){var t=e.target.closest("#claude-session-id-badge");if(t){var n=t.dataset.claudeId;if(n){var i=t.textContent;Xn(n,null,function(){t.textContent="\u2713 \u5DF2\u590D\u5236",t.classList.add("copied"),setTimeout(function(){t.textContent=i,t.classList.remove("copied")},1200)})}}}function Tt(){return!r.terminal||!r.terminal.element?null:(r.terminalViewportEl=r.terminal.element,r.terminalViewportEl)}function Vn(){r.terminalScrollIdleTimer&&(clearTimeout(r.terminalScrollIdleTimer),r.terminalScrollIdleTimer=null)}function lt(){var e=document.getElementById("terminal-jump-bottom"),t=!!r.selectedId&&r.currentView==="terminal"&&!r.terminalAutoFollow&&!eo();r.showTerminalJumpToBottom=t,e&&e.classList.toggle("visible",t);var n=document.getElementById("output");n&&n.classList.toggle("has-jump-btn",t)}function ia(){var e=Tt();if(!e)return!0;var t=e.scrollHeight-e.clientHeight-e.scrollTop;return t<=r.terminalScrollThreshold}function eo(){var e=Tt();if(!e)return!0;var t=e.scrollHeight-e.clientHeight-e.scrollTop;return t<=2}function to(e){if(r.terminal){var t=Tt();if(t){var n=e?500:120;r.terminalProgrammaticScrollUntil=Math.max(r.terminalProgrammaticScrollUntil,Date.now()+n),e?t.scrollTo({top:t.scrollHeight,behavior:"smooth"}):t.scrollTop=t.scrollHeight}}}function aa(){r.terminalAutoFollow=!1,Vn(),r.terminalProgrammaticScrollUntil=0,r.terminal&&"_shouldScrollToBottom"in r.terminal&&(r.terminal._shouldScrollToBottom=!1),lt()}function gt(e){if(r.terminal){var t=e==="force";if(t){r.terminalAutoFollow=!0,Vn(),to(!1),lt();return}if(!r.terminalAutoFollow){lt();return}to(!1),lt()}}function lu(e){var t=document.createElement("div");t.className="terminal-scrollbar";var n=document.createElement("div");n.className="terminal-scrollbar-track";var i=document.createElement("div");i.className="terminal-scrollbar-thumb",n.appendChild(i),t.appendChild(n),e.appendChild(t),r.terminalScrollbarEl=t,r.terminalScrollbarThumbEl=i,r.terminalScrollbarHideTimer=null,r.terminalScrollbarDragging=!1,r.terminalScrollbarRafPending=!1;function a(){r.terminalScrollbarHideTimer&&(clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=null),t.classList.add("visible")}function s(){r.terminalScrollbarDragging||(r.terminalScrollbarHideTimer&&clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=setTimeout(function(){r.terminalScrollbarHideTimer=null,r.terminalScrollbarDragging||t.classList.remove("visible")},1500))}function o(){r.terminalScrollbarRafPending=!1;var g=Tt();if(g){var b=g.scrollHeight,w=g.clientHeight;if(b<=w){t.classList.remove("visible");return}var k=n.clientHeight,E=Math.max(28,w/b*k),L=b-w,S=g.scrollTop/L,M=S*(k-E);i.style.height=E+"px",i.style.top=M+"px"}}function l(){r.terminalScrollbarRafPending||(r.terminalScrollbarRafPending=!0,requestAnimationFrame(o))}var d=Tt();d&&d.addEventListener("scroll",function(){a(),l(),s()},{passive:!0}),n.addEventListener("mousedown",function(g){if(g.target!==i){g.preventDefault();var b=Tt();if(b){var w=n.getBoundingClientRect(),k=(g.clientY-w.top)/w.height,E=b.scrollHeight-b.clientHeight;b.scrollTop=k*E}}});var c=0,u=0;i.addEventListener("mousedown",function(g){g.preventDefault(),g.stopPropagation(),r.terminalScrollbarDragging=!0,i.classList.add("dragging"),c=g.clientY;var b=Tt();u=b?b.scrollTop:0,document.addEventListener("mousemove",f),document.addEventListener("mouseup",v)});function f(g){g.preventDefault();var b=Tt();if(b){var w=n.clientHeight,k=b.scrollHeight,E=b.clientHeight,L=k-E;if(!(L<=0)){var S=Math.max(28,E/k*w),M=w-S;if(!(M<=0)){var D=g.clientY-c,W=D/M*L;b.scrollTop=u+W}}}}function v(){r.terminalScrollbarDragging=!1,i.classList.remove("dragging"),document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",v),s()}i.addEventListener("touchstart",function(g){if(g.touches.length===1){g.stopPropagation(),r.terminalScrollbarDragging=!0,i.classList.add("dragging"),c=g.touches[0].clientY;var b=Tt();u=b?b.scrollTop:0,document.addEventListener("touchmove",m,{passive:!1}),document.addEventListener("touchend",y),document.addEventListener("touchcancel",y)}},{passive:!1});function m(g){if(g.touches.length===1){g.preventDefault();var b=Tt();if(b){var w=n.clientHeight,k=b.scrollHeight,E=b.clientHeight,L=k-E;if(!(L<=0)){var S=Math.max(28,E/k*w),M=w-S;if(!(M<=0)){var D=g.touches[0].clientY-c,W=D/M*L;b.scrollTop=u+W}}}}}function y(){r.terminalScrollbarDragging=!1,i.classList.remove("dragging"),document.removeEventListener("touchmove",m),document.removeEventListener("touchend",y),document.removeEventListener("touchcancel",y),s()}t.addEventListener("mouseenter",function(){a()}),t.addEventListener("mouseleave",function(){r.terminalScrollbarDragging||s()}),l()}function du(e){return e<4352?!1:e>=4352&&e<=4447||e>=9001&&e<=9002||e>=11904&&e<=12350||e>=12353&&e<=13311||e>=13312&&e<=19903||e>=19968&&e<=40959||e>=40960&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=126976&&e<=129535||e>=131072&&e<=196605||e>=196608&&e<=262141}var no="\u2060";function ro(){return{mode:"normal"}}function cu(e){return!/[^\x00-\x7f]/.test(e)&&e.indexOf("\x1B")===-1}function uu(e,t){if(!e)return"";var n=String(e);if(t.mode==="normal"&&cu(n))return n;for(var i="",a=0;a<n.length;a++){var s=n.charCodeAt(a),o=s,l=1;if(s>=55296&&s<=56319&&a+1<n.length){var d=n.charCodeAt(a+1);d>=56320&&d<=57343&&(o=(s-55296)*1024+(d-56320)+65536,l=2)}var c=l===2?n.substr(a,2):n.charAt(a);switch(t.mode){case"normal":o===27?(t.mode="esc",i+=c):o===155?(t.mode="csi",i+=c):o===157||o===144||o===158||o===159?(t.mode="string",i+=c):(i+=c,du(o)&&(i+=no));break;case"esc":i+=c,o===91?t.mode="csi":o===93||o===80||o===88||o===94||o===95?t.mode="string":t.mode="normal";break;case"csi":i+=c,o>=64&&o<=126&&(t.mode="normal");break;case"string":i+=c,o===7||o===156?t.mode="normal":o===27&&(t.mode="string-esc");break;case"string-esc":i+=c,o===92?t.mode="normal":t.mode="string";break}a+=l-1}return i}var ti="\x1B[?2026h",sa="\x1B[?2026l",fu=200,pu=256*1024;function vu(e){if(!e||r.syncOutputBuffer===null&&e.indexOf(ti)===-1)return e;for(var t="",n=0;n<e.length;)if(r.syncOutputBuffer!==null){var i=e.indexOf(sa,n);if(i===-1)return r.syncOutputBuffer+=e.slice(n),(r.syncOutputBuffer.length>pu||Date.now()>r.syncOutputDeadline)&&(t+=r.syncOutputBuffer,r.syncOutputBuffer=null,r.syncFramingResidue=!0),t;r.syncOutputBuffer+=e.slice(n,i+sa.length),t+=r.syncOutputBuffer,r.syncOutputBuffer=null,n=i+sa.length}else{var a=e.indexOf(ti,n);if(a===-1)return t+=e.slice(n),t;t+=e.slice(n,a),r.syncOutputBuffer=ti,r.syncOutputDeadline=Date.now()+fu,n=a+ti.length}return t}function jm(){if(r.syncOutputBuffer!==null){var e=r.syncOutputBuffer;return r.syncOutputBuffer=null,e}return""}function Kn(e,t){if(!(!e||t==null)){r.wideParserState||(r.wideParserState=ro());var n=uu(t,r.wideParserState),i=vu(n),a=r.terminalAutoFollow!==!1;"_shouldScrollToBottom"in e&&(e._shouldScrollToBottom=a),i&&e.write(i),"_shouldScrollToBottom"in e&&(e._shouldScrollToBottom=a),a&&(r.terminalProgrammaticScrollUntil=Math.max(r.terminalProgrammaticScrollUntil,Date.now()+120)),Cu(t)}}function oa(){r.wideParserState=ro()}function mu(){typeof document>"u"||document.addEventListener("copy",function(e){var t=window.getSelection&&window.getSelection();if(!(!t||t.isCollapsed)){var n=t.anchorNode,i=n&&n.nodeType===3?n.parentNode:n,a=document.getElementById("output");if(!(!a||!i||!a.contains(i))){var s=t.toString(),o=s.split(`
|
|
18
|
+
`,view:r.currentView})}).catch(function(l){console.error("[wand] Error sending answer:",l),t.submitted=!1,window.__askRender(e)})}}}};function tu(){if(!r.__globalListenersBound){r.__globalListenersBound=!0,document.addEventListener("click",function(){var t=document.getElementById("sidebar-overflow-menu");t&&t.classList.remove("open")}),window.addEventListener("resize",function(){var t=document.getElementById("sidebar-overflow-menu");t&&t.classList.remove("open")});var e=function(){r.topbarMoreOpen=!1;var t=document.getElementById("topbar-more-menu"),n=document.getElementById("topbar-more-button");t&&t.classList.add("hidden"),n&&(n.classList.remove("active"),n.setAttribute("aria-expanded","false"))};document.addEventListener("click",function(t){if(r.topbarMoreOpen){var n=document.getElementById("topbar-more-menu"),i=n&&n.parentElement;i&&!i.contains(t.target)&&e()}}),document.addEventListener("keydown",function(t){t.key==="Escape"&&r.topbarMoreOpen&&e()}),document.addEventListener("click",function(t){if(r.plusPopoverOpen){var n=document.getElementById("composer-plus-popover"),i=document.getElementById("attach-btn");n&&n.contains(t.target)||i&&i.contains(t.target)||di()}}),document.addEventListener("keydown",function(t){t.key==="Escape"&&r.plusPopoverOpen&&di()}),document.addEventListener("click",function(t){if(!t.target.closest(".folder-picker-container")){var n=document.getElementById("folder-picker-dropdown");n&&n.classList.add("hidden")}}),document.addEventListener("change",function(t){var n=t.target;if(!(!n||n.nodeType!==1)&&!(typeof n.matches!="function"||!n.matches("[data-mode-control]"))){var i=n.getAttribute("data-mode-control"),a=n.value;i==="mode"?(r.chatMode=a,Yn(),T&&T("\u65B0\u4F1A\u8BDD\u6A21\u5F0F\uFF1A"+a,"info")):i==="model"?_u(a):i==="thinking"&&qu(a),n.closest&&n.closest("#composer-plus-popover")&&di()}})}}function nu(){tu();var e=document.getElementById("login-button");if(e){e.addEventListener("click",ca);var t=document.getElementById("login-form");t&&t.addEventListener("submit",function(h){h.preventDefault(),ca()});var n=document.getElementById("login-switch-server-button");n&&n.addEventListener("click",so);var i=document.getElementById("password"),a=document.getElementById("toggle-password-button");a&&i&&a.addEventListener("click",function(){var h=i.type==="text";i.type=h?"password":"text",a.textContent=h?"\u663E\u793A":"\u9690\u85CF",a.setAttribute("aria-label",h?"\u663E\u793A\u5BC6\u7801":"\u9690\u85CF\u5BC6\u7801"),a.setAttribute("aria-pressed",h?"false":"true"),i.focus()}),i&&(i.addEventListener("keydown",function(h){h.key==="Enter"&&ca()}),i.addEventListener("input",function(){i.dataset.error="false",i.setAttribute("aria-invalid","false");var h=document.getElementById("login-error");h&&Li(h)}),i.focus());return}var s=document.getElementById("welcome-input");s&&(s.addEventListener("keydown",function(h){h.key==="Enter"&&!h.shiftKey&&(h.preventDefault(),Uo())}),s.focus());var o=document.getElementById("welcome-send-btn");o&&o.addEventListener("click",function(){Uo()});var l=document.getElementById("welcome-tool-claude");l&&l.addEventListener("click",function(){Ho()});var c=document.getElementById("welcome-tool-codex");c&&c.addEventListener("click",function(){r.sessionTool="codex",r.preferredCommand="codex",r.modeValue="full-access",Ho()});var d=document.getElementById("welcome-tool-structured");d&&d.addEventListener("click",function(){So().then(function(){Ft(!0)}).catch(function(h){T(h&&h.message||"\u65E0\u6CD5\u542F\u52A8\u7ED3\u6784\u5316\u4F1A\u8BDD\u3002","error")})}),kf();var u=document.getElementById("sessions-list");u&&(u.addEventListener("click",iu),u.addEventListener("keydown",au),u.addEventListener("mouseover",Ku),u.addEventListener("mouseout",Ju),Np(u)),window.addEventListener("scroll",$t,!0),window.addEventListener("resize",$t);var f=document.getElementById("provider-cards");f&&f.addEventListener("click",function(h){var C=h.target.closest(".provider-card");if(!(!C||C.classList.contains("disabled"))){var j=C.getAttribute("data-provider");j&&(r.sessionTool=j,r.preferredCommand=j,kr())}});var v=document.getElementById("session-kind-cards");v&&v.addEventListener("click",function(h){var C=h.target.closest(".session-kind-card");if(!(!C||C.classList.contains("disabled"))){var j=C.getAttribute("data-session-kind");j&&(r.sessionCreateKind=j,kr())}});var m=document.getElementById("mode-cards");m&&m.addEventListener("click",function(h){var C=h.target.closest(".mode-card");if(C){var j=C.getAttribute("data-mode");j&&(r.modeValue=j,kr())}});var y=document.getElementById("session-worktree-toggle");y&&y.addEventListener("change",function(){r.sessionCreateWorktree=this.checked});var g=document.getElementById("cwd");g&&(g.addEventListener("input",function(){r.cwdValue=this.value}),g.addEventListener("change",function(){r.cwdValue=this.value}),g.addEventListener("input",Do),g.addEventListener("focus",Do),g.addEventListener("blur",function(){setTimeout(Zn,120)}));var b=document.getElementById("sessions-toggle-button");b&&b.addEventListener("click",Ru);var w=document.getElementById("sessions-drawer-backdrop");w&&w.addEventListener("click",Er);var k=document.getElementById("close-drawer-button");k&&k.addEventListener("click",Er);var E=document.getElementById("sidebar-collapse-btn");E&&E.addEventListener("click",Yu);var L=document.getElementById("sidebar-pin-btn");L&&L.addEventListener("click",Gu);var S=document.getElementById("sidebar-more-btn"),M=document.getElementById("sidebar-overflow-menu");S&&M&&S.addEventListener("click",function(h){h.stopPropagation();var C=!M.classList.contains("open");M.classList.toggle("open",C),C&&$u(M)});var _=document.getElementById("sidebar-home-btn");_&&_.addEventListener("click",function(){r.selectedId=null,be(),It(),jt(),Yt()});var W=document.getElementById("sidebar-refresh-btn");W&&W.addEventListener("click",function(){window.location.reload()});var Y=document.getElementById("logout-button");Y&&Y.addEventListener("click",oo);var O=document.getElementById("switch-server-button");O&&O.addEventListener("click",so);var I=document.getElementById("settings-button");I&&I.addEventListener("click",ef);var A=document.getElementById("close-settings-button");A&&A.addEventListener("click",$n);var B=document.getElementById("settings-modal");B&&B.addEventListener("click",function(h){h.target.id==="settings-modal"&&$n()});var z=document.getElementById("save-password-button");z&&z.addEventListener("click",tf);for(var ae=document.querySelectorAll(".settings-tab"),ne=0;ne<ae.length;ne++)ae[ne].addEventListener("click",function(h){var C=h.currentTarget||this,j=C&&C.getAttribute?C.getAttribute("data-tab"):null;j&&ha(j)});var K=document.getElementById("save-config-button");K&&K.addEventListener("click",lf);var re=document.getElementById("cfg-default-model-refresh");re&&re.addEventListener("click",Pu);var U=document.getElementById("cfg-view-env-btn");U&&U.addEventListener("click",Hu);var q=document.getElementById("save-display-button");q&&q.addEventListener("click",cf);var N=document.getElementById("app-icon-picker");if(N)for(var V=N.querySelectorAll(".settings-app-icon-option"),te=0;te<V.length;te++)V[te].addEventListener("click",function(){var h=this.getAttribute("data-icon");if(!(!h||typeof WandNative>"u"||typeof WandNative.setAppIcon!="function"))try{WandNative.setAppIcon(h),Ao(h);var C=document.getElementById("app-icon-message");C&&(C.textContent="\u56FE\u6807\u5DF2\u5207\u6362\uFF0C\u8FD4\u56DE\u684C\u9762\u540E\u751F\u6548",C.style.color="var(--success)",C.classList.remove("hidden"),setTimeout(function(){C.classList.add("hidden")},3e3))}catch{}});var X=document.getElementById("upload-cert-button");X&&X.addEventListener("click",df);for(var oe=document.querySelectorAll(".file-picker-input"),le=0;le<oe.length;le++)(function(h){h.addEventListener("change",function(){var C=h.closest(".file-picker");if(C){var j=C.querySelector(".file-picker-name");j&&(h.files&&h.files[0]?(j.textContent=h.files[0].name,C.classList.add("file-picker-has-file")):(j.textContent=j.getAttribute("data-default")||"\u672A\u9009\u62E9\u6587\u4EF6",C.classList.remove("file-picker-has-file")))}})})(oe[le]);var de=document.getElementById("check-update-button");de&&de.addEventListener("click",Mo);var ue=document.getElementById("do-update-button");ue&&ue.addEventListener("click",uf);var Se=document.getElementById("do-restart-button");Se&&Se.addEventListener("click",ff);var Ie=document.getElementById("auto-update-web-toggle");Ie&&Ie.addEventListener("change",function(){ba("web",Ie.checked)});var qe=document.getElementById("auto-update-apk-toggle");qe&&qe.addEventListener("change",function(){ba("apk",qe.checked)});var H=document.getElementById("auto-update-dmg-toggle");H&&H.addEventListener("change",function(){ba("dmg",H.checked)});var R=document.getElementById("beta-channel-toggle");R&&R.addEventListener("change",function(){mf(R.checked?"beta":"stable")});var ce=document.getElementById("copy-connect-code-button");ce&&ce.addEventListener("click",function(){var h=document.getElementById("android-connect-code");h&&Tr(h.textContent,ce)});var Ce=document.getElementById("cfg-notif-sound");Ce&&(Ce.checked=r.notifSound,Ce.addEventListener("change",function(){r.notifSound=Ce.checked;try{localStorage.setItem("wand-notif-sound",String(r.notifSound))}catch{}r.notifSound&&Ai();var h=document.getElementById("notif-volume-field");h&&(h.style.display=r.notifSound?"":"none")}));var Q=document.getElementById("cfg-notif-volume"),Z=document.getElementById("cfg-notif-volume-val"),xe=function(h){if(h){var C=Number(h.min||0),j=Number(h.max||100),ke=Number(h.value||0),St=j>C?Math.max(0,Math.min(100,(ke-C)/(j-C)*100)):0;h.style.setProperty("--range-fill",St+"%")}};if(Q){Q.value=r.notifVolume,Z&&(Z.textContent=r.notifVolume+"%"),xe(Q);var we=document.getElementById("notif-volume-field");we&&(we.style.display=r.notifSound?"":"none");var x=null;Q.addEventListener("input",function(){r.notifVolume=parseInt(Q.value,10),Z&&(Z.textContent=r.notifVolume+"%"),xe(Q);try{localStorage.setItem("wand-notif-volume",String(r.notifVolume))}catch{}if(Re&&typeof WandNative.setNotificationVolume=="function")try{WandNative.setNotificationVolume(r.notifVolume)}catch{}}),Q.addEventListener("change",function(){Ai()})}var Fe=document.getElementById("cfg-notif-bubble");Fe&&(Fe.checked=r.notifBubble,Fe.addEventListener("change",function(){r.notifBubble=Fe.checked;try{localStorage.setItem("wand-notif-bubble",String(r.notifBubble))}catch{}}));var Xe=document.getElementById("notification-request-btn");Xe&&Xe.addEventListener("click",function(){if(Re){window._onNativePermissionResult=function(){pn(),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}}else typeof Notification<"u"&&Notification.requestPermission().then(function(){pn()})});var Ze=document.getElementById("notification-reset-btn");Ze&&Ze.addEventListener("click",gf);var et=document.getElementById("notification-test-btn");et&&et.addEventListener("click",Oo);var ut=document.getElementById("notification-test-delay-btn");if(ut&&ut.addEventListener("click",hf),pn(),Re&&typeof WandNative.getAvailableSounds=="function"){var We=document.getElementById("native-sound-section"),_e=document.getElementById("native-sound-select"),De=document.getElementById("native-sound-preview");if(We&&_e){We.classList.remove("hidden");try{var ie=JSON.parse(WandNative.getAvailableSounds()),Oe=WandNative.getNotificationSound();_e.innerHTML="";for(var tt=0;tt<ie.length;tt++){var ft=document.createElement("option");ft.value=ie[tt].id,ft.textContent=ie[tt].name,ie[tt].id===Oe&&(ft.selected=!0),_e.appendChild(ft)}_e.addEventListener("change",function(){try{WandNative.setNotificationSound(_e.value)}catch{}}),De&&De.addEventListener("click",function(){try{WandNative.previewSound(_e.value)}catch{}})}catch{}}}if(Re&&typeof WandNative.isHapticEnabled=="function"){var yt=document.getElementById("native-haptic-section"),st=document.getElementById("cfg-haptic-enabled");if(yt&&st){yt.classList.remove("hidden");try{st.checked=WandNative.isHapticEnabled()}catch{}st.addEventListener("change",function(){try{WandNative.setHapticEnabled(st.checked)}catch{}st.checked&&rr("medium")})}}var Pe=document.getElementById("topbar-new-session-button");Pe&&Pe.addEventListener("click",ma);var zt=document.getElementById("drawer-new-session-button");zt&&zt.addEventListener("click",ma);var xn=document.getElementById("close-modal-button");xn&&xn.addEventListener("click",un);var pt=document.getElementById("close-worktree-merge-button");pt&&pt.addEventListener("click",Qn);var en=document.getElementById("worktree-merge-cancel-button");en&&en.addEventListener("click",Qn);var tn=document.getElementById("worktree-merge-confirm-button");tn&&tn.addEventListener("click",Zu);var Mt=document.getElementById("run-button");Mt&&Mt.addEventListener("click",bf);var wt=document.getElementById("approve-permission-btn");wt&&wt.addEventListener("click",Cv);var Sn=document.getElementById("deny-permission-btn");Sn&&Sn.addEventListener("click",Tv);var nn=document.getElementById("auto-approve-toggle");nn&&nn.addEventListener("click",Lv);var ir=document.getElementById("send-input-button");ir&&ir.addEventListener("click",function(){jt(),Kf()});var ar=document.getElementById("stop-button");ar&&ar.addEventListener("click",Pa);var sr=document.getElementById("session-modal");sr&&sr.addEventListener("click",function(h){h.target.id==="session-modal"&&un(),h.target.id==="worktree-merge-modal"&&Qn()});var fe=document.getElementById("input-box");fe&&(ml(fe),fe.addEventListener("keydown",Cf),fe.addEventListener("paste",Of),fe.addEventListener("input",function(){r.terminalComposing||jo(fe)||(Zp(fe),it(fe.value,!0),fi(fe))}),fe.addEventListener("compositionstart",function(){r.terminalInteractive&&(r.terminalComposing=!0)}),fe.addEventListener("compositionend",function(){r.terminalComposing&&(r.terminalComposing=!1,r.terminalInteractive&&jo(fe))}),fe.addEventListener("focus",function(){jt(),Kp({target:fe})}),fe.addEventListener("blur",Jp));var ot=document.getElementById("attach-btn"),ee=document.getElementById("file-upload-input"),Te=document.getElementById("composer-plus-popover"),Le=document.getElementById("plus-attach-item");ot&&Te&&ot.addEventListener("click",function(h){h.stopPropagation(),Wu()}),Le&&ee&&Le.addEventListener("click",function(){di(),ee.click()}),ee&&ee.addEventListener("change",function(){var h=ee.files;if(h)for(var C=0;C<h.length;C++)ya(h[C]);ee.value=""});var kt=document.getElementById("voice-btn");kt&&kt.addEventListener("click",function(){Ea()});var vt=document.getElementById("voice-cancel-btn");vt&&vt.addEventListener("click",function(){Ea(!1)});var pe=document.getElementById("voice-record-btn");pe&&(pe.addEventListener("pointerdown",Nf),pe.addEventListener("pointermove",Rf),pe.addEventListener("pointerup",Fo),pe.addEventListener("pointercancel",Fo));var nt=document.getElementById("prompt-optimize-btn");nt&&nt.addEventListener("click",function(){Hf()});var xt=document.querySelector(".input-composer");xt&&(xt.addEventListener("dragover",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.add("drag-over")}),xt.addEventListener("dragleave",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.remove("drag-over")}),xt.addEventListener("drop",function(h){h.preventDefault(),h.stopPropagation(),xt.classList.remove("drag-over");var C=h.dataTransfer&&h.dataTransfer.files;if(C)for(var j=0;j<C.length;j++)ya(C[j])}));var or=["terminal-interactive-toggle-top"];or.forEach(function(h){var C=document.getElementById(h);C&&C.addEventListener("click",Bp)});var F=document.getElementById("pwa-install-button");F&&F.addEventListener("click",function(){r.deferredPrompt&&(r.deferredPrompt.prompt(),r.deferredPrompt.userChoice.then(function(){r.deferredPrompt=null,r.showInstallPrompt=!1,gs()}))});var D=document.getElementById("file-panel-toggle-btn");D&&D.addEventListener("click",Zr);var G=document.getElementById("file-side-panel-close");G&&G.addEventListener("click",qs);var me=document.getElementById("file-panel-backdrop");me&&me.addEventListener("click",qs);var Be=document.getElementById("topbar-file-button");Be&&Be.addEventListener("click",Zr);var At=document.getElementById("topbar-cwd");At&&(At.addEventListener("click",function(){r.filePanelOpen||Zr()}),At.addEventListener("keydown",function(h){(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),r.filePanelOpen||Zr())}));var lr=document.getElementById("topbar-more-button"),qi=document.getElementById("topbar-more-menu");lr&&qi&&(lr.addEventListener("click",function(h){h.stopPropagation(),r.topbarMoreOpen=!r.topbarMoreOpen,qi.classList.toggle("hidden",!r.topbarMoreOpen),lr.classList.toggle("active",r.topbarMoreOpen),lr.setAttribute("aria-expanded",r.topbarMoreOpen?"true":"false")}),qi.addEventListener("click",function(h){var C=h.target&&h.target.closest?h.target.closest(".topbar-more-item"):null;if(C){var j=C.getAttribute("data-action");switch(r.topbarMoreOpen=!1,qi.classList.add("hidden"),lr.classList.remove("active"),lr.setAttribute("aria-expanded","false"),j){case"copy-claude-session-id":ra("claudeSessionId",ye()&&ye().provider==="codex"?"Codex thread ID \u5DF2\u590D\u5236":"Claude \u4F1A\u8BDD ID \u5DF2\u590D\u5236");break;case"copy-cwd":ra("cwd","\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u590D\u5236");break;case"copy-session-id":ra("id","\u4F1A\u8BDD ID \u5DF2\u590D\u5236");break;case"worktree-merge":r.selectedId&&Co(r.selectedId);break;case"worktree-cleanup":r.selectedId&&To(r.selectedId);break;case"delete-session":r.selectedId&&(function(ke){Fn("\u786E\u5B9A\u8981\u5220\u9664\u5F53\u524D\u4F1A\u8BDD\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u5F53\u524D\u4F1A\u8BDD"}).then(function(St){St&&ol(ke)})})(r.selectedId);break}}}));var cc=document.getElementById("terminal-scale-down-top"),dc=document.getElementById("terminal-scale-up-top");cc&&cc.addEventListener("click",function(){Os(-.25)}),dc&&dc.addEventListener("click",function(){Os(.25)});var uc=document.getElementById("page-refresh-btn");uc&&uc.addEventListener("click",function(h){if(h&&h.shiftKey){location.reload();return}An(),It({preserveStickState:!0}),Nr(!0)});var fc=document.getElementById("terminal-jump-bottom");fc&&fc.addEventListener("click",function(){gt("force")});var pc=document.getElementById("chat-unread-bubble");pc&&pc.addEventListener("click",function(){Lc(!0)});var vc=document.getElementById("file-explorer-refresh");vc&&vc.addEventListener("click",function(){Pt()});var mc=document.getElementById("file-explorer-up");mc&&mc.addEventListener("click",Od);var ze=document.getElementById("file-explorer-cwd");if(ze&&ze.tagName==="INPUT"){var cr=ze.value,gc=function(h){var C=(h||"").trim();return C?(C=C.replace(/\/{2,}/g,"/"),C.length>1&&(C=C.replace(/\/+$/,"")),C):""};ze.addEventListener("focus",function(){cr=ze.value,setTimeout(function(){try{ze.select()}catch{}},0)}),ze.addEventListener("keydown",function(h){if(h.key==="Enter"){h.preventDefault();var C=gc(ze.value);if(!C)return;cr=C,ze.value=C,Pt({cwd:C}),ze.blur()}else h.key==="Escape"&&(h.preventDefault(),ze.value=cr,ze.blur())}),ze.addEventListener("blur",function(){var h=gc(ze.value);if(!h){ze.value=cr;return}if(h===cr){ze.value=h;return}cr=h,ze.value=h,Pt({cwd:h})})}var Oi=document.getElementById("file-search-input"),zr=document.getElementById("file-search-clear");Oi&&Oi.addEventListener("input",function(h){r.fileSearchQuery=h.target.value.trim(),zr&&zr.classList.toggle("visible",r.fileSearchQuery.length>0),Ds()}),zr&&zr.addEventListener("click",function(){r.fileSearchQuery="",Oi&&(Oi.value=""),zr.classList.remove("visible")});var ge=document.getElementById("folder-picker-input"),Me=document.getElementById("folder-picker-dropdown"),as=null,Ut=-1,En=[];function hc(h){ge&&ge.classList.add("invalid");var C=document.getElementById("folder-picker-validation");C&&(C.textContent=h,C.classList.add("visible"))}function bc(){ge&&ge.classList.remove("invalid");var h=document.getElementById("folder-picker-validation");h&&(h.textContent="",h.classList.remove("visible"))}function Im(h){if(!h.length)return"";var C='<div class="folder-recent-section"><div class="folder-recent-title">\u6700\u8FD1\u4F7F\u7528</div>';return h.forEach(function(j){var ke=j.path||j;C+='<div class="folder-recent-item" data-path="'+p(ke)+'"><span class="folder-recent-item-path">'+p(ke)+"</span></div>"}),C+="</div>",C}function Cm(){Me&&ta(function(h){var C=Im(h);C?(Me.innerHTML=C,Me.classList.remove("hidden"),Me.querySelectorAll(".folder-recent-item").forEach(function(j){j.addEventListener("click",function(){var ke=this.dataset.path;ge&&(ge.value=ke,Gt(ke),rn(ke))})})):Ur()})}var yc=document.getElementById("working-dir-indicator");yc&&yc.addEventListener("click",function(){r.selectedId=null,be(),r.drafts={},Yt(),setTimeout(function(){var h=document.getElementById("folder-picker-input");h&&h.focus()},50)});var ss=document.getElementById("folder-picker-toggle"),Me=document.getElementById("folder-picker-dropdown");ss&&Me&&ss.addEventListener("click",function(){Me.classList.toggle("hidden"),ss.classList.toggle("open")});var Pi=document.querySelector(".folder-picker-compact");if(Pi&&(Pi.addEventListener("dragover",function(h){h.preventDefault(),h.stopPropagation(),this.classList.add("drag-over")}),Pi.addEventListener("dragleave",function(h){h.preventDefault(),h.stopPropagation(),this.classList.remove("drag-over")}),Pi.addEventListener("drop",function(h){h.preventDefault(),h.stopPropagation(),this.classList.remove("drag-over");var C=h.dataTransfer&&h.dataTransfer.items;if(C)for(var j=0;j<C.length;j++){var ke=C[j];if(ke.kind==="file"&&ke.webkitGetAsEntry){var St=ke.webkitGetAsEntry();if(St&&St.isDirectory&&ge){var qt=St.fullPath;ge.value=qt,Gt(qt),rn(qt);break}}}})),Me&&Me.addEventListener("click",function(h){var C=h.target.closest(".folder-picker-quick-btn");if(C&&ge){var j=C.dataset.path;ge.value=j,Gt(j),rn(j),Me.classList.add("hidden");var ke=document.getElementById("folder-picker-toggle");ke&&ke.classList.remove("open")}}),ge){var Tm=Ge();rn(Tm),ge.addEventListener("focus",function(){var h=this.value.trim();h?rn(h):Cm()}),ge.addEventListener("input",function(h){var C=h.target.value.trim();Ut=-1,as&&clearTimeout(as),as=setTimeout(function(){C?rn(C):Ur()},150)}),ge.addEventListener("keydown",function(h){if(h.key==="Escape")Ur(),this.blur();else if(h.key==="ArrowDown")h.preventDefault(),En.length>0&&(Ut=Math.min(Ut+1,En.length-1),wc());else if(h.key==="ArrowUp")h.preventDefault(),Ut>0&&(Ut--,wc());else if(h.key==="Enter"&&Ut>=0){h.preventDefault();var C=En[Ut];if(C){var j=C.dataset.path;if(j===".."){var ke=ge.value.trim(),St=ke.substring(0,ke.lastIndexOf("/"));St&&(ge.value=St||"/",Gt(ge.value),rn(St||"/"))}else ge.value=j,Gt(j),Ur()}}})}function wc(){En.forEach(function(h,C){h.classList.toggle("active",C===Ut)})}function rn(h){Me&&(Me.innerHTML='<div class="folder-picker-loading">\u52A0\u8F7D\u4E2D...</div>',Me.classList.remove("hidden"),Ut=-1,En=[],fetch("/api/folders?q="+encodeURIComponent(h),{credentials:"same-origin"}).then(function(C){return C.json().then(function(j){return{ok:C.ok,status:C.status,data:j}})}).then(function(C){var j=C.data;if(!C.ok||j.error){hc(j.error||"\u8DEF\u5F84\u65E0\u6548"),Me.innerHTML='<div class="folder-picker-error">'+p(j.error||"\u8DEF\u5F84\u65E0\u6548")+"</div>";return}bc(),renderBreadcrumb(j.currentPath||h);var ke=j.items||[],St=j.currentPath||h;if(ke.length===0){Me.innerHTML='<div class="folder-picker-loading">\u7A7A\u76EE\u5F55</div>';return}Me.innerHTML=ke.map(function(qt){var Hi=qt.type==="parent"?"\u21A9\uFE0F":"\u{1F4C1}",os=qt.type==="parent"?".. (\u8FD4\u56DE\u4E0A\u7EA7)":qt.name;return'<div class="folder-picker-item" data-path="'+p(qt.path)+'" data-type="'+qt.type+'"><span class="folder-picker-item-icon">'+Hi+"</span><span>"+p(os)+"</span></div>"}).join(""),En=Array.from(Me.querySelectorAll(".folder-picker-item")),En.forEach(function(qt){qt.addEventListener("click",function(){var Hi=this.dataset.path,os=this.dataset.type;if(ge)if(os==="parent"){var Ec=ge.value.trim(),Ic=Ec.substring(0,Ec.lastIndexOf("/"));ge.value=Ic||"/",Gt(ge.value),rn(Ic||"/")}else ge.value=Hi,Gt(Hi),bc(),Ur()})})}).catch(function(C){hc("\u52A0\u8F7D\u5931\u8D25"),Me.innerHTML='<div class="folder-picker-error">\u52A0\u8F7D\u5931\u8D25</div>'}))}function Ur(){Me&&Me.classList.add("hidden"),Ut=-1,En=[]}var In=document.getElementById("folder-picker-modal"),kc=document.getElementById("close-folder-picker");function og(){if(In){In.classList.remove("hidden"),ge&&(ge.value=Ge());var h=Ge();rn(h),renderBreadcrumb(h)}}kc&&In&&kc.addEventListener("click",function(){In.classList.add("hidden")}),In&&In.addEventListener("click",function(h){h.target===In&&In.classList.add("hidden")});var xc=document.getElementById("topbar-git-badge");xc&&xc.addEventListener("click",function(h){h.preventDefault(),bs()});var Sc=document.getElementById("quick-commit-modal");Sc&&Sc.addEventListener("click",function(h){h.target.id==="quick-commit-modal"&&!r.quickCommitSubmitting&&jn()}),ys(),Jn(),tv(),sv(),rp(),Bt()}function Gt(e){r.workingDir=e;try{localStorage.setItem("wand-working-dir",e)}catch{}ru(e)}function ta(e){fetch("/api/recent-paths",{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){e(t||[])}).catch(function(){e([])})}function ru(e){return fetch("/api/recent-paths",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({path:e})}).catch(function(){})}function na(e){var t=r.sessions.find(function(n){return n.id===e});t&&t.status!=="running"&&!se(t)?fl(e):Dt(e),jt()}function iu(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest(".sidebar-collapsed-tile");if(n&&n instanceof HTMLElement){if(n.dataset.collapsedNewSession){e.preventDefault(),e.stopPropagation(),ma();return}if(n.dataset.collapsedSessionId){e.preventDefault(),e.stopPropagation(),na(n.dataset.collapsedSessionId);return}if(n.dataset.collapsedHistoryId){e.preventDefault(),e.stopPropagation();var i=n.dataset.collapsedHistoryId,a=n.dataset.cwd||"";bi(i,a).then(function(v){v&&v.id&&(r.selectedId=v.id,be(),r.drafts[v.id]="",cn().then(function(){Dt(v.id)}))});return}}var s=t.closest("#claude-history-toggle");if(s){e.preventDefault(),e.stopPropagation(),r.claudeHistoryExpanded=!r.claudeHistoryExpanded,r.claudeHistoryExpanded&&!r.claudeHistoryLoaded&&Xr(),ve();return}var o=t.closest("[data-action]");if(o&&o instanceof HTMLElement){if(e.preventDefault(),e.stopPropagation(),o.dataset.action==="toggle-manage-mode")pd();else if(o.dataset.action==="select-all-visible")Ts();else if(o.dataset.action==="clear-selection")md();else if(o.dataset.action==="delete-selected")gd();else if(o.dataset.action==="toggle-selection")gr(o.dataset.kind,o.dataset.id);else if(o.dataset.action==="delete-session"&&o.dataset.sessionId)(function(v){Fn("\u786E\u8BA4\u5220\u9664\u8FD9\u4E2A\u4F1A\u8BDD\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",{title:"\u5220\u9664\u4F1A\u8BDD"}).then(function(m){m&&ol(v)})})(o.dataset.sessionId);else if(o.dataset.action==="delete-history"&&o.dataset.claudeSessionId)(function(v,m){Fn("\u786E\u8BA4\u9690\u85CF\u8FD9\u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u9690\u85CF\u5386\u53F2\u4F1A\u8BDD",okLabel:"\u9690\u85CF"}).then(function(y){y&&ll(v,m)})})(o.dataset.claudeSessionId,o.closest(".session-item"));else if(o.dataset.action==="toggle-history-directory"&&o.dataset.cwd){var l=o.dataset.cwd;r.claudeHistoryExpandedDirs[l]=!r.claudeHistoryExpandedDirs[l],ve()}else if(o.dataset.action==="delete-history-directory"&&o.dataset.cwd)(function(v,m){var y=jp(v),g=Rn().filter(function(b){return b.cwd===v}).length;Fn("\u786E\u8BA4\u6E05\u7A7A\u6B64\u76EE\u5F55\u4E0B\u7684 "+g+" \u6761 Claude \u5386\u53F2\u5417\uFF1F",{title:"\u6E05\u7A7A\u76EE\u5F55\u5386\u53F2",okLabel:"\u6E05\u7A7A"}).then(function(b){b&&(cl(y,!0),Dp(v,m,y))})})(o.dataset.cwd,o);else if(o.dataset.action==="clear-all-history")hd();else if(o.dataset.action==="toggle-archived-group")r.archivedExpanded=!r.archivedExpanded,ve();else if(o.dataset.action==="resume"&&o.dataset.sessionId)Fp(o);else if(o.dataset.action==="resume-history"&&o.dataset.claudeSessionId)Vp(o);else if(o.dataset.action==="resume-codex-history"&&o.dataset.claudeSessionId)Wp(o);else if(o.dataset.action==="delete-codex-history"&&o.dataset.claudeSessionId)Up(o);else if(o.dataset.action==="toggle-codex-history-directory"&&o.dataset.cwd){var c=o.dataset.cwd;r.codexHistoryExpandedDirs[c]=!r.codexHistoryExpandedDirs[c],ve()}else o.dataset.action==="worktree-merge"&&o.dataset.sessionId?Co(o.dataset.sessionId):o.dataset.action==="worktree-cleanup"&&o.dataset.sessionId&&To(o.dataset.sessionId);return}var d=t.closest(".session-item");if(d){if(r.sessionsManageMode){d.dataset.sessionId?gr("sessions",d.dataset.sessionId):d.dataset.claudeHistoryId&&gr("history",d.dataset.claudeHistoryId);return}if(d.classList.contains("swiped")){Pr();return}if(dl)return;if(d.dataset.sessionId)na(d.dataset.sessionId);else if(d.dataset.claudeHistoryId){var u=d.dataset.claudeHistoryId,f=d.dataset.cwd;bi(u,f).then(function(v){v&&v.id&&(r.selectedId=v.id,be(),r.drafts[v.id]="",cn().then(function(){Dt(v.id),jt()}))})}}}}function au(e){if(!(e.key!=="Enter"&&e.key!==" ")){var t=e.target.closest(".session-item");if(t){if(e.preventDefault(),r.sessionsManageMode){t.dataset.sessionId?gr("sessions",t.dataset.sessionId):t.dataset.claudeHistoryId&&gr("history",t.dataset.claudeHistoryId);return}if(t.dataset.sessionId)na(t.dataset.sessionId);else if(t.dataset.claudeHistoryId){var n=t.dataset.claudeHistoryId,i=t.dataset.cwd;bi(n,i).then(function(a){a&&a.id&&(r.selectedId=a.id,be(),r.drafts[a.id]="",cn().then(function(){Dt(a.id),jt()}))})}}}}function ra(e,t){var n=r.sessions.find(function(a){return a.id===r.selectedId});if(n){var i=n[e];if(!i){T("\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9\u3002","error");return}Tr(String(i),null,function(){T(t||"\u5DF2\u590D\u5236","info")})}}function Tt(){return!r.terminal||!r.terminal.element?null:(r.terminalViewportEl=r.terminal.element,r.terminalViewportEl)}function Vn(){r.terminalScrollIdleTimer&&(clearTimeout(r.terminalScrollIdleTimer),r.terminalScrollIdleTimer=null)}function lt(){var e=document.getElementById("terminal-jump-bottom"),t=!!r.selectedId&&r.currentView==="terminal"&&!r.terminalAutoFollow&&!eo();r.showTerminalJumpToBottom=t,e&&e.classList.toggle("visible",t);var n=document.getElementById("output");n&&n.classList.toggle("has-jump-btn",t)}function ia(){var e=Tt();if(!e)return!0;var t=e.scrollHeight-e.clientHeight-e.scrollTop;return t<=r.terminalScrollThreshold}function eo(){var e=Tt();if(!e)return!0;var t=e.scrollHeight-e.clientHeight-e.scrollTop;return t<=2}function to(e){if(r.terminal){var t=Tt();if(t){var n=e?500:120;r.terminalProgrammaticScrollUntil=Math.max(r.terminalProgrammaticScrollUntil,Date.now()+n),e?t.scrollTo({top:t.scrollHeight,behavior:"smooth"}):t.scrollTop=t.scrollHeight}}}function aa(){r.terminalAutoFollow=!1,Vn(),r.terminalProgrammaticScrollUntil=0,r.terminal&&"_shouldScrollToBottom"in r.terminal&&(r.terminal._shouldScrollToBottom=!1),lt()}function gt(e){if(r.terminal){var t=e==="force";if(t){r.terminalAutoFollow=!0,Vn(),to(!1),lt();return}if(!r.terminalAutoFollow){lt();return}to(!1),lt()}}function su(e){var t=document.createElement("div");t.className="terminal-scrollbar";var n=document.createElement("div");n.className="terminal-scrollbar-track";var i=document.createElement("div");i.className="terminal-scrollbar-thumb",n.appendChild(i),t.appendChild(n),e.appendChild(t),r.terminalScrollbarEl=t,r.terminalScrollbarThumbEl=i,r.terminalScrollbarHideTimer=null,r.terminalScrollbarDragging=!1,r.terminalScrollbarRafPending=!1;function a(){r.terminalScrollbarHideTimer&&(clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=null),t.classList.add("visible")}function s(){r.terminalScrollbarDragging||(r.terminalScrollbarHideTimer&&clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=setTimeout(function(){r.terminalScrollbarHideTimer=null,r.terminalScrollbarDragging||t.classList.remove("visible")},1500))}function o(){r.terminalScrollbarRafPending=!1;var g=Tt();if(g){var b=g.scrollHeight,w=g.clientHeight;if(b<=w){t.classList.remove("visible");return}var k=n.clientHeight,E=Math.max(28,w/b*k),L=b-w,S=g.scrollTop/L,M=S*(k-E);i.style.height=E+"px",i.style.top=M+"px"}}function l(){r.terminalScrollbarRafPending||(r.terminalScrollbarRafPending=!0,requestAnimationFrame(o))}var c=Tt();c&&c.addEventListener("scroll",function(){a(),l(),s()},{passive:!0}),n.addEventListener("mousedown",function(g){if(g.target!==i){g.preventDefault();var b=Tt();if(b){var w=n.getBoundingClientRect(),k=(g.clientY-w.top)/w.height,E=b.scrollHeight-b.clientHeight;b.scrollTop=k*E}}});var d=0,u=0;i.addEventListener("mousedown",function(g){g.preventDefault(),g.stopPropagation(),r.terminalScrollbarDragging=!0,i.classList.add("dragging"),d=g.clientY;var b=Tt();u=b?b.scrollTop:0,document.addEventListener("mousemove",f),document.addEventListener("mouseup",v)});function f(g){g.preventDefault();var b=Tt();if(b){var w=n.clientHeight,k=b.scrollHeight,E=b.clientHeight,L=k-E;if(!(L<=0)){var S=Math.max(28,E/k*w),M=w-S;if(!(M<=0)){var _=g.clientY-d,W=_/M*L;b.scrollTop=u+W}}}}function v(){r.terminalScrollbarDragging=!1,i.classList.remove("dragging"),document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",v),s()}i.addEventListener("touchstart",function(g){if(g.touches.length===1){g.stopPropagation(),r.terminalScrollbarDragging=!0,i.classList.add("dragging"),d=g.touches[0].clientY;var b=Tt();u=b?b.scrollTop:0,document.addEventListener("touchmove",m,{passive:!1}),document.addEventListener("touchend",y),document.addEventListener("touchcancel",y)}},{passive:!1});function m(g){if(g.touches.length===1){g.preventDefault();var b=Tt();if(b){var w=n.clientHeight,k=b.scrollHeight,E=b.clientHeight,L=k-E;if(!(L<=0)){var S=Math.max(28,E/k*w),M=w-S;if(!(M<=0)){var _=g.touches[0].clientY-d,W=_/M*L;b.scrollTop=u+W}}}}}function y(){r.terminalScrollbarDragging=!1,i.classList.remove("dragging"),document.removeEventListener("touchmove",m),document.removeEventListener("touchend",y),document.removeEventListener("touchcancel",y),s()}t.addEventListener("mouseenter",function(){a()}),t.addEventListener("mouseleave",function(){r.terminalScrollbarDragging||s()}),l()}function ou(e){return e<4352?!1:e>=4352&&e<=4447||e>=9001&&e<=9002||e>=11904&&e<=12350||e>=12353&&e<=13311||e>=13312&&e<=19903||e>=19968&&e<=40959||e>=40960&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=126976&&e<=129535||e>=131072&&e<=196605||e>=196608&&e<=262141}var no="\u2060";function ro(){return{mode:"normal"}}function lu(e){return!/[^\x00-\x7f]/.test(e)&&e.indexOf("\x1B")===-1}function cu(e,t){if(!e)return"";var n=String(e);if(t.mode==="normal"&&lu(n))return n;for(var i="",a=0;a<n.length;a++){var s=n.charCodeAt(a),o=s,l=1;if(s>=55296&&s<=56319&&a+1<n.length){var c=n.charCodeAt(a+1);c>=56320&&c<=57343&&(o=(s-55296)*1024+(c-56320)+65536,l=2)}var d=l===2?n.substr(a,2):n.charAt(a);switch(t.mode){case"normal":o===27?(t.mode="esc",i+=d):o===155?(t.mode="csi",i+=d):o===157||o===144||o===158||o===159?(t.mode="string",i+=d):(i+=d,ou(o)&&(i+=no));break;case"esc":i+=d,o===91?t.mode="csi":o===93||o===80||o===88||o===94||o===95?t.mode="string":t.mode="normal";break;case"csi":i+=d,o>=64&&o<=126&&(t.mode="normal");break;case"string":i+=d,o===7||o===156?t.mode="normal":o===27&&(t.mode="string-esc");break;case"string-esc":i+=d,o===92?t.mode="normal":t.mode="string";break}a+=l-1}return i}var ti="\x1B[?2026h",sa="\x1B[?2026l",du=200,uu=256*1024;function fu(e){if(!e||r.syncOutputBuffer===null&&e.indexOf(ti)===-1)return e;for(var t="",n=0;n<e.length;)if(r.syncOutputBuffer!==null){var i=e.indexOf(sa,n);if(i===-1)return r.syncOutputBuffer+=e.slice(n),(r.syncOutputBuffer.length>uu||Date.now()>r.syncOutputDeadline)&&(t+=r.syncOutputBuffer,r.syncOutputBuffer=null,r.syncFramingResidue=!0),t;r.syncOutputBuffer+=e.slice(n,i+sa.length),t+=r.syncOutputBuffer,r.syncOutputBuffer=null,n=i+sa.length}else{var a=e.indexOf(ti,n);if(a===-1)return t+=e.slice(n),t;t+=e.slice(n,a),r.syncOutputBuffer=ti,r.syncOutputDeadline=Date.now()+du,n=a+ti.length}return t}function Dm(){if(r.syncOutputBuffer!==null){var e=r.syncOutputBuffer;return r.syncOutputBuffer=null,e}return""}function Kn(e,t){if(!(!e||t==null)){r.wideParserState||(r.wideParserState=ro());var n=cu(t,r.wideParserState),i=fu(n),a=r.terminalAutoFollow!==!1;"_shouldScrollToBottom"in e&&(e._shouldScrollToBottom=a),i&&e.write(i),"_shouldScrollToBottom"in e&&(e._shouldScrollToBottom=a),a&&(r.terminalProgrammaticScrollUntil=Math.max(r.terminalProgrammaticScrollUntil,Date.now()+120)),Eu(t)}}function oa(){r.wideParserState=ro()}function pu(){typeof document>"u"||document.addEventListener("copy",function(e){var t=window.getSelection&&window.getSelection();if(!(!t||t.isCollapsed)){var n=t.anchorNode,i=n&&n.nodeType===3?n.parentNode:n,a=document.getElementById("output");if(!(!a||!i||!a.contains(i))){var s=t.toString(),o=s.split(`
|
|
19
19
|
`).map(function(l){return l.split(no).join("").replace(/[ \t]+$/,"")}).join(`
|
|
20
|
-
`);o!==s&&e.clipboardData&&(e.clipboardData.setData("text/plain",o),e.preventDefault())}}})}
|
|
21
|
-
`);r.terminalClickHandler=function(c){gi()||Ft(c)},e.addEventListener("click",r.terminalClickHandler),lt(),lv(),uv(),yv(),wv(),at("mount",{forceReplay:!0})}).catch(function(l){r.terminalInitializing=!1,console.error("[wand] wterm init failed:",l)})}}function da(){if(!r.loginPending){var e=document.getElementById("password"),t=document.getElementById("login-button"),n=document.getElementById("login-error");!e||!t||!n||(Li(n),e.dataset.error="false",e.setAttribute("aria-invalid","false"),r.loginPending=!0,t.disabled=!0,t.textContent="\u767B\u5F55\u4E2D...",fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e.value}),credentials:"same-origin"}).then(function(i){return i.ok?fetch("/api/config",{credentials:"same-origin"}):(e.dataset.error="true",e.setAttribute("aria-invalid","true"),Ke(n,"\u5BC6\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5\u3002"),Promise.reject("Invalid password"))}).then(function(i){return i.json()}).then(function(i){r.config=i;var a=document.getElementById("status-dot"),s=document.getElementById("status-text");return a&&a.classList.add("active"),s&&(s.textContent="\u5DF2\u767B\u5F55"),Ht()}).then(function(){Ml(),Yt()}).catch(function(i){console.error("[wand] Login error:",i),i!=="Invalid password"&&(e.dataset.error="true",e.setAttribute("aria-invalid","true"),Ke(n,"\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"))}).finally(function(){r.loginPending=!1,t.disabled=!1,t.textContent="\u8FDB\u5165\u63A7\u5236\u53F0"}))}}function ca(){return typeof WandNative<"u"&&typeof WandNative.switchServer=="function"}function so(){if(ca())try{WandNative.switchServer()}catch{}}function oo(){fetch("/api/logout",{method:"POST",credentials:"same-origin"}).catch(function(){}),_l(),On(!1),Aa(),Dr(),r.config=null,r.selectedId=null,ye(),r.sessions=[],r.claudeHistory=[],r.claudeHistoryLoaded=!1,r.claudeHistoryExpanded=!1,r.claudeHistoryExpandedDirs={},r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Yt()}function Ht(){return dn()}function lo(e){return e==="full-access"?"\u5168\u6743\u9650":e==="default"?"\u9ED8\u8BA4":e==="native"?"\u539F\u751F":e==="auto-edit"?"\u81EA\u52A8\u7F16\u8F91":e==="managed"?"\u6258\u7BA1":e}function ht(){return r.sessionTool||r.preferredCommand||"claude"}function Tu(){var e=r.sessions.find(function(t){return t.id===r.selectedId});return e&&e.provider||r.preferredCommand||"claude"}function co(e,t){return t?"\u7EC8\u7AEF\u4EA4\u4E92\u4E2D":e&&(e.status==="exited"||e.status==="failed"||e.status==="stopped")?Ta(e)?"":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F":ae(e)&&e.structuredState&&e.structuredState.inFlight?"\u56DE\u590D\u4E2D\u2026Enter \u6392\u961F \xB7 \u26A1 \u7ACB\u5373\u53D1\u9001":""}function uo(e,t){return e==="codex"?"Codex \u652F\u6301 PTY \u7EC8\u7AEF\u4E0E\u7ED3\u6784\u5316\uFF08JSONL\uFF09\u4E24\u79CD\u4F1A\u8BDD\uFF0C\u7ED3\u6784\u5316\u6A21\u5F0F\u6309 full-access \u542F\u52A8\u3002":t==="full-access"?"\u81EA\u52A8\u786E\u8BA4\u6743\u9650\u8BF7\u6C42\u4E0E\u9AD8\u6743\u9650\u64CD\u4F5C\uFF0C\u9002\u5408\u4F60\u786E\u8BA4\u73AF\u5883\u5B89\u5168\u540E\u7684\u8FDE\u7EED\u4FEE\u6539\u3002":t==="auto-edit"?"\u4FDD\u7559\u4EA4\u4E92\u5F0F\u4F1A\u8BDD\uFF0C\u540C\u65F6\u66F4\u504F\u5411\u76F4\u63A5\u7F16\u8F91\u4EE3\u7801\u3002":t==="native"?"\u8C03\u7528 Claude \u539F\u751F API \u8F93\u51FA\uFF0C\u9002\u5408\u5FEB\u901F\u95EE\u7B54\u6216\u4E00\u6B21\u6027\u751F\u6210\u3002":t==="managed"?"AI \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u5DE5\u4F5C\uFF0C\u65E0\u9700\u4E2D\u9014\u786E\u8BA4\uFF0C\u9002\u5408\u6709\u660E\u786E\u76EE\u6807\u7684\u4EFB\u52A1\u3002":"\u4FDD\u7559\u6807\u51C6\u4EA4\u4E92\u6D41\u7A0B\uFF0C\u9002\u5408\u624B\u52A8\u786E\u8BA4\u6BCF\u4E00\u6B65\u3002"}function ua(e){return e==="codex"?["full-access"]:["default","full-access","auto-edit","native","managed"]}function _t(e,t){var n=ua(e);if(n.indexOf(t)!==-1)return t;var i=r.config&&r.config.defaultMode?r.config.defaultMode:"default";return n.indexOf(i)!==-1?i:n[0]}function Nm(e,t){return ua(e).map(function(n){var i=fo(n);return'<option value="'+p(n)+'"'+(n===t?" selected":"")+' title="'+i+'">'+p(lo(n))+"</option>"}).join("")}function fo(e){var t={default:"\u6807\u51C6\u6A21\u5F0F - \u9700\u8981\u786E\u8BA4\u6587\u4EF6\u4FEE\u6539","full-access":"\u5B8C\u5168\u8BBF\u95EE - \u81EA\u52A8\u786E\u8BA4\u6743\u9650\u4E0E\u64CD\u4F5C","auto-edit":"\u81EA\u52A8\u7F16\u8F91 - \u81EA\u52A8\u786E\u8BA4\u6587\u4EF6\u4FEE\u6539",native:"\u539F\u751F\u6A21\u5F0F - \u8FD4\u56DE\u7ED3\u6784\u5316\u8F93\u51FA",managed:"\u6258\u7BA1\u6A21\u5F0F - AI \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u5DE5\u4F5C"};return t[e]||""}function Lu(e){var t=e&&e.provider?e.provider:"claude";return(ae(e)?"\u7ED3\u6784\u5316":"\u7EC8\u7AEF")+" \xB7 "+t}function Bu(e){return ae(e)?"\u7ED3\u6784\u5316 \xB7 \u5757\u7EA7\u8BB0\u5F55":e&&e.provider==="codex"?"\u7EC8\u7AEF \xB7 Codex PTY\uFF08chat \u4E3A\u89E3\u6790\u89C6\u56FE\uFF09":"\u7EC8\u7AEF \xB7 PTY \u4F1A\u8BDD"}function Mu(e){return e?ae(e)||e.provider==="codex":!1}function po(e,t){if(!e||!e.is_error||!t||t.is_error)return!1;var n=bn(e.content).toLowerCase(),i=bn(t.content).toLowerCase();return n?n.indexOf("invalid pages parameter")!==-1&&i.length>0:!1}function ae(e){return!!e&&(e.sessionKind==="structured"||e.runner==="claude-cli-print")}function oi(){r.chatMode=_t("claude",r.chatMode);var e=document.getElementById("mode-hint");e&&(e.textContent=fo(r.chatMode)),Yn()}function fa(e,t){t=t||{};var n=t.kind==="compact"||t.kind==="popover"?t.kind:"dropdown",i=ht(),a=r.chatMode||"default",s=mo(e)||"default",o=bo(e);function l(d,c,u,f){var v=n==="compact"?"":'<span class="chat-mode-trio-tag">'+p(c)+"</span>";return'<span class="composer-text-pill chat-mode-trio-pill" data-mode-control-pill="'+d+'" title="'+p(c)+'">'+v+'<span class="composer-text-label">'+p(u)+'</span><select class="composer-text-hidden-select" data-mode-control="'+d+'" tabindex="-1" aria-label="'+p(c)+'">'+f+"</select></span>"}return'<div class="chat-mode-trio chat-mode-trio-'+n+'" role="group" aria-label="\u4F1A\u8BDD\u8BBE\u7F6E">'+l("mode","\u6A21\u5F0F",a,vo(i,a))+'<span class="composer-text-sep" aria-hidden="true">\xB7</span>'+l("model","\u6A21\u578B",s,ho(s,e))+'<span class="composer-text-sep" aria-hidden="true">\xB7</span>'+l("thinking","\u601D\u8003",o,yo(o))+"</div>"}function Yn(){var e=we(),t=ht(),n=r.chatMode||"default",i=mo(e)||"default",a=bo(e),s=document.querySelectorAll(".chat-mode-trio");s.forEach(function(o){function l(d,c,u){var f=o.querySelector('[data-mode-control-pill="'+d+'"]');if(f){var v=f.querySelector(".composer-text-label");v&&(v.textContent=c);var m=f.querySelector('[data-mode-control="'+d+'"]');m&&(u&&(m.innerHTML=u),m.value!==c&&(m.value=c))}}l("mode",n,vo(t,n)),l("model",i,ho(i,e)),l("thinking",a,yo(a))})}function vo(e,t){return ua(e).map(function(n){return'<option value="'+p(n)+'"'+(n===t?" selected":"")+">"+p(n)+"</option>"}).join("")}function mo(e){return e&&e.selectedModel?e.selectedModel:r.chatModel?r.chatModel:r.config&&r.config.defaultModel?r.config.defaultModel:""}function go(e){var t=e&&e.provider||r.sessionTool||"claude";return t==="codex"?r.availableCodexModels||[]:r.availableModels||[]}function Au(e,t){for(var n=go(t),i='<option value="">\u9ED8\u8BA4\uFF08\u8DDF\u968F\u8BBE\u7F6E\uFF09</option>',a=0;a<n.length;a++){var s=n[a],o=s.label||s.id;i+='<option value="'+p(s.id)+'"'+(s.id===e?" selected":"")+">"+p(o)+"</option>"}return e&&!n.some(function(l){return l.id===e})&&(i+='<option value="'+p(e)+'" selected>'+p(e)+"\uFF08\u81EA\u5B9A\u4E49\uFF09</option>"),i}function ho(e,t){for(var n=go(t),i='<option value="">default</option>',a=0;a<n.length;a++){var s=n[a];i+='<option value="'+p(s.id)+'"'+(s.id===e?" selected":"")+">"+p(s.id)+"</option>"}return e&&!n.some(function(o){return o.id===e})&&(i+='<option value="'+p(e)+'" selected>'+p(e)+"</option>"),i}function Gn(e){Yn()}var ln=[{id:"off",label:"off",hint:"\u4E0D\u542F\u7528\u601D\u8003\uFF08CLI \u65E0\u524D\u7F00\uFF1BSDK \u5173\u95ED thinking\uFF1BCodex minimal\uFF09"},{id:"standard",label:"think",hint:"Claude CLI: think \xB7 SDK budget 4096 \xB7 Codex low"},{id:"deep",label:"think hard",hint:"Claude CLI: think hard \xB7 SDK budget 16000 \xB7 Codex medium"},{id:"max",label:"ultrathink",hint:"Claude CLI: ultrathink \xB7 SDK budget 31999 \xB7 Codex high"}];function qu(e){for(var t=0;t<ln.length;t++)if(ln[t].id===e)return ln[t].label;return ln[0].label}function bo(e){return e&&e.thinkingEffort?e.thinkingEffort:r.chatThinking?r.chatThinking:"off"}function Rm(e){for(var t=e||"off",n="",i=0;i<ln.length;i++){var a=ln[i];n+='<option value="'+p(a.id)+'"'+(a.id===t?" selected":"")+' title="'+p(a.hint)+'">'+p(a.label)+"</option>"}return n}function yo(e){for(var t=e||"off",n="",i=0;i<ln.length;i++){var a=ln[i];n+='<option value="'+p(a.id)+'"'+(a.id===t?" selected":"")+">"+p(a.id)+"</option>"}return n}function Fm(e){Yn()}function Ou(e){var t=(e||"off").trim();t!=="off"&&t!=="standard"&&t!=="deep"&&t!=="max"&&(t="off"),r.chatThinking=t;try{localStorage.setItem("wand-thinking-effort",t)}catch{}Yn();var n=we();n&&fetch("/api/sessions/"+encodeURIComponent(n.id)+"/thinking-effort",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({thinkingEffort:t})}).then(function(i){return i.json()}).then(function(i){if(i&&i.error){T(i.error,"error");return}i&&i.id&&($(i),typeof T=="function"&&T("\u5DF2\u5207\u6362\u601D\u8003\u6DF1\u5EA6 \u2192 "+qu(t),"success"))}).catch(function(){T("\u5207\u6362\u601D\u8003\u6DF1\u5EA6\u5931\u8D25","error")})}function wo(e){if(!e)return!1;var t=e.mode;return t==="managed"||t==="full-access"}function Pu(e){if(!e||wo(e))return"";var t=!!e.autoApprovePermissions;return t?'<span id="auto-approve-toggle" class="composer-pill composer-pill-chip auto-approve-indicator active" title="\u81EA\u52A8\u6279\u51C6\u5DF2\u542F\u7528 \u2014 \u70B9\u51FB\u5173\u95ED">'+J("shieldCheck",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u81EA\u52A8</span></span>':'<span id="auto-approve-toggle" class="composer-pill composer-pill-chip auto-approve-indicator" title="\u81EA\u52A8\u6279\u51C6\u5DF2\u5173\u95ED \u2014 \u70B9\u51FB\u5F00\u542F">'+J("shield",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u624B\u52A8</span></span>'}function ko(){return fetch("/api/models",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e&&Array.isArray(e.models)&&(r.availableModels=e.models,r.availableCodexModels=Array.isArray(e.codexModels)?e.codexModels:[],Gn(we()),li(e)),e}).catch(function(){return null})}function Hu(){if(r.modelsRefreshing)return Promise.resolve(null);r.modelsRefreshing=!0;var e=document.getElementById("cfg-default-model-refresh");return e&&(e.disabled=!0,e.textContent="\u5237\u65B0\u4E2D..."),fetch("/api/models/refresh",{method:"POST",credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){return t&&Array.isArray(t.models)&&(r.availableModels=t.models,r.availableCodexModels=Array.isArray(t.codexModels)?t.codexModels:[],Gn(we()),li(t),typeof T=="function"&&T("\u6A21\u578B\u5217\u8868\u5DF2\u5237\u65B0"+(t.claudeVersion?"\uFF08claude "+t.claudeVersion+"\uFF09":""),"success")),t}).catch(function(){return typeof T=="function"&&T("\u5237\u65B0\u6A21\u578B\u5217\u8868\u5931\u8D25","error"),null}).finally(function(){r.modelsRefreshing=!1,e&&(e.disabled=!1,e.textContent="\u5237\u65B0")})}function _u(){var e=document.getElementById("env-preview-modal");if(!e){e=document.createElement("section"),e.id="env-preview-modal",e.className="modal-backdrop hidden",e.innerHTML='<div class="modal env-preview-modal" role="dialog" aria-labelledby="env-preview-title" aria-modal="true"><div class="modal-header"><div><h2 class="modal-title" id="env-preview-title">\u5C06\u6CE8\u5165\u5B50\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF</h2><p class="modal-subtitle" id="env-preview-subtitle">\u8FD9\u4E9B\u53D8\u91CF\u4F1A\u88AB\u4F20\u7ED9 claude / codex\uFF08PTY \u4E0E\u7ED3\u6784\u5316\u8FD0\u884C\u5668\u4E00\u81F4\uFF09\u3002</p></div><button id="env-preview-close" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body env-preview-body"><div class="env-preview-toolbar"><div class="env-preview-meta" id="env-preview-meta">\u52A0\u8F7D\u4E2D\u2026</div><div class="env-preview-controls"><input id="env-preview-search" class="env-preview-search" type="search" placeholder="\u641C\u7D22\u53D8\u91CF\u540D\u2026" /><label class="env-preview-reveal"><input id="env-preview-reveal-toggle" type="checkbox" /><span>\u663E\u793A\u654F\u611F\u503C</span></label></div></div><div class="env-preview-list" id="env-preview-list" tabindex="0"><div class="env-preview-loading">\u52A0\u8F7D\u4E2D\u2026</div></div></div><div class="modal-footer env-preview-footer"><span class="env-preview-hint">\u654F\u611F\u5B57\u6BB5\uFF08\u542B KEY/TOKEN/SECRET \u7B49\uFF09\u9ED8\u8BA4\u63A9\u7801\uFF0C\u53EF\u52FE\u9009\u300C\u663E\u793A\u654F\u611F\u503C\u300D\u4E34\u65F6\u8FD8\u539F\u3002</span><button id="env-preview-close-2" class="btn btn-secondary btn-sm" type="button">\u5173\u95ED</button></div></div>',document.body.appendChild(e),e.addEventListener("click",function(l){l.target===e&&pa()});var t=e.querySelector("#env-preview-close");t&&t.addEventListener("click",pa);var n=e.querySelector("#env-preview-close-2");n&&n.addEventListener("click",pa);var a=e.querySelector("#env-preview-search");a&&a.addEventListener("input",function(){So()});var i=e.querySelector("#env-preview-reveal-toggle");i&&i.addEventListener("change",function(){xo(i.checked)})}e.classList.remove("closing"),e.classList.remove("hidden");var i=e.querySelector("#env-preview-reveal-toggle");i&&(i.checked=!1);var a=e.querySelector("#env-preview-search");a&&(a.value=""),xo(!1)}function pa(){var e=document.getElementById("env-preview-modal");e&&ga(e)}function xo(e){var t=document.getElementById("env-preview-list"),n=document.getElementById("env-preview-meta");t&&(t.innerHTML='<div class="env-preview-loading">\u52A0\u8F7D\u4E2D\u2026</div>'),n&&(n.textContent="\u52A0\u8F7D\u4E2D\u2026");var i="/api/settings/env-preview"+(e?"?reveal=1":"");fetch(i,{credentials:"same-origin"}).then(function(a){return a.json()}).then(function(a){if(!a||!Array.isArray(a.entries)){t&&(t.innerHTML='<div class="env-preview-empty">\u8BFB\u53D6\u5931\u8D25\u3002</div>'),n&&(n.textContent="\u8BFB\u53D6\u5931\u8D25");return}if(r._envPreview=a,n){var s=a.inheritEnv?"\u7EE7\u627F\u7236\u8FDB\u7A0B":"\u6700\u5C0F\u767D\u540D\u5355";n.innerHTML='<span class="env-preview-pill '+(a.inheritEnv?"is-inherit":"is-minimal")+'">'+s+'</span><span class="env-preview-count">\u5171 '+a.total+" \u9879</span>"}So()}).catch(function(){t&&(t.innerHTML='<div class="env-preview-empty">\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002</div>'),n&&(n.textContent="\u8BFB\u53D6\u5931\u8D25")})}function So(){var e=document.getElementById("env-preview-list");if(e){var t=r._envPreview;if(!t||!Array.isArray(t.entries)){e.innerHTML='<div class="env-preview-empty">\u5C1A\u672A\u52A0\u8F7D\u3002</div>';return}for(var n=document.getElementById("env-preview-search"),i=(n&&n.value||"").trim().toLowerCase(),a="",s=0,o=0;o<t.entries.length;o++){var l=t.entries[o];if(!(i&&l.name.toLowerCase().indexOf(i)===-1)){s++;var d=typeof l.value=="string"&&l.value.charAt(0)==="<"&&l.value.charAt(l.value.length-1)===">";a+='<div class="env-preview-row'+(l.sensitive?" is-sensitive":"")+'"><div class="env-preview-name">'+p(l.name)+(l.sensitive?'<span class="env-preview-badge" title="\u88AB\u8BC6\u522B\u4E3A\u654F\u611F\u5B57\u6BB5">\u654F\u611F</span>':"")+(d?'<span class="env-preview-badge env-preview-badge-runtime" title="\u6309\u4F1A\u8BDD\u52A8\u6001\u6CE8\u5165">\u8FD0\u884C\u65F6</span>':"")+'</div><div class="env-preview-value'+(d?" is-runtime":"")+'" title="'+p(String(l.value))+'">'+p(String(l.value))+'</div><div class="env-preview-len">'+l.length+" \u5B57\u7B26</div></div>"}}s===0&&(a='<div class="env-preview-empty">\u6CA1\u6709\u5339\u914D\u7684\u53D8\u91CF\u3002</div>'),e.innerHTML=a}}function li(e){var t=document.getElementById("cfg-default-model");if(t){var n=t.value,i=n||r.configDefaultModel||r.config&&r.config.defaultModel||"";t.innerHTML=Au(i,{provider:"claude"}),t.value=i;var a=document.getElementById("cfg-default-model-version");a&&e&&(a.textContent=e.claudeVersion?"\u5DF2\u68C0\u6D4B\u5230 claude "+e.claudeVersion:"\u65B0\u5EFA\u4F1A\u8BDD\u65F6\u9ED8\u8BA4\u4F7F\u7528\u8BE5\u6A21\u578B\u3002")}}function Du(e){var t=(e||"").trim();r.chatModel=t;try{localStorage.setItem("wand-chat-model",t)}catch{}Yn();var n=we();n&&fetch("/api/sessions/"+encodeURIComponent(n.id)+"/model",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({model:t||null})}).then(function(i){return i.json()}).then(function(i){if(i&&i.error){T(i.error,"error");return}if(i&&i.id&&($(i),typeof T=="function")){var a=t||"\u9ED8\u8BA4",s=n.provider==="codex"?"\uFF08\u4E0B\u6B21\u5BF9\u8BDD\u751F\u6548\uFF09":"";T("\u5DF2\u5207\u6362\u6A21\u578B \u2192 "+a+s,"success")}}).catch(function(){T("\u5207\u6362\u6A21\u578B\u5931\u8D25","error")})}function Eo(e,t,n,i){var a=r.sessionTool==="codex"?"codex":"claude",s=r.chatModel||r.config&&r.config.defaultModel||"",o=r.chatThinking||"off",l={cwd:t||Ge(),mode:n||r.chatMode||r.config&&r.config.defaultMode||"default",provider:a,runner:a==="codex"?"codex-cli-exec":r.config&&r.config.structuredRunner==="sdk"?"claude-sdk":r.structuredRunner||"claude-cli-print",prompt:e||void 0,worktreeEnabled:i===!0,model:s||void 0,thinkingEffort:o};return fetch("/api/structured-sessions",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(l)}).then(function(d){return d.json()}).then(function(d){if(d.error)throw new Error(d.error);return r.selectedId=d.id,ye(),r.drafts[d.id]="",It(),$(d),me(),Mr(d.id),qn(d.id),cn(d.id).then(function(){return d})})}function di(){var e=!!r.selectedId,t=document.getElementById("output"),n=document.getElementById("chat-output"),i=document.getElementById("blank-chat"),a=r.sessions.find(function(d){return d.id===r.selectedId}),s=ae(a),o=e&&!s&&r.currentView==="terminal",l=e&&(s||r.currentView!=="terminal");s?r.currentView="chat":e||(r.currentView="terminal"),t&&(t.classList.toggle("active",o),t.classList.toggle("hidden",!o)),n&&(n.classList.toggle("active",l),n.classList.toggle("hidden",!l)),i&&i.classList.toggle("hidden",e),n&&l&&Ua(n),pr(),Ye(),Ar()}function xr(){var e=document.getElementById("mode-description"),t=document.getElementById("session-kind-description"),n=r.sessionTool||"claude",i=r.sessionCreateKind||"structured";r.sessionTool=n,r.modeValue=_t(n,r.modeValue||r.chatMode||"default");var a=document.querySelectorAll("#provider-cards .provider-card");a.length&&a.forEach(function(l){var d=l.getAttribute("data-provider");l.classList.toggle("active",d===n),l.classList.remove("disabled")});var s=document.querySelectorAll("#session-kind-cards .session-kind-card");s.length&&s.forEach(function(l){var d=l.getAttribute("data-session-kind"),c=!1;l.classList.toggle("active",d===i),l.classList.toggle("disabled",c)});var o=document.querySelectorAll("#mode-cards .mode-card");o.length&&o.forEach(function(l){l.classList.toggle("active",l.getAttribute("data-mode")===r.modeValue)}),t&&(t.textContent=Zs(i)),e&&(e.textContent=uo(n,r.modeValue))}function $(e){if(!(!e||!e.id)){var t=r.sessions.find(function(o){return o.id===e.id})||null,n=Pd(e,t),i=!1,a=null;r.sessions=r.sessions.map(function(o){return o.id!==n.id?o:(a=o,i=!0,Object.assign({},o,n))}),i||r.sessions.unshift(n);var s=r.sessions.find(function(o){return o.id===n.id})||n;s&&Array.isArray(s.queuedMessages)&&n.id===r.selectedId&&(Jr(s),us(),mn()),n.id===r.selectedId&&(qa(),Xt()),n.status&&n.status!=="running"&&r.crossSessionQueue.length>0&&setTimeout(pi,0)}}function qn(e){!e||!r.ws||r.ws.readyState!==WebSocket.OPEN||r.ws.send(JSON.stringify({type:"subscribe",sessionId:e}))}function ju(e,t){if(!e)return t;var n=Object.assign({},e,t),i=e.output||"",a=t.output||"",s=i.length>a.length,o=e.structuredState||null,l=t.structuredState||null,d=e.sessionKind==="structured"||t.sessionKind==="structured",c=!!(e.messages&&e.messages.length&&(function(){var g=e.messages[e.messages.length-1];return g&&g.role==="assistant"&&Array.isArray(g.content)&&g.content.some(function(b){return b&&b.__processing})})()),u=Array.isArray(e.messages)?d?mr(e.messages):e.messages:[],f=Array.isArray(t.messages)?d?mr(t.messages):t.messages:[],v=f.length>0&&(function(){var g=f[f.length-1];return g&&g.role==="assistant"&&Array.isArray(g.content)&&!g.content.some(function(b){return b&&b.__processing})})(),m=e.sessionKind==="structured"&&!!o&&o.inFlight===!0&&(!l||l.inFlight!==!0)&&c&&!!o.activeRequestId&&!!l&&!!l.activeRequestId&&l.activeRequestId===o.activeRequestId&&!v,y=u.length>f.length||u.length>0&&f.length>0&&JSON.stringify(u[u.length-1])!==JSON.stringify(f[f.length-1])&&JSON.stringify(u).length>JSON.stringify(f).length;return s&&(n.output=i),m&&(n.status=e.status||n.status,n.structuredState=Object.assign({},l||{},o,{inFlight:!0}),n.messages=e.messages),y&&(n.messages=u),e.id===r.selectedId&&(e.permissionBlocked&&t.permissionBlocked===!1||e.permissionBlocked&&!t.permissionBlocked&&(n.permissionBlocked=!0),e.pendingEscalation&&!t.pendingEscalation&&t.permissionBlocked!==!1&&(n.pendingEscalation=e.pendingEscalation),e.messages&&e.messages.length>0&&(!t.messages||t.messages.length===0)&&(n.messages=e.messages)),n}function dt(e,t,n){if(e&&e.messages&&e.messages.length>0)return e.messages;if(e&&e.sessionKind==="structured")return[];if(!n)return[];var i=typeof t=="string"?t:e&&e.output||"";return i?_v(i,e&&e.command):[]}function Nu(e){if(!e||!e.length)return null;if(r.selectedId){var t=e.find(function(a){return a.id===r.selectedId});return t?t.id:null}var n=e.find(function(a){return a.status==="running"});if(n)return n.id;var i=e.find(function(a){return!a.archived});return i?i.id:e[0].id}function dn(e){var t=e||{};return fetch("/api/sessions",{credentials:"same-origin"}).then(function(n){if(n.status===401){oo();return}return n.json()}).then(function(n){var i=n||[],a=new Set(i.map(function(f){return f.id}));Object.keys(r.drafts).forEach(function(f){a.has(f)||delete r.drafts[f]}),r.sessions=i.map(function(f){var v=r.sessions.find(function(m){return m.id===f.id});return ju(v,f)});var s=Nu(r.sessions);if(s!==void 0&&(r.selectedId=s),ps(),mn(),r.bootstrapping=!1,ye(),r.modalOpen)me();else{var o=document.getElementById("sessions-list"),l=Ji();if(o&&o.innerHTML===l){var d=document.getElementById("session-count");d&&(d.textContent=String(r.sessions.length))}else{o&&(o.innerHTML=l);var d=document.getElementById("session-count");d&&(d.textContent=String(r.sessions.length))}}Sr(),r.selectedId&&r.gitStatusSessionId!==r.selectedId&&Tn(r.selectedId);var c=Promise.resolve();if(!t.skipSelectedOutputReload&&r.selectedId)c=cn(r.selectedId);else if(r.selectedId){var u=r.sessions.find(function(f){return f.id===r.selectedId});ae(u)&&(It({preserveStickState:!0}),Nr(!0))}return c.then(function(){r.crossSessionQueue.length>0&&pi(),Lt(),rs()})}).catch(function(n){var i=n&&n.message||"",a=i==="Failed to fetch"||i==="NetworkError when attempting to fetch resource."||i==="Load failed"||/aborted|aborterror|networkerror|failed to fetch/i.test(i);a||console.error("[wand] loadSessions failed:",n)})}var va=null;function Io(){va||(va=setTimeout(function(){va=null,me()},200))}function me(){var e=document.getElementById("sessions-list"),t=document.getElementById("session-count");e&&(e.innerHTML=Ji()),t&&(t.textContent=String(r.sessions.length)),typeof $t=="function"&&$t(),Sr(),r.crossSessionQueue.length>0&&Lt()}function Sr(){var e=r.sessions.find(function(S){return S.id===r.selectedId});e||(On(!1),Aa(),sl());var t=e?Ti(e.command):"Wand",n=e?wr(e):"\u5F00\u59CB\u5BF9\u8BDD",i=document.querySelector(".session-summary-value"),a=document.getElementById("terminal-title"),s=document.getElementById("terminal-info"),o=document.getElementById("blank-chat"),l=document.getElementById("output"),d=document.getElementById("chat-output"),c=document.getElementById("stop-button");i&&i.textContent!==t&&(i.textContent=t),a&&a.textContent!==t&&(a.textContent=t),s&&(s.textContent=e?n+" \xB7 "+Bu(e):n);var u=document.getElementById("session-cwd-display"),f=document.getElementById("session-mode-display"),v=document.getElementById("session-kind-display"),m=document.getElementById("session-status-display"),y=document.getElementById("session-exit-display"),g=e&&e.cwd?e.cwd:"\u672A\u8BBE\u7F6E\u76EE\u5F55",b=e?lo(e.mode):"\u9ED8\u8BA4",w=e?Lu(e):"\u7EC8\u7AEF",k=e&&ae(e),E=k?"":"\u9000\u51FA\u7801="+(e&&e.exitCode!==void 0?e.exitCode:"n/a");u&&u.textContent!==g&&(u.textContent=g),f&&f.textContent!==b&&(f.textContent=b),v&&v.textContent!==w&&(v.textContent=w),m&&m.textContent!==n&&(m.textContent=n),y&&y.textContent!==E&&(y.textContent=E),Hl(),!r.terminal&&l&&e&&Jn(),r.terminal&&l&&!l.contains(r.terminal.element)&&(Dr(),Jn()),e||(r.terminalSessionId=null,r.terminalOutput="",r.terminalOutputMarker=0),r.terminal&&e&&r.currentView==="terminal"&>("view");var L=document.querySelector(".input-panel");e?(o&&o.classList.add("hidden"),l&&l.classList.remove("hidden"),d&&d.classList.remove("hidden"),L&&L.classList.remove("hidden")):(o&&o.classList.remove("hidden"),l&&l.classList.add("hidden"),d&&d.classList.add("hidden"),c&&c.classList.add("hidden"),L&&L.classList.add("hidden")),oi(),Gn(we()),di(),qa()}function cn(e){$e&&(clearTimeout($e),$e=null);var t=r.sessions.find(function(i){return i.id===e}),n="/api/sessions/"+e;return Mu(t)&&(n+="?format=chat"),fetch(n,{credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i.error){r.selectedId===e&&(r.selectedId=null,ye()),dn();return}if($(i),Sr(),r.terminal&&e===r.selectedId&&i.output!==void 0){var a=!!r.ws&&(r.ws.readyState===WebSocket.OPEN||r.ws.readyState===WebSocket.CONNECTING);a?at("session-switch"):(si(e,i.output,{mode:"append"}),at("session-switch",{forceReplay:!0}))}var s=r.sessions.find(function(o){return o.id===e});r.currentMessages=Qe(s,dt(s,i.output,!1)),He(!1)})}function Dt(e){var t=r.sessions.find(function(o){return o.id===e});if(t){r.selectedId!==e&&Dr(),r.selectedId=e,ye(),r.toolContentCache={},r.messageQueue=[],r.pendingMessages=[],Jr(t),ps(),mn(),It(),r.currentMessages=[],$e&&(clearTimeout($e),$e=null);var n=document.getElementById("todo-progress");n&&n.classList.add("hidden");var i=document.querySelector(".structured-status-bar");i&&i.remove(),mt&&(clearInterval(mt),mt=null),Vt=0;var a=document.querySelector(".input-composer");a&&a.classList.remove("in-flight");var s=t;r.preferredCommand=ht(),r.chatMode=_t("claude",s&&s.mode?s.mode:r.chatMode),r.terminalInteractive&&s&&s.status!=="running"&&On(!1),me(),Mr(e),r.filePanelOpen&&(Cc(s),Pt()),cn(e).then(function(){Ft(!0)}),qn(e),r.gitStatus=null,r.gitStatusSessionId=null,Ki(),Tn(e,{force:!0})}}function Ru(){var e=document.getElementById("sessions-drawer"),t=document.querySelector(".main-layout"),n=Ne(),i=!!r.sidebarPinned&&!!r.sidebarCollapsed,a=i||!n&&(!!r.sidebarPinned||!!r.sessionsDrawerOpen);e&&(e.classList.toggle("pinned",a),e.classList.toggle("collapsed",i)),t&&(t.classList.toggle("sidebar-pinned",a),t.classList.toggle("sidebar-collapsed",i));var s=document.getElementById("sidebar-pin-btn");s&&(s.classList.toggle("pinned",!!r.sidebarPinned),s.title=r.sidebarPinned?"\u5DF2\u56FA\u5B9A\u5E38\u9A7B\uFF08\u70B9\u51FB\u89E3\u9664\u9501\u5B9A\uFF09":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B",s.setAttribute("aria-label",r.sidebarPinned?"\u89E3\u9664\u56FA\u5B9A\u5E38\u9A7B":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B"),s.setAttribute("aria-pressed",r.sidebarPinned?"true":"false"))}function Er(){var e=document.getElementById("sessions-drawer"),t=document.getElementById("sessions-drawer-backdrop"),n=document.querySelector(".main-layout");e&&e.classList.toggle("open",r.sessionsDrawerOpen),t&&t.classList.toggle("open",As()),n&&n.classList.toggle("sidebar-open",r.sessionsDrawerOpen);var i=document.getElementById("sessions-toggle-button");i&&i.classList.toggle("active",r.sessionsDrawerOpen),Ru()}function Fu(){var e=Ne();if(!e){var t=r.sidebarPinned?!1:!r.sessionsDrawerOpen;r.sessionsDrawerOpen=t,t&&(r.sidebarCollapsed=!1,Ee("wand-sidebar-collapsed",!1)),Ee("wand-sidebar-open",r.sessionsDrawerOpen),on(),Cr();return}if(r.sessionsDrawerOpen=!r.sessionsDrawerOpen,Ee("wand-sidebar-open",r.sessionsDrawerOpen),r.sessionsDrawerOpen){r.filePanelOpen=!1;try{localStorage.setItem("wand-file-panel-open","false")}catch{}}on()}function Ir(){var e=Ne();if(!e){if(!r.sidebarPinned&&!r.sessionsDrawerOpen)return;Pr(),r.sidebarPinned=!1,r.sessionsDrawerOpen=!1,Ee("wand-sidebar-pinned",!1),Ee("wand-sidebar-open",!1),on(),Cr();return}r.sessionsDrawerOpen&&(Pr(),r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),on())}function Wu(){if(Ne()){Ir();return}r.sidebarPinned||r.sidebarCollapsed||!r.sessionsDrawerOpen||(Pr(),r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),on(),Cr())}function Co(e){var t=document.getElementById("composer-plus-popover"),n=document.getElementById("attach-btn");r.plusPopoverOpen=!!e,t&&t.classList.toggle("hidden",!e),n&&(n.classList.toggle("active",!!e),n.setAttribute("aria-expanded",e?"true":"false"))}function zu(){Co(!r.plusPopoverOpen)}function ci(){r.plusPopoverOpen&&Co(!1)}function jt(){Ne()&&r.sessionsDrawerOpen&&Ir()}function Cr(){var e=document.querySelector(".main-layout");if(e){var t=function(n){n.propertyName==="padding-left"&&(e.removeEventListener("transitionend",t),Wt(!0))};e.addEventListener("transitionend",t)}setTimeout(function(){Wt(!0)},350)}var Nt=null;function Uu(){return Nt&&document.body.contains(Nt)||(Nt=document.createElement("div"),Nt.className="sidebar-tile-bubble",Nt.setAttribute("role","tooltip"),document.body.appendChild(Nt)),Nt}function $t(){Nt&&Nt.classList.remove("visible")}function Vu(e,t){if(!t){$t();return}var n=Uu();n.textContent=t.length>400?t.slice(0,400)+"\u2026":t;var i=e.getBoundingClientRect();n.classList.add("visible");var a=n.getBoundingClientRect(),s=i.top+i.height/2,o=s-a.height/2,l=8,d=window.innerHeight-a.height-8;o<l&&(o=l),o>d&&(o=Math.max(l,d)),n.style.left=i.right+12+"px",n.style.top=o+"px",n.style.setProperty("--bubble-tail-y",s-o+"px")}function Ku(e){if(e.dataset.collapsedSessionId){var t=r.sessions.find(function(a){return a.id===e.dataset.collapsedSessionId});if(!t)return"";var n=Kc(t);return n||t.summary||t.command||""}if(e.dataset.collapsedHistoryId){var i=r.claudeHistory.find(function(a){return a.claudeSessionId===e.dataset.collapsedHistoryId});if(i&&i.firstUserMessage)return i.firstUserMessage}return""}function Ju(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest(".sidebar-collapsed-tile");if(!n){$t();return}var i=Ku(n);if(!i){$t();return}Vu(n,i)}}function Yu(e){var t=e.relatedTarget;t&&t instanceof Element&&t.closest(".sidebar-collapsed-tile")||$t()}function Gu(){var e=Ne();r.sidebarPinned||(r.sidebarPinned=!0,Ee("wand-sidebar-pinned",!0)),r.sidebarCollapsed=!r.sidebarCollapsed,Ee("wand-sidebar-collapsed",r.sidebarCollapsed),r.sidebarCollapsed?r.sessionsDrawerOpen=!1:e?(r.sidebarPinned=!1,r.sessionsDrawerOpen=!0,Ee("wand-sidebar-pinned",!1)):r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",r.sessionsDrawerOpen),on(),me(),$u(),$t(),Cr()}function Qu(){Ne()||(r.sidebarPinned=!r.sidebarPinned,r.sessionsDrawerOpen=!0,Ee("wand-sidebar-pinned",r.sidebarPinned),Ee("wand-sidebar-open",!0),on(),Cr())}function $u(){var e=document.getElementById("sidebar-collapse-btn");if(e){var t=!!r.sidebarPinned&&!!r.sidebarCollapsed;e.classList.toggle("collapsed",t),e.title=t?"\u5C55\u5F00\u4FA7\u680F":"\u6536\u8D77\u4E3A\u7A84\u6761",e.setAttribute("aria-label",t?"\u5C55\u5F00\u4FA7\u680F":"\u6536\u8D77\u4E3A\u7A84\u6761"),e.innerHTML=t?'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="10 6 16 12 10 18"/><line x1="20" y1="5" x2="20" y2="19"/></svg>':'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="14 6 8 12 14 18"/><line x1="4" y1="5" x2="4" y2="19"/></svg>'}}function Xu(e){if(e){e.style.left="",e.style.right="";var t=e.offsetParent||e.parentElement;if(t){var n=8,i=t.getBoundingClientRect(),a=e.getBoundingClientRect(),s=window.innerWidth;a.left<n?(e.style.right="auto",e.style.left=n-i.left+"px"):a.right>s-n&&(e.style.left="auto",e.style.right=i.right-(s-n)+"px")}}}var Ue=null,Ve=null;function ma(){$n(),r.modalOpen=!0,r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Er();var e=document.getElementById("session-modal");e&&(e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.remove("closing"),e.classList.remove("hidden"),Ue=document.activeElement,r.sessionTool=ht(),r.preferredCommand=r.sessionTool,r.sessionCreateKind="structured",r.sessionCreateWorktree=!1,r.modeValue=_t(r.sessionTool,r.modeValue||r.chatMode),xr(),Ef(),setTimeout(function(){var t=document.getElementById("mode-cards");t&&t.focus()},20),ui(e))}function un(){r.modalOpen=!1;var e=document.getElementById("session-modal");e&&(Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus(),ga(e)),er()}function ga(e){if(e&&!e.classList.contains("hidden")){var t=!1;try{t=window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{}if(t||document.hidden){e.classList.remove("closing"),e.classList.add("hidden");return}e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.add("closing"),e._wandCloseTimer=setTimeout(function(){e.classList.remove("closing"),e.classList.add("hidden"),e._wandCloseTimer=null},170)}}function ui(e){Ve&&document.removeEventListener("keydown",Ve);var t='button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])';Ve=function(n){if(n.key==="Tab"){var i=e.querySelectorAll(t),a=i[0],s=i[i.length-1];!a||!s||(n.shiftKey?document.activeElement===a&&(n.preventDefault(),s.focus()):document.activeElement===s&&(n.preventDefault(),a.focus()))}},document.addEventListener("keydown",Ve)}function Zu(){return r.activeWorktreeMergeSessionId&&r.sessions.find(function(e){return e.id===r.activeWorktreeMergeSessionId})||null}function Tr(){var e=document.getElementById("worktree-merge-content"),t=document.getElementById("worktree-merge-confirm-button"),n=document.getElementById("worktree-merge-error"),i=Zu(),a=r.worktreeMergeCheckResult;if(!(!e||!t)){if(!i||!i.worktree){e.innerHTML='<p class="field-hint">\u672A\u627E\u5230\u53EF\u5408\u5E76\u7684 worktree \u4F1A\u8BDD\u3002</p>',t.disabled=!0;return}n&&(r.worktreeMergeError?Ke(n,r.worktreeMergeError):Li(n));var s=['<div class="worktree-merge-row"><span>\u6765\u6E90\u5206\u652F</span><strong>'+p(i.worktree.branch||"-")+"</strong></div>",'<div class="worktree-merge-row"><span>\u5DE5\u4F5C\u76EE\u5F55</span><strong>'+p(i.worktree.path||"-")+"</strong></div>"];a?(s.push('<div class="worktree-merge-row"><span>\u76EE\u6807\u5206\u652F</span><strong>'+p(a.targetBranch||"-")+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u5F85\u5408\u5E76\u63D0\u4EA4</span><strong>'+p(String(a.aheadCount||0))+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u672A\u63D0\u4EA4\u6539\u52A8</span><strong>'+p(a.hasUncommittedChanges?"\u6709":"\u65E0")+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u51B2\u7A81\u98CE\u9669</span><strong>'+p(a.hasConflicts?"\u6709":"\u65E0")+"</strong></div>"),a.reason&&s.push('<p class="field-hint">'+p(a.reason)+"</p>")):r.worktreeMergeLoading&&s.push('<p class="field-hint">\u6B63\u5728\u68C0\u67E5 worktree \u5408\u5E76\u72B6\u6001\u2026</p>'),e.innerHTML=s.join(""),t.disabled=r.worktreeMergeLoading||r.worktreeMergeSubmitting||!a||a.ok!==!0,t.textContent=r.worktreeMergeSubmitting?"\u5408\u5E76\u4E2D...":"\u786E\u8BA4\u5408\u5E76\u5E76\u6E05\u7406"}}function To(e){r.activeWorktreeMergeSessionId=e,r.worktreeMergeCheckResult=null,r.worktreeMergeLoading=!0,r.worktreeMergeSubmitting=!1,r.worktreeMergeError="",un(),$n();var t=document.getElementById("worktree-merge-modal");t&&(t.classList.remove("hidden"),Ue=document.activeElement,ui(t)),Tr(),fetch("/api/sessions/"+encodeURIComponent(e)+"/worktree/merge/check",{method:"POST",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);n&&n.session&&$(n.session),r.worktreeMergeCheckResult=n.result||null,r.worktreeMergeError=""}).catch(function(n){r.worktreeMergeError=n&&n.message||"\u65E0\u6CD5\u68C0\u67E5 worktree \u5408\u5E76\u72B6\u6001\u3002"}).finally(function(){r.worktreeMergeLoading=!1,Tr()})}function Qn(){var e=document.getElementById("worktree-merge-modal");r.activeWorktreeMergeSessionId=null,r.worktreeMergeCheckResult=null,r.worktreeMergeLoading=!1,r.worktreeMergeSubmitting=!1,r.worktreeMergeError="",e&&e.classList.add("hidden"),Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus()}function ef(){!r.activeWorktreeMergeSessionId||r.worktreeMergeSubmitting||(r.worktreeMergeSubmitting=!0,r.worktreeMergeError="",Tr(),fetch("/api/sessions/"+encodeURIComponent(r.activeWorktreeMergeSessionId)+"/worktree/merge",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}).then(function(e){return e.json()}).then(function(e){if(e&&e.error)throw new Error(e.error);return e&&e.session&&$(e.session),T("\u5DF2\u5408\u5E76\u5230 "+p(e.result&&e.result.targetBranch||"\u4E3B\u5206\u652F")+(e.result&&e.result.cleanupDone===!1?"\uFF0C\u4F46\u5DE5\u4F5C\u6811\u5F85\u6E05\u7406\u3002":"\u3002"),"info"),Qn(),Ht()}).catch(function(e){r.worktreeMergeError=e&&e.message||"\u65E0\u6CD5\u5408\u5E76 worktree\u3002",Tr()}).finally(function(){r.worktreeMergeSubmitting=!1,Tr()}))}function Lo(e){fetch("/api/sessions/"+encodeURIComponent(e)+"/worktree/cleanup",{method:"POST",credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(t&&t.error)throw new Error(t.error);return t&&t.session&&$(t.session),T("\u5DF2\u5B8C\u6210 worktree \u6E05\u7406\u3002","info"),Ht()}).catch(function(t){T(t&&t.message||"\u65E0\u6CD5\u6E05\u7406 worktree\u3002","error")})}function tf(){un();var e=document.getElementById("settings-modal");if(e){e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.remove("closing"),e.classList.remove("hidden"),Ue=document.activeElement;var t=document.getElementById("new-password"),n=document.getElementById("confirm-password");t&&(t.value=""),n&&(n.value=""),Bo(),ui(e),rf(),ha("about"),lf();var i=document.getElementById("cfg-notif-sound"),a=document.getElementById("cfg-notif-bubble");i&&(i.checked=r.notifSound),a&&(a.checked=r.notifBubble);var s=document.getElementById("cfg-notif-volume"),o=document.getElementById("cfg-notif-volume-val");if(s){s.value=r.notifVolume,o&&(o.textContent=r.notifVolume+"%");try{s.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}}var l=document.getElementById("notif-volume-field");if(l&&(l.style.display=r.notifSound?"":"none"),pn(),typeof WandNative<"u"&&typeof WandNative.getAppIcon=="function")try{qo(WandNative.getAppIcon()||"shorthair")}catch{}if(Re&&typeof WandNative.getNotificationSound=="function")try{var d=document.getElementById("native-sound-select");d&&(d.value=WandNative.getNotificationSound())}catch{}if(Re&&typeof WandNative.getNotificationVolume=="function")try{var c=WandNative.getNotificationVolume();if(r.notifVolume=c,s&&(s.value=c),o&&(o.textContent=c+"%"),s)try{s.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}try{localStorage.setItem("wand-notif-volume",String(c))}catch{}}catch{}if(Re&&typeof WandNative.isHapticEnabled=="function")try{var u=document.getElementById("cfg-haptic-enabled");u&&(u.checked=WandNative.isHapticEnabled())}catch{}}}function $n(){var e=document.getElementById("settings-modal");e&&(Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus(),ga(e))}function Bo(){var e=document.getElementById("settings-error"),t=document.getElementById("settings-success");e&&e.classList.add("hidden"),t&&t.classList.add("hidden")}function nf(){var e=document.getElementById("new-password").value,t=document.getElementById("confirm-password").value,n=document.getElementById("settings-error"),i=document.getElementById("settings-success");if(Bo(),!e||e.length<6){n.textContent="\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11\u4E3A 6 \u4E2A\u5B57\u7B26\u3002",n.classList.remove("hidden");return}if(e!==t){n.textContent="\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002",n.classList.remove("hidden");return}fetch("/api/set-password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e}),credentials:"same-origin"}).then(function(a){return a.json()}).then(function(a){if(a.error){n.textContent=a.error,n.classList.remove("hidden");return}i.textContent="\u5BC6\u7801\u4FEE\u6539\u6210\u529F\uFF01",i.classList.remove("hidden"),document.getElementById("new-password").value="",document.getElementById("confirm-password").value=""}).catch(function(){n.textContent="Failed to save password.",n.classList.remove("hidden")})}function ha(e){for(var t=document.querySelectorAll(".settings-tab"),n=document.querySelectorAll(".settings-panel"),i=0;i<t.length;i++){var a=t[i].getAttribute("data-tab")===e;a?t[i].classList.add("active"):t[i].classList.remove("active"),t[i].setAttribute("aria-selected",a?"true":"false"),t[i].setAttribute("tabindex",a?"0":"-1")}for(var s=0;s<n.length;s++){var o=n[s].id==="settings-tab-"+e;o?(n[s].classList.add("active"),n[s].removeAttribute("hidden")):(n[s].classList.remove("active"),n[s].setAttribute("hidden","hidden"))}}function Mo(e){if(e&&!(e.key!=="ArrowUp"&&e.key!=="ArrowDown"&&e.key!=="Home"&&e.key!=="End")){var t=Array.prototype.slice.call(document.querySelectorAll(".settings-tab"));if(t.length){var n=t.indexOf(e.currentTarget);if(n!==-1){e.preventDefault();var i=n;e.key==="ArrowUp"&&(i=n>0?n-1:t.length-1),e.key==="ArrowDown"&&(i=n<t.length-1?n+1:0),e.key==="Home"&&(i=0),e.key==="End"&&(i=t.length-1);var a=t[i];if(a){var s=a.getAttribute("data-tab");s&&ha(s),typeof a.focus=="function"&&a.focus()}}}}}function rf(){for(var e=document.querySelectorAll(".settings-tab"),t=0;t<e.length;t++)e[t].removeEventListener("keydown",Mo),e[t].addEventListener("keydown",Mo)}function af(e){if(e){var t=e.config||{},n={about:e.version?"\u5F53\u524D v"+e.version:"\u7248\u672C\u4E0E\u66F4\u65B0\u4FE1\u606F",general:[t.defaultMode||"default",t.language||"\u81EA\u52A8\u8BED\u8A00"].filter(Boolean).join(" \xB7 "),notifications:r.notifSound?"\u63D0\u793A\u97F3 "+r.notifVolume+"%":"\u63D0\u793A\u97F3\u5DF2\u5173\u95ED",security:e.hasCert?"\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66":"\u5BC6\u7801\u4E0E\u8BC1\u4E66\u7BA1\u7406",presets:t.commandPresets&&t.commandPresets.length?t.commandPresets.length+" \u6761\u9884\u8BBE":"\u6682\u65E0\u9884\u8BBE",display:"\u63A7\u5236\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00"};for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var a=document.querySelector('.settings-tab[data-tab="'+i+'"] .settings-tab-meta');a&&(a.textContent=n[i]||"")}}}function sf(e){var t=document.getElementById("android-connect-qr"),n=document.getElementById("android-connect-qr-empty"),i=window.QRCodeLib;if(t){if(!i||typeof i.toCanvas!="function"){n&&(n.textContent="\u4E8C\u7EF4\u7801\u5E93\u672A\u52A0\u8F7D");return}try{i.toCanvas(t,e,{width:220,margin:1,errorCorrectionLevel:"M",color:{dark:"#1f1b17",light:"#ffffff00"}},function(a){if(a){n&&(n.textContent="\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25",n.style.display=""),t.style.visibility="hidden";return}n&&(n.style.display="none"),t.style.visibility="visible"})}catch{n&&(n.textContent="\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25",n.style.display=""),t.style.visibility="hidden"}}}function of(e){var t=window.QRCodeLib;if(!t||typeof t.toCanvas!="function")return;var n=document.getElementById("connect-qr-modal");n&&n.remove();var i=document.createElement("div");i.id="connect-qr-modal",i.className="connect-qr-modal-overlay",i.innerHTML='<div class="connect-qr-modal-card"><canvas id="connect-qr-modal-canvas"></canvas><p class="connect-qr-modal-hint">\u7528 Wand App \u626B\u4E00\u626B\uFF0C\u8FDE\u63A5\u5F53\u524D\u670D\u52A1\u5668</p><button type="button" class="btn btn-secondary btn-sm connect-qr-modal-close">\u5173\u95ED</button></div>',document.body.appendChild(i);var a=i.querySelector("#connect-qr-modal-canvas"),s=Math.min(window.innerWidth,window.innerHeight)*.7;s<240&&(s=240),s>480&&(s=480);try{t.toCanvas(a,e,{width:s,margin:2,errorCorrectionLevel:"M",color:{dark:"#1f1b17",light:"#ffffff"}})}catch{}function o(){i.remove()}i.addEventListener("click",function(d){d.target===i&&o()});var l=i.querySelector(".connect-qr-modal-close");l&&l.addEventListener("click",o)}function Xn(e,t,n){if(!e)return;function i(){if(ir("light"),n){n();return}if(t){var a=t.textContent;t.textContent="\u5DF2\u590D\u5236",setTimeout(function(){t.textContent=a},1500)}}if(Re&&typeof WandNative.copyToClipboard=="function")try{if(WandNative.copyToClipboard(e)==="ok"){i();return}}catch{}navigator.clipboard.writeText(e).then(i).catch(function(){var a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),i()})}function fn(e){if(typeof e!="number"||!isFinite(e)||e<0)return"-";if(e<1024)return e+" B";for(var t=["KB","MB","GB","TB"],n=e/1024,i=0;n>=1024&&i<t.length-1;)n=n/1024,i+=1;var a=n>=10?n.toFixed(0):n.toFixed(1);return a+" "+t[i]}function lf(){fetch("/api/settings",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){af(e);var t=document.getElementById("settings-pkg-name"),n=document.getElementById("settings-version"),i=document.getElementById("settings-node-req"),a=document.getElementById("settings-repo-url");t&&(t.textContent=e.packageName||"-"),n&&(n.textContent=e.version||"-"),i&&(i.textContent=e.nodeVersion||"-"),a&&e.repoUrl&&(a.innerHTML='<a href="'+p(e.repoUrl)+'" target="_blank" rel="noopener">'+p(e.repoUrl)+"</a>");var s=document.getElementById("settings-latest-version"),o=document.getElementById("do-update-button");e.latestVersion&&s&&(s.textContent=e.latestVersion,e.updateAvailable&&o&&o.classList.remove("hidden"));var l=document.getElementById("beta-channel-toggle");l&&(l.checked=e.updateChannel==="beta");var d=e.autoUpdate||{},c=document.getElementById("auto-update-web-toggle");c&&(c.checked=!!d.web);var u=document.getElementById("auto-update-apk-toggle");u&&(u.checked=!!Pn&&!!d.apk);var f=document.getElementById("auto-update-dmg-toggle");f&&(f.checked=!!wn&&!!d.dmg);function v(ee,Te){typeof window.wandAlert=="function"?window.wandAlert(ee,{type:Te==="error"?"danger":"info"}):typeof T=="function"?T(ee,Te==="error"?"error":"info"):Te==="error"&&alert(ee)}function m(ee,Te,Le){var kt=Le?Le.textContent:"";Le&&(Le.disabled=!0,Le.textContent="\u4E0B\u8F7D\u4E2D\u2026");function vt(){Le&&(Le.disabled=!1,Le.textContent=kt)}fetch(ee,{method:"HEAD",credentials:"same-origin"}).then(function(ve){if(!ve.ok){v(ve.status===404?"\u4E0B\u8F7D\u672A\u542F\u7528\u6216\u6587\u4EF6\u5DF2\u79FB\u9664":"\u4E0B\u8F7D\u5931\u8D25 (HTTP "+ve.status+")","error"),vt();return}var nt=document.createElement("a");nt.href=ee,nt.download=Te||"",document.body.appendChild(nt),nt.click(),document.body.removeChild(nt),v("\u5DF2\u5F00\u59CB\u4E0B\u8F7D\uFF0C\u8BF7\u5728\u901A\u77E5\u680F/\u4E0B\u8F7D\u7BA1\u7406\u4E2D\u67E5\u770B","info"),vt()}).catch(function(ve){v("\u4E0B\u8F7D\u5931\u8D25: "+(ve&&ve.message?ve.message:ve),"error"),vt()})}function y(ee,Te){function Le(xt){return String(xt||"").replace(/^v/,"").split("-")[0].split(".").map(function(lr){return parseInt(lr,10)||0})}for(var kt=Le(ee),vt=Le(Te),ve=0;ve<3;ve++){var nt=(kt[ve]||0)-(vt[ve]||0);if(nt!==0)return nt>0?1:-1}return 0}function g(ee,Te,Le,kt,vt){ee.classList.remove("hidden"),ee.disabled=!1,Te>0?ee.textContent="\u5347\u7EA7":Te===0?(ee.textContent="\u5DF2\u662F\u6700\u65B0",ee.disabled=!0):ee.textContent="\u91CD\u65B0\u5B89\u88C5",ee.onclick=ee.disabled?null:function(){try{WandNative.downloadUpdate(Le,kt,vt)}catch(ve){v("\u8C03\u7528\u4E0B\u8F7D\u5931\u8D25: "+(ve&&ve.message?ve.message:ve),"error")}}}var b=document.getElementById("android-apk-section"),w=document.getElementById("android-apk-current-row"),k=document.getElementById("settings-android-apk-current"),E=document.getElementById("android-apk-github-row"),L=document.getElementById("settings-android-apk-github"),S=document.getElementById("download-github-apk-btn"),M=document.getElementById("android-apk-local-row"),D=document.getElementById("settings-android-apk-local"),W=document.getElementById("download-local-apk-btn"),Y=document.getElementById("android-apk-message"),O=e.androidApk||{},C=!!Pn,A=O.enabled!==!1,B=C||A&&(!!O.github||!!O.local);if(b&&(B?b.classList.remove("hidden"):b.classList.add("hidden")),C){if(w&&k&&(k.textContent="v"+Pn,w.classList.remove("hidden")),O.github&&E&&L){var z=O.github.version?"v"+O.github.version:O.github.fileName;if(typeof O.github.size=="number"&&(z+=" \xB7 "+fn(O.github.size)),L.textContent=z,E.classList.remove("hidden"),S){var se=O.github.version?y(O.github.version,Pn):1;g(S,se,O.github.downloadUrl,O.github.fileName||"wand-update.apk","github")}}if(O.local&&M&&D){var ne=O.local.version?"v"+O.local.version:O.local.fileName;if(typeof O.local.size=="number"&&(ne+=" \xB7 "+fn(O.local.size)),D.textContent=ne,M.classList.remove("hidden"),W){var K=O.local.version?y(O.local.version,Pn):1;g(W,K,O.local.downloadUrl,O.local.fileName||"wand-update.apk","local")}}!O.github&&!O.local&&Y&&(Y.textContent="\u6682\u65E0\u53EF\u7528\u66F4\u65B0",Y.classList.remove("hidden"));var re=document.getElementById("android-auto-update-row"),U=document.getElementById("android-auto-update-hint");re&&re.classList.remove("hidden"),U&&U.classList.remove("hidden")}else{if(O.github&&E&&L){var q=O.github.version?"v"+O.github.version:O.github.fileName;typeof O.github.size=="number"&&(q+=" \xB7 "+fn(O.github.size)),L.textContent=q,E.classList.remove("hidden"),S&&(S.textContent="\u4E0B\u8F7D",S.classList.remove("hidden"),S.onclick=function(){window.open(O.github.downloadUrl,"_blank"),v("\u6B63\u5728\u6253\u5F00\u4E0B\u8F7D\u9875\u2026","info")})}if(O.local&&M&&D){var N=O.local.version?"v"+O.local.version:O.local.fileName;typeof O.local.size=="number"&&(N+=" \xB7 "+fn(O.local.size)),D.textContent=N,M.classList.remove("hidden"),W&&(W.textContent="\u4E0B\u8F7D",W.classList.remove("hidden"),W.onclick=function(){m(O.local.downloadUrl,O.local.fileName||"wand-update.apk",W)})}!O.github&&!O.local&&Y&&(Y.textContent=A?"\u5728\u7EBF\u7248\u672C\u6682\u65F6\u83B7\u53D6\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5":"Android \u4E0B\u8F7D\u672A\u5728\u670D\u52A1\u7AEF\u542F\u7528",Y.classList.remove("hidden"))}var V=document.getElementById("macos-dmg-section"),te=document.getElementById("macos-dmg-current-row"),X=document.getElementById("settings-macos-dmg-current"),oe=document.getElementById("macos-dmg-github-row"),le=document.getElementById("settings-macos-dmg-github"),ce=document.getElementById("download-github-dmg-btn"),ue=document.getElementById("macos-dmg-local-row"),Se=document.getElementById("settings-macos-dmg-local"),Ie=document.getElementById("download-local-dmg-btn"),qe=document.getElementById("macos-dmg-message"),H=e.macosDmg||{},R=!!wn,de=H.enabled!==!1,Ce=R||de&&(!!H.github||!!H.local);if(V&&(Ce?V.classList.remove("hidden"):V.classList.add("hidden")),R){if(te&&X&&(X.textContent="v"+wn,te.classList.remove("hidden")),H.github&&oe&&le){var Q=H.github.version?"v"+H.github.version:H.github.fileName;if(typeof H.github.size=="number"&&(Q+=" \xB7 "+fn(H.github.size)),le.textContent=Q,oe.classList.remove("hidden"),ce){var Z=H.github.version?y(H.github.version,wn):1;g(ce,Z,H.github.downloadUrl,H.github.fileName||"wand-update.dmg","github")}}if(H.local&&ue&&Se){var xe=H.local.version?"v"+H.local.version:H.local.fileName;if(typeof H.local.size=="number"&&(xe+=" \xB7 "+fn(H.local.size)),Se.textContent=xe,ue.classList.remove("hidden"),Ie){var ke=H.local.version?y(H.local.version,wn):1;g(Ie,ke,H.local.downloadUrl,H.local.fileName||"wand-update.dmg","local")}}!H.github&&!H.local&&qe&&(qe.textContent="\u6682\u65E0\u53EF\u7528\u66F4\u65B0",qe.classList.remove("hidden"));var x=document.getElementById("macos-auto-update-row"),Fe=document.getElementById("macos-auto-update-hint");x&&x.classList.remove("hidden"),Fe&&Fe.classList.remove("hidden")}else{if(H.github&&oe&&le){var Xe=H.github.version?"v"+H.github.version:H.github.fileName;typeof H.github.size=="number"&&(Xe+=" \xB7 "+fn(H.github.size)),le.textContent=Xe,oe.classList.remove("hidden"),ce&&(ce.textContent="\u4E0B\u8F7D",ce.classList.remove("hidden"),ce.onclick=function(){window.open(H.github.downloadUrl,"_blank"),v("\u6B63\u5728\u6253\u5F00\u4E0B\u8F7D\u9875\u2026","info")})}if(H.local&&ue&&Se){var Ze=H.local.version?"v"+H.local.version:H.local.fileName;typeof H.local.size=="number"&&(Ze+=" \xB7 "+fn(H.local.size)),Se.textContent=Ze,ue.classList.remove("hidden"),Ie&&(Ie.textContent="\u4E0B\u8F7D",Ie.classList.remove("hidden"),Ie.onclick=function(){m(H.local.downloadUrl,H.local.fileName||"wand-update.dmg",Ie)})}!H.github&&!H.local&&qe&&(qe.textContent=de?"\u5728\u7EBF\u7248\u672C\u6682\u65F6\u83B7\u53D6\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5":"macOS \u4E0B\u8F7D\u672A\u5728\u670D\u52A1\u7AEF\u542F\u7528",qe.classList.remove("hidden"))}var et=document.getElementById("android-connect-code"),ut=document.getElementById("android-connect-qr"),We=document.getElementById("android-connect-qr-empty"),_e=document.getElementById("android-connect-qr-wrap");if(et){et.textContent="\u52A0\u8F7D\u4E2D...",We&&(We.textContent="\u751F\u6210\u4E2D\u2026"),ut&&(ut.style.visibility="hidden");var De="/api/app-connect-code";window.location&&window.location.origin&&(De+="?origin="+encodeURIComponent(window.location.origin)),fetch(De,{credentials:"same-origin"}).then(function(ee){return ee.json()}).then(function(ee){ee.code?(et.textContent=ee.code,r.androidConnectCode=ee.code,sf(ee.code)):(et.textContent="\u751F\u6210\u5931\u8D25",We&&(We.textContent="\u751F\u6210\u5931\u8D25"))}).catch(function(){et.textContent="\u83B7\u53D6\u5931\u8D25",We&&(We.textContent="\u83B7\u53D6\u5931\u8D25")})}_e&&!_e.dataset.bound&&(_e.dataset.bound="1",_e.addEventListener("click",function(){r.androidConnectCode&&of(r.androidConnectCode)}));var ie=e.config||{},Oe=document.getElementById("cfg-host"),tt=document.getElementById("cfg-port"),ft=document.getElementById("cfg-https"),yt=document.getElementById("cfg-mode"),st=document.getElementById("cfg-cwd"),Pe=document.getElementById("cfg-shell");Oe&&(Oe.value=ie.host||""),tt&&(tt.value=ie.port||""),ft&&(ft.checked=ie.https===!0),yt&&(yt.value=ie.defaultMode||"default"),st&&(st.value=ie.defaultCwd||""),Pe&&(Pe.value=ie.shell||"");var zt=document.getElementById("cfg-language");zt&&(zt.value=ie.language||"");var xn=document.getElementById("cfg-structured-runner");xn&&(xn.value=ie.structuredRunner||"cli");var pt=document.getElementById("cfg-inherit-env");pt&&(pt.checked=ie.inheritEnv!==!1),r.configDefaultModel=ie.defaultModel||"",li(),ko().then(function(){li()}).catch(function(){});var en=document.getElementById("cert-status");en&&(en.textContent=e.hasCert?"\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66":"\u672A\u5B89\u88C5\u8BC1\u4E66\uFF08\u4F7F\u7528\u81EA\u7B7E\u540D\u6216 HTTP\uFF09",en.style.color=e.hasCert?"var(--success)":"var(--text-secondary)");var tn=document.getElementById("presets-list");if(tn&&ie.commandPresets){for(var Mt="",wt=0;wt<ie.commandPresets.length;wt++){var Sn=ie.commandPresets[wt];Mt+='<div class="preset-item"><span class="preset-label">'+p(Sn.label)+'</span><span class="preset-detail">'+p(Sn.command)+(Sn.mode?" ("+p(Sn.mode)+")":"")+"</span></div>"}Mt||(Mt='<div class="empty-state-compact"><span class="empty-icon">\u2699</span><span>\u6CA1\u6709\u547D\u4EE4\u9884\u8BBE</span><span class="hint">\u5728 config.json \u7684 commandPresets \u4E2D\u914D\u7F6E</span></div>'),tn.innerHTML=Mt}var nn=ie.cardDefaults||{},ar=document.getElementById("cfg-card-edit"),sr=document.getElementById("cfg-card-inline"),or=document.getElementById("cfg-card-terminal"),fe=document.getElementById("cfg-card-thinking"),ot=document.getElementById("cfg-card-toolgroup");ar&&(ar.checked=nn.editCards===!0),sr&&(sr.checked=nn.inlineTools===!0),or&&(or.checked=nn.terminal===!0),fe&&(fe.checked=nn.thinking===!0),ot&&(ot.checked=nn.toolGroup===!0)}).catch(function(){})}function df(){var e=document.getElementById("config-message");e&&(e.classList.add("hidden"),e.textContent="");var t={host:(document.getElementById("cfg-host")||{}).value,port:Number((document.getElementById("cfg-port")||{}).value),https:(document.getElementById("cfg-https")||{}).checked,defaultMode:(document.getElementById("cfg-mode")||{}).value,defaultCwd:(document.getElementById("cfg-cwd")||{}).value,shell:(document.getElementById("cfg-shell")||{}).value,language:(document.getElementById("cfg-language")||{}).value||"",defaultModel:(document.getElementById("cfg-default-model")||{}).value||"",structuredRunner:(document.getElementById("cfg-structured-runner")||{}).value||"cli",inheritEnv:(document.getElementById("cfg-inherit-env")||{}).checked!==!1},n=r.config&&r.config.defaultModel||"",i=t.defaultModel||"";fetch("/api/settings/config",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(t)}).then(function(a){return a.json()}).then(function(a){if(e&&(a.error?(e.textContent=a.error,e.style.color="var(--error)"):(e.textContent=a.restartRequired?"\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF0C\u90E8\u5206\u90E8\u7F72\u5B57\u6BB5\uFF08host/port/https/shell\uFF09\u9700\u8981\u91CD\u542F\u670D\u52A1\u624D\u751F\u6548\u3002":"\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002",e.style.color="var(--success)"),e.classList.remove("hidden")),(!a||!a.error)&&(r.config&&(r.config.defaultModel=i),r.configDefaultModel=i,i!==n)){r.chatModel="";try{localStorage.removeItem("wand-chat-model")}catch{}Gn(we())}}).catch(function(){e&&(e.textContent="\u4FDD\u5B58\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden"))})}function cf(){var e=document.getElementById("display-message");e&&(e.classList.add("hidden"),e.textContent="");var t={cardDefaults:{editCards:!!(document.getElementById("cfg-card-edit")||{}).checked,inlineTools:!!(document.getElementById("cfg-card-inline")||{}).checked,terminal:!!(document.getElementById("cfg-card-terminal")||{}).checked,thinking:!!(document.getElementById("cfg-card-thinking")||{}).checked,toolGroup:!!(document.getElementById("cfg-card-toolgroup")||{}).checked}};fetch("/api/settings/config",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(t)}).then(function(n){return n.json()}).then(function(n){e&&(n.error?(e.textContent=n.error,e.style.color="var(--error)"):(e.textContent="\u663E\u793A\u8BBE\u7F6E\u5DF2\u4FDD\u5B58",e.style.color="var(--success)"),e.classList.remove("hidden")),!n.error&&r.config&&(r.config.cardDefaults=t.cardDefaults)}).catch(function(){e&&(e.textContent="\u4FDD\u5B58\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden"))})}function uf(){var e=document.getElementById("cert-key-file"),t=document.getElementById("cert-cert-file"),n=document.getElementById("cert-message");if(n&&(n.classList.add("hidden"),n.textContent=""),!e||!e.files[0]||!t||!t.files[0]){n&&(n.textContent="\u8BF7\u9009\u62E9\u79C1\u94A5\u548C\u8BC1\u4E66\u6587\u4EF6\u3002",n.style.color="var(--error)",n.classList.remove("hidden"));return}var i=new FileReader;i.onload=function(){var a=i.result,s=new FileReader;s.onload=function(){var o=s.result;fetch("/api/settings/upload-cert",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({key:a,cert:o})}).then(function(l){return l.json()}).then(function(l){if(n){if(l.error)n.textContent=l.error,n.style.color="var(--error)";else{n.textContent="\u8BC1\u4E66\u5DF2\u4E0A\u4F20\uFF0C\u91CD\u542F\u540E\u751F\u6548\u3002",n.style.color="var(--success)";var d=document.getElementById("cert-status");d&&(d.textContent="\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66",d.style.color="var(--success)")}n.classList.remove("hidden")}}).catch(function(){n&&(n.textContent="\u4E0A\u4F20\u5931\u8D25\u3002",n.style.color="var(--error)",n.classList.remove("hidden"))})},s.readAsText(t.files[0])},i.readAsText(e.files[0])}function Ao(){var e=document.getElementById("settings-latest-version"),t=document.getElementById("do-update-button"),n=document.getElementById("update-message");e&&(e.textContent="\u68C0\u67E5\u4E2D..."),n&&n.classList.add("hidden"),t&&t.classList.add("hidden"),fetch("/api/check-update",{credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i.error){e&&(e.textContent="\u68C0\u67E5\u5931\u8D25");return}var a=i.channel==="beta";if(e&&(e.textContent=i.latest||(a?"beta \u672A\u53D1\u5E03":"-")),!i.latest){n&&(n.textContent=a?"\u65E0\u6CD5\u8BFB\u53D6 npm beta \u7248\u672C\u3002":"\u65E0\u6CD5\u8FDE\u63A5\u5230 npm registry\u3002",n.style.color="var(--error)",n.classList.remove("hidden"));return}i.updateAvailable&&t&&(t.textContent=a?"\u66F4\u65B0\u5230 Beta":"\u66F4\u65B0\u5230\u6700\u65B0\u7248",t.classList.remove("hidden")),!i.updateAvailable&&n&&(n.textContent=a?"\u5DF2\u662F\u6700\u65B0 Beta \u7248\u672C\u3002":"\u5DF2\u662F\u6700\u65B0\u7248\u672C\u3002",n.style.color="var(--success)",n.classList.remove("hidden"))}).catch(function(){e&&(e.textContent="\u68C0\u67E5\u5931\u8D25")})}function ff(){var e=document.getElementById("update-message"),t=document.getElementById("do-update-button");t&&(t.disabled=!0,e&&(e.textContent="\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u7A0D\u5019...",e.style.color="var(--text-secondary)",e.classList.remove("hidden")),fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n.error){e&&(e.textContent=n.error,e.style.color="var(--error)",e.classList.remove("hidden")),t.disabled=!1;return}if(e&&(e.textContent=(n.message||"\u66F4\u65B0\u5B8C\u6210")+"\uFF0C\u6B63\u5728\u91CD\u542F\u670D\u52A1\u2026",e.style.color="var(--success)",e.classList.remove("hidden")),t.classList.add("hidden"),n.detachedUpdate)kn();else if(n.restartRequired!==!1)dd(null,e);else{var i=document.getElementById("do-restart-button");i&&i.classList.remove("hidden")}}).catch(function(){e&&(e.textContent="\u66F4\u65B0\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden")),t.disabled=!1}))}function pf(){var e=document.getElementById("do-restart-button"),t=document.getElementById("update-message");dd(e,t)}function vf(){fetch("/api/auto-update",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){if(e.apk)return fetch("/api/android-apk-update?currentVersion="+encodeURIComponent(Pn),{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(!(!t.updateAvailable||!t.downloadUrl))try{WandNative.downloadUpdate(t.downloadUrl,t.fileName||"wand-update.apk",t.source||"local")}catch{}})}).catch(function(){})}function mf(){wn&&fetch("/api/auto-update",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){if(e.dmg)return fetch("/api/macos-dmg-update?currentVersion="+encodeURIComponent(wn),{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(!(!t.updateAvailable||!t.downloadUrl))try{WandNative.downloadUpdate(t.downloadUrl,t.fileName||"wand-update.dmg",t.source||"local")}catch{}})}).catch(function(){})}function ba(e,t){var n={};n[e]=t,fetch("/api/auto-update",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(n)}).then(function(i){return i.json()}).then(function(i){var a=document.getElementById("auto-update-web-toggle"),s=document.getElementById("auto-update-apk-toggle"),o=document.getElementById("auto-update-dmg-toggle");a&&(a.checked=!!i.web),s&&(s.checked=!!i.apk),o&&(o.checked=!!i.dmg)}).catch(function(){var i=document.getElementById("auto-update-"+e+"-toggle");i&&(i.checked=!t)})}function gf(e){fetch("/api/update-channel",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({channel:e})}).then(function(t){return t.json()}).then(function(t){var n=document.getElementById("beta-channel-toggle");n&&(n.checked=t.channel==="beta"),Ao()}).catch(function(){var t=document.getElementById("beta-channel-toggle");t&&(t.checked=e!=="beta")})}function qo(e){for(var t=document.querySelectorAll(".settings-app-icon-option"),n=0;n<t.length;n++){var i=t[n].getAttribute("data-icon")===e;t[n].classList.toggle("selected",i),t[n].setAttribute("aria-pressed",i?"true":"false")}}function pn(){var e=document.getElementById("notification-permission-status"),t=document.getElementById("notification-request-btn"),n=document.getElementById("notification-reset-btn"),i=document.getElementById("notification-test-message");if(e){var a=Bi();if(a===null){if(typeof Notification>"u"){e.textContent="\u4E0D\u652F\u6301",e.style.color="var(--fg-muted)",t&&t.classList.add("hidden"),n&&n.classList.add("hidden");return}a=Notification.permission}a==="granted"?(e.textContent="\u5DF2\u6388\u6743 \u2713",e.style.color="var(--success)",t&&t.classList.add("hidden"),n&&n.classList.add("hidden")):a==="denied"?(e.textContent="\u5DF2\u62D2\u7EDD",e.style.color="var(--danger)",t&&t.classList.add("hidden"),n&&n.classList.remove("hidden")):(e.textContent="\u672A\u6388\u6743",e.style.color="var(--warning)",t&&t.classList.remove("hidden"),n&&n.classList.remove("hidden"))}}function hf(){var e=document.getElementById("notification-test-message");if(Re){window._onNativePermissionResult=function(t){pn(),e&&(t==="granted"?(e.textContent="\u2713 \u5DF2\u6388\u6743",e.style.color="var(--success)"):(e.textContent="\u2717 \u672A\u6388\u6743\uFF0C\u8BF7\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u5F00\u542F Wand \u7684\u901A\u77E5\u6743\u9650",e.style.color="var(--danger)"),e.classList.remove("hidden")),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}return}typeof Notification>"u"||Notification.requestPermission().then(function(t){if(pn(),t==="granted")e&&(e.textContent="\u2713 \u5DF2\u6388\u6743",e.style.color="var(--success)",e.classList.remove("hidden"));else if(t==="denied"&&e){var n=location.origin;e.innerHTML='\u6D4F\u89C8\u5668\u5DF2\u62E6\u622A\u6388\u6743\u5F39\u7A97\uFF0C\u8BF7\u624B\u52A8\u91CD\u7F6E\uFF1A<br><span style="display:inline-flex;align-items:center;gap:4px;margin:4px 0">\u2460 \u70B9\u51FB\u5730\u5740\u680F\u5DE6\u4FA7\u7684 <span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid var(--border);font-size:11px;vertical-align:middle">i</span> \u6216\u9501\u56FE\u6807</span><br>\u2461 \u627E\u5230\u300C\u901A\u77E5\u300D\u2192 \u6539\u4E3A\u300C\u5141\u8BB8\u300D<br>\u2462 \u5237\u65B0\u9875\u9762\u5373\u53EF',e.style.color="var(--fg-muted)",e.classList.remove("hidden")}})}function Oo(){var e=document.getElementById("notification-test-delay-btn");e&&(e.disabled=!1,e.textContent="10 \u79D2\u540E\u53D1\u9001")}function bf(){var e=document.getElementById("notification-test-message");r.delayedNotificationTimer&&(clearTimeout(r.delayedNotificationTimer),r.delayedNotificationTimer=null);var t=document.getElementById("notification-test-delay-btn");t&&(t.disabled=!0,t.textContent="\u5DF2\u5B89\u6392\uFF0810s\uFF09"),e&&(e.innerHTML="\u5DF2\u5B89\u6392 10 \u79D2\u540E\u53D1\u9001\u6D4B\u8BD5\u901A\u77E5\uFF0C\u8BF7\u5207\u5230\u540E\u53F0\u7B49\u5F85\u3002",e.style.color="var(--text-secondary)",e.classList.remove("hidden")),r.delayedNotificationTimer=setTimeout(function(){r.delayedNotificationTimer=null,Oo(),Po()},1e4)}function Po(){var e=document.getElementById("notification-test-message"),t=[];r.delayedNotificationTimer&&(clearTimeout(r.delayedNotificationTimer),r.delayedNotificationTimer=null,Oo());var n=xm();t.push(n?"\u2713 \u63D0\u793A\u97F3":"\u2717 \u63D0\u793A\u97F3\uFF08\u65E0\u6CD5\u64AD\u653E\uFF09");var i=r.notifBubble;if(ts({title:"\u6D4B\u8BD5\u901A\u77E5",body:"\u8FD9\u662F\u4E00\u6761\u6D4B\u8BD5\u901A\u77E5\u3002",type:"info",icon:"\u266A",duration:5e3,playSound:!1}),t.push(i?"\u2713 \u5E94\u7528\u5185\u6C14\u6CE1":"\u2013 \u5E94\u7528\u5185\u6C14\u6CE1\uFF08\u5DF2\u5173\u95ED\uFF09"),Re){var a=Bi();if(a==="granted")try{WandNative.sendNotification("Wand \u6D4B\u8BD5\u901A\u77E5","\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002","wand-test"),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF09")}else if(a==="denied")t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u62D2\u7EDD\uFF0C\u8BF7\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u5F00\u542F\uFF09");else{window._onNativePermissionResult=function(l){if(pn(),l==="granted")try{WandNative.sendNotification("Wand \u6D4B\u8BD5\u901A\u77E5","\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002","wand-test"),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u6388\u6743\uFF09")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF09")}else t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u672A\u6388\u6743\uFF09");Zn(e,t),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}return}Zn(e,t);return}if(typeof Notification>"u"){t.push("\u2013 \u7CFB\u7EDF\u901A\u77E5\uFF08\u4E0D\u652F\u6301\uFF09"),Zn(e,t);return}var s=Notification.permission;if(s==="granted"){try{var o=new Notification("Wand \u6D4B\u8BD5\u901A\u77E5",{body:"\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002",icon:"/favicon.ico",tag:"wand-test"});setTimeout(function(){o.close()},5e3),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF0C\u53EF\u80FD\u9700\u8981 HTTPS\uFF09")}Zn(e,t)}else s==="denied"?(t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u62D2\u7EDD\uFF09"),Zn(e,t)):Notification.requestPermission().then(function(l){pn(),l==="granted"?t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u6388\u6743\uFF09"):t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u672A\u6388\u6743\uFF09"),Zn(e,t)})}function Zn(e,t){if(e){e.innerHTML=t.map(function(i){return p(i)}).join("<br>");var n=t.every(function(i){return i.indexOf("\u2713")===0||i.indexOf("\u2013")===0});e.style.color=n?"var(--success)":"var(--warning)",e.classList.remove("hidden")}}function ct(e){if(!e||typeof e!="object"||!r.terminal)return e;try{typeof r.terminal.remeasure=="function"&&r.terminal.remeasure()}catch{}var t=r.terminal.cols,n=r.terminal.rows;return typeof t=="number"&&typeof n=="number"&&Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>0&&(e.cols=t,e.rows=n),e}function Ho(){return r.terminal&&r.terminal.cols?Promise.resolve():new Promise(function(e){var t=!1,n=function(){t||(t=!0,e())},i=setTimeout(n,2e3);try{Jn()}catch{}requestAnimationFrame(function(){requestAnimationFrame(function(){r.terminal&&r.terminal.cols&&(clearTimeout(i),n())})})})}function _o(){var e=ht(),t=Ge(),n=_t(e,r.config&&r.config.defaultMode?r.config.defaultMode:"default");r.preferredCommand=e,r.chatMode=_t(e,r.chatMode),Ho().then(function(){return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:e,provider:e,cwd:t,mode:n}))})}).then(function(i){return i.json()}).then(function(i){if(i.error){T(i.error,"error");return}return r.selectedId=i.id,ye(),r.drafts[i.id]="",It(),Ht()}).then(function(){Ft(!0)}).catch(function(){T("\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error")})}var Lr=!1;function yf(){if(!Lr){var e=document.getElementById("cwd"),t=document.getElementById("modal-error"),n=ht(),i=r.sessionCreateKind||"structured",a=r.sessionCreateWorktree===!0;Li(t);var s=Ge(),o=e.value.trim()||s,l=_t(n,r.modeValue);if(i==="structured"){wf(o,l,a,t);return}kf(n,o,l,a,t)}}function wf(e,t,n,i){var a=r.sessionTool==="codex"?"codex":"claude";return Lr=!0,r.modeValue=t,r.chatMode=t,r.sessionTool=a,r.preferredCommand=a,oi(),Gn(we()),Eo(void 0,e,t,n).then(function(s){return Gt(e),un(),jt(),s}).then(function(){Ft(!0)}).catch(function(s){Ke(i,s&&s.message||"\u65E0\u6CD5\u542F\u52A8\u7ED3\u6784\u5316\u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 Claude \u5DF2\u6B63\u786E\u5B89\u88C5\u3002")}).finally(function(){Lr=!1})}function kf(e,t,n,i,a){Lr=!0,r.modeValue=n,r.chatMode=n,r.sessionTool=e,r.preferredCommand=e,oi(),Ho().then(function(){return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:e,provider:e,cwd:t,mode:n,worktreeEnabled:i}))})}).then(function(s){return s.json()}).then(function(s){if(s.error){Ke(a,s.error);return}return r.selectedId=s.id,ye(),Gt(t),r.drafts[s.id]="",It(),un(),jt(),Ht()}).then(function(){r.selectedId?Dt(r.selectedId):Ft(!0)}).catch(function(){Ke(a,e==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 codex \u5DF2\u6B63\u786E\u5B89\u88C5\u5E76\u53EF\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 Claude \u5DF2\u6B63\u786E\u5B89\u88C5\u3002")}).finally(function(){Lr=!1})}function xf(){var e=document.getElementById("blank-chat-cwd");e&&(e.addEventListener("click",Do),e.addEventListener("keydown",function(t){(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Do())}),document.addEventListener("click",function(t){var n=document.getElementById("blank-chat-cwd-dropdown");if(!(!n||n.classList.contains("hidden"))&&!t.target.closest(".blank-chat-cwd-wrap")){n.classList.add("hidden");var i=document.getElementById("blank-chat-cwd-arrow");i&&(i.textContent="\u25BC")}}))}function Do(){var e=document.getElementById("blank-chat-cwd-dropdown"),t=document.getElementById("blank-chat-cwd-arrow");if(e){var n=e.classList.contains("hidden");n?(Sf(e),e.classList.remove("hidden"),t&&(t.textContent="\u25B2")):(e.classList.add("hidden"),t&&(t.textContent="\u25BC"))}}function Sf(e){var t=sn();e.innerHTML='<div class="blank-chat-cwd-loading">\u52A0\u8F7D\u4E2D...</div>',ta(function(n){var i="",a=r.workingDir||t;if(i+='<div class="blank-chat-cwd-item'+(a===t?" active":"")+'" data-path="'+p(t)+'"><span class="blank-chat-cwd-item-label">\u9ED8\u8BA4</span><span class="blank-chat-cwd-item-path">'+p(t)+"</span></div>",n.length){var s={};s[t]=!0,n.forEach(function(o){s[o.path]||(s[o.path]=!0,i+='<div class="blank-chat-cwd-item'+(a===o.path?" active":"")+'" data-path="'+p(o.path)+'"><span class="blank-chat-cwd-item-path">'+p(o.path)+"</span></div>")})}e.innerHTML=i,e.querySelectorAll(".blank-chat-cwd-item").forEach(function(o){o.addEventListener("click",function(l){l.stopPropagation();var d=o.dataset.path;r.workingDir=d;try{localStorage.setItem("wand-working-dir",d)}catch{}var c=document.getElementById("blank-chat-cwd-path");c&&(c.textContent=d),e.classList.add("hidden");var u=document.getElementById("blank-chat-cwd-arrow");u&&(u.textContent="\u25BC");var f=document.getElementById("folder-picker-input");f&&(f.value=d)})})})}function Ef(){var e=document.getElementById("recent-paths-bubbles");e&&ta(function(t){if(!t.length){e.innerHTML="";return}e.innerHTML=t.map(function(n){return'<button class="recent-path-bubble" data-path="'+p(n.path)+'" title="'+p(n.path)+'">'+p(n.name)+"</button>"}).join(""),e.querySelectorAll(".recent-path-bubble").forEach(function(n){n.addEventListener("click",function(){var i=document.getElementById("cwd");i&&(i.value=n.dataset.path,r.cwdValue=n.dataset.path||"")})})})}function jo(){r.suggestionTimer&&clearTimeout(r.suggestionTimer),r.suggestionTimer=setTimeout(If,120)}function If(){var e=document.getElementById("session-modal");if(e&&e.classList.contains("hidden")){er();return}var t=document.getElementById("cwd");t&&fetch("/api/path-suggestions?q="+encodeURIComponent(t.value.trim()),{credentials:"same-origin"}).then(function(n){return n.json()}).then(Cf).catch(er)}function Cf(e){var t=document.getElementById("cwd-suggestions");if(!t||!e.length){er();return}t.innerHTML=e.map(function(n){return'<button class="suggestion-item" data-path="'+p(n.path)+'"><strong>'+p(n.name)+"</strong><small>"+p(n.path)+"</small></button>"}).join(""),t.querySelectorAll(".suggestion-item").forEach(function(n){n.addEventListener("click",function(){document.getElementById("cwd").value=n.dataset.path,r.cwdValue=n.dataset.path||"",er()})}),t.classList.remove("hidden")}function er(){var e=document.getElementById("cwd-suggestions");e&&(e.classList.add("hidden"),e.innerHTML="")}function Tf(e){if(!e.isComposing){if(nl(e)){Oa(e);return}if(e.key==="Enter"){if(e.shiftKey){e.preventDefault();var t=document.getElementById("input-box");if(t){var n=t.selectionStart||0,i=t.value,a=i.slice(0,n)+`
|
|
22
|
-
`+i.slice(n);t.value=a,t.selectionStart=n+1,t.selectionEnd=n+1,it(a,!0),Rt(t)}return}e.preventDefault();var s=!!(e.metaKey||e.ctrlKey);
|
|
20
|
+
`);o!==s&&e.clipboardData&&(e.clipboardData.setData("text/plain",o),e.preventDefault())}}})}pu();var vu=150,mu=30,gu=160*1024,hu=192*1024;function io(e){if(!e||e.length<=hu)return e;var t=e.length,n=function(S){if(!(typeof r>"u"||!r)){var M=r.terminalOutputMarker|0;if(!(M<=0)){var _=t-S;r.terminalOutputMarker=M>_?M-_:0}}},i=e.length-gu;if(i>0&&i<e.length){var a=e.charCodeAt(i);a>=56320&&a<=57343&&i++}for(var s=4096,o=Math.min(i+s,e.length),l=i;l<o;l++)if(e.charCodeAt(l)===10){var c=e.slice(l+1);return n(c.length),c}for(var d=Math.max(0,i-256),u=-1,f=i-1;f>=d;f--){var v=e.charCodeAt(f);if(v===27){u=f;break}if(v===7||v>=64&&v<=126)break}if(u!==-1){for(var m=!1,y=u+1;y<i;y++){var g=e.charCodeAt(y);if(g===7){m=!0;break}if(g>=64&&g<=126){m=!0;break}}if(!m)for(var b=Math.min(i+256,e.length),w=i;w<b;w++){var k=e.charCodeAt(w);if(k===7||k>=64&&k<=126){var E=e.slice(w+1);return n(E.length),E}}}var L=e.slice(i);return n(L.length),L}function ni(){if(r.terminal){if(typeof r.terminal.reset=="function"){r.terminal.reset(),oa(),r.syncOutputBuffer=null,r.syncOutputDeadline=0;return}typeof r.terminal.write=="function"&&r.terminal.write("\x1Bc"),oa(),r.syncOutputBuffer=null,r.syncOutputDeadline=0}}var ri=0,wr=0,la=0,bu=5e3,yu=12,wu=3e4,ii=!1;function An(e){if(!r.terminal||!r.terminalOutput)return!1;var t=e||{},n=r.terminalOutputMarker|0;n<0&&(n=0),n>r.terminalOutput.length&&(n=r.terminalOutput.length);var i=n>0?r.terminalOutput.slice(n):r.terminalOutput,a=i.length,s=typeof performance<"u"&&performance.now?performance.now():Date.now();ii=!0;try{ni(),Kn(r.terminal,i)}finally{ii=!1}r.lastTerminalResyncAt=Date.now(),gt("output"),t.skipFit||at("refresh");var o=Date.now();if(o-ri>bu)ri=o,wr=1;else if(wr++,wr>yu&&o-la>wu){la=o;var l=typeof performance<"u"&&performance.now?performance.now():Date.now();console.warn("[wand] softResyncTerminal high frequency","count="+wr+"/"+Math.round((o-ri)/100)/10+"s","bufLen="+a,"lastReplayMs="+Math.round(l-s))}return!0}function ku(e){r.softResyncTimer&&clearTimeout(r.softResyncTimer),r.softResyncTimer=setTimeout(function(){r.softResyncTimer=null,An()},typeof e=="number"?e:150)}var xu=/\x1b\[\d*(?:;\d*)?[ABCDfHJK]/,ao=1500,Su=800,ai=0,Qt=null;function Eu(e){if(!ii&&r.syncFramingResidue&&(r.syncFramingResidue=!1,!(!e||typeof e!="string")&&e.indexOf("\x1B[")!==-1&&xu.test(e))){var t=Date.now(),n=t-ai;if(n>=ao){Qt&&(clearTimeout(Qt),Qt=null),ai=t,An();return}if(!Qt){var i=Math.max(Su,ao-n);Qt=setTimeout(function(){Qt=null,ai=Date.now(),An()},i)}}}function si(e,t,n){if(!r.terminal)return!1;var i=es(t||""),a=e||null,s=n||{},o=s.mode||"append",l=s.scroll!==!1,c=r.terminalSessionId!==a,d=r.terminalOutput||"",u=!!(a&&r.terminalLiveStreamSessions[a]),f=!1;if(i===d&&!c)return l&>("output"),lt(),!1;if(c&&(ni(),d="",r.terminalOutput="",r.terminalOutputMarker=0,r.terminalAutoFollow=!0,Vn(),lt()),o==="replace")i!==d&&(ni(),i&&Kn(r.terminal,i),f=!0);else{if(i.length<d.length&&!c)return!1;if(u&&!c&&o!=="replace"&&d&&!i.startsWith(d))return!1;if(i.startsWith(d)){var v=i.slice(d.length);v&&(Kn(r.terminal,v),f=!0)}else{if(d&&d.startsWith(i))return!1;ni(),i&&Kn(r.terminal,i),f=!0}}return r.terminalSessionId=a,r.terminalOutput=i,r.terminalOutputMarker=0,l&&(f||c||o==="replace")?gt(c||o==="replace"?"force":"output"):lt(),c&&xi(r.terminal.cols,r.terminal.rows),f||c}function Jn(){var e=document.getElementById("output");if(!(!e||r.terminal||r.terminalInitializing)){if(typeof WTermLib>"u"||!WTermLib.WTerm){r.terminalInitRetries||(r.terminalInitRetries=0),r.terminalInitRetries<10&&(r.terminalInitRetries++,setTimeout(Jn,200));return}r.terminalInitRetries=0,r.terminalInitializing=!0,r.selectedId&&(e.classList.remove("hidden"),e.classList.add("active"));for(var t=e.querySelectorAll(".terminal-scroll-wrap"),n=0;n<t.length;n++){var i=t[n];i.parentNode===e&&e.removeChild(i)}var a=document.createElement("div");a.className="terminal-scroll-wrap",e.appendChild(a);var s=new WTermLib.WTerm(a,{cols:120,rows:36,autoResize:!0,cursorBlink:!1,onData:function(){},onResize:function(l,c){xi(l,c),r.terminal&&r.terminalOutput&&An({skipFit:!0})}}),o=document.fonts&&typeof document.fonts.ready=="object"?Promise.race([document.fonts.ready,new Promise(function(l){setTimeout(l,800)})]):Promise.resolve();o.then(function(){return s.init()}).then(function(){if(r.terminal=s,r.terminalInitializing=!1,Ps(),a.isConnected&&(a.offsetHeight,typeof s.remeasure=="function"))try{s.remeasure()}catch{}r.terminalAutoFollow=!0,Vn();var l=Tt();if(l&&(r.terminalViewportScrollHandler=function(){if(Date.now()<r.terminalProgrammaticScrollUntil){lt();return}if(eo()){r.terminalAutoFollow=!0,Vn(),lt();return}aa()},r.terminalViewportTouchStartHandler=function(d){d.touches&&d.touches.length===1&&(r.terminalTouchStartY=d.touches[0].clientY)},r.terminalViewportTouchHandler=function(d){!d.touches||d.touches.length!==1||typeof r.terminalTouchStartY=="number"&&d.touches[0].clientY-r.terminalTouchStartY>4&&aa()},l.addEventListener("scroll",r.terminalViewportScrollHandler,{passive:!0}),l.addEventListener("touchstart",r.terminalViewportTouchStartHandler,{passive:!0}),l.addEventListener("touchmove",r.terminalViewportTouchHandler,{passive:!0})),r.terminalWheelHandler=function(d){d.deltaY<0&&aa(),d.stopPropagation()},e.addEventListener("wheel",r.terminalWheelHandler,{passive:!0}),su(e),r.selectedId){var c=r.sessions.find(function(d){return d.id===r.selectedId});c&&si(c.id,c.output||"",{mode:"append",scroll:!1})}else Kn(s,`\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB\u4F60\u7684\u7B2C\u4E00\u6B21\u5BF9\u8BDD\u3002\r
|
|
21
|
+
`);r.terminalClickHandler=function(d){gi()||Ft(d)},e.addEventListener("click",r.terminalClickHandler),lt(),ov(),dv(),bv(),yv(),at("mount",{forceReplay:!0})}).catch(function(l){r.terminalInitializing=!1,console.error("[wand] wterm init failed:",l)})}}function ca(){if(!r.loginPending){var e=document.getElementById("password"),t=document.getElementById("login-button"),n=document.getElementById("login-error");!e||!t||!n||(Li(n),e.dataset.error="false",e.setAttribute("aria-invalid","false"),r.loginPending=!0,t.disabled=!0,t.textContent="\u767B\u5F55\u4E2D...",fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e.value}),credentials:"same-origin"}).then(function(i){return i.ok?fetch("/api/config",{credentials:"same-origin"}):(e.dataset.error="true",e.setAttribute("aria-invalid","true"),Ke(n,"\u5BC6\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5\u3002"),Promise.reject("Invalid password"))}).then(function(i){return i.json()}).then(function(i){r.config=i;var a=document.getElementById("status-dot"),s=document.getElementById("status-text");return a&&a.classList.add("active"),s&&(s.textContent="\u5DF2\u767B\u5F55"),Ht()}).then(function(){Bl(),Yt()}).catch(function(i){console.error("[wand] Login error:",i),i!=="Invalid password"&&(e.dataset.error="true",e.setAttribute("aria-invalid","true"),Ke(n,"\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"))}).finally(function(){r.loginPending=!1,t.disabled=!1,t.textContent="\u8FDB\u5165\u63A7\u5236\u53F0"}))}}function da(){return typeof WandNative<"u"&&typeof WandNative.switchServer=="function"}function so(){if(da())try{WandNative.switchServer()}catch{}}function oo(){fetch("/api/logout",{method:"POST",credentials:"same-origin"}).catch(function(){}),Hl(),On(!1),Aa(),Dr(),r.config=null,r.selectedId=null,be(),r.sessions=[],r.claudeHistory=[],r.claudeHistoryLoaded=!1,r.claudeHistoryExpanded=!1,r.claudeHistoryExpandedDirs={},r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Yt()}function Ht(){return cn()}function Iu(e){return e==="full-access"?"\u5168\u6743\u9650":e==="default"?"\u9ED8\u8BA4":e==="native"?"\u539F\u751F":e==="auto-edit"?"\u81EA\u52A8\u7F16\u8F91":e==="managed"?"\u6258\u7BA1":e}function ht(){return r.sessionTool||r.preferredCommand||"claude"}function Cu(){var e=r.sessions.find(function(t){return t.id===r.selectedId});return e&&e.provider||r.preferredCommand||"claude"}function lo(e,t){return t?"\u7EC8\u7AEF\u4EA4\u4E92\u4E2D":e&&(e.status==="exited"||e.status==="failed"||e.status==="stopped")?Ta(e)?"":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F":se(e)&&e.structuredState&&e.structuredState.inFlight?"\u56DE\u590D\u4E2D\u2026Enter \u6392\u961F \xB7 \u26A1 \u7ACB\u5373\u53D1\u9001":""}function co(e,t){return e==="codex"?"Codex \u652F\u6301 PTY \u7EC8\u7AEF\u4E0E\u7ED3\u6784\u5316\uFF08JSONL\uFF09\u4E24\u79CD\u4F1A\u8BDD\uFF0C\u7ED3\u6784\u5316\u6A21\u5F0F\u6309 full-access \u542F\u52A8\u3002":t==="full-access"?"\u81EA\u52A8\u786E\u8BA4\u6743\u9650\u8BF7\u6C42\u4E0E\u9AD8\u6743\u9650\u64CD\u4F5C\uFF0C\u9002\u5408\u4F60\u786E\u8BA4\u73AF\u5883\u5B89\u5168\u540E\u7684\u8FDE\u7EED\u4FEE\u6539\u3002":t==="auto-edit"?"\u4FDD\u7559\u4EA4\u4E92\u5F0F\u4F1A\u8BDD\uFF0C\u540C\u65F6\u66F4\u504F\u5411\u76F4\u63A5\u7F16\u8F91\u4EE3\u7801\u3002":t==="native"?"\u8C03\u7528 Claude \u539F\u751F API \u8F93\u51FA\uFF0C\u9002\u5408\u5FEB\u901F\u95EE\u7B54\u6216\u4E00\u6B21\u6027\u751F\u6210\u3002":t==="managed"?"AI \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u5DE5\u4F5C\uFF0C\u65E0\u9700\u4E2D\u9014\u786E\u8BA4\uFF0C\u9002\u5408\u6709\u660E\u786E\u76EE\u6807\u7684\u4EFB\u52A1\u3002":"\u4FDD\u7559\u6807\u51C6\u4EA4\u4E92\u6D41\u7A0B\uFF0C\u9002\u5408\u624B\u52A8\u786E\u8BA4\u6BCF\u4E00\u6B65\u3002"}function ua(e){return e==="codex"?["full-access"]:["default","full-access","auto-edit","native","managed"]}function _t(e,t){var n=ua(e);if(n.indexOf(t)!==-1)return t;var i=r.config&&r.config.defaultMode?r.config.defaultMode:"default";return n.indexOf(i)!==-1?i:n[0]}function jm(e,t){return ua(e).map(function(n){var i=uo(n);return'<option value="'+p(n)+'"'+(n===t?" selected":"")+' title="'+i+'">'+p(Iu(n))+"</option>"}).join("")}function uo(e){var t={default:"\u6807\u51C6\u6A21\u5F0F - \u9700\u8981\u786E\u8BA4\u6587\u4EF6\u4FEE\u6539","full-access":"\u5B8C\u5168\u8BBF\u95EE - \u81EA\u52A8\u786E\u8BA4\u6743\u9650\u4E0E\u64CD\u4F5C","auto-edit":"\u81EA\u52A8\u7F16\u8F91 - \u81EA\u52A8\u786E\u8BA4\u6587\u4EF6\u4FEE\u6539",native:"\u539F\u751F\u6A21\u5F0F - \u8FD4\u56DE\u7ED3\u6784\u5316\u8F93\u51FA",managed:"\u6258\u7BA1\u6A21\u5F0F - AI \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u5DE5\u4F5C"};return t[e]||""}function Tu(e){var t=e&&e.provider?e.provider:"claude";return(se(e)?"\u7ED3\u6784\u5316":"\u7EC8\u7AEF")+" \xB7 "+t}function Lu(e){return se(e)?"\u7ED3\u6784\u5316 \xB7 \u5757\u7EA7\u8BB0\u5F55":e&&e.provider==="codex"?"\u7EC8\u7AEF \xB7 Codex PTY\uFF08chat \u4E3A\u89E3\u6790\u89C6\u56FE\uFF09":"\u7EC8\u7AEF \xB7 PTY \u4F1A\u8BDD"}function Bu(e){return e?se(e)||e.provider==="codex":!1}function fo(e,t){if(!e||!e.is_error||!t||t.is_error)return!1;var n=bn(e.content).toLowerCase(),i=bn(t.content).toLowerCase();return n?n.indexOf("invalid pages parameter")!==-1&&i.length>0:!1}function se(e){return!!e&&(e.sessionKind==="structured"||e.runner==="claude-cli-print")}function oi(){r.chatMode=_t("claude",r.chatMode);var e=document.getElementById("mode-hint");e&&(e.textContent=uo(r.chatMode)),Yn()}function fa(e,t){t=t||{};var n=t.kind==="compact"||t.kind==="popover"?t.kind:"dropdown",i=ht(),a=r.chatMode||"default",s=vo(e)||"default",o=ho(e);function l(c,d,u,f){var v=n==="compact"?"":'<span class="chat-mode-trio-tag">'+p(d)+"</span>";return'<span class="composer-text-pill chat-mode-trio-pill" data-mode-control-pill="'+c+'" title="'+p(d)+'">'+v+'<span class="composer-text-label">'+p(u)+'</span><select class="composer-text-hidden-select" data-mode-control="'+c+'" tabindex="-1" aria-label="'+p(d)+'">'+f+"</select></span>"}return'<div class="chat-mode-trio chat-mode-trio-'+n+'" role="group" aria-label="\u4F1A\u8BDD\u8BBE\u7F6E">'+l("mode","\u6A21\u5F0F",a,po(i,a))+'<span class="composer-text-sep" aria-hidden="true">\xB7</span>'+l("model","\u6A21\u578B",s,go(s,e))+'<span class="composer-text-sep" aria-hidden="true">\xB7</span>'+l("thinking","\u601D\u8003",o,bo(o))+"</div>"}function Yn(){var e=ye(),t=ht(),n=r.chatMode||"default",i=vo(e)||"default",a=ho(e),s=document.querySelectorAll(".chat-mode-trio");s.forEach(function(o){function l(c,d,u){var f=o.querySelector('[data-mode-control-pill="'+c+'"]');if(f){var v=f.querySelector(".composer-text-label");v&&(v.textContent=d);var m=f.querySelector('[data-mode-control="'+c+'"]');m&&(u&&(m.innerHTML=u),m.value!==d&&(m.value=d))}}l("mode",n,po(t,n)),l("model",i,go(i,e)),l("thinking",a,bo(a))})}function po(e,t){return ua(e).map(function(n){return'<option value="'+p(n)+'"'+(n===t?" selected":"")+">"+p(n)+"</option>"}).join("")}function vo(e){return e&&e.selectedModel?e.selectedModel:r.chatModel?r.chatModel:r.config&&r.config.defaultModel?r.config.defaultModel:""}function mo(e){var t=e&&e.provider||r.sessionTool||"claude";return t==="codex"?r.availableCodexModels||[]:r.availableModels||[]}function Mu(e,t){for(var n=mo(t),i='<option value="">\u9ED8\u8BA4\uFF08\u8DDF\u968F\u8BBE\u7F6E\uFF09</option>',a=0;a<n.length;a++){var s=n[a],o=s.label||s.id;i+='<option value="'+p(s.id)+'"'+(s.id===e?" selected":"")+">"+p(o)+"</option>"}return e&&!n.some(function(l){return l.id===e})&&(i+='<option value="'+p(e)+'" selected>'+p(e)+"\uFF08\u81EA\u5B9A\u4E49\uFF09</option>"),i}function go(e,t){for(var n=mo(t),i='<option value="">default</option>',a=0;a<n.length;a++){var s=n[a];i+='<option value="'+p(s.id)+'"'+(s.id===e?" selected":"")+">"+p(s.id)+"</option>"}return e&&!n.some(function(o){return o.id===e})&&(i+='<option value="'+p(e)+'" selected>'+p(e)+"</option>"),i}function Gn(e){Yn()}var ln=[{id:"off",label:"off",hint:"\u4E0D\u542F\u7528\u601D\u8003\uFF08CLI \u65E0\u524D\u7F00\uFF1BSDK \u5173\u95ED thinking\uFF1BCodex minimal\uFF09"},{id:"standard",label:"think",hint:"Claude CLI: think \xB7 SDK budget 4096 \xB7 Codex low"},{id:"deep",label:"think hard",hint:"Claude CLI: think hard \xB7 SDK budget 16000 \xB7 Codex medium"},{id:"max",label:"ultrathink",hint:"Claude CLI: ultrathink \xB7 SDK budget 31999 \xB7 Codex high"}];function Au(e){for(var t=0;t<ln.length;t++)if(ln[t].id===e)return ln[t].label;return ln[0].label}function ho(e){return e&&e.thinkingEffort?e.thinkingEffort:r.chatThinking?r.chatThinking:"off"}function Nm(e){for(var t=e||"off",n="",i=0;i<ln.length;i++){var a=ln[i];n+='<option value="'+p(a.id)+'"'+(a.id===t?" selected":"")+' title="'+p(a.hint)+'">'+p(a.label)+"</option>"}return n}function bo(e){for(var t=e||"off",n="",i=0;i<ln.length;i++){var a=ln[i];n+='<option value="'+p(a.id)+'"'+(a.id===t?" selected":"")+">"+p(a.id)+"</option>"}return n}function Rm(e){Yn()}function qu(e){var t=(e||"off").trim();t!=="off"&&t!=="standard"&&t!=="deep"&&t!=="max"&&(t="off"),r.chatThinking=t;try{localStorage.setItem("wand-thinking-effort",t)}catch{}Yn();var n=ye();n&&fetch("/api/sessions/"+encodeURIComponent(n.id)+"/thinking-effort",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({thinkingEffort:t})}).then(function(i){return i.json()}).then(function(i){if(i&&i.error){T(i.error,"error");return}i&&i.id&&($(i),typeof T=="function"&&T("\u5DF2\u5207\u6362\u601D\u8003\u6DF1\u5EA6 \u2192 "+Au(t),"success"))}).catch(function(){T("\u5207\u6362\u601D\u8003\u6DF1\u5EA6\u5931\u8D25","error")})}function yo(e){if(!e)return!1;var t=e.mode;return t==="managed"||t==="full-access"}function Ou(e){if(!e||yo(e))return"";var t=!!e.autoApprovePermissions;return t?'<span id="auto-approve-toggle" class="composer-pill composer-pill-chip auto-approve-indicator active" title="\u81EA\u52A8\u6279\u51C6\u5DF2\u542F\u7528 \u2014 \u70B9\u51FB\u5173\u95ED">'+J("shieldCheck",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u81EA\u52A8</span></span>':'<span id="auto-approve-toggle" class="composer-pill composer-pill-chip auto-approve-indicator" title="\u81EA\u52A8\u6279\u51C6\u5DF2\u5173\u95ED \u2014 \u70B9\u51FB\u5F00\u542F">'+J("shield",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u624B\u52A8</span></span>'}function wo(){return fetch("/api/models",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e&&Array.isArray(e.models)&&(r.availableModels=e.models,r.availableCodexModels=Array.isArray(e.codexModels)?e.codexModels:[],Gn(ye()),li(e)),e}).catch(function(){return null})}function Pu(){if(r.modelsRefreshing)return Promise.resolve(null);r.modelsRefreshing=!0;var e=document.getElementById("cfg-default-model-refresh");return e&&(e.disabled=!0,e.textContent="\u5237\u65B0\u4E2D..."),fetch("/api/models/refresh",{method:"POST",credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){return t&&Array.isArray(t.models)&&(r.availableModels=t.models,r.availableCodexModels=Array.isArray(t.codexModels)?t.codexModels:[],Gn(ye()),li(t),typeof T=="function"&&T("\u6A21\u578B\u5217\u8868\u5DF2\u5237\u65B0"+(t.claudeVersion?"\uFF08claude "+t.claudeVersion+"\uFF09":""),"success")),t}).catch(function(){return typeof T=="function"&&T("\u5237\u65B0\u6A21\u578B\u5217\u8868\u5931\u8D25","error"),null}).finally(function(){r.modelsRefreshing=!1,e&&(e.disabled=!1,e.textContent="\u5237\u65B0")})}function Hu(){var e=document.getElementById("env-preview-modal");if(!e){e=document.createElement("section"),e.id="env-preview-modal",e.className="modal-backdrop hidden",e.innerHTML='<div class="modal env-preview-modal" role="dialog" aria-labelledby="env-preview-title" aria-modal="true"><div class="modal-header"><div><h2 class="modal-title" id="env-preview-title">\u5C06\u6CE8\u5165\u5B50\u8FDB\u7A0B\u7684\u73AF\u5883\u53D8\u91CF</h2><p class="modal-subtitle" id="env-preview-subtitle">\u8FD9\u4E9B\u53D8\u91CF\u4F1A\u88AB\u4F20\u7ED9 claude / codex\uFF08PTY \u4E0E\u7ED3\u6784\u5316\u8FD0\u884C\u5668\u4E00\u81F4\uFF09\u3002</p></div><button id="env-preview-close" class="btn btn-ghost btn-icon modal-close-btn" type="button" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button></div><div class="modal-body env-preview-body"><div class="env-preview-toolbar"><div class="env-preview-meta" id="env-preview-meta">\u52A0\u8F7D\u4E2D\u2026</div><div class="env-preview-controls"><input id="env-preview-search" class="env-preview-search" type="search" placeholder="\u641C\u7D22\u53D8\u91CF\u540D\u2026" /><label class="env-preview-reveal"><input id="env-preview-reveal-toggle" type="checkbox" /><span>\u663E\u793A\u654F\u611F\u503C</span></label></div></div><div class="env-preview-list" id="env-preview-list" tabindex="0"><div class="env-preview-loading">\u52A0\u8F7D\u4E2D\u2026</div></div></div><div class="modal-footer env-preview-footer"><span class="env-preview-hint">\u654F\u611F\u5B57\u6BB5\uFF08\u542B KEY/TOKEN/SECRET \u7B49\uFF09\u9ED8\u8BA4\u63A9\u7801\uFF0C\u53EF\u52FE\u9009\u300C\u663E\u793A\u654F\u611F\u503C\u300D\u4E34\u65F6\u8FD8\u539F\u3002</span><button id="env-preview-close-2" class="btn btn-secondary btn-sm" type="button">\u5173\u95ED</button></div></div>',document.body.appendChild(e),e.addEventListener("click",function(l){l.target===e&&pa()});var t=e.querySelector("#env-preview-close");t&&t.addEventListener("click",pa);var n=e.querySelector("#env-preview-close-2");n&&n.addEventListener("click",pa);var a=e.querySelector("#env-preview-search");a&&a.addEventListener("input",function(){xo()});var i=e.querySelector("#env-preview-reveal-toggle");i&&i.addEventListener("change",function(){ko(i.checked)})}e.classList.remove("closing"),e.classList.remove("hidden");var i=e.querySelector("#env-preview-reveal-toggle");i&&(i.checked=!1);var a=e.querySelector("#env-preview-search");a&&(a.value=""),ko(!1)}function pa(){var e=document.getElementById("env-preview-modal");e&&ga(e)}function ko(e){var t=document.getElementById("env-preview-list"),n=document.getElementById("env-preview-meta");t&&(t.innerHTML='<div class="env-preview-loading">\u52A0\u8F7D\u4E2D\u2026</div>'),n&&(n.textContent="\u52A0\u8F7D\u4E2D\u2026");var i="/api/settings/env-preview"+(e?"?reveal=1":"");fetch(i,{credentials:"same-origin"}).then(function(a){return a.json()}).then(function(a){if(!a||!Array.isArray(a.entries)){t&&(t.innerHTML='<div class="env-preview-empty">\u8BFB\u53D6\u5931\u8D25\u3002</div>'),n&&(n.textContent="\u8BFB\u53D6\u5931\u8D25");return}if(r._envPreview=a,n){var s=a.inheritEnv?"\u7EE7\u627F\u7236\u8FDB\u7A0B":"\u6700\u5C0F\u767D\u540D\u5355";n.innerHTML='<span class="env-preview-pill '+(a.inheritEnv?"is-inherit":"is-minimal")+'">'+s+'</span><span class="env-preview-count">\u5171 '+a.total+" \u9879</span>"}xo()}).catch(function(){t&&(t.innerHTML='<div class="env-preview-empty">\u8BFB\u53D6\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002</div>'),n&&(n.textContent="\u8BFB\u53D6\u5931\u8D25")})}function xo(){var e=document.getElementById("env-preview-list");if(e){var t=r._envPreview;if(!t||!Array.isArray(t.entries)){e.innerHTML='<div class="env-preview-empty">\u5C1A\u672A\u52A0\u8F7D\u3002</div>';return}for(var n=document.getElementById("env-preview-search"),i=(n&&n.value||"").trim().toLowerCase(),a="",s=0,o=0;o<t.entries.length;o++){var l=t.entries[o];if(!(i&&l.name.toLowerCase().indexOf(i)===-1)){s++;var c=typeof l.value=="string"&&l.value.charAt(0)==="<"&&l.value.charAt(l.value.length-1)===">";a+='<div class="env-preview-row'+(l.sensitive?" is-sensitive":"")+'"><div class="env-preview-name">'+p(l.name)+(l.sensitive?'<span class="env-preview-badge" title="\u88AB\u8BC6\u522B\u4E3A\u654F\u611F\u5B57\u6BB5">\u654F\u611F</span>':"")+(c?'<span class="env-preview-badge env-preview-badge-runtime" title="\u6309\u4F1A\u8BDD\u52A8\u6001\u6CE8\u5165">\u8FD0\u884C\u65F6</span>':"")+'</div><div class="env-preview-value'+(c?" is-runtime":"")+'" title="'+p(String(l.value))+'">'+p(String(l.value))+'</div><div class="env-preview-len">'+l.length+" \u5B57\u7B26</div></div>"}}s===0&&(a='<div class="env-preview-empty">\u6CA1\u6709\u5339\u914D\u7684\u53D8\u91CF\u3002</div>'),e.innerHTML=a}}function li(e){var t=document.getElementById("cfg-default-model");if(t){var n=t.value,i=n||r.configDefaultModel||r.config&&r.config.defaultModel||"";t.innerHTML=Mu(i,{provider:"claude"}),t.value=i;var a=document.getElementById("cfg-default-model-version");a&&e&&(a.textContent=e.claudeVersion?"\u5DF2\u68C0\u6D4B\u5230 claude "+e.claudeVersion:"\u65B0\u5EFA\u4F1A\u8BDD\u65F6\u9ED8\u8BA4\u4F7F\u7528\u8BE5\u6A21\u578B\u3002")}}function _u(e){var t=(e||"").trim();r.chatModel=t;try{localStorage.setItem("wand-chat-model",t)}catch{}Yn();var n=ye();n&&fetch("/api/sessions/"+encodeURIComponent(n.id)+"/model",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({model:t||null})}).then(function(i){return i.json()}).then(function(i){if(i&&i.error){T(i.error,"error");return}if(i&&i.id&&($(i),typeof T=="function")){var a=t||"\u9ED8\u8BA4",s=n.provider==="codex"?"\uFF08\u4E0B\u6B21\u5BF9\u8BDD\u751F\u6548\uFF09":"";T("\u5DF2\u5207\u6362\u6A21\u578B \u2192 "+a+s,"success")}}).catch(function(){T("\u5207\u6362\u6A21\u578B\u5931\u8D25","error")})}function So(e,t,n,i){var a=r.sessionTool==="codex"?"codex":"claude",s=r.chatModel||r.config&&r.config.defaultModel||"",o=r.chatThinking||"off",l={cwd:t||Ge(),mode:n||r.chatMode||r.config&&r.config.defaultMode||"default",provider:a,runner:a==="codex"?"codex-cli-exec":r.config&&r.config.structuredRunner==="sdk"?"claude-sdk":r.structuredRunner||"claude-cli-print",prompt:e||void 0,worktreeEnabled:i===!0,model:s||void 0,thinkingEffort:o};return fetch("/api/structured-sessions",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(l)}).then(function(c){return c.json()}).then(function(c){if(c.error)throw new Error(c.error);return r.selectedId=c.id,be(),r.drafts[c.id]="",It(),$(c),ve(),Mr(c.id),qn(c.id),dn(c.id).then(function(){return c})})}function ci(){var e=!!r.selectedId,t=document.getElementById("output"),n=document.getElementById("chat-output"),i=document.getElementById("blank-chat"),a=r.sessions.find(function(c){return c.id===r.selectedId}),s=se(a),o=e&&!s&&r.currentView==="terminal",l=e&&(s||r.currentView!=="terminal");s?r.currentView="chat":e||(r.currentView="terminal"),t&&(t.classList.toggle("active",o),t.classList.toggle("hidden",!o)),n&&(n.classList.toggle("active",l),n.classList.toggle("hidden",!l)),i&&i.classList.toggle("hidden",e),n&&l&&Ua(n),fr(),Ye(),Ar()}function kr(){var e=document.getElementById("mode-description"),t=document.getElementById("session-kind-description"),n=r.sessionTool||"claude",i=r.sessionCreateKind||"structured";r.sessionTool=n,r.modeValue=_t(n,r.modeValue||r.chatMode||"default");var a=document.querySelectorAll("#provider-cards .provider-card");a.length&&a.forEach(function(l){var c=l.getAttribute("data-provider");l.classList.toggle("active",c===n),l.classList.remove("disabled")});var s=document.querySelectorAll("#session-kind-cards .session-kind-card");s.length&&s.forEach(function(l){var c=l.getAttribute("data-session-kind"),d=!1;l.classList.toggle("active",c===i),l.classList.toggle("disabled",d)});var o=document.querySelectorAll("#mode-cards .mode-card");o.length&&o.forEach(function(l){l.classList.toggle("active",l.getAttribute("data-mode")===r.modeValue)}),t&&(t.textContent=Zs(i)),e&&(e.textContent=co(n,r.modeValue))}function $(e){if(!(!e||!e.id)){var t=r.sessions.find(function(o){return o.id===e.id})||null,n=Oc(e,t),i=!1,a=null;r.sessions=r.sessions.map(function(o){return o.id!==n.id?o:(a=o,i=!0,Object.assign({},o,n))}),i||r.sessions.unshift(n);var s=r.sessions.find(function(o){return o.id===n.id})||n;s&&Array.isArray(s.queuedMessages)&&n.id===r.selectedId&&(Jr(s),us(),mn()),n.id===r.selectedId&&(qa(),Xt()),n.status&&n.status!=="running"&&r.crossSessionQueue.length>0&&setTimeout(pi,0)}}function qn(e){!e||!r.ws||r.ws.readyState!==WebSocket.OPEN||r.ws.send(JSON.stringify({type:"subscribe",sessionId:e}))}function Du(e,t){if(!e)return t;var n=Object.assign({},e,t),i=e.output||"",a=t.output||"",s=i.length>a.length,o=e.structuredState||null,l=t.structuredState||null,c=e.sessionKind==="structured"||t.sessionKind==="structured",d=!!(e.messages&&e.messages.length&&(function(){var g=e.messages[e.messages.length-1];return g&&g.role==="assistant"&&Array.isArray(g.content)&&g.content.some(function(b){return b&&b.__processing})})()),u=Array.isArray(e.messages)?c?vr(e.messages):e.messages:[],f=Array.isArray(t.messages)?c?vr(t.messages):t.messages:[],v=f.length>0&&(function(){var g=f[f.length-1];return g&&g.role==="assistant"&&Array.isArray(g.content)&&!g.content.some(function(b){return b&&b.__processing})})(),m=e.sessionKind==="structured"&&!!o&&o.inFlight===!0&&(!l||l.inFlight!==!0)&&d&&!!o.activeRequestId&&!!l&&!!l.activeRequestId&&l.activeRequestId===o.activeRequestId&&!v,y=u.length>f.length||u.length>0&&f.length>0&&JSON.stringify(u[u.length-1])!==JSON.stringify(f[f.length-1])&&JSON.stringify(u).length>JSON.stringify(f).length;return s&&(n.output=i),m&&(n.status=e.status||n.status,n.structuredState=Object.assign({},l||{},o,{inFlight:!0}),n.messages=e.messages),y&&(n.messages=u),e.id===r.selectedId&&(e.permissionBlocked&&t.permissionBlocked===!1||e.permissionBlocked&&!t.permissionBlocked&&(n.permissionBlocked=!0),e.pendingEscalation&&!t.pendingEscalation&&t.permissionBlocked!==!1&&(n.pendingEscalation=e.pendingEscalation),e.messages&&e.messages.length>0&&(!t.messages||t.messages.length===0)&&(n.messages=e.messages)),n}function ct(e,t,n){if(e&&e.messages&&e.messages.length>0)return e.messages;if(e&&e.sessionKind==="structured")return[];if(!n)return[];var i=typeof t=="string"?t:e&&e.output||"";return i?Hv(i,e&&e.command):[]}function ju(e){if(!e||!e.length)return null;if(r.selectedId){var t=e.find(function(a){return a.id===r.selectedId});return t?t.id:null}var n=e.find(function(a){return a.status==="running"});if(n)return n.id;var i=e.find(function(a){return!a.archived});return i?i.id:e[0].id}function cn(e){var t=e||{};return fetch("/api/sessions",{credentials:"same-origin"}).then(function(n){if(n.status===401){oo();return}return n.json()}).then(function(n){var i=n||[],a=new Set(i.map(function(f){return f.id}));Object.keys(r.drafts).forEach(function(f){a.has(f)||delete r.drafts[f]}),r.sessions=i.map(function(f){var v=r.sessions.find(function(m){return m.id===f.id});return Du(v,f)});var s=ju(r.sessions);if(s!==void 0&&(r.selectedId=s),ps(),mn(),r.bootstrapping=!1,be(),r.modalOpen)ve();else{var o=document.getElementById("sessions-list"),l=Ji();if(o&&o.innerHTML===l){var c=document.getElementById("session-count");c&&(c.textContent=String(r.sessions.length))}else{o&&(o.innerHTML=l);var c=document.getElementById("session-count");c&&(c.textContent=String(r.sessions.length))}}xr(),r.selectedId&&r.gitStatusSessionId!==r.selectedId&&Tn(r.selectedId);var d=Promise.resolve();if(!t.skipSelectedOutputReload&&r.selectedId)d=dn(r.selectedId);else if(r.selectedId){var u=r.sessions.find(function(f){return f.id===r.selectedId});se(u)&&(It({preserveStickState:!0}),Nr(!0))}return d.then(function(){r.crossSessionQueue.length>0&&pi(),Lt(),rs()})}).catch(function(n){var i=n&&n.message||"",a=i==="Failed to fetch"||i==="NetworkError when attempting to fetch resource."||i==="Load failed"||/aborted|aborterror|networkerror|failed to fetch/i.test(i);a||console.error("[wand] loadSessions failed:",n)})}var va=null;function Eo(){va||(va=setTimeout(function(){va=null,ve()},200))}function ve(){var e=document.getElementById("sessions-list"),t=document.getElementById("session-count");e&&(e.innerHTML=Ji()),t&&(t.textContent=String(r.sessions.length)),typeof $t=="function"&&$t(),xr(),r.crossSessionQueue.length>0&&Lt()}function xr(){var e=r.sessions.find(function(m){return m.id===r.selectedId});e||(On(!1),Aa(),al());var t=e?Ti(e.command):"Wand",n=e?yr(e):"\u5F00\u59CB\u5BF9\u8BDD",i=document.querySelector(".session-summary-value"),a=document.getElementById("terminal-title"),s=document.getElementById("terminal-info"),o=document.getElementById("blank-chat"),l=document.getElementById("output"),c=document.getElementById("chat-output"),d=document.getElementById("stop-button");i&&i.textContent!==t&&(i.textContent=t),a&&a.textContent!==t&&(a.textContent=t),s&&(s.textContent=e?n+" \xB7 "+Lu(e):n);var u=document.getElementById("session-kind-display"),f=e?Tu(e):"\u7EC8\u7AEF";u&&u.textContent!==f&&(u.textContent=f),Pl(),!r.terminal&&l&&e&&Jn(),r.terminal&&l&&!l.contains(r.terminal.element)&&(Dr(),Jn()),e||(r.terminalSessionId=null,r.terminalOutput="",r.terminalOutputMarker=0),r.terminal&&e&&r.currentView==="terminal"&>("view");var v=document.querySelector(".input-panel");e?(o&&o.classList.add("hidden"),l&&l.classList.remove("hidden"),c&&c.classList.remove("hidden"),v&&v.classList.remove("hidden")):(o&&o.classList.remove("hidden"),l&&l.classList.add("hidden"),c&&c.classList.add("hidden"),d&&d.classList.add("hidden"),v&&v.classList.add("hidden")),oi(),Gn(ye()),ci(),qa()}function dn(e){$e&&(clearTimeout($e),$e=null);var t=r.sessions.find(function(i){return i.id===e}),n="/api/sessions/"+e;return Bu(t)&&(n+="?format=chat"),fetch(n,{credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i.error){r.selectedId===e&&(r.selectedId=null,be()),cn();return}if($(i),xr(),r.terminal&&e===r.selectedId&&i.output!==void 0){var a=!!r.ws&&(r.ws.readyState===WebSocket.OPEN||r.ws.readyState===WebSocket.CONNECTING);a?at("session-switch"):(si(e,i.output,{mode:"append"}),at("session-switch",{forceReplay:!0}))}var s=r.sessions.find(function(o){return o.id===e});r.currentMessages=Qe(s,ct(s,i.output,!1)),He(!1)})}function Dt(e){var t=r.sessions.find(function(o){return o.id===e});if(t){r.selectedId!==e&&Dr(),r.selectedId=e,be(),r.toolContentCache={},r.messageQueue=[],r.pendingMessages=[],Jr(t),ps(),mn(),It(),r.currentMessages=[],$e&&(clearTimeout($e),$e=null);var n=document.getElementById("todo-progress");n&&n.classList.add("hidden");var i=document.querySelector(".structured-status-bar");i&&i.remove(),mt&&(clearInterval(mt),mt=null),Vt=0;var a=document.querySelector(".input-composer");a&&a.classList.remove("in-flight");var s=t;r.preferredCommand=ht(),r.chatMode=_t("claude",s&&s.mode?s.mode:r.chatMode),r.terminalInteractive&&s&&s.status!=="running"&&On(!1),ve(),Mr(e),r.filePanelOpen&&(Id(s),Pt()),dn(e).then(function(){Ft(!0)}),qn(e),r.gitStatus=null,r.gitStatusSessionId=null,Ki(),Tn(e,{force:!0})}}function Nu(){var e=document.getElementById("sessions-drawer"),t=document.querySelector(".main-layout"),n=Ne(),i=!!r.sidebarPinned&&!!r.sidebarCollapsed,a=i||!n&&(!!r.sidebarPinned||!!r.sessionsDrawerOpen);e&&(e.classList.toggle("pinned",a),e.classList.toggle("collapsed",i)),t&&(t.classList.toggle("sidebar-pinned",a),t.classList.toggle("sidebar-collapsed",i));var s=document.getElementById("sidebar-pin-btn");s&&(s.classList.toggle("pinned",!!r.sidebarPinned),s.title=r.sidebarPinned?"\u5DF2\u56FA\u5B9A\u5E38\u9A7B\uFF08\u70B9\u51FB\u89E3\u9664\u9501\u5B9A\uFF09":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B",s.setAttribute("aria-label",r.sidebarPinned?"\u89E3\u9664\u56FA\u5B9A\u5E38\u9A7B":"\u56FA\u5B9A\u4FA7\u680F\u5E38\u9A7B"),s.setAttribute("aria-pressed",r.sidebarPinned?"true":"false"))}function Sr(){var e=document.getElementById("sessions-drawer"),t=document.getElementById("sessions-drawer-backdrop"),n=document.querySelector(".main-layout");e&&e.classList.toggle("open",r.sessionsDrawerOpen),t&&t.classList.toggle("open",As()),n&&n.classList.toggle("sidebar-open",r.sessionsDrawerOpen);var i=document.getElementById("sessions-toggle-button");i&&i.classList.toggle("active",r.sessionsDrawerOpen),Nu()}function Ru(){var e=Ne();if(!e){var t=r.sidebarPinned?!1:!r.sessionsDrawerOpen;r.sessionsDrawerOpen=t,t&&(r.sidebarCollapsed=!1,Ee("wand-sidebar-collapsed",!1)),Ee("wand-sidebar-open",r.sessionsDrawerOpen),on(),Ir();return}if(r.sessionsDrawerOpen=!r.sessionsDrawerOpen,Ee("wand-sidebar-open",r.sessionsDrawerOpen),r.sessionsDrawerOpen){r.filePanelOpen=!1;try{localStorage.setItem("wand-file-panel-open","false")}catch{}}on()}function Er(){var e=Ne();if(!e){if(!r.sidebarPinned&&!r.sessionsDrawerOpen)return;Pr(),r.sidebarPinned=!1,r.sessionsDrawerOpen=!1,Ee("wand-sidebar-pinned",!1),Ee("wand-sidebar-open",!1),on(),Ir();return}r.sessionsDrawerOpen&&(Pr(),r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),on())}function Fu(){if(Ne()){Er();return}r.sidebarPinned||r.sidebarCollapsed||!r.sessionsDrawerOpen||(Pr(),r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),on(),Ir())}function Io(e){var t=document.getElementById("composer-plus-popover"),n=document.getElementById("attach-btn");r.plusPopoverOpen=!!e,t&&t.classList.toggle("hidden",!e),n&&(n.classList.toggle("active",!!e),n.setAttribute("aria-expanded",e?"true":"false"))}function Wu(){Io(!r.plusPopoverOpen)}function di(){r.plusPopoverOpen&&Io(!1)}function jt(){Ne()&&r.sessionsDrawerOpen&&Er()}function Ir(){var e=document.querySelector(".main-layout");if(e){var t=function(n){n.propertyName==="padding-left"&&(e.removeEventListener("transitionend",t),Wt(!0))};e.addEventListener("transitionend",t)}setTimeout(function(){Wt(!0)},350)}var Nt=null;function zu(){return Nt&&document.body.contains(Nt)||(Nt=document.createElement("div"),Nt.className="sidebar-tile-bubble",Nt.setAttribute("role","tooltip"),document.body.appendChild(Nt)),Nt}function $t(){Nt&&Nt.classList.remove("visible")}function Uu(e,t){if(!t){$t();return}var n=zu();n.textContent=t.length>400?t.slice(0,400)+"\u2026":t;var i=e.getBoundingClientRect();n.classList.add("visible");var a=n.getBoundingClientRect(),s=i.top+i.height/2,o=s-a.height/2,l=8,c=window.innerHeight-a.height-8;o<l&&(o=l),o>c&&(o=Math.max(l,c)),n.style.left=i.right+12+"px",n.style.top=o+"px",n.style.setProperty("--bubble-tail-y",s-o+"px")}function Vu(e){if(e.dataset.collapsedSessionId){var t=r.sessions.find(function(a){return a.id===e.dataset.collapsedSessionId});if(!t)return"";var n=Vd(t);return n||t.summary||t.command||""}if(e.dataset.collapsedHistoryId){var i=r.claudeHistory.find(function(a){return a.claudeSessionId===e.dataset.collapsedHistoryId});if(i&&i.firstUserMessage)return i.firstUserMessage}return""}function Ku(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest(".sidebar-collapsed-tile");if(!n){$t();return}var i=Vu(n);if(!i){$t();return}Uu(n,i)}}function Ju(e){var t=e.relatedTarget;t&&t instanceof Element&&t.closest(".sidebar-collapsed-tile")||$t()}function Yu(){var e=Ne();r.sidebarPinned||(r.sidebarPinned=!0,Ee("wand-sidebar-pinned",!0)),r.sidebarCollapsed=!r.sidebarCollapsed,Ee("wand-sidebar-collapsed",r.sidebarCollapsed),r.sidebarCollapsed?r.sessionsDrawerOpen=!1:e?(r.sidebarPinned=!1,r.sessionsDrawerOpen=!0,Ee("wand-sidebar-pinned",!1)):r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",r.sessionsDrawerOpen),on(),ve(),Qu(),$t(),Ir()}function Gu(){Ne()||(r.sidebarPinned=!r.sidebarPinned,r.sessionsDrawerOpen=!0,Ee("wand-sidebar-pinned",r.sidebarPinned),Ee("wand-sidebar-open",!0),on(),Ir())}function Qu(){var e=document.getElementById("sidebar-collapse-btn");if(e){var t=!!r.sidebarPinned&&!!r.sidebarCollapsed;e.classList.toggle("collapsed",t),e.title=t?"\u5C55\u5F00\u4FA7\u680F":"\u6536\u8D77\u4E3A\u7A84\u6761",e.setAttribute("aria-label",t?"\u5C55\u5F00\u4FA7\u680F":"\u6536\u8D77\u4E3A\u7A84\u6761"),e.innerHTML=t?'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="10 6 16 12 10 18"/><line x1="20" y1="5" x2="20" y2="19"/></svg>':'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="14 6 8 12 14 18"/><line x1="4" y1="5" x2="4" y2="19"/></svg>'}}function $u(e){if(e){e.style.left="",e.style.right="";var t=e.offsetParent||e.parentElement;if(t){var n=8,i=t.getBoundingClientRect(),a=e.getBoundingClientRect(),s=window.innerWidth;a.left<n?(e.style.right="auto",e.style.left=n-i.left+"px"):a.right>s-n&&(e.style.left="auto",e.style.right=i.right-(s-n)+"px")}}}var Ue=null,Ve=null;function ma(){$n(),r.modalOpen=!0,r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Sr();var e=document.getElementById("session-modal");e&&(e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.remove("closing"),e.classList.remove("hidden"),Ue=document.activeElement,r.sessionTool=ht(),r.preferredCommand=r.sessionTool,r.sessionCreateKind="structured",r.sessionCreateWorktree=!1,r.modeValue=_t(r.sessionTool,r.modeValue||r.chatMode),kr(),Sf(),setTimeout(function(){var t=document.getElementById("mode-cards");t&&t.focus()},20),ui(e))}function un(){r.modalOpen=!1;var e=document.getElementById("session-modal");e&&(Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus(),ga(e)),Zn()}function ga(e){if(e&&!e.classList.contains("hidden")){var t=!1;try{t=window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{}if(t||document.hidden){e.classList.remove("closing"),e.classList.add("hidden");return}e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.add("closing"),e._wandCloseTimer=setTimeout(function(){e.classList.remove("closing"),e.classList.add("hidden"),e._wandCloseTimer=null},170)}}function ui(e){Ve&&document.removeEventListener("keydown",Ve);var t='button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])';Ve=function(n){if(n.key==="Tab"){var i=e.querySelectorAll(t),a=i[0],s=i[i.length-1];!a||!s||(n.shiftKey?document.activeElement===a&&(n.preventDefault(),s.focus()):document.activeElement===s&&(n.preventDefault(),a.focus()))}},document.addEventListener("keydown",Ve)}function Xu(){return r.activeWorktreeMergeSessionId&&r.sessions.find(function(e){return e.id===r.activeWorktreeMergeSessionId})||null}function Cr(){var e=document.getElementById("worktree-merge-content"),t=document.getElementById("worktree-merge-confirm-button"),n=document.getElementById("worktree-merge-error"),i=Xu(),a=r.worktreeMergeCheckResult;if(!(!e||!t)){if(!i||!i.worktree){e.innerHTML='<p class="field-hint">\u672A\u627E\u5230\u53EF\u5408\u5E76\u7684 worktree \u4F1A\u8BDD\u3002</p>',t.disabled=!0;return}n&&(r.worktreeMergeError?Ke(n,r.worktreeMergeError):Li(n));var s=['<div class="worktree-merge-row"><span>\u6765\u6E90\u5206\u652F</span><strong>'+p(i.worktree.branch||"-")+"</strong></div>",'<div class="worktree-merge-row"><span>\u5DE5\u4F5C\u76EE\u5F55</span><strong>'+p(i.worktree.path||"-")+"</strong></div>"];a?(s.push('<div class="worktree-merge-row"><span>\u76EE\u6807\u5206\u652F</span><strong>'+p(a.targetBranch||"-")+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u5F85\u5408\u5E76\u63D0\u4EA4</span><strong>'+p(String(a.aheadCount||0))+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u672A\u63D0\u4EA4\u6539\u52A8</span><strong>'+p(a.hasUncommittedChanges?"\u6709":"\u65E0")+"</strong></div>"),s.push('<div class="worktree-merge-row"><span>\u51B2\u7A81\u98CE\u9669</span><strong>'+p(a.hasConflicts?"\u6709":"\u65E0")+"</strong></div>"),a.reason&&s.push('<p class="field-hint">'+p(a.reason)+"</p>")):r.worktreeMergeLoading&&s.push('<p class="field-hint">\u6B63\u5728\u68C0\u67E5 worktree \u5408\u5E76\u72B6\u6001\u2026</p>'),e.innerHTML=s.join(""),t.disabled=r.worktreeMergeLoading||r.worktreeMergeSubmitting||!a||a.ok!==!0,t.textContent=r.worktreeMergeSubmitting?"\u5408\u5E76\u4E2D...":"\u786E\u8BA4\u5408\u5E76\u5E76\u6E05\u7406"}}function Co(e){r.activeWorktreeMergeSessionId=e,r.worktreeMergeCheckResult=null,r.worktreeMergeLoading=!0,r.worktreeMergeSubmitting=!1,r.worktreeMergeError="",un(),$n();var t=document.getElementById("worktree-merge-modal");t&&(t.classList.remove("hidden"),Ue=document.activeElement,ui(t)),Cr(),fetch("/api/sessions/"+encodeURIComponent(e)+"/worktree/merge/check",{method:"POST",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);n&&n.session&&$(n.session),r.worktreeMergeCheckResult=n.result||null,r.worktreeMergeError=""}).catch(function(n){r.worktreeMergeError=n&&n.message||"\u65E0\u6CD5\u68C0\u67E5 worktree \u5408\u5E76\u72B6\u6001\u3002"}).finally(function(){r.worktreeMergeLoading=!1,Cr()})}function Qn(){var e=document.getElementById("worktree-merge-modal");r.activeWorktreeMergeSessionId=null,r.worktreeMergeCheckResult=null,r.worktreeMergeLoading=!1,r.worktreeMergeSubmitting=!1,r.worktreeMergeError="",e&&e.classList.add("hidden"),Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus()}function Zu(){!r.activeWorktreeMergeSessionId||r.worktreeMergeSubmitting||(r.worktreeMergeSubmitting=!0,r.worktreeMergeError="",Cr(),fetch("/api/sessions/"+encodeURIComponent(r.activeWorktreeMergeSessionId)+"/worktree/merge",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}).then(function(e){return e.json()}).then(function(e){if(e&&e.error)throw new Error(e.error);return e&&e.session&&$(e.session),T("\u5DF2\u5408\u5E76\u5230 "+p(e.result&&e.result.targetBranch||"\u4E3B\u5206\u652F")+(e.result&&e.result.cleanupDone===!1?"\uFF0C\u4F46\u5DE5\u4F5C\u6811\u5F85\u6E05\u7406\u3002":"\u3002"),"info"),Qn(),Ht()}).catch(function(e){r.worktreeMergeError=e&&e.message||"\u65E0\u6CD5\u5408\u5E76 worktree\u3002",Cr()}).finally(function(){r.worktreeMergeSubmitting=!1,Cr()}))}function To(e){fetch("/api/sessions/"+encodeURIComponent(e)+"/worktree/cleanup",{method:"POST",credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(t&&t.error)throw new Error(t.error);return t&&t.session&&$(t.session),T("\u5DF2\u5B8C\u6210 worktree \u6E05\u7406\u3002","info"),Ht()}).catch(function(t){T(t&&t.message||"\u65E0\u6CD5\u6E05\u7406 worktree\u3002","error")})}function ef(){un();var e=document.getElementById("settings-modal");if(e){e._wandCloseTimer&&(clearTimeout(e._wandCloseTimer),e._wandCloseTimer=null),e.classList.remove("closing"),e.classList.remove("hidden"),Ue=document.activeElement;var t=document.getElementById("new-password"),n=document.getElementById("confirm-password");t&&(t.value=""),n&&(n.value=""),Lo(),ui(e),nf(),ha("about"),of();var i=document.getElementById("cfg-notif-sound"),a=document.getElementById("cfg-notif-bubble");i&&(i.checked=r.notifSound),a&&(a.checked=r.notifBubble);var s=document.getElementById("cfg-notif-volume"),o=document.getElementById("cfg-notif-volume-val");if(s){s.value=r.notifVolume,o&&(o.textContent=r.notifVolume+"%");try{s.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}}var l=document.getElementById("notif-volume-field");if(l&&(l.style.display=r.notifSound?"":"none"),pn(),typeof WandNative<"u"&&typeof WandNative.getAppIcon=="function")try{Ao(WandNative.getAppIcon()||"shorthair")}catch{}if(Re&&typeof WandNative.getNotificationSound=="function")try{var c=document.getElementById("native-sound-select");c&&(c.value=WandNative.getNotificationSound())}catch{}if(Re&&typeof WandNative.getNotificationVolume=="function")try{var d=WandNative.getNotificationVolume();if(r.notifVolume=d,s&&(s.value=d),o&&(o.textContent=d+"%"),s)try{s.dispatchEvent(new Event("input",{bubbles:!0}))}catch{}try{localStorage.setItem("wand-notif-volume",String(d))}catch{}}catch{}if(Re&&typeof WandNative.isHapticEnabled=="function")try{var u=document.getElementById("cfg-haptic-enabled");u&&(u.checked=WandNative.isHapticEnabled())}catch{}}}function $n(){var e=document.getElementById("settings-modal");e&&(Ve&&(document.removeEventListener("keydown",Ve),Ve=null),Ue&&typeof Ue.focus=="function"&&Ue.focus(),ga(e))}function Lo(){var e=document.getElementById("settings-error"),t=document.getElementById("settings-success");e&&e.classList.add("hidden"),t&&t.classList.add("hidden")}function tf(){var e=document.getElementById("new-password").value,t=document.getElementById("confirm-password").value,n=document.getElementById("settings-error"),i=document.getElementById("settings-success");if(Lo(),!e||e.length<6){n.textContent="\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11\u4E3A 6 \u4E2A\u5B57\u7B26\u3002",n.classList.remove("hidden");return}if(e!==t){n.textContent="\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002",n.classList.remove("hidden");return}fetch("/api/set-password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:e}),credentials:"same-origin"}).then(function(a){return a.json()}).then(function(a){if(a.error){n.textContent=a.error,n.classList.remove("hidden");return}i.textContent="\u5BC6\u7801\u4FEE\u6539\u6210\u529F\uFF01",i.classList.remove("hidden"),document.getElementById("new-password").value="",document.getElementById("confirm-password").value=""}).catch(function(){n.textContent="Failed to save password.",n.classList.remove("hidden")})}function ha(e){for(var t=document.querySelectorAll(".settings-tab"),n=document.querySelectorAll(".settings-panel"),i=0;i<t.length;i++){var a=t[i].getAttribute("data-tab")===e;a?t[i].classList.add("active"):t[i].classList.remove("active"),t[i].setAttribute("aria-selected",a?"true":"false"),t[i].setAttribute("tabindex",a?"0":"-1")}for(var s=0;s<n.length;s++){var o=n[s].id==="settings-tab-"+e;o?(n[s].classList.add("active"),n[s].removeAttribute("hidden")):(n[s].classList.remove("active"),n[s].setAttribute("hidden","hidden"))}}function Bo(e){if(e&&!(e.key!=="ArrowUp"&&e.key!=="ArrowDown"&&e.key!=="Home"&&e.key!=="End")){var t=Array.prototype.slice.call(document.querySelectorAll(".settings-tab"));if(t.length){var n=t.indexOf(e.currentTarget);if(n!==-1){e.preventDefault();var i=n;e.key==="ArrowUp"&&(i=n>0?n-1:t.length-1),e.key==="ArrowDown"&&(i=n<t.length-1?n+1:0),e.key==="Home"&&(i=0),e.key==="End"&&(i=t.length-1);var a=t[i];if(a){var s=a.getAttribute("data-tab");s&&ha(s),typeof a.focus=="function"&&a.focus()}}}}}function nf(){for(var e=document.querySelectorAll(".settings-tab"),t=0;t<e.length;t++)e[t].removeEventListener("keydown",Bo),e[t].addEventListener("keydown",Bo)}function rf(e){if(e){var t=e.config||{},n={about:e.version?"\u5F53\u524D v"+e.version:"\u7248\u672C\u4E0E\u66F4\u65B0\u4FE1\u606F",general:[t.defaultMode||"default",t.language||"\u81EA\u52A8\u8BED\u8A00"].filter(Boolean).join(" \xB7 "),notifications:r.notifSound?"\u63D0\u793A\u97F3 "+r.notifVolume+"%":"\u63D0\u793A\u97F3\u5DF2\u5173\u95ED",security:e.hasCert?"\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66":"\u5BC6\u7801\u4E0E\u8BC1\u4E66\u7BA1\u7406",presets:t.commandPresets&&t.commandPresets.length?t.commandPresets.length+" \u6761\u9884\u8BBE":"\u6682\u65E0\u9884\u8BBE",display:"\u63A7\u5236\u5361\u7247\u9ED8\u8BA4\u5C55\u5F00"};for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var a=document.querySelector('.settings-tab[data-tab="'+i+'"] .settings-tab-meta');a&&(a.textContent=n[i]||"")}}}function af(e){var t=document.getElementById("android-connect-qr"),n=document.getElementById("android-connect-qr-empty"),i=window.QRCodeLib;if(t){if(!i||typeof i.toCanvas!="function"){n&&(n.textContent="\u4E8C\u7EF4\u7801\u5E93\u672A\u52A0\u8F7D");return}try{i.toCanvas(t,e,{width:220,margin:1,errorCorrectionLevel:"M",color:{dark:"#1f1b17",light:"#ffffff00"}},function(a){if(a){n&&(n.textContent="\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25",n.style.display=""),t.style.visibility="hidden";return}n&&(n.style.display="none"),t.style.visibility="visible"})}catch{n&&(n.textContent="\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25",n.style.display=""),t.style.visibility="hidden"}}}function sf(e){var t=window.QRCodeLib;if(!t||typeof t.toCanvas!="function")return;var n=document.getElementById("connect-qr-modal");n&&n.remove();var i=document.createElement("div");i.id="connect-qr-modal",i.className="connect-qr-modal-overlay",i.innerHTML='<div class="connect-qr-modal-card"><canvas id="connect-qr-modal-canvas"></canvas><p class="connect-qr-modal-hint">\u7528 Wand App \u626B\u4E00\u626B\uFF0C\u8FDE\u63A5\u5F53\u524D\u670D\u52A1\u5668</p><button type="button" class="btn btn-secondary btn-sm connect-qr-modal-close">\u5173\u95ED</button></div>',document.body.appendChild(i);var a=i.querySelector("#connect-qr-modal-canvas"),s=Math.min(window.innerWidth,window.innerHeight)*.7;s<240&&(s=240),s>480&&(s=480);try{t.toCanvas(a,e,{width:s,margin:2,errorCorrectionLevel:"M",color:{dark:"#1f1b17",light:"#ffffff"}})}catch{}function o(){i.remove()}i.addEventListener("click",function(c){c.target===i&&o()});var l=i.querySelector(".connect-qr-modal-close");l&&l.addEventListener("click",o)}function Tr(e,t,n){if(!e)return;function i(){if(rr("light"),n){n();return}if(t){var a=t.textContent;t.textContent="\u5DF2\u590D\u5236",setTimeout(function(){t.textContent=a},1500)}}if(Re&&typeof WandNative.copyToClipboard=="function")try{if(WandNative.copyToClipboard(e)==="ok"){i();return}}catch{}navigator.clipboard.writeText(e).then(i).catch(function(){var a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),i()})}function fn(e){if(typeof e!="number"||!isFinite(e)||e<0)return"-";if(e<1024)return e+" B";for(var t=["KB","MB","GB","TB"],n=e/1024,i=0;n>=1024&&i<t.length-1;)n=n/1024,i+=1;var a=n>=10?n.toFixed(0):n.toFixed(1);return a+" "+t[i]}function of(){fetch("/api/settings",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){rf(e);var t=document.getElementById("settings-pkg-name"),n=document.getElementById("settings-version"),i=document.getElementById("settings-node-req"),a=document.getElementById("settings-repo-url");t&&(t.textContent=e.packageName||"-"),n&&(n.textContent=e.version||"-"),i&&(i.textContent=e.nodeVersion||"-"),a&&e.repoUrl&&(a.innerHTML='<a href="'+p(e.repoUrl)+'" target="_blank" rel="noopener">'+p(e.repoUrl)+"</a>");var s=document.getElementById("settings-latest-version"),o=document.getElementById("do-update-button");e.latestVersion&&s&&(s.textContent=e.latestVersion,e.updateAvailable&&o&&o.classList.remove("hidden"));var l=document.getElementById("beta-channel-toggle");l&&(l.checked=e.updateChannel==="beta");var c=e.autoUpdate||{},d=document.getElementById("auto-update-web-toggle");d&&(d.checked=!!c.web);var u=document.getElementById("auto-update-apk-toggle");u&&(u.checked=!!Pn&&!!c.apk);var f=document.getElementById("auto-update-dmg-toggle");f&&(f.checked=!!wn&&!!c.dmg);function v(ee,Te){typeof window.wandAlert=="function"?window.wandAlert(ee,{type:Te==="error"?"danger":"info"}):typeof T=="function"?T(ee,Te==="error"?"error":"info"):Te==="error"&&alert(ee)}function m(ee,Te,Le){var kt=Le?Le.textContent:"";Le&&(Le.disabled=!0,Le.textContent="\u4E0B\u8F7D\u4E2D\u2026");function vt(){Le&&(Le.disabled=!1,Le.textContent=kt)}fetch(ee,{method:"HEAD",credentials:"same-origin"}).then(function(pe){if(!pe.ok){v(pe.status===404?"\u4E0B\u8F7D\u672A\u542F\u7528\u6216\u6587\u4EF6\u5DF2\u79FB\u9664":"\u4E0B\u8F7D\u5931\u8D25 (HTTP "+pe.status+")","error"),vt();return}var nt=document.createElement("a");nt.href=ee,nt.download=Te||"",document.body.appendChild(nt),nt.click(),document.body.removeChild(nt),v("\u5DF2\u5F00\u59CB\u4E0B\u8F7D\uFF0C\u8BF7\u5728\u901A\u77E5\u680F/\u4E0B\u8F7D\u7BA1\u7406\u4E2D\u67E5\u770B","info"),vt()}).catch(function(pe){v("\u4E0B\u8F7D\u5931\u8D25: "+(pe&&pe.message?pe.message:pe),"error"),vt()})}function y(ee,Te){function Le(xt){return String(xt||"").replace(/^v/,"").split("-")[0].split(".").map(function(or){return parseInt(or,10)||0})}for(var kt=Le(ee),vt=Le(Te),pe=0;pe<3;pe++){var nt=(kt[pe]||0)-(vt[pe]||0);if(nt!==0)return nt>0?1:-1}return 0}function g(ee,Te,Le,kt,vt){ee.classList.remove("hidden"),ee.disabled=!1,Te>0?ee.textContent="\u5347\u7EA7":Te===0?(ee.textContent="\u5DF2\u662F\u6700\u65B0",ee.disabled=!0):ee.textContent="\u91CD\u65B0\u5B89\u88C5",ee.onclick=ee.disabled?null:function(){try{WandNative.downloadUpdate(Le,kt,vt)}catch(pe){v("\u8C03\u7528\u4E0B\u8F7D\u5931\u8D25: "+(pe&&pe.message?pe.message:pe),"error")}}}var b=document.getElementById("android-apk-section"),w=document.getElementById("android-apk-current-row"),k=document.getElementById("settings-android-apk-current"),E=document.getElementById("android-apk-github-row"),L=document.getElementById("settings-android-apk-github"),S=document.getElementById("download-github-apk-btn"),M=document.getElementById("android-apk-local-row"),_=document.getElementById("settings-android-apk-local"),W=document.getElementById("download-local-apk-btn"),Y=document.getElementById("android-apk-message"),O=e.androidApk||{},I=!!Pn,A=O.enabled!==!1,B=I||A&&(!!O.github||!!O.local);if(b&&(B?b.classList.remove("hidden"):b.classList.add("hidden")),I){if(w&&k&&(k.textContent="v"+Pn,w.classList.remove("hidden")),O.github&&E&&L){var z=O.github.version?"v"+O.github.version:O.github.fileName;if(typeof O.github.size=="number"&&(z+=" \xB7 "+fn(O.github.size)),L.textContent=z,E.classList.remove("hidden"),S){var ae=O.github.version?y(O.github.version,Pn):1;g(S,ae,O.github.downloadUrl,O.github.fileName||"wand-update.apk","github")}}if(O.local&&M&&_){var ne=O.local.version?"v"+O.local.version:O.local.fileName;if(typeof O.local.size=="number"&&(ne+=" \xB7 "+fn(O.local.size)),_.textContent=ne,M.classList.remove("hidden"),W){var K=O.local.version?y(O.local.version,Pn):1;g(W,K,O.local.downloadUrl,O.local.fileName||"wand-update.apk","local")}}!O.github&&!O.local&&Y&&(Y.textContent="\u6682\u65E0\u53EF\u7528\u66F4\u65B0",Y.classList.remove("hidden"));var re=document.getElementById("android-auto-update-row"),U=document.getElementById("android-auto-update-hint");re&&re.classList.remove("hidden"),U&&U.classList.remove("hidden")}else{if(O.github&&E&&L){var q=O.github.version?"v"+O.github.version:O.github.fileName;typeof O.github.size=="number"&&(q+=" \xB7 "+fn(O.github.size)),L.textContent=q,E.classList.remove("hidden"),S&&(S.textContent="\u4E0B\u8F7D",S.classList.remove("hidden"),S.onclick=function(){window.open(O.github.downloadUrl,"_blank"),v("\u6B63\u5728\u6253\u5F00\u4E0B\u8F7D\u9875\u2026","info")})}if(O.local&&M&&_){var N=O.local.version?"v"+O.local.version:O.local.fileName;typeof O.local.size=="number"&&(N+=" \xB7 "+fn(O.local.size)),_.textContent=N,M.classList.remove("hidden"),W&&(W.textContent="\u4E0B\u8F7D",W.classList.remove("hidden"),W.onclick=function(){m(O.local.downloadUrl,O.local.fileName||"wand-update.apk",W)})}!O.github&&!O.local&&Y&&(Y.textContent=A?"\u5728\u7EBF\u7248\u672C\u6682\u65F6\u83B7\u53D6\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5":"Android \u4E0B\u8F7D\u672A\u5728\u670D\u52A1\u7AEF\u542F\u7528",Y.classList.remove("hidden"))}var V=document.getElementById("macos-dmg-section"),te=document.getElementById("macos-dmg-current-row"),X=document.getElementById("settings-macos-dmg-current"),oe=document.getElementById("macos-dmg-github-row"),le=document.getElementById("settings-macos-dmg-github"),de=document.getElementById("download-github-dmg-btn"),ue=document.getElementById("macos-dmg-local-row"),Se=document.getElementById("settings-macos-dmg-local"),Ie=document.getElementById("download-local-dmg-btn"),qe=document.getElementById("macos-dmg-message"),H=e.macosDmg||{},R=!!wn,ce=H.enabled!==!1,Ce=R||ce&&(!!H.github||!!H.local);if(V&&(Ce?V.classList.remove("hidden"):V.classList.add("hidden")),R){if(te&&X&&(X.textContent="v"+wn,te.classList.remove("hidden")),H.github&&oe&&le){var Q=H.github.version?"v"+H.github.version:H.github.fileName;if(typeof H.github.size=="number"&&(Q+=" \xB7 "+fn(H.github.size)),le.textContent=Q,oe.classList.remove("hidden"),de){var Z=H.github.version?y(H.github.version,wn):1;g(de,Z,H.github.downloadUrl,H.github.fileName||"wand-update.dmg","github")}}if(H.local&&ue&&Se){var xe=H.local.version?"v"+H.local.version:H.local.fileName;if(typeof H.local.size=="number"&&(xe+=" \xB7 "+fn(H.local.size)),Se.textContent=xe,ue.classList.remove("hidden"),Ie){var we=H.local.version?y(H.local.version,wn):1;g(Ie,we,H.local.downloadUrl,H.local.fileName||"wand-update.dmg","local")}}!H.github&&!H.local&&qe&&(qe.textContent="\u6682\u65E0\u53EF\u7528\u66F4\u65B0",qe.classList.remove("hidden"));var x=document.getElementById("macos-auto-update-row"),Fe=document.getElementById("macos-auto-update-hint");x&&x.classList.remove("hidden"),Fe&&Fe.classList.remove("hidden")}else{if(H.github&&oe&&le){var Xe=H.github.version?"v"+H.github.version:H.github.fileName;typeof H.github.size=="number"&&(Xe+=" \xB7 "+fn(H.github.size)),le.textContent=Xe,oe.classList.remove("hidden"),de&&(de.textContent="\u4E0B\u8F7D",de.classList.remove("hidden"),de.onclick=function(){window.open(H.github.downloadUrl,"_blank"),v("\u6B63\u5728\u6253\u5F00\u4E0B\u8F7D\u9875\u2026","info")})}if(H.local&&ue&&Se){var Ze=H.local.version?"v"+H.local.version:H.local.fileName;typeof H.local.size=="number"&&(Ze+=" \xB7 "+fn(H.local.size)),Se.textContent=Ze,ue.classList.remove("hidden"),Ie&&(Ie.textContent="\u4E0B\u8F7D",Ie.classList.remove("hidden"),Ie.onclick=function(){m(H.local.downloadUrl,H.local.fileName||"wand-update.dmg",Ie)})}!H.github&&!H.local&&qe&&(qe.textContent=ce?"\u5728\u7EBF\u7248\u672C\u6682\u65F6\u83B7\u53D6\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u91CD\u8BD5":"macOS \u4E0B\u8F7D\u672A\u5728\u670D\u52A1\u7AEF\u542F\u7528",qe.classList.remove("hidden"))}var et=document.getElementById("android-connect-code"),ut=document.getElementById("android-connect-qr"),We=document.getElementById("android-connect-qr-empty"),_e=document.getElementById("android-connect-qr-wrap");if(et){et.textContent="\u52A0\u8F7D\u4E2D...",We&&(We.textContent="\u751F\u6210\u4E2D\u2026"),ut&&(ut.style.visibility="hidden");var De="/api/app-connect-code";window.location&&window.location.origin&&(De+="?origin="+encodeURIComponent(window.location.origin)),fetch(De,{credentials:"same-origin"}).then(function(ee){return ee.json()}).then(function(ee){ee.code?(et.textContent=ee.code,r.androidConnectCode=ee.code,af(ee.code)):(et.textContent="\u751F\u6210\u5931\u8D25",We&&(We.textContent="\u751F\u6210\u5931\u8D25"))}).catch(function(){et.textContent="\u83B7\u53D6\u5931\u8D25",We&&(We.textContent="\u83B7\u53D6\u5931\u8D25")})}_e&&!_e.dataset.bound&&(_e.dataset.bound="1",_e.addEventListener("click",function(){r.androidConnectCode&&sf(r.androidConnectCode)}));var ie=e.config||{},Oe=document.getElementById("cfg-host"),tt=document.getElementById("cfg-port"),ft=document.getElementById("cfg-https"),yt=document.getElementById("cfg-mode"),st=document.getElementById("cfg-cwd"),Pe=document.getElementById("cfg-shell");Oe&&(Oe.value=ie.host||""),tt&&(tt.value=ie.port||""),ft&&(ft.checked=ie.https===!0),yt&&(yt.value=ie.defaultMode||"default"),st&&(st.value=ie.defaultCwd||""),Pe&&(Pe.value=ie.shell||"");var zt=document.getElementById("cfg-language");zt&&(zt.value=ie.language||"");var xn=document.getElementById("cfg-structured-runner");xn&&(xn.value=ie.structuredRunner||"cli");var pt=document.getElementById("cfg-inherit-env");pt&&(pt.checked=ie.inheritEnv!==!1),r.configDefaultModel=ie.defaultModel||"",li(),wo().then(function(){li()}).catch(function(){});var en=document.getElementById("cert-status");en&&(en.textContent=e.hasCert?"\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66":"\u672A\u5B89\u88C5\u8BC1\u4E66\uFF08\u4F7F\u7528\u81EA\u7B7E\u540D\u6216 HTTP\uFF09",en.style.color=e.hasCert?"var(--success)":"var(--text-secondary)");var tn=document.getElementById("presets-list");if(tn&&ie.commandPresets){for(var Mt="",wt=0;wt<ie.commandPresets.length;wt++){var Sn=ie.commandPresets[wt];Mt+='<div class="preset-item"><span class="preset-label">'+p(Sn.label)+'</span><span class="preset-detail">'+p(Sn.command)+(Sn.mode?" ("+p(Sn.mode)+")":"")+"</span></div>"}Mt||(Mt='<div class="empty-state-compact"><span class="empty-icon">\u2699</span><span>\u6CA1\u6709\u547D\u4EE4\u9884\u8BBE</span><span class="hint">\u5728 config.json \u7684 commandPresets \u4E2D\u914D\u7F6E</span></div>'),tn.innerHTML=Mt}var nn=ie.cardDefaults||{},ir=document.getElementById("cfg-card-edit"),ar=document.getElementById("cfg-card-inline"),sr=document.getElementById("cfg-card-terminal"),fe=document.getElementById("cfg-card-thinking"),ot=document.getElementById("cfg-card-toolgroup");ir&&(ir.checked=nn.editCards===!0),ar&&(ar.checked=nn.inlineTools===!0),sr&&(sr.checked=nn.terminal===!0),fe&&(fe.checked=nn.thinking===!0),ot&&(ot.checked=nn.toolGroup===!0)}).catch(function(){})}function lf(){var e=document.getElementById("config-message");e&&(e.classList.add("hidden"),e.textContent="");var t={host:(document.getElementById("cfg-host")||{}).value,port:Number((document.getElementById("cfg-port")||{}).value),https:(document.getElementById("cfg-https")||{}).checked,defaultMode:(document.getElementById("cfg-mode")||{}).value,defaultCwd:(document.getElementById("cfg-cwd")||{}).value,shell:(document.getElementById("cfg-shell")||{}).value,language:(document.getElementById("cfg-language")||{}).value||"",defaultModel:(document.getElementById("cfg-default-model")||{}).value||"",structuredRunner:(document.getElementById("cfg-structured-runner")||{}).value||"cli",inheritEnv:(document.getElementById("cfg-inherit-env")||{}).checked!==!1},n=r.config&&r.config.defaultModel||"",i=t.defaultModel||"";fetch("/api/settings/config",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(t)}).then(function(a){return a.json()}).then(function(a){if(e&&(a.error?(e.textContent=a.error,e.style.color="var(--error)"):(e.textContent=a.restartRequired?"\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF0C\u90E8\u5206\u90E8\u7F72\u5B57\u6BB5\uFF08host/port/https/shell\uFF09\u9700\u8981\u91CD\u542F\u670D\u52A1\u624D\u751F\u6548\u3002":"\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002",e.style.color="var(--success)"),e.classList.remove("hidden")),(!a||!a.error)&&(r.config&&(r.config.defaultModel=i),r.configDefaultModel=i,i!==n)){r.chatModel="";try{localStorage.removeItem("wand-chat-model")}catch{}Gn(ye())}}).catch(function(){e&&(e.textContent="\u4FDD\u5B58\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden"))})}function cf(){var e=document.getElementById("display-message");e&&(e.classList.add("hidden"),e.textContent="");var t={cardDefaults:{editCards:!!(document.getElementById("cfg-card-edit")||{}).checked,inlineTools:!!(document.getElementById("cfg-card-inline")||{}).checked,terminal:!!(document.getElementById("cfg-card-terminal")||{}).checked,thinking:!!(document.getElementById("cfg-card-thinking")||{}).checked,toolGroup:!!(document.getElementById("cfg-card-toolgroup")||{}).checked}};fetch("/api/settings/config",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(t)}).then(function(n){return n.json()}).then(function(n){e&&(n.error?(e.textContent=n.error,e.style.color="var(--error)"):(e.textContent="\u663E\u793A\u8BBE\u7F6E\u5DF2\u4FDD\u5B58",e.style.color="var(--success)"),e.classList.remove("hidden")),!n.error&&r.config&&(r.config.cardDefaults=t.cardDefaults)}).catch(function(){e&&(e.textContent="\u4FDD\u5B58\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden"))})}function df(){var e=document.getElementById("cert-key-file"),t=document.getElementById("cert-cert-file"),n=document.getElementById("cert-message");if(n&&(n.classList.add("hidden"),n.textContent=""),!e||!e.files[0]||!t||!t.files[0]){n&&(n.textContent="\u8BF7\u9009\u62E9\u79C1\u94A5\u548C\u8BC1\u4E66\u6587\u4EF6\u3002",n.style.color="var(--error)",n.classList.remove("hidden"));return}var i=new FileReader;i.onload=function(){var a=i.result,s=new FileReader;s.onload=function(){var o=s.result;fetch("/api/settings/upload-cert",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({key:a,cert:o})}).then(function(l){return l.json()}).then(function(l){if(n){if(l.error)n.textContent=l.error,n.style.color="var(--error)";else{n.textContent="\u8BC1\u4E66\u5DF2\u4E0A\u4F20\uFF0C\u91CD\u542F\u540E\u751F\u6548\u3002",n.style.color="var(--success)";var c=document.getElementById("cert-status");c&&(c.textContent="\u5DF2\u5B89\u88C5 SSL \u8BC1\u4E66",c.style.color="var(--success)")}n.classList.remove("hidden")}}).catch(function(){n&&(n.textContent="\u4E0A\u4F20\u5931\u8D25\u3002",n.style.color="var(--error)",n.classList.remove("hidden"))})},s.readAsText(t.files[0])},i.readAsText(e.files[0])}function Mo(){var e=document.getElementById("settings-latest-version"),t=document.getElementById("do-update-button"),n=document.getElementById("update-message");e&&(e.textContent="\u68C0\u67E5\u4E2D..."),n&&n.classList.add("hidden"),t&&t.classList.add("hidden"),fetch("/api/check-update",{credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i.error){e&&(e.textContent="\u68C0\u67E5\u5931\u8D25");return}var a=i.channel==="beta";if(e&&(e.textContent=i.latest||(a?"beta \u672A\u53D1\u5E03":"-")),!i.latest){n&&(n.textContent=a?"\u65E0\u6CD5\u8BFB\u53D6 npm beta \u7248\u672C\u3002":"\u65E0\u6CD5\u8FDE\u63A5\u5230 npm registry\u3002",n.style.color="var(--error)",n.classList.remove("hidden"));return}i.updateAvailable&&t&&(t.textContent=a?"\u66F4\u65B0\u5230 Beta":"\u66F4\u65B0\u5230\u6700\u65B0\u7248",t.classList.remove("hidden")),!i.updateAvailable&&n&&(n.textContent=a?"\u5DF2\u662F\u6700\u65B0 Beta \u7248\u672C\u3002":"\u5DF2\u662F\u6700\u65B0\u7248\u672C\u3002",n.style.color="var(--success)",n.classList.remove("hidden"))}).catch(function(){e&&(e.textContent="\u68C0\u67E5\u5931\u8D25")})}function uf(){var e=document.getElementById("update-message"),t=document.getElementById("do-update-button");t&&(t.disabled=!0,e&&(e.textContent="\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u7A0D\u5019...",e.style.color="var(--text-secondary)",e.classList.remove("hidden")),fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n.error){e&&(e.textContent=n.error,e.style.color="var(--error)",e.classList.remove("hidden")),t.disabled=!1;return}if(e&&(e.textContent=(n.message||"\u66F4\u65B0\u5B8C\u6210")+"\uFF0C\u6B63\u5728\u91CD\u542F\u670D\u52A1\u2026",e.style.color="var(--success)",e.classList.remove("hidden")),t.classList.add("hidden"),n.detachedUpdate)kn();else if(n.restartRequired!==!1)lc(null,e);else{var i=document.getElementById("do-restart-button");i&&i.classList.remove("hidden")}}).catch(function(){e&&(e.textContent="\u66F4\u65B0\u5931\u8D25\u3002",e.style.color="var(--error)",e.classList.remove("hidden")),t.disabled=!1}))}function ff(){var e=document.getElementById("do-restart-button"),t=document.getElementById("update-message");lc(e,t)}function pf(){fetch("/api/auto-update",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){if(e.apk)return fetch("/api/android-apk-update?currentVersion="+encodeURIComponent(Pn),{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(!(!t.updateAvailable||!t.downloadUrl))try{WandNative.downloadUpdate(t.downloadUrl,t.fileName||"wand-update.apk",t.source||"local")}catch{}})}).catch(function(){})}function vf(){wn&&fetch("/api/auto-update",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){if(e.dmg)return fetch("/api/macos-dmg-update?currentVersion="+encodeURIComponent(wn),{credentials:"same-origin"}).then(function(t){return t.json()}).then(function(t){if(!(!t.updateAvailable||!t.downloadUrl))try{WandNative.downloadUpdate(t.downloadUrl,t.fileName||"wand-update.dmg",t.source||"local")}catch{}})}).catch(function(){})}function ba(e,t){var n={};n[e]=t,fetch("/api/auto-update",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(n)}).then(function(i){return i.json()}).then(function(i){var a=document.getElementById("auto-update-web-toggle"),s=document.getElementById("auto-update-apk-toggle"),o=document.getElementById("auto-update-dmg-toggle");a&&(a.checked=!!i.web),s&&(s.checked=!!i.apk),o&&(o.checked=!!i.dmg)}).catch(function(){var i=document.getElementById("auto-update-"+e+"-toggle");i&&(i.checked=!t)})}function mf(e){fetch("/api/update-channel",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({channel:e})}).then(function(t){return t.json()}).then(function(t){var n=document.getElementById("beta-channel-toggle");n&&(n.checked=t.channel==="beta"),Mo()}).catch(function(){var t=document.getElementById("beta-channel-toggle");t&&(t.checked=e!=="beta")})}function Ao(e){for(var t=document.querySelectorAll(".settings-app-icon-option"),n=0;n<t.length;n++){var i=t[n].getAttribute("data-icon")===e;t[n].classList.toggle("selected",i),t[n].setAttribute("aria-pressed",i?"true":"false")}}function pn(){var e=document.getElementById("notification-permission-status"),t=document.getElementById("notification-request-btn"),n=document.getElementById("notification-reset-btn"),i=document.getElementById("notification-test-message");if(e){var a=Bi();if(a===null){if(typeof Notification>"u"){e.textContent="\u4E0D\u652F\u6301",e.style.color="var(--fg-muted)",t&&t.classList.add("hidden"),n&&n.classList.add("hidden");return}a=Notification.permission}a==="granted"?(e.textContent="\u5DF2\u6388\u6743 \u2713",e.style.color="var(--success)",t&&t.classList.add("hidden"),n&&n.classList.add("hidden")):a==="denied"?(e.textContent="\u5DF2\u62D2\u7EDD",e.style.color="var(--danger)",t&&t.classList.add("hidden"),n&&n.classList.remove("hidden")):(e.textContent="\u672A\u6388\u6743",e.style.color="var(--warning)",t&&t.classList.remove("hidden"),n&&n.classList.remove("hidden"))}}function gf(){var e=document.getElementById("notification-test-message");if(Re){window._onNativePermissionResult=function(t){pn(),e&&(t==="granted"?(e.textContent="\u2713 \u5DF2\u6388\u6743",e.style.color="var(--success)"):(e.textContent="\u2717 \u672A\u6388\u6743\uFF0C\u8BF7\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u5F00\u542F Wand \u7684\u901A\u77E5\u6743\u9650",e.style.color="var(--danger)"),e.classList.remove("hidden")),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}return}typeof Notification>"u"||Notification.requestPermission().then(function(t){if(pn(),t==="granted")e&&(e.textContent="\u2713 \u5DF2\u6388\u6743",e.style.color="var(--success)",e.classList.remove("hidden"));else if(t==="denied"&&e){var n=location.origin;e.innerHTML='\u6D4F\u89C8\u5668\u5DF2\u62E6\u622A\u6388\u6743\u5F39\u7A97\uFF0C\u8BF7\u624B\u52A8\u91CD\u7F6E\uFF1A<br><span style="display:inline-flex;align-items:center;gap:4px;margin:4px 0">\u2460 \u70B9\u51FB\u5730\u5740\u680F\u5DE6\u4FA7\u7684 <span style="display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid var(--border);font-size:11px;vertical-align:middle">i</span> \u6216\u9501\u56FE\u6807</span><br>\u2461 \u627E\u5230\u300C\u901A\u77E5\u300D\u2192 \u6539\u4E3A\u300C\u5141\u8BB8\u300D<br>\u2462 \u5237\u65B0\u9875\u9762\u5373\u53EF',e.style.color="var(--fg-muted)",e.classList.remove("hidden")}})}function qo(){var e=document.getElementById("notification-test-delay-btn");e&&(e.disabled=!1,e.textContent="10 \u79D2\u540E\u53D1\u9001")}function hf(){var e=document.getElementById("notification-test-message");r.delayedNotificationTimer&&(clearTimeout(r.delayedNotificationTimer),r.delayedNotificationTimer=null);var t=document.getElementById("notification-test-delay-btn");t&&(t.disabled=!0,t.textContent="\u5DF2\u5B89\u6392\uFF0810s\uFF09"),e&&(e.innerHTML="\u5DF2\u5B89\u6392 10 \u79D2\u540E\u53D1\u9001\u6D4B\u8BD5\u901A\u77E5\uFF0C\u8BF7\u5207\u5230\u540E\u53F0\u7B49\u5F85\u3002",e.style.color="var(--text-secondary)",e.classList.remove("hidden")),r.delayedNotificationTimer=setTimeout(function(){r.delayedNotificationTimer=null,qo(),Oo()},1e4)}function Oo(){var e=document.getElementById("notification-test-message"),t=[];r.delayedNotificationTimer&&(clearTimeout(r.delayedNotificationTimer),r.delayedNotificationTimer=null,qo());var n=km();t.push(n?"\u2713 \u63D0\u793A\u97F3":"\u2717 \u63D0\u793A\u97F3\uFF08\u65E0\u6CD5\u64AD\u653E\uFF09");var i=r.notifBubble;if(ts({title:"\u6D4B\u8BD5\u901A\u77E5",body:"\u8FD9\u662F\u4E00\u6761\u6D4B\u8BD5\u901A\u77E5\u3002",type:"info",icon:"\u266A",duration:5e3,playSound:!1}),t.push(i?"\u2713 \u5E94\u7528\u5185\u6C14\u6CE1":"\u2013 \u5E94\u7528\u5185\u6C14\u6CE1\uFF08\u5DF2\u5173\u95ED\uFF09"),Re){var a=Bi();if(a==="granted")try{WandNative.sendNotification("Wand \u6D4B\u8BD5\u901A\u77E5","\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002","wand-test"),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF09")}else if(a==="denied")t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u62D2\u7EDD\uFF0C\u8BF7\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u5F00\u542F\uFF09");else{window._onNativePermissionResult=function(l){if(pn(),l==="granted")try{WandNative.sendNotification("Wand \u6D4B\u8BD5\u901A\u77E5","\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002","wand-test"),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u6388\u6743\uFF09")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF09")}else t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u672A\u6388\u6743\uFF09");Xn(e,t),delete window._onNativePermissionResult};try{WandNative.requestPermission()}catch{}return}Xn(e,t);return}if(typeof Notification>"u"){t.push("\u2013 \u7CFB\u7EDF\u901A\u77E5\uFF08\u4E0D\u652F\u6301\uFF09"),Xn(e,t);return}var s=Notification.permission;if(s==="granted"){try{var o=new Notification("Wand \u6D4B\u8BD5\u901A\u77E5",{body:"\u7CFB\u7EDF\u901A\u77E5\u5DF2\u6B63\u5E38\u5DE5\u4F5C\u3002",icon:"/favicon.ico",tag:"wand-test"});setTimeout(function(){o.close()},5e3),t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5")}catch{t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u53D1\u9001\u5931\u8D25\uFF0C\u53EF\u80FD\u9700\u8981 HTTPS\uFF09")}Xn(e,t)}else s==="denied"?(t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u62D2\u7EDD\uFF09"),Xn(e,t)):Notification.requestPermission().then(function(l){pn(),l==="granted"?t.push("\u2713 \u7CFB\u7EDF\u901A\u77E5\uFF08\u5DF2\u6388\u6743\uFF09"):t.push("\u2717 \u7CFB\u7EDF\u901A\u77E5\uFF08\u672A\u6388\u6743\uFF09"),Xn(e,t)})}function Xn(e,t){if(e){e.innerHTML=t.map(function(i){return p(i)}).join("<br>");var n=t.every(function(i){return i.indexOf("\u2713")===0||i.indexOf("\u2013")===0});e.style.color=n?"var(--success)":"var(--warning)",e.classList.remove("hidden")}}function dt(e){if(!e||typeof e!="object"||!r.terminal)return e;try{typeof r.terminal.remeasure=="function"&&r.terminal.remeasure()}catch{}var t=r.terminal.cols,n=r.terminal.rows;return typeof t=="number"&&typeof n=="number"&&Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>0&&(e.cols=t,e.rows=n),e}function Po(){return r.terminal&&r.terminal.cols?Promise.resolve():new Promise(function(e){var t=!1,n=function(){t||(t=!0,e())},i=setTimeout(n,2e3);try{Jn()}catch{}requestAnimationFrame(function(){requestAnimationFrame(function(){r.terminal&&r.terminal.cols&&(clearTimeout(i),n())})})})}function Ho(){var e=ht(),t=Ge(),n=_t(e,r.config&&r.config.defaultMode?r.config.defaultMode:"default");r.preferredCommand=e,r.chatMode=_t(e,r.chatMode),Po().then(function(){return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:e,provider:e,cwd:t,mode:n}))})}).then(function(i){return i.json()}).then(function(i){if(i.error){T(i.error,"error");return}return r.selectedId=i.id,be(),r.drafts[i.id]="",It(),Ht()}).then(function(){Ft(!0)}).catch(function(){T("\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error")})}var Lr=!1;function bf(){if(!Lr){var e=document.getElementById("cwd"),t=document.getElementById("modal-error"),n=ht(),i=r.sessionCreateKind||"structured",a=r.sessionCreateWorktree===!0;Li(t);var s=Ge(),o=e.value.trim()||s,l=_t(n,r.modeValue);if(i==="structured"){yf(o,l,a,t);return}wf(n,o,l,a,t)}}function yf(e,t,n,i){var a=r.sessionTool==="codex"?"codex":"claude";return Lr=!0,r.modeValue=t,r.chatMode=t,r.sessionTool=a,r.preferredCommand=a,oi(),Gn(ye()),So(void 0,e,t,n).then(function(s){return Gt(e),un(),jt(),s}).then(function(){Ft(!0)}).catch(function(s){Ke(i,s&&s.message||"\u65E0\u6CD5\u542F\u52A8\u7ED3\u6784\u5316\u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 Claude \u5DF2\u6B63\u786E\u5B89\u88C5\u3002")}).finally(function(){Lr=!1})}function wf(e,t,n,i,a){Lr=!0,r.modeValue=n,r.chatMode=n,r.sessionTool=e,r.preferredCommand=e,oi(),Po().then(function(){return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:e,provider:e,cwd:t,mode:n,worktreeEnabled:i}))})}).then(function(s){return s.json()}).then(function(s){if(s.error){Ke(a,s.error);return}return r.selectedId=s.id,be(),Gt(t),r.drafts[s.id]="",It(),un(),jt(),Ht()}).then(function(){r.selectedId?Dt(r.selectedId):Ft(!0)}).catch(function(){Ke(a,e==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 codex \u5DF2\u6B63\u786E\u5B89\u88C5\u5E76\u53EF\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\uFF0C\u8BF7\u786E\u8BA4 Claude \u5DF2\u6B63\u786E\u5B89\u88C5\u3002")}).finally(function(){Lr=!1})}function kf(){var e=document.getElementById("blank-chat-cwd");e&&(e.addEventListener("click",_o),e.addEventListener("keydown",function(t){(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),_o())}),document.addEventListener("click",function(t){var n=document.getElementById("blank-chat-cwd-dropdown");if(!(!n||n.classList.contains("hidden"))&&!t.target.closest(".blank-chat-cwd-wrap")){n.classList.add("hidden");var i=document.getElementById("blank-chat-cwd-arrow");i&&(i.textContent="\u25BC")}}))}function _o(){var e=document.getElementById("blank-chat-cwd-dropdown"),t=document.getElementById("blank-chat-cwd-arrow");if(e){var n=e.classList.contains("hidden");n?(xf(e),e.classList.remove("hidden"),t&&(t.textContent="\u25B2")):(e.classList.add("hidden"),t&&(t.textContent="\u25BC"))}}function xf(e){var t=sn();e.innerHTML='<div class="blank-chat-cwd-loading">\u52A0\u8F7D\u4E2D...</div>',ta(function(n){var i="",a=r.workingDir||t;if(i+='<div class="blank-chat-cwd-item'+(a===t?" active":"")+'" data-path="'+p(t)+'"><span class="blank-chat-cwd-item-label">\u9ED8\u8BA4</span><span class="blank-chat-cwd-item-path">'+p(t)+"</span></div>",n.length){var s={};s[t]=!0,n.forEach(function(o){s[o.path]||(s[o.path]=!0,i+='<div class="blank-chat-cwd-item'+(a===o.path?" active":"")+'" data-path="'+p(o.path)+'"><span class="blank-chat-cwd-item-path">'+p(o.path)+"</span></div>")})}e.innerHTML=i,e.querySelectorAll(".blank-chat-cwd-item").forEach(function(o){o.addEventListener("click",function(l){l.stopPropagation();var c=o.dataset.path;r.workingDir=c;try{localStorage.setItem("wand-working-dir",c)}catch{}var d=document.getElementById("blank-chat-cwd-path");d&&(d.textContent=c),e.classList.add("hidden");var u=document.getElementById("blank-chat-cwd-arrow");u&&(u.textContent="\u25BC");var f=document.getElementById("folder-picker-input");f&&(f.value=c)})})})}function Sf(){var e=document.getElementById("recent-paths-bubbles");e&&ta(function(t){if(!t.length){e.innerHTML="";return}e.innerHTML=t.map(function(n){return'<button class="recent-path-bubble" data-path="'+p(n.path)+'" title="'+p(n.path)+'">'+p(n.name)+"</button>"}).join(""),e.querySelectorAll(".recent-path-bubble").forEach(function(n){n.addEventListener("click",function(){var i=document.getElementById("cwd");i&&(i.value=n.dataset.path,r.cwdValue=n.dataset.path||"")})})})}function Do(){r.suggestionTimer&&clearTimeout(r.suggestionTimer),r.suggestionTimer=setTimeout(Ef,120)}function Ef(){var e=document.getElementById("session-modal");if(e&&e.classList.contains("hidden")){Zn();return}var t=document.getElementById("cwd");t&&fetch("/api/path-suggestions?q="+encodeURIComponent(t.value.trim()),{credentials:"same-origin"}).then(function(n){return n.json()}).then(If).catch(Zn)}function If(e){var t=document.getElementById("cwd-suggestions");if(!t||!e.length){Zn();return}t.innerHTML=e.map(function(n){return'<button class="suggestion-item" data-path="'+p(n.path)+'"><strong>'+p(n.name)+"</strong><small>"+p(n.path)+"</small></button>"}).join(""),t.querySelectorAll(".suggestion-item").forEach(function(n){n.addEventListener("click",function(){document.getElementById("cwd").value=n.dataset.path,r.cwdValue=n.dataset.path||"",Zn()})}),t.classList.remove("hidden")}function Zn(){var e=document.getElementById("cwd-suggestions");e&&(e.classList.add("hidden"),e.innerHTML="")}function Cf(e){if(!e.isComposing){if(tl(e)){Oa(e);return}if(e.key==="Enter"){if(e.shiftKey){e.preventDefault();var t=document.getElementById("input-box");if(t){var n=t.selectionStart||0,i=t.value,a=i.slice(0,n)+`
|
|
22
|
+
`+i.slice(n);t.value=a,t.selectionStart=n+1,t.selectionEnd=n+1,it(a,!0),Rt(t)}return}e.preventDefault();var s=!!(e.metaKey||e.ctrlKey);Vo(s?{interrupt:!0}:void 0);return}if(e.key==="Backspace"){setTimeout(function(){var g=document.getElementById("input-box");g&&it(g.value,!0)},0);return}if(e.key==="Tab"){e.preventDefault();var t=document.getElementById("input-box");if(t){var n=t.selectionStart||0,i=t.value,a=i.slice(0,n)+" "+i.slice(n);t.value=a,it(a,!0)}return}if(e.key==="Escape"){e.preventDefault();var o=ye();se(o)?o&&o.structuredState&&o.structuredState.inFlight&&Pa():bt(qr("escape"),"escape");return}if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="c"){var l=document.getElementById("input-box"),c=l&&l.selectionStart!==l.selectionEnd||gi();if(c)return;var d=ye();if(se(d)){e.preventDefault(),d&&d.structuredState&&d.structuredState.inFlight&&Pa();return}e.preventDefault(),bt(qr("ctrl_c"),"ctrl_c");return}if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="d"){var u=document.getElementById("input-box"),f=u&&u.selectionStart!==u.selectionEnd||gi();if(f)return;var v=ye();if(se(v)){e.preventDefault();return}e.preventDefault(),bt(qr("ctrl_d"),"ctrl_d");return}if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="l"){e.preventDefault();var m=ye();if(se(m))return;bt(qr("ctrl_l"),"ctrl_l");return}if(!((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="a")&&!((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="v")){if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="x"){var t=document.getElementById("input-box"),y=t&&t.selectionStart!==t.selectionEnd;if(y)return;e.preventDefault(),bt("","ctrl_x");return}e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&setTimeout(function(){var g=document.getElementById("input-box");g&&it(g.value)},0)}}}var Tf=10*1024*1024;function vn(e){return e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB"}function Lf(e){return/^image\/(png|jpe?g|gif|webp|bmp|svg\+xml)/.test(e)}function ya(e){if(e){if(e.size>Tf){T("\u6587\u4EF6\u8FC7\u5927\uFF08\u4E0A\u9650 10 MB\uFF09: "+e.name,"error");return}var t={file:e,name:e.name,size:e.size,previewUrl:null};Lf(e.type)&&(t.previewUrl=URL.createObjectURL(e)),r.pendingAttachments.push(t),wa()}}function Bf(e){var t=r.pendingAttachments.splice(e,1);t.length&&t[0].previewUrl&&URL.revokeObjectURL(t[0].previewUrl),wa()}function Mf(){r.pendingAttachments.forEach(function(e){e.previewUrl&&URL.revokeObjectURL(e.previewUrl)}),r.pendingAttachments=[],wa()}function wa(){var e=document.getElementById("attachment-preview");if(e){var t=r.pendingAttachments;if(t.length===0){e.classList.add("hidden"),e.innerHTML="";return}e.classList.remove("hidden");for(var n="",i=0;i<t.length;i++){var a=t[i],s=a.previewUrl?'<img src="'+p(a.previewUrl)+'" alt="">':'<span class="att-icon">'+J("file",{size:13,strokeWidth:1.7})+"</span>";n+='<span class="attachment-pill" data-index="'+i+'">'+s+'<span class="att-name" title="'+p(a.name)+'">'+p(a.name)+'</span><span class="att-size">'+vn(a.size)+'</span><button class="att-remove" data-index="'+i+'" title="\u79FB\u9664">\xD7</button></span>'}e.innerHTML=n,e.querySelectorAll(".att-remove").forEach(function(o){o.addEventListener("click",function(l){l.preventDefault(),l.stopPropagation(),Bf(parseInt(o.getAttribute("data-index"),10))})})}}function Af(e){if(!r.pendingAttachments.length)return Promise.resolve([]);var t=new FormData;return r.pendingAttachments.forEach(function(n){t.append("files",n.file,n.name)}),fetch("/api/sessions/"+encodeURIComponent(e)+"/upload",{method:"POST",body:t,credentials:"same-origin"}).then(function(n){return n.ok?n.json():n.json().then(function(i){throw new Error(i.error||"\u4E0A\u4F20\u5931\u8D25")})}).then(function(n){return n.files||[]})}function qf(e){if(!e||!e.length)return"";var t=e.map(function(n){return n.savedPath});return`[\u9644\u4EF6\u5DF2\u4E0A\u4F20\uFF0C\u8BF7\u67E5\u770B\u4EE5\u4E0B\u6587\u4EF6:
|
|
23
23
|
`+t.join(`
|
|
24
24
|
`)+`]
|
|
25
25
|
|
|
26
|
-
`}function No(e){if(!r.terminalInteractive||!e)return!1;var t=e.value||"";return t?(bt(t,"interactive_text").catch(function(){}),e.value="",Rt(e),it("",!0),!0):!1}function Pf(e){var t=e.clipboardData&&e.clipboardData.items;if(t&&!r.terminalInteractive){for(var n=0;n<t.length;n++)if(t[n].type.indexOf("image/")===0){e.preventDefault();var i=t[n].getAsFile();i&&ya(i);return}}var a=e.clipboardData&&e.clipboardData.getData("text");if(a){if(e.preventDefault(),r.terminalInteractive){bt(a,"paste").catch(function(){});return}var s=document.getElementById("input-box");if(s){var o=s.selectionStart||0,l=s.selectionEnd||0,d=s.value,c=d.slice(0,o)+a+d.slice(l);s.value=c,it(c)}}}function Wm(e){bt(e),it(Hf()+e)}function Hf(){if(r.selectedId){if(r.drafts[r.selectedId]!==void 0)return r.drafts[r.selectedId];try{var e=localStorage.getItem("wand-draft-"+r.selectedId);if(e)return e}catch{}}return""}function it(e,t){if(r.selectedId){r.drafts[r.selectedId]=e;try{localStorage.setItem("wand-draft-"+r.selectedId,e)}catch{}if(!t){var n=document.getElementById("input-box");n&&(n.value=e)}}}var ka=!1;function _f(){if(!ka){var e=document.getElementById("input-box"),t=document.getElementById("prompt-optimize-btn"),n=document.querySelector(".input-composer");if(e){var i=(e.value||"").trim();if(!i){typeof T=="function"&&T("\u8BF7\u5148\u8F93\u5165\u8981\u4F18\u5316\u7684\u5185\u5BB9\u3002","info"),e.focus();return}ka=!0,t&&(t.classList.add("is-loading"),t.disabled=!0,t.setAttribute("title","\u6B63\u5728\u4F18\u5316\u2026")),n&&n.classList.add("is-optimizing"),e.setAttribute("aria-busy","true");var a=e.readOnly;e.readOnly=!0;var s={text:i};r&&r.selectedId&&(s.sessionId=r.selectedId),fetch("/api/optimize-prompt",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}).then(function(o){return o.json().then(function(l){return{ok:o.ok,data:l}})}).then(function(o){if(!o.ok)throw new Error(o.data&&o.data.error||"\u63D0\u793A\u8BCD\u4F18\u5316\u5931\u8D25\u3002");var l=o.data&&o.data.optimized||"";if(!l)throw new Error("Claude \u8FD4\u56DE\u4E3A\u7A7A\u3002");Df(e,l)}).catch(function(o){typeof T=="function"&&T(o&&o.message||"\u63D0\u793A\u8BCD\u4F18\u5316\u5931\u8D25\u3002","error"),t&&(t.classList.remove("is-loading"),t.classList.add("is-shake"),setTimeout(function(){t&&t.classList.remove("is-shake")},400))}).finally(function(){ka=!1,t&&(t.classList.remove("is-loading"),t.disabled=!1,t.setAttribute("title","\u63D0\u793A\u8BCD\u4F18\u5316\uFF08AI\uFF09")),n&&n.classList.remove("is-optimizing"),e.removeAttribute("aria-busy"),e.readOnly=a})}}}function Df(e,t){if(!e)return;var n=Array.from(t),i=n.length;if(i===0){e.value="",it("",!0),Rt(e);return}var a=Math.min(700,Math.max(220,i*8)),s=Math.min(i,60),o=Math.ceil(i/s),l=a/s,d=0;e.value="",Rt(e);function c(){if(d=Math.min(i,d+o),e.value=n.slice(0,d).join(""),Rt(e),d<i)setTimeout(c,l);else{it(t,!0);try{e.setSelectionRange(t.length,t.length)}catch{}}}c()}function fi(e){var t=document.querySelector(".input-composer");if(t){var n=e||document.getElementById("input-box"),i=!!(n&&n.value&&n.value.length>0);t.classList.toggle("has-text",i)}}var be={recording:!1,canceling:!1,transcript:"",startY:0,mockTimer:null},jf=60,Ro=["\u5E2E\u6211\u628A","\u5E2E\u6211\u628A\u9996\u9875\u7684","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE\u6539\u6210\u5706\u89D2\uFF0C","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE\u6539\u6210\u5706\u89D2\uFF0C\u5E76\u52A0\u4E00\u70B9\u9634\u5F71"];function Nf(){var e=0;be.mockTimer=setInterval(function(){e>=Ro.length||(Fo(Ro[e]),e++)},420)}function xa(){be.mockTimer&&(clearInterval(be.mockTimer),be.mockTimer=null)}function Fo(e){be.transcript=e||"";var t=document.getElementById("voice-transcript-text");t&&(t.textContent=be.transcript);var n=document.getElementById("voice-transcript-bubble");n&&n.classList.toggle("has-text",!!be.transcript)}function Rf(e){if(e){e.preventDefault(),be.startY=typeof e.clientY=="number"?e.clientY:0;try{e.pointerId!==void 0&&e.target&&e.target.setPointerCapture&&e.target.setPointerCapture(e.pointerId)}catch{}}be.recording=!0,be.canceling=!1,be.transcript="";var t=document.getElementById("voice-record-btn");if(t){t.classList.add("is-recording");var n=t.querySelector(".voice-record-label");n&&(n.textContent="\u677E\u5F00 \u53D1\u9001")}var i=document.getElementById("voice-transcript-bubble");i&&i.classList.remove("hidden","is-canceling","has-text"),Fo("");var a=document.getElementById("voice-transcript-status");a&&(a.textContent="\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88"),Nf()}function Ff(e){if(!(!be.recording||!e)){var t=be.startY-(typeof e.clientY=="number"?e.clientY:be.startY),n=t>jf;if(n!==be.canceling){be.canceling=n;var i=document.getElementById("voice-transcript-bubble");i&&i.classList.toggle("is-canceling",n);var a=document.getElementById("voice-record-btn"),s=a&&a.querySelector(".voice-record-label");s&&(s.textContent=n?"\u677E\u5F00 \u53D6\u6D88":"\u677E\u5F00 \u53D1\u9001");var o=document.getElementById("voice-transcript-status");o&&(o.textContent=n?"\u677E\u5F00\u624B\u6307 \u53D6\u6D88":"\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88")}}}function Wo(e){if(be.recording){e&&e.preventDefault(),be.recording=!1,xa();var t=!be.canceling&&!!be.transcript.trim(),n=be.transcript;Sa(),t&&(Wf(n),Ea(!1))}}function Sa(){be.canceling=!1;var e=document.getElementById("voice-record-btn");if(e){e.classList.remove("is-recording");var t=e.querySelector(".voice-record-label");t&&(t.textContent="\u6309\u4F4F \u8BF4\u8BDD")}var n=document.getElementById("voice-transcript-bubble");n&&n.classList.add("hidden")}function Wf(e){var t=(e||"").trim();if(t){var n=document.getElementById("input-box");if(n){var i=n.value||"",a=i?i.replace(/\s+$/,"")+" "+t:t;n.value=a,it(a,!0),Rt(n);try{n.setSelectionRange(a.length,a.length)}catch{}}}}function Ea(e){var t=document.querySelector(".input-composer");if(t){var n=typeof e=="boolean"?e:!t.classList.contains("voice-mode");if(t.classList.toggle("voice-mode",n),!n){be.recording=!1,xa(),Sa();var i=document.getElementById("input-box");if(i&&!r.terminalInteractive)try{i.focus({preventScroll:!0})}catch{}}}}function Rt(e){if(e){var t=36,n=120,i=yi();if(!e.value||e.value.trim()===""){e.style.height=t+"px",e.style.minHeight=t+"px",e.style.overflowY=i?"auto":"hidden",e.scrollTop=0,fi(e);return}var a=e.style.overflowY;e.style.overflowY="hidden",e.style.height=t+"px";var s=e.scrollHeight,o=Math.max(t,Math.min(s,n)),l=s>n;e.style.height=o+"px",e.style.minHeight=t+"px",e.style.overflowY=l||i?"auto":"hidden",l?Da(e):e.scrollTop=0,fi(e)}}function zf(){if(!r.selectedId)return!1;var e=r.sessions.find(function(t){return t.id===r.selectedId});return ae(e)?!!(e.structuredState&&e.structuredState.inFlight):!!e&&e.status==="running"}var Br=!1;function Ia(){return r.sessions.some(function(e){return ae(e)?!!(e.structuredState&&e.structuredState.inFlight)&&!e.archived:e.status==="running"&&!e.archived})}function zo(e){if(r.crossSessionQueue.length>=10){T("\u6392\u961F\u6D88\u606F\u5DF2\u6EE1\uFF08\u6700\u591A 10 \u6761\uFF09\uFF0C\u8BF7\u7B49\u5F85\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u3002","warning");return}var t="csq-"+Date.now()+"-"+Math.random().toString(36).slice(2,8);r.crossSessionQueue.push({id:t,text:e,cwd:Ge(),mode:r.chatMode||"managed",tool:ht(),queuedAt:Date.now()}),Kt(),Lt()}function Uf(e){Br||(Br=!0,fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:e.tool,cwd:e.cwd,mode:e.mode,initialInput:e.text}))}).then(function(t){return t.json()}).then(function(t){return Br=!1,t.error?(T(t.error,"error"),r.crossSessionQueue.unshift(e),Kt(),Lt(),null):hn(t)}).catch(function(t){Br=!1,T(t&&t.message||"\u65E0\u6CD5\u542F\u52A8\u6392\u961F\u4F1A\u8BDD\u3002","error"),r.crossSessionQueue.unshift(e),Kt(),Lt()}))}function Vf(e){var t=r.crossSessionQueue.findIndex(function(i){return i.id===e});if(!(t<0)){var n=r.crossSessionQueue.splice(t,1)[0];Kt(),Lt(),fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:n.tool,cwd:n.cwd,mode:n.mode,initialInput:n.text}))}).then(function(i){return i.json()}).then(function(i){return i.error?(T(i.error,"error"),r.crossSessionQueue.splice(t,0,n),Kt(),Lt(),null):hn(i)}).catch(function(i){T(i&&i.message||"\u65E0\u6CD5\u542F\u52A8\u6392\u961F\u4F1A\u8BDD\u3002","error"),r.crossSessionQueue.splice(t,0,n),Kt(),Lt()})}}function Kf(e){var t=r.crossSessionQueue.findIndex(function(n){return n.id===e});t<0||(r.crossSessionQueue.splice(t,1),Kt(),Lt(),r.crossSessionQueue.length===0&&T("\u6392\u961F\u5DF2\u6E05\u7A7A\u3002","info"))}function pi(){if(r.crossSessionQueue.length!==0&&!Ia()&&!Br){var e=r.crossSessionQueue.shift();Lt(),Uf(e)}}function Uo(e){var t=Math.floor((Date.now()-e)/1e3);if(t<60)return t+"s";var n=Math.floor(t/60);return n<60?n+"m":Math.floor(n/60)+"h"}function Lt(){var e=document.querySelector(".cross-session-queue"),t=document.querySelector(".input-panel"),n=document.querySelector(".structured-status-bar"),i=document.querySelector(".input-composer"),a=document.getElementById("blank-chat");if(r.crossSessionQueue.length===0){e&&e.remove(),Kt();return}var s=t&&!t.classList.contains("hidden"),o=s?t:a,l=s?n||i:null;if(o){e&&e.parentNode!==o&&(e.remove(),e=null),e?s&&l&&e.nextSibling!==l&&o.insertBefore(e,l):(e=document.createElement("div"),e.className="cross-session-queue",l?o.insertBefore(e,l):o.appendChild(e));var d=r.crossSessionQueue.length,c=r.crossSessionQueue.map(function(f,v){var m=f.text.length>60?f.text.slice(0,60)+"\u2026":f.text,y=Uo(f.queuedAt);return'<div class="queue-item" data-queue-id="'+p(f.id)+'"><span class="queue-item-dot"></span><span class="queue-item-text" title="'+p(f.text)+'">'+p(m)+'</span><span class="queue-item-age">'+y+'</span><button class="queue-item-send-now" data-queue-id="'+p(f.id)+'" title="\u7ACB\u5373\u53D1\u9001" type="button">\u53D1\u9001</button><button class="queue-item-cancel" data-queue-id="'+p(f.id)+'" title="\u53D6\u6D88" type="button">\xD7</button></div>'}).join(""),u=d>1?'<div class="queue-header"><span class="queue-header-label">\u6392\u961F '+d+' \u6761</span><button class="queue-header-clear" id="queue-clear-all" type="button" title="\u6E05\u7A7A\u6392\u961F">\u6E05\u7A7A</button></div>':"";e.innerHTML=u+c}}setInterval(function(){if(r.crossSessionQueue.length>0){var e=document.querySelectorAll(".queue-item-age");r.crossSessionQueue.forEach(function(t,n){e[n]&&(e[n].textContent=Uo(t.queuedAt))}),pi()}},5e3),document.addEventListener("click",function(e){if(e.target.closest("#queue-clear-all")){e.preventDefault(),r.crossSessionQueue=[],Kt(),Lt(),T("\u6392\u961F\u5DF2\u6E05\u7A7A\u3002","info");return}var t=e.target.closest(".queue-item-send-now");if(t){e.preventDefault(),Vf(t.dataset.queueId);return}var n=e.target.closest(".queue-item-cancel");if(n){e.preventDefault(),Kf(n.dataset.queueId);return}});function Vo(){var e=document.getElementById("welcome-input"),t=e?e.value.trim():"";if(t){if(Ia()){e.value="",zo(t),T("\u5DF2\u6392\u961F\uFF0C\u5C06\u5728\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u540E\u81EA\u52A8\u53D1\u9001\u3002","info");return}var n=document.getElementById("todo-progress");n&&n.classList.add("hidden"),e.value="",e.placeholder="\u6B63\u5728\u542F\u52A8\u2026",e.disabled=!0;var i=r.chatMode||"managed",a=Ge(),s=ht();fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:s,provider:s,cwd:a,mode:i,initialInput:t}))}).then(function(o){return o.json()}).then(function(o){if(o.error){T(o.error,"error"),e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1;return}r.selectedId=o.id,ye(),r.drafts[o.id]="",It(),$(o),me(),Mr(o.id),qn(o.id),cn(o.id).then(function(){e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1,Ft(!0)})}).catch(function(o){T(o&&o.message||(s==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\u3002"),"error"),e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1})}}function Jf(e){e=e||{};var t=document.getElementById("welcome-input"),n=document.getElementById("input-box"),i=t&&t.value.trim()?t.value.trim():n?n.value.trim():"";if(r.selectedId){i&&Ko(e);return}if(i&&Ia()){n&&(n.value=""),t&&(t.value=""),fi(n),zo(i),T("\u5DF2\u6392\u961F\uFF0C\u5C06\u5728\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u540E\u81EA\u52A8\u53D1\u9001\u3002","info");return}var a=r.chatMode||"managed",s=Ge(),o=ht();fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:o,provider:o,cwd:s,mode:a,initialInput:i||void 0}))}).then(function(l){return l.json()}).then(function(l){return l.error?(T(l.error,"error"),null):(r.selectedId=l.id,ye(),r.drafts[l.id]="",It(),n&&(n.value=""),t&&(t.value=""),$(l),me(),Mr(l.id),qn(l.id),cn(l.id))}).catch(function(l){T(l&&l.message||(o==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\u3002"),"error")})}function Mr(e){var t=r.sessions.find(function(v){return v.id===e}),n=document.getElementById("blank-chat"),i=document.getElementById("output"),a=document.getElementById("chat-output"),s=document.getElementById("stop-button"),o=document.getElementById("terminal-title"),l=document.getElementById("terminal-info"),d=document.querySelector(".session-summary-value"),c=ae(t);n&&n.classList.add("hidden"),i&&i.classList.toggle("hidden",c),a&&a.classList.remove("hidden"),c?r.currentView="chat":r.currentView="terminal";var u=t?Ti(t.command):"Wand",f=t?wr(t):"\u5F00\u59CB\u5BF9\u8BDD";o&&(o.textContent=u),l&&(l.textContent=f),d&&(d.textContent=u),c||r.terminal||Jn(),di(),Ft(!0),c||at("view-switch",{forceReplay:!0})}function Ko(e){e=e||{};var t=!!e.interrupt;if(r.terminalInteractive)return T("\u7EC8\u7AEF\u4EA4\u4E92\u6A21\u5F0F\u5F00\u542F\u65F6\uFF0C\u8BF7\u76F4\u63A5\u5728\u7EC8\u7AEF\u4E2D\u8F93\u5165\u3002","info"),Promise.resolve();var n=document.getElementById("input-box"),i=n?n.value:"",a=we(),s=r.pendingAttachments.length>0;if(i||s){var o=s&&r.selectedId?qf(r.selectedId):Promise.resolve([]);return o.then(function(l){var d=Of(l),c=d+(i||(l.length?"\u8BF7\u67E5\u770B\u9644\u4EF6\u3002":""));l.length&&Af();var u=document.getElementById("todo-progress");if(u&&u.classList.add("hidden"),ae(a))return Yf(c,n,a,{interrupt:t});var f=dp(a,c),v=!r.wsConnected;return v?(pp(f),n&&(n.value="",Rt(n)),it(""),Promise.resolve()):lp(a).then(function(m){if(!m)return null;var y=r.currentView;if(m&&m.provider==="codex"&&r.selectedId!==m.id)throw new Error("Codex session changed before input send.");return cp(f,"enter_text",30,y).then(function(){n&&n.value===i&&(n.value="",Rt(n)),it("")})}).catch(function(m){throw T(sp(m),"error"),m})}).catch(function(l){throw T("\u9644\u4EF6\u4E0A\u4F20\u5931\u8D25: "+(l.message||l),"error"),l})}return Promise.resolve()}var Jo={},Yo=350;function Yf(e,t,n,i){i=i||{};var a=!!i.interrupt;if(!r.selectedId||!e)return Promise.resolve();if(!n)return T("\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve();var s=Date.now(),o=Jo[n.id]||0;if(s-o<Yo)return console.log("[wand] postStructuredInput: duplicate submit (within "+Yo+"ms) ignored for session",n.id),Promise.resolve();Jo[n.id]=s;var l=!!(n.structuredState&&n.structuredState.inFlight&&n.status==="running"),d=l&&a,c=l&&!a,u=mr(Array.isArray(n.messages)?n.messages.slice():[]),f;if(c){var v=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];v.push(e),f={id:n.id,queuedMessages:v},$(f);var m=r.sessions.find(function(k){return k.id===n.id})||n;r.currentMessages=Qe(m,dt(m,m.output,!1)),tr("\u5DF2\u52A0\u5165\u6392\u961F\u2026"),He(!0),mn(),T(v.length>1?"\u5DF2\u52A0\u5165\u6392\u961F\uFF08\u5171 "+v.length+" \u6761\u7B49\u5F85\uFF09":"\u5DF2\u52A0\u5165\u6392\u961F\uFF0C\u7B49\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u4F1A\u81EA\u52A8\u53D1\u9001\u3002","info")}else{var y={role:"user",content:[{type:"text",text:e}]};u.push(y);var g=Object.assign({},n.structuredState||{},{inFlight:!0});$({id:n.id,status:"running",messages:u,structuredState:g}),r.currentMessages=Qe(Object.assign({},n,{status:"running",messages:u,structuredState:g}),u),tr(d?"\u5DF2\u4E2D\u65AD\uFF0C\u6B63\u5728\u5904\u7406\u65B0\u6D88\u606F\u2026":"\u601D\u8003\u4E2D\u2026"),He(!0),d&&T("\u5DF2\u4E2D\u65AD\u4E0A\u4E00\u6761\u56DE\u590D\uFF0C\u6B63\u5728\u5904\u7406\u65B0\u6D88\u606F\u2026","info")}t&&(t.value="",Rt(t)),it("");var b=r.queueEpoch,w=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10);return fetch("/api/structured-sessions/"+n.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,interrupt:d||void 0,idempotencyKey:w})}).then(function(k){return k.ok?k.json():k.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(E){var L=new Error(E&&E.error||"\u65E0\u6CD5\u53D1\u9001\u7ED3\u6784\u5316\u6D88\u606F\u3002");throw L.errorCode=E&&E.errorCode,L.httpStatus=k.status,L})}).then(function(k){if(k&&k.error)throw new Error(k.error);if(k&&k.id&&(r.queueEpoch>b&&k.queuedMessages&&delete k.queuedMessages,$(k),k.id===r.selectedId)){var E=r.sessions.find(function(L){return L.id===k.id})||k;r.currentMessages=Qe(E,dt(E,k.output,!1)),He(!0),mn()}}).catch(function(k){if(k&&k.errorCode==="duplicate_idempotency_key"){T(k.message||"\u68C0\u6D4B\u5230\u91CD\u590D\u53D1\u9001\uFF0C\u5DF2\u62E6\u622A\u3002","warning"),tr("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C");return}if(c){var E=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];if($({id:n.id,queuedMessages:E}),n.id===r.selectedId){var L=r.sessions.find(function(W){return W.id===n.id})||n;r.currentMessages=Qe(L,dt(L,L.output,!1)),He(!0),mn()}}else{var S=u.slice(0,-1);$({id:n.id,status:n.status,messages:S,structuredState:Object.assign({},n.structuredState||{},{inFlight:!1})}),n.id===r.selectedId&&(r.currentMessages=Qe(Object.assign({},n,{messages:S,structuredState:Object.assign({},n.structuredState||{},{inFlight:!1})}),S),He(!0))}var M=k&&k.message||"",D=M==="Failed to fetch"||M==="NetworkError when attempting to fetch resource."||M==="Load failed"||/aborted|aborterror|networkerror|failed to fetch/i.test(M);D||T(k&&k.message||"\u65E0\u6CD5\u53D1\u9001\u7ED3\u6784\u5316\u6D88\u606F\u3002","error"),tr("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C")})}function tr(e){var t=document.querySelector(".input-hint");t&&(t.textContent=e)}function mn(){Bt()}var Gf=10,Go=24;function Qf(e){if(typeof e!="string")return"";var t=e.replace(/\s+/g," ").trim();return t.length<=Go?t:t.slice(0,Go)+"\u2026"}function Qo(e){return r.queueBarDrag&&typeof r.queueBarDrag.origIndex=="number"?r.queueBarDrag.origIndex:typeof r.queueBarHoverIndex=="number"&&r.queueBarHoverIndex>=0&&r.queueBarHoverIndex<e?r.queueBarHoverIndex:0}function $f(e,t,n){var i=e.length<=1,a="queue-bar";n&&(a+=" queue-bar-capacity"),t&&(a+=" queue-bar-inflight");for(var s=Qo(e.length),o=t?"\u4E2D\u65AD\u5F53\u524D\u56DE\u590D\uFF0C\u7ACB\u5373\u53D1\u9001\u8FD9\u6761":"\u7ACB\u5373\u53D1\u9001\u8FD9\u6761",l="",d=0;d<e.length;d++){var c=e[d]==null?"":String(e[d]),u=d===s,f="queue-bar-item";u&&(f+=" expanded"),i&&(f+=" queue-bar-item-single");var v=u?c+"\uFF08\u6309\u4F4F\u53EF\u62D6\u52A8\u8C03\u5E8F\uFF09":c;l+='<li class="'+f+'" data-index="'+d+'" data-action="drag" title="'+p(v)+'"><span class="queue-bar-item-index" aria-hidden="true">'+(d+1)+'</span><span class="queue-bar-item-text">'+p(Qf(c))+'</span><button type="button" class="queue-bar-item-promote" data-action="promote-item" title="'+p(o)+'" aria-label="\u7ACB\u5373\u53D1\u9001\u8FD9\u6761" tabindex="'+(u?"0":"-1")+'"><svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M13 2 L4 14 L11 14 L10 22 L20 9 L13 9 Z"/></svg><span class="queue-bar-item-promote-label">\u7ACB\u5373</span></button><button type="button" class="queue-bar-item-delete" data-action="delete" aria-label="\u5220\u9664\u8FD9\u6761\u6392\u961F\u6D88\u606F" title="\u5220\u9664" tabindex="'+(u?"0":"-1")+'"><svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="6" y1="18" x2="18" y2="6"/></svg></button></li>'}return'<div class="'+a+'" data-queue-bar="1"><ol class="queue-bar-list" data-queue-list="1">'+l+"</ol></div>"}function Bt(){var e=document.getElementById("queue-bar-host");if(e){var t=r.sessions.find(function(o){return o.id===r.selectedId}),n=t&&t.sessionKind==="structured",i=n?zi(t):[];if(i=Array.isArray(i)?i:[],!n||i.length===0){e.hidden=!0,e.innerHTML="",r.queueBarHoverIndex=null;return}if(!r.queueBarDrag){e.hidden=!1;var a=!!(t.structuredState&&t.structuredState.inFlight&&t.status==="running"),s=i.length>=Gf;e.innerHTML=$f(i,a,s)}}}function $o(){var e=document.getElementById("queue-bar-host");if(!(!e||e.hidden)){var t=e.querySelector('[data-queue-list="1"]');if(t)for(var n=t.children,i=Qo(n.length),a=0;a<n.length;a++){var s=n[a],o=a===i;if(s.classList.contains("expanded")!==o){s.classList.toggle("expanded",o);var l=s.querySelector(".queue-bar-item-delete");l&&(l.tabIndex=o?0:-1)}}}}function Ca(e){var t=e==null?null:Number(e);r.queueBarHoverIndex!==t&&(r.queueBarHoverIndex=t,$o())}function vi(e,t){$({id:e.id,queuedMessages:t});var n=r.sessions.find(function(i){return i.id===e.id})||e;r.currentMessages=Qe(n,dt(n,n.output,!1)),He(!0),Bt()}function Xf(e){var t=r.sessions.find(function(o){return o.id===r.selectedId});if(t){var n=Array.isArray(t.queuedMessages)?t.queuedMessages.slice():[];if(!(e<0||e>=n.length)){var i=n.slice(),a=n.slice(0,e).concat(n.slice(e+1));typeof r.queueBarHoverIndex=="number"&&(r.queueBarHoverIndex===e?r.queueBarHoverIndex=null:r.queueBarHoverIndex>e&&(r.queueBarHoverIndex-=1)),$({id:t.id,queuedMessages:a});var s=r.sessions.find(function(o){return o.id===t.id})||t;r.currentMessages=Qe(s,dt(s,s.output,!1)),He(!0),Bt(),fetch("/api/structured-sessions/"+t.id+"/queued/"+e,{method:"DELETE",credentials:"same-origin"}).then(function(o){if(!o.ok)return o.json().catch(function(){return{}}).then(function(l){throw new Error(l&&l.error||"\u5220\u9664\u5931\u8D25")})}).catch(function(o){vi(t,i),T(o&&o.message||"\u5220\u9664\u6392\u961F\u6D88\u606F\u5931\u8D25\u3002","error")})}}}function zm(){var e=r.sessions.find(function(i){return i.id===r.selectedId});if(e){var t=Array.isArray(e.queuedMessages)?e.queuedMessages.slice():[];if(t.length!==0){r.queueBarHoverIndex=null,$({id:e.id,queuedMessages:[]});var n=r.sessions.find(function(i){return i.id===e.id})||e;r.currentMessages=Qe(n,dt(n,n.output,!1)),He(!0),Bt(),fetch("/api/structured-sessions/"+e.id+"/queued",{method:"DELETE",credentials:"same-origin"}).then(function(i){if(!i.ok)return i.json().catch(function(){return{}}).then(function(a){throw new Error(a&&a.error||"\u6E05\u7A7A\u5931\u8D25")});T("\u5DF2\u6E05\u7A7A "+t.length+" \u6761\u6392\u961F\u6D88\u606F\u3002","info")}).catch(function(i){vi(e,t),T(i&&i.message||"\u6E05\u7A7A\u6392\u961F\u6D88\u606F\u5931\u8D25\u3002","error")})}}}function Zf(e){var t=r.sessions.find(function(c){return c.id===r.selectedId});if(t){var n=Array.isArray(t.queuedMessages)?t.queuedMessages.slice():[];if(!(e<0||e>=n.length)){var i=n[e],a=n.slice(0,e).concat(n.slice(e+1)),s=n.slice(),o=!!(t.structuredState&&t.structuredState.inFlight&&t.status==="running");typeof r.queueBarHoverIndex=="number"&&(r.queueBarHoverIndex===e?r.queueBarHoverIndex=null:r.queueBarHoverIndex>e&&(r.queueBarHoverIndex-=1)),$({id:t.id,queuedMessages:a});var l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10),d={input:i,idempotencyKey:l};o&&(d.interrupt=!0,d.preserveQueue=!0),T(o?"\u5DF2\u8BF7\u6C42\u4E2D\u65AD\u5F53\u524D\u56DE\u590D\uFF0C\u7ACB\u5373\u53D1\u9001\u8FD9\u6761\u3002":"\u5DF2\u7ACB\u5373\u53D1\u9001\u8FD9\u6761\u6D88\u606F\u3002","info"),fetch("/api/structured-sessions/"+t.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(d)}).then(function(c){return c.ok?c.json():c.json().catch(function(){return{}}).then(function(u){throw new Error(u&&u.error||"\u7ACB\u5373\u53D1\u9001\u5931\u8D25")})}).then(function(c){if(c&&c.id&&($(c),c.id===r.selectedId)){var u=r.sessions.find(function(f){return f.id===c.id})||c;r.currentMessages=Qe(u,dt(u,c.output,!1)),He(!0),Bt()}}).catch(function(c){vi(t,s),T(c&&c.message||"\u7ACB\u5373\u53D1\u9001\u5931\u8D25\u3002","error")})}}}function ep(e,t){var n=r.sessions.find(function(f){return f.id===r.selectedId});if(n){var i=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];if(!(i.length<=1)&&t){var a=t.parentElement;if(a){var s=Number(t.getAttribute("data-index")),o=Array.prototype.slice.call(a.children),l=o.map(function(f){return f.getBoundingClientRect()}),d=3;l.length>=2&&(d=Math.max(0,l[1].top-l[0].top-l[0].height)),e.preventDefault();try{t.setPointerCapture(e.pointerId)}catch{}if(navigator&&navigator.vibrate)try{navigator.vibrate(8)}catch{}r.queueBarDrag={pointerId:e.pointerId,handleEl:t,itemEl:t,listEl:a,siblings:o,rects:l,origIndex:s,targetIndex:s,startY:e.clientY,gap:d,queueSnapshot:i},t.classList.add("dragging"),$o(),o.forEach(function(f){f!==t&&f.classList.add("queue-bar-item-sliding")});var c=function(f){np(f)},u=function(f){rp(f)};r.queueBarDrag.moveHandler=c,r.queueBarDrag.upHandler=u,t.addEventListener("pointermove",c),t.addEventListener("pointerup",u),t.addEventListener("pointercancel",u)}}}}function tp(e,t,n,i){for(var a=n.length,s=[],o=0;o<a;o++)s.push(o);s.splice(e,1),s.splice(t,0,e);for(var l=n[0].top,d=n[0].top,c=1;c<a;c++)n[c].top<d&&(d=n[c].top);for(var u={},f=d,v=0;v<a;v++){var m=s[v];u[m]=f,f+=n[m].height+i}return u}function np(e){var t=r.queueBarDrag;if(!(!t||e.pointerId!==t.pointerId)){e.preventDefault();var n=e.clientY-t.startY;t.itemEl.style.transform="translateY("+n+"px)";for(var i=t.rects[t.origIndex].top+t.rects[t.origIndex].height/2+n,a=t.origIndex,s=0;s<t.rects.length;s++)if(s!==t.origIndex){var o=t.rects[s].top+t.rects[s].height/2;s<t.origIndex&&i<o?a=Math.min(a,s):s>t.origIndex&&i>o&&(a=Math.max(a,s))}if(a!==t.targetIndex){t.targetIndex=a;var l=tp(t.origIndex,a,t.rects,t.gap);t.siblings.forEach(function(d,c){if(c!==t.origIndex){var u=l[c]-t.rects[c].top;d.style.transform=u?"translateY("+u+"px)":""}})}}}function rp(e){var t=r.queueBarDrag;if(!(!t||e&&e.pointerId!==t.pointerId)){try{t.handleEl.releasePointerCapture(t.pointerId)}catch{}t.handleEl.removeEventListener("pointermove",t.moveHandler),t.handleEl.removeEventListener("pointerup",t.upHandler),t.handleEl.removeEventListener("pointercancel",t.upHandler);var n=t.origIndex,i=t.targetIndex,a=t.queueSnapshot;if(t.siblings.forEach(function(c){c.style.transform="",c.classList.remove("queue-bar-item-sliding")}),t.itemEl.classList.remove("dragging"),r.queueBarDrag=null,n===i){Bt();return}for(var s=[],o=0;o<a.length;o++)s.push(o);s.splice(n,1),s.splice(i,0,n);var l=s.map(function(c){return a[c]});r.queueBarHoverIndex=i;var d=r.sessions.find(function(c){return c.id===r.selectedId});if(!d){Bt();return}$({id:d.id,queuedMessages:l}),Bt(),fetch("/api/structured-sessions/"+d.id+"/queued",{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({order:s})}).then(function(c){if(!c.ok)return c.json().catch(function(){return{}}).then(function(u){throw new Error(u&&u.error||"\u6392\u5E8F\u5931\u8D25")})}).catch(function(c){vi(d,a),T(c&&c.message||"\u8C03\u6574\u6392\u961F\u987A\u5E8F\u5931\u8D25\u3002","error")})}}function ip(){var e=document.getElementById("queue-bar-host");!e||e.__queueDelegated||(e.__queueDelegated=!0,e.addEventListener("click",function(t){var n=t.target&&t.target.closest?t.target.closest("[data-action]"):null;if(!(!n||!e.contains(n))){var i=n.getAttribute("data-action");if(i!=="drag"){if(t.preventDefault(),t.stopPropagation(),i==="promote-item"){var a=n.closest(".queue-bar-item");a&&Zf(Number(a.getAttribute("data-index")));return}if(i==="delete"){var s=n.closest(".queue-bar-item");s&&Xf(Number(s.getAttribute("data-index")));return}}}}),e.addEventListener("mouseover",function(t){if(!r.queueBarDrag){var n=t.target&&t.target.closest?t.target.closest(".queue-bar-item"):null;!n||!e.contains(n)||Ca(Number(n.getAttribute("data-index")))}}),e.addEventListener("mouseleave",function(){r.queueBarDrag||Ca(null)}),e.addEventListener("pointerdown",function(t){if(!(t.button!==void 0&&t.button!==0)&&!(t.target&&t.target.closest&&t.target.closest('[data-action="delete"], [data-action="promote-item"]'))){var n=t.target&&t.target.closest?t.target.closest(".queue-bar-item"):null;n&&(Ca(Number(n.getAttribute("data-index"))),ep(t,n))}}))}function Xo(e){if(!e||!Array.isArray(e.content))return 0;for(var t=0,n=0;n<e.content.length;n++){var i=e.content[n];if(i){if(typeof i.text=="string"&&(t+=i.text.length),typeof i.thinking=="string"&&(t+=i.thinking.length),typeof i.content=="string")t+=i.content.length;else if(Array.isArray(i.content))for(var a=0;a<i.content.length;a++){var s=i.content[a];s&&typeof s.text=="string"&&(t+=s.text.length)}if(i.input)try{t+=JSON.stringify(i.input).length}catch{}}}return t}function ap(e,t){if(!e)return t;if(!t)return e;var n=Xo(e),i=Xo(t);return i>=n?t:Object.assign({},e,{usage:t.usage||e.usage})}function Qe(e,t){var n=Array.isArray(t)?mr(t):[],i=Array.isArray(n)?n.slice():[];if(!e||e.sessionKind!=="structured")return i;if(e.structuredState&&e.structuredState.inFlight){var a=i[i.length-1];(!a||a.role!=="assistant")&&i.push({role:"assistant",content:[{type:"text",text:"",__processing:!0}]})}return i}function Zo(){var e=r.sessions.find(function(t){return t.id===r.selectedId});Jr(e),mn()}function sp(e){var t=we(),n=t&&t.provider==="codex";return e&&(e.errorCode==="SESSION_NOT_RUNNING"||e.errorCode==="SESSION_NO_PTY")?n?"Codex \u4F1A\u8BDD\u5DF2\u7ED3\u675F\uFF1B\u82E5\u5B58\u5728 Codex \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u5728\u4F60\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u81EA\u52A8\u6062\u590D\u3002":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F\uFF1B\u82E5\u5B58\u5728 Claude \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u5728\u4F60\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u81EA\u52A8\u6062\u590D\u3002":e&&e.errorCode==="SESSION_NOT_FOUND"?"\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002":e&&e.message||(n?"Codex \u4F1A\u8BDD\u6682\u4E0D\u53EF\u7528\uFF1B\u82E5\u5B58\u5728 Codex \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u81EA\u52A8\u5C1D\u8BD5\u6062\u590D\u3002":"\u4F1A\u8BDD\u6682\u4E0D\u53EF\u7528\uFF1B\u82E5\u5B58\u5728 Claude \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u81EA\u52A8\u5C1D\u8BD5\u6062\u590D\u3002")}function el(e){var t=new Error(e&&e.error||"\u4F1A\u8BDD\u5DF2\u7ED3\u675F\u3002");return e&&typeof e=="object"&&(t.errorCode=e.errorCode||null,t.sessionId=e.sessionId||r.selectedId||null,t.sessionStatus=Object.prototype.hasOwnProperty.call(e,"sessionStatus")?e.sessionStatus:null),t}function tl(e){return e&&(e.errorCode==="SESSION_NOT_RUNNING"||e.errorCode==="SESSION_NO_PTY"||e.errorCode==="SESSION_NOT_FOUND")}function op(e,t){e&&$({id:e,status:t||"exited"})}function Um(e){if(!e||!Array.isArray(e.messages)||e.messages.length<2)return!1;var t=e.messages.some(function(i){return i&&i.role==="user"&&Array.isArray(i.content)&&i.content.some(function(a){return a&&a.type==="text"&&typeof a.text=="string"&&a.text.trim().length>0})}),n=e.messages.some(function(i){return i&&i.role==="assistant"&&Array.isArray(i.content)&&i.content.some(function(a){return a&&a.type==="text"&&typeof a.text=="string"&&a.text.trim().length>0})});return t&&n}function Ta(e){return!!(e&&!ae(e)&&(e.provider==="claude"||e.provider==="codex")&&e.status!=="running"&&e.claudeSessionId)}function lp(e,t){if(!e)return T("\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve(null);if(e.status==="running")return Promise.resolve(e);if(!Ta(e)){var n=e&&e.provider==="codex"?"Codex":"Claude";return T("\u8BE5\u4F1A\u8BDD\u6CA1\u6709\u53EF\u6062\u590D\u7684 "+n+" \u5386\u53F2\u4E0A\u4E0B\u6587\uFF0C\u8BF7\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve(null)}return fl(e.id,t).then(function(i){return i?($(i),me(),qn(i.id),cn(i.id).then(function(){return Ft(!0),i})):null})}function dp(e,t){return[t,"\r"]}function cp(e,t,n,i){var a=Array.isArray(e)?e.filter(function(o){return!!o}):[];if(a.length===0)return Promise.resolve();var s=typeof n=="number"?n:0;return a.reduce(function(o,l,d){return o.then(function(){return d>0&&s>0?new Promise(function(c){setTimeout(c,s)}).then(function(){return bt(l,d===a.length-1?t:void 0,i)}):bt(l,d===a.length-1?t:void 0,i)})},Promise.resolve())}var up=5e3,fp=100;function La(e){e&&(r.pendingMessages.length>=fp&&r.pendingMessages.shift(),r.pendingMessages.push({input:e,at:Date.now()}))}function pp(e){var t=Array.isArray(e)?e.filter(function(n){return!!n}):[];t.forEach(function(n){La(n)})}function vp(e){if(!(typeof e!="string"||!e)){var t=e.replace(/\x1b\[200~/g,"").replace(/\x1b\[201~/g,"");/(?:^|\n)\s*\/clear\s*(?:\r|\n|$)/.test(t)&&typeof r<"u"&&r&&(r.terminalOutputMarker=(r.terminalOutput&&r.terminalOutput.length)|0)}}function bt(e,t,n){return!e||!r.selectedId?Promise.resolve():(vp(e),r.messageQueue.push(e),r.inputQueue=r.inputQueue.then(function(){return mp(e,t,n).finally(function(){var i=r.messageQueue.indexOf(e);i>-1&&r.messageQueue.splice(i,1)})}),r.inputQueue)}function mp(e,t,n){if(!r.selectedId)return Promise.resolve();var i=r.selectedId,a=n||r.currentView;return zf()?r.wsConnected?fetch("/api/sessions/"+i+"/input",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,view:a,shortcutKey:t||void 0})}).then(function(s){return s.ok?s.json():s.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(o){var l=el(o);throw l.httpStatus=s.status,console.error("[wand] postInput: request failed",{status:s.status,errorCode:l.errorCode,message:l.message,sessionId:i}),tl(l)&&op(i,l.sessionStatus||"exited"),l})}).then(function(s){return s&&s.id&&($(s),s.id===r.selectedId&&(s.messages&&s.messages.length>0&&(r.currentMessages=s.messages),He(!0))),s}):(La(e),console.log("[wand] postInput: WebSocket disconnected, queued message",{sessionId:r.selectedId,inputLength:e.length}),Promise.resolve()):r.wsConnected?(console.warn("[wand] postInput: session not running, skipping send",{sessionId:r.selectedId}),T("\u4F1A\u8BDD\u672A\u8FD0\u884C\uFF0C\u6B63\u5728\u7B49\u5F85\u81EA\u52A8\u6062\u590D\u540E\u91CD\u8BD5\u3002","info"),Promise.resolve()):(La(e),console.log("[wand] postInput: session not running, queued for reconnect",{sessionId:r.selectedId,inputLength:e.length}),Promise.resolve())}function Vm(e){return bt(e)}function we(){return r.sessions.find(function(e){return e.id===r.selectedId})||null}function Km(e){return e&&e.provider==="codex"?`
|
|
27
|
-
`:"\r"}function Ba(){return!!r.selectedId&&r.currentView==="terminal"}function gp(e){return!(!r.terminal||!e||e!==r.selectedId||r.terminalSessionId&&r.terminalSessionId!==e)}function nl(e){if(!r.terminalInteractive||!Ba()||e.defaultPrevented||e.isComposing)return!1;var t=e.target;return t?!(t.closest&&t.closest("#mini-keyboard")||Sp(t)):!0}var hp={Esc:"escape",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right",Enter:"enter",Tab:"tab",Backspace:"backspace",Home:"home",End:"end",PageUp:"pageup",PageDown:"pagedown",Delete:"delete",Insert:"insert"," ":"space"},bp={space:" ",tab:" ",shift_tab:"\x1B[Z",backspace:"\x7F",home:"\x1B[H",end:"\x1B[F",pageup:"\x1B[5~",pagedown:"\x1B[6~",delete:"\x1B[3~",insert:"\x1B[2~"},rl={" ":0,"[":27,"\\":28,"]":29,"^":30,_:31},yp=400,wp=10,kp=8,mi=54,gn=8,Ma=[{key:"enter",label:"Enter"},{key:"ctrl_c",label:"Ctrl+C"},{key:"escape",label:"Esc"},{key:"shift_tab",label:"Shift+Tab"}],xp=new Set(["mini-keyboard-fab","mini-keyboard-toggle","terminal-interactive-toggle"]);function Sp(e){return!!(e&&xp.has(e.id))}var Ep=new Set(["ctrl","alt","shift"]);function il(e){return Ep.has(e)}function Ip(e){return bp[e]||""}function Cp(e){var t=e.toLowerCase();return t>="a"&&t<="z"?String.fromCharCode(t.charCodeAt(0)-96):Object.prototype.hasOwnProperty.call(rl,t)?String.fromCharCode(rl[t]):""}function Tp(e){return hp[e.key]||e.key}function Lp(e,t){return{ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey&&(t.length===1||t==="tab"),meta:e.metaKey}}function al(e,t){e&&bt(e,t).catch(function(){})}function Bp(){yl()}function Aa(e){r.keyboardPopupOpen=!1,e!==!1&&hi(),qp()}function Mp(){Ba()&&On(!r.terminalInteractive)}function On(e){var t=!!e&&Ba();r.terminalInteractive!==t&&(r.terminalInteractive=t,t?(Op(),Aa(!1),Bp(),T("\u7EC8\u7AEF\u4EA4\u4E92\u6A21\u5F0F\u5DF2\u5F00\u542F","info")):(Pp(),hi()),Ar())}function qa(){var e=r.sessions.find(function(n){return n.id===r.selectedId}),t=!e||e.status!=="running"||r.currentView!=="terminal";if(t&&r.terminalInteractive){On(!1);return}(!e||r.currentView!=="terminal")&&r.keyboardPopupOpen&&(r.keyboardPopupOpen=!1),Ar()}function Ar(){var e=r.sessions.find(function(b){return b.id===r.selectedId}),t=ae(e),n=e&&e.provider==="codex",i=t?!!(e&&e.structuredState&&e.structuredState.inFlight):!!e&&e.status==="running",a=document.getElementById("input-box"),s=["terminal-interactive-toggle-top"];s.forEach(function(b){var w=document.getElementById(b);if(w){w.classList.toggle("active",r.terminalInteractive),w.classList.toggle("is-on",r.terminalInteractive),w.classList.toggle("hidden",t||r.currentView!=="terminal"||!e),w.setAttribute("aria-checked",r.terminalInteractive?"true":"false");var k=w.querySelector(".plus-popover-toggle-state");k&&(k.textContent=r.terminalInteractive?"\u5F00":"\u5173")}});var o=document.querySelector(".input-hint");o&&(o.classList.toggle("hidden",t?!0:r.currentView==="terminal"),!t&&e&&(o.textContent=n?"Enter \u53D1\u9001 \xB7 chat \u4E3A\u89E3\u6790\u89C6\u56FE\uFF0Cterminal \u4E3A\u539F\u59CB\u8F93\u51FA":"Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C"));var l=!t&&!i&&Ta(e);a&&(a.placeholder=co(e,r.terminalInteractive),a.disabled=!t&&!!e&&!i&&!l,a.setAttribute("aria-disabled",a.disabled?"true":"false"),a.readOnly=!1,a.classList.toggle("is-terminal-passthrough",!!r.terminalInteractive));var d=document.querySelector(".input-composer");d&&r.terminalInteractive&&d.classList.contains("voice-mode")&&(d.classList.remove("voice-mode"),be.recording=!1,xa(),Sa());var c=document.getElementById("send-input-button"),u=t&&i;c&&(c.disabled=!t&&!!e&&!i&&!l,c.setAttribute("title",t?u?"\u6392\u961F\u53D1\u9001\uFF08\u5F53\u524D\u56DE\u590D\u7ED3\u675F\u540E\u5904\u7406\uFF09":"\u53D1\u9001":n?i?"\u53D1\u9001\u7ED9 Codex":"Codex \u4F1A\u8BDD\u5DF2\u7ED3\u675F":!e||i||l?"\u53D1\u9001":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F"),c.classList.toggle("queue-mode",u));var f=document.getElementById("stop-button");if(f){var v=ji(e);f.classList.toggle("hidden",!v.active)}var m=document.getElementById("stop-button");if(m){var y=ji(e);m.classList.toggle("hidden",!y.active)}var g=document.getElementById("output");g&&g.classList.toggle("interactive",!t&&r.terminalInteractive),Bl()}function gi(){var e=window.getSelection&&window.getSelection();if(!e||e.isCollapsed)return!1;var t=document.getElementById("output");if(!t)return!1;var n=e.anchorNode;return n&&n.nodeType===3&&(n=n.parentNode),!!(n&&t.contains(n))}function Oa(e){if(nl(e)&&!e.metaKey){var t=Tp(e);if(t){var n=Lp(e,t);if(!il(t)&&!(n.ctrl&&t.length===1&&t.toLowerCase()==="c"&&gi())){var i=ol(t,n);i&&(e.preventDefault(),al(i,t))}}}}function Ap(){r.terminal&&Su(500)}function qp(){_r()}function Jm(e){e.preventDefault(),e.stopPropagation(),!(r.currentView!=="terminal"||!r.selectedId)&&(r.keyboardPopupOpen=!r.keyboardPopupOpen,Ar())}function sl(){r.keyboardPopupOpen=!1,Ar()}function Op(){document.addEventListener("keydown",Oa,!0)}function Pp(){document.removeEventListener("keydown",Oa,!0)}function ol(e,t){var n=t||{ctrl:!1,alt:!1,shift:!1};if(il(e))return"";if(e==="tab"&&n.shift)return"\x1B[Z";var i=Ip(e);if(i)return i;if(e.indexOf("ctrl_")===0)return String.fromCharCode(e.charCodeAt(e.length-1)-96);var a=qr(e);if(a)return a;if(!e)return"";var s=e.length===1?e:"";return s?(n.shift&&(s=s.toUpperCase()),n.ctrl?Cp(s):n.alt?"\x1B"+s:s):""}function hi(){r.modifiers.ctrl=!1,r.modifiers.alt=!1,r.modifiers.shift=!1,Hp()}function Hp(){var e=document.getElementById("mini-keyboard");e&&["ctrl","alt","shift"].forEach(function(t){var n=e.querySelector('[data-key="'+t+'"]');n&&n.classList.toggle("active",!!r.modifiers[t])})}function qr(e){switch(e){case"yes":return"y\r";case"no":return"n\r";case"up":return"\x1B[A";case"down":return"\x1B[B";case"left":return"\x1B[D";case"right":return"\x1B[C";case"enter":return"\r";case"ctrl_c":return"";case"ctrl_d":return"";case"ctrl_l":return"\f";case"ctrl_u":return"";case"ctrl_k":return"\v";case"ctrl_w":return"";case"ctrl_z":return"";case"escape":return"\x1B";default:return""}}function _p(){if(r.pendingMessages.length!==0){var e=we();if(ae(e)){r.pendingMessages=[];return}var t=Date.now(),n=[],i=0;r.pendingMessages.forEach(function(s){if(typeof s=="string"){n.push(s);return}if(!(!s||typeof s.input!="string")){if(t-(s.at||0)>up){i++;return}n.push(s.input)}}),r.pendingMessages=[],i>0&&console.log("[wand] flushPendingMessages: dropped "+i+" stale input(s)");var a=Promise.resolve();n.forEach(function(s){a=a.then(function(){return Dp(s).catch(function(){})})})}}function Dp(e){if(!e||!r.selectedId)return Promise.resolve();var t=r.selectedId;return fetch("/api/sessions/"+t+"/input",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,view:r.currentView})}).then(function(n){return n.ok?n.json():n.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(i){var a=el(i);if(a.httpStatus=n.status,tl(a))return console.log("[wand] sendInputDirect: session unavailable, dropping",{sessionId:t,errorCode:a.errorCode}),null;throw a})}).then(function(n){return n&&n.id&&($(n),n.id===r.selectedId&&(n.messages&&n.messages.length>0&&(r.currentMessages=n.messages),He(!0))),n})}function Pa(){r.selectedId&&fetch("/api/sessions/"+r.selectedId+"/stop",{method:"POST",credentials:"same-origin"}).then(Ht)}function ll(e){var t=document.querySelector('.session-item[data-session-id="'+e+'"]');t&&t.classList.add("deleting"),setTimeout(function(){fetch("/api/sessions/"+e,{method:"DELETE",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);return r.selectedId===e&&(r.selectedId=null,ye()),Ht()}).catch(function(){t&&t.classList.remove("deleting");var n=document.getElementById("action-error");Ke(n,"\u65E0\u6CD5\u5220\u9664\u4F1A\u8BDD\u3002")})},250)}function dl(e,t){t&&t.classList.add("deleting"),setTimeout(function(){fetch("/api/claude-history/"+encodeURIComponent(e),{method:"DELETE",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);r.claudeHistory=r.claudeHistory.filter(function(i){return i.claudeSessionId!==e}),delete r.selectedClaudeHistoryIds[e],me()}).catch(function(){t&&t.classList.remove("deleting");var n=document.getElementById("action-error");Ke(n,"\u65E0\u6CD5\u5220\u9664\u5386\u53F2\u4F1A\u8BDD\u3002")})},250)}function Ym(e,t){dl(e,t)}function jp(e,t,n){e&&fetch("/api/claude-history?cwd="+encodeURIComponent(e),{method:"DELETE",credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i&&i.error)throw new Error(i.error);r.claudeHistory=r.claudeHistory.filter(function(a){return a.cwd!==e}),me()}).catch(function(){cl(n,!1);var i=document.getElementById("action-error");Ke(i,"\u65E0\u6CD5\u6E05\u7406\u8BE5\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD\u3002")})}function cl(e,t){e.forEach(function(n){n.classList.toggle("deleting",t)})}function Np(e){return Array.prototype.slice.call(document.querySelectorAll('.claude-history-item[data-cwd="'+window.CSS.escape(String(e))+'"]'))}var ul=null,Or=null;function Pr(){if(Or){Or.classList.remove("swiped");var e=Or.querySelector(".session-item-content");e&&(e.style.transform=""),Or=null}}function Rp(){ul=null,Or=null}function Fp(e,t,n){e==="claude"&&(r.preferredCommand=e,r.chatMode=_t(e,r.chatMode));var i=r.chatModel||r.config&&r.config.defaultModel||"";return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:e,cwd:t||"",mode:r.chatMode||r.config.defaultMode||"default",model:i||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(a){return a.json()}).then(function(a){return a.error?(n&&Ke(n,a.error),null):(r.selectedId=a.id,ye(),r.drafts[a.id]="",a)})}var Ha=!1;function fl(e,t){return!e||Ha?Promise.resolve(null):(Ha=!0,fetch("/api/sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({mode:r.chatMode||r.config.defaultMode||"default"}))}).then(function(n){return n.json()}).then(function(n){return n.error?(t?Ke(t,n.error):T(n.error,"error"),null):(r.selectedId=n.id,ye(),r.drafts[n.id]="",n)}).catch(function(n){var i=n&&n.message||"\u65E0\u6CD5\u6062\u590D\u4F1A\u8BDD\u3002";return t?Ke(t,i):T(i,"error"),null}).finally(function(){Ha=!1}))}function Gm(e,t){return e?fetch("/api/claude-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({mode:r.chatMode||r.config.defaultMode||"default"}))}).then(function(n){return n.json()}).then(function(n){return n.error?(t?Ke(t,n.error):T(n.error,"error"),null):(r.claudeHistory=r.claudeHistory.filter(function(i){return i.claudeSessionId!==e}),r.selectedId=n.id,ye(),r.drafts[n.id]="",n)}).catch(function(n){var i=n&&n.message||"\u65E0\u6CD5\u6309 Claude \u4F1A\u8BDD ID \u6062\u590D\u4F1A\u8BDD\u3002";return t?Ke(t,i):T(i,"error"),null}):Promise.resolve(null)}function hn(e){return!e||!e.id?Promise.resolve():(r.selectedId=e.id,ye(),r.currentMessages=[],Dr(),It(),Mr(e.id),$(e),me(),qn(e.id),cn(e.id).then(function(){Ft(!0)}))}function pl(e){return fl(e).then(function(t){return t?(t.claudeSessionId&&(t.provider==="codex"?r.codexHistory=r.codexHistory.filter(function(n){return n.claudeSessionId!==t.claudeSessionId}):r.claudeHistory=r.claudeHistory.filter(function(n){return n.claudeSessionId!==t.claudeSessionId})),hn(t).then(function(){return t})):null})}function Qm(e,t,n){return Fp(e,t,n).then(function(i){return i?hn(i).then(function(){return i}):null})}function $m(e){var t=document.getElementById("welcome-input");if(t){t.placeholder="\u6B63\u5728\u601D\u8003\u2026",t.disabled=!0;var n=r.chatMode||"managed",i=Ge(),a=ht(),s=r.chatModel||r.config&&r.config.defaultModel||"";fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:a,cwd:i,mode:n,initialInput:e,model:s||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(o){return o.json()}).then(function(o){return o.error?(T(o.error,"error"),t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1,null):hn(o)}).catch(function(o){T(o&&o.message||"\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error"),t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1}).finally(function(){t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1})}}function Xm(e,t,n){var i=r.chatMode||"managed",a=Ge(),s=ht(),o=r.chatModel||r.config&&r.config.defaultModel||"";fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({command:s,cwd:a,mode:i,initialInput:e||void 0,model:o||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(l){return l.json()}).then(function(l){return l.error?(T(l.error,"error"),null):(t&&(t.value=""),n&&(n.value=""),hn(l))}).catch(function(l){T(l&&l.message||"\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error")})}function Wp(e){e.disabled=!0,pl(e.dataset.sessionId).finally(function(){e.disabled=!1})}function zp(e){var t=e.dataset.claudeSessionId,n=e.dataset.cwd;t&&(e.disabled=!0,Up(t,n).then(function(i){i&&i.id&&(r.codexHistory=r.codexHistory.filter(function(a){return a.claudeSessionId!==t}),r.selectedId=i.id,ye(),r.drafts[i.id]="",hn(i).then(function(){jt()}))}).finally(function(){e.disabled=!1}))}function Up(e,t){return fetch("/api/codex-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({mode:r.chatMode||r.config&&r.config.defaultMode||"default",cwd:t}))}).then(function(n){return n.json()}).then(function(n){return n.error?(T(n.error,"error"),null):n}).catch(function(n){return T(n&&n.message||"\u65E0\u6CD5\u6062\u590D\u5386\u53F2\u4F1A\u8BDD\u3002","error"),null})}function Vp(e){var t=e.dataset.claudeSessionId;if(t){var n=e.closest(".claude-history-item");n&&(n.style.opacity="0.5"),fetch("/api/codex-history/"+encodeURIComponent(t),{method:"DELETE",credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){i&&i.ok?(r.codexHistory=r.codexHistory.filter(function(a){return a.claudeSessionId!==t}),me()):n&&(n.style.opacity="1")}).catch(function(){n&&(n.style.opacity="1")})}}function Kp(e){var t=e.dataset.claudeSessionId,n=e.dataset.cwd;t&&(e.disabled=!0,bi(t,n).then(function(i){i&&i.id&&(r.claudeHistory=r.claudeHistory.filter(function(a){return a.claudeSessionId!==t}),r.selectedId=i.id,ye(),r.drafts[i.id]="",hn(i).then(function(){jt()}))}).finally(function(){e.disabled=!1}))}function bi(e,t){return fetch("/api/claude-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(ct({mode:r.chatMode||r.config&&r.config.defaultMode||"default",cwd:t}))}).then(function(n){return n.json()}).then(function(n){return n.error?(T(n.error,"error"),null):n}).catch(function(n){return T(n&&n.message||"\u65E0\u6CD5\u6062\u590D\u5386\u53F2\u4F1A\u8BDD\u3002","error"),null})}function yi(){return"ontouchstart"in window||navigator.maxTouchPoints>0}function Ft(e){if(!r.terminalInteractive){var t=document.getElementById("input-box");!t||!r.selectedId||document.activeElement!==t&&(e&&yi()||_a(t))}}function Zm(){var e=document.querySelector(".chat-messages");e&&(e.scrollTop=0)}function vl(){var e=document.querySelector(".input-panel");e&&e.style.removeProperty("--keyboard-offset")}function ml(){var e=document.querySelector(".input-panel");e&&e.style.removeProperty("--keyboard-offset")}function wi(e){if(e){var t=e.selectionStart,n=e.selectionEnd;Da(e),typeof t=="number"&&typeof n=="number"&&e.setSelectionRange(t,n)}}function gl(e){!e||e.dataset.touchScrollBound==="true"||(e.dataset.touchScrollBound="true",e.addEventListener("touchstart",function(){e.scrollHeight<=e.clientHeight+1||(e.scrollTop<=0?e.scrollTop=1:e.scrollTop+e.clientHeight>=e.scrollHeight&&(e.scrollTop=Math.max(1,e.scrollHeight-e.clientHeight-1)))},{passive:!0}))}function hl(e){e&&(Rt(e),wi(e))}function Jp(e){var t=e&&e.target?e.target:document.getElementById("input-box");t&&(vl(),hl(t))}function Yp(e){var t=e&&e.target?e.target:document.getElementById("input-box");ml(),kl(2200,t);var n=[80,200,380,620,900];n.forEach(function(i,a){setTimeout(function(){nr(!1),a===1&&yi()&&(at("keyboard-blur",{forceReplay:!0}),gt("keyboard"))},i)})}function Gp(e){e&&(e.setSelectionRange(e.value.length,e.value.length),wi(e))}function _a(e){e&&(e.focus({preventScroll:!0}),Gp(e))}function Qp(e){gl(e),hl(e)}function $p(e){_a(e)}function eg(e){vl(),wi(e)}function Xp(){ml()}function Zp(e){wi(e)}function tg(e){$p(e)}function ev(e){Qp(e)}function ng(){Xp()}function rg(e){Zp(e)}function tv(e,t){if(!e||!t||document.activeElement!==t)return!1;var n=window.innerHeight-e.height-e.offsetTop;if(n<=50)return!1;var i=t.getBoundingClientRect();return i.bottom>e.height-12}function Da(e){if(e){var t=e.scrollHeight>e.clientHeight+1;if(!t){e.scrollTop=0;return}e.scrollTop=e.scrollHeight}}function bl(){if(r.terminalInteractive){yl();return}if(!yi()){var e=document.getElementById("input-box");!e||!r.selectedId||document.activeElement===e||_a(e)}}function yl(){var e=document.getElementById("output");e&&(e.setAttribute("tabindex","0"),e.focus(),r.terminal&&r.terminal.focus&&r.terminal.focus())}function nv(){var e=document.querySelector(".input-panel"),t=document.querySelector(".chat-messages");if("virtualKeyboard"in navigator){var n=navigator.virtualKeyboard;n.addEventListener("geometrychange",function(){e&&e.style.removeProperty("padding-bottom")})}var i=document.getElementById("output");i&&i.addEventListener("click",function(){bl()}),t&&t.addEventListener("click",function(a){a.target.tagName!=="A"&&a.target.tagName!=="BUTTON"&&!a.target.closest("button")&&!a.target.closest("[data-tool-toggle]")&&bl()})}function rv(){try{window.scrollTo(0,0)}catch{}document.scrollingElement&&(document.scrollingElement.scrollTop=0),document.documentElement&&(document.documentElement.scrollTop=0),document.body&&(document.body.scrollTop=0)}var ja=0,ki=0,Na=0;function iv(){var e=document.documentElement;if(e&&e.classList&&e.classList.contains("is-pwa"))return!0;try{return navigator.standalone===!0}catch{}return!1}function wl(e){Na=Math.max(Na,Date.now()+(e||1800))}function kl(e,t){setTimeout(function(){var n=document.activeElement;Ra(n)&&n!==t||wl(e)},30)}function av(e){var t=document.documentElement,n=Math.max(window.innerWidth||0,e&&e.width||0,t&&t.clientWidth||0),i=Math.max(window.innerHeight||0,e&&e.height||0,t&&t.clientHeight||0);return!ja||Math.abs(n-ja)>8?(ja=n,ki=i):i>ki&&(ki=i),Math.max(1,Math.round(ki||i||1))}function sv(e,t,n,i){return e||!iv()||Date.now()>Na?!1:t>0||i>n+1}function nr(e){var t=window.visualViewport;if(t){var n=document.documentElement;if(window.__wandImeNative){n.style.setProperty("--app-viewport-top","0px"),n.style.setProperty("--app-viewport-height",Math.round(t.height)+"px");return}var i=av(t),a=Math.max(0,Math.round(t.offsetTop||0)),s=Math.max(1,Math.round(t.height));sv(e,a,s,i)&&(a=0,s=Math.max(s,i)),n.style.setProperty("--app-viewport-top",a+"px"),n.style.setProperty("--app-viewport-height",s+"px"),(e||(window.scrollY||0)>0)&&rv()}}function Ra(e){if(!e)return!1;var t=e.tagName;if(t==="TEXTAREA"||t==="SELECT")return!0;if(t==="INPUT"){var n=(e.getAttribute("type")||"text").toLowerCase();return!/^(button|checkbox|color|file|hidden|image|radio|range|reset|submit)$/i.test(n)}return!!e.isContentEditable}function ov(){if(!("visualViewport"in window))return;var e=window.visualViewport,t=e.height,n=!1,i=Math.max(window.innerWidth||0,e.width||0),a=Math.max(window.innerHeight||0,e.height||0),s=[];function o(){return Math.max(window.innerHeight||0,e.height||0)}function l(){var m=Math.max(window.innerWidth||0,e.width||0),y=o();if(Math.abs(m-i)>8){i=m,a=y;return}y>a&&(a=y)}function d(m,y){var g=document.activeElement,b=g===m||Ra(g),w=a-e.height,k=a-(window.innerHeight||e.height||0);return!!(y>80||b&&(w>120||k>120)||n&&(w>80||y>32))}function c(){s.forEach(function(m){clearTimeout(m)}),s=[60,180,360,620,900].map(function(m){return setTimeout(function(){nr(n)},m)})}function u(){if(e){var m=document.getElementById("input-box"),y=window.innerHeight-e.height-e.offsetTop;l();var g=d(m,y),b=Math.abs(e.height-t)>8;if(nr(g),g&&(!n||b)&&tv(e,m)&&Da(m),!n&&g){var w=r.terminalAutoFollow||ia();at("keyboard-open",{forceReplay:!0}),window.__wandImeNative||setTimeout(function(){nr(!0)},220),c(),w&&setTimeout(function(){r.terminal&>("force")},220)}if(n&&!g){var k=!!window.__wandImeNative;k||(wl(2200),nr(!1)),c(),setTimeout(function(){k||nr(!1),at("keyboard-close",{forceReplay:!0}),gt("keyboard")},200)}b&&n===g&&at("viewport"),n=g,t=e.height}}var f=null;function v(){f!==null&&cancelAnimationFrame(f),f=requestAnimationFrame(function(){f=null,u()})}e.addEventListener("resize",v),e.addEventListener("scroll",v),document.addEventListener("visibilitychange",function(){document.visibilityState==="visible"&&(v(),setTimeout(v,240),setTimeout(v,720))}),window.addEventListener("pageshow",function(m){m&&m.persisted&&(v(),setTimeout(v,240))}),document.addEventListener("focusout",function(m){!m||!m.target||Ra(m.target)&&(kl(1600,m.target),setTimeout(v,80),setTimeout(v,420))}),u()}function lv(){var e=document.getElementById("output");if(e){var t=document.createElement("div");t.className="terminal-resize-handle",t.innerHTML="⋮",e.appendChild(t);var n=!1,i=0,a=0;t.addEventListener("mousedown",function(s){n=!0,i=s.clientY,a=e.getBoundingClientRect().height,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",s.preventDefault()}),r.resizeMouseMove=function(s){if(n){var o=s.clientY-i,l=Math.max(200,Math.min(a+o,window.innerHeight-200));e.style.height=l+"px",e.style.flex="none",Wt()}},document.addEventListener("mousemove",r.resizeMouseMove),r.resizeMouseUp=function(){n&&(n=!1,document.body.style.cursor="",document.body.style.userSelect="",Wt())},document.addEventListener("mouseup",r.resizeMouseUp),t.addEventListener("touchstart",function(s){n=!0,i=s.touches[0].clientY,a=e.getBoundingClientRect().height,s.preventDefault()},{passive:!1}),r.resizeTouchMove=function(s){if(n){var o=s.touches[0].clientY-i,l=Math.max(200,Math.min(a+o,window.innerHeight-200));e.style.height=l+"px",e.style.flex="none",Wt(),s.preventDefault()}},document.addEventListener("touchmove",r.resizeTouchMove,{passive:!1}),r.resizeTouchEnd=function(){n&&(n=!1,Wt())},document.addEventListener("touchend",r.resizeTouchEnd)}}function xl(){var e=we();return!!e}function Fa(e){var t=Math.max(gn,window.innerWidth-mi-gn),n=Math.max(gn,window.innerHeight-mi-gn);return{right:Math.min(Math.max(gn,e.right),t),bottom:Math.min(Math.max(gn,e.bottom),n)}}function Sl(){if(r.joystickBallEl){var e=Fa(r.joystickPos||{right:18,bottom:96});r.joystickBallEl.style.right=e.right+"px",r.joystickBallEl.style.bottom=e.bottom+"px"}}function dv(e,t){var n=Fa({right:e,bottom:t});r.joystickPos=n;try{localStorage.setItem("wand-ball-pos",JSON.stringify(n))}catch{}}function cv(){function e(s,o,l){return'<button type="button" class="wjp-key'+(l?" "+l:"")+'" data-key="'+s+'">'+o+"</button>"}var t='<div class="wjp-dpad"><div class="wjp-dpad-row">'+e("up","\u2191","wjp-dir")+'</div><div class="wjp-dpad-row">'+e("left","\u2190","wjp-dir")+e("down","\u2193","wjp-dir")+e("right","\u2192","wjp-dir")+"</div></div>",n="",i;for(i=0;i<Ma.length;i++)n+=e(Ma[i].key,Ma[i].label,"");var a='<div class="wjp-header"><span class="wjp-title">'+J("paw",{size:13,strokeWidth:1.6,cls:"wjp-title-icon"})+'<span>\u9065\u63A7\u9762\u677F</span></span><button type="button" class="wjp-close" aria-label="\u5173\u95ED\u9065\u63A7\u9762\u677F">'+J("x",{size:13,strokeWidth:2})+"</button></div>"+t+'<div class="wjp-grid wjp-fnkeys">'+n+"</div>";return a}function uv(){if(!r.joystickRootEl){var e=document.createElement("div");e.className="wand-joystick-root";var t=document.createElement("div");t.className="wand-joystick-backdrop",e.appendChild(t);var n=document.createElement("div");n.className="wand-joystick-panel",n.innerHTML=cv(),n.addEventListener("click",hv),e.appendChild(n);var i=document.createElement("div");i.className="wand-joystick-ball",i.setAttribute("role","button"),i.setAttribute("aria-label","Wand \u9065\u63A7\u9762\u677F"),i.setAttribute("title","\u70B9\u51FB\u6253\u5F00\u9065\u63A7\u9762\u677F\uFF0C\u62D6\u52A8\u53EF\u79FB\u52A8\u4F4D\u7F6E"),i.innerHTML=J("paw",{size:25,strokeWidth:1.6,cls:"wand-joystick-logo"}),e.appendChild(i),document.body.appendChild(e),r.joystickRootEl=e,r.joystickBackdropEl=t,r.joystickPanelEl=n,r.joystickBallEl=i,Sl(),i.addEventListener("pointerdown",fv),i.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation()}),t.addEventListener("pointerdown",function(a){r.joystickPinnedOpen&&r.joystickGesture==null&&(a.preventDefault(),Hr())}),t.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation()}),r.joystickResizeHandler=function(){Sl()},window.addEventListener("resize",r.joystickResizeHandler),window.addEventListener("orientationchange",r.joystickResizeHandler),Bl()}}function fv(e){if(xl()&&!((e.pointerType==="mouse"||e.pointerType==="pen")&&e.button!==0)&&r.joystickPointerId===null){e.preventDefault(),e.stopPropagation();var t=e.pointerType==="mouse"||e.pointerType==="pen";r.joystickPointerId=e.pointerId,r.joystickPressStart={x:e.clientX,y:e.clientY,t:Date.now()},r.joystickGesture="pending";try{r.joystickBallEl.setPointerCapture(e.pointerId)}catch{}if(t){r.joystickMoveHandler=Cl,r.joystickUpHandler=Tl,document.addEventListener("pointermove",r.joystickMoveHandler),document.addEventListener("pointerup",r.joystickUpHandler),document.addEventListener("pointercancel",r.joystickUpHandler);return}r.joystickLongPressTimer=setTimeout(function(){r.joystickGesture==="pending"&&El()},yp),r.joystickMoveHandler=Cl,r.joystickUpHandler=Tl,document.addEventListener("pointermove",r.joystickMoveHandler),document.addEventListener("pointerup",r.joystickUpHandler),document.addEventListener("pointercancel",r.joystickUpHandler)}}function El(){r.joystickGesture="move",r.joystickPinnedOpen&&Hr(),r.joystickBallEl&&r.joystickBallEl.classList.add("dragging"),r.joystickBackdropEl&&r.joystickBackdropEl.classList.add("active")}function Il(e,t){if(r.joystickBallEl){var n=Fa({right:window.innerWidth-e-mi/2,bottom:window.innerHeight-t-mi/2});r.joystickBallEl.style.right=n.right+"px",r.joystickBallEl.style.bottom=n.bottom+"px"}}function Cl(e){if(e.pointerId===r.joystickPointerId&&r.joystickBallEl){e.preventDefault();var t=e.clientX-r.joystickPressStart.x,n=e.clientY-r.joystickPressStart.y;if(r.joystickGesture==="pending")if(Math.sqrt(t*t+n*n)>wp){if(e.pointerType==="mouse"||e.pointerType==="pen"){El(),Il(e.clientX,e.clientY);return}r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickGesture="cancelled";return}else return;if(r.joystickGesture==="move"){Il(e.clientX,e.clientY);return}}}function Tl(e){if(e.pointerId===r.joystickPointerId){r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null);var t=r.joystickGesture;if(t==="pending"){var n=e.clientX-r.joystickPressStart.x,i=e.clientY-r.joystickPressStart.y;Math.sqrt(n*n+i*i)<=kp&&mv()}else if(t==="move"){var a=r.joystickBallEl?r.joystickBallEl.getBoundingClientRect():null;a&&dv(window.innerWidth-a.right,window.innerHeight-a.bottom)}Ll()}}function Ll(){if(r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickBallEl&&r.joystickPointerId!==null)try{r.joystickBallEl.releasePointerCapture(r.joystickPointerId)}catch{}r.joystickMoveHandler&&(document.removeEventListener("pointermove",r.joystickMoveHandler),r.joystickMoveHandler=null),r.joystickUpHandler&&(document.removeEventListener("pointerup",r.joystickUpHandler),document.removeEventListener("pointercancel",r.joystickUpHandler),r.joystickUpHandler=null),r.joystickBallEl&&r.joystickBallEl.classList.remove("dragging"),r.joystickBackdropEl&&!r.joystickPinnedOpen&&r.joystickBackdropEl.classList.remove("active"),r.joystickPointerId=null,r.joystickGesture=null,r.joystickPressStart=null}function pv(e){if(e==="ctrl"||e==="alt"||e==="shift"){r.modifiers[e]=!r.modifiers[e],_r();return}var t=we();if(t&&ae(t)){(e==="ctrl_c"||e==="escape")&&vv(t,e),hi(),_r();return}var n=ol(e,{ctrl:r.modifiers.ctrl,alt:r.modifiers.alt,shift:r.modifiers.shift});n&&al(n,e),hi(),_r(),Ap()}function vv(e,t){!e||!e.id||fetch("/api/structured-sessions/"+e.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:"",interrupt:!0,preserveQueue:!0})}).then(function(n){return n.ok?n.json():n.json().catch(function(){return{}}).then(function(i){throw new Error(i&&i.error||"\u4E2D\u65AD\u5931\u8D25 (key="+t+")")})}).then(function(n){if(n&&n.id&&($(n),n.id===r.selectedId)){var i=r.sessions.find(function(a){return a.id===n.id})||n;r.currentMessages=Qe(i,dt(i,n.output,!1)),He(!0),typeof Bt=="function"&&Bt()}}).catch(function(n){window&&window.console&&n&&n.message&&console.debug("[wand] joystick interrupt no-op:",n.message)})}function mv(){r.joystickPinnedOpen?Hr():gv()}function gv(){if(!(!r.joystickPanelEl||!r.joystickBallEl)){r.joystickPinnedOpen=!0;var e=r.joystickBallEl.getBoundingClientRect();r.joystickPanelEl.style.right=Math.max(gn,window.innerWidth-e.right)+"px",r.joystickPanelEl.style.bottom=Math.max(gn,window.innerHeight-e.top+10)+"px",r.joystickPanelEl.classList.add("active"),r.joystickBallEl.classList.add("panel-open"),r.joystickBackdropEl&&r.joystickBackdropEl.classList.add("active"),_r()}}function Hr(){r.joystickPinnedOpen=!1,r.joystickPanelEl&&r.joystickPanelEl.classList.remove("active"),r.joystickBallEl&&r.joystickBallEl.classList.remove("panel-open"),r.joystickBackdropEl&&r.joystickGesture==null&&r.joystickBackdropEl.classList.remove("active")}function _r(){r.joystickPanelEl&&["ctrl","alt"].forEach(function(e){var t=r.joystickPanelEl.querySelector('.wjp-mod[data-key="'+e+'"]');t&&t.classList.toggle("active",!!r.modifiers[e])})}function hv(e){var t=e.target&&e.target.closest?e.target.closest(".wjp-close"):null;if(t){e.preventDefault(),e.stopPropagation(),Hr();return}var n=e.target&&e.target.closest?e.target.closest(".wjp-key"):null;if(n){e.preventDefault(),e.stopPropagation();var i=n.getAttribute("data-key");i&&pv(i)}}function Bl(){var e=r.joystickRootEl;if(e){var t=xl();e.classList.toggle("visible",t),t||((r.joystickPointerId!==null||r.joystickGesture)&&Ll(),r.joystickPinnedOpen&&Hr(),r.joystickBackdropEl&&r.joystickBackdropEl.classList.remove("active"))}}function bv(){r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickMoveHandler&&(document.removeEventListener("pointermove",r.joystickMoveHandler),r.joystickMoveHandler=null),r.joystickUpHandler&&(document.removeEventListener("pointerup",r.joystickUpHandler),document.removeEventListener("pointercancel",r.joystickUpHandler),r.joystickUpHandler=null),r.joystickResizeHandler&&(window.removeEventListener("resize",r.joystickResizeHandler),window.removeEventListener("orientationchange",r.joystickResizeHandler),r.joystickResizeHandler=null),r.joystickRootEl&&r.joystickRootEl.parentNode&&r.joystickRootEl.parentNode.removeChild(r.joystickRootEl),r.joystickRootEl=null,r.joystickPanelEl=null,r.joystickBackdropEl=null,r.joystickBallEl=null,r.joystickPointerId=null,r.joystickGesture=null,r.joystickPressStart=null,r.joystickPinnedOpen=!1}function yv(){var e=document.getElementById("output");if(e){var t=!Ne();r.resizeHandler=function(){Wt(!0);var n=!Ne();t!==n&&(t=n,!n&&r.sidebarPinned&&r.sessionsDrawerOpen?(r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Er()):n&&r.sidebarPinned&&!r.sessionsDrawerOpen&&(r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",!0),Er()))},window.addEventListener("resize",r.resizeHandler),window.visualViewport&&(r.visualViewportHandler=function(){Wt(!0)},window.visualViewport.addEventListener("resize",r.visualViewportHandler)),r.visibilityHandler=function(){document.hidden||at("visibility",{forceReplay:!0})},document.addEventListener("visibilitychange",r.visibilityHandler),r.orientationHandler=function(){at("orientation",{forceReplay:!0})},window.addEventListener("orientationchange",r.orientationHandler),requestAnimationFrame(function(){Wt(!0)})}}function wv(){r.terminalHealthTimer||(r.terminalHealthTimer=setInterval(function(){if(!(!r.terminal||r.currentView!=="terminal"||document.hidden)){var e=r.sessions.find(function(s){return s.id===r.selectedId});if(!(!e||e.sessionKind==="structured")){at("health");var t=Date.now(),n=r.lastChunkAt>0&&t-r.lastChunkAt>300,i=t-r.lastTerminalResyncAt>3e4,a=r.lastChunkAt>r.lastTerminalResyncAt;i&&a&&(n||e.status!=="running")&&r.terminalOutput&&An()}}},5e3))}function kv(){r.terminalHealthTimer&&(clearInterval(r.terminalHealthTimer),r.terminalHealthTimer=null)}function Dr(){kv(),r.resizeTimer&&(clearTimeout(r.resizeTimer),r.resizeTimer=null),r.resizeObserver&&(r.resizeObserver.disconnect(),r.resizeObserver=null),r.resizeHandler&&(window.removeEventListener("resize",r.resizeHandler),r.resizeHandler=null),r.visualViewportHandler&&window.visualViewport&&(window.visualViewport.removeEventListener("resize",r.visualViewportHandler),r.visualViewportHandler=null),r.visibilityHandler&&(document.removeEventListener("visibilitychange",r.visibilityHandler),r.visibilityHandler=null),r.orientationHandler&&(window.removeEventListener("orientationchange",r.orientationHandler),r.orientationHandler=null),[["mousemove","resizeMouseMove"],["mouseup","resizeMouseUp"],["touchmove","resizeTouchMove"],["touchend","resizeTouchEnd"]].forEach(function(a){r[a[1]]&&(document.removeEventListener(a[0],r[a[1]]),r[a[1]]=null)}),Vn();var e=document.getElementById("output");if(r.terminalViewportEl&&(r.terminalViewportScrollHandler&&r.terminalViewportEl.removeEventListener("scroll",r.terminalViewportScrollHandler),r.terminalViewportTouchHandler&&r.terminalViewportEl.removeEventListener("touchmove",r.terminalViewportTouchHandler),r.terminalViewportTouchStartHandler&&r.terminalViewportEl.removeEventListener("touchstart",r.terminalViewportTouchStartHandler)),e&&(r.terminalWheelHandler&&e.removeEventListener("wheel",r.terminalWheelHandler),r.terminalClickHandler&&e.removeEventListener("click",r.terminalClickHandler)),r.terminalViewportEl=null,r.terminalViewportScrollHandler=null,r.terminalViewportTouchHandler=null,r.terminalViewportTouchStartHandler=null,r.terminalWheelHandler=null,r.terminalClickHandler=null,r.terminalScrollbarHideTimer&&(clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=null),r.terminalScrollbarEl&&r.terminalScrollbarEl.parentNode&&r.terminalScrollbarEl.parentNode.removeChild(r.terminalScrollbarEl),r.terminalScrollbarEl=null,r.terminalScrollbarThumbEl=null,r.terminalScrollbarDragging=!1,r.terminalScrollbarRafPending=!1,r.terminal&&(r.terminal.destroy(),r.terminal=null),e)for(var t=e.querySelectorAll(".terminal-scroll-wrap"),n=0;n<t.length;n++){var i=t[n];i.parentNode===e&&e.removeChild(i)}oa(),r.syncOutputBuffer=null,r.syncOutputDeadline=0,r.syncFramingResidue=!1,r.terminalSessionId=null,r.terminalOutput="",r.terminalOutputMarker=0,r.terminalAutoFollow=!0,r.showTerminalJumpToBottom=!1,lt(),r.softResyncTimer&&(clearTimeout(r.softResyncTimer),r.softResyncTimer=null),Qt&&(clearTimeout(Qt),Qt=null),ai=0,ri=0,kr=0,la=0,ii=!1,r.lastResize={cols:0,rows:0},bv()}function xi(e,t){if(r.selectedId){var n=r.sessions.find(function(a){return a.id===r.selectedId});if(!(!n||n.status!=="running")&&!ae(n)){e>256&&(e=256),t>160&&(t=160);var i={cols:e,rows:t};(r.lastResize.cols!==i.cols||r.lastResize.rows!==i.rows)&&(r.lastResize=i,fetch("/api/sessions/"+r.selectedId+"/resize",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(i)}).catch(function(){}))}}}function at(e,t){if(!r.terminal)return!1;var n=t||{},i=n.forceReplay===!0,a=document.getElementById("output");if(!a||a.offsetWidth===0||a.offsetHeight===0)return jr(e||"fit-retry",{forceReplay:i}),!1;var s=r.terminalAutoFollow||ia(),o=r.terminal.cols,l=r.terminal.rows;return requestAnimationFrame(function(){requestAnimationFrame(function(){if(r.terminal){typeof r.terminal.remeasure=="function"&&r.terminal.remeasure(),xi(r.terminal.cols,r.terminal.rows);var d=r.terminal.cols!==o||r.terminal.rows!==l;!d&&i&&r.terminalOutput&&An({skipFit:!0}),s&>("force")}})}),!0}function jr(e,t){if(!r.terminal)return;var n=t||{},i=n.forceReplay!==!1,a=0,s=8;function o(){if(r.terminal){var l=document.getElementById("output");if(l&&l.offsetHeight,l&&l.offsetWidth>0&&l.offsetHeight>0){at(e,{forceReplay:i});return}++a>=s||(a<=4?requestAnimationFrame(o):setTimeout(o,32))}}o()}function Wt(e){r.resizeTimer&&(clearTimeout(r.resizeTimer),r.resizeTimer=null);var t=e?0:100;r.resizeTimer=setTimeout(function(){r.resizeTimer=null,requestAnimationFrame(xv)},t)}function xv(){if(r.terminal){var e=r.terminalAutoFollow||ia();e&>("force"),xi(r.terminal.cols,r.terminal.rows)}}function Ml(){_l(),!Si()&&(r.pollTimer=setInterval(Ht,1600))}setInterval(function(){var e=document.querySelectorAll(".session-time");e.length>0&&Io()},3e4);function Wa(){r.wsReconnectTimer&&(clearTimeout(r.wsReconnectTimer),r.wsReconnectTimer=null)}var Sv=1e4,Ev=4e4;function Iv(){Al(),r.wsHeartbeatCheckTimer=setInterval(ql,Sv)}function Al(){r.wsHeartbeatCheckTimer&&(clearInterval(r.wsHeartbeatCheckTimer),r.wsHeartbeatCheckTimer=null)}function ql(){if(!(!r.ws||r.ws.readyState!==WebSocket.OPEN)&&r.lastWsMessageAt){var e=Date.now()-r.lastWsMessageAt;e>Ev&&za("heartbeat-stale-"+Math.round(e/1e3)+"s")}}function za(e){if(Wa(),r.ws){var t=r.ws;try{t.onclose=null}catch{}try{t.onerror=null}catch{}try{t.onmessage=null}catch{}try{t.close()}catch{}r.ws=null}r.wsConnected=!1,r.wsReconnectAttempts=0,Si(e)}function Ol(){if(!r.wsReconnectTimer&&!document.hidden){var e=r.wsReconnectAttempts||0,t=[500,1e3,2e3,4e3,8e3],n=t[e<t.length?e:t.length-1];r.wsReconnectAttempts=e+1,r.wsReconnectTimer=setTimeout(function(){r.wsReconnectTimer=null,r.config&&!r.ws&&!document.hidden&&Si("backoff")},n)}}function Si(e){if(!window.WebSocket)return!1;if(r.ws){try{r.ws.close()}catch{}r.ws=null}var t=window.location.protocol==="https:"?"wss:":"ws:",n=t+"//"+window.location.host+"/ws";try{var i=new WebSocket(n);return i.onopen=function(){r.ws=i,r.wsConnected=!0,r.lastWsMessageAt=Date.now(),r.wsReconnectAttempts=0,Wa(),r.lastSeqBySession={},Iv(),qn(r.selectedId),_p(),jr("ws-reconnect")},i.onmessage=function(a){r.lastWsMessageAt=Date.now();try{var s=JSON.parse(a.data);if(s&&s.type==="ping"){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"pong",t:s.t}))}catch{}return}if(s&&s.type==="resync_required"&&s.sessionId){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"resync",sessionId:s.sessionId}))}catch{}r.lastSeqBySession||(r.lastSeqBySession={}),r.lastSeqBySession[s.sessionId]=0;return}if(s&&(s.type==="init"||s.type==="output")&&s.sessionId&&typeof s.seq=="number"){r.lastSeqBySession||(r.lastSeqBySession={});var o=r.lastSeqBySession[s.sessionId]||0;if(s.type==="init")r.lastSeqBySession[s.sessionId]=s.seq;else if(s.seq===o+1)r.lastSeqBySession[s.sessionId]=s.seq;else if(s.seq>o+1&&o>0){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"resync",sessionId:s.sessionId}))}catch{}r.lastSeqBySession[s.sessionId]=0;return}else{if(s.seq<o)return;r.lastSeqBySession[s.sessionId]=s.seq}}Cv(s)}catch{}},i.onclose=function(){r.ws=null,r.wsConnected=!1,Al(),Ol()},i.onerror=function(){i.close()},!0}catch{return Ol(),!1}}function Cv(e){switch(e.type){case"output":if(e.data&&e.sessionId&&Object.prototype.hasOwnProperty.call(e.data,"isResponding")&&(r._lastIsResponding||(r._lastIsResponding={}),r._lastIsResponding[e.sessionId]=!!e.data.isResponding),e.data&&e.sessionId){var t=!!e.data.incremental,n={id:e.sessionId};if(!t&&e.data.output!==void 0&&(n.output=e.data.output),Object.prototype.hasOwnProperty.call(e.data,"permissionBlocked")&&(n.permissionBlocked=!!e.data.permissionBlocked),Object.prototype.hasOwnProperty.call(e.data,"queuedMessages")&&(n.queuedMessages=e.data.queuedMessages||[],r.queueEpoch++),e.data.structuredState&&(n.structuredState=e.data.structuredState),e.data.sessionKind&&(n.sessionKind=e.data.sessionKind),e.data.messages)n.messages=e.data.messages;else if(t&&e.data.lastMessage){var i=r.sessions.find(function(U){return U.id===e.sessionId});if(i){var a=Array.isArray(i.messages)?i.messages.slice():[],s=e.data.messageCount||0,o=a.length>0?a[a.length-1]:null,l=e.data.lastMessage;o&&l.role&&o.role===l.role?a[a.length-1]=ap(o,l):a.length<s&&a.push(l),n.messages=a}}var d=t&&e.data.chunk&&!e.data.lastMessage&&!n.messages&&n.output===void 0&&!e.data.structuredState&&!e.data.sessionKind;if(d){if(e.data.permissionBlocked!==void 0){var c=r.sessions.find(function(U){return U.id===e.sessionId});c&&!!c.permissionBlocked!=!!e.data.permissionBlocked&&($(n),e.sessionId===r.selectedId&&Xt())}}else if((n.output!==void 0||n.messages||t||e.data.permissionBlocked!==void 0)&&($(n),e.sessionId===r.selectedId)){var u=r.sessions.find(function(U){return U.id===e.sessionId})||n;r.currentMessages=Qe(u,dt(u,u.output,!1)),Xt(),u.sessionKind==="structured"||e.data.sessionKind==="structured"?He():Nr()}}e.sessionId===r.selectedId&&r.terminal&&e.data&&(e.data.chunk&&gp(e.sessionId)?(r.lastChunkAt=Date.now(),r.terminalLiveStreamSessions[e.sessionId]=!0,Kn(r.terminal,e.data.chunk),r.terminalSessionId=e.sessionId,e.data.output?(r.terminalOutput=io(es(e.data.output)),r.terminalOutputMarker=0):r.terminalOutput=io((r.terminalOutput||"")+es(e.data.chunk)),gt("output"),lt()):!e.data.incremental&&Object.prototype.hasOwnProperty.call(e.data,"output")&&si(e.sessionId,e.data.output||"",{mode:"append"}));break;case"started":dn();break;case"ended":{var f=e.data&&e.data.status?e.data.status:"exited",v=e.data&&Object.prototype.hasOwnProperty.call(e.data,"permissionBlocked")?!!e.data.permissionBlocked:!1,m={id:e.sessionId,status:f,permissionBlocked:v};e.data&&e.data.messages&&(m.messages=e.data.messages),e.data&&e.data.structuredState&&(m.structuredState=e.data.structuredState),e.data&&e.data.queuedMessages&&(m.queuedMessages=e.data.queuedMessages),$(m),e.sessionId===r.selectedId&&(tr("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C"),Nr(!0));var y=r.sessions.find(function(U){return U.id===e.sessionId}),g=e.data&&e.data.exitCode,b=g!=null&&g!==0,w=y&&y.summary||"",k=y?Jc(y):"",E=b?"\u4EFB\u52A1\u5F02\u5E38\u7ED3\u675F":"\u4EFB\u52A1\u5DF2\u5B8C\u6210",L="";w?(L=w,k&&!b&&(L+=`
|
|
28
|
-
`+k)):L=y&&y.command||e.sessionId,
|
|
26
|
+
`}function jo(e){if(!r.terminalInteractive||!e)return!1;var t=e.value||"";return t?(bt(t,"interactive_text").catch(function(){}),e.value="",Rt(e),it("",!0),!0):!1}function Of(e){var t=e.clipboardData&&e.clipboardData.items;if(t&&!r.terminalInteractive){for(var n=0;n<t.length;n++)if(t[n].type.indexOf("image/")===0){e.preventDefault();var i=t[n].getAsFile();i&&ya(i);return}}var a=e.clipboardData&&e.clipboardData.getData("text");if(a){if(e.preventDefault(),r.terminalInteractive){bt(a,"paste").catch(function(){});return}var s=document.getElementById("input-box");if(s){var o=s.selectionStart||0,l=s.selectionEnd||0,c=s.value,d=c.slice(0,o)+a+c.slice(l);s.value=d,it(d)}}}function Fm(e){bt(e),it(Pf()+e)}function Pf(){if(r.selectedId){if(r.drafts[r.selectedId]!==void 0)return r.drafts[r.selectedId];try{var e=localStorage.getItem("wand-draft-"+r.selectedId);if(e)return e}catch{}}return""}function it(e,t){if(r.selectedId){r.drafts[r.selectedId]=e;try{localStorage.setItem("wand-draft-"+r.selectedId,e)}catch{}if(!t){var n=document.getElementById("input-box");n&&(n.value=e)}}}var ka=!1;function Hf(){if(!ka){var e=document.getElementById("input-box"),t=document.getElementById("prompt-optimize-btn"),n=document.querySelector(".input-composer");if(e){var i=(e.value||"").trim();if(!i){typeof T=="function"&&T("\u8BF7\u5148\u8F93\u5165\u8981\u4F18\u5316\u7684\u5185\u5BB9\u3002","info"),e.focus();return}ka=!0,t&&(t.classList.add("is-loading"),t.disabled=!0,t.setAttribute("title","\u6B63\u5728\u4F18\u5316\u2026")),n&&n.classList.add("is-optimizing"),e.setAttribute("aria-busy","true");var a=e.readOnly;e.readOnly=!0;var s={text:i};r&&r.selectedId&&(s.sessionId=r.selectedId),fetch("/api/optimize-prompt",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}).then(function(o){return o.json().then(function(l){return{ok:o.ok,data:l}})}).then(function(o){if(!o.ok)throw new Error(o.data&&o.data.error||"\u63D0\u793A\u8BCD\u4F18\u5316\u5931\u8D25\u3002");var l=o.data&&o.data.optimized||"";if(!l)throw new Error("Claude \u8FD4\u56DE\u4E3A\u7A7A\u3002");_f(e,l)}).catch(function(o){typeof T=="function"&&T(o&&o.message||"\u63D0\u793A\u8BCD\u4F18\u5316\u5931\u8D25\u3002","error"),t&&(t.classList.remove("is-loading"),t.classList.add("is-shake"),setTimeout(function(){t&&t.classList.remove("is-shake")},400))}).finally(function(){ka=!1,t&&(t.classList.remove("is-loading"),t.disabled=!1,t.setAttribute("title","\u63D0\u793A\u8BCD\u4F18\u5316\uFF08AI\uFF09")),n&&n.classList.remove("is-optimizing"),e.removeAttribute("aria-busy"),e.readOnly=a})}}}function _f(e,t){if(!e)return;var n=Array.from(t),i=n.length;if(i===0){e.value="",it("",!0),Rt(e);return}var a=Math.min(700,Math.max(220,i*8)),s=Math.min(i,60),o=Math.ceil(i/s),l=a/s,c=0;e.value="",Rt(e);function d(){if(c=Math.min(i,c+o),e.value=n.slice(0,c).join(""),Rt(e),c<i)setTimeout(d,l);else{it(t,!0);try{e.setSelectionRange(t.length,t.length)}catch{}}}d()}function fi(e){var t=document.querySelector(".input-composer");if(t){var n=e||document.getElementById("input-box"),i=!!(n&&n.value&&n.value.length>0);t.classList.toggle("has-text",i)}}var he={recording:!1,canceling:!1,transcript:"",startY:0,mockTimer:null},Df=60,No=["\u5E2E\u6211\u628A","\u5E2E\u6211\u628A\u9996\u9875\u7684","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE\u6539\u6210\u5706\u89D2\uFF0C","\u5E2E\u6211\u628A\u9996\u9875\u7684\u767B\u5F55\u6309\u94AE\u6539\u6210\u5706\u89D2\uFF0C\u5E76\u52A0\u4E00\u70B9\u9634\u5F71"];function jf(){var e=0;he.mockTimer=setInterval(function(){e>=No.length||(Ro(No[e]),e++)},420)}function xa(){he.mockTimer&&(clearInterval(he.mockTimer),he.mockTimer=null)}function Ro(e){he.transcript=e||"";var t=document.getElementById("voice-transcript-text");t&&(t.textContent=he.transcript);var n=document.getElementById("voice-transcript-bubble");n&&n.classList.toggle("has-text",!!he.transcript)}function Nf(e){if(e){e.preventDefault(),he.startY=typeof e.clientY=="number"?e.clientY:0;try{e.pointerId!==void 0&&e.target&&e.target.setPointerCapture&&e.target.setPointerCapture(e.pointerId)}catch{}}he.recording=!0,he.canceling=!1,he.transcript="";var t=document.getElementById("voice-record-btn");if(t){t.classList.add("is-recording");var n=t.querySelector(".voice-record-label");n&&(n.textContent="\u677E\u5F00 \u53D1\u9001")}var i=document.getElementById("voice-transcript-bubble");i&&i.classList.remove("hidden","is-canceling","has-text"),Ro("");var a=document.getElementById("voice-transcript-status");a&&(a.textContent="\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88"),jf()}function Rf(e){if(!(!he.recording||!e)){var t=he.startY-(typeof e.clientY=="number"?e.clientY:he.startY),n=t>Df;if(n!==he.canceling){he.canceling=n;var i=document.getElementById("voice-transcript-bubble");i&&i.classList.toggle("is-canceling",n);var a=document.getElementById("voice-record-btn"),s=a&&a.querySelector(".voice-record-label");s&&(s.textContent=n?"\u677E\u5F00 \u53D6\u6D88":"\u677E\u5F00 \u53D1\u9001");var o=document.getElementById("voice-transcript-status");o&&(o.textContent=n?"\u677E\u5F00\u624B\u6307 \u53D6\u6D88":"\u6B63\u5728\u8046\u542C\u2026\u4E0A\u6ED1\u53D6\u6D88")}}}function Fo(e){if(he.recording){e&&e.preventDefault(),he.recording=!1,xa();var t=!he.canceling&&!!he.transcript.trim(),n=he.transcript;Sa(),t&&(Ff(n),Ea(!1))}}function Sa(){he.canceling=!1;var e=document.getElementById("voice-record-btn");if(e){e.classList.remove("is-recording");var t=e.querySelector(".voice-record-label");t&&(t.textContent="\u6309\u4F4F \u8BF4\u8BDD")}var n=document.getElementById("voice-transcript-bubble");n&&n.classList.add("hidden")}function Ff(e){var t=(e||"").trim();if(t){var n=document.getElementById("input-box");if(n){var i=n.value||"",a=i?i.replace(/\s+$/,"")+" "+t:t;n.value=a,it(a,!0),Rt(n);try{n.setSelectionRange(a.length,a.length)}catch{}}}}function Ea(e){var t=document.querySelector(".input-composer");if(t){var n=typeof e=="boolean"?e:!t.classList.contains("voice-mode");if(t.classList.toggle("voice-mode",n),!n){he.recording=!1,xa(),Sa();var i=document.getElementById("input-box");if(i&&!r.terminalInteractive)try{i.focus({preventScroll:!0})}catch{}}}}function Rt(e){if(e){var t=36,n=120,i=yi();if(!e.value||e.value.trim()===""){e.style.height=t+"px",e.style.minHeight=t+"px",e.style.overflowY=i?"auto":"hidden",e.scrollTop=0,fi(e);return}var a=e.style.overflowY;e.style.overflowY="hidden",e.style.height=t+"px";var s=e.scrollHeight,o=Math.max(t,Math.min(s,n)),l=s>n;e.style.height=o+"px",e.style.minHeight=t+"px",e.style.overflowY=l||i?"auto":"hidden",l?Da(e):e.scrollTop=0,fi(e)}}function Wf(){if(!r.selectedId)return!1;var e=r.sessions.find(function(t){return t.id===r.selectedId});return se(e)?!!(e.structuredState&&e.structuredState.inFlight):!!e&&e.status==="running"}var Br=!1;function Ia(){return r.sessions.some(function(e){return se(e)?!!(e.structuredState&&e.structuredState.inFlight)&&!e.archived:e.status==="running"&&!e.archived})}function Wo(e){if(r.crossSessionQueue.length>=10){T("\u6392\u961F\u6D88\u606F\u5DF2\u6EE1\uFF08\u6700\u591A 10 \u6761\uFF09\uFF0C\u8BF7\u7B49\u5F85\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u3002","warning");return}var t="csq-"+Date.now()+"-"+Math.random().toString(36).slice(2,8);r.crossSessionQueue.push({id:t,text:e,cwd:Ge(),mode:r.chatMode||"managed",tool:ht(),queuedAt:Date.now()}),Kt(),Lt()}function zf(e){Br||(Br=!0,fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:e.tool,cwd:e.cwd,mode:e.mode,initialInput:e.text}))}).then(function(t){return t.json()}).then(function(t){return Br=!1,t.error?(T(t.error,"error"),r.crossSessionQueue.unshift(e),Kt(),Lt(),null):hn(t)}).catch(function(t){Br=!1,T(t&&t.message||"\u65E0\u6CD5\u542F\u52A8\u6392\u961F\u4F1A\u8BDD\u3002","error"),r.crossSessionQueue.unshift(e),Kt(),Lt()}))}function Uf(e){var t=r.crossSessionQueue.findIndex(function(i){return i.id===e});if(!(t<0)){var n=r.crossSessionQueue.splice(t,1)[0];Kt(),Lt(),fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:n.tool,cwd:n.cwd,mode:n.mode,initialInput:n.text}))}).then(function(i){return i.json()}).then(function(i){return i.error?(T(i.error,"error"),r.crossSessionQueue.splice(t,0,n),Kt(),Lt(),null):hn(i)}).catch(function(i){T(i&&i.message||"\u65E0\u6CD5\u542F\u52A8\u6392\u961F\u4F1A\u8BDD\u3002","error"),r.crossSessionQueue.splice(t,0,n),Kt(),Lt()})}}function Vf(e){var t=r.crossSessionQueue.findIndex(function(n){return n.id===e});t<0||(r.crossSessionQueue.splice(t,1),Kt(),Lt(),r.crossSessionQueue.length===0&&T("\u6392\u961F\u5DF2\u6E05\u7A7A\u3002","info"))}function pi(){if(r.crossSessionQueue.length!==0&&!Ia()&&!Br){var e=r.crossSessionQueue.shift();Lt(),zf(e)}}function zo(e){var t=Math.floor((Date.now()-e)/1e3);if(t<60)return t+"s";var n=Math.floor(t/60);return n<60?n+"m":Math.floor(n/60)+"h"}function Lt(){var e=document.querySelector(".cross-session-queue"),t=document.querySelector(".input-panel"),n=document.querySelector(".structured-status-bar"),i=document.querySelector(".input-composer"),a=document.getElementById("blank-chat");if(r.crossSessionQueue.length===0){e&&e.remove(),Kt();return}var s=t&&!t.classList.contains("hidden"),o=s?t:a,l=s?n||i:null;if(o){e&&e.parentNode!==o&&(e.remove(),e=null),e?s&&l&&e.nextSibling!==l&&o.insertBefore(e,l):(e=document.createElement("div"),e.className="cross-session-queue",l?o.insertBefore(e,l):o.appendChild(e));var c=r.crossSessionQueue.length,d=r.crossSessionQueue.map(function(f,v){var m=f.text.length>60?f.text.slice(0,60)+"\u2026":f.text,y=zo(f.queuedAt);return'<div class="queue-item" data-queue-id="'+p(f.id)+'"><span class="queue-item-dot"></span><span class="queue-item-text" title="'+p(f.text)+'">'+p(m)+'</span><span class="queue-item-age">'+y+'</span><button class="queue-item-send-now" data-queue-id="'+p(f.id)+'" title="\u7ACB\u5373\u53D1\u9001" type="button">\u53D1\u9001</button><button class="queue-item-cancel" data-queue-id="'+p(f.id)+'" title="\u53D6\u6D88" type="button">\xD7</button></div>'}).join(""),u=c>1?'<div class="queue-header"><span class="queue-header-label">\u6392\u961F '+c+' \u6761</span><button class="queue-header-clear" id="queue-clear-all" type="button" title="\u6E05\u7A7A\u6392\u961F">\u6E05\u7A7A</button></div>':"";e.innerHTML=u+d}}setInterval(function(){if(r.crossSessionQueue.length>0){var e=document.querySelectorAll(".queue-item-age");r.crossSessionQueue.forEach(function(t,n){e[n]&&(e[n].textContent=zo(t.queuedAt))}),pi()}},5e3),document.addEventListener("click",function(e){if(e.target.closest("#queue-clear-all")){e.preventDefault(),r.crossSessionQueue=[],Kt(),Lt(),T("\u6392\u961F\u5DF2\u6E05\u7A7A\u3002","info");return}var t=e.target.closest(".queue-item-send-now");if(t){e.preventDefault(),Uf(t.dataset.queueId);return}var n=e.target.closest(".queue-item-cancel");if(n){e.preventDefault(),Vf(n.dataset.queueId);return}});function Uo(){var e=document.getElementById("welcome-input"),t=e?e.value.trim():"";if(t){if(Ia()){e.value="",Wo(t),T("\u5DF2\u6392\u961F\uFF0C\u5C06\u5728\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u540E\u81EA\u52A8\u53D1\u9001\u3002","info");return}var n=document.getElementById("todo-progress");n&&n.classList.add("hidden"),e.value="",e.placeholder="\u6B63\u5728\u542F\u52A8\u2026",e.disabled=!0;var i=r.chatMode||"managed",a=Ge(),s=ht();fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:s,provider:s,cwd:a,mode:i,initialInput:t}))}).then(function(o){return o.json()}).then(function(o){if(o.error){T(o.error,"error"),e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1;return}r.selectedId=o.id,be(),r.drafts[o.id]="",It(),$(o),ve(),Mr(o.id),qn(o.id),dn(o.id).then(function(){e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1,Ft(!0)})}).catch(function(o){T(o&&o.message||(s==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\u3002"),"error"),e.placeholder="\u8F93\u5165\u6D88\u606F",e.disabled=!1})}}function Kf(e){e=e||{};var t=document.getElementById("welcome-input"),n=document.getElementById("input-box"),i=t&&t.value.trim()?t.value.trim():n?n.value.trim():"";if(r.selectedId){i&&Vo(e);return}if(i&&Ia()){n&&(n.value=""),t&&(t.value=""),fi(n),Wo(i),T("\u5DF2\u6392\u961F\uFF0C\u5C06\u5728\u5F53\u524D\u4F1A\u8BDD\u5B8C\u6210\u540E\u81EA\u52A8\u53D1\u9001\u3002","info");return}var a=r.chatMode||"managed",s=Ge(),o=ht();fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:o,provider:o,cwd:s,mode:a,initialInput:i||void 0}))}).then(function(l){return l.json()}).then(function(l){return l.error?(T(l.error,"error"),null):(r.selectedId=l.id,be(),r.drafts[l.id]="",It(),n&&(n.value=""),t&&(t.value=""),$(l),ve(),Mr(l.id),qn(l.id),dn(l.id))}).catch(function(l){T(l&&l.message||(o==="codex"?"\u65E0\u6CD5\u542F\u52A8 Codex \u4F1A\u8BDD\u3002":"\u65E0\u6CD5\u542F\u52A8 Claude \u4F1A\u8BDD\u3002"),"error")})}function Mr(e){var t=r.sessions.find(function(v){return v.id===e}),n=document.getElementById("blank-chat"),i=document.getElementById("output"),a=document.getElementById("chat-output"),s=document.getElementById("stop-button"),o=document.getElementById("terminal-title"),l=document.getElementById("terminal-info"),c=document.querySelector(".session-summary-value"),d=se(t);n&&n.classList.add("hidden"),i&&i.classList.toggle("hidden",d),a&&a.classList.remove("hidden"),d?r.currentView="chat":r.currentView="terminal";var u=t?Ti(t.command):"Wand",f=t?yr(t):"\u5F00\u59CB\u5BF9\u8BDD";o&&(o.textContent=u),l&&(l.textContent=f),c&&(c.textContent=u),d||r.terminal||Jn(),ci(),Ft(!0),d||at("view-switch",{forceReplay:!0})}function Vo(e){e=e||{};var t=!!e.interrupt;if(r.terminalInteractive)return T("\u7EC8\u7AEF\u4EA4\u4E92\u6A21\u5F0F\u5F00\u542F\u65F6\uFF0C\u8BF7\u76F4\u63A5\u5728\u7EC8\u7AEF\u4E2D\u8F93\u5165\u3002","info"),Promise.resolve();var n=document.getElementById("input-box"),i=n?n.value:"",a=ye(),s=r.pendingAttachments.length>0;if(i||s){var o=s&&r.selectedId?Af(r.selectedId):Promise.resolve([]);return o.then(function(l){var c=qf(l),d=c+(i||(l.length?"\u8BF7\u67E5\u770B\u9644\u4EF6\u3002":""));l.length&&Mf();var u=document.getElementById("todo-progress");if(u&&u.classList.add("hidden"),se(a))return Jf(d,n,a,{interrupt:t});var f=lp(a,d),v=!r.wsConnected;return v?(fp(f),n&&(n.value="",Rt(n)),it(""),Promise.resolve()):op(a).then(function(m){if(!m)return null;var y=r.currentView;if(m&&m.provider==="codex"&&r.selectedId!==m.id)throw new Error("Codex session changed before input send.");return cp(f,"enter_text",30,y).then(function(){n&&n.value===i&&(n.value="",Rt(n)),it("")})}).catch(function(m){throw T(ap(m),"error"),m})}).catch(function(l){throw T("\u9644\u4EF6\u4E0A\u4F20\u5931\u8D25: "+(l.message||l),"error"),l})}return Promise.resolve()}var Ko={},Jo=350;function Jf(e,t,n,i){i=i||{};var a=!!i.interrupt;if(!r.selectedId||!e)return Promise.resolve();if(!n)return T("\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve();var s=Date.now(),o=Ko[n.id]||0;if(s-o<Jo)return console.log("[wand] postStructuredInput: duplicate submit (within "+Jo+"ms) ignored for session",n.id),Promise.resolve();Ko[n.id]=s;var l=!!(n.structuredState&&n.structuredState.inFlight&&n.status==="running"),c=l&&a,d=l&&!a,u=vr(Array.isArray(n.messages)?n.messages.slice():[]),f;if(d){var v=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];v.push(e),f={id:n.id,queuedMessages:v},$(f);var m=r.sessions.find(function(k){return k.id===n.id})||n;r.currentMessages=Qe(m,ct(m,m.output,!1)),er("\u5DF2\u52A0\u5165\u6392\u961F\u2026"),He(!0),mn(),T(v.length>1?"\u5DF2\u52A0\u5165\u6392\u961F\uFF08\u5171 "+v.length+" \u6761\u7B49\u5F85\uFF09":"\u5DF2\u52A0\u5165\u6392\u961F\uFF0C\u7B49\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u4F1A\u81EA\u52A8\u53D1\u9001\u3002","info")}else{var y={role:"user",content:[{type:"text",text:e}]};u.push(y);var g=Object.assign({},n.structuredState||{},{inFlight:!0});$({id:n.id,status:"running",messages:u,structuredState:g}),r.currentMessages=Qe(Object.assign({},n,{status:"running",messages:u,structuredState:g}),u),er(c?"\u5DF2\u4E2D\u65AD\uFF0C\u6B63\u5728\u5904\u7406\u65B0\u6D88\u606F\u2026":"\u601D\u8003\u4E2D\u2026"),He(!0),c&&T("\u5DF2\u4E2D\u65AD\u4E0A\u4E00\u6761\u56DE\u590D\uFF0C\u6B63\u5728\u5904\u7406\u65B0\u6D88\u606F\u2026","info")}t&&(t.value="",Rt(t)),it("");var b=r.queueEpoch,w=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10);return fetch("/api/structured-sessions/"+n.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,interrupt:c||void 0,idempotencyKey:w})}).then(function(k){return k.ok?k.json():k.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(E){var L=new Error(E&&E.error||"\u65E0\u6CD5\u53D1\u9001\u7ED3\u6784\u5316\u6D88\u606F\u3002");throw L.errorCode=E&&E.errorCode,L.httpStatus=k.status,L})}).then(function(k){if(k&&k.error)throw new Error(k.error);if(k&&k.id&&(r.queueEpoch>b&&k.queuedMessages&&delete k.queuedMessages,$(k),k.id===r.selectedId)){var E=r.sessions.find(function(L){return L.id===k.id})||k;r.currentMessages=Qe(E,ct(E,k.output,!1)),He(!0),mn()}}).catch(function(k){if(k&&k.errorCode==="duplicate_idempotency_key"){T(k.message||"\u68C0\u6D4B\u5230\u91CD\u590D\u53D1\u9001\uFF0C\u5DF2\u62E6\u622A\u3002","warning"),er("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C");return}if(d){var E=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];if($({id:n.id,queuedMessages:E}),n.id===r.selectedId){var L=r.sessions.find(function(W){return W.id===n.id})||n;r.currentMessages=Qe(L,ct(L,L.output,!1)),He(!0),mn()}}else{var S=u.slice(0,-1);$({id:n.id,status:n.status,messages:S,structuredState:Object.assign({},n.structuredState||{},{inFlight:!1})}),n.id===r.selectedId&&(r.currentMessages=Qe(Object.assign({},n,{messages:S,structuredState:Object.assign({},n.structuredState||{},{inFlight:!1})}),S),He(!0))}var M=k&&k.message||"",_=M==="Failed to fetch"||M==="NetworkError when attempting to fetch resource."||M==="Load failed"||/aborted|aborterror|networkerror|failed to fetch/i.test(M);_||T(k&&k.message||"\u65E0\u6CD5\u53D1\u9001\u7ED3\u6784\u5316\u6D88\u606F\u3002","error"),er("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C")})}function er(e){var t=document.querySelector(".input-hint");t&&(t.textContent=e)}function mn(){Bt()}var Yf=10,Yo=24;function Gf(e){if(typeof e!="string")return"";var t=e.replace(/\s+/g," ").trim();return t.length<=Yo?t:t.slice(0,Yo)+"\u2026"}function Go(e){return r.queueBarDrag&&typeof r.queueBarDrag.origIndex=="number"?r.queueBarDrag.origIndex:typeof r.queueBarHoverIndex=="number"&&r.queueBarHoverIndex>=0&&r.queueBarHoverIndex<e?r.queueBarHoverIndex:0}function Qf(e,t,n){var i=e.length<=1,a="queue-bar";n&&(a+=" queue-bar-capacity"),t&&(a+=" queue-bar-inflight");for(var s=Go(e.length),o=t?"\u4E2D\u65AD\u5F53\u524D\u56DE\u590D\uFF0C\u7ACB\u5373\u53D1\u9001\u8FD9\u6761":"\u7ACB\u5373\u53D1\u9001\u8FD9\u6761",l="",c=0;c<e.length;c++){var d=e[c]==null?"":String(e[c]),u=c===s,f="queue-bar-item";u&&(f+=" expanded"),i&&(f+=" queue-bar-item-single");var v=u?d+"\uFF08\u6309\u4F4F\u53EF\u62D6\u52A8\u8C03\u5E8F\uFF09":d;l+='<li class="'+f+'" data-index="'+c+'" data-action="drag" title="'+p(v)+'"><span class="queue-bar-item-index" aria-hidden="true">'+(c+1)+'</span><span class="queue-bar-item-text">'+p(Gf(d))+'</span><button type="button" class="queue-bar-item-promote" data-action="promote-item" title="'+p(o)+'" aria-label="\u7ACB\u5373\u53D1\u9001\u8FD9\u6761" tabindex="'+(u?"0":"-1")+'"><svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M13 2 L4 14 L11 14 L10 22 L20 9 L13 9 Z"/></svg><span class="queue-bar-item-promote-label">\u7ACB\u5373</span></button><button type="button" class="queue-bar-item-delete" data-action="delete" aria-label="\u5220\u9664\u8FD9\u6761\u6392\u961F\u6D88\u606F" title="\u5220\u9664" tabindex="'+(u?"0":"-1")+'"><svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="6" y1="18" x2="18" y2="6"/></svg></button></li>'}return'<div class="'+a+'" data-queue-bar="1"><ol class="queue-bar-list" data-queue-list="1">'+l+"</ol></div>"}function Bt(){var e=document.getElementById("queue-bar-host");if(e){var t=r.sessions.find(function(o){return o.id===r.selectedId}),n=t&&t.sessionKind==="structured",i=n?zi(t):[];if(i=Array.isArray(i)?i:[],!n||i.length===0){e.hidden=!0,e.innerHTML="",r.queueBarHoverIndex=null;return}if(!r.queueBarDrag){e.hidden=!1;var a=!!(t.structuredState&&t.structuredState.inFlight&&t.status==="running"),s=i.length>=Yf;e.innerHTML=Qf(i,a,s)}}}function Qo(){var e=document.getElementById("queue-bar-host");if(!(!e||e.hidden)){var t=e.querySelector('[data-queue-list="1"]');if(t)for(var n=t.children,i=Go(n.length),a=0;a<n.length;a++){var s=n[a],o=a===i;if(s.classList.contains("expanded")!==o){s.classList.toggle("expanded",o);var l=s.querySelector(".queue-bar-item-delete");l&&(l.tabIndex=o?0:-1)}}}}function Ca(e){var t=e==null?null:Number(e);r.queueBarHoverIndex!==t&&(r.queueBarHoverIndex=t,Qo())}function vi(e,t){$({id:e.id,queuedMessages:t});var n=r.sessions.find(function(i){return i.id===e.id})||e;r.currentMessages=Qe(n,ct(n,n.output,!1)),He(!0),Bt()}function $f(e){var t=r.sessions.find(function(o){return o.id===r.selectedId});if(t){var n=Array.isArray(t.queuedMessages)?t.queuedMessages.slice():[];if(!(e<0||e>=n.length)){var i=n.slice(),a=n.slice(0,e).concat(n.slice(e+1));typeof r.queueBarHoverIndex=="number"&&(r.queueBarHoverIndex===e?r.queueBarHoverIndex=null:r.queueBarHoverIndex>e&&(r.queueBarHoverIndex-=1)),$({id:t.id,queuedMessages:a});var s=r.sessions.find(function(o){return o.id===t.id})||t;r.currentMessages=Qe(s,ct(s,s.output,!1)),He(!0),Bt(),fetch("/api/structured-sessions/"+t.id+"/queued/"+e,{method:"DELETE",credentials:"same-origin"}).then(function(o){if(!o.ok)return o.json().catch(function(){return{}}).then(function(l){throw new Error(l&&l.error||"\u5220\u9664\u5931\u8D25")})}).catch(function(o){vi(t,i),T(o&&o.message||"\u5220\u9664\u6392\u961F\u6D88\u606F\u5931\u8D25\u3002","error")})}}}function Wm(){var e=r.sessions.find(function(i){return i.id===r.selectedId});if(e){var t=Array.isArray(e.queuedMessages)?e.queuedMessages.slice():[];if(t.length!==0){r.queueBarHoverIndex=null,$({id:e.id,queuedMessages:[]});var n=r.sessions.find(function(i){return i.id===e.id})||e;r.currentMessages=Qe(n,ct(n,n.output,!1)),He(!0),Bt(),fetch("/api/structured-sessions/"+e.id+"/queued",{method:"DELETE",credentials:"same-origin"}).then(function(i){if(!i.ok)return i.json().catch(function(){return{}}).then(function(a){throw new Error(a&&a.error||"\u6E05\u7A7A\u5931\u8D25")});T("\u5DF2\u6E05\u7A7A "+t.length+" \u6761\u6392\u961F\u6D88\u606F\u3002","info")}).catch(function(i){vi(e,t),T(i&&i.message||"\u6E05\u7A7A\u6392\u961F\u6D88\u606F\u5931\u8D25\u3002","error")})}}}function Xf(e){var t=r.sessions.find(function(d){return d.id===r.selectedId});if(t){var n=Array.isArray(t.queuedMessages)?t.queuedMessages.slice():[];if(!(e<0||e>=n.length)){var i=n[e],a=n.slice(0,e).concat(n.slice(e+1)),s=n.slice(),o=!!(t.structuredState&&t.structuredState.inFlight&&t.status==="running");typeof r.queueBarHoverIndex=="number"&&(r.queueBarHoverIndex===e?r.queueBarHoverIndex=null:r.queueBarHoverIndex>e&&(r.queueBarHoverIndex-=1)),$({id:t.id,queuedMessages:a});var l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10),c={input:i,idempotencyKey:l};o&&(c.interrupt=!0,c.preserveQueue=!0),T(o?"\u5DF2\u8BF7\u6C42\u4E2D\u65AD\u5F53\u524D\u56DE\u590D\uFF0C\u7ACB\u5373\u53D1\u9001\u8FD9\u6761\u3002":"\u5DF2\u7ACB\u5373\u53D1\u9001\u8FD9\u6761\u6D88\u606F\u3002","info"),fetch("/api/structured-sessions/"+t.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(c)}).then(function(d){return d.ok?d.json():d.json().catch(function(){return{}}).then(function(u){throw new Error(u&&u.error||"\u7ACB\u5373\u53D1\u9001\u5931\u8D25")})}).then(function(d){if(d&&d.id&&($(d),d.id===r.selectedId)){var u=r.sessions.find(function(f){return f.id===d.id})||d;r.currentMessages=Qe(u,ct(u,d.output,!1)),He(!0),Bt()}}).catch(function(d){vi(t,s),T(d&&d.message||"\u7ACB\u5373\u53D1\u9001\u5931\u8D25\u3002","error")})}}}function Zf(e,t){var n=r.sessions.find(function(f){return f.id===r.selectedId});if(n){var i=Array.isArray(n.queuedMessages)?n.queuedMessages.slice():[];if(!(i.length<=1)&&t){var a=t.parentElement;if(a){var s=Number(t.getAttribute("data-index")),o=Array.prototype.slice.call(a.children),l=o.map(function(f){return f.getBoundingClientRect()}),c=3;l.length>=2&&(c=Math.max(0,l[1].top-l[0].top-l[0].height)),e.preventDefault();try{t.setPointerCapture(e.pointerId)}catch{}if(navigator&&navigator.vibrate)try{navigator.vibrate(8)}catch{}r.queueBarDrag={pointerId:e.pointerId,handleEl:t,itemEl:t,listEl:a,siblings:o,rects:l,origIndex:s,targetIndex:s,startY:e.clientY,gap:c,queueSnapshot:i},t.classList.add("dragging"),Qo(),o.forEach(function(f){f!==t&&f.classList.add("queue-bar-item-sliding")});var d=function(f){tp(f)},u=function(f){np(f)};r.queueBarDrag.moveHandler=d,r.queueBarDrag.upHandler=u,t.addEventListener("pointermove",d),t.addEventListener("pointerup",u),t.addEventListener("pointercancel",u)}}}}function ep(e,t,n,i){for(var a=n.length,s=[],o=0;o<a;o++)s.push(o);s.splice(e,1),s.splice(t,0,e);for(var l=n[0].top,c=n[0].top,d=1;d<a;d++)n[d].top<c&&(c=n[d].top);for(var u={},f=c,v=0;v<a;v++){var m=s[v];u[m]=f,f+=n[m].height+i}return u}function tp(e){var t=r.queueBarDrag;if(!(!t||e.pointerId!==t.pointerId)){e.preventDefault();var n=e.clientY-t.startY;t.itemEl.style.transform="translateY("+n+"px)";for(var i=t.rects[t.origIndex].top+t.rects[t.origIndex].height/2+n,a=t.origIndex,s=0;s<t.rects.length;s++)if(s!==t.origIndex){var o=t.rects[s].top+t.rects[s].height/2;s<t.origIndex&&i<o?a=Math.min(a,s):s>t.origIndex&&i>o&&(a=Math.max(a,s))}if(a!==t.targetIndex){t.targetIndex=a;var l=ep(t.origIndex,a,t.rects,t.gap);t.siblings.forEach(function(c,d){if(d!==t.origIndex){var u=l[d]-t.rects[d].top;c.style.transform=u?"translateY("+u+"px)":""}})}}}function np(e){var t=r.queueBarDrag;if(!(!t||e&&e.pointerId!==t.pointerId)){try{t.handleEl.releasePointerCapture(t.pointerId)}catch{}t.handleEl.removeEventListener("pointermove",t.moveHandler),t.handleEl.removeEventListener("pointerup",t.upHandler),t.handleEl.removeEventListener("pointercancel",t.upHandler);var n=t.origIndex,i=t.targetIndex,a=t.queueSnapshot;if(t.siblings.forEach(function(d){d.style.transform="",d.classList.remove("queue-bar-item-sliding")}),t.itemEl.classList.remove("dragging"),r.queueBarDrag=null,n===i){Bt();return}for(var s=[],o=0;o<a.length;o++)s.push(o);s.splice(n,1),s.splice(i,0,n);var l=s.map(function(d){return a[d]});r.queueBarHoverIndex=i;var c=r.sessions.find(function(d){return d.id===r.selectedId});if(!c){Bt();return}$({id:c.id,queuedMessages:l}),Bt(),fetch("/api/structured-sessions/"+c.id+"/queued",{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({order:s})}).then(function(d){if(!d.ok)return d.json().catch(function(){return{}}).then(function(u){throw new Error(u&&u.error||"\u6392\u5E8F\u5931\u8D25")})}).catch(function(d){vi(c,a),T(d&&d.message||"\u8C03\u6574\u6392\u961F\u987A\u5E8F\u5931\u8D25\u3002","error")})}}function rp(){var e=document.getElementById("queue-bar-host");!e||e.__queueDelegated||(e.__queueDelegated=!0,e.addEventListener("click",function(t){var n=t.target&&t.target.closest?t.target.closest("[data-action]"):null;if(!(!n||!e.contains(n))){var i=n.getAttribute("data-action");if(i!=="drag"){if(t.preventDefault(),t.stopPropagation(),i==="promote-item"){var a=n.closest(".queue-bar-item");a&&Xf(Number(a.getAttribute("data-index")));return}if(i==="delete"){var s=n.closest(".queue-bar-item");s&&$f(Number(s.getAttribute("data-index")));return}}}}),e.addEventListener("mouseover",function(t){if(!r.queueBarDrag){var n=t.target&&t.target.closest?t.target.closest(".queue-bar-item"):null;!n||!e.contains(n)||Ca(Number(n.getAttribute("data-index")))}}),e.addEventListener("mouseleave",function(){r.queueBarDrag||Ca(null)}),e.addEventListener("pointerdown",function(t){if(!(t.button!==void 0&&t.button!==0)&&!(t.target&&t.target.closest&&t.target.closest('[data-action="delete"], [data-action="promote-item"]'))){var n=t.target&&t.target.closest?t.target.closest(".queue-bar-item"):null;n&&(Ca(Number(n.getAttribute("data-index"))),Zf(t,n))}}))}function $o(e){if(!e||!Array.isArray(e.content))return 0;for(var t=0,n=0;n<e.content.length;n++){var i=e.content[n];if(i){if(typeof i.text=="string"&&(t+=i.text.length),typeof i.thinking=="string"&&(t+=i.thinking.length),typeof i.content=="string")t+=i.content.length;else if(Array.isArray(i.content))for(var a=0;a<i.content.length;a++){var s=i.content[a];s&&typeof s.text=="string"&&(t+=s.text.length)}if(i.input)try{t+=JSON.stringify(i.input).length}catch{}}}return t}function ip(e,t){if(!e)return t;if(!t)return e;var n=$o(e),i=$o(t);return i>=n?t:Object.assign({},e,{usage:t.usage||e.usage})}function Qe(e,t){var n=Array.isArray(t)?vr(t):[],i=Array.isArray(n)?n.slice():[];if(!e||e.sessionKind!=="structured")return i;if(e.structuredState&&e.structuredState.inFlight){var a=i[i.length-1];(!a||a.role!=="assistant")&&i.push({role:"assistant",content:[{type:"text",text:"",__processing:!0}]})}return i}function Xo(){var e=r.sessions.find(function(t){return t.id===r.selectedId});Jr(e),mn()}function ap(e){var t=ye(),n=t&&t.provider==="codex";return e&&(e.errorCode==="SESSION_NOT_RUNNING"||e.errorCode==="SESSION_NO_PTY")?n?"Codex \u4F1A\u8BDD\u5DF2\u7ED3\u675F\uFF1B\u82E5\u5B58\u5728 Codex \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u5728\u4F60\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u81EA\u52A8\u6062\u590D\u3002":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F\uFF1B\u82E5\u5B58\u5728 Claude \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u5728\u4F60\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u81EA\u52A8\u6062\u590D\u3002":e&&e.errorCode==="SESSION_NOT_FOUND"?"\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002":e&&e.message||(n?"Codex \u4F1A\u8BDD\u6682\u4E0D\u53EF\u7528\uFF1B\u82E5\u5B58\u5728 Codex \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u81EA\u52A8\u5C1D\u8BD5\u6062\u590D\u3002":"\u4F1A\u8BDD\u6682\u4E0D\u53EF\u7528\uFF1B\u82E5\u5B58\u5728 Claude \u5386\u53F2\u4F1A\u8BDD\uFF0C\u5C06\u81EA\u52A8\u5C1D\u8BD5\u6062\u590D\u3002")}function Zo(e){var t=new Error(e&&e.error||"\u4F1A\u8BDD\u5DF2\u7ED3\u675F\u3002");return e&&typeof e=="object"&&(t.errorCode=e.errorCode||null,t.sessionId=e.sessionId||r.selectedId||null,t.sessionStatus=Object.prototype.hasOwnProperty.call(e,"sessionStatus")?e.sessionStatus:null),t}function el(e){return e&&(e.errorCode==="SESSION_NOT_RUNNING"||e.errorCode==="SESSION_NO_PTY"||e.errorCode==="SESSION_NOT_FOUND")}function sp(e,t){e&&$({id:e,status:t||"exited"})}function zm(e){if(!e||!Array.isArray(e.messages)||e.messages.length<2)return!1;var t=e.messages.some(function(i){return i&&i.role==="user"&&Array.isArray(i.content)&&i.content.some(function(a){return a&&a.type==="text"&&typeof a.text=="string"&&a.text.trim().length>0})}),n=e.messages.some(function(i){return i&&i.role==="assistant"&&Array.isArray(i.content)&&i.content.some(function(a){return a&&a.type==="text"&&typeof a.text=="string"&&a.text.trim().length>0})});return t&&n}function Ta(e){return!!(e&&!se(e)&&(e.provider==="claude"||e.provider==="codex")&&e.status!=="running"&&e.claudeSessionId)}function op(e,t){if(!e)return T("\u4F1A\u8BDD\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6216\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve(null);if(e.status==="running")return Promise.resolve(e);if(!Ta(e)){var n=e&&e.provider==="codex"?"Codex":"Claude";return T("\u8BE5\u4F1A\u8BDD\u6CA1\u6709\u53EF\u6062\u590D\u7684 "+n+" \u5386\u53F2\u4E0A\u4E0B\u6587\uFF0C\u8BF7\u65B0\u5EFA\u4F1A\u8BDD\u3002","error"),Promise.resolve(null)}return ul(e.id,t).then(function(i){return i?($(i),ve(),qn(i.id),dn(i.id).then(function(){return Ft(!0),i})):null})}function lp(e,t){return[t,"\r"]}function cp(e,t,n,i){var a=Array.isArray(e)?e.filter(function(o){return!!o}):[];if(a.length===0)return Promise.resolve();var s=typeof n=="number"?n:0;return a.reduce(function(o,l,c){return o.then(function(){return c>0&&s>0?new Promise(function(d){setTimeout(d,s)}).then(function(){return bt(l,c===a.length-1?t:void 0,i)}):bt(l,c===a.length-1?t:void 0,i)})},Promise.resolve())}var dp=5e3,up=100;function La(e){e&&(r.pendingMessages.length>=up&&r.pendingMessages.shift(),r.pendingMessages.push({input:e,at:Date.now()}))}function fp(e){var t=Array.isArray(e)?e.filter(function(n){return!!n}):[];t.forEach(function(n){La(n)})}function pp(e){if(!(typeof e!="string"||!e)){var t=e.replace(/\x1b\[200~/g,"").replace(/\x1b\[201~/g,"");/(?:^|\n)\s*\/clear\s*(?:\r|\n|$)/.test(t)&&typeof r<"u"&&r&&(r.terminalOutputMarker=(r.terminalOutput&&r.terminalOutput.length)|0)}}function bt(e,t,n){return!e||!r.selectedId?Promise.resolve():(pp(e),r.messageQueue.push(e),r.inputQueue=r.inputQueue.then(function(){return vp(e,t,n).finally(function(){var i=r.messageQueue.indexOf(e);i>-1&&r.messageQueue.splice(i,1)})}),r.inputQueue)}function vp(e,t,n){if(!r.selectedId)return Promise.resolve();var i=r.selectedId,a=n||r.currentView;return Wf()?r.wsConnected?fetch("/api/sessions/"+i+"/input",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,view:a,shortcutKey:t||void 0})}).then(function(s){return s.ok?s.json():s.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(o){var l=Zo(o);throw l.httpStatus=s.status,console.error("[wand] postInput: request failed",{status:s.status,errorCode:l.errorCode,message:l.message,sessionId:i}),el(l)&&sp(i,l.sessionStatus||"exited"),l})}).then(function(s){return s&&s.id&&($(s),s.id===r.selectedId&&(s.messages&&s.messages.length>0&&(r.currentMessages=s.messages),He(!0))),s}):(La(e),console.log("[wand] postInput: WebSocket disconnected, queued message",{sessionId:r.selectedId,inputLength:e.length}),Promise.resolve()):r.wsConnected?(console.warn("[wand] postInput: session not running, skipping send",{sessionId:r.selectedId}),T("\u4F1A\u8BDD\u672A\u8FD0\u884C\uFF0C\u6B63\u5728\u7B49\u5F85\u81EA\u52A8\u6062\u590D\u540E\u91CD\u8BD5\u3002","info"),Promise.resolve()):(La(e),console.log("[wand] postInput: session not running, queued for reconnect",{sessionId:r.selectedId,inputLength:e.length}),Promise.resolve())}function Um(e){return bt(e)}function ye(){return r.sessions.find(function(e){return e.id===r.selectedId})||null}function Vm(e){return e&&e.provider==="codex"?`
|
|
27
|
+
`:"\r"}function Ba(){return!!r.selectedId&&r.currentView==="terminal"}function mp(e){return!(!r.terminal||!e||e!==r.selectedId||r.terminalSessionId&&r.terminalSessionId!==e)}function tl(e){if(!r.terminalInteractive||!Ba()||e.defaultPrevented||e.isComposing)return!1;var t=e.target;return t?!(t.closest&&t.closest("#mini-keyboard")||xp(t)):!0}var gp={Esc:"escape",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right",Enter:"enter",Tab:"tab",Backspace:"backspace",Home:"home",End:"end",PageUp:"pageup",PageDown:"pagedown",Delete:"delete",Insert:"insert"," ":"space"},hp={space:" ",tab:" ",shift_tab:"\x1B[Z",backspace:"\x7F",home:"\x1B[H",end:"\x1B[F",pageup:"\x1B[5~",pagedown:"\x1B[6~",delete:"\x1B[3~",insert:"\x1B[2~"},nl={" ":0,"[":27,"\\":28,"]":29,"^":30,_:31},bp=400,yp=10,wp=8,mi=54,gn=8,Ma=[{key:"enter",label:"Enter"},{key:"ctrl_c",label:"Ctrl+C"},{key:"escape",label:"Esc"},{key:"shift_tab",label:"Shift+Tab"}],kp=new Set(["mini-keyboard-fab","mini-keyboard-toggle","terminal-interactive-toggle"]);function xp(e){return!!(e&&kp.has(e.id))}var Sp=new Set(["ctrl","alt","shift"]);function rl(e){return Sp.has(e)}function Ep(e){return hp[e]||""}function Ip(e){var t=e.toLowerCase();return t>="a"&&t<="z"?String.fromCharCode(t.charCodeAt(0)-96):Object.prototype.hasOwnProperty.call(nl,t)?String.fromCharCode(nl[t]):""}function Cp(e){return gp[e.key]||e.key}function Tp(e,t){return{ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey&&(t.length===1||t==="tab"),meta:e.metaKey}}function il(e,t){e&&bt(e,t).catch(function(){})}function Lp(){bl()}function Aa(e){r.keyboardPopupOpen=!1,e!==!1&&hi(),Ap()}function Bp(){Ba()&&On(!r.terminalInteractive)}function On(e){var t=!!e&&Ba();r.terminalInteractive!==t&&(r.terminalInteractive=t,t?(qp(),Aa(!1),Lp(),T("\u7EC8\u7AEF\u4EA4\u4E92\u6A21\u5F0F\u5DF2\u5F00\u542F","info")):(Op(),hi()),Ar())}function qa(){var e=r.sessions.find(function(n){return n.id===r.selectedId}),t=!e||e.status!=="running"||r.currentView!=="terminal";if(t&&r.terminalInteractive){On(!1);return}(!e||r.currentView!=="terminal")&&r.keyboardPopupOpen&&(r.keyboardPopupOpen=!1),Ar()}function Ar(){var e=r.sessions.find(function(b){return b.id===r.selectedId}),t=se(e),n=e&&e.provider==="codex",i=t?!!(e&&e.structuredState&&e.structuredState.inFlight):!!e&&e.status==="running",a=document.getElementById("input-box"),s=["terminal-interactive-toggle-top"];s.forEach(function(b){var w=document.getElementById(b);if(w){w.classList.toggle("active",r.terminalInteractive),w.classList.toggle("is-on",r.terminalInteractive),w.classList.toggle("hidden",t||r.currentView!=="terminal"||!e),w.setAttribute("aria-checked",r.terminalInteractive?"true":"false");var k=w.querySelector(".plus-popover-toggle-state");k&&(k.textContent=r.terminalInteractive?"\u5F00":"\u5173")}});var o=document.querySelector(".input-hint");o&&(o.classList.toggle("hidden",t?!0:r.currentView==="terminal"),!t&&e&&(o.textContent=n?"Enter \u53D1\u9001 \xB7 chat \u4E3A\u89E3\u6790\u89C6\u56FE\uFF0Cterminal \u4E3A\u539F\u59CB\u8F93\u51FA":"Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C"));var l=!t&&!i&&Ta(e);a&&(a.placeholder=lo(e,r.terminalInteractive),a.disabled=!t&&!!e&&!i&&!l,a.setAttribute("aria-disabled",a.disabled?"true":"false"),a.readOnly=!1,a.classList.toggle("is-terminal-passthrough",!!r.terminalInteractive));var c=document.querySelector(".input-composer");c&&r.terminalInteractive&&c.classList.contains("voice-mode")&&(c.classList.remove("voice-mode"),he.recording=!1,xa(),Sa());var d=document.getElementById("send-input-button"),u=t&&i;d&&(d.disabled=!t&&!!e&&!i&&!l,d.setAttribute("title",t?u?"\u6392\u961F\u53D1\u9001\uFF08\u5F53\u524D\u56DE\u590D\u7ED3\u675F\u540E\u5904\u7406\uFF09":"\u53D1\u9001":n?i?"\u53D1\u9001\u7ED9 Codex":"Codex \u4F1A\u8BDD\u5DF2\u7ED3\u675F":!e||i||l?"\u53D1\u9001":"\u4F1A\u8BDD\u5DF2\u7ED3\u675F"),d.classList.toggle("queue-mode",u));var f=document.getElementById("stop-button");if(f){var v=ji(e);f.classList.toggle("hidden",!v.active)}var m=document.getElementById("stop-button");if(m){var y=ji(e);m.classList.toggle("hidden",!y.active)}var g=document.getElementById("output");g&&g.classList.toggle("interactive",!t&&r.terminalInteractive),Ll()}function gi(){var e=window.getSelection&&window.getSelection();if(!e||e.isCollapsed)return!1;var t=document.getElementById("output");if(!t)return!1;var n=e.anchorNode;return n&&n.nodeType===3&&(n=n.parentNode),!!(n&&t.contains(n))}function Oa(e){if(tl(e)&&!e.metaKey){var t=Cp(e);if(t){var n=Tp(e,t);if(!rl(t)&&!(n.ctrl&&t.length===1&&t.toLowerCase()==="c"&&gi())){var i=sl(t,n);i&&(e.preventDefault(),il(i,t))}}}}function Mp(){r.terminal&&ku(500)}function Ap(){_r()}function Km(e){e.preventDefault(),e.stopPropagation(),!(r.currentView!=="terminal"||!r.selectedId)&&(r.keyboardPopupOpen=!r.keyboardPopupOpen,Ar())}function al(){r.keyboardPopupOpen=!1,Ar()}function qp(){document.addEventListener("keydown",Oa,!0)}function Op(){document.removeEventListener("keydown",Oa,!0)}function sl(e,t){var n=t||{ctrl:!1,alt:!1,shift:!1};if(rl(e))return"";if(e==="tab"&&n.shift)return"\x1B[Z";var i=Ep(e);if(i)return i;if(e.indexOf("ctrl_")===0)return String.fromCharCode(e.charCodeAt(e.length-1)-96);var a=qr(e);if(a)return a;if(!e)return"";var s=e.length===1?e:"";return s?(n.shift&&(s=s.toUpperCase()),n.ctrl?Ip(s):n.alt?"\x1B"+s:s):""}function hi(){r.modifiers.ctrl=!1,r.modifiers.alt=!1,r.modifiers.shift=!1,Pp()}function Pp(){var e=document.getElementById("mini-keyboard");e&&["ctrl","alt","shift"].forEach(function(t){var n=e.querySelector('[data-key="'+t+'"]');n&&n.classList.toggle("active",!!r.modifiers[t])})}function qr(e){switch(e){case"yes":return"y\r";case"no":return"n\r";case"up":return"\x1B[A";case"down":return"\x1B[B";case"left":return"\x1B[D";case"right":return"\x1B[C";case"enter":return"\r";case"ctrl_c":return"";case"ctrl_d":return"";case"ctrl_l":return"\f";case"ctrl_u":return"";case"ctrl_k":return"\v";case"ctrl_w":return"";case"ctrl_z":return"";case"escape":return"\x1B";default:return""}}function Hp(){if(r.pendingMessages.length!==0){var e=ye();if(se(e)){r.pendingMessages=[];return}var t=Date.now(),n=[],i=0;r.pendingMessages.forEach(function(s){if(typeof s=="string"){n.push(s);return}if(!(!s||typeof s.input!="string")){if(t-(s.at||0)>dp){i++;return}n.push(s.input)}}),r.pendingMessages=[],i>0&&console.log("[wand] flushPendingMessages: dropped "+i+" stale input(s)");var a=Promise.resolve();n.forEach(function(s){a=a.then(function(){return _p(s).catch(function(){})})})}}function _p(e){if(!e||!r.selectedId)return Promise.resolve();var t=r.selectedId;return fetch("/api/sessions/"+t+"/input",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:e,view:r.currentView})}).then(function(n){return n.ok?n.json():n.json().catch(function(){return{error:"\u8BF7\u6C42\u5931\u8D25"}}).then(function(i){var a=Zo(i);if(a.httpStatus=n.status,el(a))return console.log("[wand] sendInputDirect: session unavailable, dropping",{sessionId:t,errorCode:a.errorCode}),null;throw a})}).then(function(n){return n&&n.id&&($(n),n.id===r.selectedId&&(n.messages&&n.messages.length>0&&(r.currentMessages=n.messages),He(!0))),n})}function Pa(){r.selectedId&&fetch("/api/sessions/"+r.selectedId+"/stop",{method:"POST",credentials:"same-origin"}).then(Ht)}function ol(e){var t=document.querySelector('.session-item[data-session-id="'+e+'"]');t&&t.classList.add("deleting"),setTimeout(function(){fetch("/api/sessions/"+e,{method:"DELETE",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);return r.selectedId===e&&(r.selectedId=null,be()),Ht()}).catch(function(){t&&t.classList.remove("deleting");var n=document.getElementById("action-error");Ke(n,"\u65E0\u6CD5\u5220\u9664\u4F1A\u8BDD\u3002")})},250)}function ll(e,t){t&&t.classList.add("deleting"),setTimeout(function(){fetch("/api/claude-history/"+encodeURIComponent(e),{method:"DELETE",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error)throw new Error(n.error);r.claudeHistory=r.claudeHistory.filter(function(i){return i.claudeSessionId!==e}),delete r.selectedClaudeHistoryIds[e],ve()}).catch(function(){t&&t.classList.remove("deleting");var n=document.getElementById("action-error");Ke(n,"\u65E0\u6CD5\u5220\u9664\u5386\u53F2\u4F1A\u8BDD\u3002")})},250)}function Jm(e,t){ll(e,t)}function Dp(e,t,n){e&&fetch("/api/claude-history?cwd="+encodeURIComponent(e),{method:"DELETE",credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){if(i&&i.error)throw new Error(i.error);r.claudeHistory=r.claudeHistory.filter(function(a){return a.cwd!==e}),ve()}).catch(function(){cl(n,!1);var i=document.getElementById("action-error");Ke(i,"\u65E0\u6CD5\u6E05\u7406\u8BE5\u76EE\u5F55\u7684\u5386\u53F2\u4F1A\u8BDD\u3002")})}function cl(e,t){e.forEach(function(n){n.classList.toggle("deleting",t)})}function jp(e){return Array.prototype.slice.call(document.querySelectorAll('.claude-history-item[data-cwd="'+window.CSS.escape(String(e))+'"]'))}var dl=null,Or=null;function Pr(){if(Or){Or.classList.remove("swiped");var e=Or.querySelector(".session-item-content");e&&(e.style.transform=""),Or=null}}function Np(){dl=null,Or=null}function Rp(e,t,n){e==="claude"&&(r.preferredCommand=e,r.chatMode=_t(e,r.chatMode));var i=r.chatModel||r.config&&r.config.defaultModel||"";return fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:e,cwd:t||"",mode:r.chatMode||r.config.defaultMode||"default",model:i||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(a){return a.json()}).then(function(a){return a.error?(n&&Ke(n,a.error),null):(r.selectedId=a.id,be(),r.drafts[a.id]="",a)})}var Ha=!1;function ul(e,t){return!e||Ha?Promise.resolve(null):(Ha=!0,fetch("/api/sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({mode:r.chatMode||r.config.defaultMode||"default"}))}).then(function(n){return n.json()}).then(function(n){return n.error?(t?Ke(t,n.error):T(n.error,"error"),null):(r.selectedId=n.id,be(),r.drafts[n.id]="",n)}).catch(function(n){var i=n&&n.message||"\u65E0\u6CD5\u6062\u590D\u4F1A\u8BDD\u3002";return t?Ke(t,i):T(i,"error"),null}).finally(function(){Ha=!1}))}function Ym(e,t){return e?fetch("/api/claude-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({mode:r.chatMode||r.config.defaultMode||"default"}))}).then(function(n){return n.json()}).then(function(n){return n.error?(t?Ke(t,n.error):T(n.error,"error"),null):(r.claudeHistory=r.claudeHistory.filter(function(i){return i.claudeSessionId!==e}),r.selectedId=n.id,be(),r.drafts[n.id]="",n)}).catch(function(n){var i=n&&n.message||"\u65E0\u6CD5\u6309 Claude \u4F1A\u8BDD ID \u6062\u590D\u4F1A\u8BDD\u3002";return t?Ke(t,i):T(i,"error"),null}):Promise.resolve(null)}function hn(e){return!e||!e.id?Promise.resolve():(r.selectedId=e.id,be(),r.currentMessages=[],Dr(),It(),Mr(e.id),$(e),ve(),qn(e.id),dn(e.id).then(function(){Ft(!0)}))}function fl(e){return ul(e).then(function(t){return t?(t.claudeSessionId&&(t.provider==="codex"?r.codexHistory=r.codexHistory.filter(function(n){return n.claudeSessionId!==t.claudeSessionId}):r.claudeHistory=r.claudeHistory.filter(function(n){return n.claudeSessionId!==t.claudeSessionId})),hn(t).then(function(){return t})):null})}function Gm(e,t,n){return Rp(e,t,n).then(function(i){return i?hn(i).then(function(){return i}):null})}function Qm(e){var t=document.getElementById("welcome-input");if(t){t.placeholder="\u6B63\u5728\u601D\u8003\u2026",t.disabled=!0;var n=r.chatMode||"managed",i=Ge(),a=ht(),s=r.chatModel||r.config&&r.config.defaultModel||"";fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:a,cwd:i,mode:n,initialInput:e,model:s||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(o){return o.json()}).then(function(o){return o.error?(T(o.error,"error"),t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1,null):hn(o)}).catch(function(o){T(o&&o.message||"\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error"),t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1}).finally(function(){t.placeholder="\u8F93\u5165\u6D88\u606F",t.disabled=!1})}}function $m(e,t,n){var i=r.chatMode||"managed",a=Ge(),s=ht(),o=r.chatModel||r.config&&r.config.defaultModel||"";fetch("/api/commands",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({command:s,cwd:a,mode:i,initialInput:e||void 0,model:o||void 0,thinkingEffort:r.chatThinking||void 0}))}).then(function(l){return l.json()}).then(function(l){return l.error?(T(l.error,"error"),null):(t&&(t.value=""),n&&(n.value=""),hn(l))}).catch(function(l){T(l&&l.message||"\u65E0\u6CD5\u542F\u52A8\u4F1A\u8BDD\u3002","error")})}function Fp(e){e.disabled=!0,fl(e.dataset.sessionId).finally(function(){e.disabled=!1})}function Wp(e){var t=e.dataset.claudeSessionId,n=e.dataset.cwd;t&&(e.disabled=!0,zp(t,n).then(function(i){i&&i.id&&(r.codexHistory=r.codexHistory.filter(function(a){return a.claudeSessionId!==t}),r.selectedId=i.id,be(),r.drafts[i.id]="",hn(i).then(function(){jt()}))}).finally(function(){e.disabled=!1}))}function zp(e,t){return fetch("/api/codex-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({mode:r.chatMode||r.config&&r.config.defaultMode||"default",cwd:t}))}).then(function(n){return n.json()}).then(function(n){return n.error?(T(n.error,"error"),null):n}).catch(function(n){return T(n&&n.message||"\u65E0\u6CD5\u6062\u590D\u5386\u53F2\u4F1A\u8BDD\u3002","error"),null})}function Up(e){var t=e.dataset.claudeSessionId;if(t){var n=e.closest(".claude-history-item");n&&(n.style.opacity="0.5"),fetch("/api/codex-history/"+encodeURIComponent(t),{method:"DELETE",credentials:"same-origin"}).then(function(i){return i.json()}).then(function(i){i&&i.ok?(r.codexHistory=r.codexHistory.filter(function(a){return a.claudeSessionId!==t}),ve()):n&&(n.style.opacity="1")}).catch(function(){n&&(n.style.opacity="1")})}}function Vp(e){var t=e.dataset.claudeSessionId,n=e.dataset.cwd;t&&(e.disabled=!0,bi(t,n).then(function(i){i&&i.id&&(r.claudeHistory=r.claudeHistory.filter(function(a){return a.claudeSessionId!==t}),r.selectedId=i.id,be(),r.drafts[i.id]="",hn(i).then(function(){jt()}))}).finally(function(){e.disabled=!1}))}function bi(e,t){return fetch("/api/claude-sessions/"+encodeURIComponent(e)+"/resume",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(dt({mode:r.chatMode||r.config&&r.config.defaultMode||"default",cwd:t}))}).then(function(n){return n.json()}).then(function(n){return n.error?(T(n.error,"error"),null):n}).catch(function(n){return T(n&&n.message||"\u65E0\u6CD5\u6062\u590D\u5386\u53F2\u4F1A\u8BDD\u3002","error"),null})}function yi(){return"ontouchstart"in window||navigator.maxTouchPoints>0}function Ft(e){if(!r.terminalInteractive){var t=document.getElementById("input-box");!t||!r.selectedId||document.activeElement!==t&&(e&&yi()||_a(t))}}function Xm(){var e=document.querySelector(".chat-messages");e&&(e.scrollTop=0)}function pl(){var e=document.querySelector(".input-panel");e&&e.style.removeProperty("--keyboard-offset")}function vl(){var e=document.querySelector(".input-panel");e&&e.style.removeProperty("--keyboard-offset")}function wi(e){if(e){var t=e.selectionStart,n=e.selectionEnd;Da(e),typeof t=="number"&&typeof n=="number"&&e.setSelectionRange(t,n)}}function ml(e){!e||e.dataset.touchScrollBound==="true"||(e.dataset.touchScrollBound="true",e.addEventListener("touchstart",function(){e.scrollHeight<=e.clientHeight+1||(e.scrollTop<=0?e.scrollTop=1:e.scrollTop+e.clientHeight>=e.scrollHeight&&(e.scrollTop=Math.max(1,e.scrollHeight-e.clientHeight-1)))},{passive:!0}))}function gl(e){e&&(Rt(e),wi(e))}function Kp(e){var t=e&&e.target?e.target:document.getElementById("input-box");t&&(pl(),gl(t))}function Jp(e){var t=e&&e.target?e.target:document.getElementById("input-box");vl(),wl(2200,t);var n=[80,200,380,620,900];n.forEach(function(i,a){setTimeout(function(){tr(!1),a===1&&yi()&&(at("keyboard-blur",{forceReplay:!0}),gt("keyboard"))},i)})}function Yp(e){e&&(e.setSelectionRange(e.value.length,e.value.length),wi(e))}function _a(e){e&&(e.focus({preventScroll:!0}),Yp(e))}function Gp(e){ml(e),gl(e)}function Qp(e){_a(e)}function Zm(e){pl(),wi(e)}function $p(){vl()}function Xp(e){wi(e)}function eg(e){Qp(e)}function Zp(e){Gp(e)}function tg(){$p()}function ng(e){Xp(e)}function ev(e,t){if(!e||!t||document.activeElement!==t)return!1;var n=window.innerHeight-e.height-e.offsetTop;if(n<=50)return!1;var i=t.getBoundingClientRect();return i.bottom>e.height-12}function Da(e){if(e){var t=e.scrollHeight>e.clientHeight+1;if(!t){e.scrollTop=0;return}e.scrollTop=e.scrollHeight}}function hl(){if(r.terminalInteractive){bl();return}if(!yi()){var e=document.getElementById("input-box");!e||!r.selectedId||document.activeElement===e||_a(e)}}function bl(){var e=document.getElementById("output");e&&(e.setAttribute("tabindex","0"),e.focus(),r.terminal&&r.terminal.focus&&r.terminal.focus())}function tv(){var e=document.querySelector(".input-panel"),t=document.querySelector(".chat-messages");if("virtualKeyboard"in navigator){var n=navigator.virtualKeyboard;n.addEventListener("geometrychange",function(){e&&e.style.removeProperty("padding-bottom")})}var i=document.getElementById("output");i&&i.addEventListener("click",function(){hl()}),t&&t.addEventListener("click",function(a){a.target.tagName!=="A"&&a.target.tagName!=="BUTTON"&&!a.target.closest("button")&&!a.target.closest("[data-tool-toggle]")&&hl()})}function nv(){try{window.scrollTo(0,0)}catch{}document.scrollingElement&&(document.scrollingElement.scrollTop=0),document.documentElement&&(document.documentElement.scrollTop=0),document.body&&(document.body.scrollTop=0)}var ja=0,ki=0,Na=0;function rv(){var e=document.documentElement;if(e&&e.classList&&e.classList.contains("is-pwa"))return!0;try{return navigator.standalone===!0}catch{}return!1}function yl(e){Na=Math.max(Na,Date.now()+(e||1800))}function wl(e,t){setTimeout(function(){var n=document.activeElement;Ra(n)&&n!==t||yl(e)},30)}function iv(e){var t=document.documentElement,n=Math.max(window.innerWidth||0,e&&e.width||0,t&&t.clientWidth||0),i=Math.max(window.innerHeight||0,e&&e.height||0,t&&t.clientHeight||0);return!ja||Math.abs(n-ja)>8?(ja=n,ki=i):i>ki&&(ki=i),Math.max(1,Math.round(ki||i||1))}function av(e,t,n,i){return e||!rv()||Date.now()>Na?!1:t>0||i>n+1}function tr(e){var t=window.visualViewport;if(t){var n=document.documentElement;if(window.__wandImeNative){n.style.setProperty("--app-viewport-top","0px"),n.style.setProperty("--app-viewport-height",Math.round(t.height)+"px");return}var i=iv(t),a=Math.max(0,Math.round(t.offsetTop||0)),s=Math.max(1,Math.round(t.height));av(e,a,s,i)&&(a=0,s=Math.max(s,i)),n.style.setProperty("--app-viewport-top",a+"px"),n.style.setProperty("--app-viewport-height",s+"px"),(e||(window.scrollY||0)>0)&&nv()}}function Ra(e){if(!e)return!1;var t=e.tagName;if(t==="TEXTAREA"||t==="SELECT")return!0;if(t==="INPUT"){var n=(e.getAttribute("type")||"text").toLowerCase();return!/^(button|checkbox|color|file|hidden|image|radio|range|reset|submit)$/i.test(n)}return!!e.isContentEditable}function sv(){if(!("visualViewport"in window))return;var e=window.visualViewport,t=e.height,n=!1,i=Math.max(window.innerWidth||0,e.width||0),a=Math.max(window.innerHeight||0,e.height||0),s=[];function o(){return Math.max(window.innerHeight||0,e.height||0)}function l(){var m=Math.max(window.innerWidth||0,e.width||0),y=o();if(Math.abs(m-i)>8){i=m,a=y;return}y>a&&(a=y)}function c(m,y){var g=document.activeElement,b=g===m||Ra(g),w=a-e.height,k=a-(window.innerHeight||e.height||0);return!!(y>80||b&&(w>120||k>120)||n&&(w>80||y>32))}function d(){s.forEach(function(m){clearTimeout(m)}),s=[60,180,360,620,900].map(function(m){return setTimeout(function(){tr(n)},m)})}function u(){if(e){var m=document.getElementById("input-box"),y=window.innerHeight-e.height-e.offsetTop;l();var g=c(m,y),b=Math.abs(e.height-t)>8;if(tr(g),g&&(!n||b)&&ev(e,m)&&Da(m),!n&&g){var w=r.terminalAutoFollow||ia();at("keyboard-open",{forceReplay:!0}),window.__wandImeNative||setTimeout(function(){tr(!0)},220),d(),w&&setTimeout(function(){r.terminal&>("force")},220)}if(n&&!g){var k=!!window.__wandImeNative;k||(yl(2200),tr(!1)),d(),setTimeout(function(){k||tr(!1),at("keyboard-close",{forceReplay:!0}),gt("keyboard")},200)}b&&n===g&&at("viewport"),n=g,t=e.height}}var f=null;function v(){f!==null&&cancelAnimationFrame(f),f=requestAnimationFrame(function(){f=null,u()})}e.addEventListener("resize",v),e.addEventListener("scroll",v),document.addEventListener("visibilitychange",function(){document.visibilityState==="visible"&&(v(),setTimeout(v,240),setTimeout(v,720))}),window.addEventListener("pageshow",function(m){m&&m.persisted&&(v(),setTimeout(v,240))}),document.addEventListener("focusout",function(m){!m||!m.target||Ra(m.target)&&(wl(1600,m.target),setTimeout(v,80),setTimeout(v,420))}),u()}function ov(){var e=document.getElementById("output");if(e){var t=document.createElement("div");t.className="terminal-resize-handle",t.innerHTML="⋮",e.appendChild(t);var n=!1,i=0,a=0;t.addEventListener("mousedown",function(s){n=!0,i=s.clientY,a=e.getBoundingClientRect().height,document.body.style.cursor="ns-resize",document.body.style.userSelect="none",s.preventDefault()}),r.resizeMouseMove=function(s){if(n){var o=s.clientY-i,l=Math.max(200,Math.min(a+o,window.innerHeight-200));e.style.height=l+"px",e.style.flex="none",Wt()}},document.addEventListener("mousemove",r.resizeMouseMove),r.resizeMouseUp=function(){n&&(n=!1,document.body.style.cursor="",document.body.style.userSelect="",Wt())},document.addEventListener("mouseup",r.resizeMouseUp),t.addEventListener("touchstart",function(s){n=!0,i=s.touches[0].clientY,a=e.getBoundingClientRect().height,s.preventDefault()},{passive:!1}),r.resizeTouchMove=function(s){if(n){var o=s.touches[0].clientY-i,l=Math.max(200,Math.min(a+o,window.innerHeight-200));e.style.height=l+"px",e.style.flex="none",Wt(),s.preventDefault()}},document.addEventListener("touchmove",r.resizeTouchMove,{passive:!1}),r.resizeTouchEnd=function(){n&&(n=!1,Wt())},document.addEventListener("touchend",r.resizeTouchEnd)}}function kl(){var e=ye();return!!e}function Fa(e){var t=Math.max(gn,window.innerWidth-mi-gn),n=Math.max(gn,window.innerHeight-mi-gn);return{right:Math.min(Math.max(gn,e.right),t),bottom:Math.min(Math.max(gn,e.bottom),n)}}function xl(){if(r.joystickBallEl){var e=Fa(r.joystickPos||{right:18,bottom:96});r.joystickBallEl.style.right=e.right+"px",r.joystickBallEl.style.bottom=e.bottom+"px"}}function lv(e,t){var n=Fa({right:e,bottom:t});r.joystickPos=n;try{localStorage.setItem("wand-ball-pos",JSON.stringify(n))}catch{}}function cv(){function e(s,o,l){return'<button type="button" class="wjp-key'+(l?" "+l:"")+'" data-key="'+s+'">'+o+"</button>"}var t='<div class="wjp-dpad"><div class="wjp-dpad-row">'+e("up","\u2191","wjp-dir")+'</div><div class="wjp-dpad-row">'+e("left","\u2190","wjp-dir")+e("down","\u2193","wjp-dir")+e("right","\u2192","wjp-dir")+"</div></div>",n="",i;for(i=0;i<Ma.length;i++)n+=e(Ma[i].key,Ma[i].label,"");var a='<div class="wjp-header"><span class="wjp-title">'+J("paw",{size:13,strokeWidth:1.6,cls:"wjp-title-icon"})+'<span>\u9065\u63A7\u9762\u677F</span></span><button type="button" class="wjp-close" aria-label="\u5173\u95ED\u9065\u63A7\u9762\u677F">'+J("x",{size:13,strokeWidth:2})+"</button></div>"+t+'<div class="wjp-grid wjp-fnkeys">'+n+"</div>";return a}function dv(){if(!r.joystickRootEl){var e=document.createElement("div");e.className="wand-joystick-root";var t=document.createElement("div");t.className="wand-joystick-backdrop",e.appendChild(t);var n=document.createElement("div");n.className="wand-joystick-panel",n.innerHTML=cv(),n.addEventListener("click",gv),e.appendChild(n);var i=document.createElement("div");i.className="wand-joystick-ball",i.setAttribute("role","button"),i.setAttribute("aria-label","Wand \u9065\u63A7\u9762\u677F"),i.setAttribute("title","\u70B9\u51FB\u6253\u5F00\u9065\u63A7\u9762\u677F\uFF0C\u62D6\u52A8\u53EF\u79FB\u52A8\u4F4D\u7F6E"),i.innerHTML=J("paw",{size:25,strokeWidth:1.6,cls:"wand-joystick-logo"}),e.appendChild(i),document.body.appendChild(e),r.joystickRootEl=e,r.joystickBackdropEl=t,r.joystickPanelEl=n,r.joystickBallEl=i,xl(),i.addEventListener("pointerdown",uv),i.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation()}),t.addEventListener("pointerdown",function(a){r.joystickPinnedOpen&&r.joystickGesture==null&&(a.preventDefault(),Hr())}),t.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation()}),r.joystickResizeHandler=function(){xl()},window.addEventListener("resize",r.joystickResizeHandler),window.addEventListener("orientationchange",r.joystickResizeHandler),Ll()}}function uv(e){if(kl()&&!((e.pointerType==="mouse"||e.pointerType==="pen")&&e.button!==0)&&r.joystickPointerId===null){e.preventDefault(),e.stopPropagation();var t=e.pointerType==="mouse"||e.pointerType==="pen";r.joystickPointerId=e.pointerId,r.joystickPressStart={x:e.clientX,y:e.clientY,t:Date.now()},r.joystickGesture="pending";try{r.joystickBallEl.setPointerCapture(e.pointerId)}catch{}if(t){r.joystickMoveHandler=Il,r.joystickUpHandler=Cl,document.addEventListener("pointermove",r.joystickMoveHandler),document.addEventListener("pointerup",r.joystickUpHandler),document.addEventListener("pointercancel",r.joystickUpHandler);return}r.joystickLongPressTimer=setTimeout(function(){r.joystickGesture==="pending"&&Sl()},bp),r.joystickMoveHandler=Il,r.joystickUpHandler=Cl,document.addEventListener("pointermove",r.joystickMoveHandler),document.addEventListener("pointerup",r.joystickUpHandler),document.addEventListener("pointercancel",r.joystickUpHandler)}}function Sl(){r.joystickGesture="move",r.joystickPinnedOpen&&Hr(),r.joystickBallEl&&r.joystickBallEl.classList.add("dragging"),r.joystickBackdropEl&&r.joystickBackdropEl.classList.add("active")}function El(e,t){if(r.joystickBallEl){var n=Fa({right:window.innerWidth-e-mi/2,bottom:window.innerHeight-t-mi/2});r.joystickBallEl.style.right=n.right+"px",r.joystickBallEl.style.bottom=n.bottom+"px"}}function Il(e){if(e.pointerId===r.joystickPointerId&&r.joystickBallEl){e.preventDefault();var t=e.clientX-r.joystickPressStart.x,n=e.clientY-r.joystickPressStart.y;if(r.joystickGesture==="pending")if(Math.sqrt(t*t+n*n)>yp){if(e.pointerType==="mouse"||e.pointerType==="pen"){Sl(),El(e.clientX,e.clientY);return}r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickGesture="cancelled";return}else return;if(r.joystickGesture==="move"){El(e.clientX,e.clientY);return}}}function Cl(e){if(e.pointerId===r.joystickPointerId){r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null);var t=r.joystickGesture;if(t==="pending"){var n=e.clientX-r.joystickPressStart.x,i=e.clientY-r.joystickPressStart.y;Math.sqrt(n*n+i*i)<=wp&&vv()}else if(t==="move"){var a=r.joystickBallEl?r.joystickBallEl.getBoundingClientRect():null;a&&lv(window.innerWidth-a.right,window.innerHeight-a.bottom)}Tl()}}function Tl(){if(r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickBallEl&&r.joystickPointerId!==null)try{r.joystickBallEl.releasePointerCapture(r.joystickPointerId)}catch{}r.joystickMoveHandler&&(document.removeEventListener("pointermove",r.joystickMoveHandler),r.joystickMoveHandler=null),r.joystickUpHandler&&(document.removeEventListener("pointerup",r.joystickUpHandler),document.removeEventListener("pointercancel",r.joystickUpHandler),r.joystickUpHandler=null),r.joystickBallEl&&r.joystickBallEl.classList.remove("dragging"),r.joystickBackdropEl&&!r.joystickPinnedOpen&&r.joystickBackdropEl.classList.remove("active"),r.joystickPointerId=null,r.joystickGesture=null,r.joystickPressStart=null}function fv(e){if(e==="ctrl"||e==="alt"||e==="shift"){r.modifiers[e]=!r.modifiers[e],_r();return}var t=ye();if(t&&se(t)){(e==="ctrl_c"||e==="escape")&&pv(t,e),hi(),_r();return}var n=sl(e,{ctrl:r.modifiers.ctrl,alt:r.modifiers.alt,shift:r.modifiers.shift});n&&il(n,e),hi(),_r(),Mp()}function pv(e,t){!e||!e.id||fetch("/api/structured-sessions/"+e.id+"/messages",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify({input:"",interrupt:!0,preserveQueue:!0})}).then(function(n){return n.ok?n.json():n.json().catch(function(){return{}}).then(function(i){throw new Error(i&&i.error||"\u4E2D\u65AD\u5931\u8D25 (key="+t+")")})}).then(function(n){if(n&&n.id&&($(n),n.id===r.selectedId)){var i=r.sessions.find(function(a){return a.id===n.id})||n;r.currentMessages=Qe(i,ct(i,n.output,!1)),He(!0),typeof Bt=="function"&&Bt()}}).catch(function(n){window&&window.console&&n&&n.message&&console.debug("[wand] joystick interrupt no-op:",n.message)})}function vv(){r.joystickPinnedOpen?Hr():mv()}function mv(){if(!(!r.joystickPanelEl||!r.joystickBallEl)){r.joystickPinnedOpen=!0;var e=r.joystickBallEl.getBoundingClientRect();r.joystickPanelEl.style.right=Math.max(gn,window.innerWidth-e.right)+"px",r.joystickPanelEl.style.bottom=Math.max(gn,window.innerHeight-e.top+10)+"px",r.joystickPanelEl.classList.add("active"),r.joystickBallEl.classList.add("panel-open"),r.joystickBackdropEl&&r.joystickBackdropEl.classList.add("active"),_r()}}function Hr(){r.joystickPinnedOpen=!1,r.joystickPanelEl&&r.joystickPanelEl.classList.remove("active"),r.joystickBallEl&&r.joystickBallEl.classList.remove("panel-open"),r.joystickBackdropEl&&r.joystickGesture==null&&r.joystickBackdropEl.classList.remove("active")}function _r(){r.joystickPanelEl&&["ctrl","alt"].forEach(function(e){var t=r.joystickPanelEl.querySelector('.wjp-mod[data-key="'+e+'"]');t&&t.classList.toggle("active",!!r.modifiers[e])})}function gv(e){var t=e.target&&e.target.closest?e.target.closest(".wjp-close"):null;if(t){e.preventDefault(),e.stopPropagation(),Hr();return}var n=e.target&&e.target.closest?e.target.closest(".wjp-key"):null;if(n){e.preventDefault(),e.stopPropagation();var i=n.getAttribute("data-key");i&&fv(i)}}function Ll(){var e=r.joystickRootEl;if(e){var t=kl();e.classList.toggle("visible",t),t||((r.joystickPointerId!==null||r.joystickGesture)&&Tl(),r.joystickPinnedOpen&&Hr(),r.joystickBackdropEl&&r.joystickBackdropEl.classList.remove("active"))}}function hv(){r.joystickLongPressTimer&&(clearTimeout(r.joystickLongPressTimer),r.joystickLongPressTimer=null),r.joystickMoveHandler&&(document.removeEventListener("pointermove",r.joystickMoveHandler),r.joystickMoveHandler=null),r.joystickUpHandler&&(document.removeEventListener("pointerup",r.joystickUpHandler),document.removeEventListener("pointercancel",r.joystickUpHandler),r.joystickUpHandler=null),r.joystickResizeHandler&&(window.removeEventListener("resize",r.joystickResizeHandler),window.removeEventListener("orientationchange",r.joystickResizeHandler),r.joystickResizeHandler=null),r.joystickRootEl&&r.joystickRootEl.parentNode&&r.joystickRootEl.parentNode.removeChild(r.joystickRootEl),r.joystickRootEl=null,r.joystickPanelEl=null,r.joystickBackdropEl=null,r.joystickBallEl=null,r.joystickPointerId=null,r.joystickGesture=null,r.joystickPressStart=null,r.joystickPinnedOpen=!1}function bv(){var e=document.getElementById("output");if(e){var t=!Ne();r.resizeHandler=function(){Wt(!0);var n=!Ne();t!==n&&(t=n,!n&&r.sidebarPinned&&r.sessionsDrawerOpen?(r.sessionsDrawerOpen=!1,Ee("wand-sidebar-open",!1),Sr()):n&&r.sidebarPinned&&!r.sessionsDrawerOpen&&(r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",!0),Sr()))},window.addEventListener("resize",r.resizeHandler),window.visualViewport&&(r.visualViewportHandler=function(){Wt(!0)},window.visualViewport.addEventListener("resize",r.visualViewportHandler)),r.visibilityHandler=function(){document.hidden||at("visibility",{forceReplay:!0})},document.addEventListener("visibilitychange",r.visibilityHandler),r.orientationHandler=function(){at("orientation",{forceReplay:!0})},window.addEventListener("orientationchange",r.orientationHandler),requestAnimationFrame(function(){Wt(!0)})}}function yv(){r.terminalHealthTimer||(r.terminalHealthTimer=setInterval(function(){if(!(!r.terminal||r.currentView!=="terminal"||document.hidden)){var e=r.sessions.find(function(s){return s.id===r.selectedId});if(!(!e||e.sessionKind==="structured")){at("health");var t=Date.now(),n=r.lastChunkAt>0&&t-r.lastChunkAt>300,i=t-r.lastTerminalResyncAt>3e4,a=r.lastChunkAt>r.lastTerminalResyncAt;i&&a&&(n||e.status!=="running")&&r.terminalOutput&&An()}}},5e3))}function wv(){r.terminalHealthTimer&&(clearInterval(r.terminalHealthTimer),r.terminalHealthTimer=null)}function Dr(){wv(),r.resizeTimer&&(clearTimeout(r.resizeTimer),r.resizeTimer=null),r.resizeObserver&&(r.resizeObserver.disconnect(),r.resizeObserver=null),r.resizeHandler&&(window.removeEventListener("resize",r.resizeHandler),r.resizeHandler=null),r.visualViewportHandler&&window.visualViewport&&(window.visualViewport.removeEventListener("resize",r.visualViewportHandler),r.visualViewportHandler=null),r.visibilityHandler&&(document.removeEventListener("visibilitychange",r.visibilityHandler),r.visibilityHandler=null),r.orientationHandler&&(window.removeEventListener("orientationchange",r.orientationHandler),r.orientationHandler=null),[["mousemove","resizeMouseMove"],["mouseup","resizeMouseUp"],["touchmove","resizeTouchMove"],["touchend","resizeTouchEnd"]].forEach(function(a){r[a[1]]&&(document.removeEventListener(a[0],r[a[1]]),r[a[1]]=null)}),Vn();var e=document.getElementById("output");if(r.terminalViewportEl&&(r.terminalViewportScrollHandler&&r.terminalViewportEl.removeEventListener("scroll",r.terminalViewportScrollHandler),r.terminalViewportTouchHandler&&r.terminalViewportEl.removeEventListener("touchmove",r.terminalViewportTouchHandler),r.terminalViewportTouchStartHandler&&r.terminalViewportEl.removeEventListener("touchstart",r.terminalViewportTouchStartHandler)),e&&(r.terminalWheelHandler&&e.removeEventListener("wheel",r.terminalWheelHandler),r.terminalClickHandler&&e.removeEventListener("click",r.terminalClickHandler)),r.terminalViewportEl=null,r.terminalViewportScrollHandler=null,r.terminalViewportTouchHandler=null,r.terminalViewportTouchStartHandler=null,r.terminalWheelHandler=null,r.terminalClickHandler=null,r.terminalScrollbarHideTimer&&(clearTimeout(r.terminalScrollbarHideTimer),r.terminalScrollbarHideTimer=null),r.terminalScrollbarEl&&r.terminalScrollbarEl.parentNode&&r.terminalScrollbarEl.parentNode.removeChild(r.terminalScrollbarEl),r.terminalScrollbarEl=null,r.terminalScrollbarThumbEl=null,r.terminalScrollbarDragging=!1,r.terminalScrollbarRafPending=!1,r.terminal&&(r.terminal.destroy(),r.terminal=null),e)for(var t=e.querySelectorAll(".terminal-scroll-wrap"),n=0;n<t.length;n++){var i=t[n];i.parentNode===e&&e.removeChild(i)}oa(),r.syncOutputBuffer=null,r.syncOutputDeadline=0,r.syncFramingResidue=!1,r.terminalSessionId=null,r.terminalOutput="",r.terminalOutputMarker=0,r.terminalAutoFollow=!0,r.showTerminalJumpToBottom=!1,lt(),r.softResyncTimer&&(clearTimeout(r.softResyncTimer),r.softResyncTimer=null),Qt&&(clearTimeout(Qt),Qt=null),ai=0,ri=0,wr=0,la=0,ii=!1,r.lastResize={cols:0,rows:0},hv()}function xi(e,t){if(r.selectedId){var n=r.sessions.find(function(a){return a.id===r.selectedId});if(!(!n||n.status!=="running")&&!se(n)){e>256&&(e=256),t>160&&(t=160);var i={cols:e,rows:t};(r.lastResize.cols!==i.cols||r.lastResize.rows!==i.rows)&&(r.lastResize=i,fetch("/api/sessions/"+r.selectedId+"/resize",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin",body:JSON.stringify(i)}).catch(function(){}))}}}function at(e,t){if(!r.terminal)return!1;var n=t||{},i=n.forceReplay===!0,a=document.getElementById("output");if(!a||a.offsetWidth===0||a.offsetHeight===0)return jr(e||"fit-retry",{forceReplay:i}),!1;var s=r.terminalAutoFollow||ia(),o=r.terminal.cols,l=r.terminal.rows;return requestAnimationFrame(function(){requestAnimationFrame(function(){if(r.terminal){typeof r.terminal.remeasure=="function"&&r.terminal.remeasure(),xi(r.terminal.cols,r.terminal.rows);var c=r.terminal.cols!==o||r.terminal.rows!==l;!c&&i&&r.terminalOutput&&An({skipFit:!0}),s&>("force")}})}),!0}function jr(e,t){if(!r.terminal)return;var n=t||{},i=n.forceReplay!==!1,a=0,s=8;function o(){if(r.terminal){var l=document.getElementById("output");if(l&&l.offsetHeight,l&&l.offsetWidth>0&&l.offsetHeight>0){at(e,{forceReplay:i});return}++a>=s||(a<=4?requestAnimationFrame(o):setTimeout(o,32))}}o()}function Wt(e){r.resizeTimer&&(clearTimeout(r.resizeTimer),r.resizeTimer=null);var t=e?0:100;r.resizeTimer=setTimeout(function(){r.resizeTimer=null,requestAnimationFrame(kv)},t)}function kv(){if(r.terminal){var e=r.terminalAutoFollow||ia();e&>("force"),xi(r.terminal.cols,r.terminal.rows)}}function Bl(){Hl(),!Si()&&(r.pollTimer=setInterval(Ht,1600))}setInterval(function(){var e=document.querySelectorAll(".session-time");e.length>0&&Eo()},3e4);function Wa(){r.wsReconnectTimer&&(clearTimeout(r.wsReconnectTimer),r.wsReconnectTimer=null)}var xv=1e4,Sv=4e4;function Ev(){Ml(),r.wsHeartbeatCheckTimer=setInterval(Al,xv)}function Ml(){r.wsHeartbeatCheckTimer&&(clearInterval(r.wsHeartbeatCheckTimer),r.wsHeartbeatCheckTimer=null)}function Al(){if(!(!r.ws||r.ws.readyState!==WebSocket.OPEN)&&r.lastWsMessageAt){var e=Date.now()-r.lastWsMessageAt;e>Sv&&za("heartbeat-stale-"+Math.round(e/1e3)+"s")}}function za(e){if(Wa(),r.ws){var t=r.ws;try{t.onclose=null}catch{}try{t.onerror=null}catch{}try{t.onmessage=null}catch{}try{t.close()}catch{}r.ws=null}r.wsConnected=!1,r.wsReconnectAttempts=0,Si(e)}function ql(){if(!r.wsReconnectTimer&&!document.hidden){var e=r.wsReconnectAttempts||0,t=[500,1e3,2e3,4e3,8e3],n=t[e<t.length?e:t.length-1];r.wsReconnectAttempts=e+1,r.wsReconnectTimer=setTimeout(function(){r.wsReconnectTimer=null,r.config&&!r.ws&&!document.hidden&&Si("backoff")},n)}}function Si(e){if(!window.WebSocket)return!1;if(r.ws){try{r.ws.close()}catch{}r.ws=null}var t=window.location.protocol==="https:"?"wss:":"ws:",n=t+"//"+window.location.host+"/ws";try{var i=new WebSocket(n);return i.onopen=function(){r.ws=i,r.wsConnected=!0,r.lastWsMessageAt=Date.now(),r.wsReconnectAttempts=0,Wa(),r.lastSeqBySession={},Ev(),qn(r.selectedId),Hp(),jr("ws-reconnect")},i.onmessage=function(a){r.lastWsMessageAt=Date.now();try{var s=JSON.parse(a.data);if(s&&s.type==="ping"){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"pong",t:s.t}))}catch{}return}if(s&&s.type==="resync_required"&&s.sessionId){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"resync",sessionId:s.sessionId}))}catch{}r.lastSeqBySession||(r.lastSeqBySession={}),r.lastSeqBySession[s.sessionId]=0;return}if(s&&(s.type==="init"||s.type==="output")&&s.sessionId&&typeof s.seq=="number"){r.lastSeqBySession||(r.lastSeqBySession={});var o=r.lastSeqBySession[s.sessionId]||0;if(s.type==="init")r.lastSeqBySession[s.sessionId]=s.seq;else if(s.seq===o+1)r.lastSeqBySession[s.sessionId]=s.seq;else if(s.seq>o+1&&o>0){if(r.ws&&r.ws.readyState===WebSocket.OPEN)try{r.ws.send(JSON.stringify({type:"resync",sessionId:s.sessionId}))}catch{}r.lastSeqBySession[s.sessionId]=0;return}else{if(s.seq<o)return;r.lastSeqBySession[s.sessionId]=s.seq}}Iv(s)}catch{}},i.onclose=function(){r.ws=null,r.wsConnected=!1,Ml(),ql()},i.onerror=function(){i.close()},!0}catch{return ql(),!1}}function Iv(e){switch(e.type){case"output":if(e.data&&e.sessionId&&Object.prototype.hasOwnProperty.call(e.data,"isResponding")&&(r._lastIsResponding||(r._lastIsResponding={}),r._lastIsResponding[e.sessionId]=!!e.data.isResponding),e.data&&e.sessionId){var t=!!e.data.incremental,n={id:e.sessionId};if(!t&&e.data.output!==void 0&&(n.output=e.data.output),Object.prototype.hasOwnProperty.call(e.data,"permissionBlocked")&&(n.permissionBlocked=!!e.data.permissionBlocked),Object.prototype.hasOwnProperty.call(e.data,"queuedMessages")&&(n.queuedMessages=e.data.queuedMessages||[],r.queueEpoch++),e.data.structuredState&&(n.structuredState=e.data.structuredState),e.data.sessionKind&&(n.sessionKind=e.data.sessionKind),e.data.messages)n.messages=e.data.messages;else if(t&&e.data.lastMessage){var i=r.sessions.find(function(U){return U.id===e.sessionId});if(i){var a=Array.isArray(i.messages)?i.messages.slice():[],s=e.data.messageCount||0,o=a.length>0?a[a.length-1]:null,l=e.data.lastMessage;o&&l.role&&o.role===l.role?a[a.length-1]=ip(o,l):a.length<s&&a.push(l),n.messages=a}}var c=t&&e.data.chunk&&!e.data.lastMessage&&!n.messages&&n.output===void 0&&!e.data.structuredState&&!e.data.sessionKind;if(c){if(e.data.permissionBlocked!==void 0){var d=r.sessions.find(function(U){return U.id===e.sessionId});d&&!!d.permissionBlocked!=!!e.data.permissionBlocked&&($(n),e.sessionId===r.selectedId&&Xt())}}else if((n.output!==void 0||n.messages||t||e.data.permissionBlocked!==void 0)&&($(n),e.sessionId===r.selectedId)){var u=r.sessions.find(function(U){return U.id===e.sessionId})||n;r.currentMessages=Qe(u,ct(u,u.output,!1)),Xt(),u.sessionKind==="structured"||e.data.sessionKind==="structured"?He():Nr()}}e.sessionId===r.selectedId&&r.terminal&&e.data&&(e.data.chunk&&mp(e.sessionId)?(r.lastChunkAt=Date.now(),r.terminalLiveStreamSessions[e.sessionId]=!0,Kn(r.terminal,e.data.chunk),r.terminalSessionId=e.sessionId,e.data.output?(r.terminalOutput=io(es(e.data.output)),r.terminalOutputMarker=0):r.terminalOutput=io((r.terminalOutput||"")+es(e.data.chunk)),gt("output"),lt()):!e.data.incremental&&Object.prototype.hasOwnProperty.call(e.data,"output")&&si(e.sessionId,e.data.output||"",{mode:"append"}));break;case"started":cn();break;case"ended":{var f=e.data&&e.data.status?e.data.status:"exited",v=e.data&&Object.prototype.hasOwnProperty.call(e.data,"permissionBlocked")?!!e.data.permissionBlocked:!1,m={id:e.sessionId,status:f,permissionBlocked:v};e.data&&e.data.messages&&(m.messages=e.data.messages),e.data&&e.data.structuredState&&(m.structuredState=e.data.structuredState),e.data&&e.data.queuedMessages&&(m.queuedMessages=e.data.queuedMessages),$(m),e.sessionId===r.selectedId&&(er("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C"),Nr(!0));var y=r.sessions.find(function(U){return U.id===e.sessionId}),g=e.data&&e.data.exitCode,b=g!=null&&g!==0,w=y&&y.summary||"",k=y?Kd(y):"",E=b?"\u4EFB\u52A1\u5F02\u5E38\u7ED3\u675F":"\u4EFB\u52A1\u5DF2\u5B8C\u6210",L="";w?(L=w,k&&!b&&(L+=`
|
|
28
|
+
`+k)):L=y&&y.command||e.sessionId,rr(b?"error":"success"),bm(e.sessionId,E,L),sc(e.sessionId),rs(),(e.sessionId!==r.selectedId||document.hidden)&&ts({title:E,body:L,type:b?"warning":"success",icon:b?"!":"\u2713",duration:6e3,actionLabel:"\u67E5\u770B",action:function(){Dt(e.sessionId)}}),r.messageQueue=[],r.pendingMessages=[];var S=r.sessions.find(function(U){return U.id===e.sessionId}),M=e.sessionId===r.selectedId?r.sessions.find(function(U){return U.id===r.selectedId}):null,_=!!(S&&S.sessionKind==="structured"||M&&M.sessionKind==="structured");_&&e.sessionId===r.selectedId?(Xo(),fs(e.sessionId)):_||(r.structuredInputQueue=[],fs(r.selectedId),mn()),e.sessionId===r.selectedId&&(_||On(!1),r.currentTask=null,Xt()),e.sessionId===r.selectedId&&xr(),cn().then(function(){pi()}),e.sessionId===r.selectedId&&(_||dn(e.sessionId));break}case"init":if(e.sessionId===r.selectedId&&e.data){$e&&(clearTimeout($e),$e=null),$(e.data);var W=r.sessions.find(function(U){return U.id===e.sessionId});r.currentMessages=Qe(W||e.data,ct(W||e.data,e.data.output,!1)),He(!0),Xt(),Ol();var Y=e.data.output||"",O=r.terminalSessionId===e.sessionId,I=r.terminalOutput||"",A=O&&I.length>0&&Y.length>=I.length&&Y.startsWith(I);Bv(Y,e.sessionId,A?"append":"replace"),jr("init")}break;case"usage":break;case"task":e.sessionId===r.selectedId&&(r.currentTask=e.data||null,Xt()),gm(e.sessionId,e.data||null),is(e.sessionId),Eo();break;case"status":if(e.sessionId&&e.data){var B={id:e.sessionId};if(Object.prototype.hasOwnProperty.call(e.data,"status")&&(B.status=e.data.status),Object.prototype.hasOwnProperty.call(e.data,"exitCode")&&(B.exitCode=e.data.exitCode),e.data.structuredState)B.structuredState=e.data.structuredState;else if(Object.prototype.hasOwnProperty.call(e.data,"status")){var i=r.sessions.find(function(q){return q.id===e.sessionId});i&&i.sessionKind==="structured"&&(B.structuredState=Object.assign({},i.structuredState||{},{inFlight:e.data.status==="running"}))}if(Object.prototype.hasOwnProperty.call(e.data,"queuedMessages")&&(B.queuedMessages=e.data.queuedMessages||[],r.queueEpoch++),Object.prototype.hasOwnProperty.call(e.data,"permissionBlocked")&&(B.permissionBlocked=!!e.data.permissionBlocked),e.data.permissionRequest){B.pendingEscalation={scope:e.data.permissionRequest.scope,target:e.data.permissionRequest.target,reason:e.data.permissionRequest.prompt};var z=r.sessions.find(function(U){return U.id===e.sessionId}),ae=z&&(z.summary||z.command)||e.sessionId,ne=e.data.permissionRequest.prompt||"\u9700\u8981\u6743\u9650\u5BA1\u6279",K=e.data.permissionRequest.target,re=ae;K?re+=`
|
|
29
29
|
`+ne+" \xB7 "+K:re+=`
|
|
30
|
-
`+ne,
|
|
30
|
+
`+ne,rr("medium"),hm(e.sessionId,re),e.sessionId!==r.selectedId&&ts({title:"\u9700\u8981\u4F60\u7684\u6388\u6743",body:re,type:"warning",icon:"!",duration:0,actionLabel:"\u53BB\u5904\u7406",action:function(){Dt(e.sessionId)}})}e.data.permissionBlocked===!1&&(B.pendingEscalation=null),e.data.approvalStats&&(B.approvalStats=e.data.approvalStats),$(B),is(e.sessionId),rs(),e.sessionId===r.selectedId&&(Xt(),e.data.approvalStats&&Ol(),B.structuredState&&(B.structuredState.inFlight||(er("Enter \u53D1\u9001 \xB7 Shift+Enter \u6362\u884C"),Xo()),Nr()))}break;case"notification":e.data&&(e.data.kind==="update"?ic(e.data.current||"-",e.data.latest||"-"):e.data.kind==="auto-update-start"?Em(e.data.current||"-",e.data.latest||"-"):(e.data.kind==="auto-update-restart"||e.data.kind==="restart")&&kn());break}}function Xt(){var e=document.getElementById("current-task"),t=document.getElementById("permission-actions"),n=document.getElementById("permission-actions-label");if(e){var i=r.sessions.find(function(v){return v.id===r.selectedId});i&&i.provider==="codex"&&(t&&t.classList.add("hidden"),e.classList.remove("permission-blocked"));var a=i&&i.pendingEscalation?i.pendingEscalation:null,s=i&&i.provider!=="codex"?a||i.permissionBlocked:!1;if(s){var o=i&&i.autoApprovePermissions;if(n)if(o)n.textContent="\u81EA\u52A8\u6279\u51C6\u4E2D...";else if(a){var l=a.reason||"\u7B49\u5F85\u6388\u6743",c=a.target?" \xB7 "+a.target:"";n.textContent=l+c}else n.textContent="\u7B49\u5F85\u6388\u6743";if(t){t.classList.remove("hidden");var d=document.getElementById("approve-permission-btn"),u=document.getElementById("deny-permission-btn");d&&d.classList.toggle("hidden",!!o),u&&u.classList.toggle("hidden",!!o)}e.textContent="",e.classList.add("hidden"),e.classList.remove("permission-blocked");return}e.classList.remove("permission-blocked"),t&&t.classList.add("hidden");var f=r.currentTask;f&&f.title?(e.textContent=f.title,e.classList.remove("hidden")):(e.textContent="",e.classList.add("hidden"))}}function Ol(){var e=document.getElementById("approval-stats");if(e){var t=r.sessions.find(function(a){return a.id===r.selectedId}),n=t&&t.approvalStats;if(!n||n.total===0){e.className="approval-stats hidden",e.innerHTML="";return}e.className="approval-stats",e.innerHTML='<span class="approval-stats-divider"></span><span class="approval-stats-badge" id="approval-stats-badge" title="\u672C\u6B21\u4F1A\u8BDD\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1"><svg class="approval-stats-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg><span class="approval-stats-total">'+n.total+'</span></span><span class="approval-stats-popup" id="approval-stats-popup"><span class="approval-stats-popup-title">\u81EA\u52A8\u6279\u51C6\u7EDF\u8BA1</span>'+(n.command>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("terminal",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u547D\u4EE4\u6267\u884C</span><span class="approval-stats-row-count">'+n.command+"</span></span>":"")+(n.file>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("edit",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u6587\u4EF6\u5199\u5165</span><span class="approval-stats-row-count">'+n.file+"</span></span>":"")+(n.tool>0?'<span class="approval-stats-row"><span class="approval-stats-row-icon">'+J("wrench",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5176\u4ED6\u5DE5\u5177</span><span class="approval-stats-row-count">'+n.tool+"</span></span>":"")+'<span class="approval-stats-row approval-stats-row-total"><span class="approval-stats-row-icon">'+J("sigma",{size:12,strokeWidth:1.8})+'</span><span class="approval-stats-row-label">\u5408\u8BA1</span><span class="approval-stats-row-count">'+n.total+"</span></span></span>";var i=e.querySelector(".approval-stats-badge");i&&(i.classList.remove("approval-stats-pulse"),i.offsetWidth,i.classList.add("approval-stats-pulse"))}}function Cv(){if(rr("light"),!!r.selectedId){var e=document.getElementById("approve-permission-btn"),t=document.getElementById("deny-permission-btn");e&&(e.disabled=!0),t&&(t.disabled=!0),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/approve-permission",{method:"POST",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error){T(n.error,"error");return}$(n),Xt()}).catch(function(n){T(n&&n.message||"\u65E0\u6CD5\u6279\u51C6\u6388\u6743\u3002","error")}).finally(function(){e&&(e.disabled=!1),t&&(t.disabled=!1)})}}function Tv(){if(rr("light"),!!r.selectedId){var e=document.getElementById("approve-permission-btn"),t=document.getElementById("deny-permission-btn");e&&(e.disabled=!0),t&&(t.disabled=!0),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/deny-permission",{method:"POST",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error){T(n.error,"error");return}$(n),Xt()}).catch(function(n){T(n&&n.message||"\u65E0\u6CD5\u62D2\u7EDD\u6388\u6743\u3002","error")}).finally(function(){e&&(e.disabled=!1),t&&(t.disabled=!1)})}}function Lv(){if(r.selectedId){var e=r.sessions.find(function(n){return n.id===r.selectedId});if(e&&e.provider==="codex"){T("Codex \u4F1A\u8BDD\u56FA\u5B9A\u4EE5 full-access PTY \u542F\u52A8\uFF0C\u4E0D\u652F\u6301\u5207\u6362\u81EA\u52A8\u6279\u51C6\u3002","info");return}var t=document.getElementById("auto-approve-toggle");t&&(t.style.opacity="0.5"),fetch("/api/sessions/"+encodeURIComponent(r.selectedId)+"/toggle-auto-approve",{method:"POST",credentials:"same-origin"}).then(function(n){return n.json()}).then(function(n){if(n&&n.error){T(n.error,"error");return}$(n),Pl();var i=n.autoApprovePermissions;T(i?"\u81EA\u52A8\u6279\u51C6\u5DF2\u5F00\u542F":"\u81EA\u52A8\u6279\u51C6\u5DF2\u5173\u95ED","info")}).catch(function(n){T(n&&n.message||"\u65E0\u6CD5\u5207\u6362\u81EA\u52A8\u6279\u51C6\u3002","error")}).finally(function(){t&&(t.style.opacity="")})}}function Pl(){var e=document.getElementById("auto-approve-toggle"),t=r.sessions.find(function(a){return a.id===r.selectedId});if(yo(t)){e&&e.parentNode&&e.parentNode.removeChild(e);return}if(e){var n="composer-pill composer-pill-chip auto-approve-indicator",i=t&&t.autoApprovePermissions;i?(e.className=n+" active",e.title="\u81EA\u52A8\u6279\u51C6\u5DF2\u542F\u7528 \u2014 \u70B9\u51FB\u5173\u95ED",e.innerHTML=J("shieldCheck",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u81EA\u52A8</span>'):(e.className=n,e.title="\u81EA\u52A8\u6279\u51C6\u5DF2\u5173\u95ED \u2014 \u70B9\u51FB\u5F00\u542F",e.innerHTML=J("shield",{size:12,strokeWidth:1.7,cls:"composer-pill-icon"})+'<span class="composer-pill-label">\u624B\u52A8</span>')}}function Bv(e,t,n){return r.terminal?si(t||r.selectedId,e,{mode:n||"append"}):!1}function Hl(){r.pollTimer&&(clearInterval(r.pollTimer),r.pollTimer=null)}function rg(e){r.currentView=e||"terminal",r.currentView!=="terminal"&&(On(!1),al()),ci(),qa();var t=ye();t&&(r.currentMessages=Qe(t,ct(t,t.output,!0))),lt(),r.currentView==="terminal"&&(Wt(!0),r.terminal&&r.terminal.remeasure&&requestAnimationFrame(function(){r.terminal&&r.terminal.remeasure()}))}function He(e){r.renderPending&&!e||(r.renderPending=!0,e?(Dl(!0),r.renderPending=!1):requestAnimationFrame(function(){Dl(!1),r.renderPending=!1}))}var $e=null;function Nr(e){if(!($e&&!e)){if($e&&clearTimeout($e),e){$e=null,He();return}var t=r.sessions.find(function(a){return a.id===r.selectedId}),n=t&&t.status==="running"&&t.sessionKind!=="structured",i=n?vu:mu;$e=setTimeout(function(){$e=null;var a=r.sessions.find(function(s){return s.id===r.selectedId});a&&(r.currentMessages=Qe(a,ct(a,a.output,!0))),He()},i)}}function Mv(e,t){if(!e||!t||t.length===0)return[];function n(w){return w.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,"")}for(var i=n(e),a=[],s=[],o=0;o<t.length;o++)if(t[o].role==="user"){var l="",c=t[o].content;if(typeof c=="string")l=c;else if(Array.isArray(c)){for(var d=0;d<c.length;d++)if(c[d].type==="text"){l=c[d].text;break}}l&&s.push({text:l,index:o})}for(var u=0,o=0;o<s.length;o++){var f=s[o],v=i.indexOf("\u276F "+f.text,u);if(v===-1&&(v=i.indexOf(`
|
|
31
31
|
\u276F `+f.text,u),v!==-1&&(v+=1)),v>u){for(var m=i.substring(u,v),y=m.split(`
|
|
32
|
-
`),g=[],
|
|
33
|
-
`)})}u=v+f.text.length+2}return a}function Ua(e){if(!e)return null;var t=e.querySelector(".chat-messages");return t||(t=document.createElement("div"),t.className="chat-messages",e.appendChild(t),t)}function Dl(e,t){var n=Ua(e);return n?(n.innerHTML=t,pr(),Ye(),n):null}function jl(e){var t=document.getElementById("chat-output");if(!t)return;var n=r.sessions.find(function(R){return R.id===r.selectedId});if(!n){r.lastRenderedEmpty!=="none"&&(Dl(t,'<div class="empty-state"><strong>\u672A\u9009\u62E9\u4F1A\u8BDD</strong><br>\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB\u4F60\u7684\u7B2C\u4E00\u6B21\u5BF9\u8BDD\u3002</div>'),r.lastRenderedEmpty="none",r.lastRenderedMsgCount=0);return}var i=r.currentMessages,a=Yv(i);if(Ja=Gv(i),i.length===0){if(r.lastRenderedEmpty!=="empty"){var s="";ae(n)&&(s='<div class="empty-state-trio-wrap"><div class="empty-state-trio-hint">\u9ED8\u8BA4\u4F1A\u6309\u4EE5\u4E0B\u8BBE\u7F6E\u53D1\u9001\uFF0C\u53EF\u70B9\u51FB\u8C03\u6574\uFF1A</div>'+fa(n,{kind:"dropdown"})+"</div>"),Dl(t,'<div class="empty-state"><strong>\u5BF9\u8BDD\u5DF2\u5F00\u59CB</strong><br>\u5728\u4E0B\u65B9\u8F93\u5165\u6846\u53D1\u9001\u6D88\u606F\uFF0CClaude \u4F1A\u81EA\u52A8\u56DE\u590D\u3002</div>'+s),r.lastRenderedEmpty="empty",r.lastRenderedMsgCount=0}Ri(null,n),Ka([]);return}var o=i.length;o>r.chatRenderedCount&&(r.chatRenderedCount=o);var l=Math.max(0,o-r.chatRenderedCount),d=l>0?i.slice(l):i,c=l>0,u=d.length,f=n.output?n.output.length:0;if(n.messages&&n.messages.length>0){for(var v=0,m=0,y=0;y<n.messages.length;y++){var g=n.messages[y].content;if(g)if(Array.isArray(g)){v+=g.length;for(var b=0;b<g.length;b++){var w=g[b];w.text&&(m+=w.text.length),w.thinking&&(m+=w.thinking.length),w.content&&(m+=w.content.length),w.id&&(m+=w.id.length),w.tool_use_id&&(m+=w.tool_use_id.length),w.description&&(m+=w.description.length),w.input&&(m+=JSON.stringify(w.input).length)}}else v+=1,m=String(g).length}f=u*1e5+v*1e3+m}var k=e||u!==r.lastRenderedMsgCount;if(!k&&u===r.lastRenderedMsgCount&&f===r.lastRenderedHash){var S=t.querySelector(".chat-messages");S&&Ri(S,n),Ka(i);return}var E=r.lastRenderedHash,L=r.lastRenderedMsgCount;r.lastRenderedMsgCount=u,r.lastRenderedHash=f;var S=Ua(t);if(!S)return;var M=Fi(S),D=S.querySelectorAll(".chat-message:not(.system-info)").length,W=k||D===0||u!==D;function Y(){for(var R=Av(n.output,d),de="",Ce=d.slice().reverse(),Q=d.length,Z=0;Z<Ce.length;Z++){for(var xe=Ce[Z],ke=Q-1-Z,x=ke+l,Fe=null,Xe=0;Xe<R.length;Xe++)if(R[Xe].beforeMessage===ke){Fe=R[Xe];break}Fe&&(de+='<div class="chat-message system-info"><div class="system-info-card"><div class="system-info-header">\u2139\uFE0F \u7CFB\u7EDF\u4FE1\u606F</div><div class="system-info-content">'+p(Fe.content)+"</div></div></div>"),de+=Ga(xe,C[x]||null,x,a)}c&&(de+='<div class="chat-load-more" id="chat-load-more-sentinel"><button class="chat-load-more-btn" type="button">\u52A0\u8F7D\u66F4\u65E9\u7684 '+Math.min(r.chatPageSize,l)+" \u6761\u6D88\u606F</button></div>");var Ze=-1,et=0;if(D>0&&!M)for(var ut=S.getBoundingClientRect().top,We=S.querySelectorAll(".chat-message:not(.system-info)"),_e=0;_e<We.length;_e++){var De=We[_e].getBoundingClientRect();if(De.bottom>=ut){var ie=We[_e].getAttribute("data-msg-index");ie!=null&&(Ze=parseInt(ie,10),et=De.top-ut);break}}if(S.innerHTML=de,(function(){for(var tn=S.querySelectorAll(".chat-message:not(.system-info)"),Mt=tn.length,wt=0;wt<Mt;wt++)tn[wt].setAttribute("data-msg-index",String(l+Mt-1-wt))})(),L===0&&!r.chatInitialRenderDone)S.scrollTop=0,r.chatStickToBottom=!0,fr({removeDivider:!0}),r.chatInitialRenderDone=!0;else if(L===0&&r.chatStickToBottom)S.scrollTop=0;else if(M)S.scrollTop=0;else if(Ze>=0){var Oe=S.querySelector('.chat-message[data-msg-index="'+Ze+'"]');if(Oe){var tt=S.getBoundingClientRect().top,ft=Oe.getBoundingClientRect(),yt=ft.top-tt-et;Math.abs(yt)>.5&&(r.chatIsProgrammaticScroll=!0,S.scrollTop+=yt,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1}))}}Nl(S),pr(),Vi(S);var st=S.querySelector(".chat-message:not(.system-info)");if(st){var Pe=st.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]");if(Pe.length>0){var zt=Pe[0],xn=Dn(zt);rt(xn)===null&&zt.classList.remove("collapsed");for(var pt=1;pt<Pe.length;pt++){var en=Dn(Pe[pt]);if(rt(en)===null){if(Pe[pt].classList.contains("ask-user")&&!Pe[pt].classList.contains("ask-user-answered"))continue;Pe[pt].classList.add("collapsed")}}}}requestAnimationFrame(function(){Wi(S),Ye(),Md()})}function O(R,de){var Ce=R.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]");Ce.forEach(function(Q){var Z=Dn(Q);if(rt(Z)===null&&!(Q.classList.contains("ask-user")&&!Q.classList.contains("ask-user-answered"))){if(de){for(var xe=0;xe<de.length;xe++)if(de[xe].contains(Q))return}Q.classList.add("collapsed")}})}var C={};if((function(){for(var R={inputTokens:0,outputTokens:0,cacheReadInputTokens:0,totalCostUsd:0},de=-1,Ce=0;Ce<i.length;Ce++){var Q=i[Ce];if(Q.role==="user")de>=0&&(R.inputTokens>0||R.outputTokens>0||R.totalCostUsd>0)&&(C[de]={inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadInputTokens:R.cacheReadInputTokens,totalCostUsd:R.totalCostUsd}),R={inputTokens:0,outputTokens:0,cacheReadInputTokens:0,totalCostUsd:0},de=-1;else if(Q.role==="assistant"&&Q.usage){var Z=Q.usage;R.inputTokens+=Z.inputTokens||0,R.outputTokens+=Z.outputTokens||0,R.cacheReadInputTokens+=Z.cacheReadInputTokens||0,R.totalCostUsd+=Z.totalCostUsd||0,de=Ce}else Q.role==="assistant"&&(de=Ce)}de>=0&&(R.inputTokens>0||R.outputTokens>0||R.totalCostUsd>0)&&(C[de]={inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadInputTokens:R.cacheReadInputTokens,totalCostUsd:R.totalCostUsd})})(),W)Y();else if(u>D){var A=d.slice(D);A.reverse();for(var B=document.createDocumentFragment(),z=[],se=[],ne=l+D,K=0;K<A.length;K++){var re=document.createElement("div"),U=l+D+(A.length-1-K);re.innerHTML=Ga(A[K],C[U]||null,U,a);var q=re.firstElementChild;q&&(q.classList.add("animate-in"),q.setAttribute("data-msg-index",String(U)),z.push(q),se.push(U),B.appendChild(q))}S.insertBefore(B,S.firstChild),pr(),Nl(S),Vi(S),O(S,z),M?requestAnimationFrame(function(){S.isConnected&&Math.abs(S.scrollTop)>1&&(r.chatIsProgrammaticScroll=!0,S.scrollTop=0,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1})),fr({removeDivider:!0}),Ye()}):(r.chatUnreadStartIndex<0&&(r.chatUnreadStartIndex=ne),r.chatUnreadCount+=z.length,Wi(S),Ye())}else if(u===D&&f!==E){for(var N=Array.from(S.querySelectorAll(".chat-message:not(.system-info)")),V=d.slice().reverse(),te=!1,X=Math.min(4,V.length,N.length),oe=0;oe<X;oe++){var le=N[oe],ce=document.createElement("div"),ue=l+V.length-1-oe;ce.innerHTML=Ga(V[oe],C[ue]||null,ue,a);var Se=ce.firstElementChild;if(Se){if(le.innerHTML!==Se.innerHTML||le.className!==Se.className)S.replaceChild(Se,le),qv(Se),te=!0;else if(oe>0)break}}if(!te&&V.length>X&&Y(),te){pr(),Vi(S),requestAnimationFrame(function(){M&&S.isConnected&&Math.abs(S.scrollTop)>1&&(r.chatIsProgrammaticScroll=!0,S.scrollTop=0,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1})),Wi(S),Ye()});var Ie=S.querySelector(".chat-message"),qe=S.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]"),H=null;qe.forEach(function(R){var de=Dn(R);rt(de)===null&&(R.classList.contains("ask-user")&&!R.classList.contains("ask-user-answered")||(Ie&&Ie.contains(R)?H?R.classList.add("collapsed"):H=R:R.classList.add("collapsed")))})}}else u<D&&Y();tu(S),Ri(S,n),Ka(i)}var Va=!1;document.addEventListener("click",function(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest("#todo-progress-toggle");if(n){e.preventDefault(),e.stopPropagation(),Va=!Va;var i=document.getElementById("todo-progress"),a=document.getElementById("todo-progress-body");i&&a&&(Va?(i.classList.add("expanded"),a.classList.add("expanded")):(i.classList.remove("expanded"),a.classList.remove("expanded")))}}});function Ka(e){for(var t=0,n=e.length-1;n>=0;n--)if(e[n]&&e[n].role==="user"){t=n+1;break}for(var i=null,a=e.length-1;a>=t;a--){var s=e[a];if(!(!s.content||!Array.isArray(s.content))){for(var o=s.content.length-1;o>=0;o--){var l=s.content[o];if(l.type==="tool_use"&&l.name==="TodoWrite"&&l.input&&l.input.todos){i=l.input.todos;break}}if(i)break}}var d=document.getElementById("todo-progress"),c=document.getElementById("todo-progress-body");if(d){if(!i||i.length===0){d.classList.add("hidden"),c&&c.classList.add("hidden");return}d.classList.remove("hidden"),c&&c.classList.remove("hidden");for(var u=0,f=0,v="",m=0;m<i.length;m++)i[m].status==="completed"&&u++,i[m].status==="in_progress"&&(f++,v||(v=i[m].activeForm||i[m].content||""));var y=u===i.length,g=y?i.length:Math.min(u+1,i.length);if(y){d.classList.add("hidden"),c&&c.classList.add("hidden");return}else d.classList.remove("all-done");var b=document.getElementById("todo-progress-counter");b&&(b.textContent=g+"/"+i.length);var w=document.getElementById("todo-progress-task");w&&(w.textContent=v);var k=document.getElementById("todo-progress-ring");if(k){var E=i.length>0?g/i.length:0;k.style.setProperty("--progress",E.toFixed(3))}var L=document.getElementById("todo-progress-list");if(L){for(var S="",M=0;M<i.length;M++){var D=i[M],W=D.status||"pending",Y=W==="in_progress"?"active":W==="completed"?"done":"",O=W==="in_progress"?"active":W==="completed"?"done":"pending",C=W==="completed"?"\u2713":W==="in_progress"?"\u203A":"\u25CB";S+='<li class="todo-progress-item '+Y+'"><span class="todo-item-icon '+O+'">'+C+"</span><span>"+p(D.content||"")+"</span></li>"}L.innerHTML=S}r.selectedId&&is(r.selectedId)}}function qv(e){e.querySelectorAll(".code-copy").forEach(function(t){t.addEventListener("click",function(){var n=t.closest(".code-block"),i=n?n.querySelector("code"):null;i&&Xn(i.textContent||"",null,function(){t.textContent="Copied!",t.classList.add("copied"),setTimeout(function(){t.textContent="Copy",t.classList.remove("copied")},2e3)})})})}function Nl(e){e.querySelectorAll(".code-copy").forEach(function(t){var n=t.cloneNode(!0);t.parentNode.replaceChild(n,t),n.addEventListener("click",function(){var i=n.closest(".code-block"),a=i?i.querySelector("code"):null;a&&Xn(a.textContent||"",null,function(){n.textContent="Copied!",n.classList.add("copied"),setTimeout(function(){n.textContent="Copy",n.classList.remove("copied")},2e3)})})}),Ov(e)}var ag={timer:null,activeBtn:null};function Ov(e){var t=window.matchMedia("(pointer: coarse)").matches;t&&e.querySelectorAll(".chat-message").forEach(function(n){if(!n.querySelector(".msg-copy-btn")){var i=n.querySelector(".chat-message-bubble");if(i){var a=document.createElement("button");a.className="msg-copy-btn",a.textContent="\u590D\u5236",a.addEventListener("click",function(s){s.stopPropagation();var o=i.innerText||i.textContent||"";Xn(o.trim(),null,function(){a.textContent="\u5DF2\u590D\u5236",a.classList.add("copied"),setTimeout(function(){a.textContent="\u590D\u5236",a.classList.remove("copied"),a.classList.remove("visible")},1500)})}),n.appendChild(a)}}})}(function(){var t=window.matchMedia("(pointer: coarse)").matches;if(t){var n=null,i=0;document.addEventListener("touchstart",function(a){var s=a.target.closest(".chat-message");if(s){var o=s.querySelector(".chat-message-bubble");o&&(i=a.touches[0].clientY,n=setTimeout(function(){var l=s.querySelector(".msg-copy-btn");l&&(document.querySelectorAll(".msg-copy-btn.visible").forEach(function(d){d.classList.remove("visible")}),l.classList.add("visible"))},500))}},{passive:!0}),document.addEventListener("touchmove",function(a){n&&Math.abs(a.touches[0].clientY-i)>10&&(clearTimeout(n),n=null)},{passive:!0}),document.addEventListener("touchend",function(){n&&(clearTimeout(n),n=null)},{passive:!0}),document.addEventListener("click",function(a){a.target.closest(".msg-copy-btn")||document.querySelectorAll(".msg-copy-btn.visible").forEach(function(s){s.classList.remove("visible")})})}})();function Pv(e){if(!e)return!1;var t=String(e).trim();return t?!!(t.indexOf("\u2500\u2500\u2500\u2500")===0||t==="\u276F"||t==="\u203A"||/^[╭╰│┌└┐┘├┤┬┴┼─═]{2,}$/.test(t)||/^[▁▂▃▄▅▆▇█▔▕▏▐]+$/.test(t)||t.indexOf("esc to interrupt")!==-1||t.indexOf("Claude Code v")!==-1||/^Sonnet\b/.test(t)||t.indexOf("Failed to install Anthropic")!==-1||t.indexOf("Claude Code has switched")!==-1||t.indexOf("? for shortcuts")!==-1||t.indexOf("Claude is waiting")!==-1||t.indexOf("[wand]")!==-1||t.indexOf("0;")===0||t.indexOf("9;")===0||t.indexOf("ctrl+g")!==-1||t.indexOf("/effort")!==-1||/^Using .* for .* session/.test(t)||t.indexOf("Press ")===0&&t.indexOf(" for")!==-1||t.indexOf("type ")===0&&t.indexOf(" to ")!==-1||t.indexOf("auto mode is unavailable")!==-1||/MCP server.*failed/i.test(t)||t.indexOf("Germinating")!==-1||t.indexOf("Doodling")!==-1||t.indexOf("Brewing")!==-1||t.indexOf("Permissions")!==-1&&t.indexOf("mode")!==-1||t.indexOf("\u25CF")===0&&t.indexOf("\xB7")!==-1||t.indexOf("[>")===0||t.indexOf("[<")===0||t.indexOf("Captured Claude session ID")!==-1||/^>_\s*OpenAI Codex\b/.test(t)||/^OpenAI Codex\b/i.test(t)||/^(model|directory):\s+/i.test(t)||/^(tip|context):\s+/i.test(t)||/^work(tree|space):\s+/i.test(t)||/^(approvals?|sandbox|provider|session id):\s+/i.test(t)||/^(thinking|working)(\.\.\.|…)?$/i.test(t)||/^[•◦·]\s+Working\b/i.test(t)||/^[•◦·]\s+(Running|Planning|Applying|Reading|Searching)\b/i.test(t)||/^[•◦·]\s+(Inspecting|Reviewing|Summarizing|Editing|Updating|Writing)\b/i.test(t)||/^[•◦·]\s+Completed\b/i.test(t)||/^(ctrl|enter|tab|shift|esc|alt)\+/i.test(t)||/\b(open|close|toggle) (chat|terminal)\b/i.test(t)||/\b(approve|deny)\b.*\b(permission|approval)\b/i.test(t)||/^(use|press) .* (to|for) .*/i.test(t)||/^(?:token|context window|remaining context|conversation):\s+/i.test(t)||/^(?:cwd|path):\s+\//i.test(t)||/^[<>│┆╎].*[<>│┆╎]$/.test(t)&&t.length<8):!1}function Hv(e){return String(e||"").replace(/\x1b\][^\x07]*(\x07|\x1b\\)/g,"").replace(/\x1b\[(\d+)C/g,function(t,n){return" ".repeat(Number(n)||1)}).replace(/\x1b\[[0-9;?]*[AB]/g,`
|
|
32
|
+
`),g=[],d=0;d<y.length;d++){var b=y[d].trim();!b||b.startsWith("\u2500\u2500\u2500\u2500")||b==="\u276F"||b==="?"||b===""||b.includes("Claude Code v")||b.includes("Opus")&&b.includes("with")||b.includes("Sonnet")&&b.includes("with")||b.includes("API Usage")||b.includes("Billing")||b.includes("for shortcuts")||b.includes("/effort")||b.match(/^[▸▐▝▘▗▖█▌▍▎▏▔▁▂▃▄▅▆▇██]/)||b.match(/^[▸▐▝▘▗▖█▌▍▎▏▔▁▂▃▄▅▆▇██]{3,}/)||b.length>3&&g.push(b)}g.length>0&&a.push({beforeMessage:f.index,content:g.join(`
|
|
33
|
+
`)})}u=v+f.text.length+2}return a}function Ua(e){if(!e)return null;var t=e.querySelector(".chat-messages");return t||(t=document.createElement("div"),t.className="chat-messages",e.appendChild(t),t)}function _l(e,t){var n=Ua(e);return n?(n.innerHTML=t,fr(),Ye(),n):null}function Dl(e){var t=document.getElementById("chat-output");if(!t)return;var n=r.sessions.find(function(R){return R.id===r.selectedId});if(!n){r.lastRenderedEmpty!=="none"&&(_l(t,'<div class="empty-state"><strong>\u672A\u9009\u62E9\u4F1A\u8BDD</strong><br>\u70B9\u51FB\u4E0A\u65B9\u300C\u65B0\u5BF9\u8BDD\u300D\u5F00\u59CB\u4F60\u7684\u7B2C\u4E00\u6B21\u5BF9\u8BDD\u3002</div>'),r.lastRenderedEmpty="none",r.lastRenderedMsgCount=0);return}var i=r.currentMessages,a=Jv(i);if(Ja=Yv(i),i.length===0){if(r.lastRenderedEmpty!=="empty"){var s="";se(n)&&(s='<div class="empty-state-trio-wrap"><div class="empty-state-trio-hint">\u9ED8\u8BA4\u4F1A\u6309\u4EE5\u4E0B\u8BBE\u7F6E\u53D1\u9001\uFF0C\u53EF\u70B9\u51FB\u8C03\u6574\uFF1A</div>'+fa(n,{kind:"dropdown"})+"</div>"),_l(t,'<div class="empty-state"><strong>\u5BF9\u8BDD\u5DF2\u5F00\u59CB</strong><br>\u5728\u4E0B\u65B9\u8F93\u5165\u6846\u53D1\u9001\u6D88\u606F\uFF0CClaude \u4F1A\u81EA\u52A8\u56DE\u590D\u3002</div>'+s),r.lastRenderedEmpty="empty",r.lastRenderedMsgCount=0}Ri(null,n),Ka([]);return}var o=i.length;o>r.chatRenderedCount&&(r.chatRenderedCount=o);var l=Math.max(0,o-r.chatRenderedCount),c=l>0?i.slice(l):i,d=l>0,u=c.length,f=n.output?n.output.length:0;if(n.messages&&n.messages.length>0){for(var v=0,m=0,y=0;y<n.messages.length;y++){var g=n.messages[y].content;if(g)if(Array.isArray(g)){v+=g.length;for(var b=0;b<g.length;b++){var w=g[b];w.text&&(m+=w.text.length),w.thinking&&(m+=w.thinking.length),w.content&&(m+=w.content.length),w.id&&(m+=w.id.length),w.tool_use_id&&(m+=w.tool_use_id.length),w.description&&(m+=w.description.length),w.input&&(m+=JSON.stringify(w.input).length)}}else v+=1,m=String(g).length}f=u*1e5+v*1e3+m}var k=e||u!==r.lastRenderedMsgCount;if(!k&&u===r.lastRenderedMsgCount&&f===r.lastRenderedHash){var S=t.querySelector(".chat-messages");S&&Ri(S,n),Ka(i);return}var E=r.lastRenderedHash,L=r.lastRenderedMsgCount;r.lastRenderedMsgCount=u,r.lastRenderedHash=f;var S=Ua(t);if(!S)return;var M=Fi(S),_=S.querySelectorAll(".chat-message:not(.system-info)").length,W=k||_===0||u!==_;function Y(){for(var R=Mv(n.output,c),ce="",Ce=c.slice().reverse(),Q=c.length,Z=0;Z<Ce.length;Z++){for(var xe=Ce[Z],we=Q-1-Z,x=we+l,Fe=null,Xe=0;Xe<R.length;Xe++)if(R[Xe].beforeMessage===we){Fe=R[Xe];break}Fe&&(ce+='<div class="chat-message system-info"><div class="system-info-card"><div class="system-info-header">\u2139\uFE0F \u7CFB\u7EDF\u4FE1\u606F</div><div class="system-info-content">'+p(Fe.content)+"</div></div></div>"),ce+=Ga(xe,I[x]||null,x,a)}d&&(ce+='<div class="chat-load-more" id="chat-load-more-sentinel"><button class="chat-load-more-btn" type="button">\u52A0\u8F7D\u66F4\u65E9\u7684 '+Math.min(r.chatPageSize,l)+" \u6761\u6D88\u606F</button></div>");var Ze=-1,et=0;if(_>0&&!M)for(var ut=S.getBoundingClientRect().top,We=S.querySelectorAll(".chat-message:not(.system-info)"),_e=0;_e<We.length;_e++){var De=We[_e].getBoundingClientRect();if(De.bottom>=ut){var ie=We[_e].getAttribute("data-msg-index");ie!=null&&(Ze=parseInt(ie,10),et=De.top-ut);break}}if(S.innerHTML=ce,(function(){for(var tn=S.querySelectorAll(".chat-message:not(.system-info)"),Mt=tn.length,wt=0;wt<Mt;wt++)tn[wt].setAttribute("data-msg-index",String(l+Mt-1-wt))})(),L===0&&!r.chatInitialRenderDone)S.scrollTop=0,r.chatStickToBottom=!0,ur({removeDivider:!0}),r.chatInitialRenderDone=!0;else if(L===0&&r.chatStickToBottom)S.scrollTop=0;else if(M)S.scrollTop=0;else if(Ze>=0){var Oe=S.querySelector('.chat-message[data-msg-index="'+Ze+'"]');if(Oe){var tt=S.getBoundingClientRect().top,ft=Oe.getBoundingClientRect(),yt=ft.top-tt-et;Math.abs(yt)>.5&&(r.chatIsProgrammaticScroll=!0,S.scrollTop+=yt,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1}))}}jl(S),fr(),Vi(S);var st=S.querySelector(".chat-message:not(.system-info)");if(st){var Pe=st.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]");if(Pe.length>0){var zt=Pe[0],xn=Dn(zt);rt(xn)===null&&zt.classList.remove("collapsed");for(var pt=1;pt<Pe.length;pt++){var en=Dn(Pe[pt]);if(rt(en)===null){if(Pe[pt].classList.contains("ask-user")&&!Pe[pt].classList.contains("ask-user-answered"))continue;Pe[pt].classList.add("collapsed")}}}}requestAnimationFrame(function(){Wi(S),Ye(),Bc()})}function O(R,ce){var Ce=R.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]");Ce.forEach(function(Q){var Z=Dn(Q);if(rt(Z)===null&&!(Q.classList.contains("ask-user")&&!Q.classList.contains("ask-user-answered"))){if(ce){for(var xe=0;xe<ce.length;xe++)if(ce[xe].contains(Q))return}Q.classList.add("collapsed")}})}var I={};if((function(){for(var R={inputTokens:0,outputTokens:0,cacheReadInputTokens:0,totalCostUsd:0},ce=-1,Ce=0;Ce<i.length;Ce++){var Q=i[Ce];if(Q.role==="user")ce>=0&&(R.inputTokens>0||R.outputTokens>0||R.totalCostUsd>0)&&(I[ce]={inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadInputTokens:R.cacheReadInputTokens,totalCostUsd:R.totalCostUsd}),R={inputTokens:0,outputTokens:0,cacheReadInputTokens:0,totalCostUsd:0},ce=-1;else if(Q.role==="assistant"&&Q.usage){var Z=Q.usage;R.inputTokens+=Z.inputTokens||0,R.outputTokens+=Z.outputTokens||0,R.cacheReadInputTokens+=Z.cacheReadInputTokens||0,R.totalCostUsd+=Z.totalCostUsd||0,ce=Ce}else Q.role==="assistant"&&(ce=Ce)}ce>=0&&(R.inputTokens>0||R.outputTokens>0||R.totalCostUsd>0)&&(I[ce]={inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadInputTokens:R.cacheReadInputTokens,totalCostUsd:R.totalCostUsd})})(),W)Y();else if(u>_){var A=c.slice(_);A.reverse();for(var B=document.createDocumentFragment(),z=[],ae=[],ne=l+_,K=0;K<A.length;K++){var re=document.createElement("div"),U=l+_+(A.length-1-K);re.innerHTML=Ga(A[K],I[U]||null,U,a);var q=re.firstElementChild;q&&(q.classList.add("animate-in"),q.setAttribute("data-msg-index",String(U)),z.push(q),ae.push(U),B.appendChild(q))}S.insertBefore(B,S.firstChild),fr(),jl(S),Vi(S),O(S,z),M?requestAnimationFrame(function(){S.isConnected&&Math.abs(S.scrollTop)>1&&(r.chatIsProgrammaticScroll=!0,S.scrollTop=0,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1})),ur({removeDivider:!0}),Ye()}):(r.chatUnreadStartIndex<0&&(r.chatUnreadStartIndex=ne),r.chatUnreadCount+=z.length,Wi(S),Ye())}else if(u===_&&f!==E){for(var N=Array.from(S.querySelectorAll(".chat-message:not(.system-info)")),V=c.slice().reverse(),te=!1,X=Math.min(4,V.length,N.length),oe=0;oe<X;oe++){var le=N[oe],de=document.createElement("div"),ue=l+V.length-1-oe;de.innerHTML=Ga(V[oe],I[ue]||null,ue,a);var Se=de.firstElementChild;if(Se){if(le.innerHTML!==Se.innerHTML||le.className!==Se.className)S.replaceChild(Se,le),Av(Se),te=!0;else if(oe>0)break}}if(!te&&V.length>X&&Y(),te){fr(),Vi(S),requestAnimationFrame(function(){M&&S.isConnected&&Math.abs(S.scrollTop)>1&&(r.chatIsProgrammaticScroll=!0,S.scrollTop=0,requestAnimationFrame(function(){r.chatIsProgrammaticScroll=!1})),Wi(S),Ye()});var Ie=S.querySelector(".chat-message"),qe=S.querySelectorAll(".tool-use-card, .inline-diff[data-expand-key]"),H=null;qe.forEach(function(R){var ce=Dn(R);rt(ce)===null&&(R.classList.contains("ask-user")&&!R.classList.contains("ask-user-answered")||(Ie&&Ie.contains(R)?H?R.classList.add("collapsed"):H=R:R.classList.add("collapsed")))})}}else u<_&&Y();eu(S),Ri(S,n),Ka(i)}var Va=!1;document.addEventListener("click",function(e){var t=e.target;if(!(!t||!(t instanceof Element))){var n=t.closest("#todo-progress-toggle");if(n){e.preventDefault(),e.stopPropagation(),Va=!Va;var i=document.getElementById("todo-progress"),a=document.getElementById("todo-progress-body");i&&a&&(Va?(i.classList.add("expanded"),a.classList.add("expanded")):(i.classList.remove("expanded"),a.classList.remove("expanded")))}}});function Ka(e){for(var t=0,n=e.length-1;n>=0;n--)if(e[n]&&e[n].role==="user"){t=n+1;break}for(var i=null,a=e.length-1;a>=t;a--){var s=e[a];if(!(!s.content||!Array.isArray(s.content))){for(var o=s.content.length-1;o>=0;o--){var l=s.content[o];if(l.type==="tool_use"&&l.name==="TodoWrite"&&l.input&&l.input.todos){i=l.input.todos;break}}if(i)break}}var c=document.getElementById("todo-progress"),d=document.getElementById("todo-progress-body");if(c){if(!i||i.length===0){c.classList.add("hidden"),d&&d.classList.add("hidden");return}c.classList.remove("hidden"),d&&d.classList.remove("hidden");for(var u=0,f=0,v="",m=0;m<i.length;m++)i[m].status==="completed"&&u++,i[m].status==="in_progress"&&(f++,v||(v=i[m].activeForm||i[m].content||""));var y=u===i.length,g=y?i.length:Math.min(u+1,i.length);if(y){c.classList.add("hidden"),d&&d.classList.add("hidden");return}else c.classList.remove("all-done");var b=document.getElementById("todo-progress-counter");b&&(b.textContent=g+"/"+i.length);var w=document.getElementById("todo-progress-task");w&&(w.textContent=v);var k=document.getElementById("todo-progress-ring");if(k){var E=i.length>0?g/i.length:0;k.style.setProperty("--progress",E.toFixed(3))}var L=document.getElementById("todo-progress-list");if(L){for(var S="",M=0;M<i.length;M++){var _=i[M],W=_.status||"pending",Y=W==="in_progress"?"active":W==="completed"?"done":"",O=W==="in_progress"?"active":W==="completed"?"done":"pending",I=W==="completed"?"\u2713":W==="in_progress"?"\u203A":"\u25CB";S+='<li class="todo-progress-item '+Y+'"><span class="todo-item-icon '+O+'">'+I+"</span><span>"+p(_.content||"")+"</span></li>"}L.innerHTML=S}r.selectedId&&is(r.selectedId)}}function Av(e){e.querySelectorAll(".code-copy").forEach(function(t){t.addEventListener("click",function(){var n=t.closest(".code-block"),i=n?n.querySelector("code"):null;i&&Tr(i.textContent||"",null,function(){t.textContent="Copied!",t.classList.add("copied"),setTimeout(function(){t.textContent="Copy",t.classList.remove("copied")},2e3)})})})}function jl(e){e.querySelectorAll(".code-copy").forEach(function(t){var n=t.cloneNode(!0);t.parentNode.replaceChild(n,t),n.addEventListener("click",function(){var i=n.closest(".code-block"),a=i?i.querySelector("code"):null;a&&Tr(a.textContent||"",null,function(){n.textContent="Copied!",n.classList.add("copied"),setTimeout(function(){n.textContent="Copy",n.classList.remove("copied")},2e3)})})}),qv(e)}var ig={timer:null,activeBtn:null};function qv(e){var t=window.matchMedia("(pointer: coarse)").matches;t&&e.querySelectorAll(".chat-message").forEach(function(n){if(!n.querySelector(".msg-copy-btn")){var i=n.querySelector(".chat-message-bubble");if(i){var a=document.createElement("button");a.className="msg-copy-btn",a.textContent="\u590D\u5236",a.addEventListener("click",function(s){s.stopPropagation();var o=i.innerText||i.textContent||"";Tr(o.trim(),null,function(){a.textContent="\u5DF2\u590D\u5236",a.classList.add("copied"),setTimeout(function(){a.textContent="\u590D\u5236",a.classList.remove("copied"),a.classList.remove("visible")},1500)})}),n.appendChild(a)}}})}(function(){var t=window.matchMedia("(pointer: coarse)").matches;if(t){var n=null,i=0;document.addEventListener("touchstart",function(a){var s=a.target.closest(".chat-message");if(s){var o=s.querySelector(".chat-message-bubble");o&&(i=a.touches[0].clientY,n=setTimeout(function(){var l=s.querySelector(".msg-copy-btn");l&&(document.querySelectorAll(".msg-copy-btn.visible").forEach(function(c){c.classList.remove("visible")}),l.classList.add("visible"))},500))}},{passive:!0}),document.addEventListener("touchmove",function(a){n&&Math.abs(a.touches[0].clientY-i)>10&&(clearTimeout(n),n=null)},{passive:!0}),document.addEventListener("touchend",function(){n&&(clearTimeout(n),n=null)},{passive:!0}),document.addEventListener("click",function(a){a.target.closest(".msg-copy-btn")||document.querySelectorAll(".msg-copy-btn.visible").forEach(function(s){s.classList.remove("visible")})})}})();function Ov(e){if(!e)return!1;var t=String(e).trim();return t?!!(t.indexOf("\u2500\u2500\u2500\u2500")===0||t==="\u276F"||t==="\u203A"||/^[╭╰│┌└┐┘├┤┬┴┼─═]{2,}$/.test(t)||/^[▁▂▃▄▅▆▇█▔▕▏▐]+$/.test(t)||t.indexOf("esc to interrupt")!==-1||t.indexOf("Claude Code v")!==-1||/^Sonnet\b/.test(t)||t.indexOf("Failed to install Anthropic")!==-1||t.indexOf("Claude Code has switched")!==-1||t.indexOf("? for shortcuts")!==-1||t.indexOf("Claude is waiting")!==-1||t.indexOf("[wand]")!==-1||t.indexOf("0;")===0||t.indexOf("9;")===0||t.indexOf("ctrl+g")!==-1||t.indexOf("/effort")!==-1||/^Using .* for .* session/.test(t)||t.indexOf("Press ")===0&&t.indexOf(" for")!==-1||t.indexOf("type ")===0&&t.indexOf(" to ")!==-1||t.indexOf("auto mode is unavailable")!==-1||/MCP server.*failed/i.test(t)||t.indexOf("Germinating")!==-1||t.indexOf("Doodling")!==-1||t.indexOf("Brewing")!==-1||t.indexOf("Permissions")!==-1&&t.indexOf("mode")!==-1||t.indexOf("\u25CF")===0&&t.indexOf("\xB7")!==-1||t.indexOf("[>")===0||t.indexOf("[<")===0||t.indexOf("Captured Claude session ID")!==-1||/^>_\s*OpenAI Codex\b/.test(t)||/^OpenAI Codex\b/i.test(t)||/^(model|directory):\s+/i.test(t)||/^(tip|context):\s+/i.test(t)||/^work(tree|space):\s+/i.test(t)||/^(approvals?|sandbox|provider|session id):\s+/i.test(t)||/^(thinking|working)(\.\.\.|…)?$/i.test(t)||/^[•◦·]\s+Working\b/i.test(t)||/^[•◦·]\s+(Running|Planning|Applying|Reading|Searching)\b/i.test(t)||/^[•◦·]\s+(Inspecting|Reviewing|Summarizing|Editing|Updating|Writing)\b/i.test(t)||/^[•◦·]\s+Completed\b/i.test(t)||/^(ctrl|enter|tab|shift|esc|alt)\+/i.test(t)||/\b(open|close|toggle) (chat|terminal)\b/i.test(t)||/\b(approve|deny)\b.*\b(permission|approval)\b/i.test(t)||/^(use|press) .* (to|for) .*/i.test(t)||/^(?:token|context window|remaining context|conversation):\s+/i.test(t)||/^(?:cwd|path):\s+\//i.test(t)||/^[<>│┆╎].*[<>│┆╎]$/.test(t)&&t.length<8):!1}function Pv(e){return String(e||"").replace(/\x1b\][^\x07]*(\x07|\x1b\\)/g,"").replace(/\x1b\[(\d+)C/g,function(t,n){return" ".repeat(Number(n)||1)}).replace(/\x1b\[[0-9;?]*[AB]/g,`
|
|
34
34
|
`).replace(/\x1b\[[0-9;?]*[su]/g,"").replace(/\x1b\[[0-9;?]*[HfJKr]/g,`
|
|
35
35
|
`).replace(/\x1bM/g,`
|
|
36
36
|
`).replace(/\x1b\[[0-9;?]*[ST]/g,`
|
|
@@ -38,17 +38,17 @@ if("serviceWorker"in navigator){fetch("/sw.js",{cache:"no-cache"}).then(function
|
|
|
38
38
|
`).replace(/[ \t]+\n/g,`
|
|
39
39
|
`).replace(/\n{3,}/g,`
|
|
40
40
|
|
|
41
|
-
`)}function
|
|
42
|
-
`,s="\r",o="\x1B";if(/^codex\b/.test(String(t||"").trim())){let fe=function(F){return String(F||"").replace(/\x1b\][^\x07]*(\x07|\x1b\\)/g,"").replace(/\x1b\[(\d+)C/g,function(j,G){return" ".repeat(Number(G)||1)}).replace(/\x1b\[[0-9;?]*[AB]/g,a).replace(/\x1b\[[0-9;?]*[su]/g,"").replace(/\x1b\[[0-9;?]*[HfJKr]/g,a).replace(/\x1bM/g,a).replace(/\x1b\[[0-9;?]*[ST]/g,a).replace(/\x1b\[[0-9;?]*[a-zA-Z]/g,"").replace(/\x1b[><=ePX^_]/g,"").replace(/[\u00a0\u200b-\u200d\ufeff]/g," ").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g,"").replace(/[ \t]+\n/g,a)},ot=function(F){return String(F||"").replace(/\s+/g," ").replace(/[M]+$/g,"").trim()},ee=function(F){return String(F||"").replace(/^›\s*/,"").replace(/^>\s*/,"").trim()},Te=function(F){var j=String(F||"").trim();return!!(!j||Pv(j)||l.test(j)||/^[╭╰│┌└┐┘├┤┬┴┼─═]/.test(j)||/^\[>[0-9;?]*u$/i.test(j)||/^M+$/i.test(j)||/^(?:OpenAI Codex|Codex)\b/i.test(j)||/^(?:tokens?|context window|remaining context|approvals?|sandbox|provider|session id):\s*/i.test(j)||/^(?:thinking|working)\s*(?:\.\.\.|…)?$/i.test(j)||/^[•◦·]\s+(?:thinking|working|running|planning|applying|reading|searching|inspecting|reviewing|summarizing|editing|updating|writing|completed)\b/i.test(j)||/^(?:model|directory|tip|context|cwd|path):\s+/i.test(j))},Le=function(F){var j=String(F||"").trim();if(!/^›(?:\s|$)/.test(j)||l.test(j))return null;var G=ot(ee(j));return!G||Te(G)?null:G},kt=function(F){var j=String(F||"").trim();if(!/^[•◦·⏺]/.test(j))return null;var G=j.replace(/^[•◦·]\s*/,"").replace(/^⏺\s+/,"").replace(/^│\s*/,"").trim();return!G||/^[•◦·⏺]$/.test(G)||(G=G.replace(/\s*\(\d+[smh]?\s*•\s*esc to interrupt\)[\s\S]*$/i,"").replace(/(?:[a-z]{1,6})?›[\s\S]*$/,"").replace(/\s{2,}gpt-\d[\s\S]*$/i,"").replace(/\b(?:OpenAI Codex|model:|directory:|Tip:)\b[\s\S]*$/i,""),G=ot(G),!G||G.length<2||d.test(G)||Te(G))?null:G},vt=function(F){var j=ot(F);return!j||Te(j)||/^[•◦·⏺›]/.test(j)||/^[\[\]<>0-9;?]+u?$/i.test(j)||/^[╭╰│┌└┐┘├┤┬┴┼─═]/.test(j)||j.length>500?null:j},ve=function(F,j){if(F.indexOf(j)!==0)return!1;var G=F.slice(j.length);return/^[a-z]{1,4}$/i.test(G)},nt=function(F){for(var j=[],G=0;G<F.length;G++){var ge=ot(F[G]);if(!(!ge||ge.length<2||Te(ge))){var Be=j[j.length-1];if(!Be){j.push(ge);continue}if(ge!==Be){if(ge.indexOf(Be)===0){j[j.length-1]=ge;continue}if(Be.indexOf(ge)===0){ve(Be,ge)&&(j[j.length-1]=ge);continue}j.push(ge)}}}return j.join(a).trim()},xt=function(F){for(var j=0;j<F.length;j++){var G=String(F[j]||"").trim();if(G){var ge=Le(G);if(ge)return ge;if(G==="\u203A")for(var Be=j+1;Be<F.length;Be++){var At=ot(F[Be]);if(!(!At||l.test(At)||Te(At)))return At}}}return null},lr=function(F){for(var j=[],G=!1,ge=0;ge<F.length;ge++){var Be=String(F[ge]||"").trim();if(!Be){if(G)break;continue}var At=kt(Be);if(At){j.push(At),G=!0;continue}if(G){if(Be==="\u203A"||/^›(?:\s|$)/.test(Be)||l.test(Be)||Te(Be))break;j.push(ot(Be))}}return j};for(var xn=fe,pt=ot,en=ee,tn=Te,Mt=Le,wt=kt,Sn=vt,nn=ve,ar=nt,sr=xt,or=lr,l=/\bgpt-\d+(?:\.\d+)?(?:\s+[a-z0-9.-]+)?\s+·\s+\d+%\s+left\s+·\s+(?:\/|~\/).+/i,d=/^(?:thinking|working|running|planning|applying|reading|searching|inspecting|reviewing|summarizing|editing|updating|writing|completed)\b/i,c=[],u=0,f=i.replace(/\r\n?/g,a).split(a),v=0;v<f.length;v++)for(var m=fe(f[v]),y=m.split(a),g=0;g<y.length;g++){var b=String(y[g]||"").trim();if(b){var w=Le(b);if(w){c.push({kind:"user",order:u++,text:w});continue}var k=kt(b);if(k){c.push({kind:"assistant",order:u++,text:k});continue}var E=vt(b);E&&c.push({kind:"echo",order:u++,text:E})}}for(var L=c.filter(function(F,j,G){var ge=G[j-1];return!ge||ge.kind!==F.kind||ge.text!==F.text}),S=L.filter(function(F){return F.kind==="user"}),M=L.filter(function(F){return F.kind==="assistant"}),D=L.filter(function(F){return F.kind==="echo"}),W=Hv(i),Y=W.split(a).map(function(F){return String(F||"").trimEnd()}),O=xt(Y),C=S.length?S[S.length-1]:null,A=D.map(function(F){return F.text}).filter(function(F){return F.length>=3}),B=null,z=A.length-1;z>=0;z--)if(A[z]!==O){B=A[z];break}!B&&A.length&&(B=A[A.length-1]);for(var se=C?C.text:B,ne=M.filter(function(F){return!C||F.order>C.order}).map(function(F){return F.text}),K=[],re=W.match(/^[ \t]*[•◦·⏺][ \t]*(.+)$/gm)||[],U=0;U<re.length;U++){var q=ot(re[U].replace(/^[ \t]*[•◦·⏺][ \t]*/,""));q&&(d.test(q)||l.test(q)||/\b(?:OpenAI Codex|model:|directory:|Tip:|esc to interrupt)\b/i.test(q)||K.push(q))}var N=nt(ne)||nt(lr(Y))||(K.length?K[K.length-1]:null);return se&&n.push({role:"user",content:se}),N&&n.push({role:"assistant",content:N}),!n.length&&C?n.push({role:"user",content:C.text}):!n.length&&B&&n.push({role:"user",content:B}),n}for(var V="\0",te="\b",X="\v",oe="\f",le="",ce="",ue="\xA0",Se="\x07",Ie=new RegExp(o+"\\[[0-9;?]*[a-zA-Z]|"+o+"\\][^"+Se+"]*("+Se+"|"+o+"\\\\\\\\)|"+o+"[><=eP_X^]|["+V+"-"+te+X+oe+le+"-"+ce+"]|"+ue+"|"+s,"g"),qe=i.replace(Ie,function(fe){return fe===ue?" ":fe===s?a:""}).split(s).join(a),H=qe.split(a).map(function(fe){return fe.trim()}).filter(Boolean),R=[/thinking with high effort/i,/thinking with medium effort/i,/thinking with low effort/i,new RegExp("thought for [0-9]+s","i"),new RegExp("Sauteed for [0-9]+m","i"),/Germinating/i,/Doodling/i,/Brewing/i],de=null,Ce=-1,Q=[],Z=[],xe=[],ke=0;ke<H.length;ke++){var x=H[ke],Fe=x.replace(/^❯\s*/,"");if(Fe.indexOf('Try"')===0||Fe.indexOf('Try "')===0){Q.push(Fe);continue}for(var Xe=!1,Ze=0;Ze<R.length;Ze++)if(R[Ze].test(x)){Xe=!0,xe.push(x);break}if(!Xe&&x&&x.indexOf("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")!==0&&x!=="\u276F"&&x.indexOf("esc to interrupt")===-1&&x.indexOf("Claude Code v")===-1&&x.indexOf("Sonnet")===-1&&x.indexOf("~/")!==0&&x.indexOf("\u25CF high")===-1&&x.indexOf("Failed to install Anthropic marketplace")===-1&&x.indexOf("Claude Code has switched from npm to native installer")===-1&&x.indexOf("Fluttering")===-1&&x.indexOf("? for shortcuts")===-1&&x.indexOf("0;")!==0&&x.indexOf("9;")!==0&&x.indexOf("Claude is waiting")===-1&&!(x.indexOf("\u2722")!==-1||x.indexOf("\u2733")!==-1||x.indexOf("\u2736")!==-1||x.indexOf("\u273B")!==-1||x.indexOf("\u273D")!==-1)&&!(x.indexOf("\u2590")===0||x.indexOf("\u259D")===0||x.indexOf("\u2598")===0)&&!((x==="lu"||x==="ue"||x==="tr"||x==="ti"||x==="g"||x==="n"||x==="i\u2026"||x==="\u2026"||x==="uts"||x==="lt"||x==="rg"||x==="\xB7")&&x.length<4)&&!(x.indexOf("\u273DF")===0||x.indexOf("\u273BF")===0)&&x.indexOf("npm WARN")===-1&&x.indexOf("npm notice")===-1&&!(x.indexOf("added ")!==-1&&x.indexOf(" packages")!==-1)&&x.indexOf("audited ")===-1&&!(x.indexOf("found ")!==-1&&x.indexOf(" vulnerabilities")!==-1)&&!(x.indexOf("Using ")!==-1&&x.indexOf(" for ")!==-1&&x.indexOf("session")!==-1)&&x.indexOf("You can use")===-1&&!(x.indexOf("Press ")!==-1&&x.indexOf(" for")!==-1)&&!(x.indexOf("type ")===0&&x.indexOf(" to ")!==-1)&&x.indexOf("[wand]")!==0&&x.indexOf("Captured Claude session ID")===-1&&x.indexOf("\u23F5")===-1&&x.indexOf("acceptedit")===-1&&x.indexOf("shift+tab")===-1&&x.indexOf("tabtocycle")===-1&&x.indexOf("ctrl+g")===-1&&x.indexOf("/effort")===-1&&!(x.indexOf("Opus")!==-1&&x.indexOf("model")!==-1)&&x.indexOf("Haiku")===-1&&x.indexOf("to cycle")===-1&&!(x.indexOf("high \xB7")!==-1||x.indexOf("high\xB7")!==-1)&&!(x.indexOf("medium \xB7")!==-1||x.indexOf("medium\xB7")!==-1)&&!(x.indexOf("low \xB7")!==-1||x.indexOf("low\xB7")!==-1)){if(x.indexOf("\u25CF")===0){if(x=x.slice(1).trim(),!x)continue;Z.push(x);continue}x.length<3&&!/^[a-zA-Z]{3}$/.test(x)||Z.push(x)}}if(xe.length>0){var et=xe[xe.length-1],ut=et.match(new RegExp("for ([0-9]+[ms]+| [0-9]+m [0-9]+s)","i")),We=ut?"\u6DF1\u5EA6\u601D\u8003 "+ut[0].replace(/for /i,""):"\u6DF1\u5EA6\u601D\u8003\u4E2D...";n.push({role:"thinking",content:We,type:"deep-thought"})}if(Q.length>0){var _e=Q[Q.length-1].replace(/^Try\s*/,"").trim();n.push({role:"prompt",content:_e,type:"suggestion"})}if(!Z.length)return n;for(var De=[],ie=null,Oe=[],ke=0;ke<Z.length;ke++){var x=Z[ke];if(x.indexOf("\u276F")===0){var tt=x.replace(/^❯\s*/,"").trim();if(tt.indexOf('Try"')===0||tt.indexOf('Try "')===0)continue;ie!==null&&Oe.length>0&&(De.push({user:ie,assistantLines:Oe}),Oe=[]),tt?ie=tt:(ie!==null&&Oe.length>0&&(De.push({user:ie,assistantLines:Oe}),Oe=[]),ie=null)}else ie!==null&&(x.indexOf("\u23FA")!==-1&&(x.indexOf("Hi!")!==-1||x.indexOf("Hello")!==-1||x.indexOf("What")!==-1||x.indexOf("working")!==-1)?Oe.push(x):x.indexOf("\u23FA")===0?Oe.push(x.slice(1).trim()||x):x.length>=8&&x.indexOf("\u2722")===-1&&x.indexOf("\u2733")===-1&&x.indexOf("\u2736")===-1&&x.indexOf("\u273B")===-1&&x.indexOf("\u273D")===-1&&x.indexOf("\u2590")!==0&&x.indexOf("\u259D")!==0&&x.indexOf("\u2598")!==0&&x.indexOf("esctointerrupt")===-1&&x.indexOf("?for")!==0&&x.indexOf("? for")!==0&&Oe.push(x))}if(ie!==null&&Oe.length>0&&De.push({user:ie,assistantLines:Oe}),De.length===0){for(var ft="",yt=-1,ke=0;ke<Z.length;ke++){var x=Z[ke];if(!(x.indexOf('Try"')===0||x.indexOf('Try "')===0)&&x.indexOf("Failed to install")===-1&&x.indexOf("ctrl+g")===-1&&x.indexOf("\u25CF ")!==0&&!(x.length<2||x.length>100)&&/^[a-zA-Z]/.test(x)){ft=x.trim(),yt=ke;break}}if(ft&&yt>=0){var st=Z.slice(yt+1).filter(function(fe){return fe.length>=8});st.length>0&&De.push({user:ft,assistantLines:st})}}for(var Pe=0;Pe<De.length;Pe++)if(n.push({role:"user",content:De[Pe].user}),De[Pe].assistantLines.length>0){var zt=im(De[Pe].assistantLines.join(a));n.push({role:"assistant",content:zt})}return n}var Rl="transparent";function Ei(e,t){for(var n=t||3,i=e[0].length*n,a=e.length*n,s="",o=0;o<e.length;o++)for(var l=0;l<e[o].length;l++)e[o][l]!==Rl&&(s+='<rect x="'+l*n+'" y="'+o*n+'" width="'+n+'" height="'+n+'" fill="'+e[o][l]+'"/>');return'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 '+i+" "+a+'" class="pixel-avatar-svg">'+s+"</svg>"}function Ii(e){var t=Rl,n=e.base,i=e.dark,a=e.light||e.base,s=e.accent||"#FFFFFF",o=e.eye||"#2D2D2D",l=e.mouth||"#F28B9A",d=e.nose||e.dark;return[[t,i,t,t,t,t,t,t,i,t],[i,n,i,t,t,t,t,i,n,i],[i,n,n,n,n,n,n,n,n,i],[n,n,s,o,n,n,s,o,n,n],[n,n,s,s,n,n,s,s,n,n],[n,n,n,n,l,l,n,n,n,n],[n,d,n,a,n,n,a,n,d,n],[t,n,n,n,n,n,n,n,n,t],[t,t,n,i,n,n,i,n,t,t],[t,t,t,n,t,t,n,t,t,t]]}var Dv={base:"#F0923A",dark:"#C46A1A",light:"#F0923A",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",nose:"#E87D5A"},jv={base:"#9EAAB8",dark:"#6B7B8D",light:"#C5CED8",accent:"#FFFFFF",eye:"#7EC88B",mouth:"#F28B9A"},Fl=[{base:"#5A8FE0",dark:"#2E5BB3",light:"#9CC0F2",accent:"#FFFFFF",eye:"#FFD66E",mouth:"#F28B9A",primary:"#5A8FE0"},{base:"#A06FE0",dark:"#6B45A8",light:"#C8A4F2",accent:"#FFFFFF",eye:"#FFE36E",mouth:"#F28B9A",primary:"#A06FE0"},{base:"#7BB76B",dark:"#4F8A40",light:"#A9D49C",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",primary:"#7BB76B"},{base:"#D86A88",dark:"#9C3A57",light:"#E8A4B5",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#FFFFFF",primary:"#D86A88"},{base:"#5BB7B0",dark:"#2E7873",light:"#9CD6D2",accent:"#FFFFFF",eye:"#FFD66E",mouth:"#F28B9A",primary:"#5BB7B0"},{base:"#4A4A60",dark:"#1F1F2E",light:"#6E6E84",accent:"#F5F5F5",eye:"#FFD66E",mouth:"#F28B9A",primary:"#4A4A60"},{base:"#D8A85A",dark:"#9C7028",light:"#EBC78A",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",primary:"#D8A85A"}];function Nv(e,t){for(var n=String(e||""),i=0,a=0;a<n.length;a++)i=(i<<5)-i+n.charCodeAt(a)|0;return Math.abs(i)%t}var Wl={"general-purpose":"\u4E07\u80FD\u732B",Explore:"\u4FA6\u63A2\u732B","code-explorer":"\u4FA6\u63A2\u732B","code-reviewer":"\u5BA1\u67E5\u732B","code-architect":"\u67B6\u6784\u732B","code-simplifier":"\u7B80\u5316\u732B","code-guide":"\u5411\u5BFC\u732B",Plan:"\u7B56\u5212\u732B","feature-dev":"\u5F00\u53D1\u732B","pr-test-analyzer":"\u6D4B\u8BD5\u732B","silent-failure-hunter":"\u62A4\u536B\u732B","type-design-analyzer":"\u7C7B\u578B\u732B","comment-analyzer":"\u6CE8\u91CA\u732B"},Ja=null;function zl(e){if(!e)return"";var t=e.agentType||"";if(t&&Wl[t])return Wl[t];if(t)return t;var n=(e.taskId||"").slice(-4)||(ls()==="English"?"?":"\u672A\u77E5");return Je("subagent.helper_fallback_prefix")+n}function Ul(e){var t=zl(e);if(!t)return t;var n=Ja&&e&&e.taskId?Ja.get(e.taskId):null;return n?t+n:t}function Vl(e){var t=e&&(e.agentType||e.taskId)||"subagent";return Fl[Nv(t,Fl.length)]}function sg(e){var t=Vl(e),n=Ul(e),i=Ei(Ii(t));return'<div class="chat-message-avatar assistant subagent" style="--agent-color:'+t.primary+'"><div class="pixel-avatar">'+i+'</div><span class="avatar-name">'+p(n)+"</span></div>"}function Rv(e,t){if(!e||e.type!=="tool_result")return"";var n=bn(e.content),i=e.is_error===!0,a=typeof n=="string"?n:n==null?"":String(n);if(!i&&!a.trim())return'<div class="subagent-reply pending"><span class="subagent-reply-marker pending">'+p(Je("subagent.running"))+'</span><span class="typing-indicator"><span></span><span></span><span></span></span></div>';var s=a.trim()?a:Je("subagent.no_output"),o=a.trim()?Za(s):p(s),l=Je(i?"subagent.task.failed":"subagent.task.done"),d=i?"\u2717":"\u2713";return'<div class="subagent-reply final'+(i?" error":"")+'"><div class="subagent-reply-marker '+(i?"error":"done")+'"><span class="subagent-reply-marker-icon" aria-hidden="true">'+d+'</span><span class="subagent-reply-marker-label">'+p(l)+'</span></div><div class="subagent-reply-content">'+o+"</div></div>"}var Ci={assistant:Ei(Ii(Dv)),user:Ei(Ii(jv))},Kl={user:{name:"\u8D5B\u535A\u864E\u599E",avatarSvg:Ci.user},assistant:{name:"\u52E4\u52B3\u521D\u4E8C",avatarSvg:Ci.assistant}};function Ya(e){var t=r.config&&r.config.structuredChatPersona,n=t&&t[e]?t[e]:null,i=Kl[e]||Kl.assistant;return{name:n&&typeof n.name=="string"&&n.name.trim()?n.name.trim():i.name,avatar:n&&typeof n.avatar=="string"&&n.avatar.trim()?n.avatar.trim():null,avatarSvg:i.avatarSvg}}function Jl(e){return'<div class="pixel-avatar">'+e+"</div>"}function og(e,t){if(!(!e||!e.parentNode)){var n=Ya(t==="user"?"user":"assistant");e.outerHTML=Jl(n.avatarSvg)}}function rr(e,t){t=t||{};var n=e==="user"?"user":"assistant",i=Ya(n),a=i.avatar?'<img class="pixel-avatar-image" src="'+p(i.avatar)+'" alt="'+p(i.name)+'" onerror="handleChatAvatarImageError(this, '+JSON.stringify(n)+')" />':Jl(i.avatarSvg),s=t.leftSlot?t.leftSlot:"";return'<div class="chat-message-avatar '+e+'">'+a+'<span class="avatar-name">'+p(i.name)+"</span>"+s+"</div>"}function Fv(){var e=we();return!e||!ae(e)?"":fa(e,{kind:"compact"})}function Ga(e,t,n,i){if(e.role==="thinking"){var a=typeof e.content=="string"?e.content:"";if(!a.trim())return"";var s=Jt("thinking",[ms(e,n),"pty"]),o=rt(s),l=o===null?Mn("thinking"):o;return'<div class="chat-message thinking"><div class="thinking-inline thinking-pty '+(l?"expanded":"collapsed")+'" data-expand-kind="thinking" data-expand-key="'+p(s)+'" data-thinking="'+p(a)+'" onclick="__thinkingToggle(this)"><span class="thinking-inline-icon">\u29BF</span><span class="thinking-inline-preview">'+p(a)+'</span><span class="thinking-inline-action">'+(l?"\u6536\u8D77":"\u5C55\u5F00")+"</span></div></div>"}if(e.role==="prompt")return'<div class="chat-message prompt"><div class="prompt-card"><div class="prompt-icon">\u2192</div><div class="prompt-content">\u8BD5\u8BD5\uFF1A<span class="prompt-text">'+p(e.content)+"</span></div></div></div>";if(Array.isArray(e.content))return $v(e,t,n,i);var d=rr(e.role),c=e.role==="assistant"?Za(e.content):p(e.content);return'<div class="chat-message '+e.role+'">'+d+'<div class="chat-message-bubble">'+c+"</div></div>"}function Wv(e){var t={};if(!Array.isArray(e))return t;for(var n=0;n<e.length;n++){var i=e[n];if(i&&i.type==="tool_result"){var a=i.tool_use_id;if(!a)continue;t[a]||(t[a]=[]),t[a].push(i)}}return t}function Yl(e,t){var n=e&&t?e[t]:null;if(!n||!n.length)return null;for(var i=0;i<n.length-1;i++)if(po(n[i],n[i+1]))return n[i+1];return n[n.length-1]}function zv(e,t){var n=e&&t?e[t]:null;if(!n||n.length<2)return!1;for(var i=0;i<n.length-1;i++)if(po(n[i],n[i+1]))return!0;return!1}function Uv(e){return'<div class="structured-tool-hint">\u5DF2\u81EA\u52A8\u6062\u590D\u4E00\u6B21 '+p(Xa(e))+" \u53C2\u6570\u95EE\u9898</div>"}var Gl={Read:1,Glob:1,Grep:1,WebFetch:1,WebSearch:1,TodoRead:1};function Vv(e){for(var t=[],n=0;n<e.length;){var i=e[n];if(i.type==="tool_result"){n++;continue}if(i.type==="tool_use"&&Gl[i.name]){for(var a=[{block:i,index:n}],s=n+1;s<e.length;){if(e[s].type==="tool_result"){s++;continue}if(e[s].type==="tool_use"&&Gl[e[s].name])a.push({block:e[s],index:s}),s++;else break}a.length>=2?t.push({type:"group",items:a,endIndex:s}):t.push({type:"single",block:i,index:n}),n=s}else t.push({type:"single",block:i,index:n}),n++}return t}var Kv={Read:"\u8BFB\u53D6",Glob:"\u641C\u7D22",Grep:"\u641C\u7D22",WebFetch:"\u6293\u53D6",WebSearch:"\u641C\u7D22",TodoRead:"\u5F85\u529E"};function Jv(e,t,n,i){for(var a={},s=0;s<e.length;s++){var o=e[s].block.name;a[o]=(a[o]||0)+1}for(var l=!0,d=!1,s=0;s<e.length;s++){var c=e[s].block,u=Yl(n,c.id);u?u.is_error&&(d=!0):l=!1}var f=l?d?"\u2717":"\u2713":"\u2026",v=l?d?"error":"done":"pending",m=[];for(var y in a)m.push(a[y]+" "+(Kv[y]||y));for(var g=m.join(" \xB7 "),b=Jt("tool-group",[i,e[0]&&e[0].index,e.length]),w=rt(b),k=w===null?Mn("toolGroup"):w,E="",s=0;s<e.length;s++)try{E+=Xl(e[s].block,t,n,e[s].index,i)}catch{E+='<div class="render-error">\u5DE5\u5177\u6E32\u67D3\u5931\u8D25</div>'}return'<div class="tool-group" data-expand-kind="tool-group" data-expand-key="'+p(b)+'" data-expanded="'+(k?"true":"false")+'" data-status="'+v+'"><div class="tool-group-summary" onclick="__toolGroupToggle(this.parentNode)"><span class="tool-group-status">'+f+'</span><span class="tool-group-text">'+p(g)+'</span><span class="tool-group-count">'+e.length+' \u4E2A\u8C03\u7528</span><svg class="tool-group-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="transform:'+(k?"rotate(180deg)":"")+'"><polyline points="6 9 12 15 18 9"/></svg></div><div class="tool-group-body" style="display:'+(k?"block":"none")+';">'+E+"</div></div>"}window.__toolGroupToggle=function(e){if(e){var t=e.getAttribute("data-expanded")==="true";e.setAttribute("data-expanded",t?"false":"true");var n=e.querySelector(".tool-group-body");n&&(n.style.display=t?"none":"block");var i=e.querySelector(".tool-group-chevron");i&&(i.style.transform=t?"":"rotate(180deg)"),Cn(e,"tool-group")}};function Qa(e){if(!e||e.type!=="tool_use")return null;var t=e.input||{},n=typeof t.subagent_type=="string"?t.subagent_type:null;return!n&&e.name!=="Task"&&e.name!=="Agent"?null:{taskId:e.id,agentType:n||void 0,taskDescription:typeof t.description=="string"?t.description:void 0}}function Yv(e){var t=new Map;if(!Array.isArray(e))return t;for(var n=0;n<e.length;n++){var i=e[n];if(!(!i||i.role!=="assistant"||!Array.isArray(i.content)))for(var a=0;a<i.content.length;a++){var s=i.content[a];if(!(!s||s.type!=="tool_use")){var o=s.__subagent||Qa(s);o&&t.set(s.id,o)}}}return t}function Gv(e){var t=new Map;if(!Array.isArray(e))return t;var n=new Map,i=new Set;function a(u){if(!(!u||!u.taskId)&&!i.has(u.taskId)){i.add(u.taskId);var f=zl(u);f&&(n.has(f)||n.set(f,[]),n.get(f).push(u.taskId))}}for(var s=0;s<e.length;s++){var o=e[s];if(!(!o||!Array.isArray(o.content)))for(var l=0;l<o.content.length;l++){var d=o.content[l];if(d){var c=d.__subagent||(d.type==="tool_use"?Qa(d):null);c&&a(c)}}}return n.forEach(function(u){if(!(u.length<2))for(var f=0;f<u.length;f++)t.set(u[f]," #"+(f+1))}),t}function Ql(e,t){var n=[];if(!Array.isArray(e)||!e.length)return n;for(var i=null,a=0;a<e.length;a++){var s=e[a],o=s&&s.type==="text"&&s.__processing===!0;if(o&&i){i.blocks.push(s);continue}var l=s&&s.__subagent?s.__subagent:null;l||(l=Qa(s)),!l&&s&&s.type==="tool_result"&&t&&t.has(s.tool_use_id)&&(l=t.get(s.tool_use_id));var d=l?l.taskId:null;(!i||i.key!==d)&&(i={key:d,subagent:l,blocks:[],firstIndex:a},n.push(i)),i.blocks.push(s)}return n}function $a(e,t,n,i,a){var s="";try{for(var o=Vv(e),l=0;l<o.length;l++){var d=o[l];try{if(d.type==="group"){for(var c=[],u=0;u<d.items.length;u++)c.push({block:d.items[u].block,index:d.items[u].index+t});s+=Jv(c,n,i,a)}else s+=Xl(d.block,n,i,d.index+t,a)}catch{s+='<div class="render-error">\u6D88\u606F\u5757\u6E32\u67D3\u5931\u8D25</div>'}}}catch{s+='<div class="render-error">\u6D88\u606F\u6E32\u67D3\u5931\u8D25</div>'}return s}function $l(e,t,n,i,a,s){for(var o=s||{},l=o.showHandoff!==!1,d="",c=null,u=0;u<e.length;u++){var f=e[u],v=$a(f.blocks,f.firstIndex,t,i,a);if(!(!v||!v.trim()))if(f.subagent){var m=l&&c!==f.subagent.taskId;d+=Qv(f,n,v,a,m),c=f.subagent.taskId}else d+='<div class="chat-message-segment parent">'+rr(t)+'<div class="chat-message-content">'+v+"</div></div>",c=null}return d}function Qv(e,t,n,i,a){var s=e.subagent,o=Vl(s),l=Ul(s),d=s.taskId||"",c=Ei(Ii(o)),u;if(a){var f='<strong class="subagent-panel-name">'+p(l)+'</strong><span class="subagent-panel-tag" title="'+p(Je("subagent.tag_title"))+'">'+p(Je("subagent.tag"))+"</span>",v=!!(s.taskDescription&&String(s.taskDescription).trim()),m=v?Je("subagent.handoff.with_desc",{parent:p(t),sub:f}):Je("subagent.handoff",{parent:p(t),sub:f}),y=v?'<span class="subagent-panel-task-desc">'+p(s.taskDescription)+"</span>":"";u='<span class="subagent-panel-arrow" aria-hidden="true">\u21B3</span><span class="subagent-panel-attribution">'+m+y+"</span>"}else u='<span class="subagent-panel-attribution"><strong class="subagent-panel-name">'+p(l)+'</strong><span class="subagent-panel-task-desc"> '+p(Je("subagent.continued"))+"</span></span>";var g=Jt("subagent-panel",[i,d]),b=rt(g),w=b===null?!1:!!b;function k(E){return'<button type="button" class="subagent-panel-toggle" data-position="'+E+'" onclick="__subagentPanelToggle(event, this)" aria-expanded="'+(w?"true":"false")+'" aria-label="'+p(Je(w?"ui.collapse_panel_aria":"ui.expand_panel_aria"))+'"><span class="subagent-panel-toggle-label">'+p(Je(w?"ui.collapse":"ui.expand"))+'</span><svg class="subagent-panel-toggle-icon" width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden="true"><path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button>'}return'<div class="subagent-panel" data-expand-kind="subagent-panel" data-expand-key="'+p(g)+'" data-agent-id="'+p(d)+'" data-expanded="'+(w?"true":"false")+'" style="--agent-color:'+o.primary+'"><div class="subagent-panel-header" onclick="__subagentPanelToggle(event, this)" role="button" tabindex="0" aria-label="'+p(Je("subagent.title_aria"))+'"><span class="subagent-panel-avatar" aria-hidden="true">'+c+"</span>"+u+k("top")+'</div><div class="subagent-panel-body">'+n+'</div><div class="subagent-panel-footer"><span class="subagent-panel-footer-hint" aria-hidden="true">\u2014 '+p(l)+" \u2014</span>"+k("bottom")+"</div></div>"}function $v(e,t,n,i){var a=e.role,s=ms(e,n),o=a==="user"&&e.content&&e.content.some(function(L){return L.__queued});if(!e.content||e.content.length===0)return a==="assistant"?'<div class="chat-message '+a+'">'+rr(a)+'<div class="chat-message-bubble"><div class="typing-indicator"><span></span><span></span><span></span></div></div></div>':'<div class="chat-message '+a+' empty-message" data-message-key="'+p(s)+'">'+rr(a)+'<div class="chat-message-content"><span class="empty-message-hint">\uFF08\u7A7A\u6D88\u606F\uFF09</span></div></div>';var l=Wv(e.content),d=Ya("assistant");if(a!=="assistant"){var c=Ql(e.content,i),u=c.some(function(L){return L.subagent}),f=o?" queued":"",v=o?'<span class="queued-badge">\u6392\u961F\u4E2D</span>':"",m=Fv();if(u){var y=$l(c,a,d.name,l,s,{showHandoff:!1});return'<div class="chat-message '+a+f+' multi-agent" data-message-key="'+p(s)+'">'+y+v+"</div>"}var g=$a(e.content,0,a,l,s);return'<div class="chat-message '+a+f+'" data-message-key="'+p(s)+'">'+rr(a,{leftSlot:m})+'<div class="chat-message-content">'+g+v+"</div></div>"}var b=Ql(e.content,i),w=b.some(function(L){return L.subagent});if(!w){var k=$a(e.content,0,a,l,s);return'<div class="chat-message '+a+'" data-message-key="'+p(s)+'">'+rr(a)+'<div class="chat-message-content">'+k+"</div></div>"}var E='<div class="chat-message '+a+' multi-agent" data-message-key="'+p(s)+'">';return E+=$l(b,a,d.name,l,s,{showHandoff:!0}),E+="</div>",E}function Xl(e,t,n,i,a){if(!e||!e.type||e.type==="tool_use"&&e.__subagent&&e.__subagent.taskId===e.id)return"";if(e.type==="tool_result"&&e.__subagent&&e.__subagent.taskId===e.tool_use_id)return Rv(e,t);switch(e.type){case"text":return t==="assistant"&&e.__processing?'<div class="typing-indicator"><span></span><span></span><span></span></div>':t==="assistant"?Za(e.text||""):p(e.text||"");case"thinking":var s=e.thinking||"",o=e.thinking===void 0&&e.type==="thinking";if(o)return'<div class="thinking-inline thinking-streaming" data-thinking=""><div class="thinking-streaming-inner"><span class="thinking-streaming-icon spinning">\u29BF</span><div class="thinking-streaming-text"></div></div></div>';if(!s.trim())return"";var l=s.length>60?s.slice(0,57)+"\u2026":s,d=Jt("thinking",[a,i]),c=rt(d),u=c===null?Mn("thinking"):c;return'<div class="thinking-inline '+(u?"expanded":"collapsed")+'" data-expand-kind="thinking" data-expand-key="'+p(d)+'" data-thinking="'+p(s)+'" onclick="__thinkingToggle(this)"><span class="thinking-inline-icon">\u29BF</span><span class="thinking-inline-preview">'+p(u?s:l)+'</span><span class="thinking-inline-action">'+(u?"\u6536\u8D77":"\u5C55\u5F00")+"</span></div>";case"tool_use":var f=Yl(n,e.id),v=tm(e,f,i,a);return zv(n,e.id)&&(v=Uv(e.name||"\u5DE5\u5177")+v),v;case"tool_result":return"";default:var m=e&&e.type?String(e.type):"\u672A\u77E5",y="";try{y=JSON.stringify(e,null,2)}catch{y="{}"}return`<div class="unknown-block collapsed" onclick="this.classList.toggle('collapsed')"><div class="unknown-block-header"><span class="unknown-block-icon">?</span><span class="unknown-block-label">\u672A\u8BC6\u522B\u7684\u5185\u5BB9\u5757\uFF1A`+p(m)+'</span><span class="unknown-block-toggle">\u25BC</span></div><pre class="unknown-block-body">'+p(y)+"</pre></div>"}}function Xv(e,t,n,i,a,s,o){var l=e.id||"tool-"+n,d=Jt("inline-tool",[s,l||o,o]),c=rt(d),u=e.input||{},f=bn(t&&t.content),v=t&&t.is_error,m=f.length>0,y=v?"\u2717":m?"\u2713":"\u2026",g="",b="",w="",k="";if(n==="Read"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M1 3.5A1.5 1.5 0 0 1 2.5 2h2.764c.958 0 1.76.56 2.311 1.184C8.405 3.77 9.146 4 10 4h3.5A1.5 1.5 0 0 1 15 5.5v7a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 1 12.5v-9z"/><path d="M2 5.5h12M2 8h8M2 10.5h5"/></svg>';var E=u.file_path||u.path||i||"",L="";u.limit&&(L=" "+u.offset+"-"+(u.offset+u.limit)),b=E,w=L}else if(n==="Glob"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="7" cy="7" r="5"/><path d="M10.5 10.5L14 14"/></svg>';var S=u.pattern||"",M=u.path||i||"";b=S,w=M}else if(n==="Grep"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M11.5 11.5L15 15"/></svg>';var S=u.pattern||"",M=u.path||i||"";b=S,w=M,u.context&&(w+=" -C"+u.context)}else if(n==="WebFetch"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="8" cy="8" r="6.5"/><path d="M8 1.5v13M1.5 8h13"/></svg>';var D=u.url||"";b=D,w=a||""}else if(n==="WebSearch"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="7" cy="7" r="5"/><path d="M10.5 10.5L14 14"/><path d="M5 7h4M7 5v4"/></svg>';var W=u.query||"";b=W,w=a||""}else n==="TodoRead"?(g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="2" y="2" width="12" height="12" rx="2"/><path d="M5 8l2 2 4-4"/></svg>',b="\u8BFB\u53D6\u5F85\u529E\u5217\u8868",w=a||""):(g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="8" cy="8" r="6.5"/><path d="M8 5v3.5M8 11h.01"/></svg>',b=Xa(n),w=a||"");if(m){var Y=f.split(`
|
|
41
|
+
`)}function Hv(e,t){var n=[];if(!e)return n;var i=String(e||""),a=`
|
|
42
|
+
`,s="\r",o="\x1B";if(/^codex\b/.test(String(t||"").trim())){let fe=function(F){return String(F||"").replace(/\x1b\][^\x07]*(\x07|\x1b\\)/g,"").replace(/\x1b\[(\d+)C/g,function(D,G){return" ".repeat(Number(G)||1)}).replace(/\x1b\[[0-9;?]*[AB]/g,a).replace(/\x1b\[[0-9;?]*[su]/g,"").replace(/\x1b\[[0-9;?]*[HfJKr]/g,a).replace(/\x1bM/g,a).replace(/\x1b\[[0-9;?]*[ST]/g,a).replace(/\x1b\[[0-9;?]*[a-zA-Z]/g,"").replace(/\x1b[><=ePX^_]/g,"").replace(/[\u00a0\u200b-\u200d\ufeff]/g," ").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g,"").replace(/[ \t]+\n/g,a)},ot=function(F){return String(F||"").replace(/\s+/g," ").replace(/[M]+$/g,"").trim()},ee=function(F){return String(F||"").replace(/^›\s*/,"").replace(/^>\s*/,"").trim()},Te=function(F){var D=String(F||"").trim();return!!(!D||Ov(D)||l.test(D)||/^[╭╰│┌└┐┘├┤┬┴┼─═]/.test(D)||/^\[>[0-9;?]*u$/i.test(D)||/^M+$/i.test(D)||/^(?:OpenAI Codex|Codex)\b/i.test(D)||/^(?:tokens?|context window|remaining context|approvals?|sandbox|provider|session id):\s*/i.test(D)||/^(?:thinking|working)\s*(?:\.\.\.|…)?$/i.test(D)||/^[•◦·]\s+(?:thinking|working|running|planning|applying|reading|searching|inspecting|reviewing|summarizing|editing|updating|writing|completed)\b/i.test(D)||/^(?:model|directory|tip|context|cwd|path):\s+/i.test(D))},Le=function(F){var D=String(F||"").trim();if(!/^›(?:\s|$)/.test(D)||l.test(D))return null;var G=ot(ee(D));return!G||Te(G)?null:G},kt=function(F){var D=String(F||"").trim();if(!/^[•◦·⏺]/.test(D))return null;var G=D.replace(/^[•◦·]\s*/,"").replace(/^⏺\s+/,"").replace(/^│\s*/,"").trim();return!G||/^[•◦·⏺]$/.test(G)||(G=G.replace(/\s*\(\d+[smh]?\s*•\s*esc to interrupt\)[\s\S]*$/i,"").replace(/(?:[a-z]{1,6})?›[\s\S]*$/,"").replace(/\s{2,}gpt-\d[\s\S]*$/i,"").replace(/\b(?:OpenAI Codex|model:|directory:|Tip:)\b[\s\S]*$/i,""),G=ot(G),!G||G.length<2||c.test(G)||Te(G))?null:G},vt=function(F){var D=ot(F);return!D||Te(D)||/^[•◦·⏺›]/.test(D)||/^[\[\]<>0-9;?]+u?$/i.test(D)||/^[╭╰│┌└┐┘├┤┬┴┼─═]/.test(D)||D.length>500?null:D},pe=function(F,D){if(F.indexOf(D)!==0)return!1;var G=F.slice(D.length);return/^[a-z]{1,4}$/i.test(G)},nt=function(F){for(var D=[],G=0;G<F.length;G++){var me=ot(F[G]);if(!(!me||me.length<2||Te(me))){var Be=D[D.length-1];if(!Be){D.push(me);continue}if(me!==Be){if(me.indexOf(Be)===0){D[D.length-1]=me;continue}if(Be.indexOf(me)===0){pe(Be,me)&&(D[D.length-1]=me);continue}D.push(me)}}}return D.join(a).trim()},xt=function(F){for(var D=0;D<F.length;D++){var G=String(F[D]||"").trim();if(G){var me=Le(G);if(me)return me;if(G==="\u203A")for(var Be=D+1;Be<F.length;Be++){var At=ot(F[Be]);if(!(!At||l.test(At)||Te(At)))return At}}}return null},or=function(F){for(var D=[],G=!1,me=0;me<F.length;me++){var Be=String(F[me]||"").trim();if(!Be){if(G)break;continue}var At=kt(Be);if(At){D.push(At),G=!0;continue}if(G){if(Be==="\u203A"||/^›(?:\s|$)/.test(Be)||l.test(Be)||Te(Be))break;D.push(ot(Be))}}return D};for(var xn=fe,pt=ot,en=ee,tn=Te,Mt=Le,wt=kt,Sn=vt,nn=pe,ir=nt,ar=xt,sr=or,l=/\bgpt-\d+(?:\.\d+)?(?:\s+[a-z0-9.-]+)?\s+·\s+\d+%\s+left\s+·\s+(?:\/|~\/).+/i,c=/^(?:thinking|working|running|planning|applying|reading|searching|inspecting|reviewing|summarizing|editing|updating|writing|completed)\b/i,d=[],u=0,f=i.replace(/\r\n?/g,a).split(a),v=0;v<f.length;v++)for(var m=fe(f[v]),y=m.split(a),g=0;g<y.length;g++){var b=String(y[g]||"").trim();if(b){var w=Le(b);if(w){d.push({kind:"user",order:u++,text:w});continue}var k=kt(b);if(k){d.push({kind:"assistant",order:u++,text:k});continue}var E=vt(b);E&&d.push({kind:"echo",order:u++,text:E})}}for(var L=d.filter(function(F,D,G){var me=G[D-1];return!me||me.kind!==F.kind||me.text!==F.text}),S=L.filter(function(F){return F.kind==="user"}),M=L.filter(function(F){return F.kind==="assistant"}),_=L.filter(function(F){return F.kind==="echo"}),W=Pv(i),Y=W.split(a).map(function(F){return String(F||"").trimEnd()}),O=xt(Y),I=S.length?S[S.length-1]:null,A=_.map(function(F){return F.text}).filter(function(F){return F.length>=3}),B=null,z=A.length-1;z>=0;z--)if(A[z]!==O){B=A[z];break}!B&&A.length&&(B=A[A.length-1]);for(var ae=I?I.text:B,ne=M.filter(function(F){return!I||F.order>I.order}).map(function(F){return F.text}),K=[],re=W.match(/^[ \t]*[•◦·⏺][ \t]*(.+)$/gm)||[],U=0;U<re.length;U++){var q=ot(re[U].replace(/^[ \t]*[•◦·⏺][ \t]*/,""));q&&(c.test(q)||l.test(q)||/\b(?:OpenAI Codex|model:|directory:|Tip:|esc to interrupt)\b/i.test(q)||K.push(q))}var N=nt(ne)||nt(or(Y))||(K.length?K[K.length-1]:null);return ae&&n.push({role:"user",content:ae}),N&&n.push({role:"assistant",content:N}),!n.length&&I?n.push({role:"user",content:I.text}):!n.length&&B&&n.push({role:"user",content:B}),n}for(var V="\0",te="\b",X="\v",oe="\f",le="",de="",ue="\xA0",Se="\x07",Ie=new RegExp(o+"\\[[0-9;?]*[a-zA-Z]|"+o+"\\][^"+Se+"]*("+Se+"|"+o+"\\\\\\\\)|"+o+"[><=eP_X^]|["+V+"-"+te+X+oe+le+"-"+de+"]|"+ue+"|"+s,"g"),qe=i.replace(Ie,function(fe){return fe===ue?" ":fe===s?a:""}).split(s).join(a),H=qe.split(a).map(function(fe){return fe.trim()}).filter(Boolean),R=[/thinking with high effort/i,/thinking with medium effort/i,/thinking with low effort/i,new RegExp("thought for [0-9]+s","i"),new RegExp("Sauteed for [0-9]+m","i"),/Germinating/i,/Doodling/i,/Brewing/i],ce=null,Ce=-1,Q=[],Z=[],xe=[],we=0;we<H.length;we++){var x=H[we],Fe=x.replace(/^❯\s*/,"");if(Fe.indexOf('Try"')===0||Fe.indexOf('Try "')===0){Q.push(Fe);continue}for(var Xe=!1,Ze=0;Ze<R.length;Ze++)if(R[Ze].test(x)){Xe=!0,xe.push(x);break}if(!Xe&&x&&x.indexOf("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")!==0&&x!=="\u276F"&&x.indexOf("esc to interrupt")===-1&&x.indexOf("Claude Code v")===-1&&x.indexOf("Sonnet")===-1&&x.indexOf("~/")!==0&&x.indexOf("\u25CF high")===-1&&x.indexOf("Failed to install Anthropic marketplace")===-1&&x.indexOf("Claude Code has switched from npm to native installer")===-1&&x.indexOf("Fluttering")===-1&&x.indexOf("? for shortcuts")===-1&&x.indexOf("0;")!==0&&x.indexOf("9;")!==0&&x.indexOf("Claude is waiting")===-1&&!(x.indexOf("\u2722")!==-1||x.indexOf("\u2733")!==-1||x.indexOf("\u2736")!==-1||x.indexOf("\u273B")!==-1||x.indexOf("\u273D")!==-1)&&!(x.indexOf("\u2590")===0||x.indexOf("\u259D")===0||x.indexOf("\u2598")===0)&&!((x==="lu"||x==="ue"||x==="tr"||x==="ti"||x==="g"||x==="n"||x==="i\u2026"||x==="\u2026"||x==="uts"||x==="lt"||x==="rg"||x==="\xB7")&&x.length<4)&&!(x.indexOf("\u273DF")===0||x.indexOf("\u273BF")===0)&&x.indexOf("npm WARN")===-1&&x.indexOf("npm notice")===-1&&!(x.indexOf("added ")!==-1&&x.indexOf(" packages")!==-1)&&x.indexOf("audited ")===-1&&!(x.indexOf("found ")!==-1&&x.indexOf(" vulnerabilities")!==-1)&&!(x.indexOf("Using ")!==-1&&x.indexOf(" for ")!==-1&&x.indexOf("session")!==-1)&&x.indexOf("You can use")===-1&&!(x.indexOf("Press ")!==-1&&x.indexOf(" for")!==-1)&&!(x.indexOf("type ")===0&&x.indexOf(" to ")!==-1)&&x.indexOf("[wand]")!==0&&x.indexOf("Captured Claude session ID")===-1&&x.indexOf("\u23F5")===-1&&x.indexOf("acceptedit")===-1&&x.indexOf("shift+tab")===-1&&x.indexOf("tabtocycle")===-1&&x.indexOf("ctrl+g")===-1&&x.indexOf("/effort")===-1&&!(x.indexOf("Opus")!==-1&&x.indexOf("model")!==-1)&&x.indexOf("Haiku")===-1&&x.indexOf("to cycle")===-1&&!(x.indexOf("high \xB7")!==-1||x.indexOf("high\xB7")!==-1)&&!(x.indexOf("medium \xB7")!==-1||x.indexOf("medium\xB7")!==-1)&&!(x.indexOf("low \xB7")!==-1||x.indexOf("low\xB7")!==-1)){if(x.indexOf("\u25CF")===0){if(x=x.slice(1).trim(),!x)continue;Z.push(x);continue}x.length<3&&!/^[a-zA-Z]{3}$/.test(x)||Z.push(x)}}if(xe.length>0){var et=xe[xe.length-1],ut=et.match(new RegExp("for ([0-9]+[ms]+| [0-9]+m [0-9]+s)","i")),We=ut?"\u6DF1\u5EA6\u601D\u8003 "+ut[0].replace(/for /i,""):"\u6DF1\u5EA6\u601D\u8003\u4E2D...";n.push({role:"thinking",content:We,type:"deep-thought"})}if(Q.length>0){var _e=Q[Q.length-1].replace(/^Try\s*/,"").trim();n.push({role:"prompt",content:_e,type:"suggestion"})}if(!Z.length)return n;for(var De=[],ie=null,Oe=[],we=0;we<Z.length;we++){var x=Z[we];if(x.indexOf("\u276F")===0){var tt=x.replace(/^❯\s*/,"").trim();if(tt.indexOf('Try"')===0||tt.indexOf('Try "')===0)continue;ie!==null&&Oe.length>0&&(De.push({user:ie,assistantLines:Oe}),Oe=[]),tt?ie=tt:(ie!==null&&Oe.length>0&&(De.push({user:ie,assistantLines:Oe}),Oe=[]),ie=null)}else ie!==null&&(x.indexOf("\u23FA")!==-1&&(x.indexOf("Hi!")!==-1||x.indexOf("Hello")!==-1||x.indexOf("What")!==-1||x.indexOf("working")!==-1)?Oe.push(x):x.indexOf("\u23FA")===0?Oe.push(x.slice(1).trim()||x):x.length>=8&&x.indexOf("\u2722")===-1&&x.indexOf("\u2733")===-1&&x.indexOf("\u2736")===-1&&x.indexOf("\u273B")===-1&&x.indexOf("\u273D")===-1&&x.indexOf("\u2590")!==0&&x.indexOf("\u259D")!==0&&x.indexOf("\u2598")!==0&&x.indexOf("esctointerrupt")===-1&&x.indexOf("?for")!==0&&x.indexOf("? for")!==0&&Oe.push(x))}if(ie!==null&&Oe.length>0&&De.push({user:ie,assistantLines:Oe}),De.length===0){for(var ft="",yt=-1,we=0;we<Z.length;we++){var x=Z[we];if(!(x.indexOf('Try"')===0||x.indexOf('Try "')===0)&&x.indexOf("Failed to install")===-1&&x.indexOf("ctrl+g")===-1&&x.indexOf("\u25CF ")!==0&&!(x.length<2||x.length>100)&&/^[a-zA-Z]/.test(x)){ft=x.trim(),yt=we;break}}if(ft&&yt>=0){var st=Z.slice(yt+1).filter(function(fe){return fe.length>=8});st.length>0&&De.push({user:ft,assistantLines:st})}}for(var Pe=0;Pe<De.length;Pe++)if(n.push({role:"user",content:De[Pe].user}),De[Pe].assistantLines.length>0){var zt=rm(De[Pe].assistantLines.join(a));n.push({role:"assistant",content:zt})}return n}var Nl="transparent";function Ei(e,t){for(var n=t||3,i=e[0].length*n,a=e.length*n,s="",o=0;o<e.length;o++)for(var l=0;l<e[o].length;l++)e[o][l]!==Nl&&(s+='<rect x="'+l*n+'" y="'+o*n+'" width="'+n+'" height="'+n+'" fill="'+e[o][l]+'"/>');return'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 '+i+" "+a+'" class="pixel-avatar-svg">'+s+"</svg>"}function Ii(e){var t=Nl,n=e.base,i=e.dark,a=e.light||e.base,s=e.accent||"#FFFFFF",o=e.eye||"#2D2D2D",l=e.mouth||"#F28B9A",c=e.nose||e.dark;return[[t,i,t,t,t,t,t,t,i,t],[i,n,i,t,t,t,t,i,n,i],[i,n,n,n,n,n,n,n,n,i],[n,n,s,o,n,n,s,o,n,n],[n,n,s,s,n,n,s,s,n,n],[n,n,n,n,l,l,n,n,n,n],[n,c,n,a,n,n,a,n,c,n],[t,n,n,n,n,n,n,n,n,t],[t,t,n,i,n,n,i,n,t,t],[t,t,t,n,t,t,n,t,t,t]]}var _v={base:"#F0923A",dark:"#C46A1A",light:"#F0923A",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",nose:"#E87D5A"},Dv={base:"#9EAAB8",dark:"#6B7B8D",light:"#C5CED8",accent:"#FFFFFF",eye:"#7EC88B",mouth:"#F28B9A"},Rl=[{base:"#5A8FE0",dark:"#2E5BB3",light:"#9CC0F2",accent:"#FFFFFF",eye:"#FFD66E",mouth:"#F28B9A",primary:"#5A8FE0"},{base:"#A06FE0",dark:"#6B45A8",light:"#C8A4F2",accent:"#FFFFFF",eye:"#FFE36E",mouth:"#F28B9A",primary:"#A06FE0"},{base:"#7BB76B",dark:"#4F8A40",light:"#A9D49C",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",primary:"#7BB76B"},{base:"#D86A88",dark:"#9C3A57",light:"#E8A4B5",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#FFFFFF",primary:"#D86A88"},{base:"#5BB7B0",dark:"#2E7873",light:"#9CD6D2",accent:"#FFFFFF",eye:"#FFD66E",mouth:"#F28B9A",primary:"#5BB7B0"},{base:"#4A4A60",dark:"#1F1F2E",light:"#6E6E84",accent:"#F5F5F5",eye:"#FFD66E",mouth:"#F28B9A",primary:"#4A4A60"},{base:"#D8A85A",dark:"#9C7028",light:"#EBC78A",accent:"#FFFFFF",eye:"#2D2D2D",mouth:"#F28B9A",primary:"#D8A85A"}];function jv(e,t){for(var n=String(e||""),i=0,a=0;a<n.length;a++)i=(i<<5)-i+n.charCodeAt(a)|0;return Math.abs(i)%t}var Fl={"general-purpose":"\u4E07\u80FD\u732B",Explore:"\u4FA6\u63A2\u732B","code-explorer":"\u4FA6\u63A2\u732B","code-reviewer":"\u5BA1\u67E5\u732B","code-architect":"\u67B6\u6784\u732B","code-simplifier":"\u7B80\u5316\u732B","code-guide":"\u5411\u5BFC\u732B",Plan:"\u7B56\u5212\u732B","feature-dev":"\u5F00\u53D1\u732B","pr-test-analyzer":"\u6D4B\u8BD5\u732B","silent-failure-hunter":"\u62A4\u536B\u732B","type-design-analyzer":"\u7C7B\u578B\u732B","comment-analyzer":"\u6CE8\u91CA\u732B"},Ja=null;function Wl(e){if(!e)return"";var t=e.agentType||"";if(t&&Fl[t])return Fl[t];if(t)return t;var n=(e.taskId||"").slice(-4)||(ls()==="English"?"?":"\u672A\u77E5");return Je("subagent.helper_fallback_prefix")+n}function zl(e){var t=Wl(e);if(!t)return t;var n=Ja&&e&&e.taskId?Ja.get(e.taskId):null;return n?t+n:t}function Ul(e){var t=e&&(e.agentType||e.taskId)||"subagent";return Rl[jv(t,Rl.length)]}function ag(e){var t=Ul(e),n=zl(e),i=Ei(Ii(t));return'<div class="chat-message-avatar assistant subagent" style="--agent-color:'+t.primary+'"><div class="pixel-avatar">'+i+'</div><span class="avatar-name">'+p(n)+"</span></div>"}function Nv(e,t){if(!e||e.type!=="tool_result")return"";var n=bn(e.content),i=e.is_error===!0,a=typeof n=="string"?n:n==null?"":String(n);if(!i&&!a.trim())return'<div class="subagent-reply pending"><span class="subagent-reply-marker pending">'+p(Je("subagent.running"))+'</span><span class="typing-indicator"><span></span><span></span><span></span></span></div>';var s=a.trim()?a:Je("subagent.no_output"),o=a.trim()?Za(s):p(s),l=Je(i?"subagent.task.failed":"subagent.task.done"),c=i?"\u2717":"\u2713";return'<div class="subagent-reply final'+(i?" error":"")+'"><div class="subagent-reply-marker '+(i?"error":"done")+'"><span class="subagent-reply-marker-icon" aria-hidden="true">'+c+'</span><span class="subagent-reply-marker-label">'+p(l)+'</span></div><div class="subagent-reply-content">'+o+"</div></div>"}var Ci={assistant:Ei(Ii(_v)),user:Ei(Ii(Dv))},Vl={user:{name:"\u8D5B\u535A\u864E\u599E",avatarSvg:Ci.user},assistant:{name:"\u52E4\u52B3\u521D\u4E8C",avatarSvg:Ci.assistant}};function Ya(e){var t=r.config&&r.config.structuredChatPersona,n=t&&t[e]?t[e]:null,i=Vl[e]||Vl.assistant;return{name:n&&typeof n.name=="string"&&n.name.trim()?n.name.trim():i.name,avatar:n&&typeof n.avatar=="string"&&n.avatar.trim()?n.avatar.trim():null,avatarSvg:i.avatarSvg}}function Kl(e){return'<div class="pixel-avatar">'+e+"</div>"}function sg(e,t){if(!(!e||!e.parentNode)){var n=Ya(t==="user"?"user":"assistant");e.outerHTML=Kl(n.avatarSvg)}}function nr(e,t){t=t||{};var n=e==="user"?"user":"assistant",i=Ya(n),a=i.avatar?'<img class="pixel-avatar-image" src="'+p(i.avatar)+'" alt="'+p(i.name)+'" onerror="handleChatAvatarImageError(this, '+JSON.stringify(n)+')" />':Kl(i.avatarSvg),s=t.leftSlot?t.leftSlot:"";return'<div class="chat-message-avatar '+e+'">'+a+'<span class="avatar-name">'+p(i.name)+"</span>"+s+"</div>"}function Rv(){var e=ye();return!e||!se(e)?"":fa(e,{kind:"compact"})}function Ga(e,t,n,i){if(e.role==="thinking"){var a=typeof e.content=="string"?e.content:"";if(!a.trim())return"";var s=Jt("thinking",[ms(e,n),"pty"]),o=rt(s),l=o===null?Mn("thinking"):o;return'<div class="chat-message thinking"><div class="thinking-inline thinking-pty '+(l?"expanded":"collapsed")+'" data-expand-kind="thinking" data-expand-key="'+p(s)+'" data-thinking="'+p(a)+'" onclick="__thinkingToggle(this)"><span class="thinking-inline-icon">\u29BF</span><span class="thinking-inline-preview">'+p(a)+'</span><span class="thinking-inline-action">'+(l?"\u6536\u8D77":"\u5C55\u5F00")+"</span></div></div>"}if(e.role==="prompt")return'<div class="chat-message prompt"><div class="prompt-card"><div class="prompt-icon">\u2192</div><div class="prompt-content">\u8BD5\u8BD5\uFF1A<span class="prompt-text">'+p(e.content)+"</span></div></div></div>";if(Array.isArray(e.content))return Qv(e,t,n,i);var c=nr(e.role),d=e.role==="assistant"?Za(e.content):p(e.content);return'<div class="chat-message '+e.role+'">'+c+'<div class="chat-message-bubble">'+d+"</div></div>"}function Fv(e){var t={};if(!Array.isArray(e))return t;for(var n=0;n<e.length;n++){var i=e[n];if(i&&i.type==="tool_result"){var a=i.tool_use_id;if(!a)continue;t[a]||(t[a]=[]),t[a].push(i)}}return t}function Jl(e,t){var n=e&&t?e[t]:null;if(!n||!n.length)return null;for(var i=0;i<n.length-1;i++)if(fo(n[i],n[i+1]))return n[i+1];return n[n.length-1]}function Wv(e,t){var n=e&&t?e[t]:null;if(!n||n.length<2)return!1;for(var i=0;i<n.length-1;i++)if(fo(n[i],n[i+1]))return!0;return!1}function zv(e){return'<div class="structured-tool-hint">\u5DF2\u81EA\u52A8\u6062\u590D\u4E00\u6B21 '+p(Xa(e))+" \u53C2\u6570\u95EE\u9898</div>"}var Yl={Read:1,Glob:1,Grep:1,WebFetch:1,WebSearch:1,TodoRead:1};function Uv(e){for(var t=[],n=0;n<e.length;){var i=e[n];if(i.type==="tool_result"){n++;continue}if(i.type==="tool_use"&&Yl[i.name]){for(var a=[{block:i,index:n}],s=n+1;s<e.length;){if(e[s].type==="tool_result"){s++;continue}if(e[s].type==="tool_use"&&Yl[e[s].name])a.push({block:e[s],index:s}),s++;else break}a.length>=2?t.push({type:"group",items:a,endIndex:s}):t.push({type:"single",block:i,index:n}),n=s}else t.push({type:"single",block:i,index:n}),n++}return t}var Vv={Read:"\u8BFB\u53D6",Glob:"\u641C\u7D22",Grep:"\u641C\u7D22",WebFetch:"\u6293\u53D6",WebSearch:"\u641C\u7D22",TodoRead:"\u5F85\u529E"};function Kv(e,t,n,i){for(var a={},s=0;s<e.length;s++){var o=e[s].block.name;a[o]=(a[o]||0)+1}for(var l=!0,c=!1,s=0;s<e.length;s++){var d=e[s].block,u=Jl(n,d.id);u?u.is_error&&(c=!0):l=!1}var f=l?c?"\u2717":"\u2713":"\u2026",v=l?c?"error":"done":"pending",m=[];for(var y in a)m.push(a[y]+" "+(Vv[y]||y));for(var g=m.join(" \xB7 "),b=Jt("tool-group",[i,e[0]&&e[0].index,e.length]),w=rt(b),k=w===null?Mn("toolGroup"):w,E="",s=0;s<e.length;s++)try{E+=$l(e[s].block,t,n,e[s].index,i)}catch{E+='<div class="render-error">\u5DE5\u5177\u6E32\u67D3\u5931\u8D25</div>'}return'<div class="tool-group" data-expand-kind="tool-group" data-expand-key="'+p(b)+'" data-expanded="'+(k?"true":"false")+'" data-status="'+v+'"><div class="tool-group-summary" onclick="__toolGroupToggle(this.parentNode)"><span class="tool-group-status">'+f+'</span><span class="tool-group-text">'+p(g)+'</span><span class="tool-group-count">'+e.length+' \u4E2A\u8C03\u7528</span><svg class="tool-group-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="transform:'+(k?"rotate(180deg)":"")+'"><polyline points="6 9 12 15 18 9"/></svg></div><div class="tool-group-body" style="display:'+(k?"block":"none")+';">'+E+"</div></div>"}window.__toolGroupToggle=function(e){if(e){var t=e.getAttribute("data-expanded")==="true";e.setAttribute("data-expanded",t?"false":"true");var n=e.querySelector(".tool-group-body");n&&(n.style.display=t?"none":"block");var i=e.querySelector(".tool-group-chevron");i&&(i.style.transform=t?"":"rotate(180deg)"),Cn(e,"tool-group")}};function Qa(e){if(!e||e.type!=="tool_use")return null;var t=e.input||{},n=typeof t.subagent_type=="string"?t.subagent_type:null;return!n&&e.name!=="Task"&&e.name!=="Agent"?null:{taskId:e.id,agentType:n||void 0,taskDescription:typeof t.description=="string"?t.description:void 0}}function Jv(e){var t=new Map;if(!Array.isArray(e))return t;for(var n=0;n<e.length;n++){var i=e[n];if(!(!i||i.role!=="assistant"||!Array.isArray(i.content)))for(var a=0;a<i.content.length;a++){var s=i.content[a];if(!(!s||s.type!=="tool_use")){var o=s.__subagent||Qa(s);o&&t.set(s.id,o)}}}return t}function Yv(e){var t=new Map;if(!Array.isArray(e))return t;var n=new Map,i=new Set;function a(u){if(!(!u||!u.taskId)&&!i.has(u.taskId)){i.add(u.taskId);var f=Wl(u);f&&(n.has(f)||n.set(f,[]),n.get(f).push(u.taskId))}}for(var s=0;s<e.length;s++){var o=e[s];if(!(!o||!Array.isArray(o.content)))for(var l=0;l<o.content.length;l++){var c=o.content[l];if(c){var d=c.__subagent||(c.type==="tool_use"?Qa(c):null);d&&a(d)}}}return n.forEach(function(u){if(!(u.length<2))for(var f=0;f<u.length;f++)t.set(u[f]," #"+(f+1))}),t}function Gl(e,t){var n=[];if(!Array.isArray(e)||!e.length)return n;for(var i=null,a=0;a<e.length;a++){var s=e[a],o=s&&s.type==="text"&&s.__processing===!0;if(o&&i){i.blocks.push(s);continue}var l=s&&s.__subagent?s.__subagent:null;l||(l=Qa(s)),!l&&s&&s.type==="tool_result"&&t&&t.has(s.tool_use_id)&&(l=t.get(s.tool_use_id));var c=l?l.taskId:null;(!i||i.key!==c)&&(i={key:c,subagent:l,blocks:[],firstIndex:a},n.push(i)),i.blocks.push(s)}return n}function $a(e,t,n,i,a){var s="";try{for(var o=Uv(e),l=0;l<o.length;l++){var c=o[l];try{if(c.type==="group"){for(var d=[],u=0;u<c.items.length;u++)d.push({block:c.items[u].block,index:c.items[u].index+t});s+=Kv(d,n,i,a)}else s+=$l(c.block,n,i,c.index+t,a)}catch{s+='<div class="render-error">\u6D88\u606F\u5757\u6E32\u67D3\u5931\u8D25</div>'}}}catch{s+='<div class="render-error">\u6D88\u606F\u6E32\u67D3\u5931\u8D25</div>'}return s}function Ql(e,t,n,i,a,s){for(var o=s||{},l=o.showHandoff!==!1,c="",d=null,u=0;u<e.length;u++){var f=e[u],v=$a(f.blocks,f.firstIndex,t,i,a);if(!(!v||!v.trim()))if(f.subagent){var m=l&&d!==f.subagent.taskId;c+=Gv(f,n,v,a,m),d=f.subagent.taskId}else c+='<div class="chat-message-segment parent">'+nr(t)+'<div class="chat-message-content">'+v+"</div></div>",d=null}return c}function Gv(e,t,n,i,a){var s=e.subagent,o=Ul(s),l=zl(s),c=s.taskId||"",d=Ei(Ii(o)),u;if(a){var f='<strong class="subagent-panel-name">'+p(l)+'</strong><span class="subagent-panel-tag" title="'+p(Je("subagent.tag_title"))+'">'+p(Je("subagent.tag"))+"</span>",v=!!(s.taskDescription&&String(s.taskDescription).trim()),m=v?Je("subagent.handoff.with_desc",{parent:p(t),sub:f}):Je("subagent.handoff",{parent:p(t),sub:f}),y=v?'<span class="subagent-panel-task-desc">'+p(s.taskDescription)+"</span>":"";u='<span class="subagent-panel-arrow" aria-hidden="true">\u21B3</span><span class="subagent-panel-attribution">'+m+y+"</span>"}else u='<span class="subagent-panel-attribution"><strong class="subagent-panel-name">'+p(l)+'</strong><span class="subagent-panel-task-desc"> '+p(Je("subagent.continued"))+"</span></span>";var g=Jt("subagent-panel",[i,c]),b=rt(g),w=b===null?!1:!!b;function k(E){return'<button type="button" class="subagent-panel-toggle" data-position="'+E+'" onclick="__subagentPanelToggle(event, this)" aria-expanded="'+(w?"true":"false")+'" aria-label="'+p(Je(w?"ui.collapse_panel_aria":"ui.expand_panel_aria"))+'"><span class="subagent-panel-toggle-label">'+p(Je(w?"ui.collapse":"ui.expand"))+'</span><svg class="subagent-panel-toggle-icon" width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden="true"><path d="M2.5 3.75L5 6.25L7.5 3.75" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button>'}return'<div class="subagent-panel" data-expand-kind="subagent-panel" data-expand-key="'+p(g)+'" data-agent-id="'+p(c)+'" data-expanded="'+(w?"true":"false")+'" style="--agent-color:'+o.primary+'"><div class="subagent-panel-header" onclick="__subagentPanelToggle(event, this)" role="button" tabindex="0" aria-label="'+p(Je("subagent.title_aria"))+'"><span class="subagent-panel-avatar" aria-hidden="true">'+d+"</span>"+u+k("top")+'</div><div class="subagent-panel-body">'+n+'</div><div class="subagent-panel-footer"><span class="subagent-panel-footer-hint" aria-hidden="true">\u2014 '+p(l)+" \u2014</span>"+k("bottom")+"</div></div>"}function Qv(e,t,n,i){var a=e.role,s=ms(e,n),o=a==="user"&&e.content&&e.content.some(function(L){return L.__queued});if(!e.content||e.content.length===0)return a==="assistant"?'<div class="chat-message '+a+'">'+nr(a)+'<div class="chat-message-bubble"><div class="typing-indicator"><span></span><span></span><span></span></div></div></div>':'<div class="chat-message '+a+' empty-message" data-message-key="'+p(s)+'">'+nr(a)+'<div class="chat-message-content"><span class="empty-message-hint">\uFF08\u7A7A\u6D88\u606F\uFF09</span></div></div>';var l=Fv(e.content),c=Ya("assistant");if(a!=="assistant"){var d=Gl(e.content,i),u=d.some(function(L){return L.subagent}),f=o?" queued":"",v=o?'<span class="queued-badge">\u6392\u961F\u4E2D</span>':"",m=Rv();if(u){var y=Ql(d,a,c.name,l,s,{showHandoff:!1});return'<div class="chat-message '+a+f+' multi-agent" data-message-key="'+p(s)+'">'+y+v+"</div>"}var g=$a(e.content,0,a,l,s);return'<div class="chat-message '+a+f+'" data-message-key="'+p(s)+'">'+nr(a,{leftSlot:m})+'<div class="chat-message-content">'+g+v+"</div></div>"}var b=Gl(e.content,i),w=b.some(function(L){return L.subagent});if(!w){var k=$a(e.content,0,a,l,s);return'<div class="chat-message '+a+'" data-message-key="'+p(s)+'">'+nr(a)+'<div class="chat-message-content">'+k+"</div></div>"}var E='<div class="chat-message '+a+' multi-agent" data-message-key="'+p(s)+'">';return E+=Ql(b,a,c.name,l,s,{showHandoff:!0}),E+="</div>",E}function $l(e,t,n,i,a){if(!e||!e.type||e.type==="tool_use"&&e.__subagent&&e.__subagent.taskId===e.id)return"";if(e.type==="tool_result"&&e.__subagent&&e.__subagent.taskId===e.tool_use_id)return Nv(e,t);switch(e.type){case"text":return t==="assistant"&&e.__processing?'<div class="typing-indicator"><span></span><span></span><span></span></div>':t==="assistant"?Za(e.text||""):p(e.text||"");case"thinking":var s=e.thinking||"",o=e.thinking===void 0&&e.type==="thinking";if(o)return'<div class="thinking-inline thinking-streaming" data-thinking=""><div class="thinking-streaming-inner"><span class="thinking-streaming-icon spinning">\u29BF</span><div class="thinking-streaming-text"></div></div></div>';if(!s.trim())return"";var l=s.length>60?s.slice(0,57)+"\u2026":s,c=Jt("thinking",[a,i]),d=rt(c),u=d===null?Mn("thinking"):d;return'<div class="thinking-inline '+(u?"expanded":"collapsed")+'" data-expand-kind="thinking" data-expand-key="'+p(c)+'" data-thinking="'+p(s)+'" onclick="__thinkingToggle(this)"><span class="thinking-inline-icon">\u29BF</span><span class="thinking-inline-preview">'+p(u?s:l)+'</span><span class="thinking-inline-action">'+(u?"\u6536\u8D77":"\u5C55\u5F00")+"</span></div>";case"tool_use":var f=Jl(n,e.id),v=em(e,f,i,a);return Wv(n,e.id)&&(v=zv(e.name||"\u5DE5\u5177")+v),v;case"tool_result":return"";default:var m=e&&e.type?String(e.type):"\u672A\u77E5",y="";try{y=JSON.stringify(e,null,2)}catch{y="{}"}return`<div class="unknown-block collapsed" onclick="this.classList.toggle('collapsed')"><div class="unknown-block-header"><span class="unknown-block-icon">?</span><span class="unknown-block-label">\u672A\u8BC6\u522B\u7684\u5185\u5BB9\u5757\uFF1A`+p(m)+'</span><span class="unknown-block-toggle">\u25BC</span></div><pre class="unknown-block-body">'+p(y)+"</pre></div>"}}function $v(e,t,n,i,a,s,o){var l=e.id||"tool-"+n,c=Jt("inline-tool",[s,l||o,o]),d=rt(c),u=e.input||{},f=bn(t&&t.content),v=t&&t.is_error,m=f.length>0,y=v?"\u2717":m?"\u2713":"\u2026",g="",b="",w="",k="";if(n==="Read"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M1 3.5A1.5 1.5 0 0 1 2.5 2h2.764c.958 0 1.76.56 2.311 1.184C8.405 3.77 9.146 4 10 4h3.5A1.5 1.5 0 0 1 15 5.5v7a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 1 12.5v-9z"/><path d="M2 5.5h12M2 8h8M2 10.5h5"/></svg>';var E=u.file_path||u.path||i||"",L="";u.limit&&(L=" "+u.offset+"-"+(u.offset+u.limit)),b=E,w=L}else if(n==="Glob"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="7" cy="7" r="5"/><path d="M10.5 10.5L14 14"/></svg>';var S=u.pattern||"",M=u.path||i||"";b=S,w=M}else if(n==="Grep"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M11.5 11.5L15 15"/></svg>';var S=u.pattern||"",M=u.path||i||"";b=S,w=M,u.context&&(w+=" -C"+u.context)}else if(n==="WebFetch"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="8" cy="8" r="6.5"/><path d="M8 1.5v13M1.5 8h13"/></svg>';var _=u.url||"";b=_,w=a||""}else if(n==="WebSearch"){g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="7" cy="7" r="5"/><path d="M10.5 10.5L14 14"/><path d="M5 7h4M7 5v4"/></svg>';var W=u.query||"";b=W,w=a||""}else n==="TodoRead"?(g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="2" y="2" width="12" height="12" rx="2"/><path d="M5 8l2 2 4-4"/></svg>',b="\u8BFB\u53D6\u5F85\u529E\u5217\u8868",w=a||""):(g='<svg class="inline-tool-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="8" cy="8" r="6.5"/><path d="M8 5v3.5M8 11h.01"/></svg>',b=Xa(n),w=a||"");if(m){var Y=f.split(`
|
|
43
43
|
`);Y.length>10?k=Y.slice(0,10).join(`
|
|
44
44
|
`)+`
|
|
45
|
-
\u2026`:k=f}var O=p(f),
|
|
46
|
-
`),k="",E=0;E<w.length;E++){var L=w[E];!L&&E===w.length-1||(k+='<div class="term-line">'+p(L)+"</div>")}var S="";if(t&&v!==void 0){var M=v===0?"term-exit-success":"term-exit-error";S='<div class="term-exit '+M+'">exit '+v+"</div>"}var
|
|
47
|
-
`):"":""}function
|
|
48
|
-
`):[],m="",y=0;y<l.length;y++)if(l[y].header){m=l[y].header;break}var g=m?'<span class="tool-use-summary">'+p(m)+"</span>":"",b="";l.forEach(function(H,R){var
|
|
49
|
-
`,n=e.split(t),i=[],a=!1,s=0;s<n.length;s++){var o=n[s],l=o.trim();if(!(!a&&!l)){if(a=!0,l.indexOf("\u23FA")===0&&l.length>2){i.push(l.slice(1).trim());continue}if(l.indexOf("\u25CF")===0){if(l=l.slice(1).trim(),!l)continue;o=l}i.push(o)}}for(;i.length>0&&!i[i.length-1].trim();)i.pop();for(var
|
|
50
|
-
`,n=e.split(t),i=[],a=0;function s(g){var b=g.trim();return b.charAt(0)==="|"&&(b=b.slice(1)),b.charAt(b.length-1)==="|"&&(b=b.slice(0,-1)),b.split("|")}function o(g){return g?' style="text-align:'+g+'"':""}function l(g,b,w){var k="<thead><tr>"+g.map(function(L,S){return"<th"+o(b[S])+">"+L.trim()+"</th>"}).join("")+"</tr></thead>",E=w.length?"<tbody>"+w.map(function(L){return"<tr>"+L.map(function(S,M){return"<td"+o(b[M])+">"+S.trim()+"</td>"}).join("")+"</tr>"}).join("")+"</tbody>":"";return'<div class="md-table-wrap"><table class="md-table">'+k+E+"</table></div>"}for(;a<n.length;){var
|
|
51
|
-
`;function a(q,N,V,te){for(var X=0;;){var oe=q.indexOf(N,X);if(oe===-1)break;var le=q.indexOf(N,oe+N.length);if(le===-1)break;var
|
|
52
|
-
`).replace(/\u0000/g,"")}function Ke(e,t){if(e){e.textContent=t,e.classList.remove("hidden");for(var n=e.previousElementSibling;n;){if(n.tagName==="INPUT"){n.setAttribute("data-error","true");break}n=n.previousElementSibling}}}function Li(e){if(e){e.textContent="",e.classList.add("hidden");for(var t=e.previousElementSibling;t;){if(t.tagName==="INPUT"){t.setAttribute("data-error","false");break}t=t.previousElementSibling}}}function T(e,t){var n=document.createElement("div");n.className="toast-message"+(t==="error"?" toast-error":""),t!=="error"&&(n.style.background="var(--accent)",n.style.color="white"),n.textContent=e,document.body.appendChild(n),setTimeout(function(){n.remove()},t==="error"?4e3:2200)}var Rr=[];function
|
|
53
|
-
`+t.title,{kind:"task",tag:"wand-task-"+e+"-"+t.title,minIntervalMs:9e4,onlyWhenHidden:!0,skipWhenSelectedSessionId:e,onClick:function(){e!==r.selectedId&&Dt(e)}})}}}function
|
|
54
|
-
`)[0].trim();return n.length>100&&(n=n.slice(0,100)+"\u2026"),n}function is(e){!Re||typeof WandNative.updateSessionProgress!="function"||e&&(Hn[e]&&clearTimeout(Hn[e]),Hn[e]=setTimeout(function(){delete Hn[e],
|
|
45
|
+
\u2026`:k=f}var O=p(f),I=p(k),A=f,B="",z=d===null?Mn("inlineTools"):d;m?B='<div class="inline-tool-expanded" style="display: '+(z?"block":"none")+';"><div class="inline-tool-result">'+Xl(f,n)+"</div></div>":v?B='<div class="inline-tool-expanded" style="display: '+(z?"block":"none")+';"><div class="inline-tool-result inline-tool-error">'+p(f||"\u64CD\u4F5C\u5931\u8D25")+"</div></div>":t||(B='<div class="inline-tool-expanded" style="display: '+(z?"block":"none")+';"><div class="inline-tool-loading">\u7B49\u5F85\u54CD\u5E94\u2026</div></div>');var ae=t&&t._truncated===!0,ne=w?'<span class="inline-tool-meta">'+p(w)+"</span>":"",K=v?"inline-tool-error-inline":"";z&&(K+=" inline-tool-open");var re=ae?'data-truncated="true" data-tool-use-id="'+p(e.id||"")+'" ':"";return'<div class="inline-tool '+K+'" data-expand-kind="inline-tool" data-expand-key="'+p(c)+'" data-result="'+p(A)+'" data-preview="'+I+'" data-status="'+(v?"error":m?"done":"pending")+'" '+re+'onclick="__inlineToolToggle(this)"><div class="inline-tool-row"><span class="inline-tool-status">'+y+"</span>"+g+'<span class="inline-tool-title">'+p(b)+"</span>"+ne+"</div>"+B+"</div>"}function Xv(e,t,n,i,a){var s=e.input||{},o=s.command||s.cmd||"",l=bn(t&&t.content),c=e.id||"tool-"+n,d=Jt("terminal",[i,c||a,a]),u=rt(d),f=t&&t.is_error,v=s.exitCode,m=l.length>0,y="";t?f?y='<span class="term-status-dot term-error"></span>':v===0||v===void 0?y='<span class="term-status-dot term-success"></span>':y='<span class="term-status-dot term-warn"></span>':y='<span class="term-status-dot term-running"></span>';for(var g='<span class="term-prompt">$</span>',b=p(o),w=l.split(`
|
|
46
|
+
`),k="",E=0;E<w.length;E++){var L=w[E];!L&&E===w.length-1||(k+='<div class="term-line">'+p(L)+"</div>")}var S="";if(t&&v!==void 0){var M=v===0?"term-exit-success":"term-exit-error";S='<div class="term-exit '+M+'">exit '+v+"</div>"}var _=o.length>80?o.slice(0,77)+"\u2026":o,W=u===null?Mn("terminal"):u,Y=t&&t._truncated===!0,O=Y?' data-truncated="true" data-tool-use-id="'+p(e.id||"")+'"':"";return'<div class="inline-terminal" data-expand-kind="terminal" data-expand-key="'+p(d)+'" data-expanded="'+(W?"true":"false")+'"'+O+'><div class="term-header" onclick="__terminalExpand(this)">'+y+'<span class="term-cmd-preview"><span class="term-prompt">$</span> '+p(_)+'</span><span class="term-toggle-icon">'+(W?"\u25BC":"\u25B6")+'</span></div><div class="term-body" style="display:'+(W?"block":"none")+';"><div class="term-command"><span class="term-prompt">$</span> '+b+"</div>"+(k?'<div class="term-output">'+k+"</div>":"")+S+"</div></div>"}function bn(e){return e?typeof e=="string"?e:Array.isArray(e)?e.map(function(t){if(!t||typeof t!="object")return"";if(t.type==="text"&&typeof t.text=="string")return t.text;try{return JSON.stringify(t)}catch{return""}}).filter(Boolean).join(`
|
|
47
|
+
`):"":""}function Zv(e,t,n,i,a){var s=e.input||{},o=s.file_path||s.path||"",l=o.split("/").pop()||o,c=e.id||"tool-"+n+"-"+(typeof a=="number"?a:0),d=s.old_string||"",u=s.new_string||s.content||"",f=s.old_content||"",v=s.new_content||"",m=n==="Write"||n==="MultiEdit",y=t&&t.is_error,g=bn(t&&t.content),b=!!(g&&g.trim().length>0),w="",k="";m?k='<div class="diff-line diff-add">+ '+p(v)+"</div>":(d&&(w='<div class="diff-line diff-remove">- '+p(d)+"</div>"),u&&(k='<div class="diff-line diff-add">+ '+p(u)+"</div>"));var E="",L="";t?y?(E="diff-error",L=g.indexOf("haven't granted")!==-1||g.indexOf("permission")!==-1?"\u7B49\u5F85\u6388\u6743":"\u5931\u8D25"):(E="diff-success",L="\u5DF2\u4FEE\u6539"):(E="diff-pending",L="\u6267\u884C\u4E2D");var S=Jt("diff",[i,c||a,a]),M=rt(S),_=Mn("editCards"),W=M===null?E==="diff-pending"||_:M,Y=W?"":" collapsed",O=w&&k,I=O?"diff-col-half":"diff-col-full";return'<div class="inline-diff'+Y+'" data-tool-name="'+p(n)+'" data-expand-kind="diff" data-expand-key="'+p(S)+'" data-tool-use-id="'+p(c)+'"><div class="diff-header" onclick="__tcToggle(event,this)"><span class="diff-file-icon"></span><span class="diff-file-name">'+p(l)+'</span><span class="diff-path">'+p(o)+'</span><span class="diff-status '+E+'">'+L+'</span><span class="diff-toggle">\u25BC</span></div><div class="diff-body"><div class="diff-columns">'+(O?'<div class="diff-col '+I+'"><div class="diff-col-label">\u65E7</div>'+w+"</div>":"")+'<div class="diff-col '+I+'"><div class="diff-col-label">'+(O?"\u65B0":"")+"</div>"+(k||w)+"</div></div></div></div>"}function Xl(e,t){return e?'<pre class="inline-tool-result-text" style="max-height: 300px; overflow-y: auto;">'+p(e)+"</pre>":'<span class="inline-tool-empty">\u65E0\u8F93\u51FA</span>'}function em(e,t,n,i){var a=e.name||"unknown",s=e.id||"tool-"+a+"-"+(typeof n=="number"?n:0),o=nm(a,e.input);if(a==="Read"||a==="Glob"||a==="Grep"||a==="WebFetch"||a==="WebSearch"||a==="TodoRead")return $v(e,t,a,o,"",i,n);if(a==="Bash")return Xv(e,t,a,i,n);if(a==="Edit"||a==="Write"||a==="MultiEdit")return Zv(e,t,a,i,n);if(a==="AskUserQuestion"&&e.input&&e.input.questions){var l=e.input.questions;if(l&&l.length>0){for(var c=!!t,d=r.askUserSelections[s]||{},u=!!d.submitted,f=c?bn(t.content):"",v=f?f.trim().split(`
|
|
48
|
+
`):[],m="",y=0;y<l.length;y++)if(l[y].header){m=l[y].header;break}var g=m?'<span class="tool-use-summary">'+p(m)+"</span>":"",b="";l.forEach(function(H,R){var ce=!!H.multiSelect,Ce=H.question?'<div class="ask-user-title">'+p(H.question)+"</div>":"",Q="";H.options&&H.options.length>0&&(Q='<div class="ask-user-options" data-multi-select="'+ce+'">',H.options.forEach(function(Z,xe){var we=Z.label?p(Z.label):"\u9009\u9879 "+(xe+1),x=Z.description?'<div class="ask-user-option-desc">'+p(Z.description)+"</div>":"";if(c){var Fe=v[R]||v[0]||"",Xe=Fe.split(",").map(function(We){return We.trim()}),Ze=Xe.indexOf(Z.label||"")!==-1;Q+='<div class="ask-user-option ask-user-option-readonly'+(Ze?" ask-user-option-chosen":"")+'"><span class="ask-user-indicator"></span><div class="ask-user-option-content"><div class="ask-user-option-label">'+we+"</div>"+x+"</div></div>"}else{var et=(d[R]||[]).indexOf(xe)!==-1,ut=u?" disabled":"";Q+='<button class="ask-user-option'+(et?" selected":"")+'" data-option-index="'+xe+'" data-question-index="'+R+'" data-option-label="'+p(Z.label||"\u9009\u9879 "+(xe+1))+`" onclick="__askSelect('`+p(s)+"',"+R+","+xe+","+ce+')"'+ut+'><span class="ask-user-indicator"></span><div class="ask-user-option-content"><div class="ask-user-option-label">'+we+"</div>"+x+"</div></button>"}}),Q+="</div>"),b+='<div class="ask-user-question-group" data-question-index="'+R+'">'+Ce+Q+"</div>"});var w="";if(!c){for(var k=!0,E=0;E<l.length;E++)if(!d[E]||d[E].length===0){k=!1;break}var L=!k||u?" disabled":"",S=u?" ask-user-submitted":"",M=u?"\u5DF2\u63D0\u4EA4...":"\u786E\u8BA4\u63D0\u4EA4";w='<div class="ask-user-actions"><button class="ask-user-submit'+S+'" data-tool-use-id="'+p(s)+`" onclick="__askSubmit('`+p(s)+`')"`+L+">"+M+"</button></div>"}var _="";if(c&&f){var W=f.trim().replace(/\n/g,", ");W.length>40&&(W=W.slice(0,37)+"..."),_='<span class="tool-use-file">'+p(W)+"</span>"}var Y=Jt("tool-card",[i,s]),O=rt(Y),I=O===null?!c:O,A=I?"":" collapsed",B=c?" ask-user-answered":"";return'<div class="tool-use-card ask-user'+B+A+'" data-tool-use-id="'+p(s)+'" data-expand-kind="tool-card" data-expand-key="'+p(Y)+'"><div class="tool-use-header" data-tool-toggle onclick="__tcToggle(event,this)"><span class="tool-use-icon">'+(c?"\u2713":"?")+'</span><span class="tool-use-name">\u63D0\u95EE</span>'+g+_+'<span class="tool-use-toggle">\u25BC</span></div><div class="tool-use-body ask-user-body">'+b+w+"</div></div>"}}var z=e.description||e.input&&e.input.description||"",ae=tm(e.name,e.input),ne="",K="";z?(ne=z.length>80?z.slice(0,77)+"...":z,o&&(K='<span class="tool-use-file">'+p(o)+"</span>")):(ne=Xa(a),o&&(K='<span class="tool-use-file">'+p(o)+"</span>"),ae&&(K+='<span class="tool-use-summary">'+p(ae)+"</span>"));var re=e.input?JSON.stringify(e.input,null,2):"{}",U="loading",q='<span class="tool-use-spinner"></span>',N="";if(t){var V=t.is_error,te=bn(t.content);U=V?"error":"success",q=Zl(a);var X=te&&te.trim().length>0;X?N='<pre class="tool-use-result-content">'+p(te)+"</pre>":N='<span class="tool-use-result-empty">\u65E0\u8F93\u51FA</span>'}else q=Zl(a);var oe=Jt("tool-card",[i,s]),le=rt(oe),de=Mn("editCards"),ue=le===null?U==="loading"||de:le,Se=t&&t._truncated===!0,Ie=ue?"":" collapsed",qe='<span class="tool-use-toggle">\u25BC</span>';return'<div class="tool-use-card '+U+Ie+'" data-expand-kind="tool-card" data-expand-key="'+p(oe)+'" data-tool-use-id="'+p(s)+'"'+(Se?' data-truncated="true"':"")+'><div class="tool-use-header" data-tool-toggle onclick="__tcToggle(event,this)"><span class="tool-use-icon">'+q+'</span><span class="tool-use-name">'+p(ne)+"</span>"+K+qe+'</div><div class="tool-use-body">'+(z?'<div class="tool-use-meta"><span class="tool-use-meta-label">\u5DE5\u5177\uFF1A</span>'+p(a)+"</div>":"")+'<pre class="tool-use-content">'+p(re)+"</pre>"+(N?'<div class="tool-use-result">'+N+"</div>":"")+"</div></div>"}function Xa(e){var t={Read:"\u8BFB\u53D6\u6587\u4EF6",Write:"\u5199\u5165\u6587\u4EF6",Edit:"\u7F16\u8F91\u6587\u4EF6",MultiEdit:"\u591A\u5904\u7F16\u8F91",Bash:"\u6267\u884C\u547D\u4EE4",Grep:"\u641C\u7D22\u5185\u5BB9",Glob:"\u67E5\u627E\u6587\u4EF6",WebFetch:"\u83B7\u53D6\u7F51\u9875",WebSearch:"\u641C\u7D22\u7F51\u9875",Task:"\u4EFB\u52A1",TodoWrite:"\u66F4\u65B0\u5F85\u529E",TodoRead:"\u8BFB\u53D6\u5F85\u529E",NotebookEdit:"\u7F16\u8F91\u7B14\u8BB0\u672C",Agent:"\u5B50\u4EE3\u7406",AskUserQuestion:"\u63D0\u95EE",Exit:"\u9000\u51FA"};return t[e]||e}function Zl(e){var t={Read:"R",Write:"W",Edit:"E",MultiEdit:"E",Bash:"$",Grep:"G",Glob:"F",WebFetch:"\u21E3",WebSearch:"\u21E2",Task:"T",TodoWrite:"\u2610",TodoRead:"\u2611",NotebookEdit:"N",Agent:"A",Exit:"\xD7"};return t[e]||"\xB7"}function tm(e,t){if(!t||typeof t!="object")return"";var n=Object.keys(t);if(n.length===0)return"{}";if(e==="Read")return"\u8BFB\u53D6\u6587\u4EF6";if(e==="Write")return"\u5199\u5165\u6587\u4EF6";if(e==="Edit"){var i=t.edits?t.edits.length:0;return"\u7F16\u8F91 ("+i+" \u5904\u4FEE\u6539)"}if(e==="Bash"){var a=t.command||"";if(a){var s=a.length>60?a.slice(0,60)+"...":a;return"\u547D\u4EE4\uFF1A"+s}}if(e==="Grep"){var o=t.pattern||"",l=t.path||"";if(o)return"\u641C\u7D22\uFF1A"+o+(l?" (\u5728 "+l+")":"")}if(e==="Glob"){var o=t.pattern||"";if(o)return"\u67E5\u627E\uFF1A"+o}if(e==="Agent"){var c=t.prompt||t.task||"";if(c){var d=c.length>40?c.slice(0,40)+"...":c;return"\u4EFB\u52A1\uFF1A"+d}}if(e==="Task"){var c=t.task||t.description||"";if(c){var d=c.length>40?c.slice(0,40)+"...":c;return"\u4EFB\u52A1\uFF1A"+d}}if(e==="TodoWrite"){var u=t.todos||[];return"\u66F4\u65B0\u5F85\u529E ("+u.length+" \u9879)"}if(e==="WebSearch"){var f=t.query||"";if(f)return"\u641C\u7D22\uFF1A"+f}var v=n[0],m=t[v];if(typeof m=="string"){var y=m.length>50?m.slice(0,50)+"...":m;return v+": "+y}return n.length+" \u4E2A\u53C2\u6570"}function nm(e,t){if(!t)return null;var n=t.file_path||t.path||t.cwd;return n?n.length>50?"..."+n.slice(-47):n:null}function rm(e){if(!e)return"";for(var t=`
|
|
49
|
+
`,n=e.split(t),i=[],a=!1,s=0;s<n.length;s++){var o=n[s],l=o.trim();if(!(!a&&!l)){if(a=!0,l.indexOf("\u23FA")===0&&l.length>2){i.push(l.slice(1).trim());continue}if(l.indexOf("\u25CF")===0){if(l=l.slice(1).trim(),!l)continue;o=l}i.push(o)}}for(;i.length>0&&!i[i.length-1].trim();)i.pop();for(var c=[],d={},u=0;u<i.length;u++){var f=i[u].replace(/\s+/g,"");f.length>5&&d[f]||(f.length>5&&(d[f]=!0),c.push(i[u]))}return c.join(t)}function ec(e){var t=`
|
|
50
|
+
`,n=e.split(t),i=[],a=0;function s(g){var b=g.trim();return b.charAt(0)==="|"&&(b=b.slice(1)),b.charAt(b.length-1)==="|"&&(b=b.slice(0,-1)),b.split("|")}function o(g){return g?' style="text-align:'+g+'"':""}function l(g,b,w){var k="<thead><tr>"+g.map(function(L,S){return"<th"+o(b[S])+">"+L.trim()+"</th>"}).join("")+"</tr></thead>",E=w.length?"<tbody>"+w.map(function(L){return"<tr>"+L.map(function(S,M){return"<td"+o(b[M])+">"+S.trim()+"</td>"}).join("")+"</tr>"}).join("")+"</tbody>":"";return'<div class="md-table-wrap"><table class="md-table">'+k+E+"</table></div>"}for(;a<n.length;){var c=n[a];if(c.indexOf("|")!==-1&&a+1<n.length){var d=n[a+1].trim();if(/^\|?\s*:?-+:?(\s*\|\s*:?-+:?)+\s*\|?$/.test(d)){for(var u=s(c),f=s(d).map(function(g){var b=g.trim(),w=b.charAt(0)===":",k=b.charAt(b.length-1)===":";return w&&k?"center":k?"right":w?"left":""}),v=[],m=a+2;m<n.length;){var y=n[m].trim();if(!y||y.indexOf("|")===-1)break;v.push(s(n[m])),m+=1}i.push("",l(u,f,v),""),a=m;continue}}i.push(c),a+=1}return i.join(t)}function Za(e){if(!e)return"";var t=p(e),n="`",i=`
|
|
51
|
+
`;function a(q,N,V,te){for(var X=0;;){var oe=q.indexOf(N,X);if(oe===-1)break;var le=q.indexOf(N,oe+N.length);if(le===-1)break;var de=q.slice(oe+N.length,le);if(!de){X=le+N.length;continue}var ue=V+de+te;q=q.slice(0,oe)+ue+q.slice(le+N.length),X=oe+ue.length}return q}function s(q){return q>=48&&q<=57||q>=65&&q<=90||q>=97&&q<=122||q===95}function o(q,N,V){for(var te=0;te<q.length;){var X=q.indexOf("_",te);if(X===-1)break;var oe=X>0?q.charCodeAt(X-1):0;if(s(oe)){te=X+1;continue}for(var le=X+1,de=-1;le<q.length;){var ue=q.indexOf("_",le);if(ue===-1)break;var Se=ue+1,Ie=Se<q.length?q.charCodeAt(Se):0;if(!s(Ie)){de=ue;break}le=ue+1}if(de===-1)break;var qe=q.slice(X+1,de);if(!qe){te=de+1;continue}var H=N+qe+V;q=q.slice(0,X)+H+q.slice(de+1),te=X+H.length}return q}function l(q,N,V,te){return q.split(i).map(function(X){return X.indexOf(N)!==0?X:V+X.slice(N.length)+te}).join(i)}function c(q){return q.split(i).map(function(N){var V=N.indexOf(". ");if(V<=0)return N;for(var te=0;te<V;te+=1){var X=N.charCodeAt(te);if(X<48||X>57)return N}return"<li>"+N.slice(V+2)+"</li>"}).join(i)}function d(q){return q.split(i+i).map(function(N){var V=N.trim();return V?V.indexOf("<div")===0||V.indexOf("<h1")===0||V.indexOf("<h2")===0||V.indexOf("<h3")===0||V.indexOf("<h4")===0||V.indexOf("<h5")===0||V.indexOf("<h6")===0||V.indexOf("<ul")===0||V.indexOf("<ol")===0||V.indexOf("<li")===0||V.indexOf("<blockquote")===0||V.indexOf("<pre")===0?V:"<p>"+V.split(i).join("<br>")+"</p>":""}).join("")}for(var u=0;;){var f=t.indexOf(n+n+n,u);if(f===-1)break;var v=t.indexOf(n+n+n,f+3);if(v===-1)break;var m=t.slice(f+3,v),y=m.indexOf(i),g="",b=m;if(y!==-1&&y<30){for(var w=m.slice(0,y).trim(),k=w.length>0,E=0;E<w.length;E+=1){var L=w.charCodeAt(E),S=L>=48&&L<=57,M=L>=65&&L<=90,_=L>=97&&L<=122;if(!S&&!M&&!_){k=!1;break}}k&&(g=w,b=m.slice(y+1))}var W=im(b.trim(),g),Y=W.replace(/_/g,"_").replace(/\*/g,"*"),O='<div class="code-block"><div class="code-block-header"><span class="code-lang">'+(g||"code")+'</span><button class="code-copy">Copy</button></div><pre><code>'+Y+"</code></pre></div>";t=t.slice(0,f)+O+t.slice(v+3),u=f+O.length}for(u=0;;){var I=t.indexOf(n,u);if(I===-1)break;var A=t.indexOf(n,I+1);if(A===-1)break;if(A===I+1){u=A+1;continue}var B=t.slice(I+1,A),z=B.replace(/_/g,"_").replace(/\*/g,"*"),ae='<code class="code-inline">'+z+"</code>";t=t.slice(0,I)+ae+t.slice(A+1),u=I+ae.length}t=a(t,"**","<strong>","</strong>"),t=a(t,"*","<em>","</em>"),t=o(t,"<em>","</em>"),t=l(t,"### ","<h3>","</h3>"),t=l(t,"## ","<h2>","</h2>"),t=l(t,"# ","<h1>","</h1>"),t=l(t,"> ","<blockquote>","</blockquote>"),t=l(t,"- ","<li>","</li>"),t=l(t,"* ","<li>","</li>"),t=c(t),t=ec(t);var ne=t.split(i),K=[],re=[];function U(){re.length&&(K.push("<ul>"+re.join("")+"</ul>"),re=[])}return ne.forEach(function(q){if(q.indexOf("<li>")===0&&q.lastIndexOf("</li>")===q.length-5){re.push(q);return}U(),K.push(q)}),U(),t=d(K.join(i)),'<div class="markdown-content">'+t+"</div>"}function im(e,t){return e=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),e}function Ti(e){var t=String(e||"").trim();return t.length<=24?t||"\u672A\u9009\u62E9\u4F1A\u8BDD":t.slice(0,21)+"..."}function es(e){return String(e||"").replace(/\r\r\n/g,`\r
|
|
52
|
+
`).replace(/\u0000/g,"")}function Ke(e,t){if(e){e.textContent=t,e.classList.remove("hidden");for(var n=e.previousElementSibling;n;){if(n.tagName==="INPUT"){n.setAttribute("data-error","true");break}n=n.previousElementSibling}}}function Li(e){if(e){e.textContent="",e.classList.add("hidden");for(var t=e.previousElementSibling;t;){if(t.tagName==="INPUT"){t.setAttribute("data-error","false");break}t=t.previousElementSibling}}}function T(e,t){var n=document.createElement("div");n.className="toast-message"+(t==="error"?" toast-error":""),t!=="error"&&(n.style.background="var(--accent)",n.style.color="white"),n.textContent=e,document.body.appendChild(n),setTimeout(function(){n.remove()},t==="error"?4e3:2200)}var Rr=[];function am(e){switch(e){case"warning":return"!";case"danger":return"\u26A0\uFE0E";case"success":return"\u2713";case"question":return"?";default:return"i"}}function yn(e){e=e||{};var t=e.dismissable!==!1,n=e.type||"info",i=e.icon||am(n),a=!!e.input;return new Promise(function(s){var o=document.createElement("div");o.className="wand-dialog-backdrop",o.setAttribute("role","presentation");var l=document.createElement("div");l.className="wand-dialog",l.setAttribute("role",a?"dialog":"alertdialog"),l.setAttribute("aria-modal","true"),e.title&&l.setAttribute("aria-label",e.title);var c=document.createElement("div");c.className="wand-dialog-header";var d=document.createElement("div");d.className="wand-dialog-icon "+n,d.textContent=i,c.appendChild(d);var u=document.createElement("div");if(u.className="wand-dialog-textwrap",e.title){var f=document.createElement("div");f.className="wand-dialog-title",f.textContent=e.title,u.appendChild(f)}if(e.message){var v=document.createElement("div");v.className="wand-dialog-message",v.textContent=e.message,u.appendChild(v)}c.appendChild(u),l.appendChild(c);var m=null;if(a){var y=document.createElement("div");y.className="wand-dialog-body",m=document.createElement("input"),m.type="text",m.className="wand-dialog-input",e.inputPlaceholder&&(m.placeholder=e.inputPlaceholder),e.inputValue!=null&&(m.value=String(e.inputValue)),y.appendChild(m),l.appendChild(y)}var g=e.buttons&&e.buttons.length?e.buttons:[{label:"\u597D",value:!0,kind:"primary",autofocus:!0}],b=document.createElement("div");b.className="wand-dialog-footer";var w=null,k=null;function E(S){if(!o.classList.contains("closing")){o.classList.add("closing"),document.removeEventListener("keydown",L,!0);var M=Rr.indexOf(E);M>=0&&Rr.splice(M,1),setTimeout(function(){o.parentNode&&o.parentNode.removeChild(o),s(S)},160)}}g.forEach(function(S){var M=document.createElement("button"),_=S.kind||"secondary";M.className="btn btn-"+_,M.type="button",M.textContent=S.label,M.addEventListener("click",function(){a&&S.kind==="primary"?E(m?m.value:""):E(S.value)}),w||(w=M),S.autofocus&&(k=M),b.appendChild(M)}),l.appendChild(b),o.appendChild(l),o.addEventListener("click",function(S){S.target===o&&t&&E(e.cancelValue!==void 0?e.cancelValue:a?null:!1)});function L(S){if(Rr[Rr.length-1]===E){if(S.key==="Escape"&&t){S.preventDefault(),S.stopPropagation(),E(e.cancelValue!==void 0?e.cancelValue:a?null:!1);return}if(S.key==="Enter"){for(var M=null,_=0;_<g.length;_++)if(g[_].kind==="primary"){M=g[_];break}M||(M=g[g.length-1]),M&&(S.preventDefault(),S.stopPropagation(),a&&M.kind==="primary"?E(m?m.value:""):E(M.value))}}}document.addEventListener("keydown",L,!0),Rr.push(E),document.body.appendChild(o),requestAnimationFrame(function(){if(a&&m){m.focus();try{m.select()}catch{}}else k?k.focus():w&&w.focus()})})}function sm(e,t){return t=t||{},yn({title:t.title||"\u63D0\u793A",message:typeof e=="string"?e:String(e??""),type:t.type||"info",buttons:[{label:t.okLabel||"\u597D",value:void 0,kind:"primary",autofocus:!0}]})}function om(e,t){t=t||{};var n=!!t.danger||t.type==="danger";return yn({title:t.title||(n?"\u786E\u8BA4\u64CD\u4F5C":"\u8BF7\u786E\u8BA4"),message:typeof e=="string"?e:String(e??""),type:t.type||(n?"danger":"question"),cancelValue:!1,buttons:[{label:t.cancelLabel||"\u53D6\u6D88",value:!1,kind:"secondary"},{label:t.okLabel||(n?"\u5220\u9664":"\u786E\u5B9A"),value:!0,kind:n?"danger":"primary",autofocus:!n}]}).then(function(i){return i===!0})}function lm(e,t,n){return n=n||{},yn({title:n.title||"\u8BF7\u8F93\u5165",message:typeof e=="string"?e:String(e??""),type:n.type||"question",input:!0,inputValue:t==null?"":String(t),inputPlaceholder:n.placeholder||"",cancelValue:null,buttons:[{label:n.cancelLabel||"\u53D6\u6D88",value:null,kind:"secondary"},{label:n.okLabel||"\u786E\u5B9A",value:void 0,kind:"primary"}]})}window.wandAlert=sm,window.wandConfirm=om,window.wandPrompt=lm,window.openWandDialog=yn;var Zt=[],tc=0,cm=6,dm=16;function ts(e){if((e.actionLabel||e.playSound)&&oc(),!r.notifBubble)return{dismiss:function(){}};var t=++tc,n=e.type||"info",i=e.icon||(n==="warning"?"!":n==="success"?"\u2713":"i"),a=e.duration!==void 0?e.duration:8e3,s=document.createElement("div");s.className="notification-bubble",s.setAttribute("data-nid",t);var o='<div class="notification-bubble-header"><span class="notification-bubble-icon '+n+'">'+i+'</span><span class="notification-bubble-title">'+p(e.title)+'</span><button class="notification-bubble-close" title="\u5173\u95ED">\xD7</button></div>',l=e.body?'<div class="notification-bubble-body">'+p(e.body).replace(/\n/g,"<br>")+"</div>":"",c=e.actionLabel?'<div class="notification-bubble-actions"><button class="primary">'+p(e.actionLabel)+"</button></div>":"";s.innerHTML=o+l+c,document.body.appendChild(s);var d={id:t,el:s};Zt.push(d),ns();var u=s.querySelector(".notification-bubble-close");if(u&&(u.onclick=function(){Fr(t)}),e.actionLabel&&e.action){var f=s.querySelector(".notification-bubble-actions button");f&&(f.onclick=function(){e.action(),Fr(t)})}var v=null;return a>0&&(v=setTimeout(function(){Fr(t)},a)),{dismiss:function(){Fr(t)}}}function Fr(e){for(var t=-1,n=0;n<Zt.length;n++)if(Zt[n].id===e){t=n;break}if(t!==-1){var i=Zt[t];i.el.classList.add("slide-out"),Zt.splice(t,1),ns(),setTimeout(function(){i.el.parentNode&&i.el.parentNode.removeChild(i.el)},300)}}function ns(){for(var e=dm,t=0;t<Zt.length;t++)Zt[t].el.style.top=e+"px",e+=Zt[t].el.offsetHeight+cm}try{var um=navigator.userAgent.match(/WandPlatform\/macOS/),nc=window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.wandNative||null;um&&nc&&typeof window.WandNative>"u"&&(window.WandNative={downloadUpdate:function(e,t,n){try{nc.postMessage({type:"downloadUpdate",url:String(e||""),fileName:String(t||"wand-update.dmg"),source:String(n||"local")})}catch{}}})}catch{}var Re=typeof WandNative<"u"&&typeof WandNative.sendNotification=="function",Wr=navigator.userAgent.match(/WandApp\/([^\s]+)/),rc=/WandPlatform\/macOS/.test(navigator.userAgent),fm=!!Wr&&!rc,Pn=Wr&&fm?Wr[1]:null,wn=Wr&&rc?Wr[1]:null;function rr(e){if(!(!Re||typeof WandNative.vibrate!="function"))try{WandNative.vibrate(e||"light")}catch{}}function rs(){if(Re){var e=r.sessions.some(function(t){return!t.archived&&(t.status==="running"||t.status==="thinking"||t.status==="initializing")});if(typeof WandNative.setKeepScreenOn=="function")try{WandNative.setKeepScreenOn(e)}catch{}if(e){if(typeof WandNative.startKeepAlive=="function")try{WandNative.startKeepAlive()}catch{}}else if(typeof WandNative.stopKeepAlive=="function")try{WandNative.stopKeepAlive()}catch{}}}function Bi(){if(Re&&typeof WandNative.getPermission=="function")try{return WandNative.getPermission()}catch{}return null}function pm(){if(Re){var e=Bi();if(e==="default"||e==="denied")try{WandNative.requestPermission()}catch{}return}typeof Notification<"u"&&Notification.permission==="default"&&Notification.requestPermission()}function vm(e){var t=e||{};return!(t.onlyWhenHidden&&!document.hidden||t.skipWhenSelectedSessionId&&t.skipWhenSelectedSessionId===r.selectedId&&!document.hidden)}function mm(e,t){if(!e||!t||t<=0)return!1;var n=r.notificationHistory[e]||0,i=Date.now();return i-n<t?!0:(r.notificationHistory[e]=i,!1)}function Mi(e,t,n){var i=n||{},a=i.tag||"";if(vm(i)&&!mm(a,i.minIntervalMs||0)){if(Re){var s=Bi();if(s!=="granted")return;try{var o=a;i.kind&&(o=i.kind+(a?":"+a:"")),WandNative.sendNotification(e||"Wand",t||"",o||"")}catch{}return}if(!(typeof Notification>"u"||Notification.permission!=="granted")&&document.hidden)try{var l=new Notification(e,{body:t||"",icon:i.icon||"/favicon.ico",tag:a||void 0});l.onclick=function(){window.focus(),l.close(),i.onClick&&i.onClick()},setTimeout(function(){l.close()},1e4)}catch{}}}function gm(e,t){if(!(!t||!t.title)){var n=r.sessions.find(function(a){return a.id===e});if(n){var i=n.summary||n.command||e;Mi("\u4EFB\u52A1\u8FDB\u884C\u4E2D",i+`
|
|
53
|
+
`+t.title,{kind:"task",tag:"wand-task-"+e+"-"+t.title,minIntervalMs:9e4,onlyWhenHidden:!0,skipWhenSelectedSessionId:e,onClick:function(){e!==r.selectedId&&Dt(e)}})}}}function ic(e,t){xm(e||"-",t||"-"),Mi("Wand \u53D1\u73B0\u65B0\u7248\u672C","\u5F53\u524D "+(e||"-")+" \u2192 \u6700\u65B0 "+(t||"-"),{kind:"update",tag:"wand-update",minIntervalMs:3e5})}function hm(e,t){Mi("\u9700\u8981\u4F60\u7684\u6388\u6743",t,{kind:"permission",tag:"wand-perm-"+e,minIntervalMs:6e4,onlyWhenHidden:!0,skipWhenSelectedSessionId:e,onClick:function(){e!==r.selectedId&&Dt(e)}})}function bm(e,t,n){Mi(t,n,{kind:"task-ended",tag:"wand-ended-"+e,minIntervalMs:1e4,onClick:function(){e!==r.selectedId&&Dt(e)}})}var Hn={},ym=30;function ac(e){if(!e)return"";var t=String(e).replace(/^#+\s+/gm,"").replace(/\*\*/g,"").replace(/`/g,"").trim(),n=t.split(`
|
|
54
|
+
`)[0].trim();return n.length>100&&(n=n.slice(0,100)+"\u2026"),n}function is(e){!Re||typeof WandNative.updateSessionProgress!="function"||e&&(Hn[e]&&clearTimeout(Hn[e]),Hn[e]=setTimeout(function(){delete Hn[e],wm(e)},ym))}function wm(e){var t=r.sessions.find(function(S){return S.id===e});if(t){var n=t.summary||t.command||e,i=t.status||"running";if(i==="idle"||i==="archived"||i==="exited"){sc(e);return}for(var a=null,s="",o="",l=[],c=t.messages||[],d=c.length-1;d>=0;d--){var u=c[d];if(!(!u.content||!Array.isArray(u.content))){if(!o&&u.role==="assistant")for(var f=u.content.length-1;f>=0;f--){var v=u.content[f];if(v&&v.type==="text"&&v.text&&v.text.trim()){o=ac(v.text);break}}if(u.role==="user"){var m=u.content.some(function(S){return S&&S.__queued});if(!m)for(var y=0;y<u.content.length;y++){var g=u.content[y];if(g&&g.type==="text"&&g.text&&g.text.trim()){var b=ac(g.text);s||(s=b),l.length<4&&l.push(b);break}}}if(!a)for(var w=u.content.length-1;w>=0;w--){var k=u.content[w];if(k&&k.type==="tool_use"&&k.name==="TodoWrite"&&k.input&&k.input.todos){a=k.input.todos;break}}if(a&&l.length>=4&&o)break}}l.reverse();var E="";e===r.selectedId&&r.currentTask&&r.currentTask.title&&(E=r.currentTask.title);var L={sessionLabel:n,status:i,currentTask:E,latestUserText:s,latestAssistantText:o,todos:a||[],recentUserTexts:l};try{WandNative.updateSessionProgress(e,JSON.stringify(L))}catch{}}}function sc(e){if(!(!Re||typeof WandNative.clearSessionProgress!="function")){Hn[e]&&(clearTimeout(Hn[e]),delete Hn[e]);try{WandNative.clearSessionProgress(e)}catch{}}}window.handleNativeBack=function(){var e=document.getElementById("settings-modal");if(e&&!e.classList.contains("hidden"))return $n(),!0;var t=document.getElementById("session-modal");if(t&&!t.classList.contains("hidden"))return un(),!0;var n=document.getElementById("worktree-merge-modal");return n&&!n.classList.contains("hidden")?(Qn(),!0):r.filePanelOpen&&Ne()?(Gi(!1),!0):r.sessionsDrawerOpen&&Ne()?(Er(),!0):Ne()&&r.selectedId?(r.selectedId=null,be(),r.sessionsDrawerOpen=!0,Ee("wand-sidebar-open",!0),Yt(),!0):!1};function oc(){r.notifSound&&Ai()}function km(){return Ai()}function Ai(){try{let a=function(s,o,l){var c=t.createOscillator(),d=t.createGain();c.type="sine",c.frequency.value=s,d.gain.setValueAtTime(0,t.currentTime+o),d.gain.linearRampToValueAtTime(.5*n,t.currentTime+o+.04),d.gain.exponentialRampToValueAtTime(.001,t.currentTime+o+l),c.connect(d),d.connect(t.destination),c.start(t.currentTime+o),c.stop(t.currentTime+o+l)};var i=a,e=window.AudioContext||window.webkitAudioContext;if(!e)return!1;var t=new e;t.state==="suspended"&&t.resume();var n=(r.notifVolume||0)/100;return a(523,0,.25),a(659,.12,.3),setTimeout(function(){t.close()},600),!0}catch{return!1}}function xm(e,t){if(r._updateBubbleShown)return;r._updateBubbleShown=!0,oc();var n=++tc,i=document.createElement("div");i.className="notification-bubble update-card",i.setAttribute("data-nid",n),i.innerHTML='<div class="update-card-shine" aria-hidden="true"></div><div class="update-card-header"><div class="update-card-icon" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5"/><path d="M5 12l7-7 7 7"/></svg></div><div class="update-card-heading"><div class="update-card-title">\u53D1\u73B0\u65B0\u7248\u672C</div><div class="update-card-subtitle" id="update-card-subtitle">\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u4E00\u952E\u66F4\u65B0</div></div><button class="update-card-close" title="\u7A0D\u540E\u63D0\u9192" aria-label="\u5173\u95ED"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6L6 18"/><path d="M6 6l12 12"/></svg></button></div><div class="update-card-version"><span class="update-card-version-chip update-card-version-current">v'+p(String(e).replace(/^v/,""))+'</span><svg class="update-card-version-arrow" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="M13 5l7 7-7 7"/></svg><span class="update-card-version-chip update-card-version-latest">v'+p(String(t).replace(/^v/,""))+'</span></div><div class="update-card-progress" id="update-card-progress" aria-hidden="true"><div class="update-card-progress-track"><div class="update-card-progress-fill"></div></div></div><div class="update-card-status hidden" id="update-card-status"></div><div class="update-card-actions"><button class="update-card-action update-card-action-primary" id="update-bubble-action" type="button"><span class="update-card-action-label">\u7ACB\u5373\u66F4\u65B0</span></button></div>',document.body.appendChild(i);var a={id:n,el:i};Zt.push(a),ns();var s=i.querySelector(".update-card-close");s&&(s.onclick=function(){Fr(n),r._updateBubbleShown=!1});var o=i.querySelector("#update-bubble-action"),l=i.querySelector(".update-card-action-label"),c=i.querySelector("#update-card-subtitle"),d=i.querySelector("#update-card-status"),u=i.querySelector("#update-card-progress");function f(y,g){if(d){if(d.textContent=y||"",d.classList.remove("hidden","error","success"),!y){d.classList.add("hidden");return}g&&d.classList.add(g)}}function v(y){c&&(c.textContent=y||"")}function m(y){u&&u.classList.toggle("active",!!y)}o&&(o.onclick=function(){o.disabled=!0,i.classList.add("is-busy"),l&&(l.textContent="\u66F4\u65B0\u4E2D\u2026"),v("\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5\u65B0\u7248\u672C\u2026"),m(!0),f(""),fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin"}).then(function(y){return y.json()}).then(function(y){if(y.error){m(!1),i.classList.remove("is-busy"),v("\u66F4\u65B0\u672A\u5B8C\u6210"),f(y.error,"error"),o.disabled=!1,l&&(l.textContent="\u91CD\u8BD5");return}if(i.classList.add("is-success"),v((y.message||"\u66F4\u65B0\u5B8C\u6210")+"\uFF0C\u6B63\u5728\u91CD\u542F\u670D\u52A1\u2026"),f(""),l&&(l.textContent="\u6B63\u5728\u91CD\u542F\u2026"),y.detachedUpdate){kn();return}if(y.restartRequired===!1){m(!1),i.classList.remove("is-busy"),o.disabled=!1,l&&(l.textContent="\u5DF2\u5B8C\u6210");return}Sm(o,l,c,d,u)}).catch(function(){m(!1),i.classList.remove("is-busy"),v("\u66F4\u65B0\u672A\u5B8C\u6210"),f("\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u540E\u91CD\u8BD5","error"),o.disabled=!1,l&&(l.textContent="\u91CD\u8BD5")})})}function Sm(e,t,n,i,a){fetch("/api/restart",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin"}).then(function(s){return s.json()}).then(function(){kn()}).catch(function(){kn()})}function lc(e,t){e&&(e.disabled=!0,e.textContent="\u6B63\u5728\u91CD\u542F\u2026"),t&&(t.textContent="\u670D\u52A1\u6B63\u5728\u91CD\u542F\u2026",t.style.color="var(--text-secondary)"),fetch("/api/restart",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"same-origin"}).then(function(n){return n.json()}).then(function(){kn()}).catch(function(){kn()})}function kn(){if(!document.getElementById("restart-overlay")){var e=document.createElement("div");e.id="restart-overlay",e.className="restart-overlay",e.innerHTML='<div class="restart-overlay-content"><div class="restart-spinner"></div><div class="restart-title">\u670D\u52A1\u6B63\u5728\u91CD\u542F</div><div class="restart-subtitle">\u7A0D\u540E\u5C06\u81EA\u52A8\u5237\u65B0\u9875\u9762\u2026</div></div>',document.body.appendChild(e);var t=0,n=180,i=setInterval(function(){if(t++,fetch("/api/config",{credentials:"same-origin"}).then(function(s){s.ok&&(clearInterval(i),location.reload())}).catch(function(){}),t>=n){clearInterval(i);var a=e.querySelector(".restart-subtitle");a&&(a.innerHTML='\u91CD\u542F\u8D85\u65F6\uFF0C\u8BF7 <a href="javascript:location.reload()" style="color:var(--accent);text-decoration:underline">\u624B\u52A8\u5237\u65B0</a> \u9875\u9762\u3002')}},2e3)}}function Em(e,t){if(!document.getElementById("restart-overlay")){var n=document.createElement("div");n.id="restart-overlay",n.className="restart-overlay",n.innerHTML='<div class="restart-overlay-content"><div class="restart-spinner"></div><div class="restart-title">\u81EA\u52A8\u66F4\u65B0\u4E2D</div><div class="restart-subtitle">'+p(e)+" \u2192 "+p(t)+"<br>\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5\u65B0\u7248\u672C\uFF0C\u7A0D\u540E\u5C06\u81EA\u52A8\u91CD\u542F\u2026</div></div>",document.body.appendChild(n)}}function p(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}})();
|