opencode-navigator 0.27.2 → 0.27.4

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.
@@ -134,6 +134,26 @@ return{...balance}})
134
134
  if(bankedResets&&(!Number.isSafeInteger(bankedResets.availableCount)||bankedResets.availableCount<0)){throw new Error("Invalid banked reset count")
135
135
  }
136
136
  return{...snapshot,windows,...balances&&{balances},...bankedResets&&{bankedResets:{availableCount:bankedResets.availableCount,...bankedResets.credits&&{credits:[...bankedResets.credits]}}}}}
137
+ function remainingLabel(seconds){if(seconds===0)
138
+ return "Expired"
139
+ if(seconds<60)
140
+ return "Expires in less than a minute"
141
+ for(const [unit,duration] of [["day",86400],["hour",3600],["minute",60]]){if(seconds<duration)
142
+ continue
143
+ const count=Math.ceil(seconds / duration)
144
+ return `Expires in ${count} ${unit}${count === 1 ? "" : "s"}`
145
+ }
146
+ return "Expiry not supplied by the provider"
147
+ }
148
+ function resetCreditLifetime(credit,now){const expiry=credit.expiresAt
149
+ if(expiry===undefined)
150
+ return{label:"Expiry not supplied by the provider",remaining:undefined,expired:false}
151
+ if(!Number.isFinite(expiry)||expiry<=0||!Number.isFinite(new Date(expiry*1000).getTime()))
152
+ return{label:"Expiry date is invalid",remaining:undefined,expired:false}
153
+ const seconds=Math.max(0,expiry-now / 1000)
154
+ const lifetime=expiry-credit.grantedAt
155
+ const remaining=Number.isFinite(credit.grantedAt)&&credit.grantedAt>=0&&lifetime>0?Math.max(0,Math.min(1,seconds / lifetime)):undefined
156
+ return{label:remainingLabel(seconds),remaining,expired:seconds===0}}
137
157
  var CHATGPT_METHODS=new Set(["chatgpt-browser","chatgpt-headless"])
138
158
  function providerAccountIdentity(provider,credentials){if(!provider.integrationID||provider.activation==="disabled")
139
159
  return{status:"unsupported"}
@@ -528,8 +548,8 @@ return _p$
528
548
  return _el$
529
549
  })()
530
550
  }
531
- import {createComponent as _$createComponent3} from "@opentui/solid"
532
- import {createEffect} from "solid-js"
551
+ import {createComponent as _$createComponent4} from "@opentui/solid"
552
+ import {Show as Show2,createEffect,createSignal as createSignal6,onCleanup} from "solid-js"
533
553
  import {SelectionMenu,useDialogs} from "./tui.js"
534
554
  import {createComponent as _$createComponent2} from "@opentui/solid"
535
555
  import {randomUUID} from "crypto"
@@ -594,6 +614,76 @@ warn(error instanceof Error?error.message:"Credit eligibility is unavailable")
594
614
  }}
595
615
  return{review,consume,busy
596
616
  }}
617
+ import {createTextNode as _$createTextNode} from "@opentui/solid"
618
+ import {memo as _$memo} from "@opentui/solid"
619
+ import {createComponent as _$createComponent3} from "@opentui/solid"
620
+ import {effect as _$effect2} from "@opentui/solid"
621
+ import {insertNode as _$insertNode2} from "@opentui/solid"
622
+ import {insert as _$insert2} from "@opentui/solid"
623
+ import {setProp as _$setProp2} from "@opentui/solid"
624
+ import {createElement as _$createElement2} from "@opentui/solid"
625
+ import {Show,createSignal as createSignal5} from "solid-js"
626
+ import {subtleLineColor as subtleLineColor2,useIcons as useIcons2} from "./tui.js"
627
+ function ResetCreditExpiry(props){const icons=useIcons2()
628
+ const [columns,setColumns]=createSignal5(0)
629
+ const lifetime=()=>resetCreditLifetime(props.credit,props.now)
630
+ const expiry=()=>{const timestamp=props.credit.expiresAt
631
+ if(timestamp===undefined||timestamp<=0)
632
+ return
633
+ const date=new Date(timestamp*1000)
634
+ return Number.isFinite(date.getTime())?date:undefined
635
+ }
636
+ const scale=()=>{const width=Math.max(0,Math.floor(columns()))
637
+ const filled=Math.round((lifetime().remaining??0)*width)
638
+ const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
639
+ return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(width-filled)
640
+ }}
641
+ return(()=>{var _el$=_$createElement2("box"),_el$4=_$createElement2("text")
642
+ _$insertNode2(_el$,_el$4)
643
+ _$setProp2(_el$,"width","100%")
644
+ _$setProp2(_el$,"minWidth",0)
645
+ _$setProp2(_el$,"overflow","hidden")
646
+ _$setProp2(_el$,"onSizeChange",function(){setColumns(this.width)
647
+ })
648
+ _$insert2(_el$,_$createComponent3(Show,{get when(){return lifetime().remaining!==undefined
649
+ },get children(){var _el$2=_$createElement2("text"),_el$3=_$createElement2("span")
650
+ _$insertNode2(_el$2,_el$3)
651
+ _$setProp2(_el$2,"height",1)
652
+ _$setProp2(_el$2,"width","100%")
653
+ _$setProp2(_el$2,"wrapMode","none")
654
+ _$setProp2(_el$2,"truncate",true)
655
+ _$insert2(_el$2,()=>scale().filled,_el$3)
656
+ _$insert2(_el$3,()=>scale().unfilled)
657
+ _$effect2((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:subtleLineColor2(props.api.theme.current.backgroundElement,props.api.theme.current.borderSubtle)
658
+ }
659
+ _v$!==_p$.e&&(_p$.e=_$setProp2(_el$2,"fg",_v$,_p$.e))
660
+ _v$2!==_p$.t&&(_p$.t=_$setProp2(_el$3,"style",_v$2,_p$.t))
661
+ return _p$
662
+ },{e:undefined,t:undefined
663
+ })
664
+ return _el$2
665
+ }}),_el$4)
666
+ _$setProp2(_el$4,"wrapMode","word")
667
+ _$insert2(_el$4,()=>lifetime().label)
668
+ _$insert2(_el$,_$createComponent3(Show,{get when(){return expiry()
669
+ },children:(date)=>(()=>{var _el$7=_$createElement2("text")
670
+ _$setProp2(_el$7,"wrapMode","word")
671
+ _$insert2(_el$7,()=>`Expires ${date().toLocaleString()}`)
672
+ _$effect2((_$p)=>_$setProp2(_el$7,"fg",props.api.theme.current.textMuted,_$p))
673
+ return _el$7
674
+ })()
675
+ }),null)
676
+ _$insert2(_el$,_$createComponent3(Show,{get when(){return _$memo(()=>lifetime().remaining===undefined)()&&expiry()
677
+ },get children(){var _el$5=_$createElement2("text")
678
+ _$insertNode2(_el$5,_$createTextNode(`Grant date unavailable or invalid; progress unknown`))
679
+ _$setProp2(_el$5,"wrapMode","word")
680
+ _$effect2((_$p)=>_$setProp2(_el$5,"fg",props.api.theme.current.textMuted,_$p))
681
+ return _el$5
682
+ }}),null)
683
+ _$effect2((_$p)=>_$setProp2(_el$4,"fg",props.api.theme.current.textMuted,_$p))
684
+ return _el$
685
+ })()
686
+ }
597
687
  function ResetCreditDialog(props){const dialogs=useDialogs(props.api)
598
688
  const key=JSON.stringify(props.model)
599
689
  const current=()=>JSON.stringify(props.controller.current().model)===key
@@ -601,19 +691,27 @@ const pending=props.preferences.pendingResetAttempt
601
691
  const credits=()=>props.controller.snapshot()?.bankedResets
602
692
  const actions=createResetCreditActions({...props,dialogs,current
603
693
  })
694
+ const [now,setNow]=createSignal6(Date.now())
695
+ const timer=setInterval(()=>setNow(Date.now()),30000)
696
+ onCleanup(()=>clearInterval(timer))
604
697
  createEffect(()=>{if(!current())
605
698
  dialogs.close()
606
699
  })
607
- const options=()=>[...credits()?.credits?.map((credit)=>({title:credit.title??`Credit ${credit.id}`,value:`credit:${credit.id}`,icon:"presets",description:[credit.status,credit.description,credit.expiresAt&&`expires ${new Date(credit.expiresAt * 1000).toLocaleString()}`].filter(Boolean).join(" \xB7 ")
700
+ const options=()=>[...credits()?.credits?.map((credit)=>({title:credit.title??`Credit ${credit.id}`,value:`credit:${credit.id}`,icon:"presets",description:[credit.status,credit.description].filter(Boolean).join(" \xB7 ")
608
701
  }))??[],...credits()?.availableCount&&(credits()?.credits?.length??0)<credits().availableCount?[{title:"Use next available credit",value:"credit:",icon:"presets",description:"Credit details unavailable"
609
702
  }]:[],...pending()?[{title:"Reconcile pending attempt",value:"retry",icon:"retry",description:"Reuse the previous idempotency key"
610
703
  }]:[],{title:"Cancel",value:"cancel",icon:"close",description:"No credit is used"
611
704
  }]
612
- return _$createComponent3(SelectionMenu,{get api(){return props.api
705
+ return _$createComponent4(SelectionMenu,{get api(){return props.api
613
706
  },get title(){return `Banked resets \xB7 ${credits()?.availableCount ?? 0} available${actions.busy() ? " \xB7 pending" : ""}`
614
707
  },get options(){return options()
615
- },get height(){return Math.min(18,options().length*3)
616
- },onSelect:(option)=>{if(option.value==="cancel")
708
+ },get height(){return Math.min(22,options().length*6)
709
+ },adaptive:true,renderDetails:(option)=>_$createComponent4(Show2,{get when(){return credits()?.credits?.find((credit)=>option.value===`credit:${credit.id}`)
710
+ },children:(credit)=>_$createComponent4(ResetCreditExpiry,{get api(){return props.api
711
+ },get credit(){return credit()
712
+ },get now(){return now()
713
+ }})
714
+ }),onSelect:(option)=>{if(option.value==="cancel")
617
715
  dialogs.back()
618
716
  else if(option.value==="retry")
619
717
  actions.consume(pending()?.creditID)
@@ -621,56 +719,56 @@ else if(option.value.startsWith("credit:"))
621
719
  actions.review(option.value.slice("credit:".length)||undefined)
622
720
  }})
623
721
  }
624
- import {createComponent as _$createComponent5} from "@opentui/solid"
625
- import {For as For2,Show} from "solid-js"
626
- import {effect as _$effect2} from "@opentui/solid"
627
- import {insertNode as _$insertNode2} from "@opentui/solid"
628
- import {insert as _$insert2} from "@opentui/solid"
629
- import {memo as _$memo} from "@opentui/solid"
630
- import {setProp as _$setProp2} from "@opentui/solid"
631
- import {createElement as _$createElement2} from "@opentui/solid"
632
- function QuotaBalanceRow(props){return(()=>{var _el$=_$createElement2("text"),_el$2=_$createElement2("span")
633
- _$insertNode2(_el$,_el$2)
634
- _$setProp2(_el$,"wrapMode","none")
635
- _$setProp2(_el$,"truncate",true)
636
- _$insert2(_el$2,(()=>{var _c$=_$memo(()=>!!props.balance.unlimited)
722
+ import {createComponent as _$createComponent6} from "@opentui/solid"
723
+ import {For as For2,Show as Show3} from "solid-js"
724
+ import {effect as _$effect3} from "@opentui/solid"
725
+ import {insertNode as _$insertNode3} from "@opentui/solid"
726
+ import {insert as _$insert3} from "@opentui/solid"
727
+ import {memo as _$memo2} from "@opentui/solid"
728
+ import {setProp as _$setProp3} from "@opentui/solid"
729
+ import {createElement as _$createElement3} from "@opentui/solid"
730
+ function QuotaBalanceRow(props){return(()=>{var _el$=_$createElement3("text"),_el$2=_$createElement3("span")
731
+ _$insertNode3(_el$,_el$2)
732
+ _$setProp3(_el$,"wrapMode","none")
733
+ _$setProp3(_el$,"truncate",true)
734
+ _$insert3(_el$2,(()=>{var _c$=_$memo2(()=>!!props.balance.unlimited)
637
735
  return()=>_c$()?"No configured cap":`${props.balance.amount} ${props.balance.unit ?? "(provider unit not specified)"}`
638
736
  })())
639
- _$insert2(_el$,()=>` \xB7 ${props.balance.scope} \xB7 ${props.balance.label}`,null)
640
- _$effect2((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:props.api.theme.current.text
737
+ _$insert3(_el$,()=>` \xB7 ${props.balance.scope} \xB7 ${props.balance.label}`,null)
738
+ _$effect3((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:props.api.theme.current.text
641
739
  }
642
- _v$!==_p$.e&&(_p$.e=_$setProp2(_el$,"fg",_v$,_p$.e))
643
- _v$2!==_p$.t&&(_p$.t=_$setProp2(_el$2,"style",_v$2,_p$.t))
740
+ _v$!==_p$.e&&(_p$.e=_$setProp3(_el$,"fg",_v$,_p$.e))
741
+ _v$2!==_p$.t&&(_p$.t=_$setProp3(_el$2,"style",_v$2,_p$.t))
644
742
  return _p$
645
743
  },{e:undefined,t:undefined
646
744
  })
647
745
  return _el$
648
746
  })()
649
747
  }
650
- import {insert as _$insert3} from "@opentui/solid"
651
- import {createComponent as _$createComponent4} from "@opentui/solid"
652
- import {setProp as _$setProp3} from "@opentui/solid"
653
- import {createElement as _$createElement3} from "@opentui/solid"
748
+ import {insert as _$insert4} from "@opentui/solid"
749
+ import {createComponent as _$createComponent5} from "@opentui/solid"
750
+ import {setProp as _$setProp4} from "@opentui/solid"
751
+ import {createElement as _$createElement4} from "@opentui/solid"
654
752
  import {For} from "solid-js"
655
- function QuotaWindowGroup(props){return(()=>{var _el$=_$createElement3("box")
656
- _$setProp3(_el$,"width","100%")
657
- _$setProp3(_el$,"minWidth",0)
658
- _$setProp3(_el$,"gap",1)
659
- _$setProp3(_el$,"overflow","hidden")
660
- _$insert3(_el$,_$createComponent4(For,{get each(){return props.windows.map((window)=>window.id)
661
- },children:(_,index)=>_$createComponent4(QuotaWindowRow,{get api(){return props.api
753
+ function QuotaWindowGroup(props){return(()=>{var _el$=_$createElement4("box")
754
+ _$setProp4(_el$,"width","100%")
755
+ _$setProp4(_el$,"minWidth",0)
756
+ _$setProp4(_el$,"gap",1)
757
+ _$setProp4(_el$,"overflow","hidden")
758
+ _$insert4(_el$,_$createComponent5(For,{get each(){return props.windows.map((window)=>window.id)
759
+ },children:(_,index)=>_$createComponent5(QuotaWindowRow,{get api(){return props.api
662
760
  },get window(){return props.windows[index()]
663
761
  }})
664
762
  }))
665
763
  return _el$
666
764
  })()
667
765
  }
668
- function QuotaSnapshotRows(props){return [_$createComponent5(Show,{get when(){return props.snapshot.windows.length>0
669
- },get children(){return _$createComponent5(QuotaWindowGroup,{get api(){return props.api
766
+ function QuotaSnapshotRows(props){return [_$createComponent6(Show3,{get when(){return props.snapshot.windows.length>0
767
+ },get children(){return _$createComponent6(QuotaWindowGroup,{get api(){return props.api
670
768
  },get windows(){return props.snapshot.windows
671
769
  }})
672
- }}),_$createComponent5(For2,{get each(){return props.snapshot.balances
673
- },children:(balance)=>_$createComponent5(QuotaBalanceRow,{get api(){return props.api
770
+ }}),_$createComponent6(For2,{get each(){return props.snapshot.balances
771
+ },children:(balance)=>_$createComponent6(QuotaBalanceRow,{get api(){return props.api
674
772
  },balance
675
773
  })
676
774
  })]
@@ -720,8 +818,8 @@ function providerQuotaCapability(id,canonical){const key=aliases[canonical??id]?
720
818
  const found=PROVIDER_QUOTA_CAPABILITIES.find((entry)=>entry.id===key)
721
819
  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/"]
722
820
  }}
723
- import {createSignal as createSignal5} from "solid-js"
724
- function createOpenCodeUsageAdapter(context){const [revision,setRevision]=createSignal5(0)
821
+ import {createSignal as createSignal7} from "solid-js"
822
+ function createOpenCodeUsageAdapter(context){const [revision,setRevision]=createSignal7(0)
725
823
  let generation=0
726
824
  const location=()=>context.location??context.data.location.default()
727
825
  const provider=(model)=>context.data.location.provider?.list(location())?.find((item)=>item.id===model.providerID)
@@ -779,33 +877,33 @@ return{model,providerId:model.providerID,providerName:activeProvider.name,fetche
779
877
  dispose()
780
878
  }}
781
879
  return{adapter,target:(model)=>({...model,quotaContext:key()})}}
782
- import {insert as _$insert9} from "@opentui/solid"
880
+ import {insert as _$insert10} from "@opentui/solid"
783
881
  import {mergeProps as _$mergeProps} from "@opentui/solid"
784
- import {setProp as _$setProp10} from "@opentui/solid"
785
- import {effect as _$effect9} from "@opentui/solid"
786
- import {createTextNode as _$createTextNode4} from "@opentui/solid"
787
- import {insertNode as _$insertNode6} from "@opentui/solid"
788
- import {createElement as _$createElement10} from "@opentui/solid"
789
- import {memo as _$memo7} from "@opentui/solid"
790
- import {createComponent as _$createComponent13} from "@opentui/solid"
791
- import {Show as Show7} from "solid-js"
882
+ import {setProp as _$setProp11} from "@opentui/solid"
883
+ import {effect as _$effect10} from "@opentui/solid"
884
+ import {createTextNode as _$createTextNode5} from "@opentui/solid"
885
+ import {insertNode as _$insertNode7} from "@opentui/solid"
886
+ import {createElement as _$createElement11} from "@opentui/solid"
887
+ import {memo as _$memo8} from "@opentui/solid"
888
+ import {createComponent as _$createComponent14} from "@opentui/solid"
889
+ import {Show as Show9} from "solid-js"
792
890
  import {useDialogs as useDialogs3} from "./tui.js"
793
- import {setProp as _$setProp5} from "@opentui/solid"
891
+ import {setProp as _$setProp6} from "@opentui/solid"
892
+ import {effect as _$effect5} from "@opentui/solid"
893
+ import {createTextNode as _$createTextNode2} from "@opentui/solid"
894
+ import {insertNode as _$insertNode4} from "@opentui/solid"
895
+ import {createElement as _$createElement6} from "@opentui/solid"
896
+ import {memo as _$memo3} from "@opentui/solid"
897
+ import {createComponent as _$createComponent8} from "@opentui/solid"
898
+ import {Show as Show4} from "solid-js"
899
+ import {useDialogs as useDialogs2,useIcons as useIcons3} from "./tui.js"
900
+ import {createComponent as _$createComponent7} from "@opentui/solid"
794
901
  import {effect as _$effect4} from "@opentui/solid"
795
- import {createTextNode as _$createTextNode} from "@opentui/solid"
796
- import {insertNode as _$insertNode3} from "@opentui/solid"
902
+ import {insert as _$insert5} from "@opentui/solid"
903
+ import {setProp as _$setProp5} from "@opentui/solid"
797
904
  import {createElement as _$createElement5} from "@opentui/solid"
798
- import {memo as _$memo2} from "@opentui/solid"
799
- import {createComponent as _$createComponent7} from "@opentui/solid"
800
- import {Show as Show2} from "solid-js"
801
- import {useDialogs as useDialogs2,useIcons as useIcons2} from "./tui.js"
802
- import {createComponent as _$createComponent6} from "@opentui/solid"
803
- import {effect as _$effect3} from "@opentui/solid"
804
- import {insert as _$insert4} from "@opentui/solid"
805
- import {setProp as _$setProp4} from "@opentui/solid"
806
- import {createElement as _$createElement4} from "@opentui/solid"
807
905
  import {SelectionBox} from "./tui.js"
808
- import {createSignal as createSignal6,onCleanup} from "solid-js"
906
+ import {createSignal as createSignal8,onCleanup as onCleanup2} from "solid-js"
809
907
  function sidebarInteractiveColors(theme,state,normalColor=theme.text,mode="row"){const highlighted=!state.disabled&&(state.focused||mode==="control"&&state.hovered)
810
908
  let backgroundColor=theme.backgroundPanel
811
909
  let foregroundColor=normalColor
@@ -821,14 +919,14 @@ else if(highlighted)
821
919
  foregroundColor=theme.selectedListItemText
822
920
  return{backgroundColor,foregroundColor}}
823
921
  function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
824
- const [hovered,setHovered]=createSignal6(false)
922
+ const [hovered,setHovered]=createSignal8(false)
825
923
  const disabled=()=>descriptor.disabled?.()===true
826
924
  const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
827
925
  const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
828
926
  const ref=(renderable)=>{unregister?.()
829
927
  unregister=interaction?.register({...descriptor,renderable})
830
928
  }
831
- onCleanup(()=>unregister?.())
929
+ onCleanup2(()=>unregister?.())
832
930
  return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
833
931
  },activate(event){if(interaction)
834
932
  return interaction.mouseActivate(descriptor.id,event)
@@ -839,7 +937,7 @@ return true
839
937
  }}}
840
938
  function LimitsAction(props){const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>props.disabled===true,activate:props.onActivate
841
939
  },()=>props.api.theme.current.text,props.inline?"control":"row")
842
- return _$createComponent6(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
940
+ return _$createComponent7(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
843
941
  },height:1,get flexGrow(){return props.flexGrow
844
942
  },get maxWidth(){return props.maxWidth
845
943
  },flexShrink:1,minWidth:3,get backgroundColor(){return item.backgroundColor()
@@ -847,48 +945,48 @@ return _$createComponent6(SelectionBox,{ref:(node)=>item.ref(node),get id(){retu
847
945
  },get onMouseOut(){return item.onMouseOut
848
946
  },onMouseUp:(event)=>{event.stopPropagation()
849
947
  item.activate(event)
850
- },get children(){var _el$=_$createElement4("text")
851
- _$setProp4(_el$,"wrapMode","none")
852
- _$setProp4(_el$,"truncate",true)
853
- _$insert4(_el$,()=>props.label)
854
- _$effect3((_$p)=>_$setProp4(_el$,"fg",item.foregroundColor(),_$p))
948
+ },get children(){var _el$=_$createElement5("text")
949
+ _$setProp5(_el$,"wrapMode","none")
950
+ _$setProp5(_el$,"truncate",true)
951
+ _$insert5(_el$,()=>props.label)
952
+ _$effect4((_$p)=>_$setProp5(_el$,"fg",item.foregroundColor(),_$p))
855
953
  return _el$
856
954
  }})
857
955
  }
858
- function CodexAccountControls(props){const icons=useIcons2()
956
+ function CodexAccountControls(props){const icons=useIcons3()
859
957
  const model=()=>props.controller.current().model
860
958
  const accountLink=createCodexAccountLink({api:props.api,preferences:props.preferences,adapter:props.codex,model,dialogs:useDialogs2(props.api)
861
959
  })
862
960
  const eligible=()=>(props.model.providerID==="openai"||props.model.hostConnection?.providerID==="openai")&&props.model.hostConnection?.method!=="api"
863
- const action=(id,row,label,onActivate)=>_$createComponent7(LimitsAction,{get api(){return props.api
961
+ const action=(id,row,label,onActivate)=>_$createComponent8(LimitsAction,{get api(){return props.api
864
962
  },get interaction(){return props.interaction
865
963
  },id:`${PLUGIN_ID}.limits.${id}`,get position(){return{section:props.navigationSection,row,column:0
866
964
  }},label,onActivate,get disabled(){return accountLink.busy()
867
965
  }})
868
- return _$createComponent7(Show2,{get when(){return eligible()
869
- },get children(){return [_$createComponent7(Show2,{get when(){return _$memo2(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
870
- },get children(){return [(()=>{var _el$=_$createElement5("text")
871
- _$insertNode3(_el$,_$createTextNode(`Link the matching Codex account once for this connection`))
872
- _$effect4((_$p)=>_$setProp5(_el$,"fg",props.api.theme.current.textMuted,_$p))
966
+ return _$createComponent8(Show4,{get when(){return eligible()
967
+ },get children(){return [_$createComponent8(Show4,{get when(){return _$memo3(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
968
+ },get children(){return [(()=>{var _el$=_$createElement6("text")
969
+ _$insertNode4(_el$,_$createTextNode2(`Link the matching Codex account once for this connection`))
970
+ _$effect5((_$p)=>_$setProp6(_el$,"fg",props.api.theme.current.textMuted,_$p))
873
971
  return _el$
874
- })(),_$memo2(()=>action("link",2,`${icons.icon("scope")} Link Codex CLI account`,()=>void accountLink.link()))]
875
- }}),_$createComponent7(Show2,{get when(){return _$memo2(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
876
- },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"
972
+ })(),_$memo3(()=>action("link",2,`${icons.icon("scope")} Link Codex CLI account`,()=>void accountLink.link()))]
973
+ }}),_$createComponent8(Show4,{get when(){return _$memo3(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
974
+ },get children(){return [_$memo3(()=>action("unlink",4,`${icons.icon("close")} Unlink Codex account`,()=>props.preferences.setCodexConnectionBinding(props.model.providerID,props.model.hostConnection?.id))),_$createComponent8(Show4,{get when(){return props.controller.snapshot()?.availability==="unauthenticated"
877
975
  },get children(){return action("relink",5,`${icons.icon("scope")} Relink Codex account`,()=>void accountLink.link())
878
976
  }})]
879
977
  }})]
880
978
  }})
881
979
  }
980
+ import {createComponent as _$createComponent10} from "@opentui/solid"
981
+ import {Show as Show5} from "solid-js"
982
+ import {useIcons as useIcons4} from "./tui.js"
882
983
  import {createComponent as _$createComponent9} from "@opentui/solid"
883
- import {Show as Show3} from "solid-js"
884
- import {useIcons as useIcons3} from "./tui.js"
885
- import {createComponent as _$createComponent8} from "@opentui/solid"
886
- import {effect as _$effect5} from "@opentui/solid"
887
- import {insert as _$insert5} from "@opentui/solid"
888
- import {setProp as _$setProp6} from "@opentui/solid"
889
- import {createElement as _$createElement6} from "@opentui/solid"
890
- import {memo as _$memo3} from "@opentui/solid"
891
- import {createEffect as createEffect2,createSignal as createSignal7,on} from "solid-js"
984
+ import {effect as _$effect6} from "@opentui/solid"
985
+ import {insert as _$insert6} from "@opentui/solid"
986
+ import {setProp as _$setProp7} from "@opentui/solid"
987
+ import {createElement as _$createElement7} from "@opentui/solid"
988
+ import {memo as _$memo4} from "@opentui/solid"
989
+ import {createEffect as createEffect2,createSignal as createSignal9,on} from "solid-js"
892
990
  import {SelectionBox as SelectionBox2} from "./tui.js"
893
991
  var graphemes=new Intl.Segmenter(undefined,{granularity:"grapheme"
894
992
  })
@@ -905,12 +1003,12 @@ result += segment
905
1003
  }
906
1004
  return result + ellipsis
907
1005
  }
908
- function SectionHeaderControl(props){const [width,setWidth]=createSignal7()
1006
+ function SectionHeaderControl(props){const [width,setWidth]=createSignal9()
909
1007
  const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
910
1008
  },()=>props.api.theme.current.accent,"control")
911
1009
  createEffect2(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
912
1010
  const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
913
- return _$createComponent8(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
1011
+ return _$createComponent9(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
914
1012
  },get iconOnly(){return props.iconOnly
915
1013
  },get width(){return props.iconOnly?3:undefined
916
1014
  },get flexShrink(){return props.iconOnly?0:1
@@ -921,42 +1019,42 @@ return _$createComponent8(SelectionBox2,{ref:(node)=>control.ref(node),get id(){
921
1019
  },get onMouseOut(){return control.onMouseOut
922
1020
  },onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
923
1021
  control.activate(event)
924
- },get children(){var _el$=_$createElement6("text")
925
- _$setProp6(_el$,"wrapMode","none")
926
- _$setProp6(_el$,"height",1)
927
- _$insert5(_el$,label)
928
- _$effect5((_$p)=>_$setProp6(_el$,"fg",control.foregroundColor(),_$p))
1022
+ },get children(){var _el$=_$createElement7("text")
1023
+ _$setProp7(_el$,"wrapMode","none")
1024
+ _$setProp7(_el$,"height",1)
1025
+ _$insert6(_el$,label)
1026
+ _$effect6((_$p)=>_$setProp7(_el$,"fg",control.foregroundColor(),_$p))
929
1027
  return _el$
930
1028
  }})
931
1029
  }
932
- function LimitsHeaderControls(props){const icons=useIcons3()
933
- return [_$createComponent9(Show3,{get when(){return props.credits
934
- },get children(){return _$createComponent9(SectionHeaderControl,{get api(){return props.api
1030
+ function LimitsHeaderControls(props){const icons=useIcons4()
1031
+ return [_$createComponent10(Show5,{get when(){return props.credits
1032
+ },get children(){return _$createComponent10(SectionHeaderControl,{get api(){return props.api
935
1033
  },get interaction(){return props.interaction
936
1034
  },get position(){return{section:props.navigationSection,row:0,column:1
937
1035
  }},get action(){return{id:`${PLUGIN_ID}.limits.credits`,label:()=>"Banked Resets",disabled:()=>false,onActivate:props.onCredits
938
1036
  }}})
939
- }}),_$createComponent9(SectionHeaderControl,{get api(){return props.api
1037
+ }}),_$createComponent10(SectionHeaderControl,{get api(){return props.api
940
1038
  },get interaction(){return props.interaction
941
1039
  },iconOnly:true,get position(){return{section:props.navigationSection,row:0,column:2
942
1040
  }},get action(){return{id:`${PLUGIN_ID}.limits.refresh`,label:()=>icons.icon(props.refreshing?"pending":"retry"),disabled:()=>props.refreshing||!props.canRefresh,onActivate:props.onRefresh
943
1041
  }}})]
944
1042
  }
945
- import {insert as _$insert6} from "@opentui/solid"
946
- import {effect as _$effect6} from "@opentui/solid"
947
- import {createTextNode as _$createTextNode2} from "@opentui/solid"
948
- import {insertNode as _$insertNode4} from "@opentui/solid"
949
- import {memo as _$memo4} from "@opentui/solid"
950
- import {createComponent as _$createComponent10} from "@opentui/solid"
951
- import {setProp as _$setProp7} from "@opentui/solid"
952
- import {createElement as _$createElement7} from "@opentui/solid"
953
- import {Show as Show4} from "solid-js"
1043
+ import {insert as _$insert7} from "@opentui/solid"
1044
+ import {effect as _$effect7} from "@opentui/solid"
1045
+ import {createTextNode as _$createTextNode3} from "@opentui/solid"
1046
+ import {insertNode as _$insertNode5} from "@opentui/solid"
1047
+ import {memo as _$memo5} from "@opentui/solid"
1048
+ import {createComponent as _$createComponent11} from "@opentui/solid"
1049
+ import {setProp as _$setProp8} from "@opentui/solid"
1050
+ import {createElement as _$createElement8} from "@opentui/solid"
1051
+ import {Show as Show6} from "solid-js"
954
1052
  function LimitsModelRow(props){const names=()=>props.selection?.names(props.model)??{provider:props.model.providerID,model:props.model.modelID
955
1053
  }
956
- return(()=>{var _el$=_$createElement7("box")
957
- _$setProp7(_el$,"flexDirection","row")
958
- _$setProp7(_el$,"minWidth",0)
959
- _$insert6(_el$,_$createComponent10(LimitsAction,{get api(){return props.api
1054
+ return(()=>{var _el$=_$createElement8("box")
1055
+ _$setProp8(_el$,"flexDirection","row")
1056
+ _$setProp8(_el$,"minWidth",0)
1057
+ _$insert7(_el$,_$createComponent11(LimitsAction,{get api(){return props.api
960
1058
  },get interaction(){return props.interaction
961
1059
  },inline:true,flexGrow:1,get maxWidth(){return Bun.stringWidth(`[${names().provider}] ${names().model}`) + 2
962
1060
  },id:`${PLUGIN_ID}.limits.model`,get position(){return{section:props.navigationSection,row:1,column:0
@@ -964,13 +1062,13 @@ _$insert6(_el$,_$createComponent10(LimitsAction,{get api(){return props.api
964
1062
  },get disabled(){return !props.selection?.canOpen("model",props.model)
965
1063
  },onActivate:()=>props.selection?.open("model",props.model)
966
1064
  }),null)
967
- _$insert6(_el$,_$createComponent10(Show4,{get when(){return props.model.variant||props.selection?.variants(props.model).length
968
- },get children(){return [(()=>{var _el$2=_$createElement7("text"),_el$3=_$createTextNode2(` \xB7 `)
969
- _$insertNode4(_el$2,_el$3)
970
- _$setProp7(_el$2,"flexShrink",0)
971
- _$effect6((_$p)=>_$setProp7(_el$2,"fg",props.api.theme.current.textMuted,_$p))
1065
+ _$insert7(_el$,_$createComponent11(Show6,{get when(){return props.model.variant||props.selection?.variants(props.model).length
1066
+ },get children(){return [(()=>{var _el$2=_$createElement8("text"),_el$3=_$createTextNode3(` \xB7 `)
1067
+ _$insertNode5(_el$2,_el$3)
1068
+ _$setProp8(_el$2,"flexShrink",0)
1069
+ _$effect7((_$p)=>_$setProp8(_el$2,"fg",props.api.theme.current.textMuted,_$p))
972
1070
  return _el$2
973
- })(),_$createComponent10(LimitsAction,{get api(){return props.api
1071
+ })(),_$createComponent11(LimitsAction,{get api(){return props.api
974
1072
  },get interaction(){return props.interaction
975
1073
  },inline:true,id:`${PLUGIN_ID}.limits.variant`,get position(){return{section:props.navigationSection,row:1,column:1
976
1074
  }},get label(){return props.model.variant??"Default"
@@ -981,15 +1079,15 @@ return _el$2
981
1079
  return _el$
982
1080
  })()
983
1081
  }
984
- import {effect as _$effect7} from "@opentui/solid"
985
- import {insert as _$insert7} from "@opentui/solid"
986
- import {setProp as _$setProp8} from "@opentui/solid"
987
- import {createElement as _$createElement8} from "@opentui/solid"
988
- import {createComponent as _$createComponent11} from "@opentui/solid"
989
- import {memo as _$memo5} from "@opentui/solid"
990
- import {Show as Show5} from "solid-js"
991
- import {createSignal as createSignal8} from "solid-js"
992
- function createProviderAccountSource(ports){const [connections,setConnections]=createSignal8({})
1082
+ import {effect as _$effect8} from "@opentui/solid"
1083
+ import {insert as _$insert8} from "@opentui/solid"
1084
+ import {setProp as _$setProp9} from "@opentui/solid"
1085
+ import {createElement as _$createElement9} from "@opentui/solid"
1086
+ import {createComponent as _$createComponent12} from "@opentui/solid"
1087
+ import {memo as _$memo6} from "@opentui/solid"
1088
+ import {Show as Show7} from "solid-js"
1089
+ import {createSignal as createSignal10} from "solid-js"
1090
+ function createProviderAccountSource(ports){const [connections,setConnections]=createSignal10({})
993
1091
  let generation=0
994
1092
  let disposed=false
995
1093
  let lastModel
@@ -1047,12 +1145,12 @@ return{...model,accountID:undefined,accountSource:undefined}
1047
1145
  const accountID=connection?.accountID??preferences?.codexAccountForConnection(model.providerID,connection?.id,model.modelID)
1048
1146
  const accountSource=connection?.accountID?"host":"binding"
1049
1147
  return{...model,accountID,accountSource:accountID?accountSource:undefined}}
1050
- import {createEffect as createEffect3,createMemo,on as on2,onCleanup as onCleanup2} from "solid-js"
1148
+ import {createEffect as createEffect3,createMemo,on as on2,onCleanup as onCleanup3} from "solid-js"
1051
1149
  function quotaStatusMessage(input){const{model,snapshot,state}=input
1052
1150
  if(state.status==="error")
1053
1151
  return snapshot?"Stale \xB7 refresh failed":"Quota read failed \xB7 refresh to retry"
1054
- if(!input.showReadyMessage&&snapshot?.availability==="ready"&&(snapshot.windows.length>0||snapshot.balances?.length))
1055
- return
1152
+ if(snapshot?.availability==="ready"&&(snapshot.windows.length>0||snapshot.balances?.length))
1153
+ return input.showUpdatedAt?`Updated ${new Date(snapshot.fetchedAt).toLocaleTimeString()}`:undefined
1056
1154
  if(snapshot?.message){if(snapshot.availability==="stale")
1057
1155
  return `Stale \xB7 ${snapshot.message}`
1058
1156
  return snapshot.availability==="ready"?`Updated ${new Date(snapshot.fetchedAt).toLocaleTimeString()} \xB7 ${snapshot.message}`:snapshot.message
@@ -1076,8 +1174,6 @@ if(snapshot.availability==="rate_limited")
1076
1174
  return "Provider rate-limited this read \xB7 try again later"
1077
1175
  if(snapshot.availability==="stale")
1078
1176
  return "Stale provider data \xB7 refresh to update"
1079
- if(snapshot.availability==="ready"&&input.showReadyMessage&&(snapshot.windows.length>0||snapshot.balances?.length))
1080
- return
1081
1177
  return `Updated ${new Date(snapshot.fetchedAt).toLocaleTimeString()}`
1082
1178
  }
1083
1179
  function LimitsStatus(props){const message=()=>{const{model,adapter
@@ -1085,85 +1181,85 @@ function LimitsStatus(props){const message=()=>{const{model,adapter
1085
1181
  return quotaStatusMessage({model,snapshot:props.controller.snapshot(),state:props.controller.state(),hasAdapter:Boolean(adapter)
1086
1182
  })
1087
1183
  }
1088
- return _$createComponent11(Show5,{get when(){return _$memo5(()=>!!props.controller.current().model)()&&message()
1089
- },children:(value)=>(()=>{var _el$=_$createElement8("text")
1090
- _$setProp8(_el$,"wrapMode","word")
1091
- _$insert7(_el$,value)
1092
- _$effect7((_$p)=>_$setProp8(_el$,"fg",props.api.theme.current.textMuted,_$p))
1184
+ return _$createComponent12(Show7,{get when(){return _$memo6(()=>!!props.controller.current().model)()&&message()
1185
+ },children:(value)=>(()=>{var _el$=_$createElement9("text")
1186
+ _$setProp9(_el$,"wrapMode","word")
1187
+ _$insert8(_el$,value)
1188
+ _$effect8((_$p)=>_$setProp9(_el$,"fg",props.api.theme.current.textMuted,_$p))
1093
1189
  return _el$
1094
1190
  })()
1095
1191
  })
1096
1192
  }
1097
- import {createComponent as _$createComponent12} from "@opentui/solid"
1098
- import {effect as _$effect8} from "@opentui/solid"
1099
- import {createTextNode as _$createTextNode3} from "@opentui/solid"
1100
- import {insertNode as _$insertNode5} from "@opentui/solid"
1101
- import {memo as _$memo6} from "@opentui/solid"
1102
- import {insert as _$insert8} from "@opentui/solid"
1103
- import {setProp as _$setProp9} from "@opentui/solid"
1104
- import {createElement as _$createElement9} from "@opentui/solid"
1105
- import {Show as Show6,createSignal as createSignal9} from "solid-js"
1106
- import {SelectionBox as SelectionBox3,useIcons as useIcons4} from "./tui.js"
1107
- function Section(props){const icons=useIcons4()
1108
- const [headerWidth,setHeaderWidth]=createSignal9(0)
1193
+ import {createComponent as _$createComponent13} from "@opentui/solid"
1194
+ import {effect as _$effect9} from "@opentui/solid"
1195
+ import {createTextNode as _$createTextNode4} from "@opentui/solid"
1196
+ import {insertNode as _$insertNode6} from "@opentui/solid"
1197
+ import {memo as _$memo7} from "@opentui/solid"
1198
+ import {insert as _$insert9} from "@opentui/solid"
1199
+ import {setProp as _$setProp10} from "@opentui/solid"
1200
+ import {createElement as _$createElement10} from "@opentui/solid"
1201
+ import {Show as Show8,createSignal as createSignal11} from "solid-js"
1202
+ import {SelectionBox as SelectionBox3,useIcons as useIcons5} from "./tui.js"
1203
+ function Section(props){const icons=useIcons5()
1204
+ const [headerWidth,setHeaderWidth]=createSignal11(0)
1109
1205
  const icon=()=>props.section?icons.section(props.section):props.icon
1110
1206
  const theme=()=>props.api.theme.current
1111
1207
  const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
1112
1208
  }),activate:props.onToggle
1113
1209
  })
1114
- return(()=>{var _el$=_$createElement9("box")
1115
- _$setProp9(_el$,"gap",1)
1116
- _$insert8(_el$,_$createComponent12(SelectionBox3,{ref:(node)=>item.ref(node),get id(){return props.sectionId
1210
+ return(()=>{var _el$=_$createElement10("box")
1211
+ _$setProp10(_el$,"gap",1)
1212
+ _$insert9(_el$,_$createComponent13(SelectionBox3,{ref:(node)=>item.ref(node),get id(){return props.sectionId
1117
1213
  },flexDirection:"row",height:1,justifyContent:"space-between",gap:1,get backgroundColor(){return item.backgroundColor()
1118
1214
  },get onMouseOver(){return item.onMouseOver
1119
1215
  },get onMouseOut(){return item.onMouseOut
1120
1216
  },onMouseDown:(event)=>item.activate(event),onSizeChange:function(){setHeaderWidth(this.width)
1121
- },get children(){return [(()=>{var _el$2=_$createElement9("text"),_el$3=_$createElement9("span"),_el$4=_$createTextNode3(` `),_el$5=_$createElement9("span"),_el$6=_$createElement9("b")
1122
- _$insertNode5(_el$2,_el$3)
1123
- _$insertNode5(_el$2,_el$4)
1124
- _$insertNode5(_el$2,_el$5)
1125
- _$insertNode5(_el$2,_el$6)
1126
- _$setProp9(_el$2,"flexShrink",0)
1127
- _$setProp9(_el$2,"wrapMode","none")
1128
- _$insert8(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
1129
- _$insert8(_el$5,(()=>{var _c$=_$memo6(()=>!!icon())
1217
+ },get children(){return [(()=>{var _el$2=_$createElement10("text"),_el$3=_$createElement10("span"),_el$4=_$createTextNode4(` `),_el$5=_$createElement10("span"),_el$6=_$createElement10("b")
1218
+ _$insertNode6(_el$2,_el$3)
1219
+ _$insertNode6(_el$2,_el$4)
1220
+ _$insertNode6(_el$2,_el$5)
1221
+ _$insertNode6(_el$2,_el$6)
1222
+ _$setProp10(_el$2,"flexShrink",0)
1223
+ _$setProp10(_el$2,"wrapMode","none")
1224
+ _$insert9(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
1225
+ _$insert9(_el$5,(()=>{var _c$=_$memo7(()=>!!icon())
1130
1226
  return()=>_c$()?`${icon()} `:""
1131
1227
  })())
1132
- _$insert8(_el$6,()=>props.title)
1133
- _$effect8((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
1228
+ _$insert9(_el$6,()=>props.title)
1229
+ _$effect9((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
1134
1230
  },_v$3={fg:item.focused()?item.foregroundColor():theme().accent
1135
1231
  }
1136
- _v$!==_p$.e&&(_p$.e=_$setProp9(_el$2,"fg",_v$,_p$.e))
1137
- _v$2!==_p$.t&&(_p$.t=_$setProp9(_el$3,"style",_v$2,_p$.t))
1138
- _v$3!==_p$.a&&(_p$.a=_$setProp9(_el$5,"style",_v$3,_p$.a))
1232
+ _v$!==_p$.e&&(_p$.e=_$setProp10(_el$2,"fg",_v$,_p$.e))
1233
+ _v$2!==_p$.t&&(_p$.t=_$setProp10(_el$3,"style",_v$2,_p$.t))
1234
+ _v$3!==_p$.a&&(_p$.a=_$setProp10(_el$5,"style",_v$3,_p$.a))
1139
1235
  return _p$
1140
1236
  },{e:undefined,t:undefined,a:undefined
1141
1237
  })
1142
1238
  return _el$2
1143
- })(),(()=>{var _el$7=_$createElement9("box")
1144
- _$setProp9(_el$7,"flexDirection","row")
1145
- _$setProp9(_el$7,"gap",1)
1146
- _$setProp9(_el$7,"flexGrow",1)
1147
- _$setProp9(_el$7,"minWidth",0)
1148
- _$setProp9(_el$7,"justifyContent","flex-end")
1149
- _$insert8(_el$7,()=>props.headerControls,null)
1150
- _$insert8(_el$7,_$createComponent12(Show6,{get when(){return props.headerAction
1151
- },children:(action)=>_$createComponent12(SectionHeaderControl,{get api(){return props.api
1239
+ })(),(()=>{var _el$7=_$createElement10("box")
1240
+ _$setProp10(_el$7,"flexDirection","row")
1241
+ _$setProp10(_el$7,"gap",1)
1242
+ _$setProp10(_el$7,"flexGrow",1)
1243
+ _$setProp10(_el$7,"minWidth",0)
1244
+ _$setProp10(_el$7,"justifyContent","flex-end")
1245
+ _$insert9(_el$7,()=>props.headerControls,null)
1246
+ _$insert9(_el$7,_$createComponent13(Show8,{get when(){return props.headerAction
1247
+ },children:(action)=>_$createComponent13(SectionHeaderControl,{get api(){return props.api
1152
1248
  },get interaction(){return props.interaction
1153
1249
  },get action(){return action()
1154
1250
  },get resetWidth(){return headerWidth()
1155
1251
  },get position(){return{section:props.navigationSection??0,row:0,column:1
1156
1252
  }}})
1157
1253
  }),null)
1158
- _$insert8(_el$7,_$createComponent12(Show6,{get when(){return props.summary
1159
- },get children(){var _el$8=_$createElement9("text")
1160
- _$setProp9(_el$8,"wrapMode","none")
1161
- _$setProp9(_el$8,"truncate",true)
1162
- _$setProp9(_el$8,"height",1)
1163
- _$insert8(_el$8,()=>props.summary)
1164
- _$effect8((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
1165
- _v$4!==_p$.e&&(_p$.e=_$setProp9(_el$8,"fg",_v$4,_p$.e))
1166
- _v$5!==_p$.t&&(_p$.t=_$setProp9(_el$8,"flexShrink",_v$5,_p$.t))
1254
+ _$insert9(_el$7,_$createComponent13(Show8,{get when(){return props.summary
1255
+ },get children(){var _el$8=_$createElement10("text")
1256
+ _$setProp10(_el$8,"wrapMode","none")
1257
+ _$setProp10(_el$8,"truncate",true)
1258
+ _$setProp10(_el$8,"height",1)
1259
+ _$insert9(_el$8,()=>props.summary)
1260
+ _$effect9((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
1261
+ _v$4!==_p$.e&&(_p$.e=_$setProp10(_el$8,"fg",_v$4,_p$.e))
1262
+ _v$5!==_p$.t&&(_p$.t=_$setProp10(_el$8,"flexShrink",_v$5,_p$.t))
1167
1263
  return _p$
1168
1264
  },{e:undefined,t:undefined
1169
1265
  })
@@ -1172,7 +1268,7 @@ return _el$8
1172
1268
  return _el$7
1173
1269
  })()]
1174
1270
  }}),null)
1175
- _$insert8(_el$,_$createComponent12(Show6,{get when(){return props.open
1271
+ _$insert9(_el$,_$createComponent13(Show8,{get when(){return props.open
1176
1272
  },get children(){return props.children
1177
1273
  }}),null)
1178
1274
  return _el$
@@ -1183,17 +1279,17 @@ const model=()=>props.controller.current().model
1183
1279
  const snapshot=props.controller.snapshot
1184
1280
  function openCredits(){const selected=model()
1185
1281
  if(selected)
1186
- dialogs.open(()=>_$createComponent13(ResetCreditDialog,{get api(){return props.api
1282
+ dialogs.open(()=>_$createComponent14(ResetCreditDialog,{get api(){return props.api
1187
1283
  },get preferences(){return props.preferences
1188
1284
  },get controller(){return props.controller
1189
1285
  },get adapter(){return props.codex
1190
1286
  },model:selected
1191
1287
  }))
1192
1288
  }
1193
- return _$createComponent13(Section,{get api(){return props.api
1289
+ return _$createComponent14(Section,{get api(){return props.api
1194
1290
  },get interaction(){return props.interaction
1195
1291
  },sectionId:`${PLUGIN_ID}.section.limits`,get navigationSection(){return props.navigationSection
1196
- },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent13(LimitsHeaderControls,{get api(){return props.api
1292
+ },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent14(LimitsHeaderControls,{get api(){return props.api
1197
1293
  },get interaction(){return props.interaction
1198
1294
  },get navigationSection(){return props.navigationSection
1199
1295
  },get credits(){return(snapshot()?.bankedResets?.availableCount??0)>0||Boolean(props.preferences.pendingResetAttempt())
@@ -1202,28 +1298,28 @@ return _$createComponent13(Section,{get api(){return props.api
1202
1298
  },onCredits:openCredits,onRefresh:()=>void props.controller.refresh(true)
1203
1299
  })
1204
1300
  },get open(){return props.preferences.expanded().limits
1205
- },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent13(Show7,{get when(){return model()
1206
- },get fallback(){return(()=>{var _el$=_$createElement10("text")
1207
- _$insertNode6(_el$,_$createTextNode4(`Open a session to view model limits`))
1208
- _$effect9((_$p)=>_$setProp10(_el$,"fg",props.api.theme.current.textMuted,_$p))
1301
+ },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent14(Show9,{get when(){return model()
1302
+ },get fallback(){return(()=>{var _el$=_$createElement11("text")
1303
+ _$insertNode7(_el$,_$createTextNode5(`Open a session to view model limits`))
1304
+ _$effect10((_$p)=>_$setProp11(_el$,"fg",props.api.theme.current.textMuted,_$p))
1209
1305
  return _el$
1210
1306
  })()
1211
- },children:(selected)=>(()=>{var _el$3=_$createElement10("box")
1212
- _$setProp10(_el$3,"width","100%")
1213
- _$setProp10(_el$3,"minWidth",0)
1214
- _$setProp10(_el$3,"flexShrink",1)
1215
- _$setProp10(_el$3,"overflow","hidden")
1216
- _$insert9(_el$3,_$createComponent13(LimitsModelRow,_$mergeProps(props,{get model(){return selected()
1307
+ },children:(selected)=>(()=>{var _el$3=_$createElement11("box")
1308
+ _$setProp11(_el$3,"width","100%")
1309
+ _$setProp11(_el$3,"minWidth",0)
1310
+ _$setProp11(_el$3,"flexShrink",1)
1311
+ _$setProp11(_el$3,"overflow","hidden")
1312
+ _$insert10(_el$3,_$createComponent14(LimitsModelRow,_$mergeProps(props,{get model(){return selected()
1217
1313
  },get selection(){return props.modelSelection
1218
1314
  }})),null)
1219
- _$insert9(_el$3,_$createComponent13(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
1315
+ _$insert10(_el$3,_$createComponent14(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
1220
1316
  }})),null)
1221
- _$insert9(_el$3,_$createComponent13(Show7,{get when(){return _$memo7(()=>!!(snapshot()&&["ready","stale"].includes(snapshot().availability)))()?snapshot():undefined
1222
- },children:(quota)=>_$createComponent13(QuotaSnapshotRows,{get api(){return props.api
1317
+ _$insert10(_el$3,_$createComponent14(Show9,{get when(){return _$memo8(()=>!!(snapshot()&&["ready","stale"].includes(snapshot().availability)))()?snapshot():undefined
1318
+ },children:(quota)=>_$createComponent14(QuotaSnapshotRows,{get api(){return props.api
1223
1319
  },get snapshot(){return quota()
1224
1320
  }})
1225
1321
  }),null)
1226
- _$insert9(_el$3,_$createComponent13(LimitsStatus,{get api(){return props.api
1322
+ _$insert10(_el$3,_$createComponent14(LimitsStatus,{get api(){return props.api
1227
1323
  },get controller(){return props.controller
1228
1324
  }}),null)
1229
1325
  return _el$3