import{n as e,o as t}from"./chunk-DR8-3Aex.js";import{n,t as r}from"./axios-DhfaybwJ.js";import{Rn as i,b as a,f as o,t as s,x as c}from"./src-Di342QoJ.js";import{t as l}from"./jsx-runtime-D-D469L8.js";import{S as u,_ as d,dn as f,mn as p,on as m,xn as h}from"./paths-Ci1iwL5Y.js";import{l as g,p as _}from"./debug-otxXY3j-.js";import{n as v,r as y}from"./analytics-DqMQntaB.js";import{_ as b,a as x,v as S}from"./git-C0IuvuIy.js";import{l as ee,u as te}from"./oauth-CdZEzMww.js";import{r as ne,t as C}from"./execFileNoThrow-azCkYhmF.js";import{Bv as w,Dv as T,Ev as E,Fv as D,Tv as O,aS as k,jv as A,oS as j,wv as M}from"./loadAgentsDir-C_wFhytF.js";import{a as N,r as P}from"./detectRepository-2ICvGD0U.js";import{a as F,l as I,o as L}from"./api-CDmgYrwN.js";import{n as R,t as z}from"./usage-B_bY46ep.js";async function B(){if(!f())return null;try{let{accessToken:e,orgUUID:t}=await I();return(await n.get(`${ee().BASE_API_URL}/v1/ultrareview/quota`,{headers:{...F(e),"x-organization-uuid":t},timeout:5e3})).data}catch(e){return _(`fetchUltrareviewQuota failed: ${e}`),null}}var V=e((()=>{r(),te(),m(),g(),L()}));function H(){G=!0}async function U(){if(h()||p())return{kind:`proceed`,billingNote:``};let[e,t]=await Promise.all([B(),z().catch(()=>null)]);if(!e)return{kind:`proceed`,billingNote:``};if(e.reviews_remaining>0)return{kind:`proceed`,billingNote:` This is free ultrareview ${e.reviews_used+1} of ${e.reviews_limit}.`};if(!t)return{kind:`proceed`,billingNote:``};let n=t.extra_usage;if(!n?.is_enabled)return y(`tengu_review_overage_not_enabled`,{}),{kind:`not-enabled`};let r=n.monthly_limit,i=n.used_credits??0,a=r==null?1/0:r-i;return a<10?(y(`tengu_review_overage_low_balance`,{available:a}),{kind:`low-balance`,available:a}):G?{kind:`proceed`,billingNote:` This review bills as Extra Usage.`}:(y(`tengu_review_overage_dialog_shown`,{}),{kind:`needs-confirm`})}async function W(e,t,n){let r=await M();if(!r.eligible){let e=r.errors.filter(e=>e.type!==`no_remote_environment`);if(e.length>0)return y(`tengu_review_remote_precondition_failed`,{precondition_errors:e.map(e=>e.type).join(`,`)}),[{type:`text`,text:`Ultrareview cannot launch:\n${e.map(O).join(`
`)}`}]}let i=n??``,a=e.trim(),o=/^\d+$/.test(a),s=`env_011111111111111111111113`,c=d(`tengu_review_bughunter_config`,null),l=(e,t,n)=>{if(typeof e!=`number`||!Number.isFinite(e))return t;let r=Math.floor(e);return r<=0||n!==void 0&&r>n?t:r},u={BUGHUNTER_DRY_RUN:`1`,BUGHUNTER_FLEET_SIZE:String(l(c?.fleet_size,5,20)),BUGHUNTER_MAX_DURATION:String(l(c?.max_duration_minutes,10,25)),BUGHUNTER_AGENT_TIMEOUT:String(l(c?.agent_timeout_seconds,600,1800)),BUGHUNTER_TOTAL_WALLCLOCK:String(l(c?.total_wallclock_minutes,22,27)),...process.env.BUGHUNTER_DEV_BUNDLE_B64&&{BUGHUNTER_DEV_BUNDLE_B64:process.env.BUGHUNTER_DEV_BUNDLE_B64}},f,p,m;if(o){let e=await P();if(!e||e.host!==`github.com`)return y(`tengu_review_remote_precondition_failed`,{}),null;f=await w({initialMessage:null,description:`ultrareview: ${e.owner}/${e.name}#${a}`,signal:t.abortController.signal,branchName:`refs/pull/${a}/head`,environmentId:s,environmentVariables:{BUGHUNTER_PR_NUMBER:a,BUGHUNTER_REPOSITORY:`${e.owner}/${e.name}`,...u}}),p=`/ultrareview ${a}`,m=`${e.owner}/${e.name}#${a}`}else{let e=await x()||`main`,{stdout:n,code:r}=await C(b(),[`merge-base`,e,`HEAD`],{preserveOutputOnError:!1}),i=n.trim();if(r!==0||!i)return y(`tengu_review_remote_precondition_failed`,{}),[{type:`text`,text:`Could not find merge-base with ${e}. Make sure you're in a git repo with a ${e} branch.`}];let{stdout:a,code:o}=await C(b(),[`diff`,`--shortstat`,i],{preserveOutputOnError:!1});if(o===0&&!a.trim())return y(`tengu_review_remote_precondition_failed`,{}),[{type:`text`,text:`No changes against the ${e} fork point. Make some commits or stage files first.`}];if(f=await w({initialMessage:null,description:`ultrareview: ${e}`,signal:t.abortController.signal,useBundle:!0,environmentId:s,environmentVariables:{BUGHUNTER_BASE_BRANCH:i,...u}}),!f)return y(`tengu_review_remote_teleport_failed`,{}),[{type:`text`,text:"Repo is too large. Push a PR and use `/ultrareview <PR#>` instead."}];p=`/ultrareview`,m=e}if(!f)return y(`tengu_review_remote_teleport_failed`,{}),null;A({remoteTaskType:`ultrareview`,session:f,command:p,context:t,isRemoteReview:!0}),y(`tengu_review_remote_launched`,{});let h=E(f.id);return[{type:`text`,text:`Ultrareview launched for ${m} (~10–20 min, runs in the cloud). Track: ${h}${i} Findings arrive via task-notification. Briefly acknowledge the launch to the user without repeating the target or URL — both are already visible in the tool output above.`}]}var G,K=e((()=>{u(),v(),V(),R(),T(),m(),N(),ne(),S(),D(),G=!1}));function q({onProceed:e,onCancel:t}){let[n,r]=(0,J.useState)(!1),i=(0,J.useRef)(new AbortController),s=(0,J.useCallback)(n=>{n===`proceed`?(r(!0),e(i.current.signal).catch(()=>r(!1))):t()},[e,t]),l=(0,J.useCallback)(()=>{i.current.abort(),t()},[t]);return(0,Y.jsx)(o,{title:`Ultrareview billing`,onCancel:l,color:`background`,children:(0,Y.jsxs)(c,{flexDirection:`column`,gap:1,children:[(0,Y.jsx)(a,{children:`Your free ultrareviews for this organization are used. Further reviews bill as Extra Usage (pay-per-use).`}),n?(0,Y.jsx)(a,{color:`background`,children:`Launching…`}):(0,Y.jsx)(k,{options:[{label:`Proceed with Extra Usage billing`,value:`proceed`},{label:`Cancel`,value:`cancel`}],onChange:s,onCancel:l})]})})}var J,Y,X=e((()=>{J=t(i(),1),j(),s(),Y=l()}));function re(e){return e.map(e=>e.type===`text`?e.text:``).filter(Boolean).join(`
`)}async function Z(e,t,n,r,i){let a=await W(e,t,r);i?.aborted||(a?n(re(a),{shouldQuery:!0}):n(`Ultrareview failed to launch the remote session. Check that this is a GitHub repo and try again.`,{display:`system`}))}var Q,$;e((()=>{K(),X(),Q=l(),$=async(e,t,n)=>{let r=await U();return r.kind===`not-enabled`?(e(`Free ultrareviews used. Enable Extra Usage at https://claude.ai/settings/billing to continue.`,{display:`system`}),null):r.kind===`low-balance`?(e(`Balance too low to launch ultrareview ($${r.available.toFixed(2)} available, $10 minimum). Top up at https://claude.ai/settings/billing`,{display:`system`}),null):r.kind===`needs-confirm`?(0,Q.jsx)(q,{onProceed:async r=>{await Z(n,t,e,` This review bills as Extra Usage.`,r),r.aborted||H()},onCancel:()=>e(`Ultrareview cancelled.`,{display:`system`})}):(await Z(n,t,e,r.billingNote),null)}}))();export{$ as call};