@lmctl-ai/lmctl 0.2.290 → 0.2.292

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/build-info.json CHANGED
@@ -1 +1 @@
1
- {"sha": "9b0cb33d96dd61048204a06f7bccbb202ed91c16", "dirty": false, "builtAt": "2026-10-16T16:51:38.000Z"}
1
+ {"sha": "a3a824b78ab3de39e30b68fe76441dbd283f57e2", "dirty": false, "builtAt": "2026-10-16T18:04:52.000Z"}
package/dist/cli/index.js CHANGED
@@ -2643,7 +2643,7 @@ cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2643
2643
  Rates are base-tier USD per million; 1-hour write blends need turn counters.
2644
2644
  `});function at(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);return Number.isFinite(e)?Math.round(Math.min(1,Math.max(0,e))*1e6)/1e6:null}function En(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return at(e==="percent"?n/100:n)}function jN(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);if(!Number.isFinite(e))return null;try{return new Date(Math.trunc(e)*1e3).toISOString().replace(".000Z","Z")}catch{return null}}function WN(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function HN(t){let e=Number(t);return Number.isFinite(e)?e===300||e>=240&&e<=360?"five_hour":e===10080||e>=9e3&&e<=11500?"weekly":e===43200||e===44640||e>=38e3&&e<=46e3?"monthly":"unknown":"unknown"}function BN(t){let e=String(t??"").trim().toLowerCase().replace(/-/g,"_").split("_").filter(Boolean);for(let n of[e[0],e.at(-1)]){if(n?.startsWith("5h")||n?.startsWith("five")||n==="session")return"five_hour";if(n?.startsWith("7d")||n?.startsWith("seven")||n?.startsWith("week"))return"weekly";if(n?.startsWith("30d")||n?.startsWith("month"))return"monthly"}return"unknown"}function bo(t,e=[]){let n=t==null?"":String(t);for(let r of e)typeof r=="string"&&r.length>=4&&(n=n.replaceAll(r,"***REDACTED***"));for(let r of iq)n=n.replace(r,"***REDACTED***");return n}function At(t){let e=at(t.used_fraction),n=at(t.remaining_fraction),r=t.resets_at==null?WN(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?jN(r):jN(WN(t.resets_at_iso)),o={bucket_id:t.bucket_id,...t.group_name!=null?{group_name:t.group_name}:{},window_type:t.window_type??"unknown",used_fraction:e??(n===null?null:at(1-n)),remaining_fraction:n??(e===null?null:at(1-e)),resets_at:r==null||!Number.isFinite(r)?null:Math.trunc(r),resets_at_iso:s,is_exhausted:t.is_exhausted??(n!==null?n<=0:e!==null?e>=1:null)};for(let i of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[i]!=null&&(o[i]=t[i]);return o}function Ge(t,e,n={}){let r={$schema:oq,provider:t,status:e,source:n.source??null,read_at:n.read_at??Math.floor(Date.now()/1e3),account_id:n.account_id??null,plan_type:n.plan_type??null,ordinary_usage_allowed:n.ordinary_usage_allowed??null,buckets:n.buckets??[]};for(let s of["credits","spend_control","characteristics","reason","detail","retry_after_seconds"])n[s]!=null&&(r[s]=n[s]);return r}function ht(t,e,n,r,s,o=[],i){return Ge(t,e,{source:s??null,reason:n,...r==null?{}:{detail:bo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function XN(t){let e=t.get("retry-after");if(e===null)return null;let n=Number.parseFloat(e);return Number.isFinite(n)&&n>=0?Math.trunc(n):null}function Nt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=bo(n,[...r].filter(i=>typeof i=="string")).replace(/("(?:access[_-]?token|refresh[_-]?token|authorization|api[_-]?key|password)"\s*:\s*")[^"\r\n]*(")/gi,"$1***REDACTED***$2");t.onRawResponse?.({source:e,...s===void 0?{}:{http_status:s},text:o}),t.debug?.(`[debug] ${e}${s===void 0?"":` HTTP ${s}`} raw response:
2645
2645
  ${o}`)}function Io(t,e,n=[]){let r;try{let o=JSON.parse(e);r=typeof o?.error=="string"?o.error:o?.error?.message??o?.message??o?.detail}catch{/^\s*[<{[]/.test(e)||(r=e.trim())}if(typeof r!="string"||!r.trim())return t;let s=bo(r,n);return{...t,detail:s,provider_message:s}}var oq,iq,Hn=x(()=>{"use strict";oq="https://lmctl.com/schemas/lmratelimit-v1.json";iq=[/sk-ant-[A-Za-z0-9_-]{4,}/g,/sk-[A-Za-z0-9_-]{16,}/g,/\bbearer\s+[A-Za-z0-9._-]{8,}/gi,/\boat01[-_][A-Za-z0-9_-]{8,}/g,/\bcsrf[-_][A-Za-z0-9_-]{4,}/gi,/\b(?:csrf[-_]?token|x-codeium-csrf-token)\s*[:=]\s*['"]?[A-Za-z0-9._-]{4,}/gi]});import{spawnSync as aq}from"node:child_process";import{readdirSync as lq,readFileSync as cq}from"node:fs";import{join as dq}from"node:path";function Eq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function Tq(t){let e=t.trim().toLowerCase(),n={"gemini models":"gemini","claude and gpt models":"3p",gemini:"gemini","3p models":"3p","3p":"3p"};return n[e]?n[e]:e.replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"unknown"}function wq(t){let e=t.toLowerCase();return e.includes("weekly")?"weekly":e.includes("five hour")||e.includes("5-hour")||e.includes("5 hour")?"five_hour":e.includes("monthly")||e.includes("month")?"monthly":null}function vq(t){let e={weekly:"weekly",five_hour:"5h",monthly:"monthly"},n=[];for(let r of t.split(/\r?\n/)){let s=r.trim().split(" ").map(l=>l.trim());if(s.length<3||!s[0]||!s[1])continue;let o=wq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=at(i/100);n.push(At({bucket_id:`${Tq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:at(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:i,raw_scale:"remaining_percent"}))}return n.sort((r,s)=>String(r.group_name??"").localeCompare(String(s.group_name??""))||String(r.bucket_id??"").localeCompare(String(s.bucket_id??"")))}function ha(t,e,n){return ht("agy","provider_unavailable",t,e,"agy_cli_print")}function Sq(t,e,n={}){try{let r=_q(Math.max(t,60)*1e3,Eq(e));if(Nt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return ha("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return ha("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return ha("cli_failed",r.error.message,t);let s=vq(r.stdout??"");return s.length===0?ha("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ge("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return ha("cli_failed",r instanceof Error?r.message:String(r),t)}}function VN(t){if(!t||typeof t!="string")return null;let e=t.trim();if(!e||e.includes("@")||e.includes("/")||e.includes("\\")||e.includes("?")||e.includes("#")||e.includes("://")||/\s/.test(e))return null;let n;try{n=new URL(`http://${e}`)}catch{return null}if(n.username||n.password||n.pathname!=="/"||n.search||n.hash)return null;let r=n.hostname.toLowerCase();if(!(r==="localhost"||r==="127.0.0.1"||r==="[::1]"||r==="::1")||!n.port)return null;let o=Number(n.port);return!Number.isInteger(o)||o<1||o>65535||n.port!==String(o)?null:`${r==="::1"||r==="[::1]"?"[::1]":r}:${o}`}function bq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=VN(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[qN],t[GN],-1);try{for(let s of lq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of cq(dq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[qN],o[GN],Number(s))}catch{}}catch{}return e}function Iq(t){if(typeof t!="object"||t===null)return null;let e=t.response;if(typeof e!="object"||e===null)return null;let n=e.groups;if(!Array.isArray(n))return null;let r=[];for(let s of n){if(typeof s!="object"||s===null)continue;let o=s,i=typeof o.displayName=="string"?o.displayName:null;if(Array.isArray(o.buckets))for(let a of o.buckets){if(typeof a!="object"||a===null)continue;let l=a,c=En(l.remainingFraction,"fraction");r.push(At({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:BN(l.window),used_fraction:c===null?null:at(1-c),remaining_fraction:c,resets_at_iso:l.resetTime??null,raw_value:l.remainingFraction??null,raw_scale:"remaining_fraction"}))}}return r.length===0?null:(r.sort((s,o)=>String(s.group_name??"").localeCompare(String(o.group_name??""))||String(s.bucket_id??"").localeCompare(String(o.bucket_id??""))),Ge("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function kq(t,e,n={}){try{let s=yq(e).map(([a,l,c])=>[VN(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ht("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let o=[],i=Date.now()+t*1e3;for(let[a,l,c]of s){let d=i-Date.now();if(d<=0){o.push("overall connect deadline exceeded");break}try{let u=await gq(`http://${a}${uq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(Nt(n,"agy_connect_rpc",u.body,[l],u.status),u.status===200){let f;try{f=JSON.parse(u.body)}catch{o.push(`pid=${c}: unparseable response`);continue}let m=Iq(f);if(m)return m;o.push(`pid=${c}: response had no quota groups`)}else u.status===401||u.status===403?o.push(`pid=${c}: HTTP ${u.status} unauthorized`):o.push(`pid=${c}: HTTP ${u.status}`)}catch(u){o.push(`pid=${c}: ${u instanceof Error?u.message:String(u)}`)}}return ht("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${o.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return ht("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function JN(t){let e=await kq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Sq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ht("agy","provider_unavailable","cli_and_language_server_unavailable",`cli: ${String(n.reason??n.status)} (${String(n.detail??"no detail")}); connect: ${String(e.reason??e.status)} (${String(e.detail??"no detail")})`,"agy_cli_print")}var qN,GN,uq,fq,mq,pq,hq,_q,gq,yq,KN=x(()=>{"use strict";Hn();Hn();qN="ANTIGRAVITY_LS_ADDRESS",GN="ANTIGRAVITY_CSRF_TOKEN",uq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",fq=["-p","/usage"],mq=(t,e)=>{let n=aq("agy",fq,{encoding:"utf8",timeout:t,maxBuffer:16777216,env:e,stdio:["ignore","pipe","ignore"]});return{status:n.status,stdout:typeof n.stdout=="string"?n.stdout:"",error:n.error}},pq=async(t,e,n)=>{let r=await fetch(t,{method:"POST",headers:e,body:"{}",signal:AbortSignal.timeout(n),redirect:"error"});return{status:r.status,body:await r.text()}},hq=t=>bq(t),_q=mq,gq=pq,yq=hq});import{randomUUID as QN}from"node:crypto";import{mkdirSync as Aq,readFileSync as v_,realpathSync as Nq,renameSync as Rq,rmSync as S_,statSync as YN,writeFileSync as ZN}from"node:fs";import{homedir as Lq}from"node:os";import{join as b_}from"node:path";import{setTimeout as xq}from"node:timers/promises";function A_(t){return b_(t.CLAUDE_CONFIG_DIR??b_(t.HOME??Lq(),".claude"),".credentials.json")}function I_(t){let e=JSON.parse(v_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function k_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function eR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=A_(t);try{let n=k_(I_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Nq(e)}:{error:"not_claude_ai_subscriber"}}catch(n){return n.code==="ENOENT"?{error:t.ANTHROPIC_API_KEY?"not_claude_ai_subscriber":"no_credentials_found"}:{error:"credentials_unreadable"}}}function Od(t){return typeof t.expiresAt=="number"&&Date.now()+Dq>=t.expiresAt}function zN(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Mq(t,e){let n=`${t}.lmctl-refresh.lock`,r=b_(n,"owner.json"),s=QN();for(;;){e.throwIfAborted();try{Aq(n,{mode:448});try{ZN(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw S_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(v_(r,"utf8")).token===s&&S_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(v_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-YN(n).mtimeMs>6e4}catch{try{i=Date.now()-YN(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await xq(50,void 0,{signal:e})}}}async function tR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Mq(t.path,e);try{let r=k_(I_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!zN(r,t.oauth)&&!Od(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Oq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:Cq})});if(!s.ok)throw new Error(`refresh_http_${s.status}`);let o=await s.json();if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.expires_in!="number"||!Number.isFinite(o.expires_in)||o.expires_in<=0||o.refresh_token!==void 0&&(typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)))throw new Error("invalid_refresh_response");let i=Math.floor(Date.now()+o.expires_in*1e3);if(!Number.isSafeInteger(i)||i<=Date.now())throw new Error("invalid_refresh_response");let a=I_(t.path),l=k_(a);if(!l||!zN(r,l)){if(l&&typeof l.accessToken=="string"&&!Od(l))return l;throw new Error("credentials_changed")}let c={...l,accessToken:o.access_token,refreshToken:o.refresh_token??r.refreshToken,expiresAt:i,...typeof o.scope=="string"?{scopes:o.scope.split(/\s+/).filter(Boolean)}:{}},d=`${t.path}.${QN()}.tmp`;try{ZN(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Rq(d,t.path)}finally{S_(d,{force:!0})}return c}finally{n()}}var Cq,Oq,Dq,nR=x(()=>{"use strict";Cq="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Oq="https://console.anthropic.com/v1/oauth/token",Dq=3e5});import{spawnSync as oR}from"node:child_process";function Uq(t){let e=String(t??"").toLowerCase();return e.includes("session")||e.includes("five")||e.includes("5h")?"five_hour":e.includes("week")||e.includes("seven")||e.includes("7d")?"weekly":e.includes("month")||e.includes("30d")?"monthly":"unknown"}function iR(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Fq(t){try{let e=oR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:iR(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Vt(t,e,n,r="claude_oauth_api",s){return ht("claude",t,e,n,r,void 0,s)}function jq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Wq(t){if(!t)return;let e=/^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{1,2})(?::(\d{2}))?\s*(am|pm)?(?:\s*\(([^)]+)\))?$/i.exec(t.trim());if(!e)return;let n=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].indexOf(e[1].slice(0,3).toLowerCase());if(n<0)return;let r=Number(e[3]),s=Number(e[4]??0);(e[5]??"").toLowerCase()==="pm"&&r!==12&&(r+=12),(e[5]??"").toLowerCase()==="am"&&r===12&&(r=0);let o=new Date(Date.UTC(new Date().getUTCFullYear(),n,Number(e[2]),r,s));return Number.isFinite(o.getTime())?Math.floor(o.getTime()/1e3):void 0}function Bq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=Hq.exec(n.trim());if(!r)continue;let s=r[1].trim(),i=s.toLowerCase()==="session",a=/\(([^)]+)\)/.exec(s)?.[1]?.trim()??s,l=i?"session":a.toLowerCase()==="all models"?"week-all-models":`week-scoped-${a}`,c=i?"five_hour":"weekly";e.push(At({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:En(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:Wq(r[3])}))}return e.sort((n,r)=>String(n.window_type).localeCompare(String(r.window_type))||String(n.bucket_id).localeCompare(String(r.bucket_id)))}function Xq(t){let e={},n;for(let r of t.split(/\r?\n/)){let s=/^Last\s+(\S+)\s*[·-]\s*(\d+)\s+requests?\s*[·-]\s*(\d+)\s+sessions?\s*$/.exec(r.trim());if(s){n={requests:Number(s[2]),sessions:Number(s[3])},e[`window_${s[1].toLowerCase()}`]=n;continue}let o=/^\s+(\d+)%\s+of your usage\s+(.+?)\s*$/.exec(r);if(!o||!n)continue;let i=o[2].toLowerCase(),a=i.includes(">150k context")?"pct_high_context":i.includes("active for 8+ hours")?"pct_long_sessions":i.includes("subagent-heavy")?"pct_subagent_heavy":i.includes("ran in parallel")?"pct_parallel_sessions":void 0;a&&(n[a]=Number(o[1]))}return e}function qq(t,e){let n=t&&typeof t=="object"?t:void 0,r=e&&typeof e=="object"?e:void 0,s=!!(n?.limit||n?.used||n?.percent!==void 0);if(!s&&(!r||r.is_enabled===!1))return;let o=s&&n?.limit&&typeof n.limit=="object"?n.limit:{},i=s&&n?.used&&typeof n.used=="object"?n.used:{},a=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isSafeInteger(E)&&E>=0&&E<=9?E:void 0},l=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isFinite(E)?E:void 0},c=a(o.exponent??r?.decimal_places??2),d=a(i.exponent??r?.decimal_places??2),u=s?o.amount_minor:r?.monthly_limit,f=s?i.amount_minor:r?.used_credits,m=(g,E,y)=>E===void 0||y!==void 0&&y!=="USD"||l(g)===void 0?void 0:(l(g)/10**E).toFixed(2),p=En(s?n?.percent:r?.utilization,"percent"),_=s?n?.spend_limit_reached??r?.spend_limit_reached:r?.spend_limit_reached,h={limit_usd:m(u,c,o.currency??r?.currency),used_usd:m(f,d,i.currency??r?.currency),remaining_fraction:p==null?void 0:Math.max(0,1-p),resets_at_iso:s?n?.resets_at:void 0,...typeof _=="boolean"?{reached:_}:{}};return Object.values(h).every(g=>g==null)?void 0:h}async function sR(t,e,n,r={}){try{let s=oR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:iR(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";Nt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Bq(o);if(!i.length)return;let a=Xq(o);return Ge("claude",Ve.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:i,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function aR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=eR(e);if(s.error==="not_claude_ai_subscriber")return Vt(Ve.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Vt(Ve.unavailable,"credentials_missing",`credentials file not found: ${A_(e)}`);if(s.error)return Vt(Ve.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(rR))return Vt(Ve.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${rR} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,d;try{let g=!1,E=async()=>{try{o=await tR({...s,oauth:o},a.signal),g=!0}catch(T){let w=T instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(T.message)?T.message:"refresh_failed";if(w==="refresh_http_429")return Vt(Ve.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Vt(Ve.expired,"oauth_refresh_locked","a previous Claude credential refresh exited without releasing its lock; remove the stale .credentials.json.lmctl-refresh.lock directory before retrying");let S=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Vt(S?Ve.expired:Ve.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Od(o)){let T=await E();if(T)return T}let y=()=>fetch(`${$q}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":Pq,"Content-Type":"application/json","User-Agent":Fq(e)},signal:a.signal});if(c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status),c.status===401&&!g&&s.path&&o.refreshToken){let T=await E();if(T)return T;c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||Vt(Ve.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Io(Vt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ve.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ve.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=jq(c.headers),E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||u(Ve.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ve.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Vt(Ve.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Vt(Ve.unavailable,"malformed_response","response was not an object");let m=f,p=Array.isArray(m.limits)?m.limits:[],_=p.length?p.flatMap(g=>{if(!g||typeof g!="object")return[];let E=g.kind,y=Uq(E==="session"?"session":E),T=g.scope?.model?.display_name,w=E==="session"?"session":E==="weekly_all"?"week-all-models":`week-scoped-${T||E}`;return[At({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:En(g.percent,"percent"),resets_at_iso:g.resets_at,raw_value:g.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(g=>{let E=m[g];return!E||typeof E!="object"?[]:[At({bucket_id:g==="five_hour"?"session":"week-all-models",group_name:g==="five_hour"?"session":"weekly",window_type:g==="five_hour"?"five_hour":"weekly",used_fraction:En(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=qq(m.spend,m.extra_usage);return Ge("claude",Ve.ok,{source:"claude_oauth_api",account_id:null,plan_type:o.subscriptionType??o.rateLimitTier??null,ordinary_usage_allowed:null,buckets:_.sort((g,E)=>String(g.window_type).localeCompare(String(E.window_type))||String(g.bucket_id).localeCompare(String(E.bucket_id))),...h?{spend_control:h}:{}})}var $q,Pq,rR,Ve,Hq,lR=x(()=>{"use strict";Hn();nR();Hn();$q="https://api.anthropic.com",Pq="oauth-2025-04-20",rR="user:profile";Ve={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};Hq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as uR}from"node:crypto";import{mkdirSync as Gq,readFileSync as N_,realpathSync as Vq,renameSync as Jq,rmSync as R_,statSync as cR,writeFileSync as fR}from"node:fs";import{homedir as Kq}from"node:os";import{join as L_}from"node:path";import{setTimeout as Yq}from"node:timers/promises";function _a(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function C_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||L_(t.HOME||Kq(),".codex");return L_(e,"auth.json")}function x_(t){let e=_a(JSON.parse(N_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function mR(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=C_(t);try{let n=_a(x_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:Vq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function dR(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.id_token===e.id_token&&t.account_id===e.account_id}async function Zq(t,e){let n=`${t}.lmctl-refresh.lock`,r=L_(n,"owner.json"),s=uR();for(;;){e.throwIfAborted();try{Gq(n,{mode:448});try{fR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw R_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(N_(r,"utf8")).token===s&&R_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(N_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-cR(n).mtimeMs>6e4}catch{try{i=Date.now()-cR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Yq(50,void 0,{signal:e})}}}async function pR(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await Zq(t.path,e);try{let r=x_(t.path),s=_a(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!dR(s,t.tokens)&&typeof s.access_token=="string")return s;if(typeof s.refresh_token!="string"||!s.refresh_token)throw new Error("no_refresh_token");let o=await fetch(zq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:Qq})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=_a(await o.json());if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||i.refresh_token!==void 0&&(typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token))||i.id_token!==void 0&&(typeof i.id_token!="string"||!/^\S+$/.test(i.id_token)))throw new Error("invalid_refresh_response");let a=x_(t.path),l=_a(a.tokens);if(!l||!dR(s,l)){if(l&&typeof l.access_token=="string")return l;throw new Error("credentials_changed")}let c={...l,access_token:i.access_token,...i.refresh_token===void 0?{}:{refresh_token:i.refresh_token},...i.id_token===void 0?{}:{id_token:i.id_token}},d={...a,tokens:c,last_refresh:new Date().toISOString()},u=`${t.path}.${uR()}.tmp`;try{fR(u,JSON.stringify(d),{flag:"wx",mode:384}),Jq(u,t.path)}finally{R_(u,{force:!0})}return c}finally{n()}}var zq,Qq,hR=x(()=>{"use strict";zq="https://auth.openai.com/oauth/token",Qq="app_EMoamEEZ73f0CkXaXp7hrann"});function Tn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _R(t){let e=typeof t=="number"?t:Number(t);if(!Number.isFinite(e)||e<=0)return"unknown";let n=e/60;return n>=240&&n<=360?"five_hour":n>=9e3&&n<=11500?"weekly":n>=38e3&&n<=46e3?"monthly":"unknown"}function gR(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function nG(t){if(Tn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function rG(t){let e=[],n=Tn(t.rate_limit)?t.rate_limit:{},r=typeof n.allowed=="boolean"?n.allowed:void 0,s=typeof n.limit_reached=="boolean"?n.limit_reached:void 0;for(let i of["primary_window","secondary_window"]){let a=Tn(n[i])?n[i]:void 0;if(!a)continue;let l=_R(a.limit_window_seconds);e.push(At({bucket_id:`codex-${gR(l)}`,group_name:"codex",window_type:l,used_fraction:En(a.used_percent,"percent"),resets_at:a.reset_at,raw_value:a.used_percent,raw_scale:"used_percent",...r===void 0?{}:{allowed:r},...s===void 0?{}:{limit_reached:s}}))}let o=Array.isArray(t.additional_rate_limits)?t.additional_rate_limits:[];for(let i of o){if(!Tn(i))continue;let a=Tn(i.rate_limit)?i.rate_limit:{},l=typeof i.limit_name=="string"?i.limit_name:void 0,c=typeof i.metered_feature=="string"?i.metered_feature:void 0,d=c||l||"additional",u=typeof a.allowed=="boolean"?a.allowed:void 0,f=typeof a.limit_reached=="boolean"?a.limit_reached:void 0;for(let m of["primary_window","secondary_window"]){let p=Tn(a[m])?a[m]:void 0;if(!p)continue;let _=_R(p.limit_window_seconds);e.push(At({bucket_id:`${d}-${gR(_)}`,group_name:l||d,window_type:_,used_fraction:En(p.used_percent,"percent"),resets_at:p.reset_at,raw_value:p.used_percent,raw_scale:"used_percent",...l===void 0?{}:{limit_name:l},...c===void 0?{}:{metered_feature:c},...u===void 0?{}:{allowed:u},...f===void 0?{}:{limit_reached:f}}))}}return e.sort((i,a)=>String(i.group_name??"").localeCompare(String(a.group_name??""))||String(i.bucket_id).localeCompare(String(a.bucket_id)))}function sG(t){let e=Tn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Tn(t.spend_control)?t.spend_control:void 0,s=Tn(t.credits)?t.credits:void 0;return Ge("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:rG(t),...s?{credits:nG(s)}:{},...r?{spend_control:r}:{}})}async function yR(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=mR(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Ge("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${C_(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=i.access_token,d=new Set([i.access_token,i.refresh_token,i.id_token].filter(u=>typeof u=="string"&&!!u));try{let u=typeof i.account_id=="string"?i.account_id:void 0,f=typeof i.refresh_token=="string"?i.refresh_token:void 0,m=typeof i.id_token=="string"?i.id_token:void 0,p="",_=()=>[...d],h=(S,b)=>Io(Ge("codex",S,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await pR({...o,tokens:{...i,refresh_token:f}},a.signal);typeof S.access_token=="string"&&(d.add(S.access_token),c=S.access_token),u=typeof S.account_id=="string"?S.account_id:u,typeof S.refresh_token=="string"&&(d.add(S.refresh_token),f=S.refresh_token),typeof S.id_token=="string"&&(d.add(S.id_token),m=S.id_token),g=!0;return}catch(S){let b=S instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(S.message)?S.message:"refresh_failed",I=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Ge("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${I?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":tG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||eG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let S=await E();if(S)return S;T=await y(),p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status)}if(T.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(T.status===429){let S=T.headers.get("retry-after"),b=S===null?void 0:Number.parseInt(S,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...b!==void 0&&Number.isFinite(b)&&b>=0?{retry_after_seconds:b}:{}})}if(!T.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${T.status}`,detail:"codex usage endpoint returned an unexpected status"});let w;try{w=JSON.parse(p)}catch(S){return Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:bo(String(S),d)})}return Tn(w)?sG(w):Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(u){let f=u instanceof Error?`${u.name}: ${u.message}`:String(u);return Ge("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:bo(f,d)})}finally{clearTimeout(l)}}var eG,tG,ER=x(()=>{"use strict";Hn();hR();Hn();eG="https://chatgpt.com/backend-api",tG="codex-cli"});import{createHash as oG,randomUUID as iG}from"node:crypto";import{readFileSync as bR,openSync as aG,fsyncSync as lG,closeSync as cG,mkdirSync as TR,writeFileSync as IR,renameSync as dG,rmSync as uG,rmdirSync as fG,statSync as O_,utimesSync as mG}from"node:fs";import{homedir as pG}from"node:os";import{basename as hG,dirname as _G,join as Dd}from"node:path";import{setTimeout as kR}from"node:timers/promises";function yG(t){let e;try{e=bR(t,"utf8")}catch(s){if(s.code==="ENOENT")return{};throw new Error("config_unreadable")}let n={},r="other";for(let s of e.split(/\r?\n/)){let o=/^\s*\[providers\.(?:"managed:kimi-code"|'managed:kimi-code')(\.oauth)?\]\s*(?:#.*)?$/.exec(s);if(o){r=o[1]?"oauth.":"";continue}if(/^\s*\[/.test(s)){if(s.includes("managed:kimi-code"))throw new Error("config_format_unsupported");r="other";continue}if(r==="other")continue;if(/^\s*oauth\s*=/.test(s))throw new Error("config_format_unsupported");let i=/^\s*(base_url|oauth_host|storage|key)\s*=\s*("(?:[^"\\]|\\.)*"|'[^']*')\s*(?:#.*)?$/.exec(s);if(!i&&/^\s*(base_url|oauth_host|storage|key)\s*=/.test(s))throw new Error("config_malformed");if(i)try{n[r+i[1]]=i[2].startsWith('"')?JSON.parse(i[2]):i[2].slice(1,-1)}catch{throw new Error("config_malformed")}}return n}function Md(t){let e;try{e=JSON.parse(bR(t,"utf8"))}catch(n){throw new Error(n.code==="ENOENT"?"credentials_missing":"credentials_malformed")}if(e&&typeof e=="object"&&e.access_token===""&&e.refresh_token==="")throw new Error("credentials_revoked");if(!e||typeof e!="object"||Array.isArray(e)||typeof e.access_token!="string"||!e.access_token.trim())throw new Error("credentials_malformed");return e}function AR(t){let e=t.KIMI_CODE_HOME??Dd(t.HOME??pG(),".kimi-code"),n=yG(t.KIMI_CODE_CONFIG_PATH??Dd(e,"config.toml")),r=t.KIMI_CODE_BASE_URL!==void 0||t.KIMI_CODE_OAUTH_HOST!==void 0||t.KIMI_OAUTH_HOST!==void 0,s=vR(t.KIMI_CODE_BASE_URL??n.base_url??wR),o=vR(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?D_:n["oauth.oauth_host"]??D_)),i=s===wR&&o===D_?"kimi-code":`kimi-code-env-${oG("sha256").update(JSON.stringify({oauthHost:o,baseUrl:s})).digest("hex").slice(0,16)}`;if(!t.KIMI_CREDENTIALS_PATH&&!r&&n["oauth.key"]===`oauth/${i}`&&n["oauth.storage"]&&n["oauth.storage"]!=="file")throw new Error("credential_storage_unsupported");let a=t.KIMI_CREDENTIALS_PATH??Dd(e,"credentials",`${i}.json`),l=Md(a),c=a,d=hG(a,".json");return{home:e,path:c,lockTarget:Dd(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function $d(t){if(typeof t.expires_at!="number")return!1;let e=typeof t.expires_in=="number"?t.expires_in:0;return t.expires_at-Date.now()/1e3<Math.max(300,e*.5)}function SR(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.expires_at===e.expires_at&&t.expires_in===e.expires_in}async function EG(t,e){TR(_G(t),{recursive:!0}),IR(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{TR(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-O_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await kR(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=O_(n),s=()=>{let i;try{i=O_(n)}catch{throw new Error("refresh_lock_lost")}if(i.ino!==r.ino||i.dev!==r.dev)throw new Error("refresh_lock_lost")},o=setInterval(()=>{try{s();let i=new Date;mG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),fG(n)}catch{}}}}async function NR(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await EG(t.lockTarget,e);try{let r=Md(t.path);if(!SR(r,t.token)&&!$d(r))return r;if(typeof r.refresh_token!="string"||!r.refresh_token)throw new Error("no_refresh_token");let s;for(let u=0;u<3;u++){try{if(s=await fetch(`${t.oauthHost}/api/oauth/token`,{method:"POST",signal:e,headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","User-Agent":"lmctl"},body:new URLSearchParams({client_id:gG,grant_type:"refresh_token",refresh_token:r.refresh_token})}),![429,500,502,503,504].includes(s.status)||u===2)break;await s.body?.cancel()}catch{if(e.aborted||u===2)throw new Error("refresh_request_failed")}await kR(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Md(t.path);if(u.refresh_token!==r.refresh_token)return u}catch{}throw new Error(`refresh_http_${s.status}`)}let o=await s.json(),i=Number(o?.expires_in);if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)||!Number.isFinite(i)||i<=0)throw new Error("invalid_refresh_response");let a=Math.floor(Date.now()/1e3)+i;if(!Number.isSafeInteger(a))throw new Error("invalid_refresh_response");n.assertOwned();let l=Md(t.path);if(!SR(l,r)){if(!$d(l))return l;throw new Error("credentials_changed")}let c={...l,access_token:o.access_token,refresh_token:o.refresh_token,expires_at:a,expires_in:i,...typeof o.scope=="string"?{scope:o.scope}:{},...typeof o.token_type=="string"?{token_type:o.token_type}:{}},d=`${t.path}.${iG()}.tmp`;try{let u=aG(d,"wx",384);try{IR(u,JSON.stringify(c,null,2)+`
2646
- `),lG(u)}finally{cG(u)}n.assertOwned(),dG(d,t.path)}finally{uG(d,{force:!0})}return c}finally{n.release()}}var wR,D_,gG,vR,RR=x(()=>{"use strict";wR="https://api.kimi.com/coding/v1",D_="https://auth.kimi.com",gG="17e5f671-d194-4dfb-9706-5516cb48c098",vR=t=>t.trim().replace(/\/+$/,"")});function LR(t){let e=i=>{if(typeof i!="number"&&typeof i!="string"||typeof i=="string"&&i.trim()==="")return;let a=Number(i);return Number.isFinite(a)&&a>=0?a:void 0},n=e(t.limit),r=e(t.used),s=e(t.remaining);if(n===void 0||n<=0||r===void 0&&(s===void 0||s>n))return;let o=r??n-s;return{used:o,limit:n,remaining:Math.max(0,n-o)}}async function xR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=AR(e)}catch(_){let h=_ instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(_.message)?_.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let _=!1,h=async()=>{o=await NR({...s,token:o},i.signal),_=!0};$d(o)&&await h();let g=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${o.access_token}`,Accept:"application/json"},signal:i.signal});l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status),l.status===401&&!_&&o.refresh_token&&(await h(),l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(_){let h=_ instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(_.message)?_.message:"request_failed",g=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),E=h==="refresh_lock_stale"?"Kimi refresh lock is stale; run the native Kimi CLI to recover its lock, or verify no refresh is active before removing the .lock directory":g?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Io(ht("kimi",_,h,h,"kimi_http",[],g),c,[o.access_token]);if(l.status===401)return d("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return d("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let _=XN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",_)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(_){let h=String(_.bucket_id),g=h,E=2;for(;m.has(h);)h=`${g}-${E}`,E++;m.add(h),_.bucket_id=h,f.push(At(_))}if(Array.isArray(u.limits))for(let _ of u.limits){if(!_||typeof _!="object")continue;let h=_.window,g=_.detail;if(!h||typeof h!="object"||!g||typeof g!="object")continue;let E=0;if(h.timeUnit==="TIME_UNIT_MINUTE")E=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")E=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")E=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")E=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")E=Number(h.duration)*43200;else continue;let y=HN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=LR(g);if(!w)continue;let{used:S,limit:b,remaining:I}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/b),remaining_fraction:at(I/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=LR(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(_.used/_.limit),remaining_fraction:at(_.remaining/_.limit),resets_at_iso:u.usage.resetTime,raw_value:_.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let _=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:g,type:E}of _){let y=u.usages[h];if(!y||typeof y!="object"||y.used_ratio==null||y.used_ratio===""||typeof y.used_ratio=="boolean")continue;let T=Number(y.used_ratio);!Number.isFinite(T)||T<0||m.has(g)||(m.add(g),f.push(At({bucket_id:g,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var CR=x(()=>{"use strict";Hn();RR();Hn()});async function OR(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(d=>typeof d!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let d of e)if(!Pd.includes(d))return{status:"error",error:`unknown provider: ${d} (valid targets: ${Pd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??TG;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let i=Object.entries({codex:yR,agy:JN,claude:aR,kimi:xR}).filter(([d])=>s.has(d)).map(async([,d])=>{let u=[],f=await d({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:p=>u.push(p)}:{}}),m=t.includeRaw?{...f,raw_responses:u}:f;return m&&t.onReading?.(m),m}),a=await Promise.allSettled(i),l=a.find(d=>d.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(d=>d.status==="fulfilled").map(d=>d.value).filter(Boolean)}}var Pd,TG,DR=x(()=>{"use strict";KN();lR();ER();CR();Pd=["all","codex","agy","claude","kimi"],TG=15});var UR={};me(UR,{runRatelimit:()=>AG});function M_(t){return typeof t=="object"&&t!==null}function wG(t){return(0,We.formatPercent)(typeof t=="number"?t:null)}function vG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function bG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=SG[typeof e.window_type=="string"?e.window_type:""],s!==void 0&&(r=Math.min(1,Math.max(0,1-o/s))))}r!==null&&(n=`${(0,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[vG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${wG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function IG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&PR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(M_).map(d=>bG(a,d)):[],c=[];if(M_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(M_(t.spend_control)){let d=t.spend_control,u=` spend control: reached=${d.reached===!0}`;d.used_usd!==void 0&&d.used_usd!==null&&(u+=` used=$${String(d.used_usd)}`),d.limit_usd!==void 0&&d.limit_usd!==null&&(u+=` limit=$${String(d.limit_usd)}`),d.individual_limit!==void 0&&d.individual_limit!==null&&(u+=` individual_limit=${String(d.individual_limit)}`),c.push(u)}return{head:o,bucketRows:l,footers:c}}function kG(t){let e=IG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,We.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,We.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2646
+ `),lG(u)}finally{cG(u)}n.assertOwned(),dG(d,t.path)}finally{uG(d,{force:!0})}return c}finally{n.release()}}var wR,D_,gG,vR,RR=x(()=>{"use strict";wR="https://api.kimi.com/coding/v1",D_="https://auth.kimi.com",gG="17e5f671-d194-4dfb-9706-5516cb48c098",vR=t=>t.trim().replace(/\/+$/,"")});function LR(t){let e=i=>{if(typeof i!="number"&&typeof i!="string"||typeof i=="string"&&i.trim()==="")return;let a=Number(i);return Number.isFinite(a)&&a>=0?a:void 0},n=e(t.limit),r=e(t.used),s=e(t.remaining);if(n===void 0||n<=0||r===void 0&&(s===void 0||s>n))return;let o=r??n-s;return{used:o,limit:n,remaining:Math.max(0,n-o)}}async function xR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=AR(e)}catch(_){let h=_ instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(_.message)?_.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let _=!1,h=async()=>{o=await NR({...s,token:o},i.signal),_=!0};$d(o)&&await h();let g=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${o.access_token}`,Accept:"application/json"},signal:i.signal});l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status),l.status===401&&!_&&o.refresh_token&&(await h(),l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(_){let h=_ instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(_.message)?_.message:"request_failed",g=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),E=h==="refresh_lock_stale"?"Kimi refresh lock is stale; run the native Kimi CLI to recover its lock, or verify no refresh is active before removing the .lock directory":g?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Io(ht("kimi",_,h,h,"kimi_http",[],g),c,[o.access_token]);if(l.status===401)return d("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return d("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let _=XN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",_)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(_){let h=String(_.bucket_id),g=h,E=2;for(;m.has(h);)h=`${g}-${E}`,E++;m.add(h),_.bucket_id=h,f.push(At(_))}if(Array.isArray(u.limits))for(let _ of u.limits){if(!_||typeof _!="object")continue;let h=_.window,g=_.detail;if(!h||typeof h!="object"||!g||typeof g!="object")continue;let E=0;if(h.timeUnit==="TIME_UNIT_MINUTE")E=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")E=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")E=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")E=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")E=Number(h.duration)*43200;else continue;let y=HN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=LR(g);if(!w)continue;let{used:S,limit:b,remaining:I}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/b),remaining_fraction:at(I/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=LR(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(_.used/_.limit),remaining_fraction:at(_.remaining/_.limit),resets_at_iso:u.usage.resetTime,raw_value:_.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let _=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:g,type:E}of _){let y=u.usages[h];if(!y||typeof y!="object"||y.used_ratio==null||y.used_ratio===""||typeof y.used_ratio=="boolean")continue;let T=Number(y.used_ratio);!Number.isFinite(T)||T<0||m.has(g)||(m.add(g),f.push(At({bucket_id:g,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var CR=x(()=>{"use strict";Hn();RR();Hn()});async function OR(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(d=>typeof d!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let d of e)if(!Pd.includes(d))return{status:"error",error:`unknown provider: ${d} (valid targets: ${Pd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??TG;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let i=Object.entries({codex:yR,agy:JN,claude:aR,kimi:xR}).filter(([d])=>s.has(d)).map(async([,d])=>{let u=[],f=await d({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:p=>u.push(p)}:{}}),m=t.includeRaw?{...f,raw_responses:u}:f;return m&&t.onReading?.(m),m}),a=await Promise.allSettled(i),l=a.find(d=>d.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(d=>d.status==="fulfilled").map(d=>d.value).filter(Boolean)}}var Pd,TG,DR=x(()=>{"use strict";KN();lR();ER();CR();Pd=["all","codex","agy","claude","kimi"],TG=15});var UR={};me(UR,{runRatelimit:()=>AG});function M_(t){return typeof t=="object"&&t!==null}function wG(t){return typeof t=="number"&&t>0&&t<.005?`${(t*100).toFixed(1)}%`:(0,We.formatPercent)(typeof t=="number"?t:null)}function vG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function bG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=SG[typeof e.window_type=="string"?e.window_type:""],s!==void 0&&(r=Math.min(1,Math.max(0,1-o/s))))}r!==null&&(n=`${(0,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[vG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${wG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function IG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&PR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(M_).map(d=>bG(a,d)):[],c=[];if(M_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(M_(t.spend_control)){let d=t.spend_control,u=` spend control: reached=${d.reached===!0}`;d.used_usd!==void 0&&d.used_usd!==null&&(u+=` used=$${String(d.used_usd)}`),d.limit_usd!==void 0&&d.limit_usd!==null&&(u+=` limit=$${String(d.limit_usd)}`),d.individual_limit!==void 0&&d.individual_limit!==null&&(u+=` individual_limit=${String(d.individual_limit)}`),c.push(u)}return{head:o,bucketRows:l,footers:c}}function kG(t){let e=IG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,We.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,We.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2647
2647
  `)}function $_(t,e){return t.stderr.write(`error: ${e}
2648
2648
  ${$R}
2649
2649
  `),2}async function AG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${$R}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmctl-ai/lmctl",
3
- "version": "0.2.290",
3
+ "version": "0.2.292",
4
4
  "description": "A provider-agnostic control plane for teams of AI coding agents — across providers, with independent review and durable memory.",
5
5
  "type": "module",
6
6
  "homepage": "https://lmctl.com",