opencode-navigator 0.27.4 → 0.27.5

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.
@@ -154,7 +154,7 @@ const seconds=Math.max(0,expiry-now / 1000)
154
154
  const lifetime=expiry-credit.grantedAt
155
155
  const remaining=Number.isFinite(credit.grantedAt)&&credit.grantedAt>=0&&lifetime>0?Math.max(0,Math.min(1,seconds / lifetime)):undefined
156
156
  return{label:remainingLabel(seconds),remaining,expired:seconds===0}}
157
- var CHATGPT_METHODS=new Set(["chatgpt-browser","chatgpt-headless"])
157
+ var CHATGPT_METHODS=new Set(["chatgpt-browser","chatgpt-headless","chatgpt-token-sharing"])
158
158
  function providerAccountIdentity(provider,credentials){if(!provider.integrationID||provider.activation==="disabled")
159
159
  return{status:"unsupported"}
160
160
  const active=credentials.filter((entry)=>entry.integrationID===provider.integrationID&&entry.active)
@@ -458,13 +458,54 @@ input.api.ui.toast({variant:"warning",title:"Codex account",message:error instan
458
458
  }}
459
459
  return{link,busy
460
460
  }}
461
- import {effect as _$effect} from "@opentui/solid"
462
- import {insertNode as _$insertNode} from "@opentui/solid"
463
- import {insert as _$insert} from "@opentui/solid"
464
- import {setProp as _$setProp} from "@opentui/solid"
465
- import {createElement as _$createElement} from "@opentui/solid"
466
- import {createSignal as createSignal4} from "solid-js"
467
- import {subtleLineColor,useIcons} from "./tui.js"
461
+ import {effect as _$effect2} from "@opentui/solid"
462
+ import {insertNode as _$insertNode2} from "@opentui/solid"
463
+ import {insert as _$insert2} from "@opentui/solid"
464
+ import {createComponent as _$createComponent2} from "@opentui/solid"
465
+ import {memo as _$memo} from "@opentui/solid"
466
+ import {setProp as _$setProp2} from "@opentui/solid"
467
+ import {createElement as _$createElement2} from "@opentui/solid"
468
+ function duration(seconds){if(seconds<60)
469
+ return "<1m"
470
+ const minutes=Math.ceil(seconds / 60)
471
+ const days=Math.floor(minutes / 1440)
472
+ const hours=Math.floor(minutes%1440 / 60)
473
+ if(days)
474
+ return `${days}d ${hours}h`
475
+ if(hours)
476
+ return `${hours}h ${minutes % 60}m`
477
+ return `${minutes}m`
478
+ }
479
+ function quotaPeriod(window,now){const reset=window.resetsAt
480
+ const missing={ratio:undefined,seconds:undefined,active:false,countdown:"Reset time unknown",detail:"Period progress unknown"
481
+ }
482
+ if(reset===undefined)
483
+ return missing
484
+ if(!Number.isFinite(now)||!Number.isFinite(reset)||reset<=0||!Number.isFinite(new Date(reset*1000).getTime()))
485
+ return{...missing,countdown:"Reset date invalid"}
486
+ const seconds=reset-now / 1000
487
+ const countdown=seconds<=0?"Reset due; refresh to verify":`Reset in ${duration(seconds)}`
488
+ const dated={...missing,seconds,countdown}
489
+ const length=window.durationMinutes
490
+ if(length===undefined)
491
+ return{...dated,detail:"Period duration unknown"}
492
+ if(!Number.isFinite(length*60)||length<=0)
493
+ return{...dated,detail:"Period duration invalid"}
494
+ if(seconds>length*60)
495
+ return{...dated,detail:"Window has not started; progress unknown"}
496
+ const ratio=Math.max(0,Math.min(1,seconds / (length*60)))
497
+ return{...dated,ratio,active:seconds>0,detail:`${Math.round(ratio * 100)}%`}}
498
+ function quotaPace(quota,period){if(quota===undefined||!Number.isFinite(quota)||!period.active||period.ratio===undefined)
499
+ return "normal"
500
+ const deficit=Math.round((period.ratio-quota)*1e5) / 1000
501
+ if(deficit>=30)
502
+ return "red"
503
+ if(deficit>=15)
504
+ return "orange"
505
+ return deficit>0?"yellow":"normal"
506
+ }
507
+ var quotaPaceLabels={normal:"",yellow:"Above pace",orange:"High usage pace",red:"Critical usage pace"
508
+ };
468
509
  function measurement(window,remaining){if(remaining!==undefined)
469
510
  return `${remaining}${window.unit === "%" ? "" : " "}${window.unit} left`
470
511
  if(window.used!==undefined)
@@ -473,6 +514,8 @@ return `${window.total} ${window.unit} capacity`
473
514
  }
474
515
  function resetTime(seconds,now){if(seconds===undefined)
475
516
  return "Reset time unknown"
517
+ if(!Number.isFinite(seconds)||seconds<=0||!Number.isFinite(new Date(seconds*1000).getTime()))
518
+ return "Reset date invalid"
476
519
  const date=new Date(seconds*1000)
477
520
  const clock=date.toLocaleTimeString(undefined,{hour:"2-digit",minute:"2-digit"})
478
521
  if(date.toDateString()===new Date(now).toDateString())
@@ -482,36 +525,42 @@ return `Resets ${date.toLocaleDateString(undefined, { month: "short", day: "nume
482
525
  function quotaPresentation(window,now=Date.now()){const total=window.unit==="%"?100:window.total
483
526
  const remaining=window.remaining??(total!==undefined&&window.used!==undefined?total-window.used:undefined)
484
527
  const ratio=remaining!==undefined&&total!==undefined&&total>0?Math.max(0,Math.min(1,remaining / total)):undefined
485
- return{value:measurement(window,remaining),ratio,reset:resetTime(window.resetsAt,now)}}
486
- function QuotaWindowRow(props){const icons=useIcons()
528
+ const period=quotaPeriod(window,now)
529
+ const pace=quotaPace(ratio,period)
530
+ const reset=resetTime(window.resetsAt,now)
531
+ const resetSummary=period.seconds!==undefined&&period.seconds>0?`${period.countdown} \xB7 ${reset}`:period.countdown
532
+ return{value:measurement(window,remaining),ratio,reset,resetSummary,period,pace,paceLabel:quotaPaceLabels[pace]
533
+ }}
534
+ var quotaColors={blue:"#42a5f5",yellow:"#c4a000",orange:"#ef8b2c",red:"#ef5350"};
535
+ import {effect as _$effect} from "@opentui/solid"
536
+ import {insertNode as _$insertNode} from "@opentui/solid"
537
+ import {insert as _$insert} from "@opentui/solid"
538
+ import {setProp as _$setProp} from "@opentui/solid"
539
+ import {createElement as _$createElement} from "@opentui/solid"
540
+ import {createSignal as createSignal4} from "solid-js"
541
+ import {subtleLineColor,useIcons} from "./tui.js"
542
+ function QuotaMeter(props){const icons=useIcons()
487
543
  const [columns,setColumns]=createSignal4(0)
488
- const view=()=>quotaPresentation(props.window)
489
- const scale=()=>{const ratio=view().ratio
490
- if(ratio===undefined)
491
- return{filled:"Scale unknown",unfilled:""
544
+ const scale=()=>{if(props.ratio===undefined)
545
+ return{filled:"",unfilled:"Scale unknown"
492
546
  }
493
- const width=columns()
494
- const filled=Math.round(ratio*width)
547
+ const filled=Math.round(props.ratio*columns())
495
548
  const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
496
- return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(width-filled)
549
+ return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(columns()-filled)
497
550
  }}
498
- const unfilledColor=()=>subtleLineColor(props.api.theme.current.backgroundPanel,props.api.theme.current.borderSubtle)
499
- const valueWidth=()=>Math.min(columns(),Bun.stringWidth(view().value))
551
+ const valueWidth=()=>Math.min(columns(),Bun.stringWidth(props.value))
500
552
  const gap=()=>columns()>valueWidth()?1:0
501
- const resetWidth=()=>Math.max(0,columns()-valueWidth()-gap())
502
553
  return(()=>{var _el$=_$createElement("box"),_el$2=_$createElement("text"),_el$3=_$createElement("span"),_el$4=_$createElement("box"),_el$5=_$createElement("text"),_el$6=_$createElement("text")
503
554
  _$insertNode(_el$,_el$2)
504
555
  _$insertNode(_el$,_el$4)
505
556
  _$setProp(_el$,"width","100%")
506
557
  _$setProp(_el$,"minWidth",0)
507
- _$setProp(_el$,"flexShrink",1)
508
558
  _$setProp(_el$,"height",2)
509
559
  _$setProp(_el$,"overflow","hidden")
510
560
  _$setProp(_el$,"onSizeChange",function(){setColumns(this.width)
511
561
  })
512
562
  _$insertNode(_el$2,_el$3)
513
563
  _$setProp(_el$2,"width","100%")
514
- _$setProp(_el$2,"minWidth",0)
515
564
  _$setProp(_el$2,"height",1)
516
565
  _$setProp(_el$2,"wrapMode","none")
517
566
  _$setProp(_el$2,"truncate",true)
@@ -520,7 +569,6 @@ _$insert(_el$3,()=>scale().unfilled)
520
569
  _$insertNode(_el$4,_el$5)
521
570
  _$insertNode(_el$4,_el$6)
522
571
  _$setProp(_el$4,"width","100%")
523
- _$setProp(_el$4,"minWidth",0)
524
572
  _$setProp(_el$4,"height",1)
525
573
  _$setProp(_el$4,"flexDirection","row")
526
574
  _$setProp(_el$4,"overflow","hidden")
@@ -528,13 +576,13 @@ _$setProp(_el$5,"minWidth",0)
528
576
  _$setProp(_el$5,"height",1)
529
577
  _$setProp(_el$5,"wrapMode","none")
530
578
  _$setProp(_el$5,"truncate",true)
531
- _$insert(_el$5,()=>view().reset)
579
+ _$insert(_el$5,()=>props.label)
532
580
  _$setProp(_el$6,"height",1)
533
581
  _$setProp(_el$6,"wrapMode","none")
534
582
  _$setProp(_el$6,"truncate",true)
535
- _$insert(_el$6,()=>view().value)
536
- _$effect((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:unfilledColor()
537
- },_v$3=resetWidth(),_v$4=props.api.theme.current.textMuted,_v$5=valueWidth(),_v$6=gap(),_v$7=props.api.theme.current.text
583
+ _$insert(_el$6,()=>props.value)
584
+ _$effect((_p$)=>{var _v$=props.color,_v$2={fg:subtleLineColor(props.api.theme.current.backgroundPanel,props.api.theme.current.borderSubtle)
585
+ },_v$3=Math.max(0,columns()-valueWidth()-gap()),_v$4=props.api.theme.current.textMuted,_v$5=valueWidth(),_v$6=gap(),_v$7=props.api.theme.current.text
538
586
  _v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
539
587
  _v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"style",_v$2,_p$.t))
540
588
  _v$3!==_p$.a&&(_p$.a=_$setProp(_el$5,"width",_v$3,_p$.a))
@@ -548,10 +596,43 @@ return _p$
548
596
  return _el$
549
597
  })()
550
598
  }
551
- import {createComponent as _$createComponent4} from "@opentui/solid"
552
- import {Show as Show2,createEffect,createSignal as createSignal6,onCleanup} from "solid-js"
599
+ function QuotaWindowRow(props){const view=()=>quotaPresentation(props.window,props.now)
600
+ const color=()=>{const pace=view().pace
601
+ return pace==="normal"?props.api.theme.current.textMuted:quotaColors[pace]
602
+ }
603
+ return(()=>{var _el$=_$createElement2("box"),_el$2=_$createElement2("text")
604
+ _$insertNode2(_el$,_el$2)
605
+ _$setProp2(_el$,"width","100%")
606
+ _$setProp2(_el$,"minWidth",0)
607
+ _$setProp2(_el$,"flexShrink",1)
608
+ _$setProp2(_el$,"height",5)
609
+ _$setProp2(_el$,"overflow","hidden")
610
+ _$insert2(_el$,_$createComponent2(QuotaMeter,{get api(){return props.api
611
+ },get label(){return view().paceLabel||"Quota remaining"
612
+ },get value(){return view().value
613
+ },get ratio(){return view().ratio
614
+ },get color(){return color()
615
+ }}),_el$2)
616
+ _$insert2(_el$,_$createComponent2(QuotaMeter,{get api(){return props.api
617
+ },get label(){return _$memo(()=>view().period.ratio===undefined)()?view().period.detail:"Time remaining"
618
+ },get value(){return _$memo(()=>view().period.ratio===undefined)()?"":view().period.detail
619
+ },get ratio(){return view().period.ratio
620
+ },get color(){return quotaColors.blue
621
+ }}),_el$2)
622
+ _$setProp2(_el$2,"width","100%")
623
+ _$setProp2(_el$2,"height",1)
624
+ _$setProp2(_el$2,"wrapMode","none")
625
+ _$setProp2(_el$2,"truncate",true)
626
+ _$insert2(_el$2,()=>view().resetSummary)
627
+ _$effect2((_$p)=>_$setProp2(_el$2,"fg",props.api.theme.current.textMuted,_$p))
628
+ return _el$
629
+ })()
630
+ }
631
+ import {memo as _$memo4} from "@opentui/solid"
632
+ import {createComponent as _$createComponent6} from "@opentui/solid"
633
+ import {createEffect,createMemo,createSignal as createSignal6,onCleanup} from "solid-js"
553
634
  import {SelectionMenu,useDialogs} from "./tui.js"
554
- import {createComponent as _$createComponent2} from "@opentui/solid"
635
+ import {createComponent as _$createComponent3} from "@opentui/solid"
555
636
  import {randomUUID} from "crypto"
556
637
  import {GuardedConfirmation as GuardedConfirmation2,useDialogState} from "./tui.js"
557
638
  var resetCreditOutcomeMessage={reset:"Reset applied. Restart or continue your Codex session.",alreadyRedeemed:"This attempt was already redeemed; no second credit was used.",noCredit:"No reset credit is available.",nothingToReset:"There is no eligible usage window to reset."
@@ -604,9 +685,12 @@ input.dialogs.back()
604
685
  async function review(creditID){try{const snapshot=await model.review(creditID)
605
686
  if(!snapshot)
606
687
  return
607
- input.dialogs.open(()=>_$createComponent2(GuardedConfirmation2,{get api(){return input.api
688
+ const credit=snapshot.bankedResets?.credits?.find((item)=>item.id===creditID)
689
+ input.dialogs.open(()=>_$createComponent3(GuardedConfirmation2,{get api(){return input.api
608
690
  },get current(){return input.current
609
- },title:"Use one banked reset?",get message(){return `Account ${snapshot.accountId} \xB7 model ${input.model.modelID}. This may reset other eligible Codex windows.`
691
+ },title:"Use one banked reset?",get message(){return [`Account ${snapshot.accountId} \xB7 model ${input.model.modelID}. This may reset other eligible Codex windows.`,credit?.description].filter(Boolean).join(`
692
+
693
+ `)
610
694
  },onConfirm:()=>void consume(creditID)
611
695
  }))
612
696
  } catch(error){if(input.current())
@@ -614,14 +698,29 @@ warn(error instanceof Error?error.message:"Credit eligibility is unavailable")
614
698
  }}
615
699
  return{review,consume,busy
616
700
  }}
701
+ function resetCreditView(credit,now){const expired=resetCreditLifetime(credit,now).expired
702
+ const labels={available:"Available",redeeming:"In progress",redeemed:"Used",unknown:"Status unknown"}
703
+ const status=expired&&(credit.status==="available"||credit.status==="unknown")?"Expired":labels[credit.status]
704
+ return{title:credit.title||`Credit ${credit.id}`,status,canReview:credit.status==="available"&&!expired&&credit.type==="codexRateLimits"
705
+ }}
706
+ import {effect as _$effect4} from "@opentui/solid"
707
+ import {memo as _$memo3} from "@opentui/solid"
708
+ import {createComponent as _$createComponent5} from "@opentui/solid"
709
+ import {createTextNode as _$createTextNode2} from "@opentui/solid"
710
+ import {insertNode as _$insertNode4} from "@opentui/solid"
711
+ import {insert as _$insert4} from "@opentui/solid"
712
+ import {setProp as _$setProp4} from "@opentui/solid"
713
+ import {createElement as _$createElement4} from "@opentui/solid"
714
+ import {TextAttributes} from "@opentui/core"
715
+ import {useIcons as useIcons3} from "./tui.js"
716
+ import {memo as _$memo2} from "@opentui/solid"
717
+ import {createComponent as _$createComponent4} from "@opentui/solid"
718
+ import {effect as _$effect3} from "@opentui/solid"
617
719
  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"
720
+ import {insertNode as _$insertNode3} from "@opentui/solid"
721
+ import {insert as _$insert3} from "@opentui/solid"
722
+ import {setProp as _$setProp3} from "@opentui/solid"
723
+ import {createElement as _$createElement3} from "@opentui/solid"
625
724
  import {Show,createSignal as createSignal5} from "solid-js"
626
725
  import {subtleLineColor as subtleLineColor2,useIcons as useIcons2} from "./tui.js"
627
726
  function ResetCreditExpiry(props){const icons=useIcons2()
@@ -638,49 +737,94 @@ const filled=Math.round((lifetime().remaining??0)*width)
638
737
  const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
639
738
  return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(width-filled)
640
739
  }}
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)
740
+ return(()=>{var _el$=_$createElement3("box"),_el$2=_$createElement3("text"),_el$3=_$createTextNode(` `)
741
+ _$insertNode3(_el$,_el$2)
742
+ _$setProp3(_el$,"width","100%")
743
+ _$setProp3(_el$,"minWidth",0)
744
+ _$setProp3(_el$,"overflow","hidden")
745
+ _$setProp3(_el$,"onSizeChange",function(){setColumns(this.width)
647
746
  })
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))
747
+ _$insertNode3(_el$2,_el$3)
748
+ _$setProp3(_el$2,"wrapMode","word")
749
+ _$insert3(_el$2,()=>icons.icon("recent"),_el$3)
750
+ _$insert3(_el$2,()=>lifetime().label,null)
751
+ _$insert3(_el$,_$createComponent4(Show,{get when(){return lifetime().remaining!==undefined
752
+ },get children(){var _el$4=_$createElement3("text"),_el$5=_$createElement3("span")
753
+ _$insertNode3(_el$4,_el$5)
754
+ _$setProp3(_el$4,"height",1)
755
+ _$setProp3(_el$4,"width","100%")
756
+ _$setProp3(_el$4,"wrapMode","none")
757
+ _$setProp3(_el$4,"truncate",true)
758
+ _$insert3(_el$4,()=>scale().filled,_el$5)
759
+ _$insert3(_el$5,()=>scale().unfilled)
760
+ _$effect3((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:subtleLineColor2(props.api.theme.current.backgroundElement,props.api.theme.current.borderSubtle)
761
+ }
762
+ _v$!==_p$.e&&(_p$.e=_$setProp3(_el$4,"fg",_v$,_p$.e))
763
+ _v$2!==_p$.t&&(_p$.t=_$setProp3(_el$5,"style",_v$2,_p$.t))
661
764
  return _p$
662
765
  },{e:undefined,t:undefined
663
766
  })
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
767
+ return _el$4
768
+ }}),null)
769
+ _$insert3(_el$,_$createComponent4(Show,{get when(){return expiry()
770
+ },children:(date)=>(()=>{var _el$8=_$createElement3("text")
771
+ _$setProp3(_el$8,"wrapMode","word")
772
+ _$insert3(_el$8,()=>`Expires ${date().toLocaleString(undefined, {
773
+ dateStyle: "medium",
774
+ timeStyle: "short"
775
+ })}`)
776
+ _$effect3((_$p)=>_$setProp3(_el$8,"fg",props.api.theme.current.textMuted,_$p))
777
+ return _el$8
674
778
  })()
675
779
  }),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
780
+ _$insert3(_el$,_$createComponent4(Show,{get when(){return _$memo2(()=>lifetime().remaining===undefined)()&&expiry()
781
+ },get children(){var _el$6=_$createElement3("text")
782
+ _$insertNode3(_el$6,_$createTextNode(`Grant date unavailable or invalid; progress unknown`))
783
+ _$setProp3(_el$6,"wrapMode","word")
784
+ _$effect3((_$p)=>_$setProp3(_el$6,"fg",props.api.theme.current.textMuted,_$p))
785
+ return _el$6
682
786
  }}),null)
683
- _$effect2((_$p)=>_$setProp2(_el$4,"fg",props.api.theme.current.textMuted,_$p))
787
+ _$effect3((_$p)=>_$setProp3(_el$2,"fg",props.api.theme.current.text,_$p))
788
+ return _el$
789
+ })()
790
+ }
791
+ function ResetCreditCard(props){const icons=useIcons3()
792
+ const view=()=>resetCreditView(props.credit,props.now)
793
+ return(()=>{var _el$=_$createElement4("box"),_el$2=_$createElement4("text"),_el$3=_$createTextNode2(` `),_el$4=_$createElement4("text"),_el$5=_$createTextNode2(` `),_el$6=_$createElement4("text")
794
+ _$insertNode4(_el$,_el$2)
795
+ _$insertNode4(_el$,_el$4)
796
+ _$insertNode4(_el$,_el$6)
797
+ _$setProp4(_el$,"width","100%")
798
+ _$setProp4(_el$,"minWidth",0)
799
+ _$setProp4(_el$,"border",true)
800
+ _$setProp4(_el$,"paddingLeft",1)
801
+ _$setProp4(_el$,"paddingRight",1)
802
+ _$insertNode4(_el$2,_el$3)
803
+ _$setProp4(_el$2,"wrapMode","word")
804
+ _$insert4(_el$2,()=>icons.icon("reset"),_el$3)
805
+ _$insert4(_el$2,()=>view().title,null)
806
+ _$insertNode4(_el$4,_el$5)
807
+ _$setProp4(_el$4,"wrapMode","word")
808
+ _$insert4(_el$4,()=>icons.icon(view().canReview?"done":"info"),_el$5)
809
+ _$insert4(_el$4,()=>view().status,null)
810
+ _$insert4(_el$,_$createComponent5(ResetCreditExpiry,{get api(){return props.api
811
+ },get credit(){return props.credit
812
+ },get now(){return props.now
813
+ }}),_el$6)
814
+ _$setProp4(_el$6,"wrapMode","word")
815
+ _$insert4(_el$6,(()=>{var _c$=_$memo3(()=>!!view().canReview)
816
+ return()=>_c$()?`${icons.icon("right")} ${props.disabled ? "Review unavailable" : "Review credit"}`:"Cannot use this credit"
817
+ })())
818
+ _$effect4((_p$)=>{var _v$=`opencode-navigator.reset-credit.${props.credit.id}`,_v$2=props.api.theme.current.borderSubtle,_v$3=TextAttributes.BOLD,_v$4=props.api.theme.current.text,_v$5=props.api.theme.current.textMuted,_v$6=props.disabled||!view().canReview?props.api.theme.current.textMuted:props.api.theme.current.primary
819
+ _v$!==_p$.e&&(_p$.e=_$setProp4(_el$,"id",_v$,_p$.e))
820
+ _v$2!==_p$.t&&(_p$.t=_$setProp4(_el$,"borderColor",_v$2,_p$.t))
821
+ _v$3!==_p$.a&&(_p$.a=_$setProp4(_el$2,"attributes",_v$3,_p$.a))
822
+ _v$4!==_p$.o&&(_p$.o=_$setProp4(_el$2,"fg",_v$4,_p$.o))
823
+ _v$5!==_p$.i&&(_p$.i=_$setProp4(_el$4,"fg",_v$5,_p$.i))
824
+ _v$6!==_p$.n&&(_p$.n=_$setProp4(_el$6,"fg",_v$6,_p$.n))
825
+ return _p$
826
+ },{e:undefined,t:undefined,a:undefined,o:undefined,i:undefined,n:undefined
827
+ })
684
828
  return _el$
685
829
  })()
686
830
  }
@@ -697,78 +841,88 @@ onCleanup(()=>clearInterval(timer))
697
841
  createEffect(()=>{if(!current())
698
842
  dialogs.close()
699
843
  })
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 ")
844
+ const options=createMemo(()=>[...credits()?.credits?.map((credit)=>({title:credit.title??`Credit ${credit.id}`,value:`credit:${credit.id}`,icon:"presets",description:""
701
845
  }))??[],...credits()?.availableCount&&(credits()?.credits?.length??0)<credits().availableCount?[{title:"Use next available credit",value:"credit:",icon:"presets",description:"Credit details unavailable"
702
846
  }]:[],...pending()?[{title:"Reconcile pending attempt",value:"retry",icon:"retry",description:"Reuse the previous idempotency key"
703
847
  }]:[],{title:"Cancel",value:"cancel",icon:"close",description:"No credit is used"
704
- }]
705
- return _$createComponent4(SelectionMenu,{get api(){return props.api
848
+ }])
849
+ return _$createComponent6(SelectionMenu,{get api(){return props.api
706
850
  },get title(){return `Banked resets \xB7 ${credits()?.availableCount ?? 0} available${actions.busy() ? " \xB7 pending" : ""}`
707
- },get options(){return options()
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()
851
+ },description:"Review a credit first. Nothing is used until you confirm.",get options(){return options()
852
+ },get height(){return Math.min(24,options().length*8)
853
+ },adaptive:true,renderOption:(option)=>{const credit=credits()?.credits?.find((item)=>option.value===`credit:${item.id}`)
854
+ return credit&&_$createComponent6(ResetCreditCard,{get api(){return props.api
855
+ },credit,get now(){return now()
856
+ },get disabled(){return actions.busy()||Boolean(pending())
713
857
  }})
714
- }),onSelect:(option)=>{if(option.value==="cancel")
858
+ },onSelect:(option)=>{if(option.value==="cancel")
715
859
  dialogs.back()
716
- else if(option.value==="retry")
860
+ else if(!actions.busy()){if(option.value==="retry")
717
861
  actions.consume(pending()?.creditID)
718
- else if(option.value.startsWith("credit:"))
719
- actions.review(option.value.slice("credit:".length)||undefined)
720
- }})
862
+ else if(!pending()&&option.value.startsWith("credit:")){const id=option.value.slice("credit:".length)||undefined
863
+ const credit=credits()?.credits?.find((item)=>item.id===id)
864
+ if(!credit||resetCreditView(credit,now()).canReview)
865
+ actions.review(id)
866
+ }}}})
721
867
  }
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)
868
+ import {createComponent as _$createComponent8} from "@opentui/solid"
869
+ import {For as For2,Show as Show2} from "solid-js"
870
+ import {effect as _$effect5} from "@opentui/solid"
871
+ import {insertNode as _$insertNode5} from "@opentui/solid"
872
+ import {insert as _$insert5} from "@opentui/solid"
873
+ import {memo as _$memo5} from "@opentui/solid"
874
+ import {setProp as _$setProp5} from "@opentui/solid"
875
+ import {createElement as _$createElement5} from "@opentui/solid"
876
+ function QuotaBalanceRow(props){return(()=>{var _el$=_$createElement5("text"),_el$2=_$createElement5("span")
877
+ _$insertNode5(_el$,_el$2)
878
+ _$setProp5(_el$,"wrapMode","none")
879
+ _$setProp5(_el$,"truncate",true)
880
+ _$insert5(_el$2,(()=>{var _c$=_$memo5(()=>!!props.balance.unlimited)
735
881
  return()=>_c$()?"No configured cap":`${props.balance.amount} ${props.balance.unit ?? "(provider unit not specified)"}`
736
882
  })())
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
883
+ _$insert5(_el$,()=>` \xB7 ${props.balance.scope} \xB7 ${props.balance.label}`,null)
884
+ _$effect5((_p$)=>{var _v$=props.api.theme.current.textMuted,_v$2={fg:props.api.theme.current.text
739
885
  }
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))
886
+ _v$!==_p$.e&&(_p$.e=_$setProp5(_el$,"fg",_v$,_p$.e))
887
+ _v$2!==_p$.t&&(_p$.t=_$setProp5(_el$2,"style",_v$2,_p$.t))
742
888
  return _p$
743
889
  },{e:undefined,t:undefined
744
890
  })
745
891
  return _el$
746
892
  })()
747
893
  }
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"
894
+ import {insert as _$insert6} from "@opentui/solid"
895
+ import {createComponent as _$createComponent7} from "@opentui/solid"
896
+ import {setProp as _$setProp6} from "@opentui/solid"
897
+ import {createElement as _$createElement6} from "@opentui/solid"
752
898
  import {For} from "solid-js"
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
899
+ import {createSignal as createSignal7,onCleanup as onCleanup2} from "solid-js"
900
+ function createQuotaClock(){const [now,setNow]=createSignal7(Date.now())
901
+ const timer=setInterval(()=>setNow(Date.now()),30000)
902
+ onCleanup2(()=>clearInterval(timer))
903
+ return now
904
+ }
905
+ function QuotaWindowGroup(props){const now=createQuotaClock()
906
+ return(()=>{var _el$=_$createElement6("box")
907
+ _$setProp6(_el$,"width","100%")
908
+ _$setProp6(_el$,"minWidth",0)
909
+ _$setProp6(_el$,"gap",1)
910
+ _$setProp6(_el$,"overflow","hidden")
911
+ _$insert6(_el$,_$createComponent7(For,{get each(){return props.windows.map((window)=>window.id)
912
+ },children:(_,index)=>_$createComponent7(QuotaWindowRow,{get api(){return props.api
760
913
  },get window(){return props.windows[index()]
914
+ },get now(){return now()
761
915
  }})
762
916
  }))
763
917
  return _el$
764
918
  })()
765
919
  }
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
920
+ function QuotaSnapshotRows(props){return [_$createComponent8(Show2,{get when(){return props.snapshot.windows.length>0
921
+ },get children(){return _$createComponent8(QuotaWindowGroup,{get api(){return props.api
768
922
  },get windows(){return props.snapshot.windows
769
923
  }})
770
- }}),_$createComponent6(For2,{get each(){return props.snapshot.balances
771
- },children:(balance)=>_$createComponent6(QuotaBalanceRow,{get api(){return props.api
924
+ }}),_$createComponent8(For2,{get each(){return props.snapshot.balances
925
+ },children:(balance)=>_$createComponent8(QuotaBalanceRow,{get api(){return props.api
772
926
  },balance
773
927
  })
774
928
  })]
@@ -818,8 +972,8 @@ function providerQuotaCapability(id,canonical){const key=aliases[canonical??id]?
818
972
  const found=PROVIDER_QUOTA_CAPABILITIES.find((entry)=>entry.id===key)
819
973
  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/"]
820
974
  }}
821
- import {createSignal as createSignal7} from "solid-js"
822
- function createOpenCodeUsageAdapter(context){const [revision,setRevision]=createSignal7(0)
975
+ import {createSignal as createSignal8} from "solid-js"
976
+ function createOpenCodeUsageAdapter(context){const [revision,setRevision]=createSignal8(0)
823
977
  let generation=0
824
978
  const location=()=>context.location??context.data.location.default()
825
979
  const provider=(model)=>context.data.location.provider?.list(location())?.find((item)=>item.id===model.providerID)
@@ -877,33 +1031,33 @@ return{model,providerId:model.providerID,providerName:activeProvider.name,fetche
877
1031
  dispose()
878
1032
  }}
879
1033
  return{adapter,target:(model)=>({...model,quotaContext:key()})}}
880
- import {insert as _$insert10} from "@opentui/solid"
1034
+ import {insert as _$insert12} from "@opentui/solid"
881
1035
  import {mergeProps as _$mergeProps} from "@opentui/solid"
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"
1036
+ import {setProp as _$setProp13} from "@opentui/solid"
1037
+ import {effect as _$effect12} from "@opentui/solid"
1038
+ import {createTextNode as _$createTextNode6} from "@opentui/solid"
1039
+ import {insertNode as _$insertNode9} from "@opentui/solid"
1040
+ import {createElement as _$createElement13} from "@opentui/solid"
1041
+ import {memo as _$memo11} from "@opentui/solid"
1042
+ import {createComponent as _$createComponent16} from "@opentui/solid"
1043
+ import {Show as Show8} from "solid-js"
890
1044
  import {useDialogs as useDialogs3} from "./tui.js"
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"
901
- import {effect as _$effect4} from "@opentui/solid"
902
- import {insert as _$insert5} from "@opentui/solid"
903
- import {setProp as _$setProp5} from "@opentui/solid"
904
- import {createElement as _$createElement5} from "@opentui/solid"
1045
+ import {setProp as _$setProp8} from "@opentui/solid"
1046
+ import {effect as _$effect7} from "@opentui/solid"
1047
+ import {createTextNode as _$createTextNode3} from "@opentui/solid"
1048
+ import {insertNode as _$insertNode6} from "@opentui/solid"
1049
+ import {createElement as _$createElement8} from "@opentui/solid"
1050
+ import {memo as _$memo6} from "@opentui/solid"
1051
+ import {createComponent as _$createComponent10} from "@opentui/solid"
1052
+ import {Show as Show3} from "solid-js"
1053
+ import {useDialogs as useDialogs2,useIcons as useIcons4} from "./tui.js"
1054
+ import {createComponent as _$createComponent9} from "@opentui/solid"
1055
+ import {effect as _$effect6} from "@opentui/solid"
1056
+ import {insert as _$insert7} from "@opentui/solid"
1057
+ import {setProp as _$setProp7} from "@opentui/solid"
1058
+ import {createElement as _$createElement7} from "@opentui/solid"
905
1059
  import {SelectionBox} from "./tui.js"
906
- import {createSignal as createSignal8,onCleanup as onCleanup2} from "solid-js"
1060
+ import {createSignal as createSignal9,onCleanup as onCleanup3} from "solid-js"
907
1061
  function sidebarInteractiveColors(theme,state,normalColor=theme.text,mode="row"){const highlighted=!state.disabled&&(state.focused||mode==="control"&&state.hovered)
908
1062
  let backgroundColor=theme.backgroundPanel
909
1063
  let foregroundColor=normalColor
@@ -919,14 +1073,14 @@ else if(highlighted)
919
1073
  foregroundColor=theme.selectedListItemText
920
1074
  return{backgroundColor,foregroundColor}}
921
1075
  function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
922
- const [hovered,setHovered]=createSignal8(false)
1076
+ const [hovered,setHovered]=createSignal9(false)
923
1077
  const disabled=()=>descriptor.disabled?.()===true
924
1078
  const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
925
1079
  const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
926
1080
  const ref=(renderable)=>{unregister?.()
927
1081
  unregister=interaction?.register({...descriptor,renderable})
928
1082
  }
929
- onCleanup2(()=>unregister?.())
1083
+ onCleanup3(()=>unregister?.())
930
1084
  return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
931
1085
  },activate(event){if(interaction)
932
1086
  return interaction.mouseActivate(descriptor.id,event)
@@ -937,7 +1091,7 @@ return true
937
1091
  }}}
938
1092
  function LimitsAction(props){const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>props.disabled===true,activate:props.onActivate
939
1093
  },()=>props.api.theme.current.text,props.inline?"control":"row")
940
- return _$createComponent7(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
1094
+ return _$createComponent9(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
941
1095
  },height:1,get flexGrow(){return props.flexGrow
942
1096
  },get maxWidth(){return props.maxWidth
943
1097
  },flexShrink:1,minWidth:3,get backgroundColor(){return item.backgroundColor()
@@ -945,48 +1099,48 @@ return _$createComponent7(SelectionBox,{ref:(node)=>item.ref(node),get id(){retu
945
1099
  },get onMouseOut(){return item.onMouseOut
946
1100
  },onMouseUp:(event)=>{event.stopPropagation()
947
1101
  item.activate(event)
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))
1102
+ },get children(){var _el$=_$createElement7("text")
1103
+ _$setProp7(_el$,"wrapMode","none")
1104
+ _$setProp7(_el$,"truncate",true)
1105
+ _$insert7(_el$,()=>props.label)
1106
+ _$effect6((_$p)=>_$setProp7(_el$,"fg",item.foregroundColor(),_$p))
953
1107
  return _el$
954
1108
  }})
955
1109
  }
956
- function CodexAccountControls(props){const icons=useIcons3()
1110
+ function CodexAccountControls(props){const icons=useIcons4()
957
1111
  const model=()=>props.controller.current().model
958
1112
  const accountLink=createCodexAccountLink({api:props.api,preferences:props.preferences,adapter:props.codex,model,dialogs:useDialogs2(props.api)
959
1113
  })
960
1114
  const eligible=()=>(props.model.providerID==="openai"||props.model.hostConnection?.providerID==="openai")&&props.model.hostConnection?.method!=="api"
961
- const action=(id,row,label,onActivate)=>_$createComponent8(LimitsAction,{get api(){return props.api
1115
+ const action=(id,row,label,onActivate)=>_$createComponent10(LimitsAction,{get api(){return props.api
962
1116
  },get interaction(){return props.interaction
963
1117
  },id:`${PLUGIN_ID}.limits.${id}`,get position(){return{section:props.navigationSection,row,column:0
964
1118
  }},label,onActivate,get disabled(){return accountLink.busy()
965
1119
  }})
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))
1120
+ return _$createComponent10(Show3,{get when(){return eligible()
1121
+ },get children(){return [_$createComponent10(Show3,{get when(){return _$memo6(()=>!!!props.model.accountID)()&&(!props.model.hostConnection||props.model.hostConnection.status==="ready")
1122
+ },get children(){return [(()=>{var _el$=_$createElement8("text")
1123
+ _$insertNode6(_el$,_$createTextNode3(`Link the matching Codex account once for this connection`))
1124
+ _$effect7((_$p)=>_$setProp8(_el$,"fg",props.api.theme.current.textMuted,_$p))
971
1125
  return _el$
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"
1126
+ })(),_$memo6(()=>action("link",2,`${icons.icon("scope")} Link Codex CLI account`,()=>void accountLink.link()))]
1127
+ }}),_$createComponent10(Show3,{get when(){return _$memo6(()=>!!(props.model.accountID&&props.model.accountSource!=="host"))()&&props.controller.snapshot()?.availability==="unauthenticated"
1128
+ },get children(){return [_$memo6(()=>action("unlink",4,`${icons.icon("close")} Unlink Codex account`,()=>props.preferences.setCodexConnectionBinding(props.model.providerID,props.model.hostConnection?.id))),_$createComponent10(Show3,{get when(){return props.controller.snapshot()?.availability==="unauthenticated"
975
1129
  },get children(){return action("relink",5,`${icons.icon("scope")} Relink Codex account`,()=>void accountLink.link())
976
1130
  }})]
977
1131
  }})]
978
1132
  }})
979
1133
  }
980
- import {createComponent as _$createComponent10} from "@opentui/solid"
981
- import {Show as Show5} from "solid-js"
982
- import {useIcons as useIcons4} from "./tui.js"
983
- import {createComponent as _$createComponent9} from "@opentui/solid"
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"
1134
+ import {createComponent as _$createComponent12} from "@opentui/solid"
1135
+ import {Show as Show4} from "solid-js"
1136
+ import {useIcons as useIcons5} from "./tui.js"
1137
+ import {createComponent as _$createComponent11} from "@opentui/solid"
1138
+ import {effect as _$effect8} from "@opentui/solid"
1139
+ import {insert as _$insert8} from "@opentui/solid"
1140
+ import {setProp as _$setProp9} from "@opentui/solid"
1141
+ import {createElement as _$createElement9} from "@opentui/solid"
1142
+ import {memo as _$memo7} from "@opentui/solid"
1143
+ import {createEffect as createEffect2,createSignal as createSignal10,on} from "solid-js"
990
1144
  import {SelectionBox as SelectionBox2} from "./tui.js"
991
1145
  var graphemes=new Intl.Segmenter(undefined,{granularity:"grapheme"
992
1146
  })
@@ -1003,12 +1157,12 @@ result += segment
1003
1157
  }
1004
1158
  return result + ellipsis
1005
1159
  }
1006
- function SectionHeaderControl(props){const [width,setWidth]=createSignal9()
1160
+ function SectionHeaderControl(props){const [width,setWidth]=createSignal10()
1007
1161
  const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
1008
1162
  },()=>props.api.theme.current.accent,"control")
1009
1163
  createEffect2(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
1010
1164
  const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
1011
- return _$createComponent9(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
1165
+ return _$createComponent11(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
1012
1166
  },get iconOnly(){return props.iconOnly
1013
1167
  },get width(){return props.iconOnly?3:undefined
1014
1168
  },get flexShrink(){return props.iconOnly?0:1
@@ -1019,42 +1173,42 @@ return _$createComponent9(SelectionBox2,{ref:(node)=>control.ref(node),get id(){
1019
1173
  },get onMouseOut(){return control.onMouseOut
1020
1174
  },onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
1021
1175
  control.activate(event)
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))
1176
+ },get children(){var _el$=_$createElement9("text")
1177
+ _$setProp9(_el$,"wrapMode","none")
1178
+ _$setProp9(_el$,"height",1)
1179
+ _$insert8(_el$,label)
1180
+ _$effect8((_$p)=>_$setProp9(_el$,"fg",control.foregroundColor(),_$p))
1027
1181
  return _el$
1028
1182
  }})
1029
1183
  }
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
1184
+ function LimitsHeaderControls(props){const icons=useIcons5()
1185
+ return [_$createComponent12(Show4,{get when(){return props.credits
1186
+ },get children(){return _$createComponent12(SectionHeaderControl,{get api(){return props.api
1033
1187
  },get interaction(){return props.interaction
1034
1188
  },get position(){return{section:props.navigationSection,row:0,column:1
1035
- }},get action(){return{id:`${PLUGIN_ID}.limits.credits`,label:()=>"Banked Resets",disabled:()=>false,onActivate:props.onCredits
1189
+ }},get action(){return{id:`${PLUGIN_ID}.limits.credits`,label:()=>typeof props.credits==="number"?`${props.credits} Banked Resets`:"Banked Resets",disabled:()=>false,onActivate:props.onCredits
1036
1190
  }}})
1037
- }}),_$createComponent10(SectionHeaderControl,{get api(){return props.api
1191
+ }}),_$createComponent12(SectionHeaderControl,{get api(){return props.api
1038
1192
  },get interaction(){return props.interaction
1039
1193
  },iconOnly:true,get position(){return{section:props.navigationSection,row:0,column:2
1040
1194
  }},get action(){return{id:`${PLUGIN_ID}.limits.refresh`,label:()=>icons.icon(props.refreshing?"pending":"retry"),disabled:()=>props.refreshing||!props.canRefresh,onActivate:props.onRefresh
1041
1195
  }}})]
1042
1196
  }
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"
1197
+ import {insert as _$insert9} from "@opentui/solid"
1198
+ import {effect as _$effect9} from "@opentui/solid"
1199
+ import {createTextNode as _$createTextNode4} from "@opentui/solid"
1200
+ import {insertNode as _$insertNode7} from "@opentui/solid"
1201
+ import {memo as _$memo8} from "@opentui/solid"
1202
+ import {createComponent as _$createComponent13} from "@opentui/solid"
1203
+ import {setProp as _$setProp10} from "@opentui/solid"
1204
+ import {createElement as _$createElement10} from "@opentui/solid"
1205
+ import {Show as Show5} from "solid-js"
1052
1206
  function LimitsModelRow(props){const names=()=>props.selection?.names(props.model)??{provider:props.model.providerID,model:props.model.modelID
1053
1207
  }
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
1208
+ return(()=>{var _el$=_$createElement10("box")
1209
+ _$setProp10(_el$,"flexDirection","row")
1210
+ _$setProp10(_el$,"minWidth",0)
1211
+ _$insert9(_el$,_$createComponent13(LimitsAction,{get api(){return props.api
1058
1212
  },get interaction(){return props.interaction
1059
1213
  },inline:true,flexGrow:1,get maxWidth(){return Bun.stringWidth(`[${names().provider}] ${names().model}`) + 2
1060
1214
  },id:`${PLUGIN_ID}.limits.model`,get position(){return{section:props.navigationSection,row:1,column:0
@@ -1062,13 +1216,13 @@ _$insert7(_el$,_$createComponent11(LimitsAction,{get api(){return props.api
1062
1216
  },get disabled(){return !props.selection?.canOpen("model",props.model)
1063
1217
  },onActivate:()=>props.selection?.open("model",props.model)
1064
1218
  }),null)
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))
1219
+ _$insert9(_el$,_$createComponent13(Show5,{get when(){return props.model.variant||props.selection?.variants(props.model).length
1220
+ },get children(){return [(()=>{var _el$2=_$createElement10("text"),_el$3=_$createTextNode4(` \xB7 `)
1221
+ _$insertNode7(_el$2,_el$3)
1222
+ _$setProp10(_el$2,"flexShrink",0)
1223
+ _$effect9((_$p)=>_$setProp10(_el$2,"fg",props.api.theme.current.textMuted,_$p))
1070
1224
  return _el$2
1071
- })(),_$createComponent11(LimitsAction,{get api(){return props.api
1225
+ })(),_$createComponent13(LimitsAction,{get api(){return props.api
1072
1226
  },get interaction(){return props.interaction
1073
1227
  },inline:true,id:`${PLUGIN_ID}.limits.variant`,get position(){return{section:props.navigationSection,row:1,column:1
1074
1228
  }},get label(){return props.model.variant??"Default"
@@ -1079,15 +1233,15 @@ return _el$2
1079
1233
  return _el$
1080
1234
  })()
1081
1235
  }
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({})
1236
+ import {effect as _$effect10} from "@opentui/solid"
1237
+ import {insert as _$insert10} from "@opentui/solid"
1238
+ import {setProp as _$setProp11} from "@opentui/solid"
1239
+ import {createElement as _$createElement11} from "@opentui/solid"
1240
+ import {createComponent as _$createComponent14} from "@opentui/solid"
1241
+ import {memo as _$memo9} from "@opentui/solid"
1242
+ import {Show as Show6} from "solid-js"
1243
+ import {createSignal as createSignal11} from "solid-js"
1244
+ function createProviderAccountSource(ports){const [connections,setConnections]=createSignal11({})
1091
1245
  let generation=0
1092
1246
  let disposed=false
1093
1247
  let lastModel
@@ -1145,7 +1299,7 @@ return{...model,accountID:undefined,accountSource:undefined}
1145
1299
  const accountID=connection?.accountID??preferences?.codexAccountForConnection(model.providerID,connection?.id,model.modelID)
1146
1300
  const accountSource=connection?.accountID?"host":"binding"
1147
1301
  return{...model,accountID,accountSource:accountID?accountSource:undefined}}
1148
- import {createEffect as createEffect3,createMemo,on as on2,onCleanup as onCleanup3} from "solid-js"
1302
+ import {createEffect as createEffect3,createMemo as createMemo2,on as on2,onCleanup as onCleanup4} from "solid-js"
1149
1303
  function quotaStatusMessage(input){const{model,snapshot,state}=input
1150
1304
  if(state.status==="error")
1151
1305
  return snapshot?"Stale \xB7 refresh failed":"Quota read failed \xB7 refresh to retry"
@@ -1181,85 +1335,85 @@ function LimitsStatus(props){const message=()=>{const{model,adapter
1181
1335
  return quotaStatusMessage({model,snapshot:props.controller.snapshot(),state:props.controller.state(),hasAdapter:Boolean(adapter)
1182
1336
  })
1183
1337
  }
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))
1338
+ return _$createComponent14(Show6,{get when(){return _$memo9(()=>!!props.controller.current().model)()&&message()
1339
+ },children:(value)=>(()=>{var _el$=_$createElement11("text")
1340
+ _$setProp11(_el$,"wrapMode","word")
1341
+ _$insert10(_el$,value)
1342
+ _$effect10((_$p)=>_$setProp11(_el$,"fg",props.api.theme.current.textMuted,_$p))
1189
1343
  return _el$
1190
1344
  })()
1191
1345
  })
1192
1346
  }
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)
1347
+ import {createComponent as _$createComponent15} from "@opentui/solid"
1348
+ import {effect as _$effect11} from "@opentui/solid"
1349
+ import {createTextNode as _$createTextNode5} from "@opentui/solid"
1350
+ import {insertNode as _$insertNode8} from "@opentui/solid"
1351
+ import {memo as _$memo10} from "@opentui/solid"
1352
+ import {insert as _$insert11} from "@opentui/solid"
1353
+ import {setProp as _$setProp12} from "@opentui/solid"
1354
+ import {createElement as _$createElement12} from "@opentui/solid"
1355
+ import {Show as Show7,createSignal as createSignal12} from "solid-js"
1356
+ import {SelectionBox as SelectionBox3,useIcons as useIcons6} from "./tui.js"
1357
+ function Section(props){const icons=useIcons6()
1358
+ const [headerWidth,setHeaderWidth]=createSignal12(0)
1205
1359
  const icon=()=>props.section?icons.section(props.section):props.icon
1206
1360
  const theme=()=>props.api.theme.current
1207
1361
  const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
1208
1362
  }),activate:props.onToggle
1209
1363
  })
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
1364
+ return(()=>{var _el$=_$createElement12("box")
1365
+ _$setProp12(_el$,"gap",1)
1366
+ _$insert11(_el$,_$createComponent15(SelectionBox3,{ref:(node)=>item.ref(node),get id(){return props.sectionId
1213
1367
  },flexDirection:"row",height:1,justifyContent:"space-between",gap:1,get backgroundColor(){return item.backgroundColor()
1214
1368
  },get onMouseOver(){return item.onMouseOver
1215
1369
  },get onMouseOut(){return item.onMouseOut
1216
1370
  },onMouseDown:(event)=>item.activate(event),onSizeChange:function(){setHeaderWidth(this.width)
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())
1371
+ },get children(){return [(()=>{var _el$2=_$createElement12("text"),_el$3=_$createElement12("span"),_el$4=_$createTextNode5(` `),_el$5=_$createElement12("span"),_el$6=_$createElement12("b")
1372
+ _$insertNode8(_el$2,_el$3)
1373
+ _$insertNode8(_el$2,_el$4)
1374
+ _$insertNode8(_el$2,_el$5)
1375
+ _$insertNode8(_el$2,_el$6)
1376
+ _$setProp12(_el$2,"flexShrink",0)
1377
+ _$setProp12(_el$2,"wrapMode","none")
1378
+ _$insert11(_el$3,()=>icons.icon(props.open?"expanded":"collapsed"))
1379
+ _$insert11(_el$5,(()=>{var _c$=_$memo10(()=>!!icon())
1226
1380
  return()=>_c$()?`${icon()} `:""
1227
1381
  })())
1228
- _$insert9(_el$6,()=>props.title)
1229
- _$effect9((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
1382
+ _$insert11(_el$6,()=>props.title)
1383
+ _$effect11((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
1230
1384
  },_v$3={fg:item.focused()?item.foregroundColor():theme().accent
1231
1385
  }
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))
1386
+ _v$!==_p$.e&&(_p$.e=_$setProp12(_el$2,"fg",_v$,_p$.e))
1387
+ _v$2!==_p$.t&&(_p$.t=_$setProp12(_el$3,"style",_v$2,_p$.t))
1388
+ _v$3!==_p$.a&&(_p$.a=_$setProp12(_el$5,"style",_v$3,_p$.a))
1235
1389
  return _p$
1236
1390
  },{e:undefined,t:undefined,a:undefined
1237
1391
  })
1238
1392
  return _el$2
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
1393
+ })(),(()=>{var _el$7=_$createElement12("box")
1394
+ _$setProp12(_el$7,"flexDirection","row")
1395
+ _$setProp12(_el$7,"gap",1)
1396
+ _$setProp12(_el$7,"flexGrow",1)
1397
+ _$setProp12(_el$7,"minWidth",0)
1398
+ _$setProp12(_el$7,"justifyContent","flex-end")
1399
+ _$insert11(_el$7,()=>props.headerControls,null)
1400
+ _$insert11(_el$7,_$createComponent15(Show7,{get when(){return props.headerAction
1401
+ },children:(action)=>_$createComponent15(SectionHeaderControl,{get api(){return props.api
1248
1402
  },get interaction(){return props.interaction
1249
1403
  },get action(){return action()
1250
1404
  },get resetWidth(){return headerWidth()
1251
1405
  },get position(){return{section:props.navigationSection??0,row:0,column:1
1252
1406
  }}})
1253
1407
  }),null)
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))
1408
+ _$insert11(_el$7,_$createComponent15(Show7,{get when(){return props.summary
1409
+ },get children(){var _el$8=_$createElement12("text")
1410
+ _$setProp12(_el$8,"wrapMode","none")
1411
+ _$setProp12(_el$8,"truncate",true)
1412
+ _$setProp12(_el$8,"height",1)
1413
+ _$insert11(_el$8,()=>props.summary)
1414
+ _$effect11((_p$)=>{var _v$4=item.focused()?item.foregroundColor():theme().textMuted,_v$5=props.headerAction?0:1
1415
+ _v$4!==_p$.e&&(_p$.e=_$setProp12(_el$8,"fg",_v$4,_p$.e))
1416
+ _v$5!==_p$.t&&(_p$.t=_$setProp12(_el$8,"flexShrink",_v$5,_p$.t))
1263
1417
  return _p$
1264
1418
  },{e:undefined,t:undefined
1265
1419
  })
@@ -1268,7 +1422,7 @@ return _el$8
1268
1422
  return _el$7
1269
1423
  })()]
1270
1424
  }}),null)
1271
- _$insert9(_el$,_$createComponent13(Show8,{get when(){return props.open
1425
+ _$insert11(_el$,_$createComponent15(Show7,{get when(){return props.open
1272
1426
  },get children(){return props.children
1273
1427
  }}),null)
1274
1428
  return _el$
@@ -1279,47 +1433,47 @@ const model=()=>props.controller.current().model
1279
1433
  const snapshot=props.controller.snapshot
1280
1434
  function openCredits(){const selected=model()
1281
1435
  if(selected)
1282
- dialogs.open(()=>_$createComponent14(ResetCreditDialog,{get api(){return props.api
1436
+ dialogs.open(()=>_$createComponent16(ResetCreditDialog,{get api(){return props.api
1283
1437
  },get preferences(){return props.preferences
1284
1438
  },get controller(){return props.controller
1285
1439
  },get adapter(){return props.codex
1286
1440
  },model:selected
1287
1441
  }))
1288
1442
  }
1289
- return _$createComponent14(Section,{get api(){return props.api
1443
+ return _$createComponent16(Section,{get api(){return props.api
1290
1444
  },get interaction(){return props.interaction
1291
1445
  },sectionId:`${PLUGIN_ID}.section.limits`,get navigationSection(){return props.navigationSection
1292
- },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent14(LimitsHeaderControls,{get api(){return props.api
1446
+ },title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent16(LimitsHeaderControls,{get api(){return props.api
1293
1447
  },get interaction(){return props.interaction
1294
1448
  },get navigationSection(){return props.navigationSection
1295
- },get credits(){return(snapshot()?.bankedResets?.availableCount??0)>0||Boolean(props.preferences.pendingResetAttempt())
1449
+ },get credits(){return snapshot()?.bankedResets?.availableCount||Boolean(props.preferences.pendingResetAttempt())
1296
1450
  },get refreshing(){return ["loading","refreshing"].includes(props.controller.state().status)
1297
1451
  },get canRefresh(){return Boolean(model()&&(props.controller.current().adapter??model()?.hostConnection?.status==="unavailable"))
1298
1452
  },onCredits:openCredits,onRefresh:()=>void props.controller.refresh(true)
1299
1453
  })
1300
1454
  },get open(){return props.preferences.expanded().limits
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))
1455
+ },onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$createComponent16(Show8,{get when(){return model()
1456
+ },get fallback(){return(()=>{var _el$=_$createElement13("text")
1457
+ _$insertNode9(_el$,_$createTextNode6(`Open a session to view model limits`))
1458
+ _$effect12((_$p)=>_$setProp13(_el$,"fg",props.api.theme.current.textMuted,_$p))
1305
1459
  return _el$
1306
1460
  })()
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()
1461
+ },children:(selected)=>(()=>{var _el$3=_$createElement13("box")
1462
+ _$setProp13(_el$3,"width","100%")
1463
+ _$setProp13(_el$3,"minWidth",0)
1464
+ _$setProp13(_el$3,"flexShrink",1)
1465
+ _$setProp13(_el$3,"overflow","hidden")
1466
+ _$insert12(_el$3,_$createComponent16(LimitsModelRow,_$mergeProps(props,{get model(){return selected()
1313
1467
  },get selection(){return props.modelSelection
1314
1468
  }})),null)
1315
- _$insert10(_el$3,_$createComponent14(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
1469
+ _$insert12(_el$3,_$createComponent16(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
1316
1470
  }})),null)
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
1471
+ _$insert12(_el$3,_$createComponent16(Show8,{get when(){return _$memo11(()=>!!(snapshot()&&["ready","stale"].includes(snapshot().availability)))()?snapshot():undefined
1472
+ },children:(quota)=>_$createComponent16(QuotaSnapshotRows,{get api(){return props.api
1319
1473
  },get snapshot(){return quota()
1320
1474
  }})
1321
1475
  }),null)
1322
- _$insert10(_el$3,_$createComponent14(LimitsStatus,{get api(){return props.api
1476
+ _$insert12(_el$3,_$createComponent16(LimitsStatus,{get api(){return props.api
1323
1477
  },get controller(){return props.controller
1324
1478
  }}),null)
1325
1479
  return _el$3