opencode-navigator 0.21.6 → 0.21.7

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/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.21.7] - 2026-10-09
6
+
7
+ - Remove the vertical guide and its reserved gutter from Limits in both icon modes. Keep full-width quota scales, reset-left/remaining-right details, and one blank row between quota windows.
8
+
5
9
  ## [0.21.6] - 2026-10-09
6
10
 
7
11
  - Refine Limits with a continuous muted guide, full-width thin-line quota scales, and reset-left/remaining-right details. Keep long reset text from overlapping the remaining value and preserve Text fallback, resize clipping, and existing controls.
@@ -104,6 +108,7 @@
104
108
 
105
109
  Earlier release notes are available on [GitHub Releases](https://github.com/St1ggy/opencode-navigator/releases).
106
110
 
111
+ [0.21.7]: https://github.com/St1ggy/opencode-navigator/compare/v0.21.6...v0.21.7
107
112
  [0.21.6]: https://github.com/St1ggy/opencode-navigator/compare/v0.21.5...v0.21.6
108
113
  [0.21.5]: https://github.com/St1ggy/opencode-navigator/compare/v0.21.4...v0.21.5
109
114
  [0.21.4]: https://github.com/St1ggy/opencode-navigator/compare/v0.21.3...v0.21.4
package/README.md CHANGED
@@ -432,9 +432,9 @@ Codex account** and **Unlink Codex account** for the outdated manual association
432
432
  bindings are reused; conflicting bindings remain isolated until a deliberate relink.
433
433
 
434
434
  Limits starts with **[Provider name] Model name · variant**. Activate the model or
435
- variant with the mouse or keyboard to open OpenCode's native selector. A muted
436
- vertical guide joins the quota windows, with one guide-only row between them
437
- (`|` in Text fallback). Each window uses two compact rows: a full-width adaptive
435
+ variant with the mouse or keyboard to open OpenCode's native selector. Quota
436
+ windows have one blank row between them, without a vertical guide or gutter.
437
+ Each window uses two compact rows: a full-width adaptive
438
438
  thin-line scale, then muted reset time on the left and remaining headroom aligned
439
439
  to the right. The remaining value keeps its own space; long reset text is clipped.
440
440
  Both rows stay within the sidebar's padding when it resizes. Healthy views omit
@@ -549,41 +549,21 @@ return _p$
549
549
  return _el$
550
550
  })()
551
551
  }
552
- import {effect as _$effect3} from "@opentui/solid"
553
- import {insertNode as _$insertNode3} from "@opentui/solid"
554
- import {createComponent as _$createComponent4} from "@opentui/solid"
555
552
  import {insert as _$insert3} from "@opentui/solid"
553
+ import {createComponent as _$createComponent4} from "@opentui/solid"
556
554
  import {setProp as _$setProp3} from "@opentui/solid"
557
555
  import {createElement as _$createElement3} from "@opentui/solid"
558
556
  import {For} from "solid-js"
559
- import {useIcons as useIcons2} from "./tui.js"
560
- function QuotaWindowGroup(props){const icons=useIcons2()
561
- const guide=()=>Array.from({length:Math.max(0,props.windows.length*3-1)
562
- },()=>icons.style()==="text"?"|":"\u2502").join(`
563
- `)
564
- return(()=>{var _el$=_$createElement3("box"),_el$2=_$createElement3("text"),_el$3=_$createElement3("box")
565
- _$insertNode3(_el$,_el$2)
566
- _$insertNode3(_el$,_el$3)
557
+ function QuotaWindowGroup(props){return(()=>{var _el$=_$createElement3("box")
567
558
  _$setProp3(_el$,"width","100%")
568
559
  _$setProp3(_el$,"minWidth",0)
569
- _$setProp3(_el$,"flexDirection","row")
560
+ _$setProp3(_el$,"gap",1)
570
561
  _$setProp3(_el$,"overflow","hidden")
571
- _$setProp3(_el$2,"width",1)
572
- _$setProp3(_el$2,"marginRight",1)
573
- _$setProp3(_el$2,"flexShrink",0)
574
- _$setProp3(_el$2,"wrapMode","none")
575
- _$insert3(_el$2,guide)
576
- _$setProp3(_el$3,"width","100%")
577
- _$setProp3(_el$3,"flexGrow",1)
578
- _$setProp3(_el$3,"flexShrink",1)
579
- _$setProp3(_el$3,"minWidth",0)
580
- _$setProp3(_el$3,"gap",1)
581
- _$insert3(_el$3,_$createComponent4(For,{get each(){return props.windows
562
+ _$insert3(_el$,_$createComponent4(For,{get each(){return props.windows
582
563
  },children:(window)=>_$createComponent4(QuotaWindowRow,{get api(){return props.api
583
564
  },window
584
565
  })
585
566
  }))
586
- _$effect3((_$p)=>_$setProp3(_el$2,"fg",props.api.theme.current.textMuted,_$p))
587
567
  return _el$
588
568
  })()
589
569
  }
@@ -645,25 +625,25 @@ return found??{id,name:id,sources:[],reason:"No independent quota/balance API or
645
625
  import {insert as _$insert9} from "@opentui/solid"
646
626
  import {mergeProps as _$mergeProps} from "@opentui/solid"
647
627
  import {setProp as _$setProp10} from "@opentui/solid"
648
- import {effect as _$effect10} from "@opentui/solid"
628
+ import {effect as _$effect9} from "@opentui/solid"
649
629
  import {createTextNode as _$createTextNode4} from "@opentui/solid"
650
- import {insertNode as _$insertNode7} from "@opentui/solid"
630
+ import {insertNode as _$insertNode6} from "@opentui/solid"
651
631
  import {createElement as _$createElement10} from "@opentui/solid"
652
632
  import {memo as _$memo7} from "@opentui/solid"
653
633
  import {createComponent as _$createComponent13} from "@opentui/solid"
654
634
  import {Show as Show7} from "solid-js"
655
635
  import {useDialogs as useDialogs3} from "./tui.js"
656
636
  import {setProp as _$setProp5} from "@opentui/solid"
657
- import {effect as _$effect5} from "@opentui/solid"
637
+ import {effect as _$effect4} from "@opentui/solid"
658
638
  import {createTextNode as _$createTextNode} from "@opentui/solid"
659
- import {insertNode as _$insertNode4} from "@opentui/solid"
639
+ import {insertNode as _$insertNode3} from "@opentui/solid"
660
640
  import {createElement as _$createElement5} from "@opentui/solid"
661
641
  import {memo as _$memo2} from "@opentui/solid"
662
642
  import {createComponent as _$createComponent7} from "@opentui/solid"
663
643
  import {Show as Show2} from "solid-js"
664
- import {useDialogs as useDialogs2,useIcons as useIcons3} from "./tui.js"
644
+ import {useDialogs as useDialogs2,useIcons as useIcons2} from "./tui.js"
665
645
  import {createComponent as _$createComponent6} from "@opentui/solid"
666
- import {effect as _$effect4} from "@opentui/solid"
646
+ import {effect as _$effect3} from "@opentui/solid"
667
647
  import {insert as _$insert4} from "@opentui/solid"
668
648
  import {setProp as _$setProp4} from "@opentui/solid"
669
649
  import {createElement as _$createElement4} from "@opentui/solid"
@@ -714,11 +694,11 @@ item.activate(event)
714
694
  _$setProp4(_el$,"wrapMode","none")
715
695
  _$setProp4(_el$,"truncate",true)
716
696
  _$insert4(_el$,()=>props.label)
717
- _$effect4((_$p)=>_$setProp4(_el$,"fg",item.foregroundColor(),_$p))
697
+ _$effect3((_$p)=>_$setProp4(_el$,"fg",item.foregroundColor(),_$p))
718
698
  return _el$
719
699
  }})
720
700
  }
721
- function CodexAccountControls(props){const icons=useIcons3()
701
+ function CodexAccountControls(props){const icons=useIcons2()
722
702
  const model=()=>props.controller.current().model
723
703
  const accountLink=createCodexAccountLink({api:props.api,preferences:props.preferences,adapter:props.codex,model,dialogs:useDialogs2(props.api)
724
704
  })
@@ -731,8 +711,8 @@ const action=(id,row,label,onActivate)=>_$createComponent7(LimitsAction,{get api
731
711
  return _$createComponent7(Show2,{get when(){return eligible()
732
712
  },get children(){return [_$createComponent7(Show2,{get when(){return _$memo2(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
733
713
  },get children(){return [(()=>{var _el$=_$createElement5("text")
734
- _$insertNode4(_el$,_$createTextNode(`Link the matching Codex account once for this connection`))
735
- _$effect5((_$p)=>_$setProp5(_el$,"fg",props.api.theme.current.textMuted,_$p))
714
+ _$insertNode3(_el$,_$createTextNode(`Link the matching Codex account once for this connection`))
715
+ _$effect4((_$p)=>_$setProp5(_el$,"fg",props.api.theme.current.textMuted,_$p))
736
716
  return _el$
737
717
  })(),_$memo2(()=>action("link",2,`${icons.icon("scope")} Link Codex CLI account`,()=>void accountLink.link()))]
738
718
  }}),_$createComponent7(Show2,{get when(){return _$memo2(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
@@ -744,9 +724,9 @@ return _el$
744
724
  }
745
725
  import {createComponent as _$createComponent9} from "@opentui/solid"
746
726
  import {Show as Show3} from "solid-js"
747
- import {useIcons as useIcons4} from "./tui.js"
727
+ import {useIcons as useIcons3} from "./tui.js"
748
728
  import {createComponent as _$createComponent8} from "@opentui/solid"
749
- import {effect as _$effect6} from "@opentui/solid"
729
+ import {effect as _$effect5} from "@opentui/solid"
750
730
  import {insert as _$insert5} from "@opentui/solid"
751
731
  import {setProp as _$setProp6} from "@opentui/solid"
752
732
  import {createElement as _$createElement6} from "@opentui/solid"
@@ -788,11 +768,11 @@ control.activate(event)
788
768
  _$setProp6(_el$,"wrapMode","none")
789
769
  _$setProp6(_el$,"height",1)
790
770
  _$insert5(_el$,label)
791
- _$effect6((_$p)=>_$setProp6(_el$,"fg",control.foregroundColor(),_$p))
771
+ _$effect5((_$p)=>_$setProp6(_el$,"fg",control.foregroundColor(),_$p))
792
772
  return _el$
793
773
  }})
794
774
  }
795
- function LimitsHeaderControls(props){const icons=useIcons4()
775
+ function LimitsHeaderControls(props){const icons=useIcons3()
796
776
  return [_$createComponent9(Show3,{get when(){return props.credits
797
777
  },get children(){return _$createComponent9(SectionHeaderControl,{get api(){return props.api
798
778
  },get interaction(){return props.interaction
@@ -806,9 +786,9 @@ return [_$createComponent9(Show3,{get when(){return props.credits
806
786
  }}})]
807
787
  }
808
788
  import {insert as _$insert6} from "@opentui/solid"
809
- import {effect as _$effect7} from "@opentui/solid"
789
+ import {effect as _$effect6} from "@opentui/solid"
810
790
  import {createTextNode as _$createTextNode2} from "@opentui/solid"
811
- import {insertNode as _$insertNode5} from "@opentui/solid"
791
+ import {insertNode as _$insertNode4} from "@opentui/solid"
812
792
  import {memo as _$memo4} from "@opentui/solid"
813
793
  import {createComponent as _$createComponent10} from "@opentui/solid"
814
794
  import {setProp as _$setProp7} from "@opentui/solid"
@@ -829,9 +809,9 @@ _$insert6(_el$,_$createComponent10(LimitsAction,{get api(){return props.api
829
809
  }),null)
830
810
  _$insert6(_el$,_$createComponent10(Show4,{get when(){return props.model.variant||props.selection?.variants(props.model).length
831
811
  },get children(){return [(()=>{var _el$2=_$createElement7("text"),_el$3=_$createTextNode2(` \xB7 `)
832
- _$insertNode5(_el$2,_el$3)
812
+ _$insertNode4(_el$2,_el$3)
833
813
  _$setProp7(_el$2,"flexShrink",0)
834
- _$effect7((_$p)=>_$setProp7(_el$2,"fg",props.api.theme.current.textMuted,_$p))
814
+ _$effect6((_$p)=>_$setProp7(_el$2,"fg",props.api.theme.current.textMuted,_$p))
835
815
  return _el$2
836
816
  })(),_$createComponent10(LimitsAction,{get api(){return props.api
837
817
  },get interaction(){return props.interaction
@@ -844,7 +824,7 @@ return _el$2
844
824
  return _el$
845
825
  })()
846
826
  }
847
- import {effect as _$effect8} from "@opentui/solid"
827
+ import {effect as _$effect7} from "@opentui/solid"
848
828
  import {insert as _$insert7} from "@opentui/solid"
849
829
  import {setProp as _$setProp8} from "@opentui/solid"
850
830
  import {createElement as _$createElement8} from "@opentui/solid"
@@ -884,22 +864,22 @@ return _$createComponent11(Show5,{get when(){return _$memo5(()=>!!props.controll
884
864
  },children:(value)=>(()=>{var _el$=_$createElement8("text")
885
865
  _$setProp8(_el$,"wrapMode","word")
886
866
  _$insert7(_el$,value)
887
- _$effect8((_$p)=>_$setProp8(_el$,"fg",props.api.theme.current.textMuted,_$p))
867
+ _$effect7((_$p)=>_$setProp8(_el$,"fg",props.api.theme.current.textMuted,_$p))
888
868
  return _el$
889
869
  })()
890
870
  })
891
871
  }
892
872
  import {createComponent as _$createComponent12} from "@opentui/solid"
893
- import {effect as _$effect9} from "@opentui/solid"
873
+ import {effect as _$effect8} from "@opentui/solid"
894
874
  import {createTextNode as _$createTextNode3} from "@opentui/solid"
895
- import {insertNode as _$insertNode6} from "@opentui/solid"
875
+ import {insertNode as _$insertNode5} from "@opentui/solid"
896
876
  import {memo as _$memo6} from "@opentui/solid"
897
877
  import {insert as _$insert8} from "@opentui/solid"
898
878
  import {setProp as _$setProp9} from "@opentui/solid"
899
879
  import {createElement as _$createElement9} from "@opentui/solid"
900
880
  import {Show as Show6,createSignal as createSignal7} from "solid-js"
901
- import {SelectionBox as SelectionBox3,useIcons as useIcons5} from "./tui.js"
902
- function Section(props){const icons=useIcons5()
881
+ import {SelectionBox as SelectionBox3,useIcons as useIcons4} from "./tui.js"
882
+ function Section(props){const icons=useIcons4()
903
883
  const [headerWidth,setHeaderWidth]=createSignal7(0)
904
884
  const icon=()=>props.section?icons.section(props.section):props.icon
905
885
  const theme=()=>props.api.theme.current
@@ -914,10 +894,10 @@ _$insert8(_el$,_$createComponent12(SelectionBox3,{ref:(node)=>item.ref(node),get
914
894
  },get onMouseOut(){return item.onMouseOut
915
895
  },onMouseDown:(event)=>item.activate(event),onSizeChange:function(){setHeaderWidth(this.width)
916
896
  },get children(){return [(()=>{var _el$2=_$createElement9("text"),_el$3=_$createElement9("span"),_el$4=_$createTextNode3(` `),_el$5=_$createElement9("span"),_el$6=_$createElement9("b")
917
- _$insertNode6(_el$2,_el$3)
918
- _$insertNode6(_el$2,_el$4)
919
- _$insertNode6(_el$2,_el$5)
920
- _$insertNode6(_el$2,_el$6)
897
+ _$insertNode5(_el$2,_el$3)
898
+ _$insertNode5(_el$2,_el$4)
899
+ _$insertNode5(_el$2,_el$5)
900
+ _$insertNode5(_el$2,_el$6)
921
901
  _$setProp9(_el$2,"flexShrink",0)
922
902
  _$setProp9(_el$2,"wrapMode","none")
923
903
  _$insert8(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
@@ -925,7 +905,7 @@ _$insert8(_el$5,(()=>{var _c$=_$memo6(()=>!!icon())
925
905
  return()=>_c$()?`${icon()} `:""
926
906
  })())
927
907
  _$insert8(_el$6,()=>props.title)
928
- _$effect9((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
908
+ _$effect8((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
929
909
  },_v$3={fg:item.focused()?item.foregroundColor():theme().accent
930
910
  }
931
911
  _v$!==_p$.e&&(_p$.e=_$setProp9(_el$2,"fg",_v$,_p$.e))
@@ -956,7 +936,7 @@ _$setProp9(_el$8,"wrapMode","none")
956
936
  _$setProp9(_el$8,"truncate",true)
957
937
  _$setProp9(_el$8,"height",1)
958
938
  _$insert8(_el$8,()=>props.summary)
959
- _$effect9((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
939
+ _$effect8((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
960
940
  _v$4!==_p$.e&&(_p$.e=_$setProp9(_el$8,"fg",_v$4,_p$.e))
961
941
  _v$5!==_p$.t&&(_p$.t=_$setProp9(_el$8,"flexShrink",_v$5,_p$.t))
962
942
  return _p$
@@ -999,8 +979,8 @@ return _$createComponent13(Section,{get api(){return props.api
999
979
  },get open(){return props.preferences.expanded().limits
1000
980
  },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent13(Show7,{get when(){return model()
1001
981
  },get fallback(){return(()=>{var _el$=_$createElement10("text")
1002
- _$insertNode7(_el$,_$createTextNode4(`Open a session to view model limits`))
1003
- _$effect10((_$p)=>_$setProp10(_el$,"fg",props.api.theme.current.textMuted,_$p))
982
+ _$insertNode6(_el$,_$createTextNode4(`Open a session to view model limits`))
983
+ _$effect9((_$p)=>_$setProp10(_el$,"fg",props.api.theme.current.textMuted,_$p))
1004
984
  return _el$
1005
985
  })()
1006
986
  },children:(selected)=>(()=>{var _el$3=_$createElement10("box")
package/dist/tui.js CHANGED
@@ -6190,8 +6190,6 @@ return _$createComponent(SectionWithHeaderAction,{get api(){return props.api
6190
6190
 
6191
6191
 
6192
6192
 
6193
-
6194
-
6195
6193
 
6196
6194
 
6197
6195
 
@@ -7522,7 +7520,7 @@ const limitsPath=import.meta.url.includes("/dist/tui.js")?"./provider-limits.js"
7522
7520
  const limitsModule=await import(limitsPath)
7523
7521
  const LimitsSection=limitsModule.ProviderLimitsSection
7524
7522
  const{controller:limits,codex,accountSource,selectModel,modelSelection
7525
- }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.21.6",hostContext)
7523
+ }=limitsModule.createProviderQuotaIntegration(api,preferences,"0.21.7",hostContext)
7526
7524
  const mcp=createMcpController(api,preferences.persistMcp,preferences)
7527
7525
  const interaction=createSidebarInteraction(api,()=>openKeyboardHelp(api,preferences.lspIconStyle,preferences.cornerFont))
7528
7526
  const startup=createStartupSessionController(api,preferences)
@@ -7550,7 +7548,7 @@ api.slots.register({order:100,slots:{app(){return _$createComponent(IconProvider
7550
7548
  },interaction,skills,subagents,mcp
7551
7549
  }),_$createComponent(FirstRunWizardPersistence,{api,preferences
7552
7550
  }),_$createComponent(StartupSessionBinding,{api,controller:startup
7553
- }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.21.6"
7551
+ }),_$createComponent(UpgradeNotesBinding,{api,preferences,version:"0.21.7"
7554
7552
  }),_$createComponent(McpPersistence,{api,controller:mcp
7555
7553
  })]
7556
7554
  }})
@@ -7583,12 +7581,12 @@ return result.data?.type==="text"?result.data.content:undefined
7583
7581
  })
7584
7582
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV1VersionUpdater
7585
7583
  }=await loadNavigatorUpdates()
7586
- const versionStatus=createVersionStatus(api,"0.21.6")
7587
- const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.21.6"))
7584
+ const versionStatus=createVersionStatus(api,"0.21.7")
7585
+ const versionUpdates=createVersionUpdateActions(api,versionStatus,createOpenCodeV1VersionUpdater(api,meta),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.21.7"))
7588
7586
  api.slots.register({order:90,slots:{sidebar_footer(_context,props){return _$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7589
7587
  },get multilineCorners(){return preferences.cornerFont
7590
7588
  },get children(){return _$createComponent(VersionFooter,{api,get sessionID(){return props.session_id
7591
- },navigatorVersion:"0.21.6",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7589
+ },navigatorVersion:"0.21.7",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7592
7590
  },get onNavigatorUpdate(){return versionUpdates.navigator
7593
7591
  }})
7594
7592
  }})
@@ -7604,15 +7602,15 @@ return new TextDecoder().decode(await context.client.file.read({location:context
7604
7602
  },todo,context)
7605
7603
  const{createVersionStatus,createVersionUpdateActions,createOpenCodeV2VersionUpdater
7606
7604
  }=await loadNavigatorUpdates()
7607
- const versionStatus=createVersionStatus(adapter.api,"0.21.6")
7608
- const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.21.6"))
7605
+ const versionStatus=createVersionStatus(adapter.api,"0.21.7")
7606
+ const versionUpdates=createVersionUpdateActions(adapter.api,versionStatus,createOpenCodeV2VersionUpdater(context),()=>preferences.rememberNavigatorVersionBeforeUpdate("0.21.7"))
7609
7607
  const disposeFooter=context.ui.slot({append:"sidebar.footer",render:()=>_$createComponent(IconProvider,{get style(){return preferences.lspIconStyle
7610
7608
  },get multilineCorners(){return preferences.cornerFont
7611
7609
  },get children(){var _el$=_$createElement("box")
7612
7610
  _$setProp(_el$,"flexDirection","row")
7613
7611
  _$setProp(_el$,"justifyContent","space-between")
7614
7612
  _$insert(_el$,_$createComponent(VersionSummary,{get api(){return adapter.api
7615
- },navigatorVersion:"0.21.6",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7613
+ },navigatorVersion:"0.21.7",status:versionStatus,get onOpenCodeUpdate(){return versionUpdates.openCode
7616
7614
  },get onNavigatorUpdate(){return versionUpdates.navigator
7617
7615
  }}),null)
7618
7616
  _$insert(_el$,_$createComponent(SettingsFooterButton,{get api(){return adapter.api
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "opencode-navigator",
4
- "version": "0.21.6",
4
+ "version": "0.21.7",
5
5
  "description": "Search, navigate, and manage OpenCode sessions from the TUI",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.4.2",