opencode-navigator 0.27.1 → 0.27.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/tui.js CHANGED
@@ -84,7 +84,7 @@ const session=sessionID?api.state.session.get(sessionID):undefined
84
84
  const directory=session?.directory??api.state.path.directory
85
85
  const workspace=session?.workspaceID
86
86
  return{key:JSON.stringify([directory,workspace??null]),routing:{directory,...workspace&&{workspace}}}}
87
- import {createSignal as createSignal2,createSignal,createEffect,onCleanup,createContext,useContext,createContext as createContext2,createSignal as createSignal3,onCleanup as onCleanup2,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup3,Show,createEffect as createEffect4,Show as Show2,splitProps as splitProps3,createEffect as createEffect5,createSignal as createSignal4,onCleanup as onCleanup4,onMount,Suspense,lazy,batch,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup5,Show as Show3,batch as batch2,createSignal as createSignal8,createSignal as createSignal7,createEffect as createEffect6,createSignal as createSignal9,onCleanup as onCleanup6,createSignal as createSignal10,createSignal as createSignal11,Suspense as Suspense2,lazy as lazy2,Index,onCleanup as onCleanup7,createEffect as createEffect8,onCleanup as onCleanup10,batch as batch3,createEffect as createEffect7,createMemo,createSignal as createSignal13,onCleanup as onCleanup9,onMount as onMount2,createSignal as createSignal12,onCleanup as onCleanup8,For as For2,For as For3,Show as Show4,createMemo as createMemo2,Suspense as Suspense3,lazy as lazy3,For as For6,createMemo as createMemo4,onMount as onMount4,For as For5,createMemo as createMemo3,onMount as onMount3,Show as Show6,createEffect as createEffect9,createSignal as createSignal14,onCleanup as onCleanup11,Show as Show5,For as For4,For as For7,createEffect as createEffect10,createMemo as createMemo5,onCleanup as onCleanup12,createEffect as createEffect11,createMemo as createMemo6,untrack as untrack2,Suspense as Suspense4,lazy as lazy4,onCleanup as onCleanup13,createEffect as createEffect12,onCleanup as onCleanup14,createSignal as createSignal15,createMemo as createMemo7,createSignal as createSignal16,createSignal as createSignal17,lazy as lazy5,Show as Show9,For as For8,Show as Show8,Show as Show7,createEffect as createEffect13,onCleanup as onCleanup15,onMount as onMount5,onCleanup as onCleanup16,onMount as onMount6,For as For9,createSignal as createSignal18,createSignal as createSignal19,onCleanup as onCleanup17,createSignal as createSignal20,Show as Show10,createSignal as createSignal22,createSignal as createSignal21,onCleanup as onCleanup18,For as For10,Show as Show13,createMemo as createMemo9,createComputed,createMemo as createMemo8,createSignal as createSignal23,untrack as untrack3,Show as Show11,createComputed as createComputed2,untrack as untrack4,Show as Show12,createSignal as createSignal25,createEffect as createEffect14,createSignal as createSignal24,on,createMemo as createMemo11,createSignal as createSignal28,createMemo as createMemo10,For as For11,Show as Show17,Show as Show14,Show as Show15,createSignal as createSignal26,createContext as createContext3,useContext as useContext3,Show as Show16,createSignal as createSignal27,onCleanup as onCleanup19,Show as Show23,createSignal as createSignal29,untrack as untrack5,createSignal as createSignal30,createSignal as createSignal31,createEffect as createEffect15,For as For13,Show as Show18,For as For12,createSignal as createSignal32,Show as Show19,Show as Show20,Show as Show21,Show as Show22,createSignal as createSignal33,createEffect as createEffect16,createMemo as createMemo12,on as on2,onCleanup as onCleanup20,For as For14,Show as Show25,createMemo as createMemo14,Show as Show24,createMemo as createMemo13,createSignal as createSignal34,createContext as createContext4,useContext as useContext4,Show as Show26,Suspense as Suspense5,createEffect as createEffect17,onCleanup as onCleanup21,untrack as untrack6,For as For20,Match,Switch,createMemo as createMemo20,onCleanup as onCleanup27,For as For15,Show as Show28,createMemo as createMemo16,createSignal as createSignal36,createEffect as createEffect18,createMemo as createMemo15,onCleanup as onCleanup22,untrack as untrack7,Show as Show27,createEffect as createEffect19,createSignal as createSignal35,onCleanup as onCleanup23,For as For16,Show as Show30,createSignal as createSignal37,createEffect as createEffect20,createMemo as createMemo17,onCleanup as onCleanup24,untrack as untrack8,Show as Show29,For as For18,Show as Show33,createEffect as createEffect21,createMemo as createMemo18,createSignal as createSignal38,onCleanup as onCleanup25,untrack as untrack9,For as For17,Show as Show32,Show as Show31,Show as Show38,createEffect as createEffect22,createMemo as createMemo19,createSignal as createSignal39,onCleanup as onCleanup26,untrack as untrack10,Show as Show34,For as For19,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect23,createMemo as createMemo21,onCleanup as onCleanup28,untrack as untrack11,Show as Show39,createMemo as createMemo22,onCleanup as onCleanup29,createRoot,createSignal as createSignal40,getOwner,createSignal as createSignal41,onCleanup as onCleanup30,onMount as onMount7} from "solid-js"
87
+ import {createSignal as createSignal2,createSignal,createEffect,onCleanup,createContext,useContext,createContext as createContext2,createSignal as createSignal3,onCleanup as onCleanup2,useContext as useContext2,createEffect as createEffect2,splitProps,untrack,splitProps as splitProps2,For,createEffect as createEffect3,onCleanup as onCleanup3,Show,createEffect as createEffect4,Show as Show2,splitProps as splitProps3,createEffect as createEffect5,createSignal as createSignal4,onCleanup as onCleanup4,onMount,Suspense,lazy,batch,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup5,Show as Show3,batch as batch2,createSignal as createSignal8,createSignal as createSignal7,createEffect as createEffect6,createSignal as createSignal9,onCleanup as onCleanup6,createSignal as createSignal10,createSignal as createSignal11,Suspense as Suspense2,lazy as lazy2,Index,onCleanup as onCleanup7,createEffect as createEffect8,onCleanup as onCleanup10,batch as batch3,createEffect as createEffect7,createMemo,createSignal as createSignal13,onCleanup as onCleanup9,onMount as onMount2,createSignal as createSignal12,onCleanup as onCleanup8,For as For2,For as For3,Show as Show4,createMemo as createMemo2,Suspense as Suspense3,lazy as lazy3,For as For6,createMemo as createMemo4,onMount as onMount4,For as For5,createMemo as createMemo3,onMount as onMount3,Show as Show6,createEffect as createEffect9,createSignal as createSignal14,onCleanup as onCleanup11,Show as Show5,For as For4,For as For7,createEffect as createEffect10,createMemo as createMemo5,onCleanup as onCleanup12,createEffect as createEffect11,createMemo as createMemo6,untrack as untrack2,Suspense as Suspense4,lazy as lazy4,onCleanup as onCleanup13,createEffect as createEffect12,onCleanup as onCleanup14,createSignal as createSignal15,createMemo as createMemo7,createSignal as createSignal16,createSignal as createSignal17,lazy as lazy5,Show as Show9,For as For8,Show as Show8,Show as Show7,createEffect as createEffect13,onCleanup as onCleanup15,onMount as onMount5,onCleanup as onCleanup16,onMount as onMount6,For as For9,createSignal as createSignal18,createEffect as createEffect14,createSignal as createSignal19,onCleanup as onCleanup17,createSignal as createSignal20,onCleanup as onCleanup18,createSignal as createSignal21,Show as Show10,createSignal as createSignal23,createSignal as createSignal22,onCleanup as onCleanup19,For as For10,Show as Show13,createMemo as createMemo9,createComputed,createMemo as createMemo8,createSignal as createSignal24,untrack as untrack3,Show as Show11,createComputed as createComputed2,untrack as untrack4,Show as Show12,createSignal as createSignal26,createEffect as createEffect15,createSignal as createSignal25,on,createMemo as createMemo11,createSignal as createSignal29,createMemo as createMemo10,For as For11,Show as Show17,Show as Show14,Show as Show15,createSignal as createSignal27,createContext as createContext3,useContext as useContext3,Show as Show16,createSignal as createSignal28,onCleanup as onCleanup20,Show as Show23,createSignal as createSignal30,untrack as untrack5,createSignal as createSignal31,createSignal as createSignal32,createEffect as createEffect16,For as For13,Show as Show18,For as For12,createSignal as createSignal33,Show as Show19,Show as Show20,Show as Show21,Show as Show22,createSignal as createSignal34,createEffect as createEffect17,createMemo as createMemo12,on as on2,onCleanup as onCleanup21,For as For14,Show as Show25,createMemo as createMemo14,Show as Show24,createMemo as createMemo13,createSignal as createSignal35,createContext as createContext4,useContext as useContext4,Show as Show26,Suspense as Suspense5,createEffect as createEffect18,onCleanup as onCleanup22,untrack as untrack6,For as For20,Match,Switch,createMemo as createMemo20,onCleanup as onCleanup28,For as For15,Show as Show28,createMemo as createMemo16,createSignal as createSignal37,createEffect as createEffect19,createMemo as createMemo15,onCleanup as onCleanup23,untrack as untrack7,Show as Show27,createEffect as createEffect20,createSignal as createSignal36,onCleanup as onCleanup24,For as For16,Show as Show30,createSignal as createSignal38,createEffect as createEffect21,createMemo as createMemo17,onCleanup as onCleanup25,untrack as untrack8,Show as Show29,For as For18,Show as Show33,createEffect as createEffect22,createMemo as createMemo18,createSignal as createSignal39,onCleanup as onCleanup26,untrack as untrack9,For as For17,Show as Show32,Show as Show31,Show as Show38,createEffect as createEffect23,createMemo as createMemo19,createSignal as createSignal40,onCleanup as onCleanup27,untrack as untrack10,Show as Show34,For as For19,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect24,createMemo as createMemo21,onCleanup as onCleanup29,untrack as untrack11,Show as Show39,createMemo as createMemo22,onCleanup as onCleanup30,createRoot,createSignal as createSignal41,getOwner,createSignal as createSignal42,onCleanup as onCleanup31,onMount as onMount7} from "solid-js"
88
88
  function mcpToggleAction(status){if(status==="pending")
89
89
  return
90
90
  return status==="connected"?"disconnect":"connect"
@@ -1216,6 +1216,15 @@ function McpErrorDialog(props){return _$createComponent(SelectionMenu,{get api()
1216
1216
  },onSelect:()=>{}})
1217
1217
  }
1218
1218
 
1219
+ function reorderItems(items,from,to,key){const source=items.findIndex((item)=>key(item)===from)
1220
+ const target=items.findIndex((item)=>key(item)===to)
1221
+ const next=[...items]
1222
+ if(source===-1||target===-1||source===target)
1223
+ return next
1224
+ const [item]=next.splice(source,1)
1225
+ next.splice(target,0,item)
1226
+ return next
1227
+ }
1219
1228
  function builtInPreferences(defaults){return{behavior:{toggleKey:defaults.toggleKey,focusKey:defaults.focusKey,searchKey:defaults.searchKey,persistMcp:defaults.persistMcp,limitsRefreshMinutes:defaults.limitsRefreshMinutes,startInChat:defaults.startInChat,showSessionTitle:defaults.showSessionTitle,showSessionDate:defaults.showSessionDate,cornerFont:defaults.cornerFont,lspIconStyle:defaults.lspIconStyle,rowDensity:defaults.rowDensity,toolbarOverflow:defaults.toolbarOverflow,sectionItemLimits:defaults.sectionItemLimits,quickActionOrder:defaults.quickActionOrder,quickActionVisibility:defaults.quickActionVisibility
1220
1229
  },layout:{sections:defaults.sections,expanded:DEFAULT_SECTION_EXPANSION,order:defaults.sectionOrder??[...SIDEBAR_SECTIONS]
1221
1230
  },desiredMcpStates:{}}}
@@ -2084,6 +2093,10 @@ if(index===-1||destination<0||destination>=order.length)
2084
2093
  return
2085
2094
  swap(order,index,destination)
2086
2095
  update({target:selectedTarget(),behavior:{quickActionOrder:order}})
2096
+ },reorderQuickAction(from,to,scope){if(scope!==targetKey(selectedTarget()))
2097
+ return
2098
+ const order=reorderItems(selectedResolved().behavior.quickActionOrder,from,to,(id)=>id)
2099
+ update({target:selectedTarget(),behavior:{quickActionOrder:order}})
2087
2100
  },sectionItemLimit:(section)=>resolved().behavior.sectionItemLimits[section]??0,selectedSectionItemLimit:(section)=>selectedResolved().behavior.sectionItemLimits[section]??0,setSectionItemLimit(section,value){if(!Number.isSafeInteger(value)||value<0)
2088
2101
  throw new Error("Enter a non-negative whole number (0 for All)")
2089
2102
  load()
@@ -2193,6 +2206,10 @@ if(index===-1||destination<0||destination>=order.length)
2193
2206
  return
2194
2207
  swap(order,index,destination)
2195
2208
  setSelectedSessionLayout({order})
2209
+ },reorderSelectedSection(from,to,scope){if(scope!==targetKey(selectedTarget()))
2210
+ return
2211
+ const layout=resolveTarget(selectedTarget()).layout
2212
+ setSelectedSessionLayout({order:reorderItems(layout.order,from,to,(id)=>id)})
2196
2213
  },previewLayoutPreset(preset){return layoutPresetPreview(selectedLayoutResolved().layout,preset)
2197
2214
  },applyLayoutPreset(preset){load()
2198
2215
  setSelectedSessionLayout(layoutPresetPreview(selectedLayoutResolved().layout,preset).next,true)
@@ -4556,49 +4573,105 @@ return _$createElement("box")
4556
4573
 
4557
4574
 
4558
4575
 
4576
+
4577
+
4578
+
4579
+
4580
+
4581
+
4582
+
4583
+
4584
+
4585
+ function updateProgressView(progress){const labels={preparing:"Preparing",downloading:"Downloading",installing:"Downloading / installing",verifying:"Verifying"
4586
+ }
4587
+ const known=progress.total!==undefined&&Number.isFinite(progress.total)&&progress.total>0&&progress.received!==undefined&&Number.isFinite(progress.received)&&progress.received>=0
4588
+ const fraction=known?Math.min(1,progress.received / progress.total):undefined
4589
+ const label=fraction===undefined?labels[progress.phase]:`${labels[progress.phase]} ${Math.floor(fraction * 100)}%`
4590
+ return{label,fraction}}
4591
+ function VersionInstallProgress(props){const [frame,setFrame]=createSignal19(0)
4592
+ const view=()=>updateProgressView(props.progress)
4593
+ const caption=()=>{const labels={preparing:"Prepare",downloading:"Download",installing:"Update",verifying:"Verify"
4594
+ }
4595
+ const fraction=view().fraction
4596
+ return fraction===undefined?labels[props.progress.phase]:`${labels[props.progress.phase]} ${Math.floor(fraction * 100)}%`
4597
+ }
4598
+ createEffect14(()=>{if(view().fraction!==undefined)
4599
+ return
4600
+ const timer=setInterval(()=>setFrame((value)=>(value + 1)%7),200)
4601
+ onCleanup17(()=>clearInterval(timer))
4602
+ })
4603
+ const bar=()=>Array.from({length:8
4604
+ },(_,index)=>{const value=view().fraction
4605
+ if(value!==undefined)
4606
+ return index<Math.round(value*8)?"=":"-"
4607
+ return index===frame()||index===frame() + 1?"=":"-"
4608
+ }).join("")
4609
+ return(()=>{var _el$=_$createElement("text"),_el$2=_$createTextNode(` [`),_el$3=_$createTextNode(`] `)
4610
+ _$insertNode(_el$,_el$2)
4611
+ _$insertNode(_el$,_el$3)
4612
+ _$insert(_el$,()=>props.label,_el$2)
4613
+ _$insert(_el$,bar,_el$3)
4614
+ _$insert(_el$,caption,null)
4615
+ _$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
4616
+ return _el$
4617
+ })()
4618
+ }
4559
4619
  function VersionControl(props){const icons=useIcons()
4560
4620
  const theme=()=>props.api.theme.current
4561
- return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
4562
- _$insertNode(_el$,_el$2)
4621
+ return(()=>{var _el$=_$createElement("box")
4563
4622
  _$setProp(_el$,"flexDirection","row")
4564
4623
  _$setProp(_el$,"onMouseDown",(event)=>{if(props.update)
4565
4624
  event.stopPropagation()
4566
4625
  })
4567
4626
  _$setProp(_el$,"onMouseUp",(event)=>{const update=props.update
4568
- if(!update)
4627
+ if(!update||props.progress)
4569
4628
  return
4570
4629
  event.stopPropagation()
4571
4630
  props.onUpdate?.(update)
4572
4631
  })
4632
+ _$insert(_el$,(()=>{var _c$=_$memo(()=>!!props.progress)
4633
+ return()=>_c$()?_$createComponent(VersionInstallProgress,{get api(){return props.api
4634
+ },get label(){return props.label
4635
+ },get progress(){return props.progress
4636
+ }}):(()=>{var _el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
4573
4637
  _$insertNode(_el$2,_el$3)
4574
4638
  _$insert(_el$2,()=>props.label,_el$3)
4575
4639
  _$insert(_el$2,()=>props.version,null)
4576
- _$insert(_el$,(()=>{var _c$=_$memo(()=>!!props.update)
4577
- return()=>_c$()?(()=>{var _el$4=_$createElement("text")
4640
+ _$effect((_$p)=>_$setProp(_el$2,"fg",theme().textMuted,_$p))
4641
+ return _el$2
4642
+ })()
4643
+ })(),null)
4644
+ _$insert(_el$,(()=>{var _c$2=_$memo(()=>!!(props.update&&!props.progress))
4645
+ return()=>_c$2()?(()=>{var _el$4=_$createElement("text")
4578
4646
  _$insert(_el$4,()=>icons.icon("update"))
4579
4647
  _$effect((_$p)=>_$setProp(_el$4,"fg",theme().warning,_$p))
4580
4648
  return _el$4
4581
4649
  })():null
4582
4650
  })(),null)
4583
- _$effect((_$p)=>_$setProp(_el$2,"fg",theme().textMuted,_$p))
4584
4651
  return _el$
4585
4652
  })()
4586
4653
  }
4587
- function VersionSummary(props){return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text")
4588
- _$insertNode(_el$,_el$2)
4589
- _$setProp(_el$,"flexDirection","row")
4654
+ function VersionSummary(props){return(()=>{var _el$=_$createElement("box")
4590
4655
  _$insert(_el$,_$createComponent(VersionControl,{get api(){return props.api
4591
4656
  },label:"OpenCode",get version(){return props.api.app.version
4592
4657
  },get update(){return props.status.openCodeUpdate()
4593
4658
  },get onUpdate(){return props.onOpenCodeUpdate
4594
- }}),_el$2)
4659
+ },get progress(){return props.openCodeProgress
4660
+ }}),null)
4661
+ _$insert(_el$,(()=>{var _c$=_$memo(()=>!!(props.navigatorProgress||props.openCodeProgress))
4662
+ return()=>_c$()?null:(()=>{var _el$2=_$createElement("text")
4595
4663
  _$insertNode(_el$2,_$createTextNode(` | `))
4664
+ _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
4665
+ return _el$2
4666
+ })()
4667
+ })(),null)
4596
4668
  _$insert(_el$,_$createComponent(VersionControl,{get api(){return props.api
4597
4669
  },label:"Navigator",get version(){return props.navigatorVersion
4598
4670
  },get update(){return props.status.navigatorUpdate()
4599
4671
  },get onUpdate(){return props.onNavigatorUpdate
4672
+ },get progress(){return props.navigatorProgress
4600
4673
  }}),null)
4601
- _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
4674
+ _$effect((_$p)=>_$setProp(_el$,"flexDirection",props.navigatorProgress||props.openCodeProgress?"column":"row",_$p))
4602
4675
  return _el$
4603
4676
  })()
4604
4677
  }
@@ -4619,6 +4692,8 @@ _$insert(_el$,_$createComponent(VersionSummary,{get api(){return props.api
4619
4692
  },get status(){return props.status
4620
4693
  },get onOpenCodeUpdate(){return props.onOpenCodeUpdate
4621
4694
  },get onNavigatorUpdate(){return props.onNavigatorUpdate
4695
+ },get navigatorProgress(){return props.navigatorProgress
4696
+ },get openCodeProgress(){return props.openCodeProgress
4622
4697
  }}),null)
4623
4698
  _$effect((_$p)=>_$setProp(_el$2,"fg",theme().text,_$p))
4624
4699
  return _el$
@@ -4651,9 +4726,9 @@ return false
4651
4726
  return true
4652
4727
  }
4653
4728
  function createSidebarInteraction(api,showHelp=()=>openKeyboardHelp(api)){const descriptors=new Map
4654
- const [selectedId,setSelectedId]=createSignal20()
4655
- const [focusWithin,setFocusWithin]=createSignal20(false)
4656
- const [revision,setRevision]=createSignal20(0)
4729
+ const [selectedId,setSelectedId]=createSignal21()
4730
+ const [focusWithin,setFocusWithin]=createSignal21(false)
4731
+ const [revision,setRevision]=createSignal21(0)
4657
4732
  let titleRoot
4658
4733
  let contentRoot
4659
4734
  let targetedRoot
@@ -4922,14 +4997,14 @@ else if(highlighted)
4922
4997
  foregroundColor=theme.selectedListItemText
4923
4998
  return{backgroundColor,foregroundColor}}
4924
4999
  function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
4925
- const [hovered,setHovered]=createSignal21(false)
5000
+ const [hovered,setHovered]=createSignal22(false)
4926
5001
  const disabled=()=>descriptor.disabled?.()===true
4927
5002
  const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
4928
5003
  const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
4929
5004
  const ref=(renderable)=>{unregister?.()
4930
5005
  unregister=interaction?.register({...descriptor,renderable})
4931
5006
  }
4932
- onCleanup18(()=>unregister?.())
5007
+ onCleanup19(()=>unregister?.())
4933
5008
  return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
4934
5009
  },activate(event){if(interaction)
4935
5010
  return interaction.mouseActivate(descriptor.id,event)
@@ -4940,7 +5015,7 @@ return true
4940
5015
  }}}
4941
5016
  function LspBadge(props){const icons=useIcons()
4942
5017
  const isKnown=lspIconName(props.id)!==undefined
4943
- const [showName,setShowName]=createSignal22(false)
5018
+ const [showName,setShowName]=createSignal23(false)
4944
5019
  const statusColor=()=>props.status==="connected"?props.api.theme.current.success:props.api.theme.current.error
4945
5020
  if(!isKnown){return(()=>{var _el$=_$createElement("text")
4946
5021
  _$setProp(_el$,"flexShrink",1)
@@ -4983,7 +5058,7 @@ return _el$3
4983
5058
 
4984
5059
 
4985
5060
 
4986
- function createListVisibility(options){const [expanded,setExpanded]=createSignal23(false)
5061
+ function createListVisibility(options){const [expanded,setExpanded]=createSignal24(false)
4987
5062
  let previousKey
4988
5063
  let previousLimit
4989
5064
  const canToggle=createMemo8(()=>options.limit()>0&&options.items().length>options.limit())
@@ -5070,10 +5145,10 @@ result += segment
5070
5145
  }
5071
5146
  return result + ellipsis
5072
5147
  }
5073
- function SectionHeaderControl(props){const [width,setWidth]=createSignal24()
5148
+ function SectionHeaderControl(props){const [width,setWidth]=createSignal25()
5074
5149
  const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
5075
5150
  },()=>props.api.theme.current.accent,"control")
5076
- createEffect14(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
5151
+ createEffect15(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
5077
5152
  const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
5078
5153
  return _$createComponent(SelectionBox,{ref:(node)=>control.ref(node),get id(){return props.action.id
5079
5154
  },get iconOnly(){return props.iconOnly
@@ -5095,7 +5170,7 @@ return _el$
5095
5170
  }})
5096
5171
  }
5097
5172
  function Section(props){const icons=useIcons()
5098
- const [headerWidth,setHeaderWidth]=createSignal25(0)
5173
+ const [headerWidth,setHeaderWidth]=createSignal26(0)
5099
5174
  const icon=()=>props.section?icons.section(props.section):props.icon
5100
5175
  const theme=()=>props.api.theme.current
5101
5176
  const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
@@ -5453,8 +5528,8 @@ return _el$5
5453
5528
  function createSidebarBookmark(input){const{api,interaction,row,position,favorite,disabled,onToggle
5454
5529
  }=input
5455
5530
  const id=`${input.id}.favorite`
5456
- const [rowHovered,setRowHovered]=createSignal26(false)
5457
- const [controlHovered,setControlHovered]=createSignal26(false)
5531
+ const [rowHovered,setRowHovered]=createSignal27(false)
5532
+ const [controlHovered,setControlHovered]=createSignal27(false)
5458
5533
  const control=useSidebarItem(api,interaction,{id,position:()=>({...position(),column:0
5459
5534
  }),disabled,activate:()=>{onToggle()
5460
5535
  queueMicrotask(()=>interaction?.select(id))
@@ -5570,7 +5645,7 @@ return _el$2
5570
5645
  function SectionFilter(props){const icons=useIcons()
5571
5646
  let input
5572
5647
  let unregisterInput
5573
- const [inputFocused,setInputFocused]=createSignal27(false)
5648
+ const [inputFocused,setInputFocused]=createSignal28(false)
5574
5649
  const theme=()=>props.api.theme.current
5575
5650
  const item=useSidebarItem(props.api,props.interaction,{id:props.id??`filter.${props.placeholder}`,position:()=>props.position??{section:0,row:0,column:0
5576
5651
  },activate:()=>{if(!input)
@@ -5591,7 +5666,7 @@ props.interaction.leaveFilter(input)
5591
5666
  else
5592
5667
  input?.blur()
5593
5668
  }
5594
- onCleanup19(()=>unregisterInput?.())
5669
+ onCleanup20(()=>unregisterInput?.())
5595
5670
  return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
5596
5671
  },flexDirection:"row",gap:1,marginTop:1,marginBottom:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>!!highlighted())()?theme().primary:item.backgroundColor()
5597
5672
  },get onMouseOver(){return item.onMouseOver
@@ -5700,7 +5775,7 @@ return _el$
5700
5775
  }})
5701
5776
  }
5702
5777
  function McpSection(props){const icons=useIcons()
5703
- const [query,setQuery]=createSignal28("")
5778
+ const [query,setQuery]=createSignal29("")
5704
5779
  const model=createMcpSectionModel(props,query)
5705
5780
  const navigationSection=()=>props.navigationSection??6
5706
5781
  const summary=createMemo11(()=>`${model.active()}/${model.list().length}${model.errors() ? ` \xB7 ${model.errors()} ${icons.icon("error")}` : ""}`)
@@ -5797,11 +5872,11 @@ function createLimitsRefresh(options,schedule=scheduleInterval){let disposed=fal
5797
5872
  const selectedKey=createMemo12(()=>JSON.stringify(options.selectedModel?.()))
5798
5873
  const targetKey=createMemo12(()=>JSON.stringify(options.controller.current().model))
5799
5874
  const interval=createMemo12(()=>(parseLimitsRefreshMinutes(options.refreshMinutes?.())??DEFAULT_LIMITS_REFRESH_MINUTES)*60000)
5800
- createEffect16(on2(selectedKey,()=>{const model=options.selectedModel?.()
5875
+ createEffect17(on2(selectedKey,()=>{const model=options.selectedModel?.()
5801
5876
  if(model&&options.accountSource)
5802
5877
  options.accountSource.refresh(model).catch(()=>{})
5803
5878
  }))
5804
- createEffect16(on2(targetKey,()=>{const{model,adapter}=options.controller.current()
5879
+ createEffect17(on2(targetKey,()=>{const{model,adapter}=options.controller.current()
5805
5880
  if(model&&adapter)
5806
5881
  options.controller.refresh()
5807
5882
  }))
@@ -5814,9 +5889,9 @@ await options.accountSource.refresh(model)
5814
5889
  if(!disposed&&target===targetKey())
5815
5890
  await options.controller.refresh()
5816
5891
  }
5817
- createEffect16(on2(interval,(milliseconds)=>{onCleanup20(schedule(()=>void refresh().catch(()=>{}),milliseconds))
5892
+ createEffect17(on2(interval,(milliseconds)=>{onCleanup21(schedule(()=>void refresh().catch(()=>{}),milliseconds))
5818
5893
  }))
5819
- onCleanup20(()=>{disposed=true
5894
+ onCleanup21(()=>{disposed=true
5820
5895
  })
5821
5896
  }
5822
5897
 
@@ -5872,7 +5947,7 @@ function QuickActionRow(props){const{api,interaction
5872
5947
  const icons=useIcons()
5873
5948
  const toolbar=useToolbar()
5874
5949
  const theme=()=>api.theme.current
5875
- const [width,setWidth]=createSignal34(0)
5950
+ const [width,setWidth]=createSignal35(0)
5876
5951
  const shortcut=createMemo13(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
5877
5952
  })
5878
5953
  return api.keys.formatBindings(bindings.get(props.action.command))
@@ -6025,13 +6100,13 @@ item.activate(event)
6025
6100
 
6026
6101
 
6027
6102
  function SidebarToggleBinding(props){const shortcuts=createSidebarShortcutMode(props.api)
6028
- createEffect17(()=>{const key=props.preferences.toggleKey()
6103
+ createEffect18(()=>{const key=props.preferences.toggleKey()
6029
6104
  untrack6(()=>shortcuts.bind(key))
6030
6105
  })
6031
- createEffect17(()=>{if(shortcuts.active()&&(props.api.route.current.name!=="session"||props.api.ui.dialog.open||props.api.mode.current()==="modal"))
6106
+ createEffect18(()=>{if(shortcuts.active()&&(props.api.route.current.name!=="session"||props.api.ui.dialog.open||props.api.mode.current()==="modal"))
6032
6107
  untrack6(shortcuts.cancel)
6033
6108
  })
6034
- onCleanup21(shortcuts.dispose)
6109
+ onCleanup22(shortcuts.dispose)
6035
6110
  return(()=>{var _el$=_$createElement("box")
6036
6111
  _$setProp(_el$,"position","absolute")
6037
6112
  _$setProp(_el$,"top",0)
@@ -6053,11 +6128,11 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
6053
6128
  })=>({name:name.replace(PLUGIN_ID,()=>LEGACY_PLUGIN_ID),run,enabled
6054
6129
  }))]
6055
6130
  })
6056
- onCleanup21(unregisterCommands)
6057
- createEffect17(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
6131
+ onCleanup22(unregisterCommands)
6132
+ createEffect18(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
6058
6133
  }]
6059
6134
  })
6060
- onCleanup21(unregister)
6135
+ onCleanup22(unregister)
6061
6136
  })
6062
6137
  return _$createElement("box")
6063
6138
  }
@@ -6139,11 +6214,11 @@ const revision=createQuickActionRevision(props.api)
6139
6214
  const pins=()=>props.preferences.toolbarPins?.()??[]
6140
6215
  const needsSkills=createMemo15(()=>pins().some((pin)=>pin.kind==="skill"))
6141
6216
  const target=createMemo15(()=>props.skills.target())
6142
- createEffect18(()=>{if(!needsSkills())
6217
+ createEffect19(()=>{if(!needsSkills())
6143
6218
  return
6144
6219
  const current=target()
6145
6220
  const release=untrack7(()=>props.skills.activate(current))
6146
- onCleanup22(release)
6221
+ onCleanup23(release)
6147
6222
  untrack7(()=>{props.skills.refresh(current).catch(()=>{})
6148
6223
  })
6149
6224
  })
@@ -6174,13 +6249,13 @@ return{...model,width:toolbarPinWidth}}
6174
6249
 
6175
6250
  function ToolbarButton(props){const icons=useIcons()
6176
6251
  const foreground=()=>props.reason?props.api.theme.current.textMuted:item.foregroundColor()
6177
- const [hovered,setHovered]=createSignal35(false)
6252
+ const [hovered,setHovered]=createSignal36(false)
6178
6253
  const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>({section:0,row:props.row + 1,column:props.column
6179
6254
  }),activate:props.onRun
6180
6255
  },()=>props.reason?props.api.theme.current.textMuted:props.api.theme.current.accent,"control")
6181
6256
  const content=()=>[props.icons.map((icon)=>terminalIcon(icon,icons.style())).join(" "),props.text].filter(Boolean).join(" ")
6182
- createEffect19(()=>props.onDetails(props.id,item.focused()||hovered()))
6183
- onCleanup23(()=>props.onDetails(props.id,false))
6257
+ createEffect20(()=>props.onDetails(props.id,item.focused()||hovered()))
6258
+ onCleanup24(()=>props.onDetails(props.id,false))
6184
6259
  return _$createComponent(Show27,{get when(){return _$memo(()=>!!(props.width===3&&props.icons.length===1))()&&!props.text
6185
6260
  },get fallback(){return _$createComponent(SelectionBox,{get id(){return props.id
6186
6261
  },ref(r$){var _ref$2=item.ref
@@ -6221,8 +6296,8 @@ setHovered(false)
6221
6296
  }
6222
6297
  function SidebarToolbar(props){const model=createToolbarModel(props)
6223
6298
  const icons=useIcons()
6224
- const [width,setWidth]=createSignal36(3)
6225
- const [detail,setDetail]=createSignal36()
6299
+ const [width,setWidth]=createSignal37(3)
6300
+ const [detail,setDetail]=createSignal37()
6226
6301
  const keys=createMemo16(()=>model.pins().map((pin)=>toolbarPinKey(pin)))
6227
6302
  const widths=createMemo16(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),model.width(pin)])))
6228
6303
  const layout=createMemo16(()=>toolbarLayout(keys(),width(),props.preferences.toolbarOverflow?.()??"menu",widths()))
@@ -6313,9 +6388,9 @@ const filtered=createMemo17(()=>list().filter((item)=>matchesFilter(query(),item
6313
6388
  const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("skills")??0,resetKey:()=>JSON.stringify([target().key,query()])
6314
6389
  })
6315
6390
  const state=createMemo17(()=>props.controller.state(target()))
6316
- createEffect20(()=>{const current=target()
6391
+ createEffect21(()=>{const current=target()
6317
6392
  const deactivate=untrack8(()=>props.controller.activate?.(current)??(()=>{}))
6318
- onCleanup24(deactivate)
6393
+ onCleanup25(deactivate)
6319
6394
  untrack8(()=>void props.controller.refresh(current).catch(()=>{}))
6320
6395
  })
6321
6396
  async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
@@ -6376,7 +6451,7 @@ return _el$
6376
6451
  }
6377
6452
  function SkillsSection(props){const dialogs=useDialogs(props.api)
6378
6453
  const toolbar=useToolbar()
6379
- const [query,setQuery]=createSignal37("")
6454
+ const [query,setQuery]=createSignal38("")
6380
6455
  const model=createSkillSectionModel(props,query)
6381
6456
  const navigationSection=()=>props.navigationSection??3
6382
6457
  function selectSkill(item){activateSkill({api:props.api,controller:props.controller,access:props.preferences,dialogs,skill:item,onConfigure:toolbar?(navigation)=>toolbar.configure({kind:"skill",name:item.name,location:item.location,icon:"book"
@@ -6456,18 +6531,18 @@ return _el$
6456
6531
  function createSubagentSectionModel(props){const list=createMemo18(()=>props.controller.list(props.sessionID))
6457
6532
  const recent=createMemo18(()=>props.controller.recent?.(props.sessionID)??[])
6458
6533
  const rows=createMemo18(()=>buildSubagentView(list(),recent()))
6459
- const [query,setQuery]=createSignal38("")
6460
- const [mode,setMode]=createSignal38("all")
6534
+ const [query,setQuery]=createSignal39("")
6535
+ const [mode,setMode]=createSignal39("all")
6461
6536
  const counts=createMemo18(()=>countSubagentView(rows(),query()))
6462
6537
  const tabs=createMemo18(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
6463
6538
  const filtered=createMemo18(()=>filterSubagentView(rows(),mode(),query()))
6464
6539
  const parentID=createMemo18(()=>props.api.state?.session?.get(props.sessionID)?.parentID)
6465
6540
  const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
6466
- createEffect21(()=>{targetKey()
6541
+ createEffect22(()=>{targetKey()
6467
6542
  setQuery("")
6468
6543
  setMode("all")
6469
6544
  })
6470
- createEffect21(()=>{if(mode()!=="all"&&counts()[mode()]===0)
6545
+ createEffect22(()=>{if(mode()!=="all"&&counts()[mode()]===0)
6471
6546
  setMode("all")
6472
6547
  })
6473
6548
  const visibility=createListVisibility({items:filtered,limit:()=>props.preferences.sectionItemLimit?.("subagents")??0,resetKey:()=>JSON.stringify([targetKey(),query(),mode()])
@@ -6477,10 +6552,10 @@ const now=createSubagentClock(clockKey)
6477
6552
  const byId=createMemo18(()=>new Map(visibility.visible().map((item)=>[item.session.id,item])))
6478
6553
  const ids=createMemo18(()=>visibility.visible().map((item)=>item.session.id))
6479
6554
  const state=createMemo18(()=>props.controller.state(props.sessionID))
6480
- createEffect21(()=>{const sessionID=props.sessionID
6555
+ createEffect22(()=>{const sessionID=props.sessionID
6481
6556
  targetKey()
6482
6557
  const deactivate=untrack9(()=>props.controller.activate?.(sessionID)??(()=>{}))
6483
- onCleanup25(deactivate)
6558
+ onCleanup26(deactivate)
6484
6559
  untrack9(()=>void props.controller.refresh(sessionID).catch(()=>{}))
6485
6560
  })
6486
6561
  return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
@@ -6874,21 +6949,21 @@ const managed=()=>("guidance" in props.controller)?props.controller:undefined
6874
6949
  const native=()=>("source" in props.controller)&&props.controller.source==="native"
6875
6950
  const setup=()=>("setup" in props.controller)?props.controller.setup:undefined
6876
6951
  const setupState=()=>setup()?.state(props.sessionID)
6877
- const [mode,setMode]=createSignal39("all")
6952
+ const [mode,setMode]=createSignal40("all")
6878
6953
  const targetKey=createMemo19(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
6879
- createEffect22(()=>{targetKey()
6954
+ createEffect23(()=>{targetKey()
6880
6955
  setMode("all")
6881
6956
  })
6882
6957
  const view=createMemo19(()=>buildTodoView(list(),mode()))
6883
6958
  const visibility=createListVisibility({items:()=>view().rows,limit:()=>props.preferences.sectionItemLimit?.("todo")??0,resetKey:()=>JSON.stringify([targetKey(),mode()])
6884
6959
  })
6885
6960
  const state=createMemo19(()=>props.controller.state(props.sessionID))
6886
- createEffect22(()=>{const sessionID=props.sessionID
6961
+ createEffect23(()=>{const sessionID=props.sessionID
6887
6962
  targetKey()
6888
6963
  if(unavailable())
6889
6964
  return
6890
6965
  const deactivate=untrack10(()=>props.controller.activate?.(sessionID)??(()=>{}))
6891
- onCleanup26(deactivate)
6966
+ onCleanup27(deactivate)
6892
6967
  untrack10(()=>void props.controller.refresh(sessionID).catch(()=>{}))
6893
6968
  untrack10(()=>void setup()?.refresh(sessionID).catch(()=>{}))
6894
6969
  })
@@ -6958,7 +7033,7 @@ return _el$4
6958
7033
  }
6959
7034
  function SidebarContent(props){const sections=props.preferences.sections
6960
7035
  const visibleSections=createMemo20(()=>props.preferences.sectionOrder().filter((section)=>sections()[section]&&supportsSidebarSection(props.api,section)))
6961
- onCleanup27(()=>props.interaction.setContentRoot(undefined))
7036
+ onCleanup28(()=>props.interaction.setContentRoot(undefined))
6962
7037
  return _$createComponent(ToolbarProvider,{get api(){return props.api
6963
7038
  },get preferences(){return props.preferences
6964
7039
  },get skills(){return props.skills
@@ -7010,7 +7085,7 @@ return _el$
7010
7085
 
7011
7086
 
7012
7087
  function McpPersistence(props){const persist=createMemo21(()=>props.controller.persist())
7013
- createEffect23(()=>{if(!props.api.state.ready)
7088
+ createEffect24(()=>{if(!props.api.state.ready)
7014
7089
  return
7015
7090
  persist()
7016
7091
  const route=props.api.route.current
@@ -7018,12 +7093,12 @@ const params="params" in route?route.params:undefined
7018
7093
  if(typeof params?.sessionID!=="string")
7019
7094
  return
7020
7095
  const current=props.controller.target()
7021
- onCleanup28(()=>props.controller.deactivate(current))
7096
+ onCleanup29(()=>props.controller.deactivate(current))
7022
7097
  untrack11(()=>void props.controller.activate(current).catch(()=>{}))
7023
7098
  })
7024
7099
  return _$createElement("box")
7025
7100
  }
7026
- function PreferencesPersistence(props){createEffect23(()=>{const location=currentLocation(props.api)
7101
+ function PreferencesPersistence(props){createEffect24(()=>{const location=currentLocation(props.api)
7027
7102
  untrack11(()=>props.controller.setActiveScope(preferencesScope({directory:location.routing.directory,worktree:props.api.state.path.worktree
7028
7103
  })))
7029
7104
  props.controller.load()
@@ -7031,7 +7106,7 @@ props.controller.load()
7031
7106
  return _$createElement("box")
7032
7107
  }
7033
7108
  function FirstRunWizardPersistence(props){let isChecked=false
7034
- createEffect23(()=>{if(isChecked)
7109
+ createEffect24(()=>{if(isChecked)
7035
7110
  return
7036
7111
  isChecked=true
7037
7112
  showFirstRunWizard(props.api,props.preferences).catch(()=>{})
@@ -7058,7 +7133,7 @@ const settingsId=`${PLUGIN_ID}.settings`
7058
7133
  const settings=useSidebarItem(props.api,props.interaction,{id:settingsId,position:{section:0,row:0,column:0
7059
7134
  },activate:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
7060
7135
  },()=>theme().textMuted,"control")
7061
- onCleanup29(()=>props.interaction.setTitleRoot(undefined))
7136
+ onCleanup30(()=>props.interaction.setTitleRoot(undefined))
7062
7137
  return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box"),_el$3=_$createElement("box")
7063
7138
  _$insertNode(_el$,_el$2)
7064
7139
  _$use((node)=>props.interaction.setTitleRoot(node),_el$)
@@ -7121,7 +7196,7 @@ return mergeConfiguredDefaults(configuredDefaultsFromPluginOptions(options),user
7121
7196
  function LimitsPersistence(props){createLimitsRefresh(props)
7122
7197
  return _$createElement("box")
7123
7198
  }
7124
- function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.27.1",openCodeVersion:api.app.version,checkState:()=>status.navigatorCheckState?.()??{status:"idle"},checking:()=>status.navigatorCheckState?.().status==="checking",updating:updates.navigatorUpdating,installed:updates.navigatorInstalled,check:()=>status.refreshNavigator?.()??Promise.resolve("unavailable"),update(dialogs){const target=status.navigatorUpdate()
7199
+ function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.27.3",openCodeVersion:api.app.version,checkState:()=>status.navigatorCheckState?.()??{status:"idle"},checking:()=>status.navigatorCheckState?.().status==="checking",updating:updates.navigatorUpdating,installed:updates.navigatorInstalled,check:()=>status.refreshNavigator?.()??Promise.resolve("unavailable"),update(dialogs){const target=status.navigatorUpdate()
7125
7200
  if(target)
7126
7201
  updates.navigator(target,dialogs)
7127
7202
  },changelog:async ()=>notes.parseChangelog(await notes.readBundledChangelog())
@@ -7257,7 +7332,7 @@ context.keymap.dispatch(command.id)
7257
7332
  context.renderer.keyInput.on("keypress",onKeypress)
7258
7333
  const keymap={registerLayer(layer){const id=++sequence
7259
7334
  const owner=getOwner()
7260
- const [active,setActive]=createSignal40(true)
7335
+ const [active,setActive]=createSignal41(true)
7261
7336
  const install=()=>{context.keymap.layer(()=>({mode:typeof layer.mode==="string"?layer.mode:"base",priority:layer.priority,enabled:()=>active()&&enabled(layer.enabled),target:layer.target?()=>layer.target:undefined,commands:v2LayerCommands(id,layer,()=>true,run,context.keymap.dispatch)
7262
7337
  }))
7263
7338
  }
@@ -7302,7 +7377,7 @@ cleanups.clear()
7302
7377
  context.renderer.keyInput.off("keypress",onKeypress)
7303
7378
  }}}
7304
7379
 
7305
- function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal41({})
7380
+ function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal42({})
7306
7381
  const projections=new WeakMap
7307
7382
  function normalize(info){const directory=info.location.directory
7308
7383
  const workspaceID=context.location?.directory===directory?context.location.workspaceID:undefined
@@ -7372,7 +7447,7 @@ function DialogPrompt(props){return _$createComponent(SingleLinePrompt,_$mergePr
7372
7447
  }},props))
7373
7448
  }
7374
7449
  function DialogConfirm(props){let active=true
7375
- onCleanup30(()=>{active=false
7450
+ onCleanup31(()=>{active=false
7376
7451
  })
7377
7452
  async function confirm(){const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
7378
7453
  })
@@ -7586,7 +7661,7 @@ const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js"
7586
7661
  const limitsModule=await import(limitsPath)
7587
7662
  const LimitsSection=limitsModule.ProviderLimitsSection
7588
7663
  const{controller:limits,codex,accountSource,selectModel,modelSelection
7589
- }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.27.1",hostContext)
7664
+ }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.27.3",hostContext)
7590
7665
  const mcp=createMcpController(api,preferences.persistMcp,preferences,nativeSources?.mcp)
7591
7666
  const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont,sidebarShortcutActions(api)))
7592
7667
  const startup=createStartupSessionController(api,preferences)
@@ -7615,7 +7690,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
7615
7690
  },interaction,skills,subagents,mcp
7616
7691
  }),_$createComponent(FirstRunWizardPersistence,{api,preferences
7617
7692
  }),_$createComponent(StartupSessionBinding,{api,controller:startup
7618
- }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.27.1"
7693
+ }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.27.3"
7619
7694
  }),_$createComponent(McpPersistence,{api,controller:mcp
7620
7695
  })]
7621
7696
  }})
@@ -7649,14 +7724,16 @@ return result.data?.type==="text"?result.data.content:undefined
7649
7724
  const updateServices=await loadNavigatorUpdates()
7650
7725
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV1VersionUpdater
7651
7726
  }=updateServices
7652
- const versionStatus=createVersionStatus(api,"0.27.1")
7653
- const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.27.1"))
7727
+ const versionStatus=createVersionStatus(api,"0.27.3")
7728
+ const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.27.3"))
7654
7729
  bindNavigatorAbout(api,versionStatus,versionUpdates,updateServices)
7655
7730
  api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7656
7731
  },get multilineCorners(){return preferences.cornerFont
7657
7732
  },get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
7658
- },navigatorVersion:"0.27.1",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7733
+ },navigatorVersion:"0.27.3",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7659
7734
  },get onNavigatorUpdate(){return versionUpdates.navigator
7735
+ },get navigatorProgress(){return versionUpdates.navigatorProgress()
7736
+ },get openCodeProgress(){return versionUpdates.openCodeProgress()
7660
7737
  }})
7661
7738
  }})
7662
7739
  }}})
@@ -7672,8 +7749,8 @@ return new TextDecoder().decode(await context.client.file.read({location:context
7672
7749
  const updateServices=await loadNavigatorUpdates()
7673
7750
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV2VersionUpdater
7674
7751
  }=updateServices
7675
- const versionStatus=createVersionStatus(adapter.api,"0.27.1")
7676
- const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.27.1"))
7752
+ const versionStatus=createVersionStatus(adapter.api,"0.27.3")
7753
+ const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.27.3"))
7677
7754
  bindNavigatorAbout(adapter.api,versionStatus,versionUpdates,updateServices)
7678
7755
  const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7679
7756
  },get multilineCorners(){return preferences.cornerFont
@@ -7681,8 +7758,10 @@ const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$create
7681
7758
  _$setProp(_el$,"flexDirection","row")
7682
7759
  _$setProp(_el$,"justifyContent","space-between")
7683
7760
  _$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
7684
- },navigatorVersion:"0.27.1",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7761
+ },navigatorVersion:"0.27.3",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7685
7762
  },get onNavigatorUpdate(){return versionUpdates.navigator
7763
+ },get navigatorProgress(){return versionUpdates.navigatorProgress()
7764
+ },get openCodeProgress(){return versionUpdates.openCodeProgress()
7686
7765
  }}),null)
7687
7766
  _$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
7688
7767
  },preferences,mcp,skills
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "opencode-navigator",
4
- "version": "0.27.1",
4
+ "version": "0.27.3",
5
5
  "description": "Search, navigate, and manage OpenCode sessions in the TUI and experimental Desktop GUI",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.4.4",