opencode-navigator 0.21.4 → 0.21.6

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.
@@ -1,5 +1,5 @@
1
1
  import {PLUGIN_ID
2
- } from "./chunk-cmmnfes2.js";
2
+ } from "./chunk-d1bws32s.js";
3
3
  function createCodexAppServerClient(input){const command=input.command??["codex","app-server","--stdio"]
4
4
  const timeoutMs=input.timeoutMs??1e4
5
5
  const pending=new Map
@@ -389,42 +389,56 @@ const [columns,setColumns]=createSignal4(0)
389
389
  const view=()=>quotaPresentation(props.window)
390
390
  const scale=()=>{const ratio=view().ratio
391
391
  if(ratio===undefined)
392
- return " \xB7 scale unknown"
393
- const width=Math.max(0,columns()-Bun.stringWidth(view().value)-1)
392
+ return "Scale unknown"
393
+ const width=columns()
394
394
  const filled=Math.round(ratio*width)
395
395
  const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
396
- return width?` ${symbols[0].repeat(filled)}${symbols[1].repeat(width - filled)}`:""
396
+ return symbols[0].repeat(filled) + symbols[1].repeat(width-filled)
397
397
  }
398
- return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createElement("span"),_el$4=_$createElement("text")
398
+ const valueWidth=()=>Math.min(columns(),Bun.stringWidth(view().value))
399
+ const gap=()=>columns()>valueWidth()?1:0
400
+ const resetWidth=()=>Math.max(0,columns()-valueWidth()-gap())
401
+ return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createElement("box"),_el$4=_$createElement("text"),_el$5=_$createElement("text")
399
402
  _$insertNode(_el$,_el$2)
400
- _$insertNode(_el$,_el$4)
403
+ _$insertNode(_el$,_el$3)
401
404
  _$setProp(_el$,"width","100%")
402
405
  _$setProp(_el$,"minWidth",0)
403
406
  _$setProp(_el$,"flexShrink",1)
407
+ _$setProp(_el$,"height",2)
404
408
  _$setProp(_el$,"overflow","hidden")
405
409
  _$setProp(_el$,"onSizeChange",function(){setColumns(this.width)
406
410
  })
407
- _$insertNode(_el$2,_el$3)
408
411
  _$setProp(_el$2,"width","100%")
409
412
  _$setProp(_el$2,"minWidth",0)
410
413
  _$setProp(_el$2,"height",1)
411
414
  _$setProp(_el$2,"wrapMode","none")
412
415
  _$setProp(_el$2,"truncate",true)
413
- _$insert(_el$3,()=>view().value)
414
- _$insert(_el$2,scale,null)
415
- _$setProp(_el$4,"width","100%")
416
+ _$insert(_el$2,scale)
417
+ _$insertNode(_el$3,_el$4)
418
+ _$insertNode(_el$3,_el$5)
419
+ _$setProp(_el$3,"width","100%")
420
+ _$setProp(_el$3,"minWidth",0)
421
+ _$setProp(_el$3,"height",1)
422
+ _$setProp(_el$3,"flexDirection","row")
423
+ _$setProp(_el$3,"overflow","hidden")
416
424
  _$setProp(_el$4,"minWidth",0)
417
425
  _$setProp(_el$4,"height",1)
418
426
  _$setProp(_el$4,"wrapMode","none")
419
427
  _$setProp(_el$4,"truncate",true)
420
428
  _$insert(_el$4,()=>view().reset)
421
- _$effect((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:props.api.theme.current.text
422
- },_v$3=props.api.theme.current.textMuted
429
+ _$setProp(_el$5,"height",1)
430
+ _$setProp(_el$5,"wrapMode","none")
431
+ _$setProp(_el$5,"truncate",true)
432
+ _$insert(_el$5,()=>view().value)
433
+ _$effect((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2=resetWidth(),_v$3=props.api.theme.current.textMuted,_v$4=valueWidth(),_v$5=gap(),_v$6=props.api.theme.current.text
423
434
  _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
424
- _v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"style",_v$2,_p$.t))
435
+ _v$2!==_p$.t&&(_p$.t=_$setProp(_el$4,"width",_v$2,_p$.t))
425
436
  _v$3!==_p$.a&&(_p$.a=_$setProp(_el$4,"fg",_v$3,_p$.a))
437
+ _v$4!==_p$.o&&(_p$.o=_$setProp(_el$5,"width",_v$4,_p$.o))
438
+ _v$5!==_p$.i&&(_p$.i=_$setProp(_el$5,"marginLeft",_v$5,_p$.i))
439
+ _v$6!==_p$.n&&(_p$.n=_$setProp(_el$5,"fg",_v$6,_p$.n))
426
440
  return _p$
427
- },{e:undefined,t:undefined,a:undefined
441
+ },{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined
428
442
  })
429
443
  return _el$
430
444
  })()
@@ -509,8 +523,8 @@ else if(option.value.startsWith("credit:"))
509
523
  actions.review(option.value.slice("credit:".length)||undefined)
510
524
  }})
511
525
  }
512
- import {createComponent as _$createComponent4} from "@opentui/solid"
513
- import {For} from "solid-js"
526
+ import {createComponent as _$createComponent5} from "@opentui/solid"
527
+ import {For as For2,Show} from "solid-js"
514
528
  import {effect as _$effect2} from "@opentui/solid"
515
529
  import {insertNode as _$insertNode2} from "@opentui/solid"
516
530
  import {insert as _$insert2} from "@opentui/solid"
@@ -535,12 +549,50 @@ return _p$
535
549
  return _el$
536
550
  })()
537
551
  }
538
- function QuotaSnapshotRows(props){return [_$createComponent4(For,{get each(){return props.snapshot.windows
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
+ import {insert as _$insert3} from "@opentui/solid"
556
+ import {setProp as _$setProp3} from "@opentui/solid"
557
+ import {createElement as _$createElement3} from "@opentui/solid"
558
+ 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)
567
+ _$setProp3(_el$,"width","100%")
568
+ _$setProp3(_el$,"minWidth",0)
569
+ _$setProp3(_el$,"flexDirection","row")
570
+ _$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
539
582
  },children:(window)=>_$createComponent4(QuotaWindowRow,{get api(){return props.api
540
583
  },window
541
584
  })
542
- }),_$createComponent4(For,{get each(){return props.snapshot.balances
543
- },children:(balance)=>_$createComponent4(QuotaBalanceRow,{get api(){return props.api
585
+ }))
586
+ _$effect3((_$p)=>_$setProp3(_el$2,"fg",props.api.theme.current.textMuted,_$p))
587
+ return _el$
588
+ })()
589
+ }
590
+ function QuotaSnapshotRows(props){return [_$createComponent5(Show,{get when(){return props.snapshot.windows.length>0
591
+ },get children(){return _$createComponent5(QuotaWindowGroup,{get api(){return props.api
592
+ },get windows(){return props.snapshot.windows
593
+ }})
594
+ }}),_$createComponent5(For2,{get each(){return props.snapshot.balances
595
+ },children:(balance)=>_$createComponent5(QuotaBalanceRow,{get api(){return props.api
544
596
  },balance
545
597
  })
546
598
  })]
@@ -590,31 +642,31 @@ function providerQuotaCapability(id,canonical){const key=aliases[canonical??id]?
590
642
  const found=PROVIDER_QUOTA_CAPABILITIES.find((entry)=>entry.id===key)
591
643
  return found??{id,name:id,sources:[],reason:"No independent quota/balance API or native counter semantics are verified for this provider.",documentation:["https://opencode.ai/docs/providers/"]
592
644
  }}
593
- import {insert as _$insert8} from "@opentui/solid"
645
+ import {insert as _$insert9} from "@opentui/solid"
594
646
  import {mergeProps as _$mergeProps} from "@opentui/solid"
595
- import {setProp as _$setProp9} from "@opentui/solid"
596
- import {effect as _$effect9} from "@opentui/solid"
647
+ import {setProp as _$setProp10} from "@opentui/solid"
648
+ import {effect as _$effect10} from "@opentui/solid"
597
649
  import {createTextNode as _$createTextNode4} from "@opentui/solid"
598
- import {insertNode as _$insertNode6} from "@opentui/solid"
599
- import {createElement as _$createElement9} from "@opentui/solid"
650
+ import {insertNode as _$insertNode7} from "@opentui/solid"
651
+ import {createElement as _$createElement10} from "@opentui/solid"
600
652
  import {memo as _$memo7} from "@opentui/solid"
601
- import {createComponent as _$createComponent12} from "@opentui/solid"
602
- import {Show as Show6} from "solid-js"
653
+ import {createComponent as _$createComponent13} from "@opentui/solid"
654
+ import {Show as Show7} from "solid-js"
603
655
  import {useDialogs as useDialogs3} from "./tui.js"
604
- import {setProp as _$setProp4} from "@opentui/solid"
605
- import {effect as _$effect4} from "@opentui/solid"
656
+ import {setProp as _$setProp5} from "@opentui/solid"
657
+ import {effect as _$effect5} from "@opentui/solid"
606
658
  import {createTextNode as _$createTextNode} from "@opentui/solid"
607
- import {insertNode as _$insertNode3} from "@opentui/solid"
608
- import {createElement as _$createElement4} from "@opentui/solid"
659
+ import {insertNode as _$insertNode4} from "@opentui/solid"
660
+ import {createElement as _$createElement5} from "@opentui/solid"
609
661
  import {memo as _$memo2} from "@opentui/solid"
662
+ import {createComponent as _$createComponent7} from "@opentui/solid"
663
+ import {Show as Show2} from "solid-js"
664
+ import {useDialogs as useDialogs2,useIcons as useIcons3} from "./tui.js"
610
665
  import {createComponent as _$createComponent6} from "@opentui/solid"
611
- import {Show} from "solid-js"
612
- import {useDialogs as useDialogs2,useIcons as useIcons2} from "./tui.js"
613
- import {createComponent as _$createComponent5} from "@opentui/solid"
614
- import {effect as _$effect3} from "@opentui/solid"
615
- import {insert as _$insert3} from "@opentui/solid"
616
- import {setProp as _$setProp3} from "@opentui/solid"
617
- import {createElement as _$createElement3} from "@opentui/solid"
666
+ import {effect as _$effect4} from "@opentui/solid"
667
+ import {insert as _$insert4} from "@opentui/solid"
668
+ import {setProp as _$setProp4} from "@opentui/solid"
669
+ import {createElement as _$createElement4} from "@opentui/solid"
618
670
  import {SelectionBox} from "./tui.js"
619
671
  import {createSignal as createSignal5,onCleanup} from "solid-js"
620
672
  function sidebarInteractiveColors(theme,state,normalColor=theme.text,mode="row"){const highlighted=!state.disabled&&(state.focused||mode==="control"&&state.hovered)
@@ -650,7 +702,7 @@ return true
650
702
  }}}
651
703
  function LimitsAction(props){const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>props.disabled===true,activate:props.onActivate
652
704
  },()=>props.api.theme.current.text,props.inline?"control":"row")
653
- return _$createComponent5(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
705
+ return _$createComponent6(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
654
706
  },height:1,get flexGrow(){return props.flexGrow
655
707
  },get maxWidth(){return props.maxWidth
656
708
  },flexShrink:1,minWidth:3,get backgroundColor(){return item.backgroundColor()
@@ -658,46 +710,46 @@ return _$createComponent5(SelectionBox,{ref:(node)=>item.ref(node),get id(){retu
658
710
  },get onMouseOut(){return item.onMouseOut
659
711
  },onMouseUp:(event)=>{event.stopPropagation()
660
712
  item.activate(event)
661
- },get children(){var _el$=_$createElement3("text")
662
- _$setProp3(_el$,"wrapMode","none")
663
- _$setProp3(_el$,"truncate",true)
664
- _$insert3(_el$,()=>props.label)
665
- _$effect3((_$p)=>_$setProp3(_el$,"fg",item.foregroundColor(),_$p))
713
+ },get children(){var _el$=_$createElement4("text")
714
+ _$setProp4(_el$,"wrapMode","none")
715
+ _$setProp4(_el$,"truncate",true)
716
+ _$insert4(_el$,()=>props.label)
717
+ _$effect4((_$p)=>_$setProp4(_el$,"fg",item.foregroundColor(),_$p))
666
718
  return _el$
667
719
  }})
668
720
  }
669
- function CodexAccountControls(props){const icons=useIcons2()
721
+ function CodexAccountControls(props){const icons=useIcons3()
670
722
  const model=()=>props.controller.current().model
671
723
  const accountLink=createCodexAccountLink({api:props.api,preferences:props.preferences,adapter:props.codex,model,dialogs:useDialogs2(props.api)
672
724
  })
673
725
  const eligible=()=>(props.model.providerID==="openai"||props.model.hostConnection?.providerID==="openai")&&props.model.hostConnection?.method!=="api"
674
- const action=(id,row,label,onActivate)=>_$createComponent6(LimitsAction,{get api(){return props.api
726
+ const action=(id,row,label,onActivate)=>_$createComponent7(LimitsAction,{get api(){return props.api
675
727
  },get interaction(){return props.interaction
676
728
  },id:`${PLUGIN_ID}.limits.${id}`,get position(){return{section:props.navigationSection,row,column:0
677
729
  }},label,onActivate,get disabled(){return accountLink.busy()
678
730
  }})
679
- return _$createComponent6(Show,{get when(){return eligible()
680
- },get children(){return [_$createComponent6(Show,{get when(){return _$memo2(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
681
- },get children(){return [(()=>{var _el$=_$createElement4("text")
682
- _$insertNode3(_el$,_$createTextNode(`Link the matching Codex account once for this connection`))
683
- _$effect4((_$p)=>_$setProp4(_el$,"fg",props.api.theme.current.textMuted,_$p))
731
+ return _$createComponent7(Show2,{get when(){return eligible()
732
+ },get children(){return [_$createComponent7(Show2,{get when(){return _$memo2(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
733
+ },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))
684
736
  return _el$
685
737
  })(),_$memo2(()=>action("link",2,`${icons.icon("scope")} Link Codex CLI account`,()=>void accountLink.link()))]
686
- }}),_$createComponent6(Show,{get when(){return _$memo2(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
687
- },get children(){return [_$memo2(()=>action("unlink",4,`${icons.icon("close")} Unlink Codex account`,()=>props.preferences.setCodexConnectionBinding(props.model.providerID,props.model.hostConnection?.id))),_$createComponent6(Show,{get when(){return props.controller.snapshot()?.availability==="unauthenticated"
738
+ }}),_$createComponent7(Show2,{get when(){return _$memo2(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
739
+ },get children(){return [_$memo2(()=>action("unlink",4,`${icons.icon("close")} Unlink Codex account`,()=>props.preferences.setCodexConnectionBinding(props.model.providerID,props.model.hostConnection?.id))),_$createComponent7(Show2,{get when(){return props.controller.snapshot()?.availability==="unauthenticated"
688
740
  },get children(){return action("relink",5,`${icons.icon("scope")} Relink Codex account`,()=>void accountLink.link())
689
741
  }})]
690
742
  }})]
691
743
  }})
692
744
  }
745
+ import {createComponent as _$createComponent9} from "@opentui/solid"
746
+ import {Show as Show3} from "solid-js"
747
+ import {useIcons as useIcons4} from "./tui.js"
693
748
  import {createComponent as _$createComponent8} from "@opentui/solid"
694
- import {Show as Show2} from "solid-js"
695
- import {useIcons as useIcons3} from "./tui.js"
696
- import {createComponent as _$createComponent7} from "@opentui/solid"
697
- import {effect as _$effect5} from "@opentui/solid"
698
- import {insert as _$insert4} from "@opentui/solid"
699
- import {setProp as _$setProp5} from "@opentui/solid"
700
- import {createElement as _$createElement5} from "@opentui/solid"
749
+ import {effect as _$effect6} from "@opentui/solid"
750
+ import {insert as _$insert5} from "@opentui/solid"
751
+ import {setProp as _$setProp6} from "@opentui/solid"
752
+ import {createElement as _$createElement6} from "@opentui/solid"
701
753
  import {memo as _$memo3} from "@opentui/solid"
702
754
  import {createEffect as createEffect2,createSignal as createSignal6,on} from "solid-js"
703
755
  import {SelectionBox as SelectionBox2} from "./tui.js"
@@ -721,7 +773,7 @@ const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,pos
721
773
  },()=>props.api.theme.current.accent,"control")
722
774
  createEffect2(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
723
775
  const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
724
- return _$createComponent7(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
776
+ return _$createComponent8(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
725
777
  },get iconOnly(){return props.iconOnly
726
778
  },get width(){return props.iconOnly?3:undefined
727
779
  },get flexShrink(){return props.iconOnly?0:1
@@ -732,42 +784,42 @@ return _$createComponent7(SelectionBox2,{ref:(node)=>control.ref(node),get id(){
732
784
  },get onMouseOut(){return control.onMouseOut
733
785
  },onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
734
786
  control.activate(event)
735
- },get children(){var _el$=_$createElement5("text")
736
- _$setProp5(_el$,"wrapMode","none")
737
- _$setProp5(_el$,"height",1)
738
- _$insert4(_el$,label)
739
- _$effect5((_$p)=>_$setProp5(_el$,"fg",control.foregroundColor(),_$p))
787
+ },get children(){var _el$=_$createElement6("text")
788
+ _$setProp6(_el$,"wrapMode","none")
789
+ _$setProp6(_el$,"height",1)
790
+ _$insert5(_el$,label)
791
+ _$effect6((_$p)=>_$setProp6(_el$,"fg",control.foregroundColor(),_$p))
740
792
  return _el$
741
793
  }})
742
794
  }
743
- function LimitsHeaderControls(props){const icons=useIcons3()
744
- return [_$createComponent8(Show2,{get when(){return props.credits
745
- },get children(){return _$createComponent8(SectionHeaderControl,{get api(){return props.api
795
+ function LimitsHeaderControls(props){const icons=useIcons4()
796
+ return [_$createComponent9(Show3,{get when(){return props.credits
797
+ },get children(){return _$createComponent9(SectionHeaderControl,{get api(){return props.api
746
798
  },get interaction(){return props.interaction
747
799
  },get position(){return{section:props.navigationSection,row:0,column:1
748
800
  }},get action(){return{id:`${PLUGIN_ID}.limits.credits`,label:()=>"Banked Resets",disabled:()=>false,onActivate:props.onCredits
749
801
  }}})
750
- }}),_$createComponent8(SectionHeaderControl,{get api(){return props.api
802
+ }}),_$createComponent9(SectionHeaderControl,{get api(){return props.api
751
803
  },get interaction(){return props.interaction
752
804
  },iconOnly:true,get position(){return{section:props.navigationSection,row:0,column:2
753
805
  }},get action(){return{id:`${PLUGIN_ID}.limits.refresh`,label:()=>icons.icon(props.refreshing?"pending":"retry"),disabled:()=>props.refreshing||!props.canRefresh,onActivate:props.onRefresh
754
806
  }}})]
755
807
  }
756
- import {insert as _$insert5} from "@opentui/solid"
757
- import {effect as _$effect6} from "@opentui/solid"
808
+ import {insert as _$insert6} from "@opentui/solid"
809
+ import {effect as _$effect7} from "@opentui/solid"
758
810
  import {createTextNode as _$createTextNode2} from "@opentui/solid"
759
- import {insertNode as _$insertNode4} from "@opentui/solid"
811
+ import {insertNode as _$insertNode5} from "@opentui/solid"
760
812
  import {memo as _$memo4} from "@opentui/solid"
761
- import {createComponent as _$createComponent9} from "@opentui/solid"
762
- import {setProp as _$setProp6} from "@opentui/solid"
763
- import {createElement as _$createElement6} from "@opentui/solid"
764
- import {Show as Show3} from "solid-js"
813
+ import {createComponent as _$createComponent10} from "@opentui/solid"
814
+ import {setProp as _$setProp7} from "@opentui/solid"
815
+ import {createElement as _$createElement7} from "@opentui/solid"
816
+ import {Show as Show4} from "solid-js"
765
817
  function LimitsModelRow(props){const names=()=>props.selection?.names(props.model)??{provider:props.model.providerID,model:props.model.modelID
766
818
  }
767
- return(()=>{var _el$=_$createElement6("box")
768
- _$setProp6(_el$,"flexDirection","row")
769
- _$setProp6(_el$,"minWidth",0)
770
- _$insert5(_el$,_$createComponent9(LimitsAction,{get api(){return props.api
819
+ return(()=>{var _el$=_$createElement7("box")
820
+ _$setProp7(_el$,"flexDirection","row")
821
+ _$setProp7(_el$,"minWidth",0)
822
+ _$insert6(_el$,_$createComponent10(LimitsAction,{get api(){return props.api
771
823
  },get interaction(){return props.interaction
772
824
  },inline:true,flexGrow:1,get maxWidth(){return Bun.stringWidth(`[${names().provider}] ${names().model}`) + 2
773
825
  },id:`${PLUGIN_ID}.limits.model`,get position(){return{section:props.navigationSection,row:1,column:0
@@ -775,13 +827,13 @@ _$insert5(_el$,_$createComponent9(LimitsAction,{get api(){return props.api
775
827
  },get disabled(){return !props.selection?.canOpen("model",props.model)
776
828
  },onActivate:()=>props.selection?.open("model",props.model)
777
829
  }),null)
778
- _$insert5(_el$,_$createComponent9(Show3,{get when(){return props.model.variant||props.selection?.variants(props.model).length
779
- },get children(){return [(()=>{var _el$2=_$createElement6("text"),_el$3=_$createTextNode2(` \xB7 `)
780
- _$insertNode4(_el$2,_el$3)
781
- _$setProp6(_el$2,"flexShrink",0)
782
- _$effect6((_$p)=>_$setProp6(_el$2,"fg",props.api.theme.current.textMuted,_$p))
830
+ _$insert6(_el$,_$createComponent10(Show4,{get when(){return props.model.variant||props.selection?.variants(props.model).length
831
+ },get children(){return [(()=>{var _el$2=_$createElement7("text"),_el$3=_$createTextNode2(` \xB7 `)
832
+ _$insertNode5(_el$2,_el$3)
833
+ _$setProp7(_el$2,"flexShrink",0)
834
+ _$effect7((_$p)=>_$setProp7(_el$2,"fg",props.api.theme.current.textMuted,_$p))
783
835
  return _el$2
784
- })(),_$createComponent9(LimitsAction,{get api(){return props.api
836
+ })(),_$createComponent10(LimitsAction,{get api(){return props.api
785
837
  },get interaction(){return props.interaction
786
838
  },inline:true,id:`${PLUGIN_ID}.limits.variant`,get position(){return{section:props.navigationSection,row:1,column:1
787
839
  }},get label(){return props.model.variant??"Default"
@@ -792,13 +844,13 @@ return _el$2
792
844
  return _el$
793
845
  })()
794
846
  }
795
- import {effect as _$effect7} from "@opentui/solid"
796
- import {insert as _$insert6} from "@opentui/solid"
797
- import {setProp as _$setProp7} from "@opentui/solid"
798
- import {createElement as _$createElement7} from "@opentui/solid"
799
- import {createComponent as _$createComponent10} from "@opentui/solid"
847
+ import {effect as _$effect8} from "@opentui/solid"
848
+ import {insert as _$insert7} from "@opentui/solid"
849
+ import {setProp as _$setProp8} from "@opentui/solid"
850
+ import {createElement as _$createElement8} from "@opentui/solid"
851
+ import {createComponent as _$createComponent11} from "@opentui/solid"
800
852
  import {memo as _$memo5} from "@opentui/solid"
801
- import {Show as Show4} from "solid-js"
853
+ import {Show as Show5} from "solid-js"
802
854
  function LimitsStatus(props){const message=()=>{const model=props.controller.current().model
803
855
  const connection=model?.hostConnection
804
856
  const snapshot=props.controller.snapshot()
@@ -828,85 +880,85 @@ if(availability==="stale")
828
880
  return "Stale provider data \xB7 refresh to update"
829
881
  return `Updated ${new Date(snapshot.fetchedAt).toLocaleTimeString()}`
830
882
  }
831
- return _$createComponent10(Show4,{get when(){return _$memo5(()=>!!props.controller.current().model)()&&message()
832
- },children:(value)=>(()=>{var _el$=_$createElement7("text")
833
- _$setProp7(_el$,"wrapMode","word")
834
- _$insert6(_el$,value)
835
- _$effect7((_$p)=>_$setProp7(_el$,"fg",props.api.theme.current.textMuted,_$p))
883
+ return _$createComponent11(Show5,{get when(){return _$memo5(()=>!!props.controller.current().model)()&&message()
884
+ },children:(value)=>(()=>{var _el$=_$createElement8("text")
885
+ _$setProp8(_el$,"wrapMode","word")
886
+ _$insert7(_el$,value)
887
+ _$effect8((_$p)=>_$setProp8(_el$,"fg",props.api.theme.current.textMuted,_$p))
836
888
  return _el$
837
889
  })()
838
890
  })
839
891
  }
840
- import {createComponent as _$createComponent11} from "@opentui/solid"
841
- import {effect as _$effect8} from "@opentui/solid"
892
+ import {createComponent as _$createComponent12} from "@opentui/solid"
893
+ import {effect as _$effect9} from "@opentui/solid"
842
894
  import {createTextNode as _$createTextNode3} from "@opentui/solid"
843
- import {insertNode as _$insertNode5} from "@opentui/solid"
895
+ import {insertNode as _$insertNode6} from "@opentui/solid"
844
896
  import {memo as _$memo6} from "@opentui/solid"
845
- import {insert as _$insert7} from "@opentui/solid"
846
- import {setProp as _$setProp8} from "@opentui/solid"
847
- import {createElement as _$createElement8} from "@opentui/solid"
848
- import {Show as Show5,createSignal as createSignal7} from "solid-js"
849
- import {SelectionBox as SelectionBox3,useIcons as useIcons4} from "./tui.js"
850
- function Section(props){const icons=useIcons4()
897
+ import {insert as _$insert8} from "@opentui/solid"
898
+ import {setProp as _$setProp9} from "@opentui/solid"
899
+ import {createElement as _$createElement9} from "@opentui/solid"
900
+ 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()
851
903
  const [headerWidth,setHeaderWidth]=createSignal7(0)
852
904
  const icon=()=>props.section?icons.section(props.section):props.icon
853
905
  const theme=()=>props.api.theme.current
854
906
  const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
855
907
  }),activate:props.onToggle
856
908
  })
857
- return(()=>{var _el$=_$createElement8("box")
858
- _$setProp8(_el$,"gap",1)
859
- _$insert7(_el$,_$createComponent11(SelectionBox3,{ref:(node)=>item.ref(node),get id(){return props.sectionId
909
+ return(()=>{var _el$=_$createElement9("box")
910
+ _$setProp9(_el$,"gap",1)
911
+ _$insert8(_el$,_$createComponent12(SelectionBox3,{ref:(node)=>item.ref(node),get id(){return props.sectionId
860
912
  },flexDirection:"row",height:1,justifyContent:"space-between",gap:1,get backgroundColor(){return item.backgroundColor()
861
913
  },get onMouseOver(){return item.onMouseOver
862
914
  },get onMouseOut(){return item.onMouseOut
863
915
  },onMouseDown:(event)=>item.activate(event),onSizeChange:function(){setHeaderWidth(this.width)
864
- },get children(){return [(()=>{var _el$2=_$createElement8("text"),_el$3=_$createElement8("span"),_el$4=_$createTextNode3(` `),_el$5=_$createElement8("span"),_el$6=_$createElement8("b")
865
- _$insertNode5(_el$2,_el$3)
866
- _$insertNode5(_el$2,_el$4)
867
- _$insertNode5(_el$2,_el$5)
868
- _$insertNode5(_el$2,_el$6)
869
- _$setProp8(_el$2,"flexShrink",0)
870
- _$setProp8(_el$2,"wrapMode","none")
871
- _$insert7(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
872
- _$insert7(_el$5,(()=>{var _c$=_$memo6(()=>!!icon())
916
+ },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)
921
+ _$setProp9(_el$2,"flexShrink",0)
922
+ _$setProp9(_el$2,"wrapMode","none")
923
+ _$insert8(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
924
+ _$insert8(_el$5,(()=>{var _c$=_$memo6(()=>!!icon())
873
925
  return()=>_c$()?`${icon()} `:""
874
926
  })())
875
- _$insert7(_el$6,()=>props.title)
876
- _$effect8((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
927
+ _$insert8(_el$6,()=>props.title)
928
+ _$effect9((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
877
929
  },_v$3={fg:item.focused()?item.foregroundColor():theme().accent
878
930
  }
879
- _v$!==_p$.e&&(_p$.e=_$setProp8(_el$2,"fg",_v$,_p$.e))
880
- _v$2!==_p$.t&&(_p$.t=_$setProp8(_el$3,"style",_v$2,_p$.t))
881
- _v$3!==_p$.a&&(_p$.a=_$setProp8(_el$5,"style",_v$3,_p$.a))
931
+ _v$!==_p$.e&&(_p$.e=_$setProp9(_el$2,"fg",_v$,_p$.e))
932
+ _v$2!==_p$.t&&(_p$.t=_$setProp9(_el$3,"style",_v$2,_p$.t))
933
+ _v$3!==_p$.a&&(_p$.a=_$setProp9(_el$5,"style",_v$3,_p$.a))
882
934
  return _p$
883
935
  },{e:undefined,t:undefined,a:undefined
884
936
  })
885
937
  return _el$2
886
- })(),(()=>{var _el$7=_$createElement8("box")
887
- _$setProp8(_el$7,"flexDirection","row")
888
- _$setProp8(_el$7,"gap",1)
889
- _$setProp8(_el$7,"flexGrow",1)
890
- _$setProp8(_el$7,"minWidth",0)
891
- _$setProp8(_el$7,"justifyContent","flex-end")
892
- _$insert7(_el$7,()=>props.headerControls,null)
893
- _$insert7(_el$7,_$createComponent11(Show5,{get when(){return props.headerAction
894
- },children:(action)=>_$createComponent11(SectionHeaderControl,{get api(){return props.api
938
+ })(),(()=>{var _el$7=_$createElement9("box")
939
+ _$setProp9(_el$7,"flexDirection","row")
940
+ _$setProp9(_el$7,"gap",1)
941
+ _$setProp9(_el$7,"flexGrow",1)
942
+ _$setProp9(_el$7,"minWidth",0)
943
+ _$setProp9(_el$7,"justifyContent","flex-end")
944
+ _$insert8(_el$7,()=>props.headerControls,null)
945
+ _$insert8(_el$7,_$createComponent12(Show6,{get when(){return props.headerAction
946
+ },children:(action)=>_$createComponent12(SectionHeaderControl,{get api(){return props.api
895
947
  },get interaction(){return props.interaction
896
948
  },get action(){return action()
897
949
  },get resetWidth(){return headerWidth()
898
950
  },get position(){return{section:props.navigationSection??0,row:0,column:1
899
951
  }}})
900
952
  }),null)
901
- _$insert7(_el$7,_$createComponent11(Show5,{get when(){return props.summary
902
- },get children(){var _el$8=_$createElement8("text")
903
- _$setProp8(_el$8,"wrapMode","none")
904
- _$setProp8(_el$8,"truncate",true)
905
- _$setProp8(_el$8,"height",1)
906
- _$insert7(_el$8,()=>props.summary)
907
- _$effect8((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
908
- _v$4!==_p$.e&&(_p$.e=_$setProp8(_el$8,"fg",_v$4,_p$.e))
909
- _v$5!==_p$.t&&(_p$.t=_$setProp8(_el$8,"flexShrink",_v$5,_p$.t))
953
+ _$insert8(_el$7,_$createComponent12(Show6,{get when(){return props.summary
954
+ },get children(){var _el$8=_$createElement9("text")
955
+ _$setProp9(_el$8,"wrapMode","none")
956
+ _$setProp9(_el$8,"truncate",true)
957
+ _$setProp9(_el$8,"height",1)
958
+ _$insert8(_el$8,()=>props.summary)
959
+ _$effect9((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
960
+ _v$4!==_p$.e&&(_p$.e=_$setProp9(_el$8,"fg",_v$4,_p$.e))
961
+ _v$5!==_p$.t&&(_p$.t=_$setProp9(_el$8,"flexShrink",_v$5,_p$.t))
910
962
  return _p$
911
963
  },{e:undefined,t:undefined
912
964
  })
@@ -915,7 +967,7 @@ return _el$8
915
967
  return _el$7
916
968
  })()]
917
969
  }}),null)
918
- _$insert7(_el$,_$createComponent11(Show5,{get when(){return props.open
970
+ _$insert8(_el$,_$createComponent12(Show6,{get when(){return props.open
919
971
  },get children(){return props.children
920
972
  }}),null)
921
973
  return _el$
@@ -926,17 +978,17 @@ const model=()=>props.controller.current().model
926
978
  const snapshot=props.controller.snapshot
927
979
  function openCredits(){const selected=model()
928
980
  if(selected)
929
- dialogs.open(()=>_$createComponent12(ResetCreditDialog,{get api(){return props.api
981
+ dialogs.open(()=>_$createComponent13(ResetCreditDialog,{get api(){return props.api
930
982
  },get preferences(){return props.preferences
931
983
  },get controller(){return props.controller
932
984
  },get adapter(){return props.codex
933
985
  },model:selected
934
986
  }))
935
987
  }
936
- return _$createComponent12(Section,{get api(){return props.api
988
+ return _$createComponent13(Section,{get api(){return props.api
937
989
  },get interaction(){return props.interaction
938
990
  },sectionId:`${PLUGIN_ID}.section.limits`,get navigationSection(){return props.navigationSection
939
- },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent12(LimitsHeaderControls,{get api(){return props.api
991
+ },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent13(LimitsHeaderControls,{get api(){return props.api
940
992
  },get interaction(){return props.interaction
941
993
  },get navigationSection(){return props.navigationSection
942
994
  },get credits(){return(snapshot()?.bankedResets?.availableCount??0)>0||Boolean(props.preferences.pendingResetAttempt())
@@ -945,28 +997,28 @@ return _$createComponent12(Section,{get api(){return props.api
945
997
  },onCredits:openCredits,onRefresh:()=>void props.controller.refresh(true)
946
998
  })
947
999
  },get open(){return props.preferences.expanded().limits
948
- },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent12(Show6,{get when(){return model()
949
- },get fallback(){return(()=>{var _el$=_$createElement9("text")
950
- _$insertNode6(_el$,_$createTextNode4(`Open a session to view model limits`))
951
- _$effect9((_$p)=>_$setProp9(_el$,"fg",props.api.theme.current.textMuted,_$p))
1000
+ },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent13(Show7,{get when(){return model()
1001
+ },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))
952
1004
  return _el$
953
1005
  })()
954
- },children:(selected)=>(()=>{var _el$3=_$createElement9("box")
955
- _$setProp9(_el$3,"width","100%")
956
- _$setProp9(_el$3,"minWidth",0)
957
- _$setProp9(_el$3,"flexShrink",1)
958
- _$setProp9(_el$3,"overflow","hidden")
959
- _$insert8(_el$3,_$createComponent12(LimitsModelRow,_$mergeProps(props,{get model(){return selected()
1006
+ },children:(selected)=>(()=>{var _el$3=_$createElement10("box")
1007
+ _$setProp10(_el$3,"width","100%")
1008
+ _$setProp10(_el$3,"minWidth",0)
1009
+ _$setProp10(_el$3,"flexShrink",1)
1010
+ _$setProp10(_el$3,"overflow","hidden")
1011
+ _$insert9(_el$3,_$createComponent13(LimitsModelRow,_$mergeProps(props,{get model(){return selected()
960
1012
  },get selection(){return props.modelSelection
961
1013
  }})),null)
962
- _$insert8(_el$3,_$createComponent12(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
1014
+ _$insert9(_el$3,_$createComponent13(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
963
1015
  }})),null)
964
- _$insert8(_el$3,_$createComponent12(Show6,{get when(){return _$memo7(()=>!!(snapshot()&&["ready","stale"].includes(snapshot().availability)))()?snapshot():undefined
965
- },children:(quota)=>_$createComponent12(QuotaSnapshotRows,{get api(){return props.api
1016
+ _$insert9(_el$3,_$createComponent13(Show7,{get when(){return _$memo7(()=>!!(snapshot()&&["ready","stale"].includes(snapshot().availability)))()?snapshot():undefined
1017
+ },children:(quota)=>_$createComponent13(QuotaSnapshotRows,{get api(){return props.api
966
1018
  },get snapshot(){return quota()
967
1019
  }})
968
1020
  }),null)
969
- _$insert8(_el$3,_$createComponent12(LimitsStatus,{get api(){return props.api
1021
+ _$insert9(_el$3,_$createComponent13(LimitsStatus,{get api(){return props.api
970
1022
  },get controller(){return props.controller
971
1023
  }}),null)
972
1024
  return _el$3
@@ -1042,13 +1094,17 @@ try{return await promise
1042
1094
  } finally{if(pending?.promise===promise)
1043
1095
  pending=undefined
1044
1096
  }}
1045
- function invalidate(){generation++
1097
+ function invalidate(eager=true){generation++
1098
+ if(eager)
1046
1099
  setConnections({})
1100
+ else{const active=lastModel&&key(lastModel)
1101
+ setConnections((values)=>Object.fromEntries(Object.entries(values).filter(([target])=>target===active)))
1102
+ }
1047
1103
  if(lastModel&&!disposed)
1048
1104
  read(lastModel)
1049
1105
  }
1050
1106
  const events=["credential.switched","credential.updated","integration.updated","provider.updated","server.connected"]
1051
- const unsubscribes=events.map((event)=>context.data.on(event,()=>untrack2(invalidate)))
1107
+ const unsubscribes=events.map((event)=>context.data.on(event,()=>untrack2(()=>invalidate(event!=="provider.updated"))))
1052
1108
  return{current(model){lastModel=model
1053
1109
  return{...model,hostConnection:connections()[key(model)]??{status:"loading"}}},async refresh(model){await read(model)
1054
1110
  },async validate(model,signal){const actual=await read(model,signal)
@@ -1102,10 +1158,6 @@ return model?bindCodexAccount(accountSource?.current(model)??model,preferences):
1102
1158
  if(model)
1103
1159
  await accountSource.refresh(model)
1104
1160
  }))
1105
- native?.onUpdated((providerID,modelID)=>{const selected=selectModel()
1106
- if(selected?.providerID===providerID&&selected.modelID===modelID)
1107
- controller.refresh()
1108
- })
1109
1161
  return{controller,codex,accountSource,selectModel,modelSelection:createLimitsModelSelection(api,selectModel,context)
1110
1162
  }}
1111
1163
  export{ProviderLimitsSection,bindCodexAccount,createCodexAppServerClient,createCodexQuotaAdapter,createOpenCodeV2AccountSource,createProviderLimitsController,createProviderQuotaIntegration,selectedV1Model
@@ -1,5 +1,5 @@
1
1
  import {QUICK_ACTION_IDS,PLUGIN_ID
2
- } from "./chunk-cmmnfes2.js";
2
+ } from "./chunk-d1bws32s.js";
3
3
  import {memo as _$memo} from "@opentui/solid"
4
4
  import {createComponent as _$createComponent} from "@opentui/solid"
5
5
  import {use as _$use} from "@opentui/solid"