dmux 3.3.0 → 3.4.3
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/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +51 -12
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +24 -4
- package/dist/actions/implementations/closeAction.js.map +1 -1
- package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -1
- package/dist/actions/merge/commitMessageHandler.js +0 -8
- package/dist/actions/merge/commitMessageHandler.js.map +1 -1
- package/dist/actions/merge/mergeExecution.d.ts.map +1 -1
- package/dist/actions/merge/mergeExecution.js +5 -1
- package/dist/actions/merge/mergeExecution.js.map +1 -1
- package/dist/chunks/styles.css_vue_type_style_index_0_src_true_lang-pW5mq51o.js +17 -0
- package/dist/components/popups/logsPopup.js +35 -19
- package/dist/components/popups/logsPopup.js.map +1 -1
- package/dist/components/ui/FooterHelp.d.ts +4 -0
- package/dist/components/ui/FooterHelp.d.ts.map +1 -1
- package/dist/components/ui/FooterHelp.js +45 -1
- package/dist/components/ui/FooterHelp.js.map +1 -1
- package/dist/components/ui/ToastNotification.d.ts +13 -0
- package/dist/components/ui/ToastNotification.d.ts.map +1 -0
- package/dist/components/ui/ToastNotification.js +22 -0
- package/dist/components/ui/ToastNotification.js.map +1 -0
- package/dist/dashboard.html +2 -2
- package/dist/dashboard.js +2 -2
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +8 -23
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useInputHandling.d.ts.map +1 -1
- package/dist/hooks/useInputHandling.js +16 -2
- package/dist/hooks/useInputHandling.js.map +1 -1
- package/dist/hooks/useLayoutManagement.d.ts.map +1 -1
- package/dist/hooks/useLayoutManagement.js +46 -12
- package/dist/hooks/useLayoutManagement.js.map +1 -1
- package/dist/hooks/usePaneLoading.d.ts +3 -0
- package/dist/hooks/usePaneLoading.d.ts.map +1 -1
- package/dist/hooks/usePaneLoading.js +48 -8
- package/dist/hooks/usePaneLoading.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts +3 -0
- package/dist/hooks/usePaneSync.d.ts.map +1 -1
- package/dist/hooks/usePaneSync.js +18 -3
- package/dist/hooks/usePaneSync.js.map +1 -1
- package/dist/hooks/usePanes.js +16 -4
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useShellDetection.js +20 -6
- package/dist/hooks/useShellDetection.js.map +1 -1
- package/dist/index.js +58 -46
- package/dist/index.js.map +1 -1
- package/dist/layout/LayoutCalculator.d.ts.map +1 -1
- package/dist/layout/LayoutCalculator.js +0 -3
- package/dist/layout/LayoutCalculator.js.map +1 -1
- package/dist/layout/SpacerManager.js +15 -7
- package/dist/layout/SpacerManager.js.map +1 -1
- package/dist/layout/TmuxLayoutApplier.d.ts +4 -1
- package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -1
- package/dist/layout/TmuxLayoutApplier.js +28 -21
- package/dist/layout/TmuxLayoutApplier.js.map +1 -1
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +137 -97
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/routes/keysRoutes.d.ts +15 -2
- package/dist/server/routes/keysRoutes.d.ts.map +1 -1
- package/dist/server/routes/keysRoutes.js +18 -1
- package/dist/server/routes/keysRoutes.js.map +1 -1
- package/dist/services/AutoUpdater.d.ts.map +1 -1
- package/dist/services/AutoUpdater.js +2 -1
- package/dist/services/AutoUpdater.js.map +1 -1
- package/dist/services/PaneAnalyzer.d.ts +12 -3
- package/dist/services/PaneAnalyzer.d.ts.map +1 -1
- package/dist/services/PaneAnalyzer.js +57 -8
- package/dist/services/PaneAnalyzer.js.map +1 -1
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +7 -1
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/services/StatusDetector.d.ts.map +1 -1
- package/dist/services/StatusDetector.js +31 -14
- package/dist/services/StatusDetector.js.map +1 -1
- package/dist/services/TmuxService.d.ts +57 -3
- package/dist/services/TmuxService.d.ts.map +1 -1
- package/dist/services/TmuxService.js +97 -7
- package/dist/services/TmuxService.js.map +1 -1
- package/dist/services/ToastService.d.ts +71 -0
- package/dist/services/ToastService.d.ts.map +1 -0
- package/dist/services/ToastService.js +151 -0
- package/dist/services/ToastService.js.map +1 -0
- package/dist/shared/StateManager.d.ts +22 -0
- package/dist/shared/StateManager.d.ts.map +1 -1
- package/dist/shared/StateManager.js +68 -1
- package/dist/shared/StateManager.js.map +1 -1
- package/dist/terminal.html +2 -2
- package/dist/terminal.js +3 -3
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/asciiArt.js +3 -3
- package/dist/utils/asciiArt.js.map +1 -1
- package/dist/utils/atomicWrite.d.ts +33 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +89 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/errorHandling.js +34 -8
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts.map +1 -1
- package/dist/utils/layoutManager.js +223 -169
- package/dist/utils/layoutManager.js.map +1 -1
- package/dist/utils/mergeValidation.d.ts.map +1 -1
- package/dist/utils/mergeValidation.js +5 -1
- package/dist/utils/mergeValidation.js.map +1 -1
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +5 -4
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/paneRebinding.js +4 -2
- package/dist/utils/paneRebinding.js.map +1 -1
- package/dist/utils/postPaneCleanup.d.ts.map +1 -1
- package/dist/utils/postPaneCleanup.js +1 -11
- package/dist/utils/postPaneCleanup.js.map +1 -1
- package/dist/utils/shellPaneDetection.js +33 -23
- package/dist/utils/shellPaneDetection.js.map +1 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +19 -13
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/welcomePane.d.ts.map +1 -1
- package/dist/utils/welcomePane.js +1 -7
- package/dist/utils/welcomePane.js.map +1 -1
- package/dist/utils/welcomePaneManager.d.ts.map +1 -1
- package/dist/utils/welcomePaneManager.js +10 -24
- package/dist/utils/welcomePaneManager.js.map +1 -1
- package/package.json +7 -7
- package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +0 -28
- /package/dist/{_plugin-vue_export-helper.css → styles.css} +0 -0
package/dist/dashboard.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as
|
|
2
|
-
`).map(l=>{if(l.includes("|")){const d=l.split("|");if(d.length===2){const c=d[0],m=d[1].replace(/\+/g,'<span style="color: #4ade80;">+</span>').replace(/-/g,'<span style="color: #f87171;">-</span>');return c+'<span style="opacity: 0.6;">|</span>'+m}}return l}).join("<br>"),St=async()=>{var s;if(k.value)try{D.value=!0;const d=await(await fetch(`/api/callbacks/input/${k.value.callbackId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:k.value.inputValue})})).json();if(d.requiresInteraction){let c={};d.interactionType==="confirm"?c={type:"confirm",title:d.title||"Confirm",message:d.message,...d.confirmData}:d.interactionType==="choice"?c={type:"choice",title:d.title||"Choose",message:d.message,...d.choiceData}:d.interactionType==="input"&&(c={type:"input",title:d.title||"Input",message:d.message,...d.inputData,inputValue:((s=d.inputData)==null?void 0:s.defaultValue)||""},I(()=>{const v=document.querySelector(".dialog-input");v&&(v.focus(),v.select())})),k.value=c}else B()}catch(l){console.error("Failed to submit input:",l),alert("Failed to complete action")}finally{D.value=!1}},Dt=async(s,l)=>{try{b.value.add(s.id),b.value=new Set(b.value);const d=l.keys||[l.action];for(const c of d)await fetch(`/api/keys/${s.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})});setTimeout(()=>{b.value.delete(s.id),b.value=new Set(b.value)},1500)}catch(d){console.error("Failed to select option:",d),b.value.delete(s.id),b.value=new Set(b.value)}},Pt=async s=>{const l=h.value[s.id];if(!(!l||!l.trim()))try{f.value.add(s.id),f.value=new Set(f.value);for(const d of l)await fetch(`/api/keys/${s.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:d})});await fetch(`/api/keys/${s.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"Enter"})}),J.value[s.id]=l.substring(0,50)+(l.length>50?"...":""),h.value[s.id]="",setTimeout(()=>{delete J.value[s.id],f.value.delete(s.id),f.value=new Set(f.value)},3e3)}catch(d){console.error("Failed to send prompt:",d),f.value.delete(s.id),f.value=new Set(f.value)}},xt=s=>{const l=s.target;l.style.height="auto",l.style.height=l.scrollHeight+"px"},At=async()=>{try{N.value=!0;const l=await(await fetch("/api/settings")).json();V.value=l.settings,G.value=l.definitions,Z.value=!0,H.value=!1}catch(s){console.error("Failed to load settings:",s),alert("Failed to load settings")}finally{N.value=!1}},rt=()=>{Z.value=!1,V.value=null,G.value=[],H.value=!1,q.value=[]},Tt=async(s,l,d)=>{try{N.value=!0,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:s,value:l,scope:d})});const v=await(await fetch("/api/settings")).json();V.value=v.settings}catch(c){console.error("Failed to update setting:",c),alert("Failed to update setting")}finally{N.value=!1}},jt=async()=>{try{X.value=!0;const l=await(await fetch("/api/hooks")).json();q.value=l.hooks||[],H.value=!0}catch(s){console.error("Failed to load hooks:",s),alert("Failed to load hooks")}finally{X.value=!1}},gt=()=>{H.value=!1,q.value=[]},It=async()=>{const s="I would like to edit my dmux hooks in .dmux-hooks, please read the instructions in there and ask me what I want to edit";gt(),rt(),T.value=s,await I(),await et()},st=s=>{const l=s.target;S.value&&!l.closest(".action-menu-btn")&&!l.closest(".action-menu-dropdown")&&(S.value=null)};zt(()=>{document.documentElement.setAttribute("data-theme",x.value),Y(),document.addEventListener("click",st),document.addEventListener("visibilitychange",()=>{document.hidden?$():Y()})}),Nt(()=>{$(),document.removeEventListener("click",st)});const ut={projectName:U,sessionName:e,connected:O,panes:F,lastUpdate:o,timeSinceUpdate:p,promptInputs:h,sendingPrompts:f,queuedMessages:J,theme:x,expandedPrompts:A,loadingOptions:b,showCreateDialog:K,newPanePrompt:T,newPaneAgent:C,creatingPane:Q,availableAgents:E,needsAgentChoice:L,createStep:j,actions:pt,paneActions:W,showActionMenu:S,actionDialog:k,executingAction:R,actionDialogLoading:D,showSettingsDialog:Z,settingsData:V,settingDefinitions:G,loadingSettings:N,showHooksSection:H,hooksData:q,loadingHooks:X,get pollingInterval(){return _},set pollingInterval(s){_=s},startPolling:Y,stopPolling:$,toggleTheme:ht,togglePrompt:mt,openCreateDialog:yt,closeCreateDialog:tt,createPane:et,selectAgent:kt,updatePanesFromData:ct,fetchPanes:ot,fetchPaneActions:dt,toggleActionMenu:ft,executeAction:bt,closeActionDialog:B,confirmAction:_t,selectChoice:wt,colorizeDiffStat:Ct,submitInput:St,selectOption:Dt,sendPrompt:Pt,autoExpand:xt,openSettingsDialog:At,closeSettingsDialog:rt,updateSetting:Tt,openHooksSection:jt,closeHooksSection:gt,editHooksWithAgent:It,handleClickOutside:st};return Object.defineProperty(ut,"__isScriptSetup",{enumerable:!1,value:!0}),ut}}),Lt={class:"session-info"},Vt=["title"],qt={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Bt={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ut={key:0},Jt={class:"container"},Kt={class:"actions-bar"},Qt=["disabled"],Wt=["disabled"],Rt={key:0,class:"no-panes"},Zt={key:1,class:"panes-grid"},Gt={class:"pane-header"},Xt={class:"pane-header-content"},Yt=["href"],$t={class:"pane-title"},te={class:"pane-meta"},ee={key:0,class:"pane-autopilot",title:"Autopilot enabled"},oe={key:1,class:"pane-agent shell",title:"Shell pane"},se={class:"pane-id"},ne=["onClick"],ae={key:0,class:"action-menu-dropdown"},ie=["onClick","disabled"],le={class:"action-icon"},ce={class:"action-label"},de={class:"pane-prompt-section"},re=["onClick"],ge={class:"prompt-header"},ue={class:"expand-icon"},ve={class:"prompt-text"},pe={key:0,class:"pane-prompt-full"},he={key:1,class:"agent-summary"},me={key:2,class:"analyzer-error"},ye={key:0,class:"options-dialog"},ke={class:"options-question"},fe={key:0,class:"options-warning"},be={key:1,class:"analyzing-state"},_e={key:2,class:"options-buttons"},we=["onClick","disabled"],Ce={class:"prompt-input-wrapper"},Se=["onUpdate:modelValue","placeholder","disabled"],De=["onClick","disabled","title"],Pe={key:0,class:"button-loader"},xe={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 988.44 1200.05"},Ae={key:0,class:"queued-message"},Te={key:3,class:"dev-server-status"},je=["href"],Ie={class:"action-dialog"},Me={key:0},ze=["onKeydown"],Ne={class:"dialog-buttons"},He=["disabled"],Oe={key:1},Fe={class:"agent-choices"},Ee=["onClick","disabled"],Le={key:0,class:"action-dialog"},Ve={key:0,class:"dialog-loading"},qe={key:1,class:"dialog-buttons"},Be=["disabled"],Ue=["disabled"],Je={class:"action-dialog"},Ke={key:0},Qe={key:1,class:"dialog-loading"},We={key:2},Re={class:"choice-options"},Ze=["onClick","disabled"],Ge={class:"choice-label"},Xe={key:0,class:"choice-description"},Ye={class:"dialog-buttons"},$e=["disabled"],to={class:"action-dialog"},eo=["innerHTML"],oo={key:1,class:"dialog-loading"},so={key:2},no=["placeholder"],ao={class:"dialog-buttons"},io=["disabled"],lo=["disabled"],co={class:"action-dialog settings-dialog"},ro={key:0,class:"dialog-loading"},go={key:1,class:"settings-list"},uo={class:"setting-header"},vo={class:"setting-info"},po={class:"setting-label"},ho={class:"setting-description"},mo={key:0,class:"setting-control"},yo={class:"setting-value"},ko={key:0,class:"setting-scope"},fo={key:1,class:"setting-scope"},bo={class:"setting-buttons"},_o=["onClick","disabled"],wo=["onClick","disabled"],Co=["onClick","disabled"],So=["onClick","disabled"],Do={class:"setting-control"},Po={class:"setting-value"},xo={key:0,class:"setting-scope"},Ao={key:1,class:"setting-scope"},To={class:"setting-option-label"},jo={class:"setting-buttons"},Io=["onClick","disabled"],Mo=["onClick","disabled"],zo={class:"setting-control"},No={class:"setting-buttons"},Ho=["disabled"],Oo={key:2,class:"hooks-section"},Fo={key:0,class:"dialog-loading"},Eo={key:1,class:"hooks-list"},Lo={class:"hook-name"};function Vo(vt,i,U,e,O,F){return a(),n(y,null,[t("header",null,[i[7]||(i[7]=t("img",{src:"https://cdn.formk.it/dmux/dmux.png",alt:"dmux",class:"logo"},null,-1)),t("h1",null,g(e.projectName),1),t("div",Lt,[t("button",{onClick:e.toggleTheme,class:"theme-toggle",title:e.theme==="dark"?"Switch to light mode":"Switch to dark mode"},[e.theme==="dark"?(a(),n("svg",qt,[...i[5]||(i[5]=[t("path",{d:"M12 2.25a.75.75 0 01.75.75v2.25a.75.75 0 01-1.5 0V3a.75.75 0 01.75-.75zM7.5 12a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM18.894 6.166a.75.75 0 00-1.06-1.06l-1.591 1.59a.75.75 0 101.06 1.061l1.591-1.59zM21.75 12a.75.75 0 01-.75.75h-2.25a.75.75 0 010-1.5H21a.75.75 0 01.75.75zM17.834 18.894a.75.75 0 001.06-1.06l-1.59-1.591a.75.75 0 10-1.061 1.06l1.59 1.591zM12 18a.75.75 0 01.75.75V21a.75.75 0 01-1.5 0v-2.25A.75.75 0 0112 18zM7.758 17.303a.75.75 0 00-1.061-1.06l-1.591 1.59a.75.75 0 001.06 1.061l1.591-1.59zM6 12a.75.75 0 01-.75.75H3a.75.75 0 010-1.5h2.25A.75.75 0 016 12zM6.697 7.757a.75.75 0 001.06-1.06l-1.59-1.591a.75.75 0 00-1.061 1.06l1.59 1.591z"},null,-1)])])):(a(),n("svg",Bt,[...i[6]||(i[6]=[t("path",{d:"M9.528 1.718a.75.75 0 01.162.819A8.97 8.97 0 009 6.5a9 9 0 009 9 8.97 8.97 0 003.963-.69.75.75 0 01.981.98 10.503 10.503 0 01-9.694 6.46c-5.799 0-10.5-4.701-10.5-10.5 0-4.368 2.667-8.112 6.46-9.694a.75.75 0 01.818.162z"},null,-1)])]))],8,Vt),e.sessionName?(a(),n("span",Ut,g(e.sessionName),1)):r("v-if",!0),t("span",{class:"status-indicator",style:Ot({color:e.connected?"#4ade80":"#f87171"})},"●",4)])]),t("div",Jt,[t("main",null,[t("div",Kt,[t("button",{onClick:e.openCreateDialog,class:"create-pane-button",disabled:e.creatingPane},[...i[8]||(i[8]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M12 4.5v15m7.5-7.5h-15",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1),P(" Create New Pane ",-1)])],8,Qt),t("button",{onClick:e.openSettingsDialog,class:"settings-button",disabled:e.loadingSettings,title:"Settings"},[...i[9]||(i[9]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M10.5 1.875a1.125 1.125 0 012.25 0v.563c0 1.018.84 1.843 1.854 1.839a.75.75 0 01.585.217l.4.4a.75.75 0 01.216.585c-.004 1.014.821 1.854 1.839 1.854h.563a1.125 1.125 0 010 2.25h-.563c-1.018 0-1.843.84-1.839 1.854a.75.75 0 01-.217.585l-.4.4a.75.75 0 01-.585.216c-1.014-.004-1.854.821-1.854 1.839v.563a1.125 1.125 0 01-2.25 0v-.563c0-1.018-.84-1.843-1.854-1.839a.75.75 0 01-.585-.217l-.4-.4a.75.75 0 01-.216-.585c.004-1.014-.821-1.854-1.839-1.854H3.75a1.125 1.125 0 010-2.25h.563c1.018 0 1.843-.84 1.839-1.854a.75.75 0 01.217-.585l.4-.4a.75.75 0 01.585-.216c1.014.004 1.854-.821 1.854-1.839V1.875zM12 15a3 3 0 100-6 3 3 0 000 6z"})],-1),P(" Settings ",-1)])],8,Wt)]),e.panes.length===0?(a(),n("div",Rt,[...i[10]||(i[10]=[t("p",null,"No dmux panes active",-1),t("p",{class:"hint"},`Click "Create New Pane" above or press 'n' in dmux`,-1)])])):(a(),n("div",Zt,[(a(!0),n(y,null,w(e.panes,o=>(a(),n("div",{key:o.id,class:"pane-card"},[t("div",Gt,[t("div",Xt,[t("a",{href:"/panes/"+o.id,class:"pane-title-link"},[t("span",$t,g(o.slug),1),i[11]||(i[11]=t("span",{class:"pane-arrow"},"→",-1))],8,Yt),t("div",te,[o.autopilot?(a(),n("span",ee,"🤖")):r("v-if",!0),o.type==="shell"?(a(),n("span",oe,g(o.shellType||"shell"),1)):(a(),n("span",{key:2,class:z(["pane-agent",o.agent||""])},g(o.agent||"unknown"),3)),t("span",se,g(o.paneId),1)])]),t("button",{onClick:p=>e.toggleActionMenu(o.id),class:"action-menu-btn",title:"Actions"},[...i[12]||(i[12]=[t("span",null,"⋮",-1)])],8,ne)]),r(" Action Menu Dropdown "),e.showActionMenu===o.id&&e.paneActions[o.id]?(a(),n("div",ae,[(a(!0),n(y,null,w(e.paneActions[o.id],p=>(a(),n("button",{key:p.id,onClick:h=>e.executeAction(o,p),class:"action-menu-item",disabled:e.executingAction},[t("span",le,g(p.icon||"•"),1),t("span",ce,g(p.label),1)],8,ie))),128))])):r("v-if",!0),t("div",de,[t("div",{class:z(["pane-prompt-preview",{expanded:e.expandedPrompts.has(o.id)}]),onClick:p=>e.togglePrompt(o.id)},[t("div",ge,[i[13]||(i[13]=t("span",{class:"prompt-label"},"Initial Prompt",-1)),t("span",ue,g(e.expandedPrompts.has(o.id)?"▼":"▶"),1)]),t("span",ve,g(o.prompt||"No prompt"),1)],10,re),e.expandedPrompts.has(o.id)?(a(),n("div",pe,g(o.prompt||"No prompt"),1)):r("v-if",!0)]),r(" Show agent summary when idle "),o.agentStatus==="idle"&&o.agentSummary?(a(),n("div",he,g(o.agentSummary),1)):r("v-if",!0),r(" Show analyzer error if present "),o.analyzerError?(a(),n("div",me," ⚠ "+g(o.analyzerError),1)):r("v-if",!0),t("div",{class:"pane-interactive",onClick:i[0]||(i[0]=M(()=>{},["prevent"]))},[r(" Options Dialog (when waiting with options) "),o.agentStatus==="waiting"&&o.options&&o.options.length>0?(a(),n("div",ye,[t("div",ke,g(o.optionsQuestion||"Choose an option:"),1),o.potentialHarm&&o.potentialHarm.hasRisk?(a(),n("div",fe," ⚠️ "+g(o.potentialHarm.description),1)):r("v-if",!0),e.loadingOptions.has(o.id)?(a(),n("div",be,[...i[14]||(i[14]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing selection...",-1)])])):(a(),n("div",_e,[(a(!0),n(y,null,w(o.options,p=>(a(),n("button",{key:p.action,onClick:h=>e.selectOption(o,p),class:z(["option-button",{"option-button-danger":o.potentialHarm&&o.potentialHarm.hasRisk}]),disabled:e.loadingOptions.has(o.id)},g(p.action),11,we))),128))]))])):o.agentStatus==="analyzing"?(a(),n(y,{key:1},[r(" Analyzing (show loader) "),i[15]||(i[15]=t("div",{class:"analyzing-state"},[t("div",{class:"loader-spinner"}),t("span",null,"Analyzing...")],-1))],2112)):(a(),n(y,{key:2},[r(" Working/Idle (show prompt input) "),t("div",null,[t("div",Ce,[at(t("textarea",{"onUpdate:modelValue":p=>e.promptInputs[o.id]=p,onInput:e.autoExpand,placeholder:o.agentStatus==="working"?"Queue a prompt...":"Send a prompt...",disabled:e.sendingPrompts.has(o.id),class:"prompt-textarea",rows:"1"},null,40,Se),[[it,e.promptInputs[o.id]]]),t("button",{onClick:p=>e.sendPrompt(o),disabled:!e.promptInputs[o.id]||e.sendingPrompts.has(o.id),class:"send-button",title:o.agentStatus==="working"?"Queue prompt":"Send prompt"},[e.sendingPrompts.has(o.id)?(a(),n("span",Pe)):(a(),n("svg",xe,[...i[16]||(i[16]=[t("path",{d:"M425.13,28.37L30.09,423.41C11.19,441.37.34,466.2,0,492.27c-.34,26.07,9.86,51.17,28.29,69.61,18.43,18.45,43.52,28.67,69.59,28.35,26.07-.31,50.91-11.14,68.88-30.02l233.16-233.52v776.64c0,34.56,18.43,66.48,48.36,83.76,29.93,17.28,66.8,17.28,96.72,0,29.93-17.28,48.36-49.21,48.36-83.76V328.85l231.72,231.36c24.63,23.41,59.74,32.18,92.48,23.09,32.74-9.08,58.32-34.68,67.38-67.43,9.05-32.75.25-67.85-23.18-92.46L566.73,28.37C548.63,10.16,524-.04,498.33.05c-.8-.06-1.6-.06-2.4,0-.8-.06-1.6-.06-2.4,0-25.65,0-50.25,10.19-68.4,28.32h0Z"},null,-1)])]))],8,De)]),e.queuedMessages[o.id]?(a(),n("div",Ae," ✓ "+g(e.queuedMessages[o.id]),1)):r("v-if",!0)])],2112))]),o.devStatus&&o.devStatus!=="stopped"?(a(),n("div",Te,[i[17]||(i[17]=t("span",{class:"status-label"},"Dev Server:",-1)),t("span",{class:z(["status-badge",o.devStatus])},g(o.devStatus),3),o.devUrl?(a(),n("a",{key:0,href:o.devUrl,target:"_blank",class:"dev-link"},"↗",8,je)):r("v-if",!0)])):r("v-if",!0)]))),128))]))]),r(" Create Pane Dialog "),e.showCreateDialog?(a(),n("div",{key:0,class:"action-dialog-overlay",onClick:M(e.closeCreateDialog,["self"])},[t("div",Ie,[i[21]||(i[21]=t("h3",null,"Create New Pane",-1)),e.createStep==="prompt"?(a(),n("div",Me,[i[18]||(i[18]=t("label",{for:"pane-prompt"},"Provide an initial prompt for your agent",-1)),at(t("textarea",{id:"pane-prompt","onUpdate:modelValue":i[1]||(i[1]=o=>e.newPanePrompt=o),placeholder:"E.g., Fix the authentication bug, Add dark mode, etc.",rows:"4",onKeydown:[lt(M(e.createPane,["meta"]),["enter"]),lt(M(e.createPane,["ctrl"]),["enter"])]},null,40,ze),[[it,e.newPanePrompt]]),i[19]||(i[19]=t("div",{class:"dialog-hint"},[P(" 💡 Press "),t("kbd",null,"⌘ Enter"),P(" or "),t("kbd",null,"Ctrl Enter"),P(" to create ")],-1)),t("div",Ne,[t("button",{onClick:e.closeCreateDialog,class:"dialog-btn"},"Cancel"),t("button",{onClick:e.createPane,disabled:!e.newPanePrompt.trim()||e.creatingPane,class:"dialog-btn dialog-btn-primary"},g(e.creatingPane?"Creating...":"Create Pane"),9,He)])])):e.createStep==="agent"?(a(),n("div",Oe,[i[20]||(i[20]=t("p",null,"Multiple agents available. Choose one:",-1)),t("div",Fe,[(a(!0),n(y,null,w(e.availableAgents,o=>(a(),n("button",{key:o,onClick:p=>e.selectAgent(o),class:"agent-choice-button",disabled:e.creatingPane},g(o),9,Ee))),128))]),t("div",{class:"dialog-buttons"},[t("button",{onClick:e.closeCreateDialog,class:"dialog-btn"},"Cancel")])])):r("v-if",!0)])])):r("v-if",!0),r(" Action Dialogs "),e.actionDialog?(a(),n("div",{key:1,class:"action-dialog-overlay",onClick:M(e.closeActionDialog,["self"])},[r(" Confirm Dialog "),e.actionDialog.type==="confirm"?(a(),n("div",Le,[t("h3",null,g(e.actionDialog.title),1),t("p",null,g(e.actionDialog.message),1),e.actionDialogLoading?(a(),n("div",Ve,[...i[22]||(i[22]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(a(),n("div",qe,[t("button",{onClick:i[2]||(i[2]=o=>e.confirmAction(!1)),class:"dialog-btn",disabled:e.actionDialogLoading},"Cancel",8,Be),t("button",{onClick:i[3]||(i[3]=o=>e.confirmAction(!0)),class:"dialog-btn dialog-btn-primary",disabled:e.actionDialogLoading},"Confirm",8,Ue)]))])):e.actionDialog.type==="choice"?(a(),n(y,{key:1},[r(" Choice Dialog "),t("div",Je,[t("h3",null,g(e.actionDialog.title),1),e.actionDialog.message?(a(),n("p",Ke,g(e.actionDialog.message),1)):r("v-if",!0),e.actionDialogLoading?(a(),n("div",Qe,[...i[23]||(i[23]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(a(),n("div",We,[t("div",Re,[(a(!0),n(y,null,w(e.actionDialog.options,o=>(a(),n("button",{key:o.id,onClick:p=>e.selectChoice(o.id),class:z(["choice-option-btn",{danger:o.danger}]),disabled:e.actionDialogLoading},[t("div",Ge,g(o.label),1),o.description?(a(),n("div",Xe,g(o.description),1)):r("v-if",!0)],10,Ze))),128))]),t("div",Ye,[t("button",{onClick:e.closeActionDialog,class:"dialog-btn",disabled:e.actionDialogLoading},"Cancel",8,$e)])]))])],2112)):e.actionDialog.type==="input"?(a(),n(y,{key:2},[r(" Input Dialog "),t("div",to,[t("h3",null,g(e.actionDialog.title),1),e.actionDialog.message?(a(),n("div",{key:0,class:"dialog-message",innerHTML:e.colorizeDiffStat(e.actionDialog.message)},null,8,eo)):r("v-if",!0),e.actionDialogLoading?(a(),n("div",oo,[...i[24]||(i[24]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(a(),n("div",so,[at(t("input",{type:"text","onUpdate:modelValue":i[4]||(i[4]=o=>e.actionDialog.inputValue=o),placeholder:e.actionDialog.placeholder,class:"dialog-input",onKeydown:lt(e.submitInput,["enter"])},null,40,no),[[it,e.actionDialog.inputValue]]),t("div",ao,[t("button",{onClick:e.closeActionDialog,class:"dialog-btn",disabled:e.actionDialogLoading},"Cancel",8,io),t("button",{onClick:e.submitInput,class:"dialog-btn dialog-btn-primary",disabled:e.actionDialogLoading},"Submit",8,lo)])]))])],2112)):r("v-if",!0)])):r("v-if",!0),r(" Settings Dialog "),e.showSettingsDialog&&e.settingsData?(a(),n("div",{key:2,class:"action-dialog-overlay",onClick:M(e.closeSettingsDialog,["self"])},[t("div",co,[i[30]||(i[30]=t("h3",null,"Settings",-1)),e.loadingSettings?(a(),n("div",ro,[...i[25]||(i[25]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Loading...",-1)])])):(a(),n("div",go,[(a(!0),n(y,null,w(e.settingDefinitions,o=>{var p;return a(),n("div",{key:o.key,class:"setting-item"},[t("div",uo,[t("div",vo,[t("div",po,g(o.label),1),t("div",ho,g(o.description),1)])]),r(" Boolean setting "),o.type==="boolean"?(a(),n("div",mo,[t("div",yo,[i[26]||(i[26]=P(" Current: ",-1)),t("strong",null,g(e.settingsData.merged[o.key]?"Enabled":"Disabled"),1),o.key in e.settingsData.project?(a(),n("span",ko,"(project)")):o.key in e.settingsData.global?(a(),n("span",fo,"(global)")):r("v-if",!0)]),t("div",bo,[t("button",{onClick:h=>e.updateSetting(o.key,!0,"global"),class:"setting-btn",disabled:e.loadingSettings}," Enable (global) ",8,_o),t("button",{onClick:h=>e.updateSetting(o.key,!1,"global"),class:"setting-btn",disabled:e.loadingSettings}," Disable (global) ",8,wo),t("button",{onClick:h=>e.updateSetting(o.key,!0,"project"),class:"setting-btn",disabled:e.loadingSettings}," Enable (project) ",8,Co),t("button",{onClick:h=>e.updateSetting(o.key,!1,"project"),class:"setting-btn",disabled:e.loadingSettings}," Disable (project) ",8,So)])])):o.type==="select"?(a(),n(y,{key:1},[r(" Select setting "),t("div",Do,[t("div",Po,[i[27]||(i[27]=P(" Current: ",-1)),t("strong",null,g(((p=o.options.find(h=>h.value===e.settingsData.merged[o.key]))==null?void 0:p.label)||"Not set"),1),o.key in e.settingsData.project?(a(),n("span",xo,"(project)")):o.key in e.settingsData.global?(a(),n("span",Ao,"(global)")):r("v-if",!0)]),(a(!0),n(y,null,w(o.options,h=>(a(),n("div",{class:"setting-select-group",key:h.value},[t("div",To,g(h.label),1),t("div",jo,[t("button",{onClick:f=>e.updateSetting(o.key,h.value,"global"),class:"setting-btn",disabled:e.loadingSettings}," Set global ",8,Io),t("button",{onClick:f=>e.updateSetting(o.key,h.value,"project"),class:"setting-btn",disabled:e.loadingSettings}," Set project ",8,Mo)])]))),128))])],2112)):o.type==="action"?(a(),n(y,{key:2},[r(" Action setting "),t("div",zo,[t("div",No,[t("button",{onClick:e.openHooksSection,class:"setting-btn setting-btn-action",disabled:e.loadingSettings}," Open ",8,Ho)])])],2112)):r("v-if",!0)])}),128))])),r(" Hooks Section (shown when hooks action is triggered) "),e.showHooksSection?(a(),n("div",Oo,[t("div",{class:"hooks-header"},[t("button",{onClick:e.closeHooksSection,class:"back-btn",title:"Back to settings"},"← Back"),i[28]||(i[28]=t("h4",null,"Hooks Management",-1))]),e.loadingHooks?(a(),n("div",Fo,[...i[29]||(i[29]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Loading hooks...",-1)])])):(a(),n("div",Eo,[(a(!0),n(y,null,w(e.hooksData,o=>(a(),n("div",{key:o.name,class:"hook-item"},[t("div",Lo,g(o.name),1),t("div",{class:z(["hook-status",{"hook-active":o.active}])},g(o.active?"✓ Active":"Inactive"),3)]))),128)),t("div",{class:"hooks-actions"},[t("button",{onClick:e.editHooksWithAgent,class:"dialog-btn dialog-btn-primary"}," Edit Hooks with Agent ")])]))])):r("v-if",!0),t("div",{class:"dialog-buttons"},[t("button",{onClick:e.closeSettingsDialog,class:"dialog-btn dialog-btn-primary"},"Close")])])])):r("v-if",!0)])],64)}const qo=Ht(Et,[["render",Vo],["__file","/Users/justinschroeder/Projects/dmux/frontend/src/components/Dashboard.vue"]]),Bo=Ft(qo);Bo.mount("#app");
|
|
1
|
+
import{d as Pe,r as d,o as je,a as Ae,c as o,b as l,e as t,t as c,f as u,n as $e,g as x,F as k,h as f,i as $,w as F,j as Y,v as ee,k as te,l as M,m as Fe}from"./chunks/styles.css_vue_type_style_index_0_src_true_lang-pW5mq51o.js";const Me={class:"session-info"},ze=["title"],Ne={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ee={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ie={key:0},Ve={class:"container"},Oe={class:"actions-bar"},He=["disabled"],Le=["disabled"],Be={key:0,class:"no-panes"},qe={key:1,class:"panes-grid"},Je={class:"pane-header"},Ue={class:"pane-header-content"},Ke=["href"],Qe={class:"pane-title"},Re={class:"pane-meta"},We={key:0,class:"pane-autopilot",title:"Autopilot enabled"},Ze={key:1,class:"pane-agent shell",title:"Shell pane"},Ge={class:"pane-id"},Xe=["onClick"],Ye={key:0,class:"action-menu-dropdown"},et=["onClick","disabled"],tt={class:"action-icon"},st={class:"action-label"},at={class:"pane-prompt-section"},ot=["onClick"],lt={class:"prompt-header"},nt={class:"expand-icon"},it={class:"prompt-text"},ct={key:0,class:"pane-prompt-full"},dt={key:1,class:"agent-summary"},rt={key:2,class:"analyzer-error"},ut={key:0,class:"options-dialog"},vt={class:"options-question"},pt={key:0,class:"options-warning"},gt={key:1,class:"analyzing-state"},ht={key:2,class:"options-buttons"},mt=["onClick","disabled"],yt={key:1,class:"analyzing-state"},kt={key:2},bt={class:"prompt-input-wrapper"},_t=["onUpdate:modelValue","placeholder","disabled"],ft=["onClick","disabled","title"],wt={key:0,class:"button-loader"},Ct={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 988.44 1200.05"},St={key:0,class:"queued-message"},xt={key:3,class:"dev-server-status"},Dt=["href"],Tt={class:"action-dialog"},Pt={key:0},jt=["onKeydown"],At={class:"dialog-buttons"},$t=["disabled"],Ft={key:1},Mt={class:"agent-choices"},zt=["onClick","disabled"],Nt={key:0,class:"action-dialog"},Et={key:0,class:"dialog-loading"},It={key:1,class:"dialog-buttons"},Vt=["disabled"],Ot=["disabled"],Ht={key:1,class:"action-dialog"},Lt={key:0},Bt={key:1,class:"dialog-loading"},qt={key:2},Jt={class:"choice-options"},Ut=["onClick","disabled"],Kt={class:"choice-label"},Qt={key:0,class:"choice-description"},Rt={class:"dialog-buttons"},Wt=["disabled"],Zt={key:2,class:"action-dialog"},Gt=["innerHTML"],Xt={key:1,class:"dialog-loading"},Yt={key:2},es=["placeholder"],ts={class:"dialog-buttons"},ss=["disabled"],as=["disabled"],os={class:"action-dialog settings-dialog"},ls={key:0,class:"dialog-loading"},ns={key:1,class:"settings-list"},is={class:"setting-header"},cs={class:"setting-info"},ds={class:"setting-label"},rs={class:"setting-description"},us={key:0,class:"setting-control"},vs={class:"setting-value"},ps={key:0,class:"setting-scope"},gs={key:1,class:"setting-scope"},hs={class:"setting-buttons"},ms=["onClick","disabled"],ys=["onClick","disabled"],ks=["onClick","disabled"],bs=["onClick","disabled"],_s={key:1,class:"setting-control"},fs={class:"setting-value"},ws={key:0,class:"setting-scope"},Cs={key:1,class:"setting-scope"},Ss={class:"setting-option-label"},xs={class:"setting-buttons"},Ds=["onClick","disabled"],Ts=["onClick","disabled"],Ps={key:2,class:"setting-control"},js={class:"setting-buttons"},As=["disabled"],$s={key:2,class:"hooks-section"},Fs={key:0,class:"dialog-loading"},Ms={key:1,class:"hooks-list"},zs={class:"hook-name"},Ns=Pe({__name:"Dashboard",setup(Is){const se=d("Loading..."),q=d(""),J=d(!1),V=d([]),re=d(null),ue=d("Never"),z=d({}),h=d(new Set),O=d({}),w=d(localStorage.getItem("dmux-theme")||"dark"),b=d(new Set),m=d(new Set),U=d(!1),_=d(""),D=d(null),T=d(!1),H=d([]),K=d(!1),C=d("prompt");d([]);const L=d({}),S=d(null),r=d(null),Q=d(!1),p=d(!1),R=d(!1),y=d(null),W=d([]),g=d(!1),N=d(!1),B=d([]),Z=d(!1);let P=null;const ae=()=>{P&&clearInterval(P),le(),P=setInterval(()=>{le()},2e3)},oe=()=>{P&&(clearInterval(P),P=null)},ve=()=>{w.value=w.value==="dark"?"light":"dark",localStorage.setItem("dmux-theme",w.value),document.documentElement.setAttribute("data-theme",w.value)},pe=a=>{b.value.has(a)?b.value.delete(a):b.value.add(a),b.value=new Set(b.value)},ge=()=>{U.value=!0,_.value="",D.value=null,H.value=[],K.value=!1,C.value="prompt",M(()=>{const s=document.getElementById("pane-prompt");s&&s.focus()});const a=s=>{s.key==="Escape"&&(E(),document.removeEventListener("keydown",a))};document.addEventListener("keydown",a)},E=()=>{U.value=!1,_.value="",D.value=null,H.value=[],K.value=!1,C.value="prompt"},I=async()=>{if(!(C.value==="prompt"&&!_.value.trim())&&!(C.value==="agent"&&!D.value))try{T.value=!0;const a={prompt:_.value.trim()};D.value&&(a.agent=D.value);const e=await(await fetch("/api/panes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json();e.needsAgentChoice?(K.value=!0,H.value=e.availableAgents,C.value="agent"):E()}catch(a){console.error("Failed to create pane:",a),alert("Failed to create pane")}finally{T.value=!1}},he=a=>{D.value=a,I()},me=a=>{se.value=a.projectName||"dmux",q.value=a.sessionName||"",J.value=!0,V.value=a.panes||[],re.value=new Date,ue.value="Just now";for(const s of V.value)L.value[s.id]||ye(s.id)},le=async()=>{try{const s=await(await fetch("/api/panes")).json();me(s)}catch(a){console.error("Failed to fetch panes:",a),J.value=!1}},ye=async a=>{try{const e=await(await fetch(`/api/panes/${a}/actions`)).json();L.value[a]=e.actions||[]}catch(s){console.error(`Failed to fetch actions for pane ${a}:`,s)}},ke=a=>{S.value===a?S.value=null:S.value=a},be=async(a,s)=>{var e;try{Q.value=!0,S.value=null;const i=await(await fetch(`/api/panes/${a.id}/actions/${s.id}`,{method:"POST"})).json();if(i.requiresInteraction){let v={};i.interactionType==="confirm"?v={type:"confirm",title:i.title||"Confirm",message:i.message,...i.confirmData}:i.interactionType==="choice"?v={type:"choice",title:i.title||"Choose",message:i.message,...i.choiceData}:i.interactionType==="input"&&(v={type:"input",title:i.title||"Input",message:i.message,...i.inputData,inputValue:((e=i.inputData)==null?void 0:e.defaultValue)||""},M(()=>{const X=document.querySelector(".dialog-input");X&&(X.focus(),X.select())})),v.paneId=a.id,r.value=v}}catch(n){console.error("Failed to execute action:",n),alert("Failed to execute action")}finally{Q.value=!1}},j=()=>{r.value=null},ne=async a=>{var s;if(r.value)try{p.value=!0;const n=await(await fetch(`/api/callbacks/confirm/${r.value.callbackId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({confirmed:a})})).json();if(n.requiresInteraction){let i={};n.interactionType==="confirm"?i={type:"confirm",title:n.title||"Confirm",message:n.message,...n.confirmData}:n.interactionType==="choice"?i={type:"choice",title:n.title||"Choose",message:n.message,...n.choiceData}:n.interactionType==="input"&&(i={type:"input",title:n.title||"Input",message:n.message,...n.inputData,inputValue:((s=n.inputData)==null?void 0:s.defaultValue)||""},M(()=>{const v=document.querySelector(".dialog-input");v&&(v.focus(),v.select())})),r.value=i}else j()}catch(e){console.error("Failed to confirm action:",e),alert("Failed to complete action")}finally{p.value=!1}},_e=async a=>{var s;if(r.value)try{p.value=!0;const n=await(await fetch(`/api/callbacks/choice/${r.value.callbackId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({optionId:a})})).json();if(n.requiresInteraction){let i={};n.interactionType==="confirm"?i={type:"confirm",title:n.title||"Confirm",message:n.message,...n.confirmData}:n.interactionType==="choice"?i={type:"choice",title:n.title||"Choose",message:n.message,...n.choiceData}:n.interactionType==="input"&&(i={type:"input",title:n.title||"Input",message:n.message,...n.inputData,inputValue:((s=n.inputData)==null?void 0:s.defaultValue)||""},M(()=>{const v=document.querySelector(".dialog-input");v&&(v.focus(),v.select())})),r.value=i}else j()}catch(e){console.error("Failed to select choice:",e),alert("Failed to complete action")}finally{p.value=!1}},fe=a=>a.split(`
|
|
2
|
+
`).map(s=>{if(s.includes("|")){const e=s.split("|");if(e.length===2){const n=e[0],v=e[1].replace(/\+/g,'<span style="color: #4ade80;">+</span>').replace(/-/g,'<span style="color: #f87171;">-</span>');return n+'<span style="opacity: 0.6;">|</span>'+v}}return s}).join("<br>"),ie=async()=>{var a;if(r.value)try{p.value=!0;const e=await(await fetch(`/api/callbacks/input/${r.value.callbackId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:r.value.inputValue})})).json();if(e.requiresInteraction){let n={};e.interactionType==="confirm"?n={type:"confirm",title:e.title||"Confirm",message:e.message,...e.confirmData}:e.interactionType==="choice"?n={type:"choice",title:e.title||"Choose",message:e.message,...e.choiceData}:e.interactionType==="input"&&(n={type:"input",title:e.title||"Input",message:e.message,...e.inputData,inputValue:((a=e.inputData)==null?void 0:a.defaultValue)||""},M(()=>{const i=document.querySelector(".dialog-input");i&&(i.focus(),i.select())})),r.value=n}else j()}catch(s){console.error("Failed to submit input:",s),alert("Failed to complete action")}finally{p.value=!1}},we=async(a,s)=>{try{m.value.add(a.id),m.value=new Set(m.value);const e=s.keys||[s.action];for(const n of e)await fetch(`/api/keys/${a.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:n})});setTimeout(()=>{m.value.delete(a.id),m.value=new Set(m.value)},1500)}catch(e){console.error("Failed to select option:",e),m.value.delete(a.id),m.value=new Set(m.value)}},Ce=async a=>{const s=z.value[a.id];if(!(!s||!s.trim()))try{h.value.add(a.id),h.value=new Set(h.value),await fetch(`/api/keys/${a.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:s})}),await fetch(`/api/keys/${a.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"Enter"})}),O.value[a.id]=s.substring(0,50)+(s.length>50?"...":""),z.value[a.id]="",setTimeout(()=>{delete O.value[a.id],h.value.delete(a.id),h.value=new Set(h.value)},3e3)}catch(e){console.error("Failed to send prompt:",e),h.value.delete(a.id),h.value=new Set(h.value)}},Se=a=>{const s=a.target;s.style.height="auto",s.style.height=s.scrollHeight+"px"},xe=async()=>{try{g.value=!0;const s=await(await fetch("/api/settings")).json();y.value=s.settings,W.value=s.definitions,R.value=!0,N.value=!1}catch(a){console.error("Failed to load settings:",a),alert("Failed to load settings")}finally{g.value=!1}},G=()=>{R.value=!1,y.value=null,W.value=[],N.value=!1,B.value=[]},A=async(a,s,e)=>{try{g.value=!0,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a,value:s,scope:e})});const i=await(await fetch("/api/settings")).json();y.value=i.settings}catch(n){console.error("Failed to update setting:",n),alert("Failed to update setting")}finally{g.value=!1}},De=async()=>{try{Z.value=!0;const s=await(await fetch("/api/hooks")).json();B.value=s.hooks||[],N.value=!0}catch(a){console.error("Failed to load hooks:",a),alert("Failed to load hooks")}finally{Z.value=!1}},ce=()=>{N.value=!1,B.value=[]},Te=async()=>{const a="I would like to edit my dmux hooks in .dmux-hooks, please read the instructions in there and ask me what I want to edit";ce(),G(),_.value=a,await M(),await I()},de=a=>{const s=a.target;S.value&&!s.closest(".action-menu-btn")&&!s.closest(".action-menu-dropdown")&&(S.value=null)};return je(()=>{document.documentElement.setAttribute("data-theme",w.value),ae(),document.addEventListener("click",de),document.addEventListener("visibilitychange",()=>{document.hidden?oe():ae()})}),Ae(()=>{oe(),document.removeEventListener("click",de)}),(a,s)=>(l(),o(k,null,[t("header",null,[s[7]||(s[7]=t("img",{src:"https://cdn.formk.it/dmux/dmux.png",alt:"dmux",class:"logo"},null,-1)),t("h1",null,c(se.value),1),t("div",Me,[t("button",{onClick:ve,class:"theme-toggle",title:w.value==="dark"?"Switch to light mode":"Switch to dark mode"},[w.value==="dark"?(l(),o("svg",Ne,[...s[5]||(s[5]=[t("path",{d:"M12 2.25a.75.75 0 01.75.75v2.25a.75.75 0 01-1.5 0V3a.75.75 0 01.75-.75zM7.5 12a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM18.894 6.166a.75.75 0 00-1.06-1.06l-1.591 1.59a.75.75 0 101.06 1.061l1.591-1.59zM21.75 12a.75.75 0 01-.75.75h-2.25a.75.75 0 010-1.5H21a.75.75 0 01.75.75zM17.834 18.894a.75.75 0 001.06-1.06l-1.59-1.591a.75.75 0 10-1.061 1.06l1.59 1.591zM12 18a.75.75 0 01.75.75V21a.75.75 0 01-1.5 0v-2.25A.75.75 0 0112 18zM7.758 17.303a.75.75 0 00-1.061-1.06l-1.591 1.59a.75.75 0 001.06 1.061l1.591-1.59zM6 12a.75.75 0 01-.75.75H3a.75.75 0 010-1.5h2.25A.75.75 0 016 12zM6.697 7.757a.75.75 0 001.06-1.06l-1.59-1.591a.75.75 0 00-1.061 1.06l1.59 1.591z"},null,-1)])])):(l(),o("svg",Ee,[...s[6]||(s[6]=[t("path",{d:"M9.528 1.718a.75.75 0 01.162.819A8.97 8.97 0 009 6.5a9 9 0 009 9 8.97 8.97 0 003.963-.69.75.75 0 01.981.98 10.503 10.503 0 01-9.694 6.46c-5.799 0-10.5-4.701-10.5-10.5 0-4.368 2.667-8.112 6.46-9.694a.75.75 0 01.818.162z"},null,-1)])]))],8,ze),q.value?(l(),o("span",Ie,c(q.value),1)):u("",!0),t("span",{class:"status-indicator",style:$e({color:J.value?"#4ade80":"#f87171"})},"●",4)])]),t("div",Ve,[t("main",null,[t("div",Oe,[t("button",{onClick:ge,class:"create-pane-button",disabled:T.value},[...s[8]||(s[8]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M12 4.5v15m7.5-7.5h-15",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1),x(" Create New Pane ",-1)])],8,He),t("button",{onClick:xe,class:"settings-button",disabled:g.value,title:"Settings"},[...s[9]||(s[9]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M10.5 1.875a1.125 1.125 0 012.25 0v.563c0 1.018.84 1.843 1.854 1.839a.75.75 0 01.585.217l.4.4a.75.75 0 01.216.585c-.004 1.014.821 1.854 1.839 1.854h.563a1.125 1.125 0 010 2.25h-.563c-1.018 0-1.843.84-1.839 1.854a.75.75 0 01-.217.585l-.4.4a.75.75 0 01-.585.216c-1.014-.004-1.854.821-1.854 1.839v.563a1.125 1.125 0 01-2.25 0v-.563c0-1.018-.84-1.843-1.854-1.839a.75.75 0 01-.585-.217l-.4-.4a.75.75 0 01-.216-.585c.004-1.014-.821-1.854-1.839-1.854H3.75a1.125 1.125 0 010-2.25h.563c1.018 0 1.843-.84 1.839-1.854a.75.75 0 01.217-.585l.4-.4a.75.75 0 01.585-.216c1.014.004 1.854-.821 1.854-1.839V1.875zM12 15a3 3 0 100-6 3 3 0 000 6z"})],-1),x(" Settings ",-1)])],8,Le)]),V.value.length===0?(l(),o("div",Be,[...s[10]||(s[10]=[t("p",null,"No dmux panes active",-1),t("p",{class:"hint"},`Click "Create New Pane" above or press 'n' in dmux`,-1)])])):(l(),o("div",qe,[(l(!0),o(k,null,f(V.value,e=>(l(),o("div",{key:e.id,class:"pane-card"},[t("div",Je,[t("div",Ue,[t("a",{href:"/panes/"+e.id,class:"pane-title-link"},[t("span",Qe,c(e.slug),1),s[11]||(s[11]=t("span",{class:"pane-arrow"},"→",-1))],8,Ke),t("div",Re,[e.autopilot?(l(),o("span",We,"🤖")):u("",!0),e.type==="shell"?(l(),o("span",Ze,c(e.shellType||"shell"),1)):(l(),o("span",{key:2,class:$(["pane-agent",e.agent||""])},c(e.agent||"unknown"),3)),t("span",Ge,c(e.paneId),1)])]),t("button",{onClick:n=>ke(e.id),class:"action-menu-btn",title:"Actions"},[...s[12]||(s[12]=[t("span",null,"⋮",-1)])],8,Xe)]),S.value===e.id&&L.value[e.id]?(l(),o("div",Ye,[(l(!0),o(k,null,f(L.value[e.id],n=>(l(),o("button",{key:n.id,onClick:i=>be(e,n),class:"action-menu-item",disabled:Q.value},[t("span",tt,c(n.icon||"•"),1),t("span",st,c(n.label),1)],8,et))),128))])):u("",!0),t("div",at,[t("div",{class:$(["pane-prompt-preview",{expanded:b.value.has(e.id)}]),onClick:n=>pe(e.id)},[t("div",lt,[s[13]||(s[13]=t("span",{class:"prompt-label"},"Initial Prompt",-1)),t("span",nt,c(b.value.has(e.id)?"▼":"▶"),1)]),t("span",it,c(e.prompt||"No prompt"),1)],10,ot),b.value.has(e.id)?(l(),o("div",ct,c(e.prompt||"No prompt"),1)):u("",!0)]),e.agentStatus==="idle"&&e.agentSummary?(l(),o("div",dt,c(e.agentSummary),1)):u("",!0),e.analyzerError?(l(),o("div",rt," ⚠ "+c(e.analyzerError),1)):u("",!0),t("div",{class:"pane-interactive",onClick:s[0]||(s[0]=F(()=>{},["prevent"]))},[e.agentStatus==="waiting"&&e.options&&e.options.length>0?(l(),o("div",ut,[t("div",vt,c(e.optionsQuestion||"Choose an option:"),1),e.potentialHarm&&e.potentialHarm.hasRisk?(l(),o("div",pt," ⚠️ "+c(e.potentialHarm.description),1)):u("",!0),m.value.has(e.id)?(l(),o("div",gt,[...s[14]||(s[14]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing selection...",-1)])])):(l(),o("div",ht,[(l(!0),o(k,null,f(e.options,n=>(l(),o("button",{key:n.action,onClick:i=>we(e,n),class:$(["option-button",{"option-button-danger":e.potentialHarm&&e.potentialHarm.hasRisk}]),disabled:m.value.has(e.id)},c(n.action),11,mt))),128))]))])):e.agentStatus==="analyzing"?(l(),o("div",yt,[...s[15]||(s[15]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Analyzing...",-1)])])):(l(),o("div",kt,[t("div",bt,[Y(t("textarea",{"onUpdate:modelValue":n=>z.value[e.id]=n,onInput:Se,placeholder:e.agentStatus==="working"?"Queue a prompt...":"Send a prompt...",disabled:h.value.has(e.id),class:"prompt-textarea",rows:"1"},null,40,_t),[[ee,z.value[e.id]]]),t("button",{onClick:n=>Ce(e),disabled:!z.value[e.id]||h.value.has(e.id),class:"send-button",title:e.agentStatus==="working"?"Queue prompt":"Send prompt"},[h.value.has(e.id)?(l(),o("span",wt)):(l(),o("svg",Ct,[...s[16]||(s[16]=[t("path",{d:"M425.13,28.37L30.09,423.41C11.19,441.37.34,466.2,0,492.27c-.34,26.07,9.86,51.17,28.29,69.61,18.43,18.45,43.52,28.67,69.59,28.35,26.07-.31,50.91-11.14,68.88-30.02l233.16-233.52v776.64c0,34.56,18.43,66.48,48.36,83.76,29.93,17.28,66.8,17.28,96.72,0,29.93-17.28,48.36-49.21,48.36-83.76V328.85l231.72,231.36c24.63,23.41,59.74,32.18,92.48,23.09,32.74-9.08,58.32-34.68,67.38-67.43,9.05-32.75.25-67.85-23.18-92.46L566.73,28.37C548.63,10.16,524-.04,498.33.05c-.8-.06-1.6-.06-2.4,0-.8-.06-1.6-.06-2.4,0-25.65,0-50.25,10.19-68.4,28.32h0Z"},null,-1)])]))],8,ft)]),O.value[e.id]?(l(),o("div",St," ✓ "+c(O.value[e.id]),1)):u("",!0)]))]),e.devStatus&&e.devStatus!=="stopped"?(l(),o("div",xt,[s[17]||(s[17]=t("span",{class:"status-label"},"Dev Server:",-1)),t("span",{class:$(["status-badge",e.devStatus])},c(e.devStatus),3),e.devUrl?(l(),o("a",{key:0,href:e.devUrl,target:"_blank",class:"dev-link"},"↗",8,Dt)):u("",!0)])):u("",!0)]))),128))]))]),U.value?(l(),o("div",{key:0,class:"action-dialog-overlay",onClick:F(E,["self"])},[t("div",Tt,[s[21]||(s[21]=t("h3",null,"Create New Pane",-1)),C.value==="prompt"?(l(),o("div",Pt,[s[18]||(s[18]=t("label",{for:"pane-prompt"},"Provide an initial prompt for your agent",-1)),Y(t("textarea",{id:"pane-prompt","onUpdate:modelValue":s[1]||(s[1]=e=>_.value=e),placeholder:"E.g., Fix the authentication bug, Add dark mode, etc.",rows:"4",onKeydown:[te(F(I,["meta"]),["enter"]),te(F(I,["ctrl"]),["enter"])]},null,40,jt),[[ee,_.value]]),s[19]||(s[19]=t("div",{class:"dialog-hint"},[x(" 💡 Press "),t("kbd",null,"⌘ Enter"),x(" or "),t("kbd",null,"Ctrl Enter"),x(" to create ")],-1)),t("div",At,[t("button",{onClick:E,class:"dialog-btn"},"Cancel"),t("button",{onClick:I,disabled:!_.value.trim()||T.value,class:"dialog-btn dialog-btn-primary"},c(T.value?"Creating...":"Create Pane"),9,$t)])])):C.value==="agent"?(l(),o("div",Ft,[s[20]||(s[20]=t("p",null,"Multiple agents available. Choose one:",-1)),t("div",Mt,[(l(!0),o(k,null,f(H.value,e=>(l(),o("button",{key:e,onClick:n=>he(e),class:"agent-choice-button",disabled:T.value},c(e),9,zt))),128))]),t("div",{class:"dialog-buttons"},[t("button",{onClick:E,class:"dialog-btn"},"Cancel")])])):u("",!0)])])):u("",!0),r.value?(l(),o("div",{key:1,class:"action-dialog-overlay",onClick:F(j,["self"])},[r.value.type==="confirm"?(l(),o("div",Nt,[t("h3",null,c(r.value.title),1),t("p",null,c(r.value.message),1),p.value?(l(),o("div",Et,[...s[22]||(s[22]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(l(),o("div",It,[t("button",{onClick:s[2]||(s[2]=e=>ne(!1)),class:"dialog-btn",disabled:p.value},"Cancel",8,Vt),t("button",{onClick:s[3]||(s[3]=e=>ne(!0)),class:"dialog-btn dialog-btn-primary",disabled:p.value},"Confirm",8,Ot)]))])):r.value.type==="choice"?(l(),o("div",Ht,[t("h3",null,c(r.value.title),1),r.value.message?(l(),o("p",Lt,c(r.value.message),1)):u("",!0),p.value?(l(),o("div",Bt,[...s[23]||(s[23]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(l(),o("div",qt,[t("div",Jt,[(l(!0),o(k,null,f(r.value.options,e=>(l(),o("button",{key:e.id,onClick:n=>_e(e.id),class:$(["choice-option-btn",{danger:e.danger}]),disabled:p.value},[t("div",Kt,c(e.label),1),e.description?(l(),o("div",Qt,c(e.description),1)):u("",!0)],10,Ut))),128))]),t("div",Rt,[t("button",{onClick:j,class:"dialog-btn",disabled:p.value},"Cancel",8,Wt)])]))])):r.value.type==="input"?(l(),o("div",Zt,[t("h3",null,c(r.value.title),1),r.value.message?(l(),o("div",{key:0,class:"dialog-message",innerHTML:fe(r.value.message)},null,8,Gt)):u("",!0),p.value?(l(),o("div",Xt,[...s[24]||(s[24]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Processing...",-1)])])):(l(),o("div",Yt,[Y(t("input",{type:"text","onUpdate:modelValue":s[4]||(s[4]=e=>r.value.inputValue=e),placeholder:r.value.placeholder,class:"dialog-input",onKeydown:te(ie,["enter"])},null,40,es),[[ee,r.value.inputValue]]),t("div",ts,[t("button",{onClick:j,class:"dialog-btn",disabled:p.value},"Cancel",8,ss),t("button",{onClick:ie,class:"dialog-btn dialog-btn-primary",disabled:p.value},"Submit",8,as)])]))])):u("",!0)])):u("",!0),R.value&&y.value?(l(),o("div",{key:2,class:"action-dialog-overlay",onClick:F(G,["self"])},[t("div",os,[s[30]||(s[30]=t("h3",null,"Settings",-1)),g.value?(l(),o("div",ls,[...s[25]||(s[25]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Loading...",-1)])])):(l(),o("div",ns,[(l(!0),o(k,null,f(W.value,e=>{var n;return l(),o("div",{key:e.key,class:"setting-item"},[t("div",is,[t("div",cs,[t("div",ds,c(e.label),1),t("div",rs,c(e.description),1)])]),e.type==="boolean"?(l(),o("div",us,[t("div",vs,[s[26]||(s[26]=x(" Current: ",-1)),t("strong",null,c(y.value.merged[e.key]?"Enabled":"Disabled"),1),e.key in y.value.project?(l(),o("span",ps,"(project)")):e.key in y.value.global?(l(),o("span",gs,"(global)")):u("",!0)]),t("div",hs,[t("button",{onClick:i=>A(e.key,!0,"global"),class:"setting-btn",disabled:g.value}," Enable (global) ",8,ms),t("button",{onClick:i=>A(e.key,!1,"global"),class:"setting-btn",disabled:g.value}," Disable (global) ",8,ys),t("button",{onClick:i=>A(e.key,!0,"project"),class:"setting-btn",disabled:g.value}," Enable (project) ",8,ks),t("button",{onClick:i=>A(e.key,!1,"project"),class:"setting-btn",disabled:g.value}," Disable (project) ",8,bs)])])):e.type==="select"?(l(),o("div",_s,[t("div",fs,[s[27]||(s[27]=x(" Current: ",-1)),t("strong",null,c(((n=e.options.find(i=>i.value===y.value.merged[e.key]))==null?void 0:n.label)||"Not set"),1),e.key in y.value.project?(l(),o("span",ws,"(project)")):e.key in y.value.global?(l(),o("span",Cs,"(global)")):u("",!0)]),(l(!0),o(k,null,f(e.options,i=>(l(),o("div",{class:"setting-select-group",key:i.value},[t("div",Ss,c(i.label),1),t("div",xs,[t("button",{onClick:v=>A(e.key,i.value,"global"),class:"setting-btn",disabled:g.value}," Set global ",8,Ds),t("button",{onClick:v=>A(e.key,i.value,"project"),class:"setting-btn",disabled:g.value}," Set project ",8,Ts)])]))),128))])):e.type==="action"?(l(),o("div",Ps,[t("div",js,[t("button",{onClick:De,class:"setting-btn setting-btn-action",disabled:g.value}," Open ",8,As)])])):u("",!0)])}),128))])),N.value?(l(),o("div",$s,[t("div",{class:"hooks-header"},[t("button",{onClick:ce,class:"back-btn",title:"Back to settings"},"← Back"),s[28]||(s[28]=t("h4",null,"Hooks Management",-1))]),Z.value?(l(),o("div",Fs,[...s[29]||(s[29]=[t("div",{class:"loader-spinner"},null,-1),t("span",null,"Loading hooks...",-1)])])):(l(),o("div",Ms,[(l(!0),o(k,null,f(B.value,e=>(l(),o("div",{key:e.name,class:"hook-item"},[t("div",zs,c(e.name),1),t("div",{class:$(["hook-status",{"hook-active":e.active}])},c(e.active?"✓ Active":"Inactive"),3)]))),128)),t("div",{class:"hooks-actions"},[t("button",{onClick:Te,class:"dialog-btn dialog-btn-primary"}," Edit Hooks with Agent ")])]))])):u("",!0),t("div",{class:"dialog-buttons"},[t("button",{onClick:G,class:"dialog-btn dialog-btn-primary"},"Close")])])])):u("",!0)])],64))}}),Es=Fe(Ns);Es.mount("#app");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActionSystem.d.ts","sourceRoot":"","sources":["../../src/hooks/useActionSystem.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAiB,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzD,cAAc,CAAC,EAAE;QACf,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/G,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACvL,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3H,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/G,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"useActionSystem.d.ts","sourceRoot":"","sources":["../../src/hooks/useActionSystem.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAiB,UAAU,EAAsB,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzD,cAAc,CAAC,EAAE;QACf,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/G,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACvL,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3H,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/G,CAAC;CACH;AAyFD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,GACf,EAAE,qBAAqB;;8BAkBV,UAAU,QACd,QAAQ,WACL,GAAG;gCA0BF,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,YACpC;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;8BAgDnB,MAAM,cAAc;;;EAuBlE"}
|
|
@@ -56,30 +56,15 @@ async function handleResultWithPopups(result, popupLaunchers, context, setAction
|
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
// Handle non-interactive results (success, error, info, etc.)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
context.forceRepaint();
|
|
66
|
-
}, 300);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
// Fallback to inline status message
|
|
71
|
-
setActionState(prev => ({
|
|
72
|
-
...prev,
|
|
73
|
-
statusMessage: result.message,
|
|
74
|
-
statusType: result.type === 'error' ? 'error' : result.type === 'success' ? 'success' : 'info',
|
|
75
|
-
}));
|
|
76
|
-
// Auto-clear after 3 seconds
|
|
59
|
+
// Use toast notification for better UX
|
|
60
|
+
const { default: stateManager } = await import('../shared/StateManager.js');
|
|
61
|
+
const type = result.type === 'error' ? 'error' : result.type === 'success' ? 'success' : 'info';
|
|
62
|
+
stateManager.showToast(result.message, type);
|
|
63
|
+
// Force repaint after showing toast
|
|
64
|
+
if (context.forceRepaint) {
|
|
77
65
|
setTimeout(() => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
statusMessage: '',
|
|
81
|
-
}));
|
|
82
|
-
}, 3000);
|
|
66
|
+
context.forceRepaint();
|
|
67
|
+
}, 100);
|
|
83
68
|
}
|
|
84
69
|
}
|
|
85
70
|
export default function useActionSystem({ panes, savePanes, sessionName, projectName, onPaneUpdate, onPaneRemove, forceRepaint, onActionResult, popupLaunchers, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActionSystem.js","sourceRoot":"","sources":["../../src/hooks/useActionSystem.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useActionSystem.js","sourceRoot":"","sources":["../../src/hooks/useActionSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputHandling.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useInputHandling.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,10 @@ export function useInputHandling(params) {
|
|
|
17
17
|
useInput(async (input, key) => {
|
|
18
18
|
const logService = LogService.getInstance();
|
|
19
19
|
// Log all input for debugging (only first 50 chars to avoid spam)
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// Commented out to reduce log noise
|
|
21
|
+
// const inputPreview =
|
|
22
|
+
// input.length > 50 ? input.substring(0, 50) + "..." : input
|
|
23
|
+
// logService.debug(`Input: "${inputPreview}"`, "InputDebug")
|
|
22
24
|
// Ignore input temporarily after popup operations (prevents buffered keys from being processed)
|
|
23
25
|
if (ignoreInput) {
|
|
24
26
|
return;
|
|
@@ -190,6 +192,18 @@ export function useInputHandling(params) {
|
|
|
190
192
|
setStatusMessage("Layout reset");
|
|
191
193
|
setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_SHORT);
|
|
192
194
|
}
|
|
195
|
+
else if (input === "T") {
|
|
196
|
+
// Demo toasts (Shift+T) - cycles through different types
|
|
197
|
+
const stateManager = StateManager.getInstance();
|
|
198
|
+
const demos = [
|
|
199
|
+
{ msg: "Pane created successfully", severity: "success" },
|
|
200
|
+
{ msg: "Failed to merge: conflicts detected", severity: "error" },
|
|
201
|
+
{ msg: "Warning: API key not configured", severity: "warning" },
|
|
202
|
+
{ msg: "This is a longer informational message that will wrap to multiple lines if needed to demonstrate how toasts handle longer content", severity: "info" },
|
|
203
|
+
];
|
|
204
|
+
// Queue all demo toasts
|
|
205
|
+
demos.forEach(demo => stateManager.showToast(demo.msg, demo.severity));
|
|
206
|
+
}
|
|
193
207
|
else if (input === "q") {
|
|
194
208
|
cleanExit();
|
|
195
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputHandling.js","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmErD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA8B;IAC7D,MAAM,EACJ,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,SAAS,EACT,mBAAmB,GACpB,GAAG,MAAM,CAAA;IAEV,QAAQ,CAAC,KAAK,EAAE,KAAa,EAAE,GAAQ,EAAE,EAAE;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;QAE3C,kEAAkE;QAClE,
|
|
1
|
+
{"version":3,"file":"useInputHandling.js","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmErD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA8B;IAC7D,MAAM,EACJ,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,SAAS,EACT,mBAAmB,GACpB,GAAG,MAAM,CAAA;IAEV,QAAQ,CAAC,KAAK,EAAE,KAAa,EAAE,GAAQ,EAAE,EAAE;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;QAE3C,kEAAkE;QAClE,oCAAoC;QACpC,uBAAuB;QACvB,+DAA+D;QAC/D,6DAA6D;QAE7D,gGAAgG;QAChG,IAAI,WAAW,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QAED,+EAA+E;QAC/E,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC9B,IAAI,eAAe,EAAE,CAAC;gBACpB,gCAAgC;gBAChC,SAAS,EAAE,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,mCAAmC;gBACnC,kBAAkB,CAAC,IAAI,CAAC,CAAA;gBACxB,2DAA2D;gBAC3D,UAAU,CAAC,GAAG,EAAE;oBACd,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBAC3B,CAAC,EAAE,IAAI,CAAC,CAAA;YACV,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,cAAc,IAAI,cAAc,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAChE,uDAAuD;YACvD,OAAM;QACR,CAAC;QAED,4CAA4C;QAC5C,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBACzB,OAAM;YACR,CAAC;YACD,sDAAsD;QACxD,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACnC,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;gBACzC,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,IAAI,kBAAkB,EAAE,CAAC;oBACpE,MAAM,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;oBAEhD,kDAAkD;oBAClD,MAAM,WAAW,GAAG;wBAClB,GAAG,eAAe;wBAClB,CAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,EAC9D,IAAI;qBACP,CAAA;oBACD,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;oBAE/B,6BAA6B;oBAC7B,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAA;gBAC5D,CAAC;gBACD,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;iBAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxD,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;gBACzC,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;oBACvC,qDAAqD;oBACrD,MAAM,WAAW,GAAG;wBAClB,GAAG,eAAe;wBAClB,CAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,EAC9D,IAAI;qBACP,CAAA;oBACD,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;oBAE/B,6BAA6B;oBAC7B,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAA;gBAC5D,CAAC;gBACD,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC7B,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,oBAAoB,CAAC,IAAI,CAAC,CAAA;gBAC1B,eAAe,CAAC,EAAE,CAAC,CAAA;YACrB,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC/B,+DAA+D;oBAC/D,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAA;oBACzD,IAAI,SAAS,EAAE,CAAC;wBACd,eAAe,CAAC,SAAS,CAAC,CAAA;oBAC5B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,MAAM,WAAW,GAAG;wBAClB,GAAG,eAAe;wBAClB,CAAC,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,EAC3D,YAAY,CAAC,IAAI,EAAE;qBACtB,CAAA;oBACD,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;oBAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;oBACzC,IAAI,YAAY,EAAE,CAAC;wBACjB,qBAAqB;wBACrB,MAAM,UAAU,GACd,iBAAiB,KAAK,MAAM;4BAC1B,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY;4BAC/B,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAA;wBAClC,IAAI,UAAU,EAAE,CAAC;4BACf,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;4BACxC,oBAAoB,CAAC,IAAI,CAAC,CAAA;4BAC1B,qBAAqB,CAAC,IAAI,CAAC,CAAA;wBAC7B,CAAC;6BAAM,CAAC;4BACN,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAA;4BACzD,oBAAoB,CAAC,IAAI,CAAC,CAAA;4BAC1B,eAAe,CAAC,EAAE,CAAC,CAAA;wBACrB,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,oBAAoB,CAAC,IAAI,CAAC,CAAA;wBAC1B,eAAe,CAAC,EAAE,CAAC,CAAA;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAM;QACR,CAAC;QAED,iFAAiF;QACjF,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACpE,IAAI,WAAW,GAAkB,IAAI,CAAA;YAErC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,WAAW,GAAG,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACxD,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACzB,WAAW,GAAG,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAC1D,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACzB,WAAW,GAAG,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAC1D,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC1B,WAAW,GAAG,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;YAC3D,CAAC;YAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,gBAAgB,CAAC,WAAW,CAAC,CAAA;YAC/B,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAClD,0CAA0C;YAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;YACzC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAA;YACtE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE;oBACvD,UAAU,EAAE,aAAa,EAAE;iBAC5B,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,KAAK,IAAI,EAAE;gBAC/D,qBAAqB;gBACrB,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;oBAC7C,4BAA4B;oBAC5B,MAAM,MAAM,GACV,yHAAyH,CAAA;oBAC3H,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAA;gBAC3C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,eAAe,CAAC,aAAa,CAC3B,MAAM,CAAC,GAA+C,EACtD,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,CACb,CAAA;gBACD,gBAAgB,CAAC,kBAAkB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;gBACnD,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,kBAAkB;YAClB,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QACtC,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,gCAAgC;YAChC,MAAM,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QAC1D,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAC1C,kDAAkD;YAClD,sBAAsB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;YACpD,gBAAgB,CAAC,cAAc,CAAC,CAAA;YAChC,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;QACvE,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,yDAAyD;YACzD,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;YAC/C,MAAM,KAAK,GAAG;gBACZ,EAAE,GAAG,EAAE,2BAA2B,EAAE,QAAQ,EAAE,SAAkB,EAAE;gBAClE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,OAAgB,EAAE;gBAC1E,EAAE,GAAG,EAAE,iCAAiC,EAAE,QAAQ,EAAE,SAAkB,EAAE;gBACxE,EAAE,GAAG,EAAE,mIAAmI,EAAE,QAAQ,EAAE,MAAe,EAAE;aACxK,CAAA;YACD,wBAAwB;YACxB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACxE,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,SAAS,EAAE,CAAA;QACb,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACnC,uBAAuB;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,0CAA0C;gBAC1C,MAAM,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE;oBACnD,eAAe,CAAC,IAAI,CAAC,CAAA;oBACrB,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,6BAA6B,CAAC,CAAA;gBACzE,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3B,wBAAwB;gBACxB,iBAAiB,CAAC,IAAI,CAAC,CACtB;gBAAA,CAAC,KAAK,IAAI,EAAE;oBACX,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAA;wBACtC,YAAY,CAAC,GAAG,CAAC,CAAA;oBACnB,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBACpB,gBAAgB,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;wBAC7D,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAA;oBACtE,CAAC;4BAAS,CAAC;wBACT,iBAAiB,CAAC,KAAK,CAAC,CAAA;oBAC1B,CAAC;gBACH,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;YACD,2DAA2D;YAC3D,OAAM;QACR,CAAC;aAAM,IACL,CAAC,SAAS;YACV,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,EACjE,CAAC;YACD,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAA;YAC3D,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,2BAA2B,CAAC,WAAW,CAAC,CAAA;YAChD,CAAC;YACD,OAAM;QACR,CAAC;aAAM,IACL,CAAC,SAAS;YACV,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACrE,CAAC;YACD,8CAA8C;YAC9C,IAAI,CAAC;gBACH,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBACvB,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;gBAE7C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;gBAE7C,kCAAkC;gBAClC,MAAM,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAE/B,mCAAmC;gBACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAA;gBAEpE,mFAAmF;gBACnF,gDAAgD;gBAEhD,iBAAiB,CAAC,KAAK,CAAC,CAAA;gBACxB,gBAAgB,CAAC,uBAAuB,CAAC,CAAA;gBACzC,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;gBAErE,+CAA+C;gBAC/C,MAAM,SAAS,EAAE,CAAA;YACnB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,CAAC,CAAA;gBACxB,gBAAgB,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACpE,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAA;YACtE,CAAC;YACD,OAAM;QACR,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACzD,0CAA0C;YAC1C,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CACxC,oBAAoB,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAChD,CAAA;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;YAC/F,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QACnE,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACzD,wCAAwC;YACxC,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CACxC,iBAAiB,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAC7C,CAAA;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;YAC/F,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACtD,0CAA0C;YAC1C,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CACxC,oBAAoB,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAChD,CAAA;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAA;YAC/F,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useLayoutManagement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useLayoutManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useLayoutManagement.ts"],"names":[],"mappings":"AAKA,UAAU,uBAAuB;IAC/B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,EACb,eAAe,EACf,cAAc,GACf,EAAE,uBAAuB,QAsGzB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { enforceControlPaneSize } from '../utils/tmux.js';
|
|
3
3
|
import { SIDEBAR_WIDTH } from '../utils/layoutManager.js';
|
|
4
|
+
import { LogService } from '../services/LogService.js';
|
|
4
5
|
/**
|
|
5
6
|
* Manages periodic enforcement of control pane (sidebar) size
|
|
6
7
|
* Ensures the sidebar stays at SIDEBAR_WIDTH (40 chars) even after terminal resizes
|
|
@@ -9,15 +10,21 @@ export function useLayoutManagement({ controlPaneId, hasActiveDialog, onForceRep
|
|
|
9
10
|
// Use refs to track state across resize events
|
|
10
11
|
const resizeTimeoutRef = useRef(null);
|
|
11
12
|
const isApplyingLayoutRef = useRef(false);
|
|
13
|
+
// Track if component is still mounted to avoid state updates after unmount
|
|
14
|
+
const isMountedRef = useRef(true);
|
|
12
15
|
useEffect(() => {
|
|
16
|
+
isMountedRef.current = true;
|
|
13
17
|
if (!controlPaneId) {
|
|
14
18
|
return; // No sidebar layout configured
|
|
15
19
|
}
|
|
16
|
-
// Enforce sidebar width immediately on mount
|
|
17
|
-
enforceControlPaneSize(controlPaneId, SIDEBAR_WIDTH)
|
|
20
|
+
// Enforce sidebar width immediately on mount (with error handling)
|
|
21
|
+
enforceControlPaneSize(controlPaneId, SIDEBAR_WIDTH).catch(error => {
|
|
22
|
+
LogService.getInstance().warn(`Initial layout enforcement failed: ${error}`, 'ResizeDebug');
|
|
23
|
+
});
|
|
18
24
|
const handleResize = () => {
|
|
19
|
-
// Skip if we're already applying a layout (prevents loops)
|
|
25
|
+
// Skip if we're already applying a layout (prevents loops and race conditions)
|
|
20
26
|
if (isApplyingLayoutRef.current) {
|
|
27
|
+
LogService.getInstance().debug('Skipping resize - layout already in progress', 'ResizeDebug');
|
|
21
28
|
return;
|
|
22
29
|
}
|
|
23
30
|
// Clear any pending resize
|
|
@@ -25,18 +32,44 @@ export function useLayoutManagement({ controlPaneId, hasActiveDialog, onForceRep
|
|
|
25
32
|
clearTimeout(resizeTimeoutRef.current);
|
|
26
33
|
}
|
|
27
34
|
// Debounce: wait 500ms after last resize event (prevents excessive recalculations)
|
|
28
|
-
resizeTimeoutRef.current = setTimeout(() => {
|
|
35
|
+
resizeTimeoutRef.current = setTimeout(async () => {
|
|
36
|
+
// Check if component is still mounted
|
|
37
|
+
if (!isMountedRef.current) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
29
40
|
// Only enforce if not showing dialogs (to avoid interference)
|
|
30
41
|
if (!hasActiveDialog) {
|
|
42
|
+
// Double-check we're not already applying (race condition protection)
|
|
43
|
+
if (isApplyingLayoutRef.current) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
31
46
|
isApplyingLayoutRef.current = true;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
LogService.getInstance().debug('Starting resize handler', 'ResizeDebug');
|
|
48
|
+
try {
|
|
49
|
+
// Only enforce sidebar width when terminal resizes
|
|
50
|
+
await enforceControlPaneSize(controlPaneId, SIDEBAR_WIDTH);
|
|
51
|
+
// Check if still mounted before updating UI
|
|
52
|
+
if (!isMountedRef.current) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
LogService.getInstance().debug('enforceControlPaneSize complete, calling onForceRepaint', 'ResizeDebug');
|
|
56
|
+
// CRITICAL: Force Ink to repaint AFTER layout changes complete
|
|
57
|
+
// This ensures the dmux UI redraws last, preventing blank pane
|
|
58
|
+
onForceRepaint();
|
|
59
|
+
LogService.getInstance().debug('onForceRepaint called', 'ResizeDebug');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
// Log error but don't crash - layout will be retried on next resize
|
|
63
|
+
LogService.getInstance().warn(`Layout enforcement failed during resize: ${error}`, 'ResizeDebug');
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
// Reset flag after a brief delay (always reset, even on error)
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
if (isMountedRef.current) {
|
|
69
|
+
isApplyingLayoutRef.current = false;
|
|
70
|
+
}
|
|
71
|
+
}, 100);
|
|
72
|
+
}
|
|
40
73
|
}
|
|
41
74
|
}, 500);
|
|
42
75
|
};
|
|
@@ -46,6 +79,7 @@ export function useLayoutManagement({ controlPaneId, hasActiveDialog, onForceRep
|
|
|
46
79
|
process.on('SIGWINCH', handleResize);
|
|
47
80
|
process.on('SIGUSR1', handleResize);
|
|
48
81
|
return () => {
|
|
82
|
+
isMountedRef.current = false;
|
|
49
83
|
process.stdout.off('resize', handleResize);
|
|
50
84
|
process.off('SIGWINCH', handleResize);
|
|
51
85
|
process.off('SIGUSR1', handleResize);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutManagement.js","sourceRoot":"","sources":["../../src/hooks/useLayoutManagement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"useLayoutManagement.js","sourceRoot":"","sources":["../../src/hooks/useLayoutManagement.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,9 @@ export declare function recreateMissingPanes(missingPanes: DmuxPane[], panesFile
|
|
|
34
34
|
/**
|
|
35
35
|
* Recreates worktree panes that were killed by the user (e.g., via Ctrl+b x)
|
|
36
36
|
* Called during periodic polling after initial load
|
|
37
|
+
*
|
|
38
|
+
* IMPORTANT: Checks PaneLifecycleManager to avoid recreating panes that are
|
|
39
|
+
* being intentionally closed (prevents race condition with close/merge actions)
|
|
37
40
|
*/
|
|
38
41
|
export declare function recreateKilledWorktreePanes(panes: DmuxPane[], allPaneIds: string[], panesFile: string): Promise<DmuxPane[]>;
|
|
39
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaneLoading.d.ts","sourceRoot":"","sources":["../../src/hooks/usePaneLoading.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"usePaneLoading.d.ts","sourceRoot":"","sources":["../../src/hooks/usePaneLoading.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAS5C,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAuCxH;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoB9E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,QAAQ,EAAE,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAmGrB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
|
|
@@ -3,6 +3,7 @@ import { splitPane } from '../utils/tmux.js';
|
|
|
3
3
|
import { rebindPaneByTitle } from '../utils/paneRebinding.js';
|
|
4
4
|
import { LogService } from '../services/LogService.js';
|
|
5
5
|
import { TmuxService } from '../services/TmuxService.js';
|
|
6
|
+
import { PaneLifecycleManager } from '../services/PaneLifecycleManager.js';
|
|
6
7
|
import { TMUX_RETRY_DELAY } from '../constants/timing.js';
|
|
7
8
|
/**
|
|
8
9
|
* Fetches all tmux pane IDs and titles for the current session
|
|
@@ -38,7 +39,10 @@ export async function fetchTmuxPaneIds(maxRetries = 2) {
|
|
|
38
39
|
}
|
|
39
40
|
catch (error) {
|
|
40
41
|
// Retry on tmux command failure (common during rapid pane creation/destruction)
|
|
41
|
-
LogService.getInstance().debug(
|
|
42
|
+
// LogService.getInstance().debug(
|
|
43
|
+
// `Tmux fetch failed (attempt ${retryCount + 1}/${maxRetries}): ${error instanceof Error ? error.message : String(error)}`,
|
|
44
|
+
// 'usePaneLoading'
|
|
45
|
+
// );
|
|
42
46
|
if (retryCount < maxRetries)
|
|
43
47
|
await new Promise(r => setTimeout(r, TMUX_RETRY_DELAY));
|
|
44
48
|
}
|
|
@@ -65,7 +69,10 @@ export async function loadPanesFromFile(panesFile) {
|
|
|
65
69
|
catch (error) {
|
|
66
70
|
// Return empty array if config file doesn't exist or is invalid
|
|
67
71
|
// This is expected on first run
|
|
68
|
-
LogService.getInstance().debug(
|
|
72
|
+
// LogService.getInstance().debug(
|
|
73
|
+
// `Config file not found or invalid: ${error instanceof Error ? error.message : String(error)}`,
|
|
74
|
+
// 'usePaneLoading'
|
|
75
|
+
// );
|
|
69
76
|
return [];
|
|
70
77
|
}
|
|
71
78
|
}
|
|
@@ -105,13 +112,34 @@ export async function recreateMissingPanes(missingPanes, panesFile) {
|
|
|
105
112
|
/**
|
|
106
113
|
* Recreates worktree panes that were killed by the user (e.g., via Ctrl+b x)
|
|
107
114
|
* Called during periodic polling after initial load
|
|
115
|
+
*
|
|
116
|
+
* IMPORTANT: Checks PaneLifecycleManager to avoid recreating panes that are
|
|
117
|
+
* being intentionally closed (prevents race condition with close/merge actions)
|
|
108
118
|
*/
|
|
109
119
|
export async function recreateKilledWorktreePanes(panes, allPaneIds, panesFile) {
|
|
110
|
-
const
|
|
120
|
+
const lifecycleManager = PaneLifecycleManager.getInstance();
|
|
121
|
+
// Filter out panes that are being intentionally closed
|
|
122
|
+
const worktreePanesToRecreate = panes.filter(pane => {
|
|
123
|
+
// Pane must be missing from tmux and have a worktree path
|
|
124
|
+
if (allPaneIds.includes(pane.paneId) || !pane.worktreePath) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
// CRITICAL: Check if this pane is being intentionally closed
|
|
128
|
+
// This is a safety belt - the main protection is that close action
|
|
129
|
+
// removes pane from config BEFORE killing tmux pane
|
|
130
|
+
if (lifecycleManager.isClosing(pane.id) || lifecycleManager.isClosing(pane.paneId)) {
|
|
131
|
+
LogService.getInstance().debug(`Skipping recreation of pane ${pane.id} (${pane.slug}) - intentionally being closed`, 'shellDetection');
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
});
|
|
111
136
|
if (worktreePanesToRecreate.length === 0)
|
|
112
137
|
return panes;
|
|
113
138
|
const tmuxService = TmuxService.getInstance();
|
|
114
|
-
LogService.getInstance().debug(
|
|
139
|
+
// LogService.getInstance().debug(
|
|
140
|
+
// `Recreating ${worktreePanesToRecreate.length} killed worktree panes`,
|
|
141
|
+
// 'shellDetection'
|
|
142
|
+
// );
|
|
115
143
|
const updatedPanes = [...panes];
|
|
116
144
|
for (const pane of worktreePanesToRecreate) {
|
|
117
145
|
try {
|
|
@@ -131,10 +159,16 @@ export async function recreateKilledWorktreePanes(panes, allPaneIds, panesFile)
|
|
|
131
159
|
await tmuxService.sendKeys(newPaneId, `"echo '# Original prompt: ${promptPreview}...'" Enter`);
|
|
132
160
|
}
|
|
133
161
|
await tmuxService.sendKeys(newPaneId, `"cd ${pane.worktreePath}" Enter`);
|
|
134
|
-
LogService.getInstance().debug(
|
|
162
|
+
// LogService.getInstance().debug(
|
|
163
|
+
// `Recreated worktree pane ${pane.id} (${pane.slug}) with new ID ${newPaneId}`,
|
|
164
|
+
// 'shellDetection'
|
|
165
|
+
// );
|
|
135
166
|
}
|
|
136
167
|
catch (error) {
|
|
137
|
-
LogService.getInstance().debug(
|
|
168
|
+
// LogService.getInstance().debug(
|
|
169
|
+
// `Failed to recreate worktree pane ${pane.id} (${pane.slug})`,
|
|
170
|
+
// 'shellDetection'
|
|
171
|
+
// );
|
|
138
172
|
}
|
|
139
173
|
}
|
|
140
174
|
// Recalculate layout after recreating panes
|
|
@@ -147,11 +181,17 @@ export async function recreateKilledWorktreePanes(panes, allPaneIds, panesFile)
|
|
|
147
181
|
const dimensions = getTerminalDimensions();
|
|
148
182
|
const contentPaneIds = updatedPanes.map(p => p.paneId);
|
|
149
183
|
recalculateAndApplyLayout(config.controlPaneId, contentPaneIds, dimensions.width, dimensions.height);
|
|
150
|
-
LogService.getInstance().debug(
|
|
184
|
+
// LogService.getInstance().debug(
|
|
185
|
+
// `Recalculated layout after recreating worktree panes`,
|
|
186
|
+
// 'shellDetection'
|
|
187
|
+
// );
|
|
151
188
|
}
|
|
152
189
|
}
|
|
153
190
|
catch (error) {
|
|
154
|
-
LogService.getInstance().debug(
|
|
191
|
+
// LogService.getInstance().debug(
|
|
192
|
+
// 'Failed to recalculate layout after recreating worktree panes',
|
|
193
|
+
// 'shellDetection'
|
|
194
|
+
// );
|
|
155
195
|
}
|
|
156
196
|
return updatedPanes;
|
|
157
197
|
}
|