opencode-navigator 0.27.3 → 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.
- package/CHANGELOG.md +16 -0
- package/HOST_API.md +17 -0
- package/PROVIDERS.md +4 -0
- package/README.md +72 -5
- package/dist/{chunk-fd7394y1.js → chunk-4rh7rb74.js} +15 -1
- package/dist/chunk-sm9ej5ac.js +6 -0
- package/dist/chunk-tq2z58v5.js +23 -0
- package/dist/chunk-v6qckzat.js +838 -0
- package/dist/gui-experimental.cjs +9567 -8828
- package/dist/native-todo-setup.js +5 -830
- package/dist/navigator-updates.js +671 -321
- package/dist/provider-limits.js +491 -239
- package/dist/sidebar-settings.js +14 -17
- package/dist/tui.js +172 -132
- package/dist/upgrade-notes.js +4 -2
- package/package.json +5 -1
- package/dist/chunk-rrvwmnyh.js +0 -22
package/dist/provider-limits.js
CHANGED
|
@@ -134,7 +134,27 @@ 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
|
-
|
|
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}}
|
|
157
|
+
var CHATGPT_METHODS=new Set(["chatgpt-browser","chatgpt-headless","chatgpt-token-sharing"])
|
|
138
158
|
function providerAccountIdentity(provider,credentials){if(!provider.integrationID||provider.activation==="disabled")
|
|
139
159
|
return{status:"unsupported"}
|
|
140
160
|
const active=credentials.filter((entry)=>entry.integrationID===provider.integrationID&&entry.active)
|
|
@@ -438,13 +458,54 @@ input.api.ui.toast({variant:"warning",title:"Codex account",message:error instan
|
|
|
438
458
|
}}
|
|
439
459
|
return{link,busy
|
|
440
460
|
}}
|
|
441
|
-
import {effect as _$
|
|
442
|
-
import {insertNode as _$
|
|
443
|
-
import {insert as _$
|
|
444
|
-
import {
|
|
445
|
-
import {
|
|
446
|
-
import {
|
|
447
|
-
import {
|
|
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
|
+
};
|
|
448
509
|
function measurement(window,remaining){if(remaining!==undefined)
|
|
449
510
|
return `${remaining}${window.unit === "%" ? "" : " "}${window.unit} left`
|
|
450
511
|
if(window.used!==undefined)
|
|
@@ -453,6 +514,8 @@ return `${window.total} ${window.unit} capacity`
|
|
|
453
514
|
}
|
|
454
515
|
function resetTime(seconds,now){if(seconds===undefined)
|
|
455
516
|
return "Reset time unknown"
|
|
517
|
+
if(!Number.isFinite(seconds)||seconds<=0||!Number.isFinite(new Date(seconds*1000).getTime()))
|
|
518
|
+
return "Reset date invalid"
|
|
456
519
|
const date=new Date(seconds*1000)
|
|
457
520
|
const clock=date.toLocaleTimeString(undefined,{hour:"2-digit",minute:"2-digit"})
|
|
458
521
|
if(date.toDateString()===new Date(now).toDateString())
|
|
@@ -462,36 +525,42 @@ return `Resets ${date.toLocaleDateString(undefined, { month: "short", day: "nume
|
|
|
462
525
|
function quotaPresentation(window,now=Date.now()){const total=window.unit==="%"?100:window.total
|
|
463
526
|
const remaining=window.remaining??(total!==undefined&&window.used!==undefined?total-window.used:undefined)
|
|
464
527
|
const ratio=remaining!==undefined&&total!==undefined&&total>0?Math.max(0,Math.min(1,remaining / total)):undefined
|
|
465
|
-
|
|
466
|
-
|
|
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()
|
|
467
543
|
const [columns,setColumns]=createSignal4(0)
|
|
468
|
-
const
|
|
469
|
-
|
|
470
|
-
if(ratio===undefined)
|
|
471
|
-
return{filled:"Scale unknown",unfilled:""
|
|
544
|
+
const scale=()=>{if(props.ratio===undefined)
|
|
545
|
+
return{filled:"",unfilled:"Scale unknown"
|
|
472
546
|
}
|
|
473
|
-
const
|
|
474
|
-
const filled=Math.round(ratio*width)
|
|
547
|
+
const filled=Math.round(props.ratio*columns())
|
|
475
548
|
const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
|
|
476
|
-
return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(
|
|
549
|
+
return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(columns()-filled)
|
|
477
550
|
}}
|
|
478
|
-
const
|
|
479
|
-
const valueWidth=()=>Math.min(columns(),Bun.stringWidth(view().value))
|
|
551
|
+
const valueWidth=()=>Math.min(columns(),Bun.stringWidth(props.value))
|
|
480
552
|
const gap=()=>columns()>valueWidth()?1:0
|
|
481
|
-
const resetWidth=()=>Math.max(0,columns()-valueWidth()-gap())
|
|
482
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")
|
|
483
554
|
_$insertNode(_el$,_el$2)
|
|
484
555
|
_$insertNode(_el$,_el$4)
|
|
485
556
|
_$setProp(_el$,"width","100%")
|
|
486
557
|
_$setProp(_el$,"minWidth",0)
|
|
487
|
-
_$setProp(_el$,"flexShrink",1)
|
|
488
558
|
_$setProp(_el$,"height",2)
|
|
489
559
|
_$setProp(_el$,"overflow","hidden")
|
|
490
560
|
_$setProp(_el$,"onSizeChange",function(){setColumns(this.width)
|
|
491
561
|
})
|
|
492
562
|
_$insertNode(_el$2,_el$3)
|
|
493
563
|
_$setProp(_el$2,"width","100%")
|
|
494
|
-
_$setProp(_el$2,"minWidth",0)
|
|
495
564
|
_$setProp(_el$2,"height",1)
|
|
496
565
|
_$setProp(_el$2,"wrapMode","none")
|
|
497
566
|
_$setProp(_el$2,"truncate",true)
|
|
@@ -500,7 +569,6 @@ _$insert(_el$3,()=>scale().unfilled)
|
|
|
500
569
|
_$insertNode(_el$4,_el$5)
|
|
501
570
|
_$insertNode(_el$4,_el$6)
|
|
502
571
|
_$setProp(_el$4,"width","100%")
|
|
503
|
-
_$setProp(_el$4,"minWidth",0)
|
|
504
572
|
_$setProp(_el$4,"height",1)
|
|
505
573
|
_$setProp(_el$4,"flexDirection","row")
|
|
506
574
|
_$setProp(_el$4,"overflow","hidden")
|
|
@@ -508,13 +576,13 @@ _$setProp(_el$5,"minWidth",0)
|
|
|
508
576
|
_$setProp(_el$5,"height",1)
|
|
509
577
|
_$setProp(_el$5,"wrapMode","none")
|
|
510
578
|
_$setProp(_el$5,"truncate",true)
|
|
511
|
-
_$insert(_el$5,()=>
|
|
579
|
+
_$insert(_el$5,()=>props.label)
|
|
512
580
|
_$setProp(_el$6,"height",1)
|
|
513
581
|
_$setProp(_el$6,"wrapMode","none")
|
|
514
582
|
_$setProp(_el$6,"truncate",true)
|
|
515
|
-
_$insert(_el$6,()=>
|
|
516
|
-
_$effect((_p$)=>{var _v$=props.
|
|
517
|
-
},_v$3=
|
|
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
|
|
518
586
|
_v$!==_p$.e&&(_p$.e=_$setProp(_el$2,"fg",_v$,_p$.e))
|
|
519
587
|
_v$2!==_p$.t&&(_p$.t=_$setProp(_el$3,"style",_v$2,_p$.t))
|
|
520
588
|
_v$3!==_p$.a&&(_p$.a=_$setProp(_el$5,"width",_v$3,_p$.a))
|
|
@@ -528,10 +596,43 @@ return _p$
|
|
|
528
596
|
return _el$
|
|
529
597
|
})()
|
|
530
598
|
}
|
|
531
|
-
|
|
532
|
-
|
|
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"
|
|
533
634
|
import {SelectionMenu,useDialogs} from "./tui.js"
|
|
534
|
-
import {createComponent as _$
|
|
635
|
+
import {createComponent as _$createComponent3} from "@opentui/solid"
|
|
535
636
|
import {randomUUID} from "crypto"
|
|
536
637
|
import {GuardedConfirmation as GuardedConfirmation2,useDialogState} from "./tui.js"
|
|
537
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."
|
|
@@ -584,9 +685,12 @@ input.dialogs.back()
|
|
|
584
685
|
async function review(creditID){try{const snapshot=await model.review(creditID)
|
|
585
686
|
if(!snapshot)
|
|
586
687
|
return
|
|
587
|
-
|
|
688
|
+
const credit=snapshot.bankedResets?.credits?.find((item)=>item.id===creditID)
|
|
689
|
+
input.dialogs.open(()=>_$createComponent3(GuardedConfirmation2,{get api(){return input.api
|
|
588
690
|
},get current(){return input.current
|
|
589
|
-
},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
|
+
`)
|
|
590
694
|
},onConfirm:()=>void consume(creditID)
|
|
591
695
|
}))
|
|
592
696
|
} catch(error){if(input.current())
|
|
@@ -594,6 +698,136 @@ warn(error instanceof Error?error.message:"Credit eligibility is unavailable")
|
|
|
594
698
|
}}
|
|
595
699
|
return{review,consume,busy
|
|
596
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"
|
|
719
|
+
import {createTextNode as _$createTextNode} 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"
|
|
724
|
+
import {Show,createSignal as createSignal5} from "solid-js"
|
|
725
|
+
import {subtleLineColor as subtleLineColor2,useIcons as useIcons2} from "./tui.js"
|
|
726
|
+
function ResetCreditExpiry(props){const icons=useIcons2()
|
|
727
|
+
const [columns,setColumns]=createSignal5(0)
|
|
728
|
+
const lifetime=()=>resetCreditLifetime(props.credit,props.now)
|
|
729
|
+
const expiry=()=>{const timestamp=props.credit.expiresAt
|
|
730
|
+
if(timestamp===undefined||timestamp<=0)
|
|
731
|
+
return
|
|
732
|
+
const date=new Date(timestamp*1000)
|
|
733
|
+
return Number.isFinite(date.getTime())?date:undefined
|
|
734
|
+
}
|
|
735
|
+
const scale=()=>{const width=Math.max(0,Math.floor(columns()))
|
|
736
|
+
const filled=Math.round((lifetime().remaining??0)*width)
|
|
737
|
+
const symbols=icons.style()==="text"?["=","-"]:["\u2501","\u2500"]
|
|
738
|
+
return{filled:symbols[0].repeat(filled),unfilled:symbols[1].repeat(width-filled)
|
|
739
|
+
}}
|
|
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)
|
|
746
|
+
})
|
|
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))
|
|
764
|
+
return _p$
|
|
765
|
+
},{e:undefined,t:undefined
|
|
766
|
+
})
|
|
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
|
|
778
|
+
})()
|
|
779
|
+
}),null)
|
|
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
|
|
786
|
+
}}),null)
|
|
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
|
+
})
|
|
828
|
+
return _el$
|
|
829
|
+
})()
|
|
830
|
+
}
|
|
597
831
|
function ResetCreditDialog(props){const dialogs=useDialogs(props.api)
|
|
598
832
|
const key=JSON.stringify(props.model)
|
|
599
833
|
const current=()=>JSON.stringify(props.controller.current().model)===key
|
|
@@ -601,76 +835,94 @@ const pending=props.preferences.pendingResetAttempt
|
|
|
601
835
|
const credits=()=>props.controller.snapshot()?.bankedResets
|
|
602
836
|
const actions=createResetCreditActions({...props,dialogs,current
|
|
603
837
|
})
|
|
838
|
+
const [now,setNow]=createSignal6(Date.now())
|
|
839
|
+
const timer=setInterval(()=>setNow(Date.now()),30000)
|
|
840
|
+
onCleanup(()=>clearInterval(timer))
|
|
604
841
|
createEffect(()=>{if(!current())
|
|
605
842
|
dialogs.close()
|
|
606
843
|
})
|
|
607
|
-
const options=()=>[...credits()?.credits?.map((credit)=>({title:credit.title??`Credit ${credit.id}`,value:`credit:${credit.id}`,icon:"presets",description:
|
|
844
|
+
const options=createMemo(()=>[...credits()?.credits?.map((credit)=>({title:credit.title??`Credit ${credit.id}`,value:`credit:${credit.id}`,icon:"presets",description:""
|
|
608
845
|
}))??[],...credits()?.availableCount&&(credits()?.credits?.length??0)<credits().availableCount?[{title:"Use next available credit",value:"credit:",icon:"presets",description:"Credit details unavailable"
|
|
609
846
|
}]:[],...pending()?[{title:"Reconcile pending attempt",value:"retry",icon:"retry",description:"Reuse the previous idempotency key"
|
|
610
847
|
}]:[],{title:"Cancel",value:"cancel",icon:"close",description:"No credit is used"
|
|
611
|
-
}]
|
|
612
|
-
return _$
|
|
848
|
+
}])
|
|
849
|
+
return _$createComponent6(SelectionMenu,{get api(){return props.api
|
|
613
850
|
},get title(){return `Banked resets \xB7 ${credits()?.availableCount ?? 0} available${actions.busy() ? " \xB7 pending" : ""}`
|
|
614
|
-
},get options(){return options()
|
|
615
|
-
},get height(){return Math.min(
|
|
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())
|
|
857
|
+
}})
|
|
616
858
|
},onSelect:(option)=>{if(option.value==="cancel")
|
|
617
859
|
dialogs.back()
|
|
618
|
-
else if(option.value==="retry")
|
|
860
|
+
else if(!actions.busy()){if(option.value==="retry")
|
|
619
861
|
actions.consume(pending()?.creditID)
|
|
620
|
-
else if(option.value.startsWith("credit:"))
|
|
621
|
-
|
|
622
|
-
|
|
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
|
+
}}}})
|
|
623
867
|
}
|
|
624
|
-
import {createComponent as _$
|
|
625
|
-
import {For as For2,Show} from "solid-js"
|
|
626
|
-
import {effect as _$
|
|
627
|
-
import {insertNode as _$
|
|
628
|
-
import {insert as _$
|
|
629
|
-
import {memo as _$
|
|
630
|
-
import {setProp as _$
|
|
631
|
-
import {createElement as _$
|
|
632
|
-
function QuotaBalanceRow(props){return(()=>{var _el$=_$
|
|
633
|
-
_$
|
|
634
|
-
_$
|
|
635
|
-
_$
|
|
636
|
-
_$
|
|
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)
|
|
637
881
|
return()=>_c$()?"No configured cap":`${props.balance.amount} ${props.balance.unit ?? "(provider unit not specified)"}`
|
|
638
882
|
})())
|
|
639
|
-
_$
|
|
640
|
-
_$
|
|
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
|
|
641
885
|
}
|
|
642
|
-
_v$!==_p$.e&&(_p$.e=_$
|
|
643
|
-
_v$2!==_p$.t&&(_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))
|
|
644
888
|
return _p$
|
|
645
889
|
},{e:undefined,t:undefined
|
|
646
890
|
})
|
|
647
891
|
return _el$
|
|
648
892
|
})()
|
|
649
893
|
}
|
|
650
|
-
import {insert as _$
|
|
651
|
-
import {createComponent as _$
|
|
652
|
-
import {setProp as _$
|
|
653
|
-
import {createElement as _$
|
|
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"
|
|
654
898
|
import {For} from "solid-js"
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
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
|
|
662
913
|
},get window(){return props.windows[index()]
|
|
914
|
+
},get now(){return now()
|
|
663
915
|
}})
|
|
664
916
|
}))
|
|
665
917
|
return _el$
|
|
666
918
|
})()
|
|
667
919
|
}
|
|
668
|
-
function QuotaSnapshotRows(props){return [_$
|
|
669
|
-
},get children(){return _$
|
|
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
|
|
670
922
|
},get windows(){return props.snapshot.windows
|
|
671
923
|
}})
|
|
672
|
-
}}),_$
|
|
673
|
-
},children:(balance)=>_$
|
|
924
|
+
}}),_$createComponent8(For2,{get each(){return props.snapshot.balances
|
|
925
|
+
},children:(balance)=>_$createComponent8(QuotaBalanceRow,{get api(){return props.api
|
|
674
926
|
},balance
|
|
675
927
|
})
|
|
676
928
|
})]
|
|
@@ -720,8 +972,8 @@ function providerQuotaCapability(id,canonical){const key=aliases[canonical??id]?
|
|
|
720
972
|
const found=PROVIDER_QUOTA_CAPABILITIES.find((entry)=>entry.id===key)
|
|
721
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/"]
|
|
722
974
|
}}
|
|
723
|
-
import {createSignal as
|
|
724
|
-
function createOpenCodeUsageAdapter(context){const [revision,setRevision]=
|
|
975
|
+
import {createSignal as createSignal8} from "solid-js"
|
|
976
|
+
function createOpenCodeUsageAdapter(context){const [revision,setRevision]=createSignal8(0)
|
|
725
977
|
let generation=0
|
|
726
978
|
const location=()=>context.location??context.data.location.default()
|
|
727
979
|
const provider=(model)=>context.data.location.provider?.list(location())?.find((item)=>item.id===model.providerID)
|
|
@@ -779,33 +1031,33 @@ return{model,providerId:model.providerID,providerName:activeProvider.name,fetche
|
|
|
779
1031
|
dispose()
|
|
780
1032
|
}}
|
|
781
1033
|
return{adapter,target:(model)=>({...model,quotaContext:key()})}}
|
|
782
|
-
import {insert as _$
|
|
1034
|
+
import {insert as _$insert12} from "@opentui/solid"
|
|
783
1035
|
import {mergeProps as _$mergeProps} from "@opentui/solid"
|
|
784
|
-
import {setProp as _$
|
|
785
|
-
import {effect as _$
|
|
786
|
-
import {createTextNode as _$
|
|
787
|
-
import {insertNode as _$
|
|
788
|
-
import {createElement as _$
|
|
789
|
-
import {memo as _$
|
|
790
|
-
import {createComponent as _$
|
|
791
|
-
import {Show as
|
|
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"
|
|
792
1044
|
import {useDialogs as useDialogs3} from "./tui.js"
|
|
793
|
-
import {setProp as _$
|
|
794
|
-
import {effect as _$
|
|
795
|
-
import {createTextNode as _$
|
|
796
|
-
import {insertNode as _$
|
|
797
|
-
import {createElement as _$
|
|
798
|
-
import {memo as _$
|
|
799
|
-
import {createComponent as _$
|
|
800
|
-
import {Show as
|
|
801
|
-
import {useDialogs as useDialogs2,useIcons as
|
|
802
|
-
import {createComponent as _$
|
|
803
|
-
import {effect as _$
|
|
804
|
-
import {insert as _$
|
|
805
|
-
import {setProp as _$
|
|
806
|
-
import {createElement as _$
|
|
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"
|
|
807
1059
|
import {SelectionBox} from "./tui.js"
|
|
808
|
-
import {createSignal as
|
|
1060
|
+
import {createSignal as createSignal9,onCleanup as onCleanup3} from "solid-js"
|
|
809
1061
|
function sidebarInteractiveColors(theme,state,normalColor=theme.text,mode="row"){const highlighted=!state.disabled&&(state.focused||mode==="control"&&state.hovered)
|
|
810
1062
|
let backgroundColor=theme.backgroundPanel
|
|
811
1063
|
let foregroundColor=normalColor
|
|
@@ -821,14 +1073,14 @@ else if(highlighted)
|
|
|
821
1073
|
foregroundColor=theme.selectedListItemText
|
|
822
1074
|
return{backgroundColor,foregroundColor}}
|
|
823
1075
|
function useSidebarItem(api,interaction,descriptor,normalColor=()=>api.theme.current.text,mode="row"){let unregister
|
|
824
|
-
const [hovered,setHovered]=
|
|
1076
|
+
const [hovered,setHovered]=createSignal9(false)
|
|
825
1077
|
const disabled=()=>descriptor.disabled?.()===true
|
|
826
1078
|
const focused=()=>Boolean(interaction?.ownsFocus()&&interaction.isSelected(descriptor.id))
|
|
827
1079
|
const colors=()=>sidebarInteractiveColors(api.theme.current,{focused:focused(),hovered:hovered(),disabled:disabled()},normalColor(),mode)
|
|
828
1080
|
const ref=(renderable)=>{unregister?.()
|
|
829
1081
|
unregister=interaction?.register({...descriptor,renderable})
|
|
830
1082
|
}
|
|
831
|
-
|
|
1083
|
+
onCleanup3(()=>unregister?.())
|
|
832
1084
|
return{ref,disabled,focused,backgroundColor:()=>colors().backgroundColor,foregroundColor:()=>colors().foregroundColor,onMouseOver:()=>setHovered(true),onMouseOut:()=>setHovered(false),select(event){interaction?.mouseSelect(descriptor.id,event)
|
|
833
1085
|
},activate(event){if(interaction)
|
|
834
1086
|
return interaction.mouseActivate(descriptor.id,event)
|
|
@@ -839,7 +1091,7 @@ return true
|
|
|
839
1091
|
}}}
|
|
840
1092
|
function LimitsAction(props){const item=useSidebarItem(props.api,props.interaction,{id:props.id,position:()=>props.position,disabled:()=>props.disabled===true,activate:props.onActivate
|
|
841
1093
|
},()=>props.api.theme.current.text,props.inline?"control":"row")
|
|
842
|
-
return _$
|
|
1094
|
+
return _$createComponent9(SelectionBox,{ref:(node)=>item.ref(node),get id(){return props.id
|
|
843
1095
|
},height:1,get flexGrow(){return props.flexGrow
|
|
844
1096
|
},get maxWidth(){return props.maxWidth
|
|
845
1097
|
},flexShrink:1,minWidth:3,get backgroundColor(){return item.backgroundColor()
|
|
@@ -847,48 +1099,48 @@ return _$createComponent6(SelectionBox,{ref:(node)=>item.ref(node),get id(){retu
|
|
|
847
1099
|
},get onMouseOut(){return item.onMouseOut
|
|
848
1100
|
},onMouseUp:(event)=>{event.stopPropagation()
|
|
849
1101
|
item.activate(event)
|
|
850
|
-
},get children(){var _el$=_$
|
|
851
|
-
_$
|
|
852
|
-
_$
|
|
853
|
-
_$
|
|
854
|
-
_$
|
|
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))
|
|
855
1107
|
return _el$
|
|
856
1108
|
}})
|
|
857
1109
|
}
|
|
858
|
-
function CodexAccountControls(props){const icons=
|
|
1110
|
+
function CodexAccountControls(props){const icons=useIcons4()
|
|
859
1111
|
const model=()=>props.controller.current().model
|
|
860
1112
|
const accountLink=createCodexAccountLink({api:props.api,preferences:props.preferences,adapter:props.codex,model,dialogs:useDialogs2(props.api)
|
|
861
1113
|
})
|
|
862
1114
|
const eligible=()=>(props.model.providerID==="openai"||props.model.hostConnection?.providerID==="openai")&&props.model.hostConnection?.method!=="api"
|
|
863
|
-
const action=(id,row,label,onActivate)=>_$
|
|
1115
|
+
const action=(id,row,label,onActivate)=>_$createComponent10(LimitsAction,{get api(){return props.api
|
|
864
1116
|
},get interaction(){return props.interaction
|
|
865
1117
|
},id:`${PLUGIN_ID}.limits.${id}`,get position(){return{section:props.navigationSection,row,column:0
|
|
866
1118
|
}},label,onActivate,get disabled(){return accountLink.busy()
|
|
867
1119
|
}})
|
|
868
|
-
return _$
|
|
869
|
-
},get children(){return [_$
|
|
870
|
-
},get children(){return [(()=>{var _el$=_$
|
|
871
|
-
_$
|
|
872
|
-
_$
|
|
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))
|
|
873
1125
|
return _el$
|
|
874
|
-
})(),_$
|
|
875
|
-
}}),_$
|
|
876
|
-
},get children(){return [_$
|
|
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"
|
|
877
1129
|
},get children(){return action("relink",5,`${icons.icon("scope")} Relink Codex account`,()=>void accountLink.link())
|
|
878
1130
|
}})]
|
|
879
1131
|
}})]
|
|
880
1132
|
}})
|
|
881
1133
|
}
|
|
882
|
-
import {createComponent as _$
|
|
883
|
-
import {Show as
|
|
884
|
-
import {useIcons as
|
|
885
|
-
import {createComponent as _$
|
|
886
|
-
import {effect as _$
|
|
887
|
-
import {insert as _$
|
|
888
|
-
import {setProp as _$
|
|
889
|
-
import {createElement as _$
|
|
890
|
-
import {memo as _$
|
|
891
|
-
import {createEffect as createEffect2,createSignal as
|
|
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"
|
|
892
1144
|
import {SelectionBox as SelectionBox2} from "./tui.js"
|
|
893
1145
|
var graphemes=new Intl.Segmenter(undefined,{granularity:"grapheme"
|
|
894
1146
|
})
|
|
@@ -905,12 +1157,12 @@ result += segment
|
|
|
905
1157
|
}
|
|
906
1158
|
return result + ellipsis
|
|
907
1159
|
}
|
|
908
|
-
function SectionHeaderControl(props){const [width,setWidth]=
|
|
1160
|
+
function SectionHeaderControl(props){const [width,setWidth]=createSignal10()
|
|
909
1161
|
const control=useSidebarItem(props.api,props.interaction,{id:props.action.id,position:()=>props.position,disabled:props.action.disabled,activate:props.action.onActivate
|
|
910
1162
|
},()=>props.api.theme.current.accent,"control")
|
|
911
1163
|
createEffect2(on(()=>[props.action.label(),props.resetWidth],()=>setWidth(undefined)))
|
|
912
1164
|
const label=()=>width()===undefined||props.iconOnly?props.action.label():truncateEnd(props.action.label(),width()-2)
|
|
913
|
-
return _$
|
|
1165
|
+
return _$createComponent11(SelectionBox2,{ref:(node)=>control.ref(node),get id(){return props.action.id
|
|
914
1166
|
},get iconOnly(){return props.iconOnly
|
|
915
1167
|
},get width(){return props.iconOnly?3:undefined
|
|
916
1168
|
},get flexShrink(){return props.iconOnly?0:1
|
|
@@ -921,42 +1173,42 @@ return _$createComponent8(SelectionBox2,{ref:(node)=>control.ref(node),get id(){
|
|
|
921
1173
|
},get onMouseOut(){return control.onMouseOut
|
|
922
1174
|
},onMouseDown:(event)=>event.stopPropagation(),onMouseUp:(event)=>{event.stopPropagation()
|
|
923
1175
|
control.activate(event)
|
|
924
|
-
},get children(){var _el$=_$
|
|
925
|
-
_$
|
|
926
|
-
_$
|
|
927
|
-
_$
|
|
928
|
-
_$
|
|
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))
|
|
929
1181
|
return _el$
|
|
930
1182
|
}})
|
|
931
1183
|
}
|
|
932
|
-
function LimitsHeaderControls(props){const icons=
|
|
933
|
-
return [_$
|
|
934
|
-
},get children(){return _$
|
|
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
|
|
935
1187
|
},get interaction(){return props.interaction
|
|
936
1188
|
},get position(){return{section:props.navigationSection,row:0,column:1
|
|
937
|
-
}},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
|
|
938
1190
|
}}})
|
|
939
|
-
}}),_$
|
|
1191
|
+
}}),_$createComponent12(SectionHeaderControl,{get api(){return props.api
|
|
940
1192
|
},get interaction(){return props.interaction
|
|
941
1193
|
},iconOnly:true,get position(){return{section:props.navigationSection,row:0,column:2
|
|
942
1194
|
}},get action(){return{id:`${PLUGIN_ID}.limits.refresh`,label:()=>icons.icon(props.refreshing?"pending":"retry"),disabled:()=>props.refreshing||!props.canRefresh,onActivate:props.onRefresh
|
|
943
1195
|
}}})]
|
|
944
1196
|
}
|
|
945
|
-
import {insert as _$
|
|
946
|
-
import {effect as _$
|
|
947
|
-
import {createTextNode as _$
|
|
948
|
-
import {insertNode as _$
|
|
949
|
-
import {memo as _$
|
|
950
|
-
import {createComponent as _$
|
|
951
|
-
import {setProp as _$
|
|
952
|
-
import {createElement as _$
|
|
953
|
-
import {Show as
|
|
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"
|
|
954
1206
|
function LimitsModelRow(props){const names=()=>props.selection?.names(props.model)??{provider:props.model.providerID,model:props.model.modelID
|
|
955
1207
|
}
|
|
956
|
-
return(()=>{var _el$=_$
|
|
957
|
-
_$
|
|
958
|
-
_$
|
|
959
|
-
_$
|
|
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
|
|
960
1212
|
},get interaction(){return props.interaction
|
|
961
1213
|
},inline:true,flexGrow:1,get maxWidth(){return Bun.stringWidth(`[${names().provider}] ${names().model}`) + 2
|
|
962
1214
|
},id:`${PLUGIN_ID}.limits.model`,get position(){return{section:props.navigationSection,row:1,column:0
|
|
@@ -964,13 +1216,13 @@ _$insert6(_el$,_$createComponent10(LimitsAction,{get api(){return props.api
|
|
|
964
1216
|
},get disabled(){return !props.selection?.canOpen("model",props.model)
|
|
965
1217
|
},onActivate:()=>props.selection?.open("model",props.model)
|
|
966
1218
|
}),null)
|
|
967
|
-
_$
|
|
968
|
-
},get children(){return [(()=>{var _el$2=_$
|
|
969
|
-
_$
|
|
970
|
-
_$
|
|
971
|
-
_$
|
|
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))
|
|
972
1224
|
return _el$2
|
|
973
|
-
})(),_$
|
|
1225
|
+
})(),_$createComponent13(LimitsAction,{get api(){return props.api
|
|
974
1226
|
},get interaction(){return props.interaction
|
|
975
1227
|
},inline:true,id:`${PLUGIN_ID}.limits.variant`,get position(){return{section:props.navigationSection,row:1,column:1
|
|
976
1228
|
}},get label(){return props.model.variant??"Default"
|
|
@@ -981,15 +1233,15 @@ return _el$2
|
|
|
981
1233
|
return _el$
|
|
982
1234
|
})()
|
|
983
1235
|
}
|
|
984
|
-
import {effect as _$
|
|
985
|
-
import {insert as _$
|
|
986
|
-
import {setProp as _$
|
|
987
|
-
import {createElement as _$
|
|
988
|
-
import {createComponent as _$
|
|
989
|
-
import {memo as _$
|
|
990
|
-
import {Show as
|
|
991
|
-
import {createSignal as
|
|
992
|
-
function createProviderAccountSource(ports){const [connections,setConnections]=
|
|
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({})
|
|
993
1245
|
let generation=0
|
|
994
1246
|
let disposed=false
|
|
995
1247
|
let lastModel
|
|
@@ -1047,7 +1299,7 @@ return{...model,accountID:undefined,accountSource:undefined}
|
|
|
1047
1299
|
const accountID=connection?.accountID??preferences?.codexAccountForConnection(model.providerID,connection?.id,model.modelID)
|
|
1048
1300
|
const accountSource=connection?.accountID?"host":"binding"
|
|
1049
1301
|
return{...model,accountID,accountSource:accountID?accountSource:undefined}}
|
|
1050
|
-
import {createEffect as createEffect3,createMemo,on as on2,onCleanup as
|
|
1302
|
+
import {createEffect as createEffect3,createMemo as createMemo2,on as on2,onCleanup as onCleanup4} from "solid-js"
|
|
1051
1303
|
function quotaStatusMessage(input){const{model,snapshot,state}=input
|
|
1052
1304
|
if(state.status==="error")
|
|
1053
1305
|
return snapshot?"Stale \xB7 refresh failed":"Quota read failed \xB7 refresh to retry"
|
|
@@ -1083,85 +1335,85 @@ function LimitsStatus(props){const message=()=>{const{model,adapter
|
|
|
1083
1335
|
return quotaStatusMessage({model,snapshot:props.controller.snapshot(),state:props.controller.state(),hasAdapter:Boolean(adapter)
|
|
1084
1336
|
})
|
|
1085
1337
|
}
|
|
1086
|
-
return _$
|
|
1087
|
-
},children:(value)=>(()=>{var _el$=_$
|
|
1088
|
-
_$
|
|
1089
|
-
_$
|
|
1090
|
-
_$
|
|
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))
|
|
1091
1343
|
return _el$
|
|
1092
1344
|
})()
|
|
1093
1345
|
})
|
|
1094
1346
|
}
|
|
1095
|
-
import {createComponent as _$
|
|
1096
|
-
import {effect as _$
|
|
1097
|
-
import {createTextNode as _$
|
|
1098
|
-
import {insertNode as _$
|
|
1099
|
-
import {memo as _$
|
|
1100
|
-
import {insert as _$
|
|
1101
|
-
import {setProp as _$
|
|
1102
|
-
import {createElement as _$
|
|
1103
|
-
import {Show as
|
|
1104
|
-
import {SelectionBox as SelectionBox3,useIcons as
|
|
1105
|
-
function Section(props){const icons=
|
|
1106
|
-
const [headerWidth,setHeaderWidth]=
|
|
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)
|
|
1107
1359
|
const icon=()=>props.section?icons.section(props.section):props.icon
|
|
1108
1360
|
const theme=()=>props.api.theme.current
|
|
1109
1361
|
const item=useSidebarItem(props.api,props.interaction,{id:props.sectionId??`section.${props.title}`,position:()=>({section:props.navigationSection??0,row:0,column:0
|
|
1110
1362
|
}),activate:props.onToggle
|
|
1111
1363
|
})
|
|
1112
|
-
return(()=>{var _el$=_$
|
|
1113
|
-
_$
|
|
1114
|
-
_$
|
|
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
|
|
1115
1367
|
},flexDirection:"row",height:1,justifyContent:"space-between",gap:1,get backgroundColor(){return item.backgroundColor()
|
|
1116
1368
|
},get onMouseOver(){return item.onMouseOver
|
|
1117
1369
|
},get onMouseOut(){return item.onMouseOut
|
|
1118
1370
|
},onMouseDown:(event)=>item.activate(event),onSizeChange:function(){setHeaderWidth(this.width)
|
|
1119
|
-
},get children(){return [(()=>{var _el$2=_$
|
|
1120
|
-
_$
|
|
1121
|
-
_$
|
|
1122
|
-
_$
|
|
1123
|
-
_$
|
|
1124
|
-
_$
|
|
1125
|
-
_$
|
|
1126
|
-
_$
|
|
1127
|
-
_$
|
|
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())
|
|
1128
1380
|
return()=>_c$()?`${icon()} `:""
|
|
1129
1381
|
})())
|
|
1130
|
-
_$
|
|
1131
|
-
_$
|
|
1382
|
+
_$insert11(_el$6,()=>props.title)
|
|
1383
|
+
_$effect11((_p$)=>{var _v$=item.foregroundColor(),_v$2={fg:item.focused()?item.foregroundColor():theme().accent
|
|
1132
1384
|
},_v$3={fg:item.focused()?item.foregroundColor():theme().accent
|
|
1133
1385
|
}
|
|
1134
|
-
_v$!==_p$.e&&(_p$.e=_$
|
|
1135
|
-
_v$2!==_p$.t&&(_p$.t=_$
|
|
1136
|
-
_v$3!==_p$.a&&(_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))
|
|
1137
1389
|
return _p$
|
|
1138
1390
|
},{e:undefined,t:undefined,a:undefined
|
|
1139
1391
|
})
|
|
1140
1392
|
return _el$2
|
|
1141
|
-
})(),(()=>{var _el$7=_$
|
|
1142
|
-
_$
|
|
1143
|
-
_$
|
|
1144
|
-
_$
|
|
1145
|
-
_$
|
|
1146
|
-
_$
|
|
1147
|
-
_$
|
|
1148
|
-
_$
|
|
1149
|
-
},children:(action)=>_$
|
|
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
|
|
1150
1402
|
},get interaction(){return props.interaction
|
|
1151
1403
|
},get action(){return action()
|
|
1152
1404
|
},get resetWidth(){return headerWidth()
|
|
1153
1405
|
},get position(){return{section:props.navigationSection??0,row:0,column:1
|
|
1154
1406
|
}}})
|
|
1155
1407
|
}),null)
|
|
1156
|
-
_$
|
|
1157
|
-
},get children(){var _el$8=_$
|
|
1158
|
-
_$
|
|
1159
|
-
_$
|
|
1160
|
-
_$
|
|
1161
|
-
_$
|
|
1162
|
-
_$
|
|
1163
|
-
_v$4!==_p$.e&&(_p$.e=_$
|
|
1164
|
-
_v$5!==_p$.t&&(_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))
|
|
1165
1417
|
return _p$
|
|
1166
1418
|
},{e:undefined,t:undefined
|
|
1167
1419
|
})
|
|
@@ -1170,7 +1422,7 @@ return _el$8
|
|
|
1170
1422
|
return _el$7
|
|
1171
1423
|
})()]
|
|
1172
1424
|
}}),null)
|
|
1173
|
-
_$
|
|
1425
|
+
_$insert11(_el$,_$createComponent15(Show7,{get when(){return props.open
|
|
1174
1426
|
},get children(){return props.children
|
|
1175
1427
|
}}),null)
|
|
1176
1428
|
return _el$
|
|
@@ -1181,47 +1433,47 @@ const model=()=>props.controller.current().model
|
|
|
1181
1433
|
const snapshot=props.controller.snapshot
|
|
1182
1434
|
function openCredits(){const selected=model()
|
|
1183
1435
|
if(selected)
|
|
1184
|
-
dialogs.open(()=>_$
|
|
1436
|
+
dialogs.open(()=>_$createComponent16(ResetCreditDialog,{get api(){return props.api
|
|
1185
1437
|
},get preferences(){return props.preferences
|
|
1186
1438
|
},get controller(){return props.controller
|
|
1187
1439
|
},get adapter(){return props.codex
|
|
1188
1440
|
},model:selected
|
|
1189
1441
|
}))
|
|
1190
1442
|
}
|
|
1191
|
-
return _$
|
|
1443
|
+
return _$createComponent16(Section,{get api(){return props.api
|
|
1192
1444
|
},get interaction(){return props.interaction
|
|
1193
1445
|
},sectionId:`${PLUGIN_ID}.section.limits`,get navigationSection(){return props.navigationSection
|
|
1194
|
-
},title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$
|
|
1446
|
+
},title:"LIMITS",section:"limits",summary:"",get headerControls(){return _$createComponent16(LimitsHeaderControls,{get api(){return props.api
|
|
1195
1447
|
},get interaction(){return props.interaction
|
|
1196
1448
|
},get navigationSection(){return props.navigationSection
|
|
1197
|
-
},get credits(){return
|
|
1449
|
+
},get credits(){return snapshot()?.bankedResets?.availableCount||Boolean(props.preferences.pendingResetAttempt())
|
|
1198
1450
|
},get refreshing(){return ["loading","refreshing"].includes(props.controller.state().status)
|
|
1199
1451
|
},get canRefresh(){return Boolean(model()&&(props.controller.current().adapter??model()?.hostConnection?.status==="unavailable"))
|
|
1200
1452
|
},onCredits:openCredits,onRefresh:()=>void props.controller.refresh(true)
|
|
1201
1453
|
})
|
|
1202
1454
|
},get open(){return props.preferences.expanded().limits
|
|
1203
|
-
},onToggle:()=>props.preferences.toggleSectionExpanded("limits"),get children(){return _$
|
|
1204
|
-
},get fallback(){return(()=>{var _el$=_$
|
|
1205
|
-
_$
|
|
1206
|
-
_$
|
|
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))
|
|
1207
1459
|
return _el$
|
|
1208
1460
|
})()
|
|
1209
|
-
},children:(selected)=>(()=>{var _el$3=_$
|
|
1210
|
-
_$
|
|
1211
|
-
_$
|
|
1212
|
-
_$
|
|
1213
|
-
_$
|
|
1214
|
-
_$
|
|
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()
|
|
1215
1467
|
},get selection(){return props.modelSelection
|
|
1216
1468
|
}})),null)
|
|
1217
|
-
_$
|
|
1469
|
+
_$insert12(_el$3,_$createComponent16(CodexAccountControls,_$mergeProps(props,{get model(){return selected()
|
|
1218
1470
|
}})),null)
|
|
1219
|
-
_$
|
|
1220
|
-
},children:(quota)=>_$
|
|
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
|
|
1221
1473
|
},get snapshot(){return quota()
|
|
1222
1474
|
}})
|
|
1223
1475
|
}),null)
|
|
1224
|
-
_$
|
|
1476
|
+
_$insert12(_el$3,_$createComponent16(LimitsStatus,{get api(){return props.api
|
|
1225
1477
|
},get controller(){return props.controller
|
|
1226
1478
|
}}),null)
|
|
1227
1479
|
return _el$3
|