opencode-navigator 0.24.0 → 0.25.0

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
@@ -3,14 +3,13 @@ import {insert as _$insert,setProp as _$setProp,createElement as _$createElement
3
3
 
4
4
 
5
5
 
6
- 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,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup5,Show as Show3,batch,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,createSignal as createSignal12,onCleanup as onCleanup8,createEffect as createEffect8,onCleanup as onCleanup10,batch as batch2,createEffect as createEffect7,createMemo,createSignal as createSignal13,onCleanup as onCleanup9,onMount as onMount2,For as For2,For as For3,Show as Show4,createMemo as createMemo2,Show as Show5,createSignal as createSignal14,onCleanup as onCleanup11,For as For4,For as For5,For as For8,createMemo as createMemo4,onMount as onMount4,For as For7,createMemo as createMemo3,onMount as onMount3,Show as Show7,createEffect as createEffect9,createSignal as createSignal15,onCleanup as onCleanup12,Show as Show6,For as For6,For as For9,createEffect as createEffect10,createMemo as createMemo5,onCleanup as onCleanup13,createEffect as createEffect11,createMemo as createMemo6,untrack as untrack2,Suspense as Suspense3,lazy as lazy3,onCleanup as onCleanup14,createEffect as createEffect12,onCleanup as onCleanup15,createSignal as createSignal16,createMemo as createMemo7,createSignal as createSignal17,createSignal as createSignal18,lazy as lazy4,Show as Show10,For as For10,Show as Show9,Show as Show8,createEffect as createEffect13,onCleanup as onCleanup16,onMount as onMount5,onCleanup as onCleanup17,onMount as onMount6,For as For11,createSignal as createSignal19,createSignal as createSignal20,onCleanup as onCleanup18,createSignal as createSignal21,Show as Show11,createSignal as createSignal23,createSignal as createSignal22,onCleanup as onCleanup19,For as For12,Show as Show14,createMemo as createMemo9,createComputed,createMemo as createMemo8,createSignal as createSignal24,untrack as untrack3,Show as Show12,createComputed as createComputed2,untrack as untrack4,Show as Show13,createSignal as createSignal26,createEffect as createEffect14,createSignal as createSignal25,on,createMemo as createMemo11,createSignal as createSignal29,createMemo as createMemo10,For as For13,Show as Show18,Show as Show15,Show as Show16,createSignal as createSignal27,createContext as createContext3,useContext as useContext3,Show as Show17,createSignal as createSignal28,onCleanup as onCleanup20,Show as Show24,createSignal as createSignal30,untrack as untrack5,createSignal as createSignal31,createSignal as createSignal32,createEffect as createEffect15,For as For15,Show as Show19,For as For14,createSignal as createSignal33,Show as Show20,Show as Show21,Show as Show22,Show as Show23,For as For16,Show as Show26,createMemo as createMemo13,Show as Show25,createMemo as createMemo12,createSignal as createSignal34,createContext as createContext4,useContext as useContext4,Show as Show27,Suspense as Suspense4,createEffect as createEffect16,onCleanup as onCleanup21,untrack as untrack6,For as For22,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup27,For as For17,Show as Show29,createMemo as createMemo15,createSignal as createSignal36,createEffect as createEffect17,createMemo as createMemo14,onCleanup as onCleanup22,untrack as untrack7,Show as Show28,createEffect as createEffect18,createSignal as createSignal35,onCleanup as onCleanup23,For as For18,Show as Show31,createSignal as createSignal37,createEffect as createEffect19,createMemo as createMemo16,onCleanup as onCleanup24,untrack as untrack8,Show as Show30,For as For20,Show as Show34,createEffect as createEffect20,createMemo as createMemo17,createSignal as createSignal38,onCleanup as onCleanup25,untrack as untrack9,For as For19,Show as Show33,Show as Show32,Show as Show38,createEffect as createEffect21,createMemo as createMemo18,createSignal as createSignal39,onCleanup as onCleanup26,untrack as untrack10,For as For21,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect22,createMemo as createMemo20,onCleanup as onCleanup28,untrack as untrack11,Show as Show39,createMemo as createMemo21,onCleanup as onCleanup29,createEffect as createEffect23,createMemo as createMemo22,on as on2,onCleanup as onCleanup30,createRoot,createSignal as createSignal40,getOwner,createSignal as createSignal41,onCleanup as onCleanup31,onMount as onMount7} from "solid-js"
6
+ 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,createSignal as createSignal5,createSignal as createSignal6,onCleanup as onCleanup5,Show as Show3,batch,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,createSignal as createSignal12,onCleanup as onCleanup8,createEffect as createEffect8,onCleanup as onCleanup10,batch as batch2,createEffect as createEffect7,createMemo,createSignal as createSignal13,onCleanup as onCleanup9,onMount as onMount2,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,For as For14,Show as Show25,createMemo as createMemo13,Show as Show24,createMemo as createMemo12,createSignal as createSignal33,createContext as createContext4,useContext as useContext4,Show as Show26,Suspense as Suspense5,createEffect as createEffect16,onCleanup as onCleanup20,untrack as untrack6,For as For20,Match,Switch,createMemo as createMemo19,onCleanup as onCleanup26,For as For15,Show as Show28,createMemo as createMemo15,createSignal as createSignal35,createEffect as createEffect17,createMemo as createMemo14,onCleanup as onCleanup21,untrack as untrack7,Show as Show27,createEffect as createEffect18,createSignal as createSignal34,onCleanup as onCleanup22,For as For16,Show as Show30,createSignal as createSignal36,createEffect as createEffect19,createMemo as createMemo16,onCleanup as onCleanup23,untrack as untrack8,Show as Show29,For as For18,Show as Show33,createEffect as createEffect20,createMemo as createMemo17,createSignal as createSignal37,onCleanup as onCleanup24,untrack as untrack9,For as For17,Show as Show32,Show as Show31,Show as Show38,createEffect as createEffect21,createMemo as createMemo18,createSignal as createSignal38,onCleanup as onCleanup25,untrack as untrack10,Show as Show34,For as For19,Show as Show36,Show as Show35,Show as Show37,createEffect as createEffect22,createMemo as createMemo20,onCleanup as onCleanup27,untrack as untrack11,Show as Show39,createMemo as createMemo21,onCleanup as onCleanup28,createEffect as createEffect23,createMemo as createMemo22,on as on2,onCleanup as onCleanup29,createRoot,createSignal as createSignal39,getOwner,createSignal as createSignal40,onCleanup as onCleanup30,onMount as onMount7} from "solid-js"
7
7
  var SIDEBAR_SECTIONS=["limits","todo","subagents","skills","quick_actions","lsp","mcp"]
8
8
  var QUICK_ACTION_IDS=["session.rename","session.timeline","session.copy","session.export","session.compact","session.list","session.new","session.fork","messages.copy","session.first","session.last","session.messages_last_user","session.message.next","session.message.previous","permission.mode"]
9
9
  function preferencesScope(path){return path.worktree||path.directory||"global"
10
10
  }
11
11
  var DEFAULT_SECTION_EXPANSION={limits:true,todo:true,subagents:false,skills:false,quick_actions:false,lsp:false,mcp:false
12
12
  }
13
- var SECTION_DEFINITIONS=[{name:"limits",label:"Limits"},{name:"todo",label:"Todo"},{name:"subagents",label:"Subagents"},{name:"skills",label:"Skills"},{name:"quick_actions",label:"Quick actions"},{name:"lsp",label:"LSP"},{name:"mcp",label:"MCP"}]
14
13
  function parseQuickActionOrder(value){if(!Array.isArray(value))
15
14
  return
16
15
  const order=[...new Set(value.filter((id)=>QUICK_ACTION_IDS.includes(id)))]
@@ -738,7 +737,7 @@ renderer.requestRender()
738
737
 
739
738
 
740
739
 
741
- import {RGBA,TextAttributes,TextAttributes as TextAttributes2,TextAttributes as TextAttributes3,RGBA as RGBA2,parseColor,TextAttributes as TextAttributes4,TextAttributes as TextAttributes5,TextAttributes as TextAttributes6,TextAttributes as TextAttributes7,RGBA as RGBA3,parseColor as parseColor2,TextAttributes as TextAttributes8,TextAttributes as TextAttributes9,TextAttributes as TextAttributes12,TextAttributes as TextAttributes10,TextAttributes as TextAttributes11,TextAttributes as TextAttributes13,TextAttributes as TextAttributes14,TextAttributes as TextAttributes16,TextAttributes as TextAttributes15,TextAttributes as TextAttributes17,ScrollBoxRenderable,TextAttributes as TextAttributes18} from "@opentui/core"
740
+ import {RGBA,TextAttributes,TextAttributes as TextAttributes2,TextAttributes as TextAttributes3,RGBA as RGBA2,parseColor,TextAttributes as TextAttributes4,TextAttributes as TextAttributes5,TextAttributes as TextAttributes6,TextAttributes as TextAttributes7,RGBA as RGBA3,parseColor as parseColor2,TextAttributes as TextAttributes8,TextAttributes as TextAttributes9,TextAttributes as TextAttributes10,TextAttributes as TextAttributes11,TextAttributes as TextAttributes13,TextAttributes as TextAttributes12,TextAttributes as TextAttributes14,ScrollBoxRenderable,TextAttributes as TextAttributes15} from "@opentui/core"
742
741
 
743
742
  var transparent=RGBA.fromInts(0,0,0,0)
744
743
  function selectionBackdrop(node){for(let parent=node.parent;parent; parent=parent.parent){if("backgroundColor" in parent&&parent.backgroundColor instanceof RGBA&&parent.backgroundColor.a>0&&(!("shouldFill" in parent)||parent.shouldFill!==false))
@@ -3703,274 +3702,16 @@ return value&&valid()&&!blocked()?controller.applyPreset(name,value,target):unde
3703
3702
 
3704
3703
 
3705
3704
 
3706
-
3707
-
3708
-
3709
-
3710
-
3711
- var ONBOARDING_STEPS=[{title:"A control center that stays compact",summary:"Navigator brings session state, search, and controls into OpenCode's existing sidebar.",icon:"help",features:[{icon:"sections",title:"Progressive disclosure",description:"Expand only the context you need right now."},{icon:"scope",title:"Current context",description:"Follow the active session, workspace, and worktree."},{icon:"actions",title:"Mouse and keyboard",description:"Use the same controls with either input method."}]
3712
- },{title:"Stay oriented while agents work",summary:"Keep current work visible without turning the sidebar into another dashboard.",icon:"todo",features:[{icon:"todo",title:"Todo filters",description:"Separate active, finished, and cancelled work."},{icon:"subagents",title:"Live subagents",description:"See running, retrying, recent, and failed child sessions; open them directly."
3713
- },{icon:"info",title:"Provider limits",description:"Link a matching Codex account for model quotas and confirmed banked resets."
3714
- }]
3715
- },{title:"Find anything and launch Skills safely",summary:"Search complete source lists without expanding every sidebar section.",icon:"search",features:[{icon:"search",title:"Search Everything",description:"Search Skills, Subagents, MCP, and Actions in shared tabs."
3716
- },{icon:"search",title:"Full source lists",description:"Search beyond sidebar visibility and item limits."},{icon:"skills",title:"Skill confirmation",description:"Review a skill and its source before inserting its command."
3717
- }]
3718
- },{title:"Run actions and check language tools",summary:"Keep frequent OpenCode commands and LSP health within one compact section.",icon:"actions",features:[{icon:"actions",title:"Quick Actions",description:"Rename, inspect timelines, copy, export, or compact the session."
3719
- },{icon:"lsp",title:"Compact LSP status",description:"Spot connected and failed language servers at a glance."
3720
- },{icon:"settings",title:"Configurable commands",description:"Choose action visibility, order, and shortcuts."
3721
- }]
3722
- },{title:"Control MCP without losing context",summary:"Manage individual servers or entire working sets directly from Navigator.",icon:"mcp",features:[{icon:"mcp",title:"Live server controls",description:"Connect, disconnect, filter, and favorite servers."},{icon:"actions",title:"Bulk operations",description:"Change eligible servers together and retry failures."
3723
- },{icon:"presets",title:"Safe presets",description:"Preview connections and disconnections before Apply."}]
3724
- },{title:"Make Navigator fit each workspace",summary:"Use the same controls with mouse or keyboard and keep only the context you need.",icon:"settings",features:[{icon:"sections",title:"Flexible layout",description:"Choose section visibility, order, expansion, and item limits."
3725
- },{icon:"presets",title:"Scoped presets",description:"Save layouts globally or for the current worktree."},{icon:"settings",title:"Accessible controls",description:"Change shortcuts or use Text fallback without a restart."
3726
- }]
3727
- }];
3728
-
3729
-
3730
-
3731
-
3732
-
3733
-
3734
-
3735
-
3736
-
3737
-
3738
- function OnboardingStep(props){const icons=useIcons()
3739
- const theme=()=>props.api.theme.current
3740
- return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` `),_el$4=_$createElement("text"),_el$5=_$createElement("box"),_el$6=_$createElement("text"),_el$7=_$createTextNode(`Toggle: `),_el$8=_$createTextNode(` \xB7 Focus: `),_el$9=_$createTextNode(` \xB7 Icons: `),_el$1=_$createElement("box")
3741
- _$insertNode(_el$,_el$2)
3742
- _$insertNode(_el$,_el$4)
3743
- _$insertNode(_el$,_el$5)
3744
- _$insertNode(_el$,_el$6)
3745
- _$insertNode(_el$,_el$1)
3746
- _$setProp(_el$,"gap",1)
3747
- _$insertNode(_el$2,_el$3)
3748
- _$insert(_el$2,()=>icons.icon(props.step.icon),_el$3)
3749
- _$insert(_el$2,()=>props.step.title,null)
3750
- _$setProp(_el$4,"wrapMode","word")
3751
- _$insert(_el$4,()=>props.step.summary)
3752
- _$setProp(_el$5,"border",["top","bottom"])
3753
- _$setProp(_el$5,"paddingTop",1)
3754
- _$setProp(_el$5,"paddingBottom",1)
3755
- _$setProp(_el$5,"gap",1)
3756
- _$insert(_el$5,_$createComponent(For4,{get each(){return props.step.features
3757
- },children:(feature)=>(()=>{var _el$14=_$createElement("box"),_el$15=_$createElement("text"),_el$16=_$createElement("text"),_el$17=_$createElement("b"),_el$18=_$createTextNode(` \xB7 `)
3758
- _$insertNode(_el$14,_el$15)
3759
- _$insertNode(_el$14,_el$16)
3760
- _$setProp(_el$14,"flexDirection","row")
3761
- _$setProp(_el$14,"gap",1)
3762
- _$setProp(_el$15,"flexShrink",0)
3763
- _$insert(_el$15,()=>icons.icon(feature.icon))
3764
- _$insertNode(_el$16,_el$17)
3765
- _$insertNode(_el$16,_el$18)
3766
- _$setProp(_el$16,"flexGrow",1)
3767
- _$setProp(_el$16,"minWidth",0)
3768
- _$setProp(_el$16,"wrapMode","word")
3769
- _$insert(_el$17,()=>feature.title)
3770
- _$insert(_el$16,()=>feature.description,null)
3771
- _$effect((_p$)=>{var _v$6=theme().accent,_v$7=theme().textMuted
3772
- _v$6!==_p$.e&&(_p$.e=_$setProp(_el$15,"fg",_v$6,_p$.e))
3773
- _v$7!==_p$.t&&(_p$.t=_$setProp(_el$16,"fg",_v$7,_p$.t))
3774
- return _p$
3775
- },{e:undefined,t:undefined
3776
- })
3777
- return _el$14
3778
- })()
3779
- }))
3780
- _$insertNode(_el$6,_el$7)
3781
- _$insertNode(_el$6,_el$8)
3782
- _$insertNode(_el$6,_el$9)
3783
- _$setProp(_el$6,"wrapMode","word")
3784
- _$insert(_el$6,()=>props.preferences.toggleKey(),_el$8)
3785
- _$insert(_el$6,()=>props.preferences.focusKey(),_el$9)
3786
- _$insert(_el$6,()=>icons.style()==="text"?"Text fallback":"Nerd Font",null)
3787
- _$setProp(_el$1,"flexDirection","row")
3788
- _$setProp(_el$1,"justifyContent","space-between")
3789
- _$insert(_el$1,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
3790
- props.onBack()
3791
- },get children(){var _el$10=_$createElement("text"),_el$11=_$createTextNode(` Back`)
3792
- _$insertNode(_el$10,_el$11)
3793
- _$insert(_el$10,()=>icons.icon("left"),_el$11)
3794
- _$effect((_$p)=>_$setProp(_el$10,"fg",theme().textMuted,_$p))
3795
- return _el$10
3796
- }}),null)
3797
- _$insert(_el$1,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,get backgroundColor(){return theme().primary
3798
- },onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
3799
- props.onAdvance()
3800
- },get children(){var _el$12=_$createElement("text"),_el$13=_$createTextNode(` `)
3801
- _$insertNode(_el$12,_el$13)
3802
- _$insert(_el$12,()=>props.final?"Configure sidebar":"Next",_el$13)
3803
- _$insert(_el$12,()=>icons.icon("right"),null)
3804
- _$effect((_$p)=>_$setProp(_el$12,"fg",theme().selectedListItemText,_$p))
3805
- return _el$12
3806
- }}),null)
3807
- _$effect((_p$)=>{var _v$=theme().accent,_v$2=TextAttributes10.BOLD,_v$3=theme().textMuted,_v$4=theme().borderSubtle,_v$5=theme().textMuted
3808
- _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
3809
- _v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"attributes",_v$2,_p$.t))
3810
- _v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
3811
- _v$4!==_p$.o&&(_p$.o=_$setProp(_el$5,"borderColor",_v$4,_p$.o))
3812
- _v$5!==_p$.i&&(_p$.i=_$setProp(_el$6,"fg",_v$5,_p$.i))
3813
- return _p$
3814
- },{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined
3815
- })
3816
- return _el$
3817
- })()
3818
- }
3819
-
3820
-
3821
-
3822
-
3823
-
3824
-
3825
-
3826
-
3827
-
3828
-
3829
- function SectionConfig(props){const icons=useIcons()
3830
- const theme=()=>props.api.theme.current
3831
- const sections=SECTION_DEFINITIONS.filter((section)=>supportsSidebarSection(props.api,section.name))
3832
- const finishIndex=sections.length
3833
- return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` Choose your sidebar sections`),_el$4=_$createElement("text"),_el$6=_$createElement("box")
3834
- _$insertNode(_el$,_el$2)
3835
- _$insertNode(_el$,_el$4)
3836
- _$insertNode(_el$,_el$6)
3837
- _$setProp(_el$,"gap",1)
3838
- _$insertNode(_el$2,_el$3)
3839
- _$insert(_el$2,()=>icons.icon("sections"),_el$3)
3840
- _$insertNode(_el$4,_$createTextNode(`Select what appears now. You can change visibility, order, limits, scope, and presets later with the gear button.`))
3841
- _$setProp(_el$4,"wrapMode","word")
3842
- _$insert(_el$,_$createComponent(For5,{each:sections,children:(section,index)=>_$createComponent(SelectionBox,{flexDirection:"row",gap:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>props.active===index())()?theme().backgroundElement:undefined
3843
- },onMouseOver:()=>props.onActive(index()),onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
3844
- props.preferences.toggleSection(section.name)
3845
- },get children(){return [(()=>{var _el$1=_$createElement("text")
3846
- _$setProp(_el$1,"flexShrink",0)
3847
- _$insert(_el$1,()=>icons.icon(props.preferences.sections()[section.name]?"checked":"unchecked"))
3848
- _$effect((_$p)=>_$setProp(_el$1,"fg",props.preferences.sections()[section.name]?theme().accent:theme().textMuted,_$p))
3849
- return _el$1
3850
- })(),(()=>{var _el$10=_$createElement("text"),_el$11=_$createTextNode(` `)
3851
- _$insertNode(_el$10,_el$11)
3852
- _$insert(_el$10,()=>icons.section(section.name),_el$11)
3853
- _$insert(_el$10,()=>section.label,null)
3854
- _$effect((_$p)=>_$setProp(_el$10,"fg",props.active===index()?theme().text:theme().textMuted,_$p))
3855
- return _el$10
3856
- })()]
3705
+ var Content=lazy3(async ()=>{const path=import.meta.url.includes("/dist/")?"./onboarding.js":"./first-run-wizard-content"
3706
+ const module=await import(path)
3707
+ return{default:module.FirstRunWizard
3857
3708
  }})
3858
- }),_el$6)
3859
- _$setProp(_el$6,"flexDirection","row")
3860
- _$setProp(_el$6,"justifyContent","space-between")
3861
- _$insert(_el$6,_$createComponent(SelectionBox,{paddingLeft:1,paddingRight:1,onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
3862
- props.onBack()
3863
- },get children(){var _el$7=_$createElement("text"),_el$8=_$createTextNode(` Back`)
3864
- _$insertNode(_el$7,_el$8)
3865
- _$insert(_el$7,()=>icons.icon("left"),_el$8)
3866
- _$effect((_$p)=>_$setProp(_el$7,"fg",theme().textMuted,_$p))
3867
- return _el$7
3868
- }}),null)
3869
- _$insert(_el$6,_$createComponent(SelectionBox,{paddingLeft:2,paddingRight:2,get backgroundColor(){return _$memo(()=>props.active===finishIndex)()?theme().primary:undefined
3870
- },onMouseOver:()=>props.onActive(finishIndex),onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
3871
- props.onFinish()
3872
- },get children(){var _el$9=_$createElement("text"),_el$0=_$createTextNode(` Finish`)
3873
- _$insertNode(_el$9,_el$0)
3874
- _$insert(_el$9,()=>icons.icon("done"),_el$0)
3875
- _$effect((_$p)=>_$setProp(_el$9,"fg",props.active===finishIndex?theme().selectedListItemText:theme().textMuted,_$p))
3876
- return _el$9
3877
- }}),null)
3878
- _$effect((_p$)=>{var _v$=theme().accent,_v$2=TextAttributes11.BOLD,_v$3=theme().textMuted
3879
- _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
3880
- _v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"attributes",_v$2,_p$.t))
3881
- _v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
3882
- return _p$
3883
- },{e:undefined,t:undefined,a:undefined
3884
- })
3709
+ function FirstRunWizard(props){return(()=>{var _el$=_$createElement("box")
3710
+ _$insert(_el$,_$createComponent(Suspense3,{get children(){return _$createComponent(Content,props)
3711
+ }}))
3885
3712
  return _el$
3886
3713
  })()
3887
3714
  }
3888
- function FirstRunWizard(props){const icons=useIcons()
3889
- const dialogs=useDialogs(props.api)
3890
- const [active,setActive]=createSignal14(0)
3891
- const [step,setStep]=createSignal14(0)
3892
- const theme=()=>props.api.theme.current
3893
- const sections=SECTION_DEFINITIONS.filter((section)=>supportsSidebarSection(props.api,section.name))
3894
- const finishIndex=sections.length
3895
- const stepCount=ONBOARDING_STEPS.length + 1
3896
- const configuring=()=>step()===ONBOARDING_STEPS.length
3897
- function finish(){dialogs.back()
3898
- }
3899
- function move(offset){if(configuring())
3900
- setActive((value)=>(value + offset + finishIndex + 1)%(finishIndex + 1))
3901
- else
3902
- setStep((value)=>Math.max(0,Math.min(ONBOARDING_STEPS.length,value + offset)))
3903
- }
3904
- function back(){setStep((value)=>Math.max(0,value-1))
3905
- }
3906
- function advance(){if(!configuring())
3907
- setStep((value)=>Math.min(ONBOARDING_STEPS.length,value + 1))
3908
- }
3909
- function select(){if(!configuring()){advance()
3910
- return
3911
- }
3912
- const index=active()
3913
- if(index===finishIndex)
3914
- finish()
3915
- else
3916
- props.preferences.toggleSection(sections[index].name)
3917
- }
3918
- const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,commands:[{name:`${PLUGIN_ID}.wizard.previous`,run(){move(-1)
3919
- }},{name:`${PLUGIN_ID}.wizard.next`,run(){move(1)
3920
- }},{name:`${PLUGIN_ID}.wizard.select`,run:select
3921
- },{name:`${PLUGIN_ID}.wizard.back`,run:back
3922
- },{name:`${PLUGIN_ID}.wizard.forward`,run:advance
3923
- }],bindings:[{key:"up",cmd:`${PLUGIN_ID}.wizard.previous`
3924
- },{key:"down",cmd:`${PLUGIN_ID}.wizard.next`
3925
- },{key:"tab",cmd:`${PLUGIN_ID}.wizard.next`
3926
- },{key:"left",cmd:`${PLUGIN_ID}.wizard.back`
3927
- },{key:"right",cmd:`${PLUGIN_ID}.wizard.forward`
3928
- },{key:"space",cmd:`${PLUGIN_ID}.wizard.select`
3929
- },{key:"return",cmd:`${PLUGIN_ID}.wizard.select`
3930
- }]
3931
- })
3932
- onCleanup11(unregister)
3933
- return _$createComponent(DialogSurface,{get api(){return props.api
3934
- },get children(){return [(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` Navigator setup`),_el$4=_$createElement("text"),_el$5=_$createTextNode(`Step `),_el$6=_$createTextNode(`/`),_el$7=_$createTextNode(` \xB7 `)
3935
- _$insertNode(_el$,_el$2)
3936
- _$insertNode(_el$,_el$4)
3937
- _$setProp(_el$,"flexDirection","row")
3938
- _$setProp(_el$,"justifyContent","space-between")
3939
- _$insertNode(_el$2,_el$3)
3940
- _$insert(_el$2,()=>icons.icon("help"),_el$3)
3941
- _$insertNode(_el$4,_el$5)
3942
- _$insertNode(_el$4,_el$6)
3943
- _$insertNode(_el$4,_el$7)
3944
- _$setProp(_el$4,"onMouseDown",(event)=>event.stopPropagation())
3945
- _$setProp(_el$4,"onMouseUp",(event)=>{event.stopPropagation()
3946
- finish()
3947
- })
3948
- _$insert(_el$4,()=>step() + 1,_el$6)
3949
- _$insert(_el$4,stepCount,_el$7)
3950
- _$insert(_el$4,()=>icons.key("esc"),null)
3951
- _$effect((_p$)=>{var _v$=TextAttributes12.BOLD,_v$2=theme().text,_v$3=theme().textMuted
3952
- _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"attributes",_v$,_p$.e))
3953
- _v$2!==_p$.t&&(_p$.t=_$setProp(_el$2,"fg",_v$2,_p$.t))
3954
- _v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
3955
- return _p$
3956
- },{e:undefined,t:undefined,a:undefined
3957
- })
3958
- return _el$
3959
- })(),_$createComponent(Show5,{get when(){return configuring()
3960
- },get fallback(){return _$createComponent(OnboardingStep,{get api(){return props.api
3961
- },get preferences(){return props.preferences
3962
- },get step(){return ONBOARDING_STEPS[step()]
3963
- },get final(){return step()===ONBOARDING_STEPS.length-1
3964
- },onBack:back,onAdvance:advance
3965
- })
3966
- },get children(){return _$createComponent(SectionConfig,{get api(){return props.api
3967
- },get preferences(){return props.preferences
3968
- },get active(){return active()
3969
- },onActive:setActive,onBack:back,onFinish:finish
3970
- })
3971
- }})]
3972
- }})
3973
- }
3974
3715
  function openFirstRunWizard(api,preferences){createDialogStack(api,preferences.lspIconStyle,()=>true,preferences.cornerFont).open(()=>_$createComponent(FirstRunWizard,{api,preferences
3975
3716
  }))
3976
3717
  }
@@ -4013,7 +3754,7 @@ _$insertNode(_el$,_el$6)
4013
3754
  _$setProp(_el$,"flexDirection","row")
4014
3755
  _$setProp(_el$,"justifyContent","space-between")
4015
3756
  _$setProp(_el$2,"flexGrow",1)
4016
- _$insert(_el$2,_$createComponent(Show6,{get when(){return props.onRefresh
3757
+ _$insert(_el$2,_$createComponent(Show5,{get when(){return props.onRefresh
4017
3758
  },get children(){var _el$3=_$createElement("text"),_el$4=_$createTextNode(` Refresh (`),_el$5=_$createTextNode(`)`)
4018
3759
  _$insertNode(_el$3,_el$4)
4019
3760
  _$insertNode(_el$3,_el$5)
@@ -4056,7 +3797,7 @@ return(()=>{var _el$=_$createElement("box")
4056
3797
  _$setProp(_el$,"flexDirection","row")
4057
3798
  _$setProp(_el$,"flexWrap","wrap")
4058
3799
  _$setProp(_el$,"gap",1)
4059
- _$insert(_el$,_$createComponent(For6,{get each(){return props.stats
3800
+ _$insert(_el$,_$createComponent(For4,{get each(){return props.stats
4060
3801
  },children:(stat)=>_$createComponent(SelectionBox,{height:1,get backgroundColor(){return theme().backgroundElement
4061
3802
  },paddingLeft:1,paddingRight:1,get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
4062
3803
  _$insertNode(_el$2,_el$3)
@@ -4076,7 +3817,7 @@ const dialogs=useDialogs(props.api)
4076
3817
  const theme=()=>props.api.theme.current
4077
3818
  const dimensions=useTerminalDimensions6()
4078
3819
  const scroll=useDialogScroll()
4079
- const [active,setActive]=createSignal15("apply")
3820
+ const [active,setActive]=createSignal14("apply")
4080
3821
  let body
4081
3822
  const prefix=`${PLUGIN_ID}.preset-preview`
4082
3823
  function activate(action){if(!props.valid()){dialogs.close()
@@ -4105,7 +3846,7 @@ const unregister=props.api.keymap.registerLayer({mode:"modal",priority:1000,comm
4105
3846
  },{key:"ctrl+r",cmd:`${prefix}.refresh`
4106
3847
  }]
4107
3848
  })
4108
- onCleanup12(unregister)
3849
+ onCleanup11(unregister)
4109
3850
  createEffect9(()=>{if(!props.valid())
4110
3851
  dialogs.close()
4111
3852
  })
@@ -4147,7 +3888,7 @@ _$setProp(_el$6,"gap",1)
4147
3888
  _$insert(_el$6,()=>props.children)
4148
3889
  _$effect((_$p)=>_$setProp(_el$5,"height",Math.min(Math.max(2,Math.floor(dimensions().height*0.75)-14),Math.max(1,props.rowCount*3-1)),_$p))
4149
3890
  return _el$5
4150
- })(),_$createComponent(Show7,{get when(){return props.blocked||props.notice
3891
+ })(),_$createComponent(Show6,{get when(){return props.blocked||props.notice
4151
3892
  },get children(){var _el$7=_$createElement("box"),_el$8=_$createElement("text"),_el$9=_$createElement("text")
4152
3893
  _$insertNode(_el$7,_el$8)
4153
3894
  _$insertNode(_el$7,_el$9)
@@ -4213,7 +3954,7 @@ _$insertNode(_el$4,_el$5)
4213
3954
  _$setProp(_el$4,"flexShrink",0)
4214
3955
  _$insert(_el$4,()=>icons.icon(props.statusIcon),_el$5)
4215
3956
  _$insert(_el$4,()=>props.statusLabel,null)
4216
- _$effect((_p$)=>{var _v$=statusColor(),_v$2=emphasized()?theme().text:theme().textMuted,_v$3=emphasized()?TextAttributes13.BOLD:undefined,_v$4=statusColor(),_v$5=emphasized()?TextAttributes13.BOLD:undefined
3957
+ _$effect((_p$)=>{var _v$=statusColor(),_v$2=emphasized()?theme().text:theme().textMuted,_v$3=emphasized()?TextAttributes10.BOLD:undefined,_v$4=statusColor(),_v$5=emphasized()?TextAttributes10.BOLD:undefined
4217
3958
  _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
4218
3959
  _v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
4219
3960
  _v$3!==_p$.a&&(_p$.a=_$setProp(_el$3,"attributes",_v$3,_p$.a))
@@ -4259,7 +4000,7 @@ if(!request)
4259
4000
  return
4260
4001
  dialogs.close()
4261
4002
  reportMcpApplyError(props.api,request)
4262
- },get children(){return _$createComponent(For7,{get each(){return rows()
4003
+ },get children(){return _$createComponent(For5,{get each(){return rows()
4263
4004
  },children:(row)=>_$createComponent(PresetPreviewRow,_$mergeProps({get api(){return props.api
4264
4005
  }},row))
4265
4006
  })
@@ -4359,12 +4100,12 @@ dialogs.open(()=>_$createComponent(SelectionMenu,{api,title:"MCP presets",get op
4359
4100
 
4360
4101
 
4361
4102
 
4362
- var Content=lazy3(async ()=>{const path=import.meta.url.includes("/dist/")?"./sidebar-settings.js":"./settings-dialog-content"
4103
+ var Content2=lazy4(async ()=>{const path=import.meta.url.includes("/dist/")?"./sidebar-settings.js":"./settings-dialog-content"
4363
4104
  const module=await import(path)
4364
4105
  return{default:module.SettingsDialog
4365
4106
  }})
4366
4107
  function SettingsDialog(props){return(()=>{var _el$=_$createElement("box")
4367
- _$insert(_el$,_$createComponent(Suspense3,{get children(){return _$createComponent(Content,props)
4108
+ _$insert(_el$,_$createComponent(Suspense4,{get children(){return _$createComponent(Content2,props)
4368
4109
  }}))
4369
4110
  return _el$
4370
4111
  })()
@@ -4399,7 +4140,7 @@ function SettingsBinding(props){const unregister=props.api.keymap.registerLayer(
4399
4140
  },cmd:`${PLUGIN_ID}.settings`
4400
4141
  }]
4401
4142
  })
4402
- onCleanup14(unregister)
4143
+ onCleanup13(unregister)
4403
4144
  return _$createElement("box")
4404
4145
  }
4405
4146
 
@@ -4427,14 +4168,14 @@ observed=current
4427
4168
  props.preferences.setAutoApprovePermissions(current)
4428
4169
  })
4429
4170
  if(unsubscribe)
4430
- onCleanup15(unsubscribe)
4171
+ onCleanup14(unsubscribe)
4431
4172
  return _$createElement("box")
4432
4173
  }
4433
4174
 
4434
4175
 
4435
4176
 
4436
4177
  function SettingsFooterButton(props){const icons=useIcons()
4437
- const [hovered,setHovered]=createSignal16(false)
4178
+ const [hovered,setHovered]=createSignal15(false)
4438
4179
  const theme=()=>props.api.theme.current
4439
4180
  return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon(){return icons.icon("settings")
4440
4181
  },get foregroundColor(){return _$memo(()=>!!hovered())()?theme().text:theme().textMuted
@@ -4446,7 +4187,7 @@ return _$createComponent(IconControl,{id:`${PLUGIN_ID}.settings.footer`,get icon
4446
4187
 
4447
4188
 
4448
4189
  var services=new WeakMap
4449
- function createSlot(){const [read,write]=createSignal17()
4190
+ function createSlot(){const [read,write]=createSignal16()
4450
4191
  return{read,write}}
4451
4192
  function slot(api){let entry=services.get(api)
4452
4193
  if(!entry){entry=createSlot()
@@ -4476,7 +4217,7 @@ var CANCEL_COMMAND=`${PLUGIN_ID}.sidebar-shortcuts.cancel`
4476
4217
  var MODE=`${PLUGIN_ID}.sidebar-shortcuts`
4477
4218
  var DEFAULT_TIMEOUT_MS=5000
4478
4219
  function createSidebarShortcutMode(api,options={}){const actions=sidebarShortcutActions(api)
4479
- const [active,setActive]=createSignal18(false)
4220
+ const [active,setActive]=createSignal17(false)
4480
4221
  const timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS
4481
4222
  let shortcutKey=""
4482
4223
  let unregisterBinding
@@ -4526,7 +4267,7 @@ unregisterBinding=undefined
4526
4267
  unregisterCommands()
4527
4268
  }}}
4528
4269
 
4529
- var SidebarShortcutHint=lazy4(()=>{const path=import.meta.url.includes("/dist/tui.js")?"./sidebar-shortcuts.js":"../../../sidebar-shortcuts"
4270
+ var SidebarShortcutHint=lazy5(()=>{const path=import.meta.url.includes("/dist/tui.js")?"./sidebar-shortcuts.js":"../../../sidebar-shortcuts"
4530
4271
  return import(path)
4531
4272
  });
4532
4273
 
@@ -4616,17 +4357,17 @@ function StartupSessionBinding(props){if(props.api.keymap.on){const unregister=p
4616
4357
  return
4617
4358
  queueMicrotask(()=>void props.controller.start())
4618
4359
  })
4619
- onCleanup16(unregister)
4360
+ onCleanup15(unregister)
4620
4361
  } else
4621
4362
  createEffect13(()=>{if(!props.controller.enabled())
4622
4363
  return
4623
4364
  const unregister=props.api.keymap.registerLayer({mode:"global",priority:2001,commands:[{name:"session.new",title:"New session",category:"Session",namespace:"palette",enabled:props.controller.enabled,run:()=>void props.controller.start()
4624
4365
  }]
4625
4366
  })
4626
- onCleanup16(unregister)
4367
+ onCleanup15(unregister)
4627
4368
  })
4628
4369
  onMount5(()=>void props.controller.initialize())
4629
- onCleanup16(props.controller.dispose)
4370
+ onCleanup15(props.controller.dispose)
4630
4371
  return _$createElement("box")
4631
4372
  }
4632
4373
 
@@ -4655,7 +4396,7 @@ if(entries.length===0||disposed)
4655
4396
  return
4656
4397
  show()
4657
4398
  } catch{}})
4658
- onCleanup17(()=>{disposed=true
4399
+ onCleanup16(()=>{disposed=true
4659
4400
  clearTimeout(pending)
4660
4401
  })
4661
4402
  return _$createElement("box")
@@ -4786,9 +4527,9 @@ return false
4786
4527
  return true
4787
4528
  }
4788
4529
  function createSidebarInteraction(api,showHelp=()=>openKeyboardHelp(api)){const descriptors=new Map
4789
- const [selectedId,setSelectedId]=createSignal21()
4790
- const [focusWithin,setFocusWithin]=createSignal21(false)
4791
- const [revision,setRevision]=createSignal21(0)
4530
+ const [selectedId,setSelectedId]=createSignal20()
4531
+ const [focusWithin,setFocusWithin]=createSignal20(false)
4532
+ const [revision,setRevision]=createSignal20(0)
4792
4533
  let titleRoot
4793
4534
  let contentRoot
4794
4535
  let targetedRoot
@@ -5057,14 +4798,14 @@ else if(highlighted)
5057
4798
  foregroundColor=theme.selectedListItemText
5058
4799
  return{backgroundColor,foregroundColor}}
5059
4800
  function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
5060
- const [hovered,setHovered]=createSignal22(false)
4801
+ const [hovered,setHovered]=createSignal21(false)
5061
4802
  const disabled=()=>descriptor.disabled?.()===true
5062
4803
  const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
5063
4804
  const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
5064
4805
  const ref=(renderable)=>{unregister?.()
5065
4806
  unregister=interaction?.register({...descriptor,renderable})
5066
4807
  }
5067
- onCleanup19(()=>unregister?.())
4808
+ onCleanup18(()=>unregister?.())
5068
4809
  return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
5069
4810
  },activate(event){if(interaction)
5070
4811
  return interaction.mouseActivate(descriptor.id,event)
@@ -5075,7 +4816,7 @@ return true
5075
4816
  }}}
5076
4817
  function LspBadge(props){const icons=useIcons()
5077
4818
  const isKnown=lspIconName(props.id)!==undefined
5078
- const [showName,setShowName]=createSignal23(false)
4819
+ const [showName,setShowName]=createSignal22(false)
5079
4820
  const statusColor=()=>props.status==="connected"?props.api.theme.current.success:props.api.theme.current.error
5080
4821
  if(!isKnown){return(()=>{var _el$=_$createElement("text")
5081
4822
  _$setProp(_el$,"flexShrink",1)
@@ -5100,7 +4841,7 @@ _$setProp(_el$2,"flexShrink",0)
5100
4841
  _$insert(_el$2,()=>lspIcon(props.id,props.iconStyle??icons.style()))
5101
4842
  _$effect((_$p)=>_$setProp(_el$2,"fg",item.foregroundColor(),_$p))
5102
4843
  return _el$2
5103
- })(),_$createComponent(Show11,{get when(){return showName()
4844
+ })(),_$createComponent(Show10,{get when(){return showName()
5104
4845
  },get children(){var _el$3=_$createElement("text")
5105
4846
  _$setProp(_el$3,"flexShrink",0)
5106
4847
  _$setProp(_el$3,"wrapMode","none")
@@ -5118,7 +4859,7 @@ return _el$3
5118
4859
 
5119
4860
 
5120
4861
 
5121
- function createListVisibility(options){const [expanded,setExpanded]=createSignal24(false)
4862
+ function createListVisibility(options){const [expanded,setExpanded]=createSignal23(false)
5122
4863
  let previousKey
5123
4864
  let previousLimit
5124
4865
  const canToggle=createMemo8(()=>options.limit()>0&&options.items().length>options.limit())
@@ -5155,7 +4896,7 @@ else
5155
4896
  props.visibility.showAll()
5156
4897
  queueMicrotask(()=>props.interaction?.select(id))
5157
4898
  }})
5158
- return _$createComponent(Show12,{get when(){return props.visibility.canToggle()
4899
+ return _$createComponent(Show11,{get when(){return props.visibility.canToggle()
5159
4900
  },get children(){return _$createComponent(SelectionBox,{ref(r$){var _ref$=item.ref
5160
4901
  typeof _ref$==="function"?_ref$(r$):item.ref=r$
5161
4902
  },id,paddingLeft:1,paddingRight:1,get backgroundColor(){return item.backgroundColor()
@@ -5205,7 +4946,7 @@ result += segment
5205
4946
  }
5206
4947
  return result + ellipsis
5207
4948
  }
5208
- function SectionHeaderControl(props){const [width,setWidth]=createSignal25()
4949
+ function SectionHeaderControl(props){const [width,setWidth]=createSignal24()
5209
4950
  const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
5210
4951
  },()=>props.api.theme.current.accent,"control")
5211
4952
  createEffect14(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
@@ -5230,7 +4971,7 @@ return _el$
5230
4971
  }})
5231
4972
  }
5232
4973
  function Section(props){const icons=useIcons()
5233
- const [headerWidth,setHeaderWidth]=createSignal26(0)
4974
+ const [headerWidth,setHeaderWidth]=createSignal25(0)
5234
4975
  const icon=()=>props.section?icons.section(props.section):props.icon
5235
4976
  const theme=()=>props.api.theme.current
5236
4977
  const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
@@ -5272,7 +5013,7 @@ _$setProp(_el$7,"flexGrow",1)
5272
5013
  _$setProp(_el$7,"minWidth",0)
5273
5014
  _$setProp(_el$7,"justifyContent","flex-end")
5274
5015
  _$insert(_el$7,()=>props.headerControls,null)
5275
- _$insert(_el$7,_$createComponent(Show13,{get when(){return props.headerAction
5016
+ _$insert(_el$7,_$createComponent(Show12,{get when(){return props.headerAction
5276
5017
  },children:(action)=>_$createComponent(SectionHeaderControl,{get api(){return props.api
5277
5018
  },get interaction(){return props.interaction
5278
5019
  },get action(){return action()
@@ -5280,7 +5021,7 @@ _$insert(_el$7,_$createComponent(Show13,{get when(){return props.headerAction
5280
5021
  },get position(){return{section:props.navigationSection??0,row:0,column:1
5281
5022
  }}})
5282
5023
  }),null)
5283
- _$insert(_el$7,_$createComponent(Show13,{get when(){return props.summary
5024
+ _$insert(_el$7,_$createComponent(Show12,{get when(){return props.summary
5284
5025
  },get children(){var _el$8=_$createElement("text")
5285
5026
  _$setProp(_el$8,"wrapMode","none")
5286
5027
  _$setProp(_el$8,"truncate",true)
@@ -5297,7 +5038,7 @@ return _el$8
5297
5038
  return _el$7
5298
5039
  })()]
5299
5040
  }}),null)
5300
- _$insert(_el$,_$createComponent(Show13,{get when(){return props.open
5041
+ _$insert(_el$,_$createComponent(Show12,{get when(){return props.open
5301
5042
  },get children(){return props.children
5302
5043
  }}),null)
5303
5044
  return _el$
@@ -5315,7 +5056,7 @@ return _$createComponent(Section,{get api(){return props.api
5315
5056
  },sectionId:`${PLUGIN_ID}.section.lsp`,get navigationSection(){return navigationSection()
5316
5057
  },title:"LSP",section:"lsp",get summary(){return `${connected()}/${list().length}`
5317
5058
  },get open(){return props.preferences.expanded().lsp
5318
- },onToggle:()=>props.preferences.toggleSectionExpanded("lsp"),get children(){return [_$createComponent(Show14,{get when(){return list().length>0
5059
+ },onToggle:()=>props.preferences.toggleSectionExpanded("lsp"),get children(){return [_$createComponent(Show13,{get when(){return list().length>0
5319
5060
  },get fallback(){return(()=>{var _el$2=_$createElement("text")
5320
5061
  _$insert(_el$2,()=>disabled()?"LSP is disabled":"Activates as files are read")
5321
5062
  _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
@@ -5327,7 +5068,7 @@ _$setProp(_el$,"flexWrap","wrap")
5327
5068
  _$setProp(_el$,"gap",1)
5328
5069
  _$setProp(_el$,"paddingLeft",1)
5329
5070
  _$setProp(_el$,"paddingRight",1)
5330
- _$insert(_el$,_$createComponent(For12,{get each(){return visibility.visible()
5071
+ _$insert(_el$,_$createComponent(For10,{get each(){return visibility.visible()
5331
5072
  },children:(item,index)=>_$createComponent(LspBadge,{get api(){return props.api
5332
5073
  },get interaction(){return props.interaction
5333
5074
  },get id(){return item.id
@@ -5440,7 +5181,7 @@ _$insert(_el$,_$createComponent(McpBulkAction,{get api(){return props.api
5440
5181
  }),null)
5441
5182
  _$effect((_$p)=>_$setProp(_el$,"paddingBottom",model.bulkRunning()||model.bulk().status==="error"?1:0,_$p))
5442
5183
  return _el$
5443
- })(),_$createComponent(Show15,{get when(){return model.bulkRunning()
5184
+ })(),_$createComponent(Show14,{get when(){return model.bulkRunning()
5444
5185
  },get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` `),_el$4=_$createTextNode(`/`),_el$5=_$createTextNode(`\u2026`)
5445
5186
  _$insertNode(_el$2,_el$3)
5446
5187
  _$insertNode(_el$2,_el$4)
@@ -5450,7 +5191,7 @@ _$insert(_el$2,()=>model.bulk().completed,_el$4)
5450
5191
  _$insert(_el$2,()=>model.bulk().total,_el$5)
5451
5192
  _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
5452
5193
  return _el$2
5453
- }}),_$createComponent(Show15,{get when(){return model.bulk().status==="error"
5194
+ }}),_$createComponent(Show14,{get when(){return model.bulk().status==="error"
5454
5195
  },get children(){return _$createComponent(McpBulkAction,{get api(){return props.api
5455
5196
  },get interaction(){return props.interaction
5456
5197
  },id:`${PLUGIN_ID}.mcp.retry-all`,get position(){return{section:props.navigationSection,row:3,column:0
@@ -5530,7 +5271,7 @@ return _el$4
5530
5271
  function RequestErrorRow(props){const icons=useIcons()
5531
5272
  const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>!props.state.error?.retryable||props.state.status==="loading"||props.state.status==="refreshing",activate:props.onRetry
5532
5273
  })
5533
- return _$createComponent(Show16,{get when(){return props.state.error
5274
+ return _$createComponent(Show15,{get when(){return props.state.error
5534
5275
  },children:(error)=>_$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
5535
5276
  },flexDirection:"row",gap:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return item.backgroundColor()
5536
5277
  },get onMouseOver(){return item.onMouseOver
@@ -5545,7 +5286,7 @@ _$insert(_el$,()=>icons.icon("error"),_el$2)
5545
5286
  _$insert(_el$,()=>error().message,null)
5546
5287
  _$effect((_$p)=>_$setProp(_el$,"fg",item.focused()?item.foregroundColor():props.api.theme.current.error,_$p))
5547
5288
  return _el$
5548
- })(),_$createComponent(Show16,{get when(){return error().retryable
5289
+ })(),_$createComponent(Show15,{get when(){return error().retryable
5549
5290
  },get children(){var _el$3=_$createElement("text"),_el$4=_$createTextNode(` Retry`)
5550
5291
  _$insertNode(_el$3,_el$4)
5551
5292
  _$setProp(_el$3,"flexShrink",0)
@@ -5560,7 +5301,7 @@ function SectionRequestBody(props){const icons=useIcons()
5560
5301
  const pending=()=>props.state.status==="loading"
5561
5302
  return(()=>{var _el$5=_$createElement("box")
5562
5303
  _$insert(_el$5,_$createComponent(RequestErrorRow,props),null)
5563
- _$insert(_el$5,_$createComponent(Show16,{get when(){return _$memo(()=>!!pending())()&&!props.hasItems
5304
+ _$insert(_el$5,_$createComponent(Show15,{get when(){return _$memo(()=>!!pending())()&&!props.hasItems
5564
5305
  },get children(){var _el$6=_$createElement("text"),_el$7=_$createTextNode(` `)
5565
5306
  _$insertNode(_el$6,_el$7)
5566
5307
  _$insert(_el$6,()=>icons.icon("pending"),_el$7)
@@ -5568,10 +5309,10 @@ _$insert(_el$6,()=>props.loading,null)
5568
5309
  _$effect((_$p)=>_$setProp(_el$6,"fg",props.api.theme.current.textMuted,_$p))
5569
5310
  return _el$6
5570
5311
  }}),null)
5571
- _$insert(_el$5,_$createComponent(Show16,{get when(){return props.hasItems
5312
+ _$insert(_el$5,_$createComponent(Show15,{get when(){return props.hasItems
5572
5313
  },get children(){return props.children
5573
5314
  }}),null)
5574
- _$insert(_el$5,_$createComponent(Show16,{get when(){return _$memo(()=>!!((props.state.status==="ready"||props.state.status==="refreshing")&&!props.hasItems))()&&!props.state.error
5315
+ _$insert(_el$5,_$createComponent(Show15,{get when(){return _$memo(()=>!!((props.state.status==="ready"||props.state.status==="refreshing")&&!props.hasItems))()&&!props.state.error
5575
5316
  },get children(){var _el$8=_$createElement("text"),_el$9=_$createTextNode(` `)
5576
5317
  _$insertNode(_el$8,_el$9)
5577
5318
  _$insert(_el$8,()=>icons.icon("info"),_el$9)
@@ -5588,8 +5329,8 @@ return _el$5
5588
5329
  function createSidebarBookmark(input){const{api,interaction,row,position,favorite,disabled,onToggle
5589
5330
  }=input
5590
5331
  const id=`${input.id}.favorite`
5591
- const [rowHovered,setRowHovered]=createSignal27(false)
5592
- const [controlHovered,setControlHovered]=createSignal27(false)
5332
+ const [rowHovered,setRowHovered]=createSignal26(false)
5333
+ const [controlHovered,setControlHovered]=createSignal26(false)
5593
5334
  const control=useSidebarItem(api,interaction,{id,position:()=>({...position(),column:0
5594
5335
  }),disabled,activate:()=>{onToggle()
5595
5336
  queueMicrotask(()=>interaction?.select(id))
@@ -5705,7 +5446,7 @@ return _el$2
5705
5446
  function SectionFilter(props){const icons=useIcons()
5706
5447
  let input
5707
5448
  let unregisterInput
5708
- const [inputFocused,setInputFocused]=createSignal28(false)
5449
+ const [inputFocused,setInputFocused]=createSignal27(false)
5709
5450
  const theme=()=>props.api.theme.current
5710
5451
  const item=useSidebarItem(props.api,props.interaction,{id:props.id??`filter.${props.placeholder}`,position:()=>props.position??{section:0,row:0,column:0
5711
5452
  },activate:()=>{if(!input)
@@ -5726,7 +5467,7 @@ props.interaction.leaveFilter(input)
5726
5467
  else
5727
5468
  input?.blur()
5728
5469
  }
5729
- onCleanup20(()=>unregisterInput?.())
5470
+ onCleanup19(()=>unregisterInput?.())
5730
5471
  return _$createComponent(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
5731
5472
  },flexDirection:"row",gap:1,marginTop:1,marginBottom:1,paddingLeft:1,paddingRight:1,get backgroundColor(){return _$memo(()=>!!highlighted())()?theme().primary:item.backgroundColor()
5732
5473
  },get onMouseOver(){return item.onMouseOver
@@ -5764,7 +5505,7 @@ return _p$
5764
5505
  },{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined,s:undefined,h:undefined
5765
5506
  })
5766
5507
  return _el$2
5767
- })(),_$createComponent(Show17,{get when(){return props.query
5508
+ })(),_$createComponent(Show16,{get when(){return props.query
5768
5509
  },get children(){var _el$3=_$createElement("text")
5769
5510
  _$setProp(_el$3,"flexShrink",0)
5770
5511
  _$setProp(_el$3,"onMouseDown",()=>props.onInput(""))
@@ -5793,7 +5534,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
5793
5534
  }},get query(){return props.query
5794
5535
  },placeholder:"Filter MCP...",get onInput(){return props.onQuery
5795
5536
  }}),null)
5796
- _$insert(_el$,_$createComponent(Show18,{get when(){return model.filtered().length>0
5537
+ _$insert(_el$,_$createComponent(Show17,{get when(){return model.filtered().length>0
5797
5538
  },get fallback(){return(()=>{var _el$2=_$createElement("text")
5798
5539
  _$insertNode(_el$2,_$createTextNode(`No matching MCP servers`))
5799
5540
  _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
@@ -5803,8 +5544,8 @@ return _el$2
5803
5544
  },get interaction(){return props.interaction
5804
5545
  },get grouped(){return model.grouped
5805
5546
  },get density(){return props.preferences.rowDensity?.()??"compact"
5806
- },get children(){return _$createComponent(For13,{get each(){return model.visibility.visible()
5807
- },children:(item,index)=>[_$createComponent(Show18,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
5547
+ },get children(){return _$createComponent(For11,{get each(){return model.visibility.visible()
5548
+ },children:(item,index)=>[_$createComponent(Show17,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
5808
5549
  },get children(){return _$createComponent(McpGroupHeader,{get api(){return props.api
5809
5550
  },get interaction(){return props.interaction
5810
5551
  },get bucket(){return item.bucket
@@ -5835,7 +5576,7 @@ return _el$
5835
5576
  }})
5836
5577
  }
5837
5578
  function McpSection(props){const icons=useIcons()
5838
- const [query,setQuery]=createSignal29("")
5579
+ const [query,setQuery]=createSignal28("")
5839
5580
  const model=createMcpSectionModel(props,query)
5840
5581
  const navigationSection=()=>props.navigationSection??6
5841
5582
  const summary=createMemo11(()=>`${model.active()}/${model.list().length}${model.errors() ? ` \xB7 ${model.errors()} ${icons.icon("error")}` : ""}`)
@@ -5975,7 +5716,7 @@ function QuickActionRow(props){const{api,interaction
5975
5716
  const icons=useIcons()
5976
5717
  const toolbar=useToolbar()
5977
5718
  const theme=()=>api.theme.current
5978
- const [width,setWidth]=createSignal34(0)
5719
+ const [width,setWidth]=createSignal33(0)
5979
5720
  const shortcut=createMemo12(()=>{const bindings=api.keymap.getCommandBindings({visibility:"registered",commands:[props.action.command]
5980
5721
  })
5981
5722
  return api.keys.formatBindings(bindings.get(props.action.command))
@@ -6019,7 +5760,7 @@ _$insert(_el$2,()=>props.action.label)
6019
5760
  _$effect((_$p)=>_$setProp(_el$2,"fg",row.foregroundColor(),_$p))
6020
5761
  return _el$2
6021
5762
  })()
6022
- },get metadata(){return _$createComponent(Show25,{get when(){return visibleShortcut()
5763
+ },get metadata(){return _$createComponent(Show24,{get when(){return visibleShortcut()
6023
5764
  },children:(value)=>(()=>{var _el$3=_$createElement("text")
6024
5765
  _$setProp(_el$3,"flexShrink",0)
6025
5766
  _$setProp(_el$3,"wrapMode","none")
@@ -6028,12 +5769,12 @@ _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme()
6028
5769
  return _el$3
6029
5770
  })()
6030
5771
  })
6031
- },get trailing(){return _$createComponent(Show25,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
5772
+ },get trailing(){return _$createComponent(Show24,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
6032
5773
  },get position(){return props.position
6033
5774
  },get pin(){return{kind:"action",id:props.action.command,icon:"bolt"
6034
5775
  }}})
6035
5776
  }})
6036
- },get details(){return _$createComponent(Show25,{get when(){return props.disabled
5777
+ },get details(){return _$createComponent(Show24,{get when(){return props.disabled
6037
5778
  },children:(reason)=>(()=>{var _el$4=_$createElement("text")
6038
5779
  _$setProp(_el$4,"wrapMode","word")
6039
5780
  _$insert(_el$4,reason)
@@ -6061,12 +5802,12 @@ return _$createComponent(Section,{get api(){return props.api
6061
5802
  },onToggle:()=>props.preferences.toggleSectionExpanded("quick_actions"),get children(){return [_$createComponent(SidebarRowList,{get api(){return props.api
6062
5803
  },get interaction(){return props.interaction
6063
5804
  },get density(){return props.preferences.rowDensity?.()??"compact"
6064
- },get children(){return [_$createComponent(Show26,{get when(){return actions().length===0
5805
+ },get children(){return [_$createComponent(Show25,{get when(){return actions().length===0
6065
5806
  },get children(){var _el$=_$createElement("text")
6066
5807
  _$insertNode(_el$,_$createTextNode(`No quick actions selected`))
6067
5808
  _$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
6068
5809
  return _el$
6069
- }}),_$createComponent(For16,{get each(){return visibility.visible().map((action)=>action.command)
5810
+ }}),_$createComponent(For14,{get each(){return visibility.visible().map((action)=>action.command)
6070
5811
  },children:(id,index)=>_$createComponent(QuickActionRow,{get onNewSession(){return props.onNewSession
6071
5812
  },get action(){return visibility.visible()[index()]
6072
5813
  },get disabled(){return visibility.visible()[index()].disabled
@@ -6134,15 +5875,15 @@ untrack6(()=>shortcuts.bind(key))
6134
5875
  createEffect16(()=>{if(shortcuts.active()&&(props.api.route.current.name!=="session"||props.api.ui.dialog.open||props.api.mode.current()==="modal"))
6135
5876
  untrack6(shortcuts.cancel)
6136
5877
  })
6137
- onCleanup21(shortcuts.dispose)
5878
+ onCleanup20(shortcuts.dispose)
6138
5879
  return(()=>{var _el$=_$createElement("box")
6139
5880
  _$setProp(_el$,"position","absolute")
6140
5881
  _$setProp(_el$,"top",0)
6141
5882
  _$setProp(_el$,"left",0)
6142
5883
  _$setProp(_el$,"width","100%")
6143
5884
  _$setProp(_el$,"height","100%")
6144
- _$insert(_el$,_$createComponent(Show27,{get when(){return shortcuts.active()
6145
- },get children(){return _$createComponent(Suspense4,{get children(){return _$createComponent(SidebarShortcutHint,{get api(){return props.api
5885
+ _$insert(_el$,_$createComponent(Show26,{get when(){return shortcuts.active()
5886
+ },get children(){return _$createComponent(Suspense5,{get children(){return _$createComponent(SidebarShortcutHint,{get api(){return props.api
6146
5887
  },get actions(){return shortcuts.actions
6147
5888
  }})
6148
5889
  }})
@@ -6156,11 +5897,11 @@ const unregisterCommands=props.api.keymap.registerLayer({commands:[...commands,.
6156
5897
  })=>({name:name.replace(PLUGIN_ID,()=>LEGACY_PLUGIN_ID),run,enabled
6157
5898
  }))]
6158
5899
  })
6159
- onCleanup21(unregisterCommands)
5900
+ onCleanup20(unregisterCommands)
6160
5901
  createEffect16(()=>{const unregister=props.api.keymap.registerLayer({bindings:[{key:props.preferences.focusKey(),cmd:FOCUS_COMMAND
6161
5902
  }]
6162
5903
  })
6163
- onCleanup21(unregister)
5904
+ onCleanup20(unregister)
6164
5905
  })
6165
5906
  return _$createElement("box")
6166
5907
  }
@@ -6226,7 +5967,7 @@ createEffect17(()=>{if(!needsSkills())
6226
5967
  return
6227
5968
  const current=target()
6228
5969
  const release=untrack7(()=>props.skills.activate(current))
6229
- onCleanup22(release)
5970
+ onCleanup21(release)
6230
5971
  untrack7(()=>{props.skills.refresh(current).catch(()=>{})
6231
5972
  })
6232
5973
  })
@@ -6272,14 +6013,14 @@ return{pins,view,run,width:toolbarPinWidth}}
6272
6013
 
6273
6014
  function ToolbarButton(props){const icons=useIcons()
6274
6015
  const foreground=()=>props.reason?props.api.theme.current.textMuted:item.foregroundColor()
6275
- const [hovered,setHovered]=createSignal35(false)
6016
+ const [hovered,setHovered]=createSignal34(false)
6276
6017
  const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>({section:0,row:props.row + 1,column:props.column
6277
6018
  }),activate:props.onRun
6278
6019
  },()=>props.reason?props.api.theme.current.textMuted:props.api.theme.current.accent,"control")
6279
6020
  const content=()=>[props.icons.map((icon)=>terminalIcon(icon,icons.style())).join(" "),props.text].filter(Boolean).join(" ")
6280
6021
  createEffect18(()=>props.onDetails(props.id,item.focused()||hovered()))
6281
- onCleanup23(()=>props.onDetails(props.id,false))
6282
- return _$createComponent(Show28,{get when(){return _$memo(()=>!!(props.width===3&&props.icons.length===1))()&&!props.text
6022
+ onCleanup22(()=>props.onDetails(props.id,false))
6023
+ return _$createComponent(Show27,{get when(){return _$memo(()=>!!(props.width===3&&props.icons.length===1))()&&!props.text
6283
6024
  },get fallback(){return _$createComponent(SelectionBox,{get id(){return props.id
6284
6025
  },ref(r$){var _ref$2=item.ref
6285
6026
  typeof _ref$2==="function"?_ref$2(r$):item.ref=r$
@@ -6319,8 +6060,8 @@ setHovered(false)
6319
6060
  }
6320
6061
  function SidebarToolbar(props){const model=createToolbarModel(props)
6321
6062
  const icons=useIcons()
6322
- const [width,setWidth]=createSignal36(3)
6323
- const [detail,setDetail]=createSignal36()
6063
+ const [width,setWidth]=createSignal35(3)
6064
+ const [detail,setDetail]=createSignal35()
6324
6065
  const keys=createMemo15(()=>model.pins().map((pin)=>toolbarPinKey(pin)))
6325
6066
  const widths=createMemo15(()=>new Map(model.pins().map((pin)=>[toolbarPinKey(pin),model.width(pin)])))
6326
6067
  const layout=createMemo15(()=>toolbarLayout(keys(),width(),props.preferences.toolbarOverflow?.()??"menu",widths()))
@@ -6348,17 +6089,17 @@ dialogs.close()
6348
6089
  model.run(option.value)
6349
6090
  }}))
6350
6091
  }
6351
- return _$createComponent(Show29,{get when(){return keys().length>0
6092
+ return _$createComponent(Show28,{get when(){return keys().length>0
6352
6093
  },get children(){var _el$=_$createElement("box")
6353
6094
  _$setProp(_el$,"id","opencode-navigator.toolbar")
6354
6095
  _$setProp(_el$,"overflow","visible")
6355
6096
  _$setProp(_el$,"onSizeChange",function(){setWidth(this.width)
6356
6097
  })
6357
- _$insert(_el$,_$createComponent(For17,{get each(){return rows()
6098
+ _$insert(_el$,_$createComponent(For15,{get each(){return rows()
6358
6099
  },children:(row)=>(()=>{var _el$2=_$createElement("box")
6359
6100
  _$setProp(_el$2,"flexDirection","row")
6360
6101
  _$setProp(_el$2,"gap",1)
6361
- _$insert(_el$2,_$createComponent(For17,{get each(){return layout().rows[row]
6102
+ _$insert(_el$2,_$createComponent(For15,{get each(){return layout().rows[row]
6362
6103
  },children:(key,column)=>_$createComponent(ToolbarButton,_$mergeProps(props,{id:`opencode-navigator.toolbar.${key}`,row,get column(){return column()
6363
6104
  },get label(){return view(key)?.label??"More"
6364
6105
  },get icons(){return key==="toolbar:more"?["list"]:view(key)?.icons??["bolt"]
@@ -6371,7 +6112,7 @@ _$insert(_el$2,_$createComponent(For17,{get each(){return layout().rows[row]
6371
6112
  return _el$2
6372
6113
  })()
6373
6114
  }),null)
6374
- _$insert(_el$,_$createComponent(Show29,{get when(){return details()
6115
+ _$insert(_el$,_$createComponent(Show28,{get when(){return details()
6375
6116
  },children:(text)=>(()=>{var _el$3=_$createElement("text")
6376
6117
  _$setProp(_el$3,"position","absolute")
6377
6118
  _$setProp(_el$3,"left",0)
@@ -6413,7 +6154,7 @@ const visibility=createListVisibility({items:filtered,limit:()=>props.preference
6413
6154
  const state=createMemo16(()=>props.controller.state(target()))
6414
6155
  createEffect19(()=>{const current=target()
6415
6156
  const deactivate=untrack8(()=>props.controller.activate?.(current)??(()=>{}))
6416
- onCleanup24(deactivate)
6157
+ onCleanup23(deactivate)
6417
6158
  untrack8(()=>void props.controller.refresh(current).catch(()=>{}))
6418
6159
  })
6419
6160
  async function useSkill(item){try{const isInserted=await props.controller.use(target(),item.name)
@@ -6465,7 +6206,7 @@ _$insert(_el$,()=>props.item.name,null)
6465
6206
  _$effect((_$p)=>_$setProp(_el$,"fg",row.foregroundColor(),_$p))
6466
6207
  return _el$
6467
6208
  })()
6468
- },get trailing(){return _$createComponent(Show30,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
6209
+ },get trailing(){return _$createComponent(Show29,{when:toolbar,get children(){return _$createComponent(SidebarPinControl,{get id(){return id()
6469
6210
  },get position(){return props.position
6470
6211
  },get pin(){return{kind:"skill",name:props.item.name,location:props.item.location,icon:"book"
6471
6212
  }}})
@@ -6474,7 +6215,7 @@ return _el$
6474
6215
  }
6475
6216
  function SkillsSection(props){const dialogs=useDialogs(props.api)
6476
6217
  const toolbar=useToolbar()
6477
- const [query,setQuery]=createSignal37("")
6218
+ const [query,setQuery]=createSignal36("")
6478
6219
  const model=createSkillSectionModel(props,query)
6479
6220
  const navigationSection=()=>props.navigationSection??3
6480
6221
  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"
@@ -6498,7 +6239,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
6498
6239
  }},get query(){return query()
6499
6240
  },placeholder:"Filter skills...",onInput:setQuery
6500
6241
  }),null)
6501
- _$insert(_el$,_$createComponent(Show31,{get when(){return model.filtered().length>0
6242
+ _$insert(_el$,_$createComponent(Show30,{get when(){return model.filtered().length>0
6502
6243
  },get fallback(){return(()=>{var _el$2=_$createElement("text")
6503
6244
  _$insertNode(_el$2,_$createTextNode(`No matching skills`))
6504
6245
  _$effect((_$p)=>_$setProp(_el$2,"fg",props.api.theme.current.textMuted,_$p))
@@ -6508,8 +6249,8 @@ return _el$2
6508
6249
  },get interaction(){return props.interaction
6509
6250
  },get grouped(){return model.grouped
6510
6251
  },get density(){return props.preferences.rowDensity?.()??"compact"
6511
- },get children(){return _$createComponent(For18,{get each(){return model.visibility.visible()
6512
- },children:(item,index)=>[_$createComponent(Show31,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
6252
+ },get children(){return _$createComponent(For16,{get each(){return model.visibility.visible()
6253
+ },children:(item,index)=>[_$createComponent(Show30,{get when(){return _$memo(()=>!!model.grouped())()&&(index()===0||model.visibility.visible()[index()-1]?.bucket!==item.bucket)
6513
6254
  },get children(){var _el$4=_$createElement("text")
6514
6255
  _$setProp(_el$4,"height",1)
6515
6256
  _$setProp(_el$4,"wrapMode","none")
@@ -6554,8 +6295,8 @@ return _el$
6554
6295
  function createSubagentSectionModel(props){const list=createMemo17(()=>props.controller.list(props.sessionID))
6555
6296
  const recent=createMemo17(()=>props.controller.recent?.(props.sessionID)??[])
6556
6297
  const rows=createMemo17(()=>buildSubagentView(list(),recent()))
6557
- const [query,setQuery]=createSignal38("")
6558
- const [mode,setMode]=createSignal38("all")
6298
+ const [query,setQuery]=createSignal37("")
6299
+ const [mode,setMode]=createSignal37("all")
6559
6300
  const counts=createMemo17(()=>countSubagentView(rows(),query()))
6560
6301
  const tabs=createMemo17(()=>["all","active","recent",...counts().errors>0?["errors"]:[]])
6561
6302
  const filtered=createMemo17(()=>filterSubagentView(rows(),mode(),query()))
@@ -6578,7 +6319,7 @@ const state=createMemo17(()=>props.controller.state(props.sessionID))
6578
6319
  createEffect20(()=>{const sessionID=props.sessionID
6579
6320
  targetKey()
6580
6321
  const deactivate=untrack9(()=>props.controller.activate?.(sessionID)??(()=>{}))
6581
- onCleanup25(deactivate)
6322
+ onCleanup24(deactivate)
6582
6323
  untrack9(()=>void props.controller.refresh(sessionID).catch(()=>{}))
6583
6324
  })
6584
6325
  return{list,recent,rows,query,setQuery,mode,setMode,counts,tabs,filtered,parentID,visibility,now,byId,ids,state
@@ -6636,7 +6377,7 @@ return()=>_c$()?`${props.item.run.startedBeforeObservation ? `${icons.icon("rece
6636
6377
  _$effect((_$p)=>_$setProp(_el$3,"fg",row.focused()?row.foregroundColor():theme().textMuted,_$p))
6637
6378
  return _el$3
6638
6379
  })()
6639
- },get details(){return [_$createComponent(Show32,{get when(){return props.item.run?.errorMessage
6380
+ },get details(){return [_$createComponent(Show31,{get when(){return props.item.run?.errorMessage
6640
6381
  },get children(){var _el$4=_$createElement("text"),_el$5=_$createTextNode(`: `)
6641
6382
  _$insertNode(_el$4,_el$5)
6642
6383
  _$setProp(_el$4,"wrapMode","word")
@@ -6644,12 +6385,12 @@ _$insert(_el$4,()=>cancelled()?"Cancelled":"Error",_el$5)
6644
6385
  _$insert(_el$4,()=>props.item.run?.errorMessage,null)
6645
6386
  _$effect((_$p)=>_$setProp(_el$4,"fg",row.focused()?row.foregroundColor():failed()?theme().error:theme().textMuted,_$p))
6646
6387
  return _el$4
6647
- }}),_$createComponent(Show32,{get when(){return props.item.unavailable
6388
+ }}),_$createComponent(Show31,{get when(){return props.item.unavailable
6648
6389
  },get children(){var _el$6=_$createElement("text")
6649
6390
  _$insertNode(_el$6,_$createTextNode(`Worker status unavailable`))
6650
6391
  _$effect((_$p)=>_$setProp(_el$6,"fg",theme().warning,_$p))
6651
6392
  return _el$6
6652
- }}),_$createComponent(Show32,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
6393
+ }}),_$createComponent(Show31,{get when(){return _$memo(()=>props.item.status.type==="retry")()?props.item.status:undefined
6653
6394
  },children:(status)=>(()=>{var _el$0=_$createElement("text"),_el$1=_$createTextNode(`Retry #`),_el$10=_$createTextNode(` \xB7 `),_el$11=_$createTextNode(`s \xB7 `)
6654
6395
  _$insertNode(_el$0,_el$1)
6655
6396
  _$insertNode(_el$0,_el$10)
@@ -6661,7 +6402,7 @@ _$insert(_el$0,()=>status().message,null)
6661
6402
  _$effect((_$p)=>_$setProp(_el$0,"fg",row.focused()?row.foregroundColor():theme().warning,_$p))
6662
6403
  return _el$0
6663
6404
  })()
6664
- }),_$createComponent(Show32,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
6405
+ }),_$createComponent(Show31,{get when(){return _$memo(()=>!!idle())()&&!props.item.run?.errorMessage
6665
6406
  },get children(){var _el$8=_$createElement("text")
6666
6407
  _$insertNode(_el$8,_$createTextNode(`Finished`))
6667
6408
  _$effect((_$p)=>_$setProp(_el$8,"fg",theme().textMuted,_$p))
@@ -6672,12 +6413,12 @@ return _el$8
6672
6413
  function SubagentList(props){return _$createComponent(SidebarRowList,{get api(){return props.api
6673
6414
  },get interaction(){return props.interaction
6674
6415
  },get density(){return props.density
6675
- },get children(){return _$createComponent(For19,{get each(){return props.ids
6416
+ },get children(){return _$createComponent(For17,{get each(){return props.ids
6676
6417
  },children:(id,index)=>{const initial=props.itemById(id)
6677
6418
  const item=()=>props.itemById(id)??initial
6678
6419
  const startsGroup=()=>index()===0||props.visible[index()-1]?.group!==item().group
6679
6420
  return(()=>{var _el$=_$createElement("box")
6680
- _$insert(_el$,_$createComponent(Show33,{get when(){return startsGroup()
6421
+ _$insert(_el$,_$createComponent(Show32,{get when(){return startsGroup()
6681
6422
  },get children(){var _el$2=_$createElement("text"),_el$3=_$createElement("b")
6682
6423
  _$insertNode(_el$2,_el$3)
6683
6424
  _$insert(_el$3,()=>item().group)
@@ -6703,7 +6444,7 @@ return _$createComponent(Section,{get api(){return props.api
6703
6444
  },sectionId:`${PLUGIN_ID}.section.subagents`,get navigationSection(){return navigationSection()
6704
6445
  },title:"SUBAGENTS",section:"subagents",get summary(){return `${model.list().length} active \xB7 ${model.recent().length} recent`
6705
6446
  },get open(){return props.preferences.expanded().subagents
6706
- },onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(Show34,{get when(){return model.parentID()
6447
+ },onToggle:()=>props.preferences.toggleSectionExpanded("subagents"),get children(){return [_$createComponent(Show33,{get when(){return model.parentID()
6707
6448
  },children:(id)=>_$createComponent(McpBulkAction,{get api(){return props.api
6708
6449
  },get interaction(){return props.interaction
6709
6450
  },id:`${PLUGIN_ID}.subagents.parent`,get position(){return{section:navigationSection(),row:1,column:0
@@ -6726,7 +6467,7 @@ _$insert(_el$,_$createComponent(SectionFilter,{get api(){return props.api
6726
6467
  }}),_el$2)
6727
6468
  _$setProp(_el$2,"flexDirection","row")
6728
6469
  _$setProp(_el$2,"flexWrap","wrap")
6729
- _$insert(_el$2,_$createComponent(For20,{get each(){return model.tabs()
6470
+ _$insert(_el$2,_$createComponent(For18,{get each(){return model.tabs()
6730
6471
  },children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
6731
6472
  },get interaction(){return props.interaction
6732
6473
  },id:`${PLUGIN_ID}.subagents.filter.${value}`,get position(){return{section:navigationSection(),row:4,column:index()
@@ -6737,7 +6478,7 @@ _$insert(_el$2,_$createComponent(For20,{get each(){return model.tabs()
6737
6478
  },onActivate:()=>model.setMode(value)
6738
6479
  })
6739
6480
  }))
6740
- _$insert(_el$,_$createComponent(Show34,{get when(){return model.filtered().length===0
6481
+ _$insert(_el$,_$createComponent(Show33,{get when(){return model.filtered().length===0
6741
6482
  },get children(){var _el$3=_$createElement("text")
6742
6483
  _$insertNode(_el$3,_$createTextNode(`No matching subagents`))
6743
6484
  _$effect((_$p)=>_$setProp(_el$3,"fg",props.api.theme.current.textMuted,_$p))
@@ -6778,13 +6519,36 @@ return _el$
6778
6519
 
6779
6520
 
6780
6521
 
6522
+
6523
+
6781
6524
  function NativeTodoNotice(props){const icons=useIcons()
6782
- return(()=>{var _el$=_$createElement("text"),_el$2=_$createTextNode(` Native OpenCode Todo. Edit tasks through chat and todowrite.`)
6525
+ const state=()=>props.setup?.state(props.sessionID)
6526
+ const failed=()=>state()?.status==="error"
6527
+ const disabled=()=>state()?.enabled===false
6528
+ const message=()=>{if(failed())
6529
+ return state()?.error
6530
+ if(state()?.status==="loading"&&state()?.enabled===undefined)
6531
+ return "Checking native Todo configuration\u2026"
6532
+ if(disabled())
6533
+ return "Native OpenCode Todo is disabled. Enable it to let the built-in todowrite tool manage tasks."
6534
+ return "Native OpenCode Todo. Edit tasks through chat and todowrite."
6535
+ }
6536
+ return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createTextNode(` `)
6783
6537
  _$insertNode(_el$,_el$2)
6784
- _$setProp(_el$,"wrapMode","word")
6785
- _$insert(_el$,()=>icons.icon("info"),_el$2)
6786
- _$insert(_el$,()=>props.empty?" OpenCode 2.1 enables the tool through experimental.todo.":"",null)
6787
- _$effect((_$p)=>_$setProp(_el$,"fg",props.api.theme.current.textMuted,_$p))
6538
+ _$insertNode(_el$2,_el$3)
6539
+ _$setProp(_el$2,"wrapMode","word")
6540
+ _$insert(_el$2,()=>icons.icon("info"),_el$3)
6541
+ _$insert(_el$2,message,null)
6542
+ _$insert(_el$,_$createComponent(Show34,{get when(){return _$memo(()=>!!props.setup)()&&(disabled()||failed())
6543
+ },get children(){return _$createComponent(SectionTab,{get api(){return props.api
6544
+ },get interaction(){return props.interaction
6545
+ },id:"opencode-navigator.todo.setup",get position(){return{section:props.navigationSection,row:2,column:0
6546
+ }},get label(){return failed()?"Retry Todo configuration":"Enable Todo\u2026"
6547
+ },selected:false,get disabled(){return state()?.status==="saving"
6548
+ },onActivate:()=>failed()?void props.setup?.refresh(props.sessionID):props.setup?.configure(props.sessionID)
6549
+ })
6550
+ }}),null)
6551
+ _$effect((_$p)=>_$setProp(_el$2,"fg",failed()?props.api.theme.current.warning:props.api.theme.current.textMuted,_$p))
6788
6552
  return _el$
6789
6553
  })()
6790
6554
  }
@@ -6848,7 +6612,7 @@ _$insert(_el$5,priorityLabel,null)
6848
6612
  _$effect((_$p)=>_$setProp(_el$4,"fg",priorityColor(),_$p))
6849
6613
  return _el$4
6850
6614
  }}),null)
6851
- _$effect((_p$)=>{var _v$=active()?theme().warning:done()?theme().success:cancelled()?theme().error:theme().textMuted,_v$2=active()?theme().primary:theme().textMuted,_v$3=done()?TextAttributes18.STRIKETHROUGH:active()?TextAttributes18.BOLD:undefined
6615
+ _$effect((_p$)=>{var _v$=active()?theme().warning:done()?theme().success:cancelled()?theme().error:theme().textMuted,_v$2=active()?theme().primary:theme().textMuted,_v$3=done()?TextAttributes15.STRIKETHROUGH:active()?TextAttributes15.BOLD:undefined
6852
6616
  _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
6853
6617
  _v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"fg",_v$2,_p$.t))
6854
6618
  _v$3!==_p$.a&&(_p$.a=_$setProp(_el$3,"attributes",_v$3,_p$.a))
@@ -6859,13 +6623,13 @@ return _el$
6859
6623
  })()
6860
6624
  }
6861
6625
  function TodoContents(props){const navigationSection=()=>props.navigationSection??1
6862
- const tabsRow=()=>props.managed?3:2
6626
+ const tabsRow=()=>(props.managed?3:2) + (props.navigationOffset??0)
6863
6627
  return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box")
6864
6628
  _$insertNode(_el$,_el$2)
6865
6629
  _$setProp(_el$,"gap",1)
6866
6630
  _$setProp(_el$2,"flexDirection","row")
6867
6631
  _$setProp(_el$2,"flexWrap","wrap")
6868
- _$insert(_el$2,_$createComponent(For21,{each:["all","active","finished"],children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
6632
+ _$insert(_el$2,_$createComponent(For19,{each:["all","active","finished"],children:(value,index)=>_$createComponent(SectionTab,{get api(){return props.api
6869
6633
  },get interaction(){return props.interaction
6870
6634
  },id:`${PLUGIN_ID}.todo.filter.${value}`,get position(){return{section:navigationSection(),row:tabsRow(),column:index()
6871
6635
  }},get label(){return value[0].toUpperCase() + value.slice(1)
@@ -6881,7 +6645,7 @@ _$insert(_el$,_$createComponent(Show36,{get when(){return props.view.rows.length
6881
6645
  },get children(){return _$createComponent(SidebarRowList,{get api(){return props.api
6882
6646
  },get interaction(){return props.interaction
6883
6647
  },get density(){return props.density
6884
- },get children(){return _$createComponent(For21,{get each(){return props.visibility.visible()
6648
+ },get children(){return _$createComponent(For19,{get each(){return props.visibility.visible()
6885
6649
  },children:(row,index)=>{const startsGroup=()=>index()===0||props.visibility.visible()[index()-1].group!==row.group
6886
6650
  return(()=>{var _el$3=_$createElement("box")
6887
6651
  _$insert(_el$3,_$createComponent(Show36,{get when(){return startsGroup()
@@ -6947,7 +6711,9 @@ const icons=useIcons()
6947
6711
  const unavailable=()=>hostCapabilityUnavailable(props.api,"todo")
6948
6712
  const managed=()=>("guidance" in props.controller)?props.controller:undefined
6949
6713
  const native=()=>("source" in props.controller)&&props.controller.source==="native"
6950
- const [mode,setMode]=createSignal39("all")
6714
+ const setup=()=>("setup" in props.controller)?props.controller.setup:undefined
6715
+ const setupState=()=>setup()?.state(props.sessionID)
6716
+ const [mode,setMode]=createSignal38("all")
6951
6717
  const targetKey=createMemo18(()=>props.controller.target?.(props.sessionID).key??props.sessionID)
6952
6718
  createEffect21(()=>{targetKey()
6953
6719
  setMode("all")
@@ -6961,8 +6727,9 @@ targetKey()
6961
6727
  if(unavailable())
6962
6728
  return
6963
6729
  const deactivate=untrack10(()=>props.controller.activate?.(sessionID)??(()=>{}))
6964
- onCleanup26(deactivate)
6730
+ onCleanup25(deactivate)
6965
6731
  untrack10(()=>void props.controller.refresh(sessionID).catch(()=>{}))
6732
+ untrack10(()=>void setup()?.refresh(sessionID).catch(()=>{}))
6966
6733
  })
6967
6734
  const navigationSection=()=>props.navigationSection??1
6968
6735
  return _$createComponent(Section,{get api(){return props.api
@@ -6970,6 +6737,7 @@ return _$createComponent(Section,{get api(){return props.api
6970
6737
  },sectionId:`${PLUGIN_ID}.section.todo`,get navigationSection(){return navigationSection()
6971
6738
  },title:"TODO",section:"todo",get summary(){return _$memo(()=>!!(unavailable()||managed()?.missing(props.sessionID)))()?"\u2014":`${view().counts.completed}/${list().length}`
6972
6739
  },get headerAction(){return native()?{id:`${PLUGIN_ID}.todo.refresh`,label:()=>`${icons.icon("retry")} Refresh`,disabled:()=>state().status==="loading"||state().status==="refreshing",onActivate:()=>{props.controller.refresh(props.sessionID).catch(()=>{})
6740
+ setup()?.refresh(props.sessionID).catch(()=>{})
6973
6741
  }}:undefined
6974
6742
  },get open(){return props.preferences.expanded().todo
6975
6743
  },onToggle:()=>props.preferences.toggleSectionExpanded("todo"),get children(){return _$createComponent(Show38,{get when(){return unavailable()
@@ -6977,7 +6745,10 @@ return _$createComponent(Section,{get api(){return props.api
6977
6745
  _$setProp(_el$,"gap",1)
6978
6746
  _$insert(_el$,_$createComponent(Show38,{get when(){return native()
6979
6747
  },get children(){return _$createComponent(NativeTodoNotice,{get api(){return props.api
6980
- },get empty(){return list().length===0
6748
+ },get setup(){return setup()
6749
+ },get sessionID(){return props.sessionID
6750
+ },get interaction(){return props.interaction
6751
+ },get navigationSection(){return navigationSection()
6981
6752
  }})
6982
6753
  }}),null)
6983
6754
  _$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.guidance(props.sessionID).available
@@ -7001,6 +6772,7 @@ _$insert(_el$,_$createComponent(Show38,{get when(){return managed()?.missing(pro
7001
6772
  },setMode,get view(){return view()
7002
6773
  },visibility,get density(){return props.preferences.rowDensity?.()??"compact"
7003
6774
  },get managed(){return Boolean(managed())
6775
+ },get navigationOffset(){return setupState()?.enabled===false||setupState()?.status==="error"?1:0
7004
6776
  }})
7005
6777
  }})
7006
6778
  },get children(){var _el$2=_$createElement("text"),_el$3=_$createTextNode(` Navigator Todo needs a separate OpenCode 2 server plugin. See the README setup steps and restart OpenCode.`)
@@ -7025,7 +6797,7 @@ return _el$4
7025
6797
  }
7026
6798
  function SidebarContent(props){const sections=props.preferences.sections
7027
6799
  const visibleSections=createMemo19(()=>props.preferences.sectionOrder().filter((section)=>sections()[section]&&supportsSidebarSection(props.api,section)))
7028
- onCleanup27(()=>props.interaction.setContentRoot(undefined))
6800
+ onCleanup26(()=>props.interaction.setContentRoot(undefined))
7029
6801
  return _$createComponent(ToolbarProvider,{get api(){return props.api
7030
6802
  },get preferences(){return props.preferences
7031
6803
  },get skills(){return props.skills
@@ -7041,7 +6813,7 @@ event.stopPropagation()
7041
6813
  props.interaction.leave()
7042
6814
  })
7043
6815
  _$insert(_el$,_$createComponent(SidebarToolbar,props),null)
7044
- _$insert(_el$,_$createComponent(For22,{get each(){return visibleSections()
6816
+ _$insert(_el$,_$createComponent(For20,{get each(){return visibleSections()
7045
6817
  },children:(section,index)=>_$createComponent(SectionBoundary,{get api(){return props.api
7046
6818
  },get divided(){return index()<visibleSections().length-1
7047
6819
  },get children(){return _$createComponent(Switch,{get children(){return [_$createComponent(Match,{when:section==="limits",get children(){return props.limitsSection(index() + 1)
@@ -7085,7 +6857,7 @@ const params="params" in route?route.params:undefined
7085
6857
  if(typeof params?.sessionID!=="string")
7086
6858
  return
7087
6859
  const current=props.controller.target()
7088
- onCleanup28(()=>props.controller.deactivate(current))
6860
+ onCleanup27(()=>props.controller.deactivate(current))
7089
6861
  untrack11(()=>void props.controller.activate(current).catch(()=>{}))
7090
6862
  })
7091
6863
  return _$createElement("box")
@@ -7125,7 +6897,7 @@ const settingsId=`${PLUGIN_ID}.settings`
7125
6897
  const settings=useSidebarItem(props.api,props.interaction,{id:settingsId,position:{section:0,row:0,column:0
7126
6898
  },activate:()=>openSettings(props.api,props.preferences,undefined,props.mcp,props.skills)
7127
6899
  },()=>theme().textMuted,"control")
7128
- onCleanup29(()=>props.interaction.setTitleRoot(undefined))
6900
+ onCleanup28(()=>props.interaction.setTitleRoot(undefined))
7129
6901
  return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("box"),_el$3=_$createElement("box")
7130
6902
  _$insertNode(_el$,_el$2)
7131
6903
  _$use((node)=>props.interaction.setTitleRoot(node),_el$)
@@ -7210,15 +6982,15 @@ await options.accountSource.refresh(model)
7210
6982
  if(!disposed&&target===targetKey())
7211
6983
  await options.controller.refresh()
7212
6984
  }
7213
- createEffect23(on2(interval,(milliseconds)=>{onCleanup30(schedule(()=>void refresh().catch(()=>{}),milliseconds))
6985
+ createEffect23(on2(interval,(milliseconds)=>{onCleanup29(schedule(()=>void refresh().catch(()=>{}),milliseconds))
7214
6986
  }))
7215
- onCleanup30(()=>{disposed=true
6987
+ onCleanup29(()=>{disposed=true
7216
6988
  })
7217
6989
  }
7218
6990
  function LimitsPersistence(props){createLimitsRefresh(props)
7219
6991
  return _$createElement("box")
7220
6992
  }
7221
- function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.24.0",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()
6993
+ function bindNavigatorAbout(api,status,updates,notes){const dispose=registerNavigatorAboutServices(api,{navigatorVersion:"0.25.0",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()
7222
6994
  if(target)
7223
6995
  updates.navigator(target,dialogs)
7224
6996
  },changelog:async ()=>notes.parseChangelog(await notes.readBundledChangelog())
@@ -7354,7 +7126,7 @@ context.keymap.dispatch(command.id)
7354
7126
  context.renderer.keyInput.on("keypress",onKeypress)
7355
7127
  const keymap={registerLayer(layer){const id=++sequence
7356
7128
  const owner=getOwner()
7357
- const [active,setActive]=createSignal40(true)
7129
+ const [active,setActive]=createSignal39(true)
7358
7130
  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)
7359
7131
  }))
7360
7132
  }
@@ -7399,7 +7171,7 @@ cleanups.clear()
7399
7171
  context.renderer.keyInput.off("keypress",onKeypress)
7400
7172
  }}}
7401
7173
 
7402
- function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal41({})
7174
+ function createV2SessionAdapter(context){const [retryDetails,setRetryDetails]=createSignal40({})
7403
7175
  const projections=new WeakMap
7404
7176
  function normalize(info){const directory=info.location.directory
7405
7177
  const workspaceID=context.location?.directory===directory?context.location.workspaceID:undefined
@@ -7469,7 +7241,7 @@ function DialogPrompt(props){return _$createComponent(SingleLinePrompt,_$mergePr
7469
7241
  }},props))
7470
7242
  }
7471
7243
  function DialogConfirm(props){let active=true
7472
- onCleanup31(()=>{active=false
7244
+ onCleanup30(()=>{active=false
7473
7245
  })
7474
7246
  onMount7(async ()=>{const confirmed=await context.ui.dialog.confirm({title:props.title,message:props.message
7475
7247
  })
@@ -7534,7 +7306,7 @@ context.ui.router.navigate({type:"plugin",name,data:params})
7534
7306
  },attention:context.attention,lifecycle:{signal:controller.signal,onDispose},slots:createV2Slots(context,(dispose)=>{onDispose(dispose)
7535
7307
  })
7536
7308
  }
7537
- setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false,permissionMode:false,commandsReachableOnly:true
7309
+ setHostCapabilities(api,{todo:true,lsp:false,titleVisibility:false,permissionMode:false,commandsReachableOnly:true,nativeTodo:true
7538
7310
  })
7539
7311
  bindToolbarActionState(context,api)
7540
7312
  return{api,async dispose(){controller.abort()
@@ -7675,11 +7447,15 @@ const subagents=createSubagentController(api,{source:nativeSources?.subagents
7675
7447
  })
7676
7448
  const skills=createSkillController(api,nativeSources?.skills)
7677
7449
  const preferences=createPreferencesController(api,config,createPreferencesStore(api.state.path.state),configured)
7450
+ if(hostContext){const setupPath=import.meta.url.includes("/dist/tui.js")?"./native-todo-setup.js":"../native-todo-setup"
7451
+ const setup=await import(setupPath)
7452
+ todo.setup=setup.createOpenCodeV2TodoSetup(hostContext,api,preferences,todo.target)
7453
+ }
7678
7454
  const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js":"../provider-limits"
7679
7455
  const limitsModule=await import(limitsPath)
7680
7456
  const LimitsSection=limitsModule.ProviderLimitsSection
7681
7457
  const{controller:limits,codex,accountSource,selectModel,modelSelection
7682
- }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.24.0",hostContext)
7458
+ }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.25.0",hostContext)
7683
7459
  const mcp=createMcpController(api,preferences.persistMcp,preferences,nativeSources?.mcp)
7684
7460
  const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont,sidebarShortcutActions(api)))
7685
7461
  const startup=createStartupSessionController(api,preferences)
@@ -7708,7 +7484,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
7708
7484
  },interaction,skills,subagents,mcp
7709
7485
  }),_$createComponent(FirstRunWizardPersistence,{api,preferences
7710
7486
  }),_$createComponent(StartupSessionBinding,{api,controller:startup
7711
- }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.24.0"
7487
+ }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.25.0"
7712
7488
  }),_$createComponent(McpPersistence,{api,controller:mcp
7713
7489
  })]
7714
7490
  }})
@@ -7742,13 +7518,13 @@ return result.data?.type==="text"?result.data.content:undefined
7742
7518
  const updateServices=await loadNavigatorUpdates()
7743
7519
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV1VersionUpdater
7744
7520
  }=updateServices
7745
- const versionStatus=createVersionStatus(api,"0.24.0")
7746
- const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.24.0"))
7521
+ const versionStatus=createVersionStatus(api,"0.25.0")
7522
+ const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.25.0"))
7747
7523
  bindNavigatorAbout(api,versionStatus,versionUpdates,updateServices)
7748
7524
  api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7749
7525
  },get multilineCorners(){return preferences.cornerFont
7750
7526
  },get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
7751
- },navigatorVersion:"0.24.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7527
+ },navigatorVersion:"0.25.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7752
7528
  },get onNavigatorUpdate(){return versionUpdates.navigator
7753
7529
  }})
7754
7530
  }})
@@ -7765,8 +7541,8 @@ return new TextDecoder().decode(await context.client.file.read({location:context
7765
7541
  const updateServices=await loadNavigatorUpdates()
7766
7542
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV2VersionUpdater
7767
7543
  }=updateServices
7768
- const versionStatus=createVersionStatus(adapter.api,"0.24.0")
7769
- const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.24.0"))
7544
+ const versionStatus=createVersionStatus(adapter.api,"0.25.0")
7545
+ const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.25.0"))
7770
7546
  bindNavigatorAbout(adapter.api,versionStatus,versionUpdates,updateServices)
7771
7547
  const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7772
7548
  },get multilineCorners(){return preferences.cornerFont
@@ -7774,7 +7550,7 @@ const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$create
7774
7550
  _$setProp(_el$,"flexDirection","row")
7775
7551
  _$setProp(_el$,"justifyContent","space-between")
7776
7552
  _$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
7777
- },navigatorVersion:"0.24.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7553
+ },navigatorVersion:"0.25.0",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7778
7554
  },get onNavigatorUpdate(){return versionUpdates.navigator
7779
7555
  }}),null)
7780
7556
  _$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api