freecode-sh 0.1.0-alpha.12 → 0.1.0-alpha.18
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/README.md +9 -4
- package/check-platform.mjs +20 -0
- package/freecode.mjs +156 -340
- package/install.ps1 +653 -0
- package/install.sh +642 -0
- package/package.json +10 -20
- package/THIRD_PARTY_NOTICES.md +0 -115
- package/engine.manifest.json +0 -8
- package/release-manifest.json +0 -38
- package/standalone.tsx +0 -28
package/standalone.tsx
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{use as ha}from"@opentui/solid";import{effect as Lt}from"@opentui/solid";import{insertNode as Ee}from"@opentui/solid";import{insert as $n}from"@opentui/solid";import{setProp as sn}from"@opentui/solid";import{createElement as dr}from"@opentui/solid";import{memo as Hn}from"@opentui/solid";import{createComponent as tn}from"@opentui/solid";import{createCliRenderer as sa}from"@opentui/core";import{render as ba,useRenderer as ya,useTerminalDimensions as P1}from"@opentui/solid";import{createEffect as cn,createMemo as q,createSignal as p,Match as ke,onCleanup as ur,Show as xf,Switch as xa,untrack as Nt}from"solid-js";import{createMutable as Ma}from"solid-js/store";var pc=new Set(["welcome","working","sidebar"]),nl=new Set(["welcome_primary","welcome_secondary","working_initial","working_sustained","working_complete","sidebar_display","sidebar_index"]),rl=new Set(["open_url","open_command","open_modal","prefill_prompt","invoke_gravity_index","begin_integration"]),tl=new Set(["/clear-error","/compact","/diff","/help","/mode","/sessions","/timeline","/todos"]),el=new Set(["diff","todos"]);function fe(n){let r=n?ol(n):{};return{welcome:{status:n?"ready":"idle",cards:r.welcome||[]},working:{status:"hidden",cards:r.working||[],activeIndex:0},sidebar:{card:r.sidebar?.[0],alternatives:[]},index:{status:"idle"},seenImpressions:new Set}}function ol(n){if(!n?.title)return{welcome:[],working:[],sidebar:[]};let t=(Array.isArray(n.cards)&&n.cards.length?n.cards:[n]).map((o,i)=>({revision:"local-1",kind:"sponsor",label:o.label||n.label||"SPONSORED",title:o.title,body:o.body||"",brandName:o.brandName||o.title,cta:o.cta||"",...C(o.category)?{category:C(o.category)}:{},...nt(o.faviconUrl)?{faviconUrl:o.faviconUrl}:{},...nt(o.url)?{action:{type:"open_url",url:o.url}}:{},provider:"local",metadata:{demo:Boolean(n.demo),...nt(o.url)?{websiteUrl:o.url}:{}},localIndex:i})),e=(o,i,f)=>{let u=t.length===1?"":`-${o.localIndex+1}-${Zr(o.brandName)}`,{localIndex:d,...l}=o;return{...l,id:`local-${i}-sponsor${u}`,placement:i,stage:f}};return{welcome:t.slice(0,3).map((o)=>e(o,"welcome","welcome_primary")),working:t.map((o)=>e(o,"working","working_initial")),sidebar:n.demo?[]:[e(t[0],"sidebar","sidebar_display")]}}function st(n,r={}){if(!n||typeof n!=="object")return;let t=pc.has(n.placement)?n.placement:r.placement,e=nl.has(n.stage)?n.stage:r.stage;if(!t||!e||typeof n.title!=="string"||!n.title.trim())return;let o=["sponsor","index","tip","status"].includes(n.kind)?n.kind:"sponsor",i=dl(n.action);return{id:String(n.id||`${t}-${e}-${Zr(n.title)}`),revision:String(n.revision||"1"),kind:o,placement:t,stage:e,...C(n.label)?{label:C(n.label)}:{},...C(n.category)?{category:C(n.category)}:{},title:n.title.trim().slice(0,120),...C(n.body)?{body:C(n.body).slice(0,360)}:{},...C(n.evidence)?{evidence:C(n.evidence).slice(0,160)}:{},...C(n.brandName)?{brandName:C(n.brandName).slice(0,80)}:{},...C(n.cta)?{cta:C(n.cta).slice(0,80)}:{},...nt(n.faviconUrl)?{faviconUrl:C(n.faviconUrl)}:{},...i?{action:i}:{},...C(n.impressionToken)?{impressionToken:C(n.impressionToken)}:{},...C(n.expiresAt)?{expiresAt:C(n.expiresAt)}:{},...C(n.provider)?{provider:C(n.provider)}:{},...n.metadata&&typeof n.metadata==="object"?{metadata:n.metadata}:{}}}function ud(n,r,t,{stage:e,status:o}={}){let i=(t||[]).map((u)=>st(u,{placement:r,stage:e})).filter(Boolean),f=Ft(n);if(r==="welcome")f.welcome={status:o||"ready",cards:i};if(r==="sidebar")f.sidebar={...f.sidebar,card:i[0],alternatives:i.slice(1)};if(r==="working"){let u=f.working.cards.filter((d)=>!i.some((l)=>l.id===d.id)&&(!d.expiresAt||Date.parse(d.expiresAt)>Date.now()));f.working={...f.working,status:o||(e==="working_complete"?"complete":"active"),cards:i.length?[...i,...u].slice(0,10):f.working.cards,activeIndex:0}}return f}function cd(n){if(n.working.status==="active"){let e=Ft(n);return e.working.startedAt||=Date.now(),e}let r=Ft(n),t=r.working.cards.filter((e)=>e.provider==="local");return r.working={...r.working,status:"active",cards:t,activeIndex:0,startedAt:Date.now()},r}function ld(n){let r=Ft(n);return r.working={...r.working,status:r.working.cards.length?"complete":"hidden",activeIndex:0},r}function md(n){let r=Ft(n);return r.working={...r.working,status:"hidden",cards:r.working.cards.filter((t)=>t.provider==="local"),activeIndex:0,startedAt:void 0},r}function gd(n){let r=n.working.cards.filter((e)=>e.kind!=="index");if(!["active","complete"].includes(n.working.status)||r.length<2)return n;let t=Ft(n);return t.working.activeIndex=(t.working.activeIndex+1)%r.length,t}function wd(n,r,t){if(n!=="working")return!0;if(r==="working_complete")return t==="idle";if(r==="working_sustained")return t==="working";return r==="working_initial"&&["working","idle"].includes(t)}function mi(n,{modelLabel:r,projectChecks:t=[]}={}){let e=n.transcript||[],o=e.filter((c)=>c.type==="user").length,i=(n.todos||[]).filter((c)=>c.status!=="completed"),f=e.filter((c)=>c.type==="tool"&&c.status==="failed"),u=[...f].reverse().find((c)=>/test|spec|check/i.test(ie(c))),d=[...e].reverse().find((c)=>c.type==="tool"&&/test|typecheck|lint|check|build/i.test(ie(c))),l=[...new Set((n.files||[]).map((c)=>ul(c.file||c.path)).filter(Boolean))].sort(),m=n.subagents||[],w=(t||[]).filter((c)=>C(c?.area)&&C(c?.script)&&C(c?.command)).slice(0,4),b=[...new Set(w.map((c)=>C(c.area)))].slice(0,4),O=[...e].reverse().find((c)=>c.type==="user")?.text||"",k={phase:n.status,changedFiles:n.files?.length||0,fileTypes:l,changedAreas:b,projectChecks:w.map((c)=>C(c.command)),activeTodos:i.length,topTodo:dn(i[0]?.content||i[0]?.title||"",100),currentGoal:dn(O,160),transcriptEntries:e.length,userTurns:o,failedTools:f.length,failedTests:u?1:0,failedTestKey:u?Ct(u.id||ie(u)||"failed-test"):"",verificationStatus:d?.status==="failed"?"failed":d?.status==="done"?"passed":"not_run",verificationTool:dn(Oi(d),80),runningSubagents:m.filter((c)=>c.status==="running").length,completedSubagents:m.filter((c)=>c.status==="completed").length,pendingSubagentInteractions:m.reduce((c,h)=>c+Number(h.pendingInteractions||0),0),model:C(r||n.model?.id||"Free Code").slice(0,40)},s=fl(n,k,{failedTest:u,activeTodos:i,checks:w}),g=s.map(({id:c,source:h,fallbackCopy:R,evidence:M})=>({id:c,source:h,fallbackCopy:R,evidence:M}));return{fingerprint:Ct(JSON.stringify({facts:k,candidates:g})),facts:k,candidates:g,localCandidates:s}}function gi(n,{prompt:r="",projectSignals:t={},projectChecks:e=[],placement:o="working",stage:i="working_initial",build:f="0.0.0",modelLabel:u,terminalDimensions:d}={}){let l=n?.transcript||[],m=dn(r||[...l].reverse().find((L)=>L.type==="user")?.text||"",4000),w=(n?.todos||[]).filter((L)=>L?.status!=="completed").map((L)=>dn(L?.content||L?.title||"",300)).filter(Boolean).slice(0,12),b=l.filter((L)=>L?.type==="tool").slice(-12).map((L)=>({category:dn(L.text||"tool",80),status:L.status==="failed"?"failed":L.status==="done"?"passed":"running",summary:dn(L.output||Oi(L)||"",600)})).filter((L)=>L.summary),O=[...b].reverse().find((L)=>L.status==="failed"),k=[...b].reverse().find((L)=>L.status==="passed"&&/test|typecheck|lint|check|build/i.test(L.category)),s=gl(l,m),g=wi(m,{dependencies:t.dependencies,existingServices:t.existingServices}),c=[...new Set((n?.files||[]).map((L)=>dn(L?.file||L?.path||"",240)).filter(Boolean))].slice(0,40),h=[...new Set((e||[]).map((L)=>dn(L?.area||"",120)).filter(Boolean))].slice(0,12),R=(e||[]).map((L)=>dn(L?.command||"",240)).filter(Boolean).slice(0,12),M=[m,w.length?`Active work: ${w.join("; ")}`:"",h.length?`Changed areas: ${h.join(", ")}`:"",O?`Latest failure: ${O.summary}`:""].filter(Boolean);return{version:2,currentRequest:m,taskSummary:dn(M.join(`
|
|
3
|
-
`),6000),relevantConversation:ml(l,m),stack:{languages:oe(t.languages,12,80),frameworks:oe(t.frameworks,20,100),dependencies:oe(t.dependencies,80,140),...dn(t.packageManager||"",40)?{packageManager:dn(t.packageManager,40)}:{},...dn(t.runtime||"",40)?{runtime:dn(t.runtime,40)}:{}},...dn(t.projectType||"",120)?{projectType:dn(t.projectType,120)}:{},architecture:oe(t.architecture,20,120),existingServices:oe(t.existingServices,20,120),changedAreas:h,relevantFiles:c,constraints:s,activeTodos:w,recentTools:b,verification:{availableChecks:R,latestStatus:O?"failed":k?"passed":"not_run"},agentPhase:["idle","planning","working","verifying","complete"].includes(n?.status)?n.status:n?.status==="connecting"?"idle":"working",...g?{serviceIntent:g}:{},product:{surface:"tui",placement:o,stage:i,modelTier:dn(u||n?.model?.id||"",80),build:dn(f,80)||"0.0.0"},device:{locale:Intl.DateTimeFormat().resolvedOptions().locale||"en-US",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||void 0,terminalDimensions:dn(d||"",40)||void 0}}}function wi(n,{dependencies:r=[],existingServices:t=[]}={}){let e=dn(n,4000).toLowerCase();if(!e)return;let i=[["Database",/\b(database|postgres|postgresql|mysql|sqlite|nosql|vector db|data store)\b/],["Auth",/\b(auth|authentication|authorization|identity|sso|oauth)\b/],["Payments",/\b(payment|payments|billing|checkout|subscription)\b/],["Email",/\b(email|transactional mail|newsletter)\b/],["Hosting",/\b(host|hosting|deploy|deployment|serverless platform|paas)\b/],["Monitoring",/\b(monitoring|observability|error tracking|apm|logging)\b/],["Analytics",/\b(analytics|product analytics|feature flag)\b/],["Cache",/\b(cache|redis|kv store)\b/],["Search",/\b(search api|full[- ]text search|site search)\b/],["Storage",/\b(object storage|file storage|uploads|blob storage)\b/],["Background Jobs",/\b(background job|job queue|task queue|cron service)\b/],["Realtime",/\b(realtime|websocket|presence|collaboration)\b/],["AI",/\b(llm api|ai api|embedding|model hosting|inference provider)\b/],["CMS",/\b(cms|content management|headless cms)\b/],["SMS",/\b(sms|text message|phone verification)\b/],["Webhooks",/\b(webhook|event relay)\b/]].find(([,l])=>l.test(e));if(!i)return;let f=/\b(what|which|recommend|best|choose|pick|compare|options?|should i use|need|add|integrat|set ?up|provision|migrate)\b/.test(e),u=[...r||[],...t||[]].some((l)=>e.includes(String(l).toLowerCase())),d=f?0.95:u?0.82:0.68;if(d<0.75)return;return{category:i[0],requirements:Md(e).slice(0,8),confidence:d}}function ad(n,r){let t=r?.recommendation||r,e=n?.localCandidates?.find((u)=>u.id===t?.candidateId),o=Number(t?.confidence),i=id(t?.title,80),f=id(t?.body,220);if(!e||!i||!f||!Number.isFinite(o)||o<0.35||o>1)return;return st({...e.card,id:`ai-${e.id}-${n.fingerprint}`,revision:n.fingerprint,title:i,body:f,evidence:e.evidence,brandName:void 0,provider:"freecode-ai",metadata:{candidateId:e.id,source:e.source,confidence:o,fingerprint:n.fingerprint}})}function hd(n,{hiddenCardIds:r=new Set,communityUrl:t="https://github.com/SchmitzAndrew/freecode",modelLabel:e,recommendedCard:o,projectChecks:i=[],tipIndex:f=0}={}){let u=o&&r.has(o.id)&&C(o.metadata?.candidateId),d=(b)=>{if(!b||r.has(b.id)||r.has(b.metadata?.candidateId))return;return b};if(n.error)return d(zn("recover-session-error","RECOVERY","Clear the current error",n.error,"Dismiss error",{type:"open_command",command:"/clear-error"}));if(n.pendingPermission){let b=C(n.pendingPermission.originLabel),O=C(n.pendingPermission.action)||"requested action",k=C(n.pendingPermission.resources?.[0]),s=rt({title:O});return d(zn(`permission-needed-${Zr(n.pendingPermission.id||`${b}-${O}-${k}`)}`,"ACTION NEEDED",s?"Gravity Index needs approval":b?`${b} needs ${O} approval`:`Approve ${O}`,k?`Requested ${k}. Respond in the active permission panel.`:"Respond in the active permission panel to continue.","",void 0,"status"))}if(n.pendingQuestion){let b=C(n.pendingQuestion.originLabel),O=C(n.pendingQuestion.questions?.[0]?.question)||"A decision is required to continue.";return d(zn(`question-needed-${Zr(n.pendingQuestion.id||O)}`,"ACTION NEEDED",b?`${b} needs a decision`:"Choose the next direction",O,"",void 0,"status"))}if(d(n.monetization?.index?.card))return n.monetization.index.card;let l=n.monetization?.working?.cards?.find((b)=>b.kind==="index");if(d(l))return l;if(n.monetization?.index?.status==="failed"){if(/platform_api_key|publisher key/i.test(n.monetization.index.error||""))return d(zn("gravity-index-failed","GRAVITY INDEX","Index unavailable","Gravity Index needs a publisher key before it can return live recommendations.","",void 0,"status"))}if(n.monetization?.index?.status==="searching"){let b=rt({title:n.pendingPermission?.action});return d(zn("gravity-index-searching","GRAVITY INDEX",b?"Approval needed":"Searching services\u2026",b?"Approve the Gravity Index request below to continue the recommendation.":"Finding a relevant service for this task.","",void 0,"status"))}if(n.retry)return d(zn("provider-retrying","RECOVERY","Free Code is retrying",n.retry.message||`Attempt ${n.retry.attempt||1} is in progress.`,"",void 0,"status"));if(d(o))return o;let m=mi(n,{modelLabel:e,projectChecks:i}).localCandidates.filter((b)=>b.source==="static");for(let b=0;b<m.length;b+=1){let O=m[(b+Math.max(0,f))%m.length];if(r.has(O.id)||O.id===u)continue;let k=d(O.card);if(k)return k}let w=il(t);for(let b=0;b<w.length;b+=1){let O=d(w[(Math.max(0,f)+b)%w.length]);if(O)return O}if(d(n.monetization?.sidebar?.card))return n.monetization.sidebar.card;return}function il(n){return[zn("freecode-tip-command-guide","TIP","See every Free Code command","Open the command guide without leaving your coding session.","Open guide",{type:"open_command",command:"/help"}),zn("freecode-tip-review-diff","TIP","Review exactly what changed","Open the project diff before you ship or hand work off.","Open diff",{type:"open_command",command:"/diff"}),zn("freecode-tip-switch-mode","TIP","Choose Build or Plan for the task","Switch modes when you want implementation or a read-only plan.","Choose mode",{type:"open_command",command:"/mode"}),zn("freecode-tip-resume-session","TIP","Pick up an earlier session","Browse saved sessions and continue with their project context.","Open sessions",{type:"open_command",command:"/sessions"}),...nt(n)?[zn("freecode-community","COMMUNITY","Help shape Free Code","Share feedback, follow releases, and see what other builders are working on.","Open community",{type:"open_url",url:n})]:[]]}function fl(n,r,{failedTest:t,activeTodos:e,checks:o}){let i=[],f=(d,l,m,w)=>i.push({id:d,source:l,evidence:m,fallbackCopy:{label:w.label,title:w.title,body:w.body},card:w});if(r.changedFiles){let d=n.files.map((w)=>w.file||w.path||"").join(" "),l=r.changedAreas.join(" + "),m=l?`Review changes in ${l}`:`Review ${r.changedFiles} changed file${r.changedFiles===1?"":"s"}`;f("review-diff","static",`${r.changedFiles} changed file${r.changedFiles===1?"":"s"}${r.changedAreas.length?` \xB7 ${r.changedAreas.join(", ")}`:""}`,zn(`review-diff-${Zr(d)}`,"CHANGED FILES",m,`${r.changedFiles} file${r.changedFiles===1?"":"s"} changed; inspect the exact diff before taking another action.`,"Open diff",{type:"open_command",command:"/diff"}))}if(r.activeTodos){let d=e.map((m)=>m.id||m.content||m.title||"").join(" "),l=r.topTodo||"the first unfinished task";f("review-todos","static",`${r.activeTodos} active task${r.activeTodos===1?"":"s"} \xB7 first: ${l}`,zn(`review-todos-${Zr(d)}`,"NEXT TASK",`Finish: ${l}`,`${r.activeTodos} task${r.activeTodos===1?" remains":"s remain"}; this is the first unfinished item.`,"Open tasks",{type:"open_command",command:"/todos"}))}if(t){let d=dn(Oi(t),80)||"the latest check";f("inspect-failed-tests","static",`${d} failed`,zn(`inspect-failed-tests-${Zr(t.id||ie(t))}`,"BLOCKED CHECK",`Fix ${d} before shipping`,"The latest recorded verification failed. Diagnose that command before adding more changes.","Prepare investigation",{type:"prefill_prompt",value:`Inspect the failed ${d} run, identify the root cause, and make the smallest safe fix. Re-run the same check and report the exact result.`}))}if(r.transcriptEntries>=18)f("compact-context","static",`${r.transcriptEntries} timeline entries`,zn(`compact-context-${r.transcriptEntries}`,"CONTEXT","Make room for the next task",`${r.transcriptEntries} timeline entries are active in this session.`,"Compact context",{type:"open_command",command:"/compact"}));if(r.changedFiles&&r.verificationStatus!=="failed"&&o.length){let d=[...new Set(o.map((w)=>w.area))],l=[...new Set(o.map((w)=>w.script))],m=o.map((w)=>w.command).join(`
|
|
4
|
-
`);f("run-relevant-checks","generated",`${d.join(", ")} exposes ${l.join(", ")}`,zn(`run-relevant-checks-${Zr(m)}`,"VERIFY",`Run ${l.join(" + ")} for ${d.join(" + ")}`,`${r.changedFiles} changed file${r.changedFiles===1?"":"s"} map to existing ${l.join(" and ")} scripts.`,"Prepare exact checks",{type:"prefill_prompt",value:`Run these existing project checks for the changed code:
|
|
5
|
-
${m}
|
|
6
|
-
Report the exact result of each command and do not claim success unless every command passes.`}))}if(r.completedSubagents){let d=(n.subagents||[]).find((w)=>w.status==="completed"),l=dd(d?.label,40)||"Subagent",m=dd(d?.description,100)||"delegated work";f("review-subagent-results","generated",`${l} completed: ${m}`,zn(`review-subagent-results-${r.completedSubagents}`,"DELEGATED RESULT",`Review ${l}: ${m}`,"Compare the completed delegated work with the original goal before closing the task.","Open timeline",{type:"open_command",command:"/timeline"}))}let u=new Map([["inspect-failed-tests",0],["review-todos",1],["run-relevant-checks",2],["review-diff",3],["review-subagent-results",4],["compact-context",5]]);return i.sort((d,l)=>(u.get(d.id)??99)-(u.get(l.id)??99)).slice(0,12)}function rt(n){let r=`${n?.title||n?.name||""} ${n?.provider||""}`;return/gravity[-_ ]?index/i.test(r)}function sd(n,r){let t=r??n?.output,e=xd(t),o=Ke(e)||ll(Se(t));if(!o)return;let i=C(o.name)||C(o.title)||C(o.serviceName)||C(o.brandName);if(!i)return;let f=C(o.description)||C(o.summary)||C(o.tagline)||C(o.body)||"A relevant service from Gravity Index.",u=C(o.setupUrl)||C(o.clickUrl)||C(o.click_url)||C(o.conversion_url)||C(o.url)||C(o.website_url)||C(o.href)||C(o.link)||C(e?.click_url)||C(e?.conversion_url),d=C(o.slug)||Zr(i),l=C(o.searchId)||C(o.search_id)||C(e?.searchId)||C(e?.search_id),m=fd(o.faviconUrl,o.favicon,o.favicon_url,o.logoUrl,o.logo_url)||cl(o.websiteUrl||o.website_url),w=fd(o.websiteUrl,o.website_url),b=u?{type:"open_url",url:u}:l?{type:"begin_integration",searchId:l,serviceSlug:d}:{type:"prefill_prompt",value:`Set up ${i} for this project`};return st({id:`gravity-index-${l||d}`,revision:"1",kind:"index",placement:"sidebar",stage:"sidebar_index",label:"GRAVITY INDEX",category:C(o.category)||"SERVICE MATCH",title:i,body:f,brandName:C(o.brandName)||i,cta:C(o.cta)||(u?"Open setup":"Start setup"),...m?{faviconUrl:m}:{},action:b,provider:"gravity-index",metadata:{searchId:l,serviceSlug:d,...w?{websiteUrl:w}:{}}})}function ai(n){let r=Se(n);if(!r)return;return/(?:Search|Browse|Lookup|Categories|Report) failed:|platform_api_key|publisher key required|\b401\b/i.test(r)?r:void 0}async function hi({baseUrl:n,apiKey:r,placement:t,stage:e,count:o=1,sessionPseudonym:i,turnPseudonym:f,sequence:u=0,elapsedMs:d=0,context:l={},signal:m}){if(!n)return[];let w=bi(),b=await fetch(`${n.replace(/\/$/,"")}/v1/monetization/fill`,{method:"POST",signal:m,headers:{"content-type":"application/json",...r?{authorization:`Bearer ${r}`}:{},"user-agent":`FreeCode/${w}`,"x-freecode-version":w},body:JSON.stringify({placement:t,stage:e,count:o,surface:"tui",sessionPseudonym:i,turnPseudonym:f,sequence:u,elapsedMs:d,clientVersion:w,locale:Intl.DateTimeFormat().resolvedOptions().locale||"en-US",context:l})});if(b.status===204)return[];if(!b.ok)throw Error(`Monetization fill failed (${b.status})`);return((await b.json()).cards||[]).map((k)=>st(k,{placement:t,stage:e})).filter(Boolean)}async function si({baseUrl:n,apiKey:r,operation:t="search",query:e,searchId:o,serviceSlug:i,status:f,context:u={},metadata:d={},sessionPseudonym:l,turnPseudonym:m,signal:w}){if(!n)return{};let b=bi(),O=await fetch(`${n.replace(/\/$/,"")}/v1/monetization/index`,{method:"POST",signal:w,headers:{"content-type":"application/json",...r?{authorization:`Bearer ${r}`}:{},"user-agent":`FreeCode/${b}`,"x-freecode-version":b},body:JSON.stringify({operation:t,query:e,searchId:o,serviceSlug:i,status:f,context:u,metadata:{...d,clientVersion:b,sessionPseudonym:l,turnPseudonym:m}})});if(!O.ok){let s=await O.json().catch(()=>({}));throw Error(C(s?.error)||`Gravity Index request failed (${O.status})`)}let k=await O.json();return{...k,card:st(k.card,{placement:"sidebar",stage:"sidebar_index"})}}function bi(n=process.env){return/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(n.FREECODE_RELEASE_VERSION||"")?n.FREECODE_RELEASE_VERSION:"0.0.0"}async function yi({baseUrl:n,apiKey:r,type:t,card:e,sessionPseudonym:o,turnPseudonym:i}){if(!n||!e?.id)return;let f=bi();await fetch(`${n.replace(/\/$/,"")}/v1/monetization/${t}`,{method:"POST",headers:{"content-type":"application/json",...r?{authorization:`Bearer ${r}`}:{},"user-agent":`FreeCode/${f}`,"x-freecode-version":f},body:JSON.stringify({cardId:e.id,revision:e.revision,placement:e.placement,stage:e.stage,impressionToken:e.impressionToken,sessionPseudonym:o,turnPseudonym:i})})}function Ct(n){let r=2166136261;for(let t of String(n||"anonymous"))r^=t.charCodeAt(0),r=Math.imul(r,16777619);return`p_${(r>>>0).toString(16).padStart(8,"0")}`}function xi(n=4096){let r=Number.isSafeInteger(n)&&n>0?n:4096;return{keys:new Set,capacity:r}}function bd(n,r){if(!(n?.keys instanceof Set)||!Number.isSafeInteger(n.capacity)||n.capacity<=0||typeof r!=="string"||!r)return!1;if(n.keys.has(r))return!1;if(n.keys.size>=n.capacity)return!1;return n.keys.add(r),!0}function Mi(n,r=3){let t=Number.isSafeInteger(n)&&n>=0?n:0,e=Number.isSafeInteger(r)&&r>0?r:3;return t<e?t+1:void 0}function dn(n,r=1000){if(typeof n!=="string"||!n)return"";let t="[REDACTED]";return n.replace(/-----BEGIN [^-\n]*PRIVATE KEY-----[\s\S]*?-----END [^-\n]*PRIVATE KEY-----/gi,t).replace(/((?:["'])?[a-z0-9_.-]*(?:api[\s_-]?key|secret|token|password|passwd|pwd|credential|authorization)[a-z0-9_.-]*(?:["'])?\s*(?:=|:)\s*)(?:"[^"\n]*"|'[^'\n]*'|[^\s,;}\]]+)/gi,`$1${t}`).replace(/\b(Bearer)\s+[a-z0-9._~+\/-]+=*/gi,`$1 ${t}`).replace(/([?&](?:api[_.-]?key|key|secret|token|password)=)[^&\s]+/gi,`$1${t}`).replace(/([a-z][a-z0-9+.-]*:\/\/[^:\s/@]+:)[^@\s/]+@/gi,`$1${t}@`).replace(/\b(?:sk-(?:live|test)-?[a-z0-9_-]+|gh[oprsu]_[a-z0-9_]+|github_pat_[a-z0-9_]+|xox[baprs]-[a-z0-9-]+|AKIA[A-Z0-9]{16}|AIza[a-z0-9_-]{20,})\b/gi,t).replace(/\b(?=[a-z0-9_-]{32,}\b)(?=[a-z0-9_-]*[a-z])(?=[a-z0-9_-]*\d)[a-z0-9_-]{32,}\b/gi,t).slice(0,Math.max(0,r))}function dl(n){if(!n||typeof n!=="object"||!rl.has(n.type))return;if(n.type==="open_url"&&nt(n.url))return{type:n.type,url:n.url};if(n.type==="open_command"&&tl.has(n.command))return{type:n.type,command:n.command};if(n.type==="open_modal"&&el.has(n.modal))return{type:n.type,modal:n.modal};if(n.type==="prefill_prompt"&&C(n.value))return{type:n.type,value:n.value.slice(0,500)};if(n.type==="invoke_gravity_index"&&C(n.query))return{type:n.type,query:n.query.slice(0,500)};if(n.type==="begin_integration"&&C(n.searchId)&&C(n.serviceSlug))return{type:n.type,searchId:n.searchId,serviceSlug:n.serviceSlug};return}function nt(n){if(!C(n))return!1;try{return new URL(n).protocol==="https:"}catch{return!1}}function id(n,r){if(!C(n))return"";let t=dn(n,r).replace(/\s+/g," ").trim();if(!t||t.includes("[REDACTED]")||/https?:\/\/|(?:^|\s)\/[a-z][\w-]*/i.test(t))return"";return t.slice(0,r)}function ul(n){return C(n).toLowerCase().match(/\.([a-z0-9]{1,10})$/)?.[1]}function ie(n){if(!n)return"";let r=yd(n);return[C(n.text),r].filter(Boolean).join(" ").slice(0,500)}function Oi(n){let r=C(n?.text),t=yd(n);return t&&/^(?:bash|shell|exec|terminal)$/i.test(r||"")?t:ie(n)}function yd(n){let r=n?.input;return typeof r==="string"?r:C(r?.command)||C(r?.cmd)||C(r?.script)}function fd(...n){return n.map(C).find((r)=>nt(r))}function cl(n){if(!nt(n))return;try{let r=new URL(n);return r.hostname?`https://www.google.com/s2/favicons?domain_url=${encodeURIComponent(r.origin)}&sz=64`:void 0}catch{return}}function Ke(n,r=0){if(!n||r>5)return;if(Array.isArray(n)){for(let t of n){let e=Ke(t,r+1);if(e)return e}return}if(typeof n!=="object")return;if(C(n.text)){let t=xd(n.text);if(t!==n.text){let e=Ke(t,r+1);if(e)return e}}if((C(n.name)||C(n.title)||C(n.serviceName)||C(n.brandName))&&(C(n.description)||C(n.summary)||C(n.tagline)||C(n.url)||C(n.setupUrl)||C(n.clickUrl)||C(n.click_url)||C(n.conversionUrl)||C(n.conversion_url)||C(n.website_url)||C(n.href)||C(n.link)||C(n.slug)))return n;for(let t of["primary","recommendation","service","result","results","services","items","data","content"]){let e=Ke(n[t],r+1);if(e)return e}return}function xd(n){if(typeof n!=="string")return n;try{return JSON.parse(n)}catch{return{title:void 0,body:n}}}function Se(n,r=0){if(!n||r>6)return;if(typeof n==="string")return n;if(Array.isArray(n)){for(let t of n){let e=Se(t,r+1);if(e)return e}return}if(typeof n!=="object")return;for(let t of["text","output","content","result","data"]){let e=Se(n[t],r+1);if(e)return e}return}function ll(n){if(!C(n)||ai(n))return;let r=n.match(/^##\s+(.+?)(?:\s+\(([^)]+)\))?\s*$/m);if(!r||/^Gravity Index\b|No matching service/i.test(r[1]))return;let t=n.match(/_search_id:\s*(.+?)_\s*(?:\u2014|$)/im)?.[1]?.trim(),e=n.match(/https?:\/\/[^\s)>]+/i)?.[0],o=n.split(`
|
|
7
|
-
`).map((i)=>i.trim()).find((i)=>i&&!/^(?:#|\*\*Step|```|>|_search_id:)/.test(i)&&i!==e);return{name:r[1].trim(),category:r[2]?.trim(),description:o,searchId:t,clickUrl:e}}function zn(n,r,t,e,o,i,f="tip"){return{id:n,revision:"1",kind:f,placement:"sidebar",stage:f==="status"?"sidebar_index":"sidebar_display",label:r,title:t,body:e,cta:o,action:i,provider:"freecode"}}function Ft(n){return{...n,welcome:{...n.welcome,cards:[...n.welcome.cards]},working:{...n.working,cards:[...n.working.cards]},sidebar:{...n.sidebar,alternatives:[...n.sidebar.alternatives||[]]},index:{...n.index},seenImpressions:new Set(n.seenImpressions)}}function ml(n,r,t=12000){let e=new Set(String(r||"").toLowerCase().match(/[a-z0-9][a-z0-9_-]{2,}/g)||[]),o=(n||[]).map((l,m)=>{if(!["user","assistant"].includes(l?.type))return;let w=dn(l.text||"",2000);if(!w)return;let b=w.toLowerCase(),O=[...e].filter((g)=>b.includes(g)).length,k=/\b(must|need|should|without|only|avoid|prefer|budget|free tier|region|latency|scale|existing|already)\b/i.test(w),s=m/Math.max(1,n.length);return{index:m,role:l.type,content:w,relevanceReason:k?"constraint":O?"task-term-match":s>0.65?"recent-context":"conversation-context",score:O*4+(k?5:0)+(l.type==="user"?2:0)+s*3}}).filter(Boolean);if(!o.length)return[];let i=new Set([o[0]?.index,...o.slice(-8).map((l)=>l.index),...o.filter((l)=>l.relevanceReason==="constraint"||l.relevanceReason==="task-term-match").map((l)=>l.index)]),f=o.filter((l)=>i.has(l.index)).sort((l,m)=>m.score-l.score),u=[],d=0;for(let l of f){if(d+l.content.length>t&&u.length)continue;u.push(l),d+=l.content.length}return u.sort((l,m)=>l.index-m.index).map(({role:l,content:m,relevanceReason:w})=>({role:l,content:m,relevanceReason:w}))}function gl(n,r){let t=[r,...(n||[]).filter((e)=>e?.type==="user").map((e)=>e.text)];return[...new Set(t.flatMap((e)=>Md(e)))].map((e)=>dn(e,400)).filter(Boolean).slice(0,16)}function Md(n){return String(n||"").split(/[\n.!?]+/).map((r)=>r.trim()).filter((r)=>r&&/\b(must|need|should|without|only|avoid|prefer|budget|free tier|region|latency|scale|existing|already|support|compatible)\b/i.test(r))}function oe(n,r,t){return[...new Set((Array.isArray(n)?n:[]).map((e)=>dn(String(e||""),t)).filter(Boolean))].slice(0,r)}function C(n){return typeof n==="string"&&n.trim()?n.trim():void 0}function dd(n,r){return dn(C(n)||"",r).replace(/\bhttps?:\/\/[^\s)]+/gi,"[LINK]").replace(/(^|\s)(?:~\/|\/(?:Users|home|private|tmp|var)\/|[a-z]:[\\/])\S+/gi,"$1[PATH]")}function Zr(n){return String(n||"card").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)||"card"}function qe({sponsor:n}={}){return{status:"connecting",sessionID:void 0,transcript:[],assistantText:"",reasoningText:"",tools:new Map,partTypes:new Map,pendingPermission:void 0,permissionQueue:[],pendingQuestion:void 0,questionQueue:[],subagents:[],sponsor:n,monetization:fe(n),model:void 0,agent:"build",todos:[],files:[],error:void 0,retry:void 0,showReasoning:!1,showToolDetails:!1,services:{providers:0,mcp:0,lsp:0,formatters:0}}}function de(n,r){return{...qe({sponsor:n.sponsor}),services:n.services,status:"idle",sessionID:r.id,model:r.model,agent:r.agent||"build"}}function pe(n,r){let t=ki(Nd(n));return t.status="working",t.error=void 0,t.retry=void 0,t.monetization=cd(t.monetization),t.transcript.push({type:"user",text:r}),t}function Ed(n,{messages:r=[],permissions:t=[],questions:e=[],files:o=[],todos:i=[],children:f=[],childPermissions:u=[],childQuestions:d=[],statuses:l={}}={}){let m=[...t.map((k)=>jt(k,k.protocol||"v2")),...u.map((k)=>jt(k,k.protocol||"v2",k.originLabel))],w=[...e.map((k)=>Pt(k,k.protocol||"v2")),...d.map((k)=>Pt(k,k.protocol||"v2",k.originLabel))],b=al(n.subagents,{messages:r,children:f,statuses:l}),O=Li(b,m,w);return{...n,transcript:no(r),pendingPermission:m[0],permissionQueue:m.slice(1),pendingQuestion:w[0],questionQueue:w.slice(1),subagents:O,files:o,todos:i}}function kd(n,{permissions:r=[],questions:t=[],childPermissions:e,childQuestions:o}={}){let i=[n.pendingPermission,...n.permissionQueue].filter((w)=>w?.originLabel),f=[n.pendingQuestion,...n.questionQueue].filter((w)=>w?.originLabel),u=e===void 0?i:e.map((w)=>jt(w,w.protocol||"v2",w.originLabel)),d=o===void 0?f:o.map((w)=>Pt(w,w.protocol||"v2",w.originLabel)),l=[...r.map((w)=>jt(w,w.protocol||"v2")),...u],m=[...t.map((w)=>Pt(w,w.protocol||"v2")),...d];return{...n,pendingPermission:l[0],permissionQueue:l.slice(1),pendingQuestion:m[0],questionQueue:m.slice(1),subagents:Li(n.subagents,l,m)}}function Rd(n,r){if(r?.type==="server.connected")return n;let t=r?.data||{},e=Nd(n),o=t.sessionID||t.info?.id||t.part?.sessionID;if(o&&e.sessionID&&o!==e.sessionID){let i=r.type==="session.created"&&t.info?.parentID===e.sessionID,f=e.subagents.some((u)=>u.sessionID===o);if(!i&&!f)return n;return wl(e,r,o)}if(r.type==="message.part.updated"&&t.part?.id){if(e.partTypes.set(`${t.sessionID}:${t.part.id}`,t.part.type),t.part.type==="tool"){let i=t.part,f=i.callID||i.id,u=i.state?.status==="completed"?"done":i.state?.status==="error"?"failed":"active",d=i.state?.output||i.state?.error||"",l={id:f,title:i.tool||i.name||f,input:i.state?.input,provider:i.provider,status:u,output:d};e.tools.set(f,l);let m=e.transcript.find((w)=>w.type==="tool"&&w.id===f);if(m)e.transcript=e.transcript.map((w)=>w===m?{...w,text:l.title,status:u,input:l.input,output:d}:w);else e.transcript.push({type:"tool",id:f,text:l.title,status:u,input:l.input,output:d});if(rt(l))e.monetization.index=Od(l,d);Dd(e,i)}return e}if(r.type==="session.created")e.sessionID=t.info?.id||e.sessionID,e.status="idle";if(r.type==="session.status"&&t.status?.type==="busy")e.status="working";if(r.type==="session.status"&&t.status?.type==="retry")e.status="working",e.retry={attempt:t.status.attempt,message:t.status.message,next:t.status.next};if(r.type==="session.idle"||r.type==="session.status"&&t.status?.type==="idle"){if(e=ki(e),e.status="idle",e.error?.startsWith("Reconnecting to Free Code:"))e.error=void 0;if(e.retry=void 0,e.monetization=ld(e.monetization),e.monetization.index.status==="searching")e.monetization.index={status:"failed",error:"Gravity Index finished without a recommendation."}}if(r.type==="session.error")e.status="error",e.error=Ri(t.error),e.monetization=md(e.monetization);if(r.type==="session.compacted"){if(e.status="idle",e.error?.startsWith("Reconnecting to Free Code:"))e.error=void 0;e.retry=void 0}if(r.type==="session.next.step.started"&&t.model)e.model=t.model;if(r.type==="session.next.step.ended"&&(t.finish==="length"||t.reason==="length"))e.error="Free Code reached this turn's response limit before finishing. Ask it to continue the work.";if(r.type==="session.next.text.delta")e.assistantText+=t.delta||"";if(r.type==="session.next.reasoning.delta")e.reasoningText+=t.delta||"";if(r.type==="message.part.delta")if(e.partTypes.get(`${t.sessionID}:${t.partID}`)==="reasoning")e.reasoningText+=t.delta||"";else e.assistantText+=t.delta||"";if(r.type==="session.next.text.ended")e=ki(e,t.text);if(r.type==="session.next.tool.called"){let i={id:t.callID,title:t.tool||t.callID,input:t.input,provider:t.provider,status:"active",output:""};if(e.tools.set(i.id,i),e.transcript.push({type:"tool",id:i.id,text:i.title,status:"active",input:i.input,output:""}),rt(i))e.monetization.index={status:"searching"}}if(r.type==="session.next.tool.progress")Ei(e,t.callID,{append:t.content});if(r.type==="session.next.tool.success"){Ei(e,t.callID,{status:"done",append:t.content,result:t.result});let i=e.tools.get(t.callID);if(rt(i))e.monetization.index=Od(i,t.result??i.output)}if(r.type==="session.next.tool.failed"){let i=e.tools.get(t.callID);if(Ei(e,t.callID,{status:"failed",error:t.error}),rt(i))e.monetization.index={status:"failed",error:Ri(t.error)}}if(r.type==="permission.v2.asked"||r.type==="permission.asked"){if(Bd(e,jt(t,r.type.startsWith("permission.v2")?"v2":"stable")),rt({title:e.pendingPermission.action}))e.monetization.index={status:"searching"}}if(r.type==="permission.v2.replied"||r.type==="permission.replied")Ad(e,t.requestID||t.id);if(r.type==="question.v2.asked"||r.type==="question.asked")Cd(e,Pt(t,r.type.startsWith("question.v2")?"v2":"stable"));if(r.type==="question.v2.replied"||r.type==="question.replied"||r.type==="question.v2.rejected"||r.type==="question.rejected")Fd(e,t.requestID||t.id);if(r.type==="session.diff")e.files=t.diff||[];if(r.type==="todo.updated")e.todos=t.todos||[];return e}function Od(n,r){if(n?.status==="active")return{status:"searching"};let t=ai(r);if(n?.status==="failed"||t)return{status:"failed",error:t||String(r||"Gravity Index request failed.")};let e=sd(n,r);return e?{status:"ready",searchId:e.metadata?.searchId,card:e}:{status:"failed",error:"Gravity Index returned no recommendation."}}async function Ld(n,{signal:r,onEvent:t,onReconnect:e,onRetry:o}={}){let i=!1,f=0,u=new Set,d=[];while(!r?.aborted)try{let l=await n.v2.event.subscribe({signal:r,sseMaxRetryAttempts:1});if(i)await e?.();i=!0,f=0;for await(let m of l.stream){if(m.id&&u.has(m.id))continue;if(m.id){if(u.add(m.id),d.push(m.id),d.length>5000)u.delete(d.shift())}t?.(m)}if(!r?.aborted)throw Error("The Free Code connection was interrupted.")}catch(l){if(r?.aborted)return;f+=1,o?.(l,f),await new Promise((m)=>setTimeout(m,Math.min(2000,100*2**f)))}}function no(n){let r=[];for(let t of n||[]){let e=t.info||t,o=t.parts||e.parts||[],i=[],f=()=>{if(!i.length)return;r.push({id:e.id,type:e.role==="user"?"user":"assistant",text:i.join(`
|
|
8
|
-
`)}),i=[]};for(let u of o){if(u.type==="text"&&u.text){i.push(u.text);continue}if(u.type!=="tool")continue;f();let d=u.state||{},l=d.status==="completed"?"done":d.status==="error"?"failed":"active";r.push({id:u.callID||u.id,type:"tool",text:u.tool||u.name||"tool",status:l,input:d.input,output:d.output||d.error||""})}f()}return r}function Nd(n){return{...n,transcript:[...n.transcript],tools:new Map(n.tools),partTypes:new Map(n.partTypes),permissionQueue:[...n.permissionQueue||[]],questionQueue:[...n.questionQueue||[]],subagents:(n.subagents||[]).map((r)=>({...r})),todos:[...n.todos],files:[...n.files],monetization:{...n.monetization,welcome:{...n.monetization.welcome,cards:[...n.monetization.welcome.cards]},working:{...n.monetization.working,cards:[...n.monetization.working.cards]},sidebar:{...n.monetization.sidebar,alternatives:[...n.monetization.sidebar.alternatives||[]]},index:{...n.monetization.index},seenImpressions:new Set(n.monetization.seenImpressions)}}}function wl(n,r,t){let e=r?.data||{};if(r.type==="session.created")ro(n,{sessionID:t,label:Bi(e.info?.agent||"subagent"),description:e.info?.title||"Delegated task",title:e.info?.title,status:"running",pendingInteractions:0,lastUpdatedAt:Di(e.info)||Date.now()});if(r.type==="session.status")_e(n,t,{status:e.status?.type==="idle"?"completed":e.status?.type==="error"?"error":"running",lastUpdatedAt:Date.now()});if(r.type==="session.idle")_e(n,t,{status:"completed",lastUpdatedAt:Date.now()});if(r.type==="session.error")_e(n,t,{status:"error",lastUpdatedAt:Date.now()});if(r.type==="message.part.updated"&&e.part?.type==="tool"){let o=Number(Ur(n,t)?.toolCalls||0);_e(n,t,{toolCalls:Math.max(o,1),lastUpdatedAt:Date.now()})}if(r.type==="permission.v2.asked"||r.type==="permission.asked"){let o=Ur(n,t)?.label||"Subagent";Bd(n,jt({...e,sessionID:t},r.type.startsWith("permission.v2")?"v2":"stable",o))}if(r.type==="permission.v2.replied"||r.type==="permission.replied")Ad(n,e.requestID||e.id);if(r.type==="question.v2.asked"||r.type==="question.asked"){let o=Ur(n,t)?.label||"Subagent";Cd(n,Pt({...e,sessionID:t},r.type.startsWith("question.v2")?"v2":"stable",o))}if(r.type==="question.v2.replied"||r.type==="question.replied"||r.type==="question.v2.rejected"||r.type==="question.rejected")Fd(n,e.requestID||e.id);return n.subagents=Li(n.subagents,jd(n),Pd(n)),n}function Dd(n,r){if(r.tool!=="task")return;let t=r.state?.metadata||r.metadata||{},e=t.sessionId||t.sessionID;if(!e)return;let o=r.state?.status==="completed"?"completed":r.state?.status==="error"?t.interrupted===!0||r.state?.error==="Tool execution aborted"?"cancelled":"error":"running";ro(n,{sessionID:e,partID:r.id,callID:r.callID,label:Bi(r.state?.input?.subagent_type||"general"),description:r.state?.input?.description||t.title||"Delegated task",title:t.title,status:o,background:t.background===!0,toolCalls:hl(t.toolcalls??t.toolCalls??t.calls),pendingInteractions:Ur(n,e)?.pendingInteractions||0,lastUpdatedAt:Di(r.state)||Date.now()})}function al(n,{messages:r,children:t,statuses:e}){let i={subagents:(n||[]).map((f)=>({...f}))};for(let f of r||[])for(let u of f.parts||f.info?.parts||[])Dd(i,u);for(let f of t||[]){let u=e?.[f.id]?.type,d=u==="busy"||u==="retry"?"running":u==="idle"?"completed":void 0;ro(i,{sessionID:f.id,label:Bi(f.agent||Ur(i,f.id)?.label||"subagent"),description:Ur(i,f.id)?.description||f.title||"Delegated task",title:f.title,status:d||Ur(i,f.id)?.status||"completed",pendingInteractions:Ur(i,f.id)?.pendingInteractions||0,lastUpdatedAt:Di(f)||Ur(i,f.id)?.lastUpdatedAt||Date.now()})}return Ni(i.subagents)}function jt(n,r,t){return{id:n.id,action:n.action||n.permission,resources:n.resources||n.patterns||[],save:n.save||n.always||[],metadata:n.metadata||{},protocol:r,sessionID:n.sessionID,...t?{originLabel:t}:{}}}function Pt(n,r,t){return{id:n.id,questions:n.questions||[],tool:n.tool,protocol:r,sessionID:n.sessionID,...t?{originLabel:t}:{}}}function Bd(n,r){if(!r.id||jd(n).some((t)=>t.id===r.id))return;if(!n.pendingPermission)n.pendingPermission=r;else n.permissionQueue||=[],n.permissionQueue.push(r)}function Ad(n,r){if(!r||n.pendingPermission?.id===r){n.pendingPermission=n.permissionQueue?.shift();return}n.permissionQueue=n.permissionQueue.filter((t)=>t.id!==r)}function Cd(n,r){if(!r.id||Pd(n).some((t)=>t.id===r.id))return;if(!n.pendingQuestion)n.pendingQuestion=r;else n.questionQueue||=[],n.questionQueue.push(r)}function Fd(n,r){if(!r||n.pendingQuestion?.id===r){n.pendingQuestion=n.questionQueue?.shift();return}n.questionQueue=n.questionQueue.filter((t)=>t.id!==r)}function jd(n){return[n.pendingPermission,...n.permissionQueue||[]].filter(Boolean)}function Pd(n){return[n.pendingQuestion,...n.questionQueue||[]].filter(Boolean)}function Li(n,r,t){let e=new Map;for(let o of[...r,...t]){if(!o.sessionID)continue;e.set(o.sessionID,(e.get(o.sessionID)||0)+1)}return Ni((n||[]).map((o)=>({...o,pendingInteractions:e.get(o.sessionID)||0})))}function ro(n,r){let t=n.subagents.findIndex((e)=>e.sessionID===r.sessionID);if(t===-1)n.subagents.push(r);else n.subagents[t]={...n.subagents[t],...r};n.subagents=Ni(n.subagents)}function _e(n,r,t){let e=Ur(n,r);if(e)ro(n,{...e,...t})}function Ur(n,r){return n.subagents.find((t)=>t.sessionID===r)}function Ni(n){return[...n].sort((r,t)=>Number(t.pendingInteractions>0)-Number(r.pendingInteractions>0)||Number(t.status==="running")-Number(r.status==="running")||t.lastUpdatedAt-r.lastUpdatedAt)}function Di(n){return n?.time?.updated||n?.time?.end||n?.time?.start||n?.time?.created}function Bi(n){let r=String(n||"");return r?r[0].toUpperCase()+r.slice(1):"Subagent"}function hl(n){let r=Number(n);return Number.isFinite(r)?r:void 0}function ki(n,r){let t=n.assistantText||r,e=[...n.transcript];if(t&&e.at(-1)?.text!==t)e.push({type:"assistant",text:t});return{...n,transcript:e,assistantText:"",reasoningText:""}}function Ei(n,r,{status:t,append:e,result:o,error:i}={}){let u={...n.tools.get(r)||{id:r,title:r,status:"active",output:""}};if(t)u.status=t;if(e)u.output=`${u.output||""}${e}`;if(o!==void 0&&!u.output)u.output=typeof o==="string"?o:JSON.stringify(o);if(i!==void 0)u.output=Ri(i);n.tools.set(r,u);let d=[...n.transcript].reverse().find((l)=>l.type==="tool"&&l.id===r);if(d)n.transcript=n.transcript.map((l)=>l===d?{...l,status:u.status,output:u.output}:l)}function Ri(n){return bt(n)}function bt(n,r="Free Code encountered an unexpected error."){let t=String(n?.message||n?.data?.message||n?.name||r).trim(),e=t.split(/\r?\n/,1)[0],o=sl(n,t),i=o?` Try again ${bl(o)}.`:"";if(/model_budget_exhausted/i.test(t))return`This mode has temporarily reached its usage limit.${i||" Switch modes or try again later."}`;if(/model_gateway_rate_limited|too many requests|rate.?limit/i.test(t))return`Free Code is busy right now.${i||" Try again in a moment."}`;if(/providerautherror|api.?key|provider key|missing credentials|unauthorized/i.test(t))return"This mode is temporarily unavailable. Switch modes or try again later.";if(/providermodelnotfounderror|model not found/i.test(t))return"This model is unavailable. Choose another model and try again.";if(!/opencode|@opencode-ai/i.test(t))return e;if(/health|start|spawn|binary|executable/i.test(t))return"The Free Code engine could not start.";if(/stream|connect|socket|network/i.test(t))return"The Free Code connection was interrupted.";return"The Free Code engine reported an error."}function sl(n,r){let t=Ie(n?.retryAfterSeconds)||Ie(n?.data?.retryAfterSeconds)||Ie(n?.data?.retry_after_seconds);if(t)return t;let e=r.match(/"retry_after_seconds"\s*:\s*(\d+)/i);return Ie(e?.[1])}function bl(n){if(n<60)return`in about ${n} second${n===1?"":"s"}`;let r=Math.ceil(n/60);return`in about ${r} minute${r===1?"":"s"}`}function Ie(n){let r=Number(n);return Number.isSafeInteger(r)&&r>0?r:void 0}import{existsSync as yl,mkdirSync as xl,readFileSync as Ml,writeFileSync as Ol}from"fs";import{homedir as El}from"os";import{dirname as kl,join as Rl}from"path";var tt="tokyonight",lr={tokyonight:{name:"Tokyo Night",background:"#1a1b26",panel:"#16161e",panelAlt:"#202330",border:"#414868",foreground:"#a9b1d6",muted:"#787c99",green:"#9ece6a",blue:"#7aa2f7",yellow:"#e0af68",red:"#f7768e"},freecode:{name:"Freecode Green",background:"#07110c",panel:"#0b1a12",panelAlt:"#10251a",border:"#285c3f",foreground:"#d8f3e3",muted:"#6f987e",green:"#69e59a",blue:"#69b7ff",yellow:"#f3c969",red:"#ff7d7d"},midnight:{name:"Midnight",background:"#080b16",panel:"#0e1426",panelAlt:"#151d35",border:"#34466f",foreground:"#e5e9f5",muted:"#8793b5",green:"#7ee2b8",blue:"#82b7ff",yellow:"#f4cc7a",red:"#ff8c9b"},contrast:{name:"High contrast",background:"#000000",panel:"#080808",panelAlt:"#151515",border:"#b5b5b5",foreground:"#ffffff",muted:"#c7c7c7",green:"#63ff8d",blue:"#70c8ff",yellow:"#ffe36e",red:"#ff7070"}},to=Rl(El(),".config","freecode","tui.json");function Ud(){let n=process.env.FREECODE_THEME;if(n&&lr[n])return n;try{if(yl(to)){let r=JSON.parse(Ml(to,"utf8")).theme;if(typeof r==="string"&&lr[r])return r}}catch{}return tt}function Td(n){if(!lr[n])return;try{xl(kl(to),{recursive:!0}),Ol(to,`${JSON.stringify({theme:n},null,2)}
|
|
9
|
-
`,{mode:384})}catch{}}import{existsSync as Ll,mkdtempSync as Nl,readFileSync as Dl,rmSync as Bl,statSync as Al,writeFileSync as Cl}from"fs";import{tmpdir as Fl}from"os";import{extname as jl,join as zd,resolve as Pl}from"path";import{pathToFileURL as Ul}from"url";import{spawn as Tl,spawnSync as zl}from"child_process";var Jl={".css":"text/css",".csv":"text/csv",".html":"text/html",".json":"application/json",".md":"text/markdown",".mjs":"text/javascript",".js":"text/javascript",".jsx":"text/javascript",".ts":"text/typescript",".tsx":"text/typescript",".xml":"application/xml",".yaml":"application/yaml",".yml":"application/yaml"};function Jd(n,r,t=[]){let e=[{type:"text",text:n}],o=new Set;for(let i of n.matchAll(/(^|\s)@([^\s]+)/g)){let f=i[2].replace(/[),.;:]+$/,""),u=Pl(r,f);if(o.has(u)||!Ll(u)||!Al(u).isFile())continue;o.add(u);let d=(i.index||0)+i[1].length,l=d+f.length+1;e.push({type:"file",mime:Jl[jl(f).toLowerCase()]||"text/plain",filename:f,url:Ul(u).href,source:{type:"file",path:f,text:{value:`@${f}`,start:d,end:l}}})}return e.push(...t.map((i)=>({type:"file",mime:i.mime,filename:i.filename,url:i.url}))),e}function Vd(n){let r=Nl(zd(Fl(),"freecode-editor-")),t=zd(r,"prompt.md");Cl(t,n,"utf8");try{let e=process.env.VISUAL||process.env.EDITOR||"vi",o=zl(e,[t],{stdio:"inherit",shell:!0});if(o.status!==0)throw Error(`Editor exited with status ${o.status??"unknown"}`);return Dl(t,"utf8").replace(/\s+$/,"")}finally{Bl(r,{recursive:!0,force:!0})}}function Ai(n){let r=process.platform==="darwin"?"open":process.platform==="win32"?"rundll32.exe":"xdg-open",t=process.platform==="win32"?["url.dll,FileProtocolHandler",n]:[n],e=Tl(r,t,{detached:!0,stdio:"ignore",windowsHide:!0});e.on("error",()=>{}),e.unref()}import{spawn as Vl}from"child_process";import{mkdtemp as Gl,readFile as Wl,rm as Zl}from"fs/promises";import{platform as vl,release as Xl,tmpdir as Yl}from"os";import{join as Gd}from"path";function Ql(n,r){return new Promise((t,e)=>{let o=Vl(n,r,{stdio:["ignore","pipe","ignore"],windowsHide:!0}),i=[];o.on("error",e),o.stdout?.on("data",(f)=>i.push(f)),o.on("close",(f)=>{if(f===0)t(Buffer.concat(i));else e(Error(`${n} exited with code ${f??"unknown"}`))})})}var $l={platform:vl(),release:Xl(),tmpdir:Yl(),command:Ql,mkdtemp:Gl,readFile:Wl,remove:(n)=>Zl(n,{recursive:!0,force:!0})};function Hl(n){return n.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}async function Wd(n=$l){if(n.platform==="darwin"){let r;try{r=await n.mkdtemp(Gd(n.tmpdir,"freecode-clipboard-"));let t=Gd(r,"clipboard.png");return await n.command("osascript",["-e",'set imageData to the clipboard as "PNGf"',"-e",`set fileRef to open for access POSIX file "${Hl(t)}" with write permission`,"-e","set eof fileRef to 0","-e","write imageData to fileRef","-e","close access fileRef"]),{data:(await n.readFile(t)).toString("base64"),mime:"image/png"}}catch{return}finally{if(r)await n.remove(r).catch(()=>{})}}if(n.platform==="win32"||/microsoft|wsl/i.test(n.release)){let e=(await n.command("powershell.exe",["-NonInteractive","-NoProfile","-command","Add-Type -AssemblyName System.Windows.Forms; $img = [System.Windows.Forms.Clipboard]::GetImage(); if ($img) { $ms = New-Object System.IO.MemoryStream; $img.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png); [System.Convert]::ToBase64String($ms.ToArray()) }"]).catch(()=>Buffer.alloc(0))).toString().trim();return e?{data:e,mime:"image/png"}:void 0}if(n.platform==="linux"){let r=await n.command("wl-paste",["-t","image/png"]).catch(()=>Buffer.alloc(0));if(r.length)return{data:r.toString("base64"),mime:"image/png"};let t=await n.command("xclip",["-selection","clipboard","-t","image/png","-o"]).catch(()=>Buffer.alloc(0));if(t.length)return{data:t.toString("base64"),mime:"image/png"}}return}import{createContext as Kl,useContext as Sl}from"solid-js";var eo=Kl(lr[tt]);function Y(){return Sl(eo)}var Zd=0.16,vn={topLeft:"\u256D",topRight:"\u256E",bottomLeft:"\u2570",bottomRight:"\u256F",horizontal:"\u2500",vertical:"\u2502",topT:"\u252C",bottomT:"\u2534",leftT:"\u251C",rightT:"\u2524",cross:"\u253C"};import{createComponent as _l}from"@opentui/solid";import{InputRenderable as Il,TextareaRenderable as ql}from"@opentui/core";import{registerBackspacePopsPendingSequence as pl,registerBaseLayoutFallback as nm,registerEscapeClearsPendingSequence as rm,registerManagedTextareaLayer as tm}from"@opentui/keymap/addons/opentui";import{createDefaultOpenTuiKeymap as em}from"@opentui/keymap/opentui";import{KeymapProvider as om,useBindings as Xn,useKeymap as im}from"@opentui/keymap/solid";import{useRenderer as fm}from"@opentui/solid";import{onCleanup as dm}from"solid-js";var oo=im;function vd(n){let r=fm(),t=em(r);t.clearEventMatchResolvers();let e=t.appendEventMatchResolver((d,l)=>{let m=d.name.trim()?d.name:d.sequence===" "?"space":void 0;if(!m)return[];return[l.resolveKey({name:m,ctrl:d.ctrl,shift:d.shift,meta:d.meta,super:d.super??!1,hyper:d.hyper||void 0})]}),o=nm(t),i=rm(t),f=pl(t),u=tm(t,r,{enabled:()=>{let d=r.currentFocusedEditor;return d instanceof ql&&!(d instanceof Il)},bindings:[{key:"return",cmd:"input.submit"},{key:"kpenter",cmd:"input.submit"},{key:"shift+return",cmd:"input.newline"},{key:"ctrl+j",cmd:"input.newline"}]},{category:"Text Editing",group:"Prompt"});return dm(()=>{u(),f(),i(),o(),e()}),_l(om,{keymap:t,get children(){return n.children}})}import{createComponent as Lu}from"@opentui/solid";import{createTextNode as Eo}from"@opentui/solid";import{setProp as yn}from"@opentui/solid";import{effect as xt}from"@opentui/solid";import{insertNode as Fn}from"@opentui/solid";import{insert as or}from"@opentui/solid";import{memo as zt}from"@opentui/solid";import{createElement as On}from"@opentui/solid";import{TextAttributes as Og}from"@opentui/core";import{useTerminalDimensions as Eg}from"@opentui/solid";import{mergeProps as kg}from"solid-js";import{createTextNode as xm}from"@opentui/solid";import{insertNode as Mm}from"@opentui/solid";import{memo as Om}from"@opentui/solid";import{setProp as go}from"@opentui/solid";import{effect as qd}from"@opentui/solid";import{insert as Ui}from"@opentui/solid";import{createComponent as wo}from"@opentui/solid";import{createElement as ao}from"@opentui/solid";import{TextAttributes as Em}from"@opentui/core";import{useTerminalDimensions as km}from"@opentui/solid";import{createEffect as Rm,createMemo as Ti,createSignal as Lm,Index as pd,mergeProps as Nm,onCleanup as _d,Show as Dm}from"solid-js";var io=["blackhole","decrypt","errorcorrect","matrix","middleout","pipes","slice","smoke","swarm","thunderstorm"],Xd=20,uo=60,Yd=1200,Ci=72,Fi=["\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D","\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D","\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"],qn=Math.max(...Fi.map((n)=>Array.from(n).length)),pn=Fi.length,fo=Array.from("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@#$%&*+-=?/"),co=Fi.map((n)=>{return Array.from(n.padEnd(qn)).map((t)=>({char:t,tone:"wordmark"}))}),et=co.flatMap((n,r)=>n.flatMap((t,e)=>t.char===" "?[]:[[e,r]])),um=new Set(io);function cm(n){return Boolean(n&&um.has(n))}function Qd(n=process.env.FREECODE_BANNER_EFFECT,r=Math.random){if(cm(n))return n;let t=Math.min(io.length-1,Math.floor(r()*io.length));return io[Math.max(0,t)]}function $d(n=process.env.FREECODE_ANIMATIONS,r=process.env.FREECODE_REDUCED_MOTION,t=process.env.TERM){return n!=="0"&&r!=="1"&&t!=="dumb"}function lo(){return Array.from({length:pn},()=>Array.from({length:qn},()=>({char:" ",tone:"wordmark"})))}function lm(){return co.map((n)=>n.map((r)=>({...r})))}function ot(n,r,t,e,o=!0){if(r<0||r>=qn||t<0||t>=pn)return;if(!o&&n[t][r].char!==" ")return;n[t][r]=e}function ji(n,[r,t]){ot(n,r,t,{...co[t][r]})}function mo(n,r){let t=lo(),e=Math.floor(n.length*r);for(let o of n.slice(0,e))ji(t,o);return t}function Ut(n){let r=2166136261;for(let t of n)r^=t.codePointAt(0)||0,r=Math.imul(r,16777619);return r>>>0}function ue(n){let r=n>>>0;return()=>{r+=1831565813;let t=r;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Hd(n,r){let t=[...n],e=ue(r);for(let o=t.length-1;o>0;o-=1){let i=Math.floor(e()*(o+1)),f=t[o];t[o]=t[i],t[i]=f}return t}function mm(n){return Math.max(0,Math.min(1,n/19))}function gm(n,r,t){let e=n==="decrypt"?0.15:0.35,o=t<=e?0:(t-e)/(1-e),i=Hd(et,Ut(`${n}:order`)),f=new Set(i.slice(0,Math.floor(i.length*o)).map(([l,m])=>`${l}:${m}`)),u=ue(Ut(`${n}:${r}`)),d=lo();for(let[l,m]of et)if(f.has(`${l}:${m}`))ji(d,[l,m]);else ot(d,l,m,{char:fo[Math.floor(u()*fo.length)],tone:n==="errorcorrect"&&u()>0.72?"flash":"accent"});return d}function wm(n,r){let t=lo(),e=ue(Ut(`matrix:${n}`));for(let[o,i]of et){let f=Math.max(0,Math.min(1,(pn-1-i)/pn*0.32+(o*17+i*31)%29/43));if(r>=f)ji(t,[o,i]);else if(e()<0.24+r*0.25)ot(t,o,i,{char:fo[Math.floor(e()*fo.length)],tone:e()>0.82?"flash":"muted"})}return t}function Kd(n){let r=(qn-1)/2,t=(pn-1)/2,e=[...et].sort(([o,i],[f,u])=>{let d=Math.hypot(o-r,i-t),l=Math.hypot(f-r,u-t);return d-l||i-u||o-f});return mo(e,n)}function am(n){let r=[];for(let o=0,i=qn-1;o<=i;o+=1,i-=1)if(r.push(o),i!==o)r.push(i);let t=new Map(r.map((o,i)=>[o,i])),e=[...et].sort(([o,i],[f,u])=>(t.get(o)||0)-(t.get(f)||0)||i-u);return mo(e,n)}function hm(n){let r=mo(et,n),t=[];for(let e=0;e<qn;e+=1)t.push([e,0,"\u2500"]);for(let e=1;e<pn;e+=1)t.push([qn-1,e,"\u2502"]);for(let e=qn-2;e>=0;e-=1)t.push([e,pn-1,"\u2500"]);for(let e=pn-2;e>0;e-=1)t.push([0,e,"\u2502"]);for(let[e,o,i]of t.slice(0,Math.floor(t.length*n)))ot(r,e,o,{char:i,tone:"accent"},!1);return r}function sm(n,r){let t=Kd(r),e=ue(Ut(`smoke:${n}`)),o=Math.max(1,Math.floor(qn*pn*0.25*(1-r)));for(let i=0;i<o;i+=1)ot(t,Math.floor(e()*qn),Math.floor(e()*pn),{char:".,:~"[Math.floor(e()*4)],tone:"muted"},!1);return t}function bm(n,r){let t=lo(),e=(qn-1)/2,o=(pn-1)/2,i=ue(Ut(`${n}:starts`)),f=1-(1-r)**3;for(let[u,d]of et){let l,m;if(n==="swarm")l=Math.floor(i()*qn),m=Math.floor(i()*pn);else{let w=Math.atan2(d-o,u-e)+Math.PI/2,b=1+(u+d)%Math.max(2,Math.floor(qn/2)+1);l=Math.round(e+Math.cos(w)*b),m=Math.round(o+Math.sin(w)*b*0.5)}ot(t,Math.round(l+(u-l)*f),Math.round(m+(d-m)*f),{...co[d][u]})}return t}function ym(n,r){let t=Hd(et,Ut("thunderstorm:order")),e=mo(t,r);for(let o=0;o<qn;o+=1)for(let i of[0,Math.floor(pn/2)+1]){let f=(n+o*5+i)%pn;ot(e,o,f,{char:"\u2502",tone:"muted"},!1)}if(n%5===0){let o=n*7%qn;for(let i=0;i<pn;i+=1)ot(e,o+i%3-1,i,{char:i%2?"\u2571":"\u2572",tone:"flash"})}return e}function Sd(n,r){let t=Math.max(0,Math.min(19,Math.floor(r)));if(t===19)return lm();let e=mm(t);if(n==="decrypt"||n==="errorcorrect")return gm(n,t,e);if(n==="matrix")return wm(t,e);if(n==="middleout")return Kd(e);if(n==="slice")return am(e);if(n==="pipes")return hm(e);if(n==="smoke")return sm(t,e);if(n==="swarm"||n==="blackhole")return bm(n,e);return ym(t,e)}var Pi;function Bm(){if(!Pi)Pi={effect:Qd(),startedAt:Date.now()};return Pi}function Id(n){let r=/^#([0-9a-f]{6})$/i.exec(n);if(!r)return;return[Number.parseInt(r[1].slice(0,2),16),Number.parseInt(r[1].slice(2,4),16),Number.parseInt(r[1].slice(4,6),16)]}function Am(n,r,t){let e=Id(n),o=Id(r);if(!e||!o)return t<0.5?n:r;let i=(f)=>Math.round(e[f]+(o[f]-e[f])*t);return`#${[0,1,2].map((f)=>i(f).toString(16).padStart(2,"0")).join("")}`}function Cm(n,r){let t=oo(),e=Xd-1,o=n()?Math.min(e,Math.floor((Date.now()-r)/uo)):e,[i,f]=Lm(o),u=()=>f(e);return _d(t.intercept("key",u)),Rm(()=>{if(!n()||i()>=e)return;let d=()=>{let w=Date.now()-r;f(Math.min(e,Math.floor(w/uo)))};d();let l=setInterval(d,uo),m=setTimeout(u,Math.max(0,Yd-(Date.now()-r)));_d(()=>{clearInterval(l),clearTimeout(m)})}),i}function Fm(n){let r=Ti(()=>{let t=[];for(let e=0;e<n.cells.length;e+=1){let o=n.cells[e],i=o.tone==="wordmark"?n.gradient[Math.min(n.gradient.length-1,Math.floor(e/n.cells.length*n.gradient.length))]:o.tone==="accent"?n.accent:o.tone==="flash"?n.flash:n.muted,f=t.at(-1);if(f?.color===i)f.value+=o.char;else t.push({color:i,value:o.char})}return t});return(()=>{var t=ao("text");return Ui(t,wo(pd,{get each(){return r()},children:(e)=>(()=>{var o=ao("span");return Ui(o,()=>e().value),qd((i)=>go(o,"style",{fg:e().color},i)),o})()})),t})()}function nu(n){let r=Nm({compact:!1,animate:$d()},n),t=Y(),e=km(),o=r.effect?{effect:r.effect,startedAt:Date.now()}:Bm(),i=()=>r.effect||o.effect,f=Cm(()=>r.animate&&!r.compact&&e().width>=Ci,o.startedAt),u=Ti(()=>Sd(i(),f())),d=Ti(()=>Array.from({length:8},(l,m)=>Am(t.green,t.blue,m/7)));return wo(Dm,{get when(){return Om(()=>!r.compact)()&&e().width>=Ci},get fallback(){return(()=>{var l=ao("text");return Mm(l,xm("\u25C6 FREECODE")),qd((m)=>{var w=t.green,b=Em.BOLD;return w!==m.e&&(m.e=go(l,"fg",w,m.e)),b!==m.t&&(m.t=go(l,"attributes",b,m.t)),m},{e:void 0,t:void 0}),l})()},get children(){var l=ao("box");return go(l,"style",{flexDirection:"column",alignItems:"center"}),Ui(l,wo(pd,{get each(){return u()},children:(m)=>wo(Fm,{get cells(){return m()},get gradient(){return d()},get accent(){return t.green},get muted(){return t.muted},get flash(){return t.foreground}})})),l}})}import{createComponent as jm}from"@opentui/solid";import{createTextNode as ho}from"@opentui/solid";import{use as Pm}from"@opentui/solid";import{memo as yt}from"@opentui/solid";import{effect as Tt}from"@opentui/solid";import{insertNode as Mr}from"@opentui/solid";import{insert as Or}from"@opentui/solid";import{setProp as on}from"@opentui/solid";import{createElement as er}from"@opentui/solid";import{mergeProps as Um,onCleanup as Tm,onMount as zm}from"solid-js";function Jm(n){let r=()=>Math.max(1,Math.min(n.width-3,n.inset)),t=()=>`\u256D${"\u2500".repeat(r()-1)}\u2534${"\u2500".repeat(n.width-r()-2)}\u2524`;return(()=>{var e=er("box"),o=er("text");return Mr(e,o),on(e,"style",{width:"100%",height:1,flexShrink:0}),Or(o,t),Tt((i)=>on(o,"fg",n.color,i)),e})()}function zi(n,r=0){return(n?3:5)+(r>0?1:0)}function Vm(n){if(n<=0)return"";let r=Array.from({length:Math.min(n,3)},(t,e)=>`Image ${e+1}`).join(" \xB7 ");return n>3?`${r} \xB7 +${n-3}`:r}function ru(n){let r=Um({variant:"current",adAttached:!1,attachmentCount:0},n),t=Y();zm(()=>{let s=r.textarea.current;if(!s)return;Tm(()=>{if(r.textarea.current===s)r.textarea.current=null})});let e=()=>r.mode==="prompt"?t.green:t.yellow,o=()=>r.busy?"Add a follow-up\u2026":r.mode==="question-custom"?"Type your answer\u2026":r.mode==="oauth-code"?"Paste the authorization code\u2026":"Ask Freecode to build, fix, explain, or run something\u2026",i=()=>r.mode==="question-custom"?"Answer":r.mode==="oauth-code"?"Connect":r.agent[0]?.toUpperCase()+r.agent.slice(1),f=()=>r.mode==="prompt"?void 0:` ${i()} `,u=()=>r.variant==="rail"&&r.adAttached,d=()=>u()?["left","right","bottom"]:!0,l=()=>u()?t.blue:e(),m=()=>r.compact?3:6,w=()=>Math.min(Math.max(0,r.selectedSuggestion),Math.max(0,r.suggestions.length-1)),b=()=>Math.min(Math.max(0,w()-Math.floor(m()/2)),Math.max(0,r.suggestions.length-m())),O=()=>r.suggestions.slice(b(),b()+m()),k=()=>[yt(()=>yt(()=>r.suggestions.length>0)()&&(()=>{var s=er("box");return on(s,"style",{flexDirection:"column",paddingBottom:1}),Or(s,()=>O().map((g,c)=>{let h=b()+c;return(()=>{var R=er("text"),M=ho(" "),L=ho(" "),E=er("span"),N=ho("\xB7 ");return Mr(R,M),Mr(R,L),Mr(R,E),Or(R,()=>h===w()?"\u203A":" ",M),Or(R,()=>g.label,L),Mr(E,N),Or(E,()=>g.detail,null),Tt((A)=>{var F=h===w()?t.blue:t.muted,U={fg:t.muted};return F!==A.e&&(A.e=on(R,"fg",F,A.e)),U!==A.t&&(A.t=on(E,"style",U,A.t)),A},{e:void 0,t:void 0}),R})()})),s})()),yt(()=>yt(()=>r.attachmentCount>0)()&&(()=>{var s=er("box"),g=er("text"),c=ho("\u25A3 "),h=er("text");return Mr(s,g),Mr(s,h),on(s,"style",{height:1,flexDirection:"row",justifyContent:"space-between",flexShrink:0}),Mr(g,c),Or(g,()=>Vm(r.attachmentCount),null),Or(h,()=>r.compact?"backspace removes":"backspace removes last"),Tt((R)=>{var{blue:M,muted:L}=t;return M!==R.e&&(R.e=on(g,"fg",M,R.e)),L!==R.t&&(R.t=on(h,"fg",L,R.t)),R},{e:void 0,t:void 0}),s})()),(()=>{var s=er("textarea");return Pm((g)=>{r.textarea.current=g},s),on(s,"wrapMode","word"),Tt((g)=>{var{initialValue:c,focused:h}=r,R=o(),M=t.muted,L=t.foreground,E=t.panel,N=t.foreground,A=r.compact?1:2,F=r.compact?3:8,U=r.onSubmit,ln=r.onDraftChange;return c!==g.e&&(g.e=on(s,"initialValue",c,g.e)),h!==g.t&&(g.t=on(s,"focused",h,g.t)),R!==g.a&&(g.a=on(s,"placeholder",R,g.a)),M!==g.o&&(g.o=on(s,"placeholderColor",M,g.o)),L!==g.i&&(g.i=on(s,"textColor",L,g.i)),E!==g.n&&(g.n=on(s,"focusedBackgroundColor",E,g.n)),N!==g.s&&(g.s=on(s,"cursorColor",N,g.s)),A!==g.h&&(g.h=on(s,"minHeight",A,g.h)),F!==g.r&&(g.r=on(s,"maxHeight",F,g.r)),U!==g.d&&(g.d=on(s,"onSubmit",U,g.d)),ln!==g.l&&(g.l=on(s,"onContentChange",ln,g.l)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),s})(),yt(()=>yt(()=>!r.compact)()&&(()=>{var s=er("box"),g=er("text"),c=er("text");return Mr(s,g),Mr(s,c),on(s,"style",{height:1,flexDirection:"row",justifyContent:"space-between",flexShrink:0}),Or(g,i),Or(c,()=>r.mode==="prompt"?"enter send \xB7 shift+enter/ctrl+j newline":""),Tt((h)=>{var R=e(),M=t.muted;return R!==h.e&&(h.e=on(g,"fg",R,h.e)),M!==h.t&&(h.t=on(c,"fg",M,h.t)),h},{e:void 0,t:void 0}),s})())];return(()=>{var s=er("box"),g=er("box");return Mr(s,g),on(s,"style",{flexDirection:"column",width:"100%",flexShrink:0}),Or(s,(()=>{var c=yt(()=>!!(u()&&r.frameWidth&&r.railInset));return()=>c()&&jm(Jm,{get color(){return l()},get width(){return r.frameWidth},get inset(){return r.railInset}})})(),g),on(g,"titleAlignment","center"),Or(g,k),Tt((c)=>{var h=d(),R=f(),M={width:"100%",minHeight:u()?(r.compact?2:4)+(r.attachmentCount>0?1:0):zi(r.compact,r.attachmentCount),maxHeight:r.suggestions.length?(r.compact?8:13)+(r.attachmentCount>0?1:0):(r.compact?u()?5:6:u()?11:12)+(r.attachmentCount>0?1:0),flexDirection:"column",borderColor:l(),customBorderChars:vn,backgroundColor:t.panel,paddingLeft:1,paddingRight:1,paddingTop:0,paddingBottom:0};return h!==c.e&&(c.e=on(g,"border",h,c.e)),R!==c.t&&(c.t=on(g,"title",R,c.t)),M!==c.a&&(c.a=on(g,"style",M,c.a)),c},{e:void 0,t:void 0,a:void 0}),s})()}import{createTextNode as yu}from"@opentui/solid";import{createComponent as Er}from"@opentui/solid";import{effect as mr}from"@opentui/solid";import{insertNode as Tr}from"@opentui/solid";import{insert as an}from"@opentui/solid";import{memo as br}from"@opentui/solid";import{setProp as Q}from"@opentui/solid";import{createElement as Rn}from"@opentui/solid";import{TextAttributes as xo}from"@opentui/core";import{createEffect as xu,createMemo as hg,createSignal as sg,For as bg,Match as Yi,mergeProps as Qi,onCleanup as Mu,Show as Ou,Switch as yg}from"solid-js";var Ji=process.platform==="darwin"?"Cmd+O opens link":"Ctrl+O opens link";import{effect as tg}from"@opentui/solid";import{memo as Jh}from"@opentui/solid";import{createComponent as vi}from"@opentui/solid";import{createTextNode as lu}from"@opentui/solid";import{insertNode as mu}from"@opentui/solid";import{insert as eg}from"@opentui/solid";import{setProp as vr}from"@opentui/solid";import{createElement as yo}from"@opentui/solid";import{FrameBufferRenderable as og,RGBA as gu}from"@opentui/core";import{extend as ig,useRenderer as fg}from"@opentui/solid";import{writeSync as wu}from"fs";import{createEffect as dg,createMemo as ug,createSignal as Xi,Match as au,onCleanup as hu,onMount as cg,Switch as lg}from"solid-js";import{inflateSync as Gm}from"zlib";var bo=65536,Wm=65536,Zm=2000,tu=new Uint8Array([137,80,78,71,13,10,26,10]),so={supabase:"\uD83D\uDCBE",clerk:"\uD83D\uDD10",stripe:"\uD83D\uDCB3",resend:"\uD83D\uDCE7",vercel:"\uD83D\uDE80",cloudflare:"\uD83C\uDF10",upstash:"\u26A1",pinecone:"\uD83C\uDF32",qdrant:"\uD83E\uDDED",posthog:"\uD83E\uDD94",launchdarkly:"\uD83D\uDEA9",pusher:"\uD83D\uDCE1",ably:"\uD83D\uDCF6",sanity:"\uD83D\uDCDD",openai:"\u2728",anthropic:"\uD83E\uDDE0",mux:"\uD83C\uDFAC",datadog:"\uD83D\uDC15",intercom:"\uD83D\uDCAC",railway:"\uD83D\uDE82",render:"\uD83C\uDFA8",fly:"\uD83D\uDEEB",planetscale:"\uD83E\uDE90",turso:"\uD83D\uDC22",convex:"\uD83D\uDD36"},vm=[[/\b(?:database|postgres|sql|storage|cache|vector)\b/i,"\uD83D\uDCBE"],[/\b(?:auth|authentication|identity|security)\b/i,"\uD83D\uDD10"],[/\b(?:payment|billing|finance)\b/i,"\uD83D\uDCB3"],[/\b(?:email|mail)\b/i,"\uD83D\uDCE7"],[/\b(?:deploy|hosting|infrastructure|cloud)\b/i,"\uD83D\uDE80"],[/\b(?:analytics|observability|monitoring)\b/i,"\uD83D\uDCCA"],[/\b(?:ai|model|inference)\b/i,"\u2728"],[/\b(?:video|media)\b/i,"\uD83C\uDFAC"],[/\b(?:realtime|messaging)\b/i,"\uD83D\uDCE1"]],Vi=new Map;function Gi(n){return typeof n==="string"?n.toLowerCase().replace(/[^a-z0-9]+/g,""):""}function eu(n){let r=Gi(n.metadata?.serviceSlug),t=Gi(n.brandName),e=Gi(n.title);for(let i of[r,t,e]){if(so[i])return so[i];let f=Object.keys(so).find((u)=>i.startsWith(u)||i.endsWith(u));if(f)return so[f]}let o=[n.category,n.metadata?.category,n.metadata?.serviceCategory].filter((i)=>typeof i==="string").join(" ");return vm.find(([i])=>i.test(o))?.[1]}function ou({faviconUrl:n,capabilities:r,emoji:t,faviconFailed:e=!1}){if(n&&!e&&r?.kitty_graphics)return"kitty";if(n&&!e&&r?.sixel)return"sixel";if(t)return"emoji";return"text"}function iu(n){return n.length>=tu.length&&tu.every((r,t)=>n[t]===r)}async function Xm(n){if(Number(n.headers.get("content-length")||0)>bo)throw Error("Favicon exceeds size limit");if(!n.body)return new Uint8Array(await n.arrayBuffer());let t=n.body.getReader(),e=[],o=0;try{while(!0){let{done:u,value:d}=await t.read();if(u)break;if(o+=d.byteLength,o>bo)throw Error("Favicon exceeds size limit");e.push(d)}}finally{t.releaseLock()}let i=new Uint8Array(o),f=0;for(let u of e)i.set(u,f),f+=u.byteLength;return i}async function Ym(n,r){let t=new AbortController,e=setTimeout(()=>t.abort(),Zm);try{let o=await r(n,{signal:t.signal,redirect:"manual",headers:{accept:"image/png,image/*;q=0.8"}});if(o.status>=300&&o.status<400){let f=o.headers.get("location");if(!f)return;let u=new URL(f,n);if(u.protocol!=="https:"||!/^t[0-3]\.gstatic\.com$/i.test(u.hostname))return;o=await r(u,{signal:t.signal,redirect:"error",headers:{accept:"image/png,image/*;q=0.8"}})}if(!o.ok)return;let i=await Xm(o);return i.length<=bo&&iu(i)?i:void 0}catch{return}finally{clearTimeout(e)}}function Qm(n){if(!n)return;try{let r=new URL(n);if(r.protocol!=="https:"||!r.hostname)return;return`https://www.google.com/s2/favicons?domain_url=${encodeURIComponent(r.origin)}&sz=64`}catch{return}}function $m(n){try{let r=new URL(n);if(r.hostname!=="icons.duckduckgo.com")return;let t=/^\/ip3\/(.+)\.ico$/i.exec(r.pathname)?.[1];return t?`https://${decodeURIComponent(t)}`:void 0}catch{return}}function Hm(n){try{let r=new URL(n);return r.protocol==="https:"&&r.hostname?r.origin:void 0}catch{return}}function Km(n){try{let r=new URL(n);return r.protocol==="https:"&&r.hostname==="www.google.com"&&r.pathname==="/s2/favicons"}catch{return!1}}async function Sm(n,r,t){let e=Km(n)?n:Qm(r||$m(n)||Hm(n));return e?Ym(e,t):void 0}function fu(n,r=fetch,t){let e=`${n}
|
|
10
|
-
${t||""}`;if(!Vi.has(e))Vi.set(e,Sm(n,t,r));return Vi.get(e)}function Wi(n,r){return new DataView(n.buffer,n.byteOffset+r,4).getUint32(0)}function _m(n){let r=n.reduce((o,i)=>o+i.byteLength,0),t=new Uint8Array(r),e=0;for(let o of n)t.set(o,e),e+=o.byteLength;return t}function Im(n,r,t){let e=n+r-t,o=Math.abs(e-n),i=Math.abs(e-r),f=Math.abs(e-t);return o<=i&&o<=f?n:i<=f?r:t}function qm(n){if(!iu(n))return;let r=0,t=0,e=0,o=-1,i=0,f,u,d=[];for(let k=8;k+12<=n.length;){let s=Wi(n,k);if(s>bo||k+12+s>n.length)return;let g=String.fromCharCode(...n.subarray(k+4,k+8)),c=n.subarray(k+8,k+8+s);if(g==="IHDR"){if(s!==13)return;r=Wi(c,0),t=Wi(c,4),e=c[8],o=c[9],i=c[12]}else if(g==="PLTE")f=c.slice();else if(g==="tRNS")u=c.slice();else if(g==="IDAT")d.push(c.slice());else if(g==="IEND")break;k+=s+12}let l=o===0?1:o===2?3:o===3?1:o===4?2:o===6?4:0;if(!r||!t||r*t>Wm||e!==8||i!==0||!l||!d.length)return;if(o===3&&(!f||f.length%3!==0))return;let m=r*l,w;try{w=Gm(_m(d),{maxOutputLength:t*(m+1)})}catch{return}if(w.length!==t*(m+1))return;let b=new Uint8Array(t*m);for(let k=0;k<t;k++){let s=k*(m+1),g=w[s];if(g>4)return;let c=k*m,h=(k-1)*m;for(let R=0;R<m;R++){let M=w[s+1+R],L=R>=l?b[c+R-l]:0,E=k>0?b[h+R]:0,N=k>0&&R>=l?b[h+R-l]:0;b[c+R]=g===0?M:g===1?M+L:g===2?M+E:g===3?M+Math.floor((L+E)/2):M+Im(L,E,N)}}let O=new Uint8Array(r*t*4);for(let k=0;k<r*t;k++){let s=k*l,g=k*4;if(o===0)O[g]=b[s],O[g+1]=b[s],O[g+2]=b[s],O[g+3]=255;else if(o===2)O[g]=b[s],O[g+1]=b[s+1],O[g+2]=b[s+2],O[g+3]=255;else if(o===3){let c=b[s],h=c*3;if(!f||h+2>=f.length)return;O[g]=f[h],O[g+1]=f[h+1],O[g+2]=f[h+2],O[g+3]=u?.[c]??255}else if(o===4)O[g]=b[s],O[g+1]=b[s],O[g+2]=b[s],O[g+3]=b[s+1];else O[g]=b[s],O[g+1]=b[s+1],O[g+2]=b[s+2],O[g+3]=b[s+3]}return{width:r,height:t,rgba:O}}function pm(n){let r=/^#([0-9a-f]{6})$/i.exec(n);if(!r)return[0,0,0];let t=Number.parseInt(r[1],16);return[t>>16&255,t>>8&255,t&255]}function ng(n,r,t,e){let[o,i,f]=pm(e),u=new Uint8Array(r*t*3);for(let d=0;d<t;d++){let l=Math.min(n.height-1,Math.floor((d+0.5)*n.height/t));for(let m=0;m<r;m++){let w=Math.min(n.width-1,Math.floor((m+0.5)*n.width/r)),b=(l*n.width+w)*4,O=(d*r+m)*3,k=n.rgba[b+3]/255;u[O]=Math.round(n.rgba[b]*k+o*(1-k)),u[O+1]=Math.round(n.rgba[b+1]*k+i*(1-k)),u[O+2]=Math.round(n.rgba[b+2]*k+f*(1-k))}}return u}function rg(n){let r="";for(let t=0;t<n.length;){let e=t+1;while(e<n.length&&n[e]===n[t])e++;let o=e-t;r+=o>=4?`!${o}${n[t]}`:n[t].repeat(o),t=e}return r}function du(n,r,t,e){let o=qm(n);if(!o)return;let i=Math.max(1,Math.min(32,Math.round(r))),f=Math.max(1,Math.min(32,Math.round(t))),u=ng(o,i,f,e),d=new Map,l=new Uint8Array(i*f);for(let O=0;O<l.length;O++){let k=O*3,s=Math.round(u[k]/85),g=Math.round(u[k+1]/85),c=Math.round(u[k+2]/85),h=s<<4|g<<2|c;if(!d.has(h))d.set(h,d.size);l[O]=d.get(h)}let m=[...d.entries()].map(([O,k])=>{let s=O>>4&3,g=O>>2&3,c=O&3;return`#${k};2;${Math.round(s*100/3)};${Math.round(g*100/3)};${Math.round(c*100/3)}`}).join(""),w="",b=[...d.values()];for(let O=0;O<f;O+=6){let k=!1;for(let s of b){let g=[],c=-1;for(let h=0;h<i;h++){let R=0;for(let M=0;M<6&&O+M<f;M++)if(l[(O+M)*i+h]===s)R|=1<<M;if(g.push(String.fromCharCode(63+R)),R)c=h}if(c<0)continue;if(k)w+="$";w+=`#${s}${rg(g.slice(0,c+1))}`,k=!0}if(O+6<f)w+="-"}return`\x1BP0;1;0q"1;1;${i};${f}${m}${w}\x1B\\`}function uu(n,r,t=2,e=1){let i=Buffer.from(n).toString("base64").match(/.{1,4096}/g)||[""];return i.map((f,u)=>{let d=u<i.length-1?1:0;return`\x1B_G${u===0?`a=T,f=100,i=${r},p=1,c=${t},r=${e},C=1,q=2,z=1,m=${d}`:`m=${d}`};${f}\x1B\\`}).join("")}function cu(n){return`\x1B_Ga=d,d=i,i=${n},q=2\x1B\\`}function Zi(n,r){if(r!=="tmux")return n;return`\x1BPtmux;${n.replaceAll("\x1B","\x1B\x1B")}\x1B\\`}var mg=1179796224;class su extends og{_imagePayload="";_imageProtocol="kitty";_imageId=0;_multiplexer="none";placementKey="";constructor(n,r){let t=r;super(n,{...r,width:t.width??2,height:t.height??1});this._imagePayload=r.imagePayload||"",this._imageProtocol=r.imageProtocol||"kitty",this._imageId=r.imageId||this._imageId,this._multiplexer=r.multiplexer||"none",this.frameBuffer.clear(gu.fromHex(r.fillColor||"#1f2335")),this.renderAfter=()=>this.schedulePlacement()}set imagePayload(n){let r=n||"";if(r===this._imagePayload)return;this.deletePlacement(),this._imagePayload=r,this.requestRender()}set imageProtocol(n){let r=n||"kitty";if(r===this._imageProtocol)return;this.deletePlacement(),this._imageProtocol=r,this.requestRender()}set imageId(n){if(!n||n===this._imageId)return;this.deletePlacement(),this._imageId=n,this.requestRender()}set multiplexer(n){let r=n||"none";if(r===this._multiplexer)return;this.deletePlacement(),this._multiplexer=r,this.requestRender()}set fillColor(n){this.frameBuffer.clear(gu.fromHex(n||"#1f2335")),this.requestRender()}schedulePlacement(){if(!this._imagePayload)return;if(!(this._imageProtocol==="kitty"?this.ctx.capabilities?.kitty_graphics:this.ctx.capabilities?.sixel))return;let r=`${this._imageProtocol}:${this.screenX}:${this.screenY}:${this._imagePayload.length}`;if(r===this.placementKey||this.pendingTimer)return;this.pendingTimer=setTimeout(()=>{if(this.pendingTimer=void 0,this.isDestroyed)return;this.deletePlacement();let t=this.screenY+1,e=this.screenX+1,o=`\x1B7\x1B[${t};${e}H${this._imagePayload}\x1B8`;wu(1,Zi(o,this._multiplexer)),this.placementKey=r},25)}deletePlacement(){if(!this.placementKey)return;if(this._imageProtocol==="kitty")wu(1,Zi(cu(this._imageId),this._multiplexer));this.placementKey=""}destroySelf(){if(this.pendingTimer)clearTimeout(this.pendingTimer);this.deletePlacement(),super.destroySelf()}}ig({"sponsor-terminal-image":su});function gg(){let n=fg(),[r,t]=Xi(n.capabilities);return cg(()=>{let e=()=>t(n.capabilities);n.on("capabilities",e),e(),hu(()=>{n.off("capabilities",e)})}),{renderer:n,capabilities:r}}function wg(n){let r=n.resolution&&n.terminalWidth?n.resolution.width/n.terminalWidth:8,t=n.resolution&&n.terminalHeight?n.resolution.height/n.terminalHeight:16;return{width:Math.max(8,Math.min(32,Math.round(r*2))),height:Math.max(8,Math.min(32,Math.round(t)))}}function ag(n){return n?"emoji":"text"}function bu(n){let{renderer:r,capabilities:t}=gg(),e=mg++,o=()=>eu(n.card),[i,f]=Xi(),[u,d]=Xi(),l=()=>typeof n.card.metadata?.websiteUrl==="string"?n.card.metadata.websiteUrl:void 0,m=()=>i()?.url===n.card.faviconUrl?i().bytes:void 0,w=()=>ou({faviconUrl:n.card.faviconUrl,capabilities:t(),emoji:o(),faviconFailed:u()===n.card.faviconUrl});dg(()=>{let s=n.card.faviconUrl;if(!s||!["kitty","sixel"].includes(w()))return;let g=!1;fu(s,fetch,l()).then((c)=>{if(g)return;if(c)f({url:s,bytes:c}),d(void 0);else f(void 0),d(s)}),hu(()=>{g=!0})});let b=ug(()=>{if(w()!=="sixel"||!m())return;let s=wg(r);return du(m(),s.width,s.height,n.background)}),O=()=>w()==="kitty"&&m()?"kitty":w()==="sixel"&&b()?"sixel":ag(o()),k=()=>O()==="kitty"?uu(m(),e):b();return vi(lg,{get children(){return[vi(au,{get when(){return O()==="emoji"},get children(){return[(()=>{var s=yo("text");return vr(s,"wrapMode","none"),eg(s,o),s})(),(()=>{var s=yo("text");return mu(s,lu(" ")),s})()]}}),vi(au,{get when(){return O()==="kitty"||O()==="sixel"},get children(){return[(()=>{var s=yo("sponsor-terminal-image");return vr(s,"width",2),vr(s,"height",1),vr(s,"style",{width:2,height:1}),vr(s,"imageId",e),tg((g)=>{var c=k(),h=O(),R=n.background,M=t()?.multiplexer;return c!==g.e&&(g.e=vr(s,"imagePayload",c,g.e)),h!==g.t&&(g.t=vr(s,"imageProtocol",h,g.t)),R!==g.a&&(g.a=vr(s,"fillColor",R,g.a)),M!==g.o&&(g.o=vr(s,"multiplexer",M,g.o)),g},{e:void 0,t:void 0,a:void 0,o:void 0}),s})(),(()=>{var s=yo("text");return mu(s,lu(" ")),s})()]}})]}})}function Eu(n,r){return n.kind==="index"?r.blue:n.kind==="tip"?r.green:r.yellow}function ku(n,r,t){xu(()=>{let e=t();if(!e||!r())return;let o=n(),i=setTimeout(()=>e(o),2000);Mu(()=>clearTimeout(i))})}function xg(n,r){if(n.length<=r)return n;if(r<=1)return n.slice(0,Math.max(0,r));return`${n.slice(0,r-1).trimEnd()}\u2026`}function Mo(n){let r=Qi({compact:!1,shortcut:!0,viewable:!0},n),t=Y(),e=()=>Eu(r.card,t),o=()=>r.card.kind==="index";return ku(()=>r.card,()=>r.viewable,()=>r.onImpression),(()=>{var i=Rn("box"),f=Rn("box"),u=Rn("text");return Tr(i,f),Q(i,"onMouseDown",()=>r.viewable&&r.card.action&&r.onAction?.(r.card)),Tr(f,u),Q(f,"style",{height:1,flexDirection:"row",justifyContent:"space-between"}),an(u,(()=>{var d=br(()=>!!o());return()=>d()?r.card.title:r.card.label||(r.card.kind==="sponsor"?"SPONSORED":"TIP")})()),an(f,(()=>{var d=br(()=>!!(r.card.brandName&&!r.compact));return()=>d()&&(()=>{var l=Rn("text");return an(l,()=>r.card.brandName),mr((m)=>Q(l,"fg",t.muted,m)),l})()})(),null),an(i,(()=>{var d=br(()=>!o());return()=>d()&&(()=>{var l=Rn("text");return Q(l,"wrapMode","word"),an(l,()=>r.card.title),mr((m)=>{var w=t.foreground,b=xo.BOLD;return w!==m.e&&(m.e=Q(l,"fg",w,m.e)),b!==m.t&&(m.t=Q(l,"attributes",b,m.t)),m},{e:void 0,t:void 0}),l})()})(),null),an(i,(()=>{var d=br(()=>!!(!r.compact&&r.card.body));return()=>d()&&(()=>{var l=Rn("text");return Q(l,"wrapMode","word"),an(l,()=>r.card.body),mr((m)=>Q(l,"fg",t.muted,m)),l})()})(),null),an(i,(()=>{var d=br(()=>!!(!r.compact&&r.card.evidence));return()=>d()&&(()=>{var l=Rn("text");return Q(l,"wrapMode","word"),an(l,()=>`Based on: ${r.card.evidence}`),mr((m)=>Q(l,"fg",t.muted,m)),l})()})(),null),an(i,(()=>{var d=br(()=>!!(r.card.cta||r.shortcut&&r.viewable&&r.card.action?.type==="open_url"));return()=>d()&&(()=>{var l=Rn("text");return an(l,()=>`${r.card.cta||"Open"}${r.shortcut&&r.viewable&&r.card.action?.type==="open_url"?` \xB7 ${Ji}`:""}`),mr((m)=>Q(l,"fg",e(),m)),l})()})(),null),mr((d)=>{var l={minWidth:1,minHeight:r.compact?3:5,flexGrow:1,flexDirection:"column",border:!0,borderColor:e(),customBorderChars:vn,backgroundColor:t.panel,paddingLeft:1,paddingRight:1},m=e(),w=xo.BOLD;return l!==d.e&&(d.e=Q(i,"style",l,d.e)),m!==d.t&&(d.t=Q(u,"fg",m,d.t)),w!==d.a&&(d.a=Q(u,"attributes",w,d.a)),d},{e:void 0,t:void 0,a:void 0}),i})()}function Oo(n){let r=Qi({compact:!1,viewable:!0},n),t=hg(()=>r.cards.slice(0,r.wide?3:1));return Er(Ou,{get when(){return t().length>0},get children(){var e=Rn("box");return an(e,Er(bg,{get each(){return t()},children:(o)=>Er(Mo,{card:o,get compact(){return r.compact},get viewable(){return r.viewable},get onAction(){return r.onAction},get onImpression(){return r.onImpression}})})),mr((o)=>Q(e,"style",{width:"100%",maxWidth:110,flexDirection:r.wide?"row":"column",gap:1,flexShrink:0},o)),e}})}function Mg(n){let r=Y(),t=()=>Eu(n.card,r),e=()=>n.card.kind==="sponsor"?r.green:t(),o=()=>n.viewable&&n.card.action?.type==="open_url",i=()=>n.card.brandName&&n.card.brandName!==n.card.title?n.card.brandName:"",f=()=>n.card.kind==="index"?"":n.card.label||"SPONSORED",u=()=>n.retry?`\u21BB ${n.retry.message||"Retrying"}`:n.status==="working"?"\u25C6 Working":"",d=()=>i()?`${i()} \u2014 ${n.card.title}`:n.card.title,l=()=>i()&&f().length+d().length+u().length+10<=n.width?d():n.card.title,m=()=>xg(l(),Math.max(18,n.width-f().length-u().length-12)),w=()=>n.card.cta||(o()?"Open":""),b=()=>w()?`${w()}${o()?` \xB7 ${Ji}`:""}`:"",O=()=>f().length+m().length+b().length+u().length+14<=n.width?b():"";return ku(()=>n.card,()=>n.viewable,()=>n.onImpression),(()=>{var k=Rn("box"),s=Rn("text"),g=Rn("box");return Tr(k,s),Tr(k,g),Q(k,"onMouseDown",()=>n.viewable&&n.card.action&&n.onAction?.(n.card)),Q(k,"border",["top","left","right"]),an(k,Er(bu,{get card(){return n.card},get background(){return r.panel}}),s),an(k,(()=>{var c=br(()=>!!f());return()=>c()&&(()=>{var h=Rn("text"),R=yu(" \xB7 ");return Tr(h,R),Q(h,"wrapMode","none"),an(h,f,R),mr((M)=>{var L=e(),E=xo.BOLD;return L!==M.e&&(M.e=Q(h,"fg",L,M.e)),E!==M.t&&(M.t=Q(h,"attributes",E,M.t)),M},{e:void 0,t:void 0}),h})()})(),s),Q(s,"wrapMode","none"),an(s,m),Q(g,"style",{flexGrow:1,minWidth:1}),an(k,(()=>{var c=br(()=>!!O());return()=>c()&&(()=>{var h=Rn("text");return an(h,O,null),an(h,()=>u()?" \xB7 ":"",null),mr((R)=>Q(h,"fg",e(),R)),h})()})(),null),an(k,(()=>{var c=br(()=>!!u());return()=>c()&&(()=>{var h=Rn("text");return an(h,u),mr((R)=>Q(h,"fg",r.muted,R)),h})()})(),null),mr((c)=>{var h={width:n.width,minHeight:2,height:2,alignSelf:"flex-end",flexShrink:0,flexDirection:"row",alignItems:"center",borderColor:e(),customBorderChars:vn,backgroundColor:r.panel,paddingLeft:1,paddingRight:1},R=r.foreground,M=xo.BOLD;return h!==c.e&&(c.e=Q(k,"style",h,c.e)),R!==c.t&&(c.t=Q(s,"fg",R,c.t)),M!==c.a&&(c.a=Q(s,"attributes",M,c.a)),c},{e:void 0,t:void 0,a:void 0}),k})()}function Ru(n){let r=Qi({variant:"current",railWidth:64,viewable:!0},n),t=Y(),[e,o]=sg(0),i=()=>["\u25C6","\u25C7","\u25C8","\u25C7"][e()];xu(()=>{if(r.status!=="working")return;let d=setInterval(()=>o((l)=>(l+1)%4),160);Mu(()=>clearInterval(d))});let f=()=>r.card&&r.variant!=="current"?r.card:void 0,u=()=>r.status==="working"||Boolean(r.retry)||Boolean(r.card);return Er(yg,{get children(){return[Er(Yi,{get when(){return r.exitArmed},get children(){var d=Rn("box"),l=Rn("text");return Tr(d,l),Q(d,"style",{height:1,paddingLeft:1}),Tr(l,yu("Press Ctrl+C again to exit")),mr((m)=>Q(l,"fg",t.yellow,m)),d}}),Er(Yi,{get when(){return f()},children:(d)=>Er(Mg,{get card(){return d()},get status(){return r.status},get retry(){return r.retry},get width(){return r.railWidth},get viewable(){return r.viewable},get onAction(){return r.onAction},get onImpression(){return r.onImpression}})}),Er(Yi,{get when(){return u()},get children(){var d=Rn("box"),l=Rn("box"),m=Rn("text"),w=Rn("text");return Tr(d,l),Q(d,"style",{flexDirection:"column",width:"100%",flexShrink:0}),Tr(l,m),Tr(l,w),Q(l,"style",{height:1,paddingLeft:1,paddingRight:1,flexDirection:"row",justifyContent:"space-between"}),an(m,(()=>{var b=br(()=>!!r.retry);return()=>b()?`\u21BB ${r.retry.message||"Retrying"} \xB7 attempt ${r.retry.attempt||1}`:br(()=>r.status==="working")()?`${i()} Working`:"\u2713 Complete"})()),an(w,(()=>{var b=br(()=>r.status==="working");return()=>b()?r.card?"rotates while the agent works \xB7 esc interrupt":"esc interrupt":"ready when you are"})()),an(d,Er(Ou,{get when(){return r.card},children:(b)=>Er(Mo,{get card(){return b()},compact:!0,get viewable(){return r.viewable},get onAction(){return r.onAction},get onImpression(){return r.onImpression}})}),null),mr((b)=>{var O=r.retry?t.red:r.status==="working"?t.green:t.muted,k=t.muted;return O!==b.e&&(b.e=Q(m,"fg",O,b.e)),k!==b.t&&(b.t=Q(w,"fg",k,b.t)),b},{e:void 0,t:void 0}),d}})]}})}function ko(n){let r=kg({phase:"ready",status:"Ready",hint:"Type / to browse commands, @ to add files, or ! to run a shell command.",cards:[],wide:!1,compactHeader:!1,cardsViewable:!0},n),t=Y(),e=Eg(),o=()=>r.compactHeader||e().height<22,i=()=>r.phase!=="ready",f=()=>i()?[]:r.cards,u=()=>i()?(()=>{var d=On("box"),l=On("text"),m=On("text");return Fn(d,l),Fn(d,m),or(l,()=>r.phase==="error"?"Freecode could not start":"Starting local engine\u2026"),or(m,()=>r.error||r.cwd),or(d,(()=>{var w=zt(()=>r.phase==="error");return()=>w()&&(()=>{var b=On("text");return Fn(b,Eo("Run `freecode doctor`, then restart.")),xt((O)=>yn(b,"fg",t.muted,O)),b})()})(),null),xt((w)=>{var b={width:"100%",height:zi(o()),flexShrink:0,flexDirection:"column",alignItems:"center",justifyContent:"center"},O=r.phase==="error"?t.red:t.green,k=Og.BOLD,s=t.muted;return b!==w.e&&(w.e=yn(d,"style",b,w.e)),O!==w.t&&(w.t=yn(l,"fg",O,w.t)),k!==w.a&&(w.a=yn(l,"attributes",k,w.a)),s!==w.o&&(w.o=yn(m,"fg",s,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),d})():r.interaction;return(()=>{var d=On("box"),l=On("box"),m=On("box"),w=On("box"),b=On("box"),O=On("box"),k=On("box"),s=On("box"),g=On("box"),c=On("box"),h=On("box"),R=On("text");return Fn(d,l),Fn(d,c),Fn(l,m),Fn(l,w),Fn(l,b),Fn(l,O),Fn(l,k),Fn(l,s),Fn(l,g),yn(l,"style",{flexGrow:1,minHeight:0,alignItems:"center",paddingLeft:2,paddingRight:2}),yn(m,"style",{flexGrow:1,minHeight:0}),yn(w,"style",{height:2,minHeight:0}),or(l,Lu(nu,{get compact(){return o()},get effect(){return r.bannerEffect},get animate(){return r.bannerAnimate}}),b),or(l,Lu(Oo,{get cards(){return f()},get wide(){return r.wide},get viewable(){return r.cardsViewable},get onAction(){return r.onCardAction},get onImpression(){return r.onCardImpression}}),O),or(l,(()=>{var M=zt(()=>f().length>0);return()=>M()&&(()=>{var L=On("box");return yn(L,"style",{height:1,minHeight:0}),L})()})(),O),yn(O,"style",{width:"100%",maxWidth:78,flexShrink:0}),or(O,u),yn(k,"style",{height:2,minHeight:0}),or(s,(()=>{var M=zt(()=>!i()&&r.hint!==!1);return()=>M()&&(()=>{var L=On("text");return or(L,()=>r.hint),xt((E)=>yn(L,"fg",t.muted,E)),L})()})()),yn(g,"style",{flexGrow:1,minHeight:0}),Fn(c,h),yn(c,"style",{height:2,paddingLeft:2,paddingRight:2,flexDirection:"row",alignItems:"center"}),Fn(h,R),yn(h,"style",{flexGrow:1}),or(R,()=>r.cwd),or(c,(()=>{var M=zt(()=>!!i());return()=>M()?(()=>{var L=On("text");return Fn(L,Eo("Ctrl+C exit")),xt((E)=>yn(L,"fg",t.muted,E)),L})():zt(()=>!!r.footerLabel)()?(()=>{var L=On("text");return or(L,()=>r.footerLabel),xt((E)=>yn(L,"fg",t.muted,E)),L})():(()=>{var L=On("text"),E=On("span"),N=Eo(" ");return Fn(L,E),Fn(L,N),or(L,(()=>{var A=zt(()=>!!r.modelLabel);return()=>A()?`${r.modelLabel} \xB7 `:""})(),E),Fn(E,Eo("\u25CF")),or(L,()=>r.status,null),xt((A)=>{var F=t.muted,U={fg:t.green};return F!==A.e&&(A.e=yn(L,"fg",F,A.e)),U!==A.t&&(A.t=yn(E,"style",U,A.t)),A},{e:void 0,t:void 0}),L})()})(),null),xt((M)=>{var L={width:"100%",height:"100%",flexDirection:"column",backgroundColor:t.background},E={height:f().length?1:2,minHeight:1},N={height:r.hint===!1?0:1,flexShrink:0},A=t.muted;return L!==M.e&&(M.e=yn(d,"style",L,M.e)),E!==M.t&&(M.t=yn(b,"style",E,M.t)),N!==M.a&&(M.a=yn(s,"style",N,M.a)),A!==M.o&&(M.o=yn(R,"fg",A,M.o)),M},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}import{effect as Mt}from"@opentui/solid";import{insert as jn}from"@opentui/solid";import{createTextNode as it}from"@opentui/solid";import{insertNode as Pn}from"@opentui/solid";import{memo as ce}from"@opentui/solid";import{createComponent as Jr}from"@opentui/solid";import{setProp as rn}from"@opentui/solid";import{createElement as Nn}from"@opentui/solid";import{useRenderer as Gg}from"@opentui/solid";import{For as Wg,Show as Jt}from"solid-js";import{createComponent as Nu}from"@opentui/solid";import{effect as Du}from"@opentui/solid";import{insert as Rg}from"@opentui/solid";import{setProp as zr}from"@opentui/solid";import{createElement as Bu}from"@opentui/solid";import{memo as Lg}from"@opentui/solid";import{getLinkId as Ng,SyntaxStyle as Dg}from"@opentui/core";import{useRenderer as Bg}from"@opentui/solid";import{createEffect as Ag,createMemo as Cg,mergeProps as Fg,onCleanup as jg,Show as Pg}from"solid-js";var Ug=[/(?:^|\n)\s{0,3}(?:#{1,6}\s|>|(?:[-+*]|\d+[.)])\s|```|~~~|\|)|\[[^\]]+\]\([^)]+\)|https?:\/\/|(?:\*\*|__|~~|`[^`\n]+`|\*[^*\n]+\*|_[^_\n]+_)/m,/(?:^|\n)\s{0,3}(?:(?:\*\s*){3,}|(?:-\s*){3,}|(?:_\s*){3,})(?:\n|$)/m,/(?:^|\n)(?: {4}|\t)\S/m];function Ro(n){let r=Fg({streaming:!1},n),t=Y();return Nu(Pg,{get when(){return Lg(()=>!r.streaming)()&&!zg(r.content)},get fallback(){return Nu(Tg,{get content(){return r.content},get streaming(){return r.streaming},get onOpenLink(){return r.onOpenLink},theme:t})},get children(){var e=Bu("text");return zr(e,"wrapMode","word"),Rg(e,()=>r.content),Du((o)=>zr(e,"fg",t.foreground,o)),e}})}function Tg(n){let r=Bg(),t=Vg(n.theme);return(()=>{var e=Bu("markdown");return zr(e,"conceal",!0),zr(e,"concealCode",!0),zr(e,"onMouseUp",(o)=>{if(o.button!==0||!n.onOpenLink)return;if(r.getSelection()?.getSelectedText())return;let i=Jg(r,o.x,o.y);if(!i)return;o.preventDefault(),o.stopPropagation(),n.onOpenLink(i)}),zr(e,"style",{width:"100%",flexShrink:0}),Du((o)=>{var i=n.content,f=t(),u=n.streaming,d={style:"columns",wrapMode:"word",borderColor:n.theme.border};return i!==o.e&&(o.e=zr(e,"content",i,o.e)),f!==o.t&&(o.t=zr(e,"syntaxStyle",f,o.t)),u!==o.a&&(o.a=zr(e,"streaming",u,o.a)),d!==o.o&&(o.o=zr(e,"tableOptions",d,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()}function zg(n){return Ug.some((r)=>r.test(n))}function Jg(n,r,t){let e=n.currentRenderBuffer;if(r<0||t<0||r>=e.width||t>=e.height)return;let o=e.buffers.attributes[t*e.width+r],i=Ng(o);if(!i)return;let f=e.lib;if(!f.linkGetUrl)return;let u=f.linkGetUrl(i);try{let d=new URL(u);return d.protocol==="https:"||d.protocol==="http:"?d.href:void 0}catch{return}}function Vg(n){let r=Cg(()=>Dg.fromStyles({default:{fg:n.foreground},conceal:{fg:n.border},"markup.heading":{fg:n.foreground,bold:!0},"markup.strong":{fg:n.foreground,bold:!0},"markup.italic":{fg:n.foreground,italic:!0},"markup.strikethrough":{fg:n.muted,dim:!0},"markup.raw":{fg:n.green},"markup.link":{fg:n.blue,underline:!0},"markup.link.label":{fg:n.blue,underline:!0},"markup.link.url":{fg:n.muted,underline:!0},"markup.list":{fg:n.green,bold:!0},"markup.quote":{fg:n.muted,italic:!0}}));return Ag(()=>{let t=r();jg(()=>t.destroy())}),r}function Au(n){let r=Gg(),t=Y();return(()=>{var e=Nn("box");return rn(e,"style",{flexDirection:"column",width:"100%"}),jn(e,Jr(Wg,{get each(){return n.state.transcript},children:(o,i)=>{let f=()=>n.state.showToolDetails||Boolean(o.id&&n.expandedTools.has(o.id));if(o.type==="user")return(()=>{var u=Nn("box"),d=Nn("text");return Pn(u,d),rn(u,"border",["left"]),rn(d,"wrapMode","word"),jn(d,()=>o.text),Mt((l)=>{var m={flexDirection:"column",marginTop:i()===0?0:1,marginBottom:1,paddingTop:1,paddingBottom:1,paddingLeft:2,borderColor:t.blue,backgroundColor:t.panel},w=t.foreground;return m!==l.e&&(l.e=rn(u,"style",m,l.e)),w!==l.t&&(l.t=rn(d,"fg",w,l.t)),l},{e:void 0,t:void 0}),u})();if(o.type==="tool"){let u=Zg(o.text);return(()=>{var d=Nn("box"),l=Nn("text"),m=it(" "),w=it(" ");return Pn(d,l),rn(d,"onMouseUp",(b)=>{if(b.button!==0||r.getSelection()?.getSelectedText())return;if(o.id)n.onToggleTool(o.id)}),rn(d,"style",{flexDirection:"column",marginTop:1,paddingLeft:3}),Pn(l,m),Pn(l,w),rn(l,"wrapMode","word"),jn(l,()=>f()?"\u2212":"+",m),jn(l,(()=>{var b=ce(()=>o.status==="done");return()=>b()?"\u2713":o.status==="failed"?"!":"\u25C6"})(),w),jn(l,u,null),jn(d,Jr(Jt,{get when(){return ce(()=>!!f())()&&o.input!=null},get children(){var b=Nn("text"),O=it(" input \xB7 ");return Pn(b,O),rn(b,"wrapMode","word"),jn(b,()=>Xg(o.input),null),Mt((k)=>rn(b,"fg",t.muted,k)),b}}),null),jn(d,Jr(Jt,{get when(){return ce(()=>!!f())()&&o.output},get children(){var b=Nn("box"),O=Nn("text");return Pn(b,O),rn(b,"border",["left"]),rn(O,"wrapMode","word"),jn(O,()=>o.output),Mt((k)=>{var s={marginTop:1,paddingLeft:1,borderColor:t.border},g=t.muted;return s!==k.e&&(k.e=rn(b,"style",s,k.e)),g!==k.t&&(k.t=rn(O,"fg",g,k.t)),k},{e:void 0,t:void 0}),b}}),null),Mt((b)=>rn(l,"fg",o.status==="failed"?t.red:o.status==="done"?t.muted:t.yellow,b)),d})()}return(()=>{var u=Nn("box");return rn(u,"style",{marginTop:1,paddingLeft:3,paddingRight:1}),jn(u,Jr(Ro,{get content(){return o.text},get onOpenLink(){return n.onOpenLink}})),u})()}}),null),jn(e,Jr(Jt,{get when(){return ce(()=>!!n.state.showReasoning)()&&n.state.reasoningText},get children(){var o=Nn("box"),i=Nn("text"),f=Nn("box");return Pn(o,i),Pn(o,f),rn(o,"style",{flexDirection:"column",paddingLeft:3,paddingRight:1,marginTop:1}),Pn(i,it("Thought")),rn(f,"style",{paddingLeft:2}),jn(f,Jr(Ro,{get content(){return n.state.reasoningText},streaming:!0,get onOpenLink(){return n.onOpenLink}})),Mt((u)=>rn(i,"fg",t.yellow,u)),o}}),null),jn(e,Jr(Jt,{get when(){return n.state.assistantText},get children(){var o=Nn("box");return rn(o,"style",{paddingLeft:3,paddingRight:1,marginTop:1}),jn(o,Jr(Ro,{get content(){return n.state.assistantText},streaming:!0,get onOpenLink(){return n.onOpenLink}})),o}}),null),jn(e,Jr(Jt,{get when(){return n.state.error},get children(){var o=Nn("box"),i=Nn("text"),f=Nn("text"),u=Nn("text");return Pn(o,i),Pn(o,f),Pn(o,u),rn(o,"border",["left"]),Pn(i,it("Something went wrong")),rn(f,"wrapMode","word"),jn(f,()=>n.state.error),Pn(u,it("Use /clear-error after reviewing the issue.")),Mt((d)=>{var l={marginTop:1,paddingTop:1,paddingBottom:1,paddingLeft:2,borderColor:t.red,backgroundColor:t.panel},m=t.red,w=t.muted,b=t.muted;return l!==d.e&&(d.e=rn(o,"style",l,d.e)),m!==d.t&&(d.t=rn(i,"fg",m,d.t)),w!==d.a&&(d.a=rn(f,"fg",w,d.a)),b!==d.o&&(d.o=rn(u,"fg",b,d.o)),d},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),null),jn(e,Jr(Jt,{get when(){return ce(()=>n.state.transcript.length>0&&n.state.status!=="working")()&&!n.state.assistantText},get children(){var o=Nn("box"),i=Nn("text"),f=Nn("span"),u=it(" ");return Pn(o,i),rn(o,"style",{paddingLeft:3,marginTop:1}),Pn(i,f),Pn(i,u),Pn(f,it("\u25A3")),jn(i,()=>vg(n.state.agent),null),Mt((d)=>{var l=t.muted,m={fg:t.green};return l!==d.e&&(d.e=rn(i,"fg",l,d.e)),m!==d.t&&(d.t=rn(f,"style",m,d.t)),d},{e:void 0,t:void 0}),o}}),null),e})()}function Zg(n){let r=n.replaceAll("_"," ").trim(),t=r.toLowerCase();if(/read|find|glob|grep|search/.test(t))return`Explored \xB7 ${r}`;if(/write|edit|patch|replace/.test(t))return`Changed \xB7 ${r}`;if(/bash|shell|exec|command/.test(t))return`Ran \xB7 ${r}`;if(/test|check|lint|build/.test(t))return`Checked \xB7 ${r}`;if(/task|agent/.test(t))return`Delegated \xB7 ${r}`;return r}function vg(n){return n?n[0].toUpperCase()+n.slice(1):"Build"}function Xg(n){let r=typeof n==="string"?n:JSON.stringify(n);return r.length>240?`${r.slice(0,237)}\u2026`:r}import{createComponent as Cn}from"@opentui/solid";import{effect as nr}from"@opentui/solid";import{createTextNode as Jn}from"@opentui/solid";import{insertNode as I}from"@opentui/solid";import{insert as gn}from"@opentui/solid";import{memo as Lo}from"@opentui/solid";import{setProp as $}from"@opentui/solid";import{createElement as fn}from"@opentui/solid";import{TextAttributes as Fu}from"@opentui/core";import{createMemo as No,Index as $i,Show as Xr}from"solid-js";function le(n){let r=Y(),t=()=>n.state.model,e=No(()=>n.state.todos.filter((u)=>u.status!=="completed")),o=No(()=>n.state.files.slice(0,8)),i=No(()=>n.state.subagents.slice(0,6)),f=No(()=>i().filter((u)=>u.status==="running").length);return(()=>{var u=fn("box"),d=fn("scrollbox"),l=fn("box"),m=fn("box"),w=fn("text"),b=fn("text"),O=fn("box"),k=fn("text"),s=Jn(" "),g=fn("span");return I(u,d),I(u,O),I(d,l),$(d,"style",{flexGrow:1,minHeight:1}),I(l,m),$(l,"style",{flexDirection:"column",gap:1}),I(m,w),I(m,b),$(m,"style",{flexDirection:"column"}),gn(w,()=>n.title||"New session"),gn(b,()=>n.state.sessionID||"Starting\u2026"),gn(l,Cn(Xr,{get when(){return n.experienceActive},get fallback(){return[Cn(Vt,{title:"Session",get children(){return[(()=>{var c=fn("text"),h=Jn(" agent");return I(c,h),gn(c,()=>Cu(n.state.agent),h),nr((R)=>$(c,"fg",r.muted,R)),c})(),(()=>{var c=fn("text");return gn(c,()=>n.modelLabel||(t()?t().id:"Freecode model")),nr((h)=>$(c,"fg",r.muted,h)),c})()]}}),Cn(Xr,{get when(){return n.card},children:(c)=>Cn(Mo,{get card(){return c()},get viewable(){return n.cardViewable??!0},get onAction(){return n.onCardAction},get onImpression(){return n.onCardImpression}})}),Cn(Xr,{get when(){return i().length>0},get children(){return Cn(Vt,{get title(){return`Subagents \xB7 ${f()} running`},get children(){return Cn($i,{get each(){return i()},children:(c)=>(()=>{var h=fn("box"),R=fn("text"),M=Jn(" "),L=fn("text");return I(h,R),I(h,L),$(h,"style",{flexDirection:"column",marginBottom:1}),I(R,M),gn(R,()=>Qg(c().status),M),gn(R,()=>c().label,null),gn(R,(()=>{var E=Lo(()=>!!c().toolCalls);return()=>E()?(()=>{var N=fn("span"),A=Jn(" \xB7 "),F=Jn(" tools");return I(N,A),I(N,F),gn(N,()=>c().toolCalls,F),nr((U)=>$(N,"style",{fg:r.muted},U)),N})():null})(),null),$(L,"wrapMode","word"),gn(L,()=>c().description),gn(h,Cn(Xr,{get when(){return c().pendingInteractions>0},get children(){var E=fn("text"),N=Jn("Approval needed \xB7 ");return I(E,N),gn(E,()=>c().pendingInteractions,null),nr((A)=>$(E,"fg",r.yellow,A)),E}}),null),nr((E)=>{var N=c().status==="error"?r.red:c().pendingInteractions>0?r.yellow:c().status==="completed"?r.green:r.blue,A=r.muted;return N!==E.e&&(E.e=$(R,"fg",N,E.e)),A!==E.t&&(E.t=$(L,"fg",A,E.t)),E},{e:void 0,t:void 0}),h})()})}})}}),Cn(Xr,{get when(){return e().length>0},get children(){return Cn(Vt,{title:"Todo",get children(){return Cn($i,{get each(){return e().slice(0,6)},children:(c)=>(()=>{var h=fn("text"),R=Jn("\u25A1 ");return I(h,R),gn(h,()=>c().content||c().title||String(c()),null),nr((M)=>$(h,"fg",r.muted,M)),h})()})}})}}),Cn(Xr,{get when(){return o().length>0},get children(){return Cn(Vt,{title:"Modified files",get children(){return Cn($i,{get each(){return o()},children:(c,h)=>(()=>{var R=fn("text");return $(R,"wrapMode","word"),gn(R,()=>c().file||c().path||`File ${h+1}`,null),gn(R,(()=>{var M=Lo(()=>!!c().additions);return()=>M()?(()=>{var L=fn("span"),E=Jn(" +");return I(L,E),gn(L,()=>c().additions,null),nr((N)=>$(L,"style",{fg:r.green},N)),L})():null})(),null),gn(R,(()=>{var M=Lo(()=>!!c().deletions);return()=>M()?(()=>{var L=fn("span"),E=Jn(" -");return I(L,E),gn(L,()=>c().deletions,null),nr((N)=>$(L,"style",{fg:r.red},N)),L})():null})(),null),nr((M)=>$(R,"fg",r.muted,M)),R})()})}})}}),Cn(Xr,{get when(){return n.state.services.mcp>0||n.state.services.lsp>0},get children(){return Cn(Vt,{title:"Workspace",get children(){return[Cn(Xr,{get when(){return n.state.services.lsp>0},get children(){var c=fn("text"),h=fn("span"),R=Jn(" "),M=Jn(" LSP");return I(c,h),I(c,R),I(c,M),I(h,Jn("\u25CF")),gn(c,()=>n.state.services.lsp,M),nr((L)=>{var E=r.muted,N={fg:r.green};return E!==L.e&&(L.e=$(c,"fg",E,L.e)),N!==L.t&&(L.t=$(h,"style",N,L.t)),L},{e:void 0,t:void 0}),c}}),Cn(Xr,{get when(){return n.state.services.mcp>0},get children(){var c=fn("text"),h=fn("span"),R=Jn(" "),M=Jn(" MCP");return I(c,h),I(c,R),I(c,M),I(h,Jn("\u25CF")),gn(c,()=>n.state.services.mcp,M),nr((L)=>{var E=r.muted,N={fg:r.green};return E!==L.e&&(L.e=$(c,"fg",E,L.e)),N!==L.t&&(L.t=$(h,"style",N,L.t)),L},{e:void 0,t:void 0}),c}})]}})}})]},get children(){return[Lo(()=>n.experiencePanel),Cn(Vt,{title:"Coding session",get children(){return[(()=>{var c=fn("text"),h=Jn(" agent \xB7 still connected");return I(c,h),gn(c,()=>Cu(n.state.agent),h),nr((R)=>$(c,"fg",r.muted,R)),c})(),(()=>{var c=fn("text");return gn(c,()=>n.modelLabel||(t()?t().id:"Freecode model")),nr((h)=>$(c,"fg",r.muted,h)),c})()]}})]}}),null),I(O,k),$(O,"style",{paddingTop:1}),I(k,s),I(k,g),$(k,"wrapMode","none"),gn(k,()=>Yg(n.cwd),s),I(g,Jn("\u25C6 FREECODE")),nr((c)=>{var h={width:42,height:"100%",flexDirection:"column",backgroundColor:r.panel,paddingTop:1,paddingBottom:1,paddingLeft:2,paddingRight:2},R=r.foreground,M=Fu.BOLD,L=r.muted,E=r.muted,N={fg:r.green};return h!==c.e&&(c.e=$(u,"style",h,c.e)),R!==c.t&&(c.t=$(w,"fg",R,c.t)),M!==c.a&&(c.a=$(w,"attributes",M,c.a)),L!==c.o&&(c.o=$(b,"fg",L,c.o)),E!==c.i&&(c.i=$(k,"fg",E,c.i)),N!==c.n&&(c.n=$(g,"style",N,c.n)),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),u})()}function Vt(n){let r=Y();return(()=>{var t=fn("box"),e=fn("text");return I(t,e),$(t,"style",{flexDirection:"column"}),gn(e,()=>n.title),gn(t,()=>n.children,null),nr((o)=>{var i=r.foreground,f=Fu.BOLD;return i!==o.e&&(o.e=$(e,"fg",i,o.e)),f!==o.t&&(o.t=$(e,"attributes",f,o.t)),o},{e:void 0,t:void 0}),t})()}function Cu(n){return n?n[0].toUpperCase()+n.slice(1):"Build"}function Yg(n){let r=n.replaceAll("\\","/").split("/").filter(Boolean);return r.length>1?`${r.at(-2)}/${r.at(-1)}`:r[0]||n}function Qg(n){if(n==="completed")return"\u25CF";if(n==="cancelled")return"\u25CB";if(n==="error")return"\u25CD";return"\u25D4"}import{createTextNode as Yr}from"@opentui/solid";import{insertNode as kr}from"@opentui/solid";import{setProp as v}from"@opentui/solid";import{effect as Vn}from"@opentui/solid";import{insert as gr}from"@opentui/solid";import{memo as Zt}from"@opentui/solid";import{createComponent as Un}from"@opentui/solid";import{createElement as xn}from"@opentui/solid";import{TextAttributes as Do}from"@opentui/core";import{useTerminalDimensions as $g}from"@opentui/solid";import{Match as Gt,mergeProps as Hg,Switch as Kg}from"solid-js";function ju(n){let r=Hg({cards:[],cardsViewable:!0},n),t=Y(),e=$g(),o=()=>e().width<=80||e().height<=24,i=()=>_g(r.state,{onSignIn:r.onSignIn,onRetry:r.onRetry});return(()=>{var f=xn("box");return gr(f,Un(Sg,{get state(){return r.state},get compact(){return o()},get projectPath(){return r.projectPath}}),null),gr(f,(()=>{var u=Zt(()=>r.state.kind==="welcome");return()=>u()?[(()=>{var d=xn("box");return v(d,"style",{height:1}),d})(),(()=>{var d=xn("text");return kr(d,Yr("Freecode is a coding agent that's free forever. We're supported by ads such as:")),v(d,"wrapMode","word"),Vn((l)=>v(d,"fg",t.foreground,l)),d})(),(()=>{var d=xn("box");return v(d,"style",{height:1}),d})(),Un(Oo,{get cards(){return r.cards},wide:!1,get compact(){return o()},get viewable(){return r.cardsViewable},get onAction(){return r.onCardAction},get onImpression(){return r.onCardImpression}})]:null})(),null),gr(f,(()=>{var u=Zt(()=>!!i());return()=>u()?(()=>{var d=xn("box"),l=xn("text");return kr(d,l),gr(l,()=>i().label),Vn((m)=>{var w=i().run,b={height:1,marginTop:1,backgroundColor:t.panelAlt,paddingLeft:1,paddingRight:1},O=t.green,k=Do.BOLD;return w!==m.e&&(m.e=v(d,"onMouseDown",w,m.e)),b!==m.t&&(m.t=v(d,"style",b,m.t)),O!==m.a&&(m.a=v(l,"fg",O,m.a)),k!==m.o&&(m.o=v(l,"attributes",k,m.o)),m},{e:void 0,t:void 0,a:void 0,o:void 0}),d})():null})(),null),Vn((u)=>v(f,"style",{width:"100%",flexDirection:"column",border:!0,borderColor:Ig(r.state,t),customBorderChars:vn,backgroundColor:t.panel,paddingLeft:o()?1:2,paddingRight:o()?1:2,paddingTop:o()?0:1,paddingBottom:o()?0:1},u)),f})()}function Sg(n){let r=Y(),t=()=>n.state.kind==="device_code"||n.state.kind==="waiting"?n.state:void 0,e=()=>n.state.kind==="error"?n.state:void 0,o=()=>n.state.kind==="authenticated"?n.state:void 0;return Un(Kg,{get children(){return[Un(Gt,{get when(){return n.state.kind==="checking"},get children(){return[Un(Wt,{children:"Checking your Free Code account\u2026"}),(()=>{var i=xn("text");return kr(i,Yr("Looking for an existing session on this computer.")),v(i,"wrapMode","word"),Vn((f)=>v(i,"fg",r.muted,f)),i})()]}}),Un(Gt,{get when(){return n.state.kind==="welcome"},get children(){return[Un(Wt,{children:"Sign in to Free Code"}),Zt(()=>Zt(()=>!!n.compact)()?(()=>{var i=xn("text");return kr(i,Yr("Sign in securely in your browser.")),v(i,"wrapMode","word"),Vn((f)=>v(i,"fg",r.muted,f)),i})():(()=>{var i=xn("text");return kr(i,Yr("We\u2019ll open a secure browser sign-in. GitHub is recommended, and Google works too.")),v(i,"wrapMode","word"),Vn((f)=>v(i,"fg",r.muted,f)),i})()),(()=>{var i=xn("box");return v(i,"style",{height:1}),i})(),Un(Hi,{label:"Folder",get value(){return n.projectPath}})]}}),Un(Gt,{get when(){return t()},children:(i)=>[Un(Wt,{get children(){return i().kind==="waiting"?"Waiting for your browser":"Sign in to Free Code"}}),(()=>{var f=xn("text");return gr(f,()=>i().kind==="waiting"?"Finish approval in your browser.":"Open this address and enter the one-time code."),Vn((u)=>v(f,"fg",r.muted,u)),f})(),(()=>{var f=xn("box");return v(f,"style",{height:1}),f})(),(()=>{var f=xn("text");return gr(f,()=>i().userCode),Vn((u)=>{var d=r.green,l=Do.BOLD;return d!==u.e&&(u.e=v(f,"fg",d,u.e)),l!==u.t&&(u.t=v(f,"attributes",l,u.t)),u},{e:void 0,t:void 0}),f})(),(()=>{var f=xn("text");return v(f,"wrapMode","word"),gr(f,()=>i().verificationUri),Vn((u)=>v(f,"fg",r.blue,u)),f})(),Zt(()=>Zt(()=>!n.compact)()?(()=>{var f=xn("text");return kr(f,Yr("The terminal receives only a revocable Free Code session, never your provider credentials.")),v(f,"wrapMode","word"),Vn((u)=>v(f,"fg",r.muted,u)),f})():null)]}),Un(Gt,{get when(){return n.state.kind==="denied"},get children(){return[Un(Wt,{children:"Connection declined"}),(()=>{var i=xn("text");return kr(i,Yr("This computer was not authorized.")),v(i,"wrapMode","word"),Vn((f)=>v(i,"fg",r.foreground,f)),i})(),(()=>{var i=xn("text");return kr(i,Yr("Try again if that was accidental. Your project was not changed.")),v(i,"wrapMode","word"),Vn((f)=>v(i,"fg",r.muted,f)),i})()]}}),Un(Gt,{get when(){return e()},children:(i)=>[Un(Wt,{children:"Sign-in paused"}),(()=>{var f=xn("text");return v(f,"wrapMode","word"),gr(f,()=>qg(i().code)),Vn((u)=>v(f,"fg",r.foreground,u)),f})(),(()=>{var f=xn("text"),u=Yr("Your project is untouched. ");return kr(f,u),v(f,"wrapMode","word"),gr(f,()=>i().recoverable?"Check your connection and try again.":"Ask Andrew for help before retrying.",null),Vn((d)=>v(f,"fg",r.muted,d)),f})()]}),Un(Gt,{get when(){return o()},children:(i)=>[Un(Wt,{children:"Starting Free Code\u2026"}),(()=>{var f=xn("text");return gr(f,()=>pg(i().user)),Vn((u)=>{var d=r.foreground,l=Do.BOLD;return d!==u.e&&(u.e=v(f,"fg",d,u.e)),l!==u.t&&(u.t=v(f,"attributes",l,u.t)),u},{e:void 0,t:void 0}),f})(),Un(Hi,{label:"Project",get value(){return n.projectPath}}),Un(Hi,{label:"Mode",get value(){return i().user.tier==="ultra"?"Super":"Free"}})]})]}})}function Wt(n){let r=Y();return(()=>{var t=xn("text");return gr(t,()=>n.children),Vn((e)=>{var o=r.foreground,i=Do.BOLD;return o!==e.e&&(e.e=v(t,"fg",o,e.e)),i!==e.t&&(e.t=v(t,"attributes",i,e.t)),e},{e:void 0,t:void 0}),t})()}function Hi(n){let r=Y();return(()=>{var t=xn("text"),e=xn("span"),o=Yr(" \xB7 ");return kr(t,e),kr(t,o),v(t,"wrapMode","word"),gr(e,()=>n.label),gr(t,()=>n.value,null),Vn((i)=>{var f=r.muted,u={fg:r.blue};return f!==i.e&&(i.e=v(t,"fg",f,i.e)),u!==i.t&&(i.t=v(e,"style",u,i.t)),i},{e:void 0,t:void 0}),t})()}function _g(n,r){if(n.kind==="welcome"&&r.onSignIn)return{label:"Sign in to Free Code \u21B5",run:r.onSignIn};if((n.kind==="denied"||n.kind==="error")&&r.onRetry)return{label:"Try sign-in again \u21B5",run:r.onRetry};return}function Ig(n,r){if(n.kind==="denied"||n.kind==="error")return r.red;if(n.kind==="authenticated")return r.green;return r.blue}function qg(n){if(n==="device_code_expired")return"The one-time connection code expired.";if(n==="rate_limited")return"Too many sign-in attempts were made.";if(n==="github_auth_unavailable")return"The sign-in provider is temporarily unavailable.";if(n==="auth_network_unavailable")return"Free Code could not reach the sign-in service.";return"Free Code could not finish signing in."}function pg(n){if(n.github?.login)return`@${n.github.login}`;return n.name||n.email||"Free Code user"}import{createComponent as _i}from"@opentui/solid";import{effect as Qr}from"@opentui/solid";import{insert as wr}from"@opentui/solid";import{createTextNode as we}from"@opentui/solid";import{insertNode as ar}from"@opentui/solid";import{memo as Vu}from"@opentui/solid";import{setProp as V}from"@opentui/solid";import{createElement as Gn}from"@opentui/solid";import{createEffect as Gu,createMemo as ft,createSignal as Wu,Index as nw,Show as Zu}from"solid-js";import{createTwoFilesPatch as rw}from"diff";async function S(n){return Ki(await n)}function Pu(n){if(n&&typeof n==="object"&&"client"in n)return n;return{client:n}}function Ki(n){let r=n;while(r&&typeof r==="object"&&"data"in r)r=r.data;return r}function me(n){if(Array.isArray(n))return n.length;if(n&&typeof n==="object")return Object.keys(n).length;return 0}function Uu(n){if(!n)return"recently";let r=Math.max(0,Math.round((Date.now()-n)/1000));if(r<60)return"just now";let t=Math.round(r/60);if(t<60)return`${t}m ago`;let e=Math.round(t/60);if(e<48)return`${e}h ago`;return`${Math.round(e/24)}d ago`}function Si(){let n=process.env.FREECODE_MODEL||process.env.OPENCODE_MODEL;if(!n)return;let r=n.indexOf("/");return r>0?{providerID:n.slice(0,r),id:n.slice(r+1)}:void 0}function ge(n){return{providerID:n.providerID,id:n.modelID}}async function Tu(n,r,t,e){if(t.protocol==="v2")return n.v2.session.permission.reply({sessionID:r,requestID:t.id,reply:e});return n.permission.reply({requestID:t.id,reply:e})}async function zu(n,r,t,e){if(t.protocol==="v2")return n.v2.session.question.reply({sessionID:r,requestID:t.id,questionV2Reply:{answers:e}});return n.question.reply({requestID:t.id,answers:e})}async function Ju(n,r,t){if(t.protocol==="v2")return n.v2.session.question.reject({sessionID:r,requestID:t.id});return n.question.reject({requestID:t.id})}function vu(n){let r=Y(),t=!1,[e,o]=Wu("choose");Gu(()=>{n.request.id,o("choose")});let i=[{name:"Allow once",description:"Approve this request only",value:"once"},{name:"Always allow",description:"Review before saving this permission",value:"__confirm_always__"},{name:"Reject",description:"Do not run this action",value:"reject"}],f=[{name:"Go back",description:"Review the choices again",value:"__back__"},{name:"Confirm always allow",description:"Persist this permission for future matching requests",value:"always"}],u=ft(()=>n.request.resources?.length?n.request.resources:["No affected resource was supplied"]),d=ft(()=>n.request.save?.length?n.request.save:u()),l=async(m)=>{if(!n.sessionID||n.busy||t)return;t=!0,n.setBusy(!0);try{await Tu(n.client,n.sessionID,n.request,m)}catch(w){n.onError(w)}finally{t=!1,n.setBusy(!1)}};return(()=>{var m=Gn("box"),w=Gn("text"),b=we("Request \xB7 "),O=Gn("text"),k=we(" \xB7 ");return ar(m,w),ar(m,O),V(m,"titleAlignment","center"),wr(m,(()=>{var s=Vu(()=>!!n.request.originLabel);return()=>s()&&(()=>{var g=Gn("text"),c=we("Subagent \xB7 ");return ar(g,c),wr(g,()=>n.request.originLabel,null),Qr((h)=>V(g,"fg",r.yellow,h)),g})()})(),w),ar(w,b),V(w,"wrapMode","word"),wr(w,()=>u().join(" \xB7 "),null),ar(O,k),V(O,"wrapMode","word"),wr(O,()=>e()==="confirm-always"?"Confirm saved permission":"Always allow would save",k),wr(O,()=>d().join(" \xB7 "),null),wr(m,_i(Zu,{get when(){return e()==="choose"},get fallback(){return(()=>{var s=Gn("select");return V(s,"style",{flexGrow:1,width:"100%"}),V(s,"options",f),V(s,"showDescription",!0),V(s,"showScrollIndicator",!0),V(s,"onSelect",async(g,c)=>{if(!n.sessionID||!c||n.busy||t)return;if(c.value==="__back__")return o("choose");await l("always")}),Qr((g)=>V(s,"focused",!n.busy,g)),s})()},get children(){var s=Gn("select");return V(s,"style",{flexGrow:1,width:"100%"}),V(s,"options",i),V(s,"showDescription",!0),V(s,"showScrollIndicator",!0),V(s,"onSelect",async(g,c)=>{if(!n.sessionID||!c||n.busy||t)return;if(c.value==="__confirm_always__")return o("confirm-always");await l(c.value)}),Qr((g)=>V(s,"focused",!n.busy,g)),s}}),null),Qr((s)=>{var g=`Permission \xB7 ${n.request.action||"action requested"}`,c={height:Math.min(16,10+Math.min(3,u().length)),flexShrink:0,flexDirection:"column",border:!0,borderColor:r.yellow,customBorderChars:vn,backgroundColor:r.panel,paddingLeft:1,paddingRight:1},h=r.foreground,R=e()==="confirm-always"?r.yellow:r.muted;return g!==s.e&&(s.e=V(m,"title",g,s.e)),c!==s.t&&(s.t=V(m,"style",c,s.t)),h!==s.a&&(s.a=V(w,"fg",h,s.a)),R!==s.o&&(s.o=V(O,"fg",R,s.o)),s},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()}function Xu(n){let r=Y(),t=!1,[e,o]=Wu(new Set),i=ft(()=>n.request.questions?.[n.index]||n.request.questions?.[0]);Gu(()=>{n.index,n.request.id,o(new Set)});let f=ft(()=>{let u=i();if(!u)return[];return[...(u.options||[]).map((d)=>({name:u.multiple?`${e().has(d.label)?"\u2611":"\u2610"} ${d.label}`:d.label,description:d.description||" ",value:d.label})),...u.multiple?[{name:"Submit choices",description:e().size?`${e().size} selected`:"Select at least one option first",value:"__submit__"}]:[],...u.custom!==!1?[{name:"Custom answer\u2026",description:"Type a response",value:"__custom__"}]:[],{name:"Reject question",description:"Continue without an answer",value:"__reject__"}]});return _i(Zu,{get when(){return i()},children:(u)=>(()=>{var d=Gn("box"),l=Gn("text"),m=Gn("select");return ar(d,l),ar(d,m),V(d,"titleAlignment","center"),wr(d,(()=>{var w=Vu(()=>!!n.request.originLabel);return()=>w()&&(()=>{var b=Gn("text"),O=we("Subagent \xB7 ");return ar(b,O),wr(b,()=>n.request.originLabel,null),Qr((k)=>V(b,"fg",r.yellow,k)),b})()})(),l),V(l,"wrapMode","word"),wr(l,()=>u().question),V(m,"style",{flexGrow:1,width:"100%"}),V(m,"showDescription",!0),V(m,"showScrollIndicator",!0),V(m,"onSelect",async(w,b)=>{if(!n.sessionID||!b||n.busy||t)return;if(b.value==="__custom__")return n.onCustom();if(u().multiple&&b.value!=="__submit__"&&b.value!=="__reject__"){o((O)=>{let k=new Set(O),s=String(b.value);if(k.has(s))k.delete(s);else k.add(s);return k});return}if(b.value==="__submit__"&&e().size===0)return;t=!0,n.setBusy(!0);try{if(b.value==="__reject__")await Ju(n.client,n.sessionID,n.request);else await n.onAnswer(u().multiple?[...e()]:[String(b.value)])}catch(O){n.onError(O)}finally{t=!1,n.setBusy(!1)}}),Qr((w)=>{var b=`${n.index+1}/${n.request.questions.length} \xB7 ${u().header||u().question||"Question"}`,O={height:Math.min(18,Math.max(10,f().length*2+3)),flexShrink:0,flexDirection:"column",border:!0,borderColor:r.yellow,customBorderChars:vn,backgroundColor:r.panel,paddingLeft:1,paddingRight:1},k=r.foreground,s=f(),g=!n.busy;return b!==w.e&&(w.e=V(d,"title",b,w.e)),O!==w.t&&(w.t=V(d,"style",O,w.t)),k!==w.a&&(w.a=V(l,"fg",k,w.a)),s!==w.o&&(w.o=V(m,"options",s,w.o)),g!==w.i&&(w.i=V(m,"focused",g,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),d})()})}function Yu(n){let r=Y(),t=ft(()=>n.modal.files[n.modal.selected]||{}),e=ft(()=>t().file||t().path||`file ${n.modal.selected+1}`),o=ft(()=>rw(e(),e(),t().before||"",t().after||"","before","after",{context:4})),i=ft(()=>String(e()).split(".").pop());return(()=>{var f=Gn("box"),u=Gn("diff");return ar(f,u),V(f,"titleAlignment","center"),V(u,"style",{flexGrow:1,width:"100%"}),V(u,"showLineNumbers",!0),V(u,"wrapMode","word"),Qr((d)=>{var l=`${e()} \xB7 ${n.modal.selected+1}/${n.modal.files.length}`,m={height:"70%",flexShrink:0,border:!0,borderColor:r.blue,customBorderChars:vn,backgroundColor:r.panel,paddingLeft:1,paddingRight:1},w=o(),b=n.wide?"split":"unified",O=i();return l!==d.e&&(d.e=V(f,"title",l,d.e)),m!==d.t&&(d.t=V(f,"style",m,d.t)),w!==d.a&&(d.a=V(u,"diff",w,d.a)),b!==d.o&&(d.o=V(u,"view",b,d.o)),O!==d.i&&(d.i=V(u,"filetype",O,d.i)),d},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),f})()}function Qu(n){let r=Y();return(()=>{var t=Gn("box"),e=Gn("scrollbox");return ar(t,e),V(t,"titleAlignment","center"),V(e,"style",{flexGrow:1,width:"100%"}),wr(e,_i(nw,{get each(){return n.modal.items},children:(o,i)=>(()=>{var f=Gn("box"),u=Gn("text"),d=we(" \xB7 "),l=Gn("text");return ar(f,u),ar(f,l),V(f,"style",{flexDirection:"column",marginBottom:1}),ar(u,d),wr(u,i+1,d),wr(u,()=>o().type.toUpperCase(),null),V(l,"wrapMode","word"),wr(l,()=>o().text),Qr((m)=>{var w=o().type==="user"?r.blue:o().type==="tool"?r.yellow:r.green,b=r.foreground;return w!==m.e&&(m.e=V(u,"fg",w,m.e)),b!==m.t&&(m.t=V(l,"fg",b,m.t)),m},{e:void 0,t:void 0}),f})()})),Qr((o)=>{var i=n.modal.title,f={height:"70%",flexShrink:0,flexDirection:"column",border:!0,borderColor:r.blue,customBorderChars:vn,backgroundColor:r.panel,paddingLeft:1,paddingRight:1};return i!==o.e&&(o.e=V(t,"title",i,o.e)),f!==o.t&&(o.t=V(t,"style",f,o.t)),o},{e:void 0,t:void 0}),t})()}var tw=new Set(["/sidebar","/agents","/details","/fork","/children","/timeline","/editor","/clear-screen","/help"]);function ae(n=[],r={}){return{kind:"commands",title:"Command palette",options:Ii(n,r).map(({value:t,description:e})=>({name:t,description:e,value:t}))}}function Ii(n=[],{modes:r=!1,extensionCommands:t=[]}={}){let e=Hu(r).filter((i)=>!tw.has(i.value)),o=n.map((i)=>({value:`/${i.name}`,description:i.description||"Project command"}));return[...e.slice(0,3),...t,...e.slice(3),...o]}function qi(n=[],{modes:r=!1}={}){return new Set([...Hu(r).map((t)=>t.value),...n.map((t)=>`/${t.name}`)])}function $u(n,r,t){let e=n.trim(),o=e.split(/\s+/,1)[0];return Boolean(r&&!t.has(o)&&r.value!==e)}function Hu(n){return[["/new","Create a clean session"],["/sessions","Resume or search sessions"],["/extensions","Browse and manage optional extensions"],...n?[["/mode","Switch between Free and Super"]]:[],["/diff","Review changed files"],["/todos","Show task progress"],["/sidebar","Show or hide workspace details"],["/agents","Choose an agent"],["/compact","Compact context"],["/details","Show or hide tool details"],["/themes","Choose a color theme"],["/undo","Undo the last user turn and file changes"],["/redo","Restore the reverted turn"],["/rename","Rename this session"],["/fork","Fork this session"],["/children","Show child sessions"],["/timeline","Show the session timeline"],["/delete","Delete this session"],["/editor","Compose in your external editor"],["/copy","Copy this conversation"],["/interrupt","Stop the active turn"],["/clear-screen","Clear only the local display"],["/clear-error","Dismiss the current error"],["/help","Open the command palette"],["/exit","Exit Freecode"]].map(([r,t])=>({value:r,description:t}))}import{existsSync as vt,readFileSync as ew}from"fs";import{dirname as he,isAbsolute as ow,relative as nf,resolve as rr,sep as iw}from"path";var fw=["typecheck","test","lint","check"],pi=/^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/i,dw=new Map([["next","Next.js"],["react","React"],["vue","Vue"],["svelte","Svelte"],["@sveltejs/kit","SvelteKit"],["astro","Astro"],["express","Express"],["fastify","Fastify"],["hono","Hono"],["@nestjs/core","NestJS"],["drizzle-orm","Drizzle"],["prisma","Prisma"]]),uw=new Map([["@neondatabase/serverless","Neon"],["@supabase/supabase-js","Supabase"],["@planetscale/database","PlanetScale"],["@vercel/postgres","Vercel Postgres"],["stripe","Stripe"],["resend","Resend"],["@sendgrid/mail","SendGrid"],["@clerk/nextjs","Clerk"],["@auth0/nextjs-auth0","Auth0"],["@sentry/node","Sentry"],["@sentry/nextjs","Sentry"],["posthog-js","PostHog"],["@upstash/redis","Upstash"]]),cw=new Map([["ts","TypeScript"],["tsx","TypeScript"],["js","JavaScript"],["jsx","JavaScript"],["mjs","JavaScript"],["cjs","JavaScript"],["py","Python"],["go","Go"],["rs","Rust"],["swift","Swift"],["kt","Kotlin"],["java","Java"],["rb","Ruby"],["php","PHP"]]);function Ku(n,r=[]){let t=rr(n),e=rf(rr(t,"package.json")),o=qu(e?.packageManager),i=new Map;for(let u of r){let d=typeof u==="string"?u:u?.file||u?.path;if(typeof d!=="string"||!d.trim())continue;let l=Iu(t,rr(t,d));if(l)i.set(l.path,l)}let f=[];for(let u of i.values()){let d=pi.test(u.value.name||"")?u.value.name:nf(t,he(u.path))||"project";for(let l of fw){if(typeof u.value.scripts?.[l]!=="string")continue;let m=mw({manager:o,root:t,manifest:u,area:d,script:l});if(m)f.push({area:d,script:l,command:m})}}return f.slice(0,4)}function Su(n,r=[]){let t=rr(n),e=rf(rr(t,"package.json")),o=new Map;if(e)o.set(rr(t,"package.json"),{path:rr(t,"package.json"),value:e});for(let s of r){let g=typeof s==="string"?s:s?.file||s?.path;if(typeof g!=="string"||!g.trim())continue;let c=Iu(t,rr(t,g));if(c)o.set(c.path,c)}let i=[...new Set([...o.values()].flatMap(({value:s})=>[...Object.keys(s.dependencies||{}),...Object.keys(s.devDependencies||{}),...Object.keys(s.peerDependencies||{})]))].sort().slice(0,80),f=[...new Set(r.map((s)=>{let g=typeof s==="string"?s:s?.file||s?.path;return typeof g==="string"?g.split(".").pop()?.toLowerCase():void 0}).filter(Boolean))],u=[...new Set(f.map((s)=>cw.get(s)).filter(Boolean))];if(!u.length&&i.some((s)=>/typescript|@types\//.test(s)))u.push("TypeScript");if(!u.length&&e)u.push("JavaScript");let d=i.map((s)=>dw.get(s)).filter(Boolean),l=i.map((s)=>uw.get(s)).filter(Boolean),m=qu(e?.packageManager),b=[...e?.workspaces||e?.pnpm?.packages?["monorepo"]:[],...i.includes("drizzle-orm")||i.includes("prisma")?["database-backed"]:[],...i.includes("react")||i.includes("vue")||i.includes("svelte")?["interactive-ui"]:[]],O=vt(rr(t,"bun.lock"))||vt(rr(t,"bun.lockb"))?"Bun":vt(rr(t,"deno.json"))||vt(rr(t,"deno.jsonc"))?"Deno":e?"Node.js":void 0,k=d.includes("Next.js")||d.includes("SvelteKit")||d.includes("Astro")?"web application":d.some((s)=>["Express","Fastify","Hono","NestJS"].includes(s))?"API service":e?"software project":void 0;return{languages:u.slice(0,12),frameworks:[...new Set(d)].slice(0,20),dependencies:i,packageManager:m,runtime:O,projectType:k,architecture:[...new Set(b)],existingServices:[...new Set(l)].slice(0,20)}}function _u(n){let r=rr(n);while(!0){if(vt(rr(r,".git")))return!0;let t=he(r);if(t===r)return!1;r=t}}function Iu(n,r){let t=he(r);while(lw(n,t)){let e=rr(t,"package.json"),o=rf(e);if(o)return{path:e,value:o};if(t===n)break;t=he(t)}return}function lw(n,r){let t=nf(n,r);return t===""||!t.startsWith("..")&&!ow(t)}function rf(n){if(!vt(n))return;try{let r=JSON.parse(ew(n,"utf8"));return r&&typeof r==="object"&&!Array.isArray(r)?r:void 0}catch{return}}function qu(n){let r=typeof n==="string"?n.split("@")[0]:"";return["pnpm","npm","yarn","bun"].includes(r)?r:"pnpm"}function mw({manager:n,root:r,manifest:t,area:e,script:o}){let i=he(t.path),f=i!==r,u=nf(r,i).split(iw).join("/");if(n==="pnpm"){if(f&&pi.test(e))return`pnpm --filter ${e} ${o}`;return`pnpm ${o}`}if(n==="npm")return f&&u&&!u.startsWith("..")?`npm --prefix ${u} run ${o}`:`npm run ${o}`;if(n==="yarn")return f&&pi.test(e)?`yarn workspace ${e} ${o}`:`yarn ${o}`;if(n==="bun")return f?`bun --cwd ${u} run ${o}`:`bun run ${o}`;return}function pu({nativeLaunchers:n={}}={}){let r={...n};return{async launchNative(t,e,o){let{extension:i,command:f}=t,u=i.commands.some((w)=>w.id===f.id),d=i.capabilities.some((w)=>w.id==="runtime.native"),l=i.nativeRuntimeProfiles.includes(e),m=r[e];if(!i.installed||!i.enabled||!i.available||!u||!d||!l||!m)throw Error(`Extension ${i.id} requested an undeclared or ungranted native runtime profile`);return await m(o)}}}import{spawn as gw}from"child_process";function ef(n=process.env){try{let r=JSON.parse(n.FREECODE_EXTENSION_SNAPSHOT||"[]");return Array.isArray(r)?r.filter(tf):[]}catch{return[]}}function t1(n=process.env){let r=ef(n);return{async list(t){if(!n.FREECODE_EXTENSION_MANAGER_BIN)return r;return r=await n1(n.FREECODE_EXTENSION_MANAGER_BIN,["list"],n,t),r},async apply(t,e,o){if(!n.FREECODE_EXTENSION_MANAGER_BIN)throw Error("Extension management is unavailable in this development launch.");let i=await n1(n.FREECODE_EXTENSION_MANAGER_BIN,[e,t],n,o);return r=r.some((f)=>f.id===i.id)?r.map((f)=>f.id===i.id?i:f):[...r,i],i}}}function n1(n,r,t,e){return new Promise((o,i)=>{if(e?.aborted)return i(r1());let f=gw(n,["extensions",...r,"--json"],{env:t,stdio:["ignore","pipe","pipe"]}),u="",d="",l=()=>f.kill("SIGTERM");e?.addEventListener("abort",l,{once:!0}),f.stdout?.on("data",(m)=>{if(u.length<256000)u+=m.toString()}),f.stderr?.on("data",(m)=>{if(d.length<8000)d+=m.toString()}),f.once("error",(m)=>{e?.removeEventListener("abort",l),i(m)}),f.once("exit",(m)=>{if(e?.removeEventListener("abort",l),e?.aborted)return i(r1());if(m!==0)return i(Error(hw(d)||`Extension manager exited with code ${m}`));try{let w=JSON.parse(u);if(Array.isArray(w)){if(!w.every(tf))throw Error("Extension manager returned an invalid catalog")}else if(!tf(w))throw Error("Extension manager returned an invalid extension state");o(w)}catch(w){i(w)}})})}function tf(n){let r=n;return Boolean(r&&r.schemaVersion===1&&typeof r.apiVersion==="string"&&typeof r.id==="string"&&r.id.startsWith("freecode.")&&typeof r.displayName==="string"&&typeof r.publisher==="string"&&typeof r.description==="string"&&typeof r.version==="string"&&typeof r.nativeCode==="boolean"&&Array.isArray(r.networkOrigins)&&r.networkOrigins.every((t)=>typeof t==="string")&&typeof r.downloadSize==="number"&&typeof r.installedSize==="number"&&typeof r.sizeExact==="boolean"&&Array.isArray(r.commands)&&r.commands.every(ww)&&Array.isArray(r.capabilities)&&r.capabilities.every(aw)&&Array.isArray(r.nativeRuntimeProfiles)&&r.nativeRuntimeProfiles.every((t)=>typeof t==="string")&&Array.isArray(r.licenses)&&r.licenses.every((t)=>typeof t==="string")&&typeof r.supported==="boolean"&&typeof r.installed==="boolean"&&typeof r.updateAvailable==="boolean"&&typeof r.enabled==="boolean"&&typeof r.available==="boolean")}function ww(n){let r=n;return Boolean(r&&typeof r.id==="string"&&typeof r.alias==="string"&&r.alias.startsWith("/")&&typeof r.title==="string")}function aw(n){let r=n;return Boolean(r&&typeof r.id==="string"&&typeof r.label==="string")}function r1(){let n=Error("Extension action cancelled");return n.name="AbortError",n}function hw(n){return n.trim().split(`
|
|
11
|
-
`).at(-1)||""}function of(n,r=[]){return i1(n,r).map(({command:t})=>({value:t.alias,description:t.title}))}function ff(n,r,t=[]){return i1(n,t).find((e)=>e.command.alias===r)}function e1(n){return{kind:"extensions",title:"Extensions",options:n.map((r)=>({name:`${r.available?"\u25CF":r.installed?"\u25CB":"\uFF0B"} ${r.displayName}`,description:`${r.description} \xB7 ${sw(r)} \xB7 ${se(r.installedBytes||r.installedSize)}`,value:r.id}))}}function df(n){let r=n.installed?[...n.enabled?n.commands.map((t)=>({name:t.alias,description:t.title,value:`run:${t.alias}`})):[],...n.updateAvailable?[{name:"Update",description:`Install ${n.version}; keep the previous version for recovery`,value:`install:${n.id}`}]:[],{name:n.enabled?"Disable":"Enable",description:n.enabled?"Keep files but remove its commands":"Restore its commands",value:`${n.enabled?"disable":"enable"}:${n.id}`},{name:"Uninstall",description:`Remove ${se(n.installedBytes||n.installedSize)} of extension files`,value:`uninstall:${n.id}`}]:[{name:"Install",description:n.supported?`${n.sizeExact?"Download":"About"} ${se(n.downloadSize)} \xB7 uses ${n.sizeExact?"":"about "}${se(n.installedSize)} installed`:"Not available on this platform",value:`${n.supported?"install":"unavailable"}:${n.id}`}];return{kind:"extension-actions",title:n.displayName,message:[`${n.description} \xB7 by ${n.publisher}`,`Native code: ${n.nativeCode?"Yes":"No"} \xB7 Network access: ${n.networkOrigins.length?n.networkOrigins.join(", "):"None"}`,`Capabilities: ${n.capabilities.map((t)=>t.label).join(", ")}`,`Licenses: ${n.licenses.join(" + ")}`].join(`
|
|
12
|
-
`),options:r}}function o1(n,r){return n.map((t)=>t.id===r.id?r:t)}function sw(n){if(!n.supported)return"Unavailable";if(n.updateAvailable)return`Update available \xB7 ${n.installedVersion||"older version"} installed`;if(n.available)return"Enabled";if(n.installed)return"Disabled";return`Not installed \xB7 ${se(n.downloadSize)} download`}function i1(n,r){let t=new Set(r),e=n.filter((i)=>i.available).flatMap((i)=>i.commands.map((f)=>({extension:i,command:f}))),o=new Map;for(let{command:i}of e)o.set(i.alias,(o.get(i.alias)||0)+1);return e.filter(({command:i})=>!t.has(i.alias)&&o.get(i.alias)===1)}function se(n){if(!Number.isFinite(n)||n<=0)return"0 B";let r=["B","KiB","MiB","GiB"],t=Math.min(Math.floor(Math.log(n)/Math.log(1024)),r.length-1),e=n/1024**t;return`${e>=10||t===0?e.toFixed(0):e.toFixed(1)} ${r[t]}`}import{memo as Gy}from"@opentui/solid";import{createComponent as wf}from"@opentui/solid";import{effect as bw}from"@opentui/solid";import{createTextNode as $r}from"@opentui/solid";import{insertNode as hn}from"@opentui/solid";import{setProp as ir}from"@opentui/solid";import{createElement as Yn}from"@opentui/solid";function f1(){let n=Y();return(()=>{var r=Yn("box"),t=Yn("text"),e=Yn("text"),o=Yn("b"),i=Yn("text"),f=Yn("box"),u=Yn("text"),d=Yn("b"),l=Yn("text"),m=Yn("box"),w=Yn("text"),b=Yn("text"),O=Yn("box"),k=Yn("text"),s=Yn("box"),g=Yn("text");return hn(r,t),hn(r,e),hn(r,i),hn(r,f),hn(r,u),hn(r,l),hn(r,m),hn(r,w),hn(r,b),hn(r,O),hn(r,k),hn(r,s),hn(r,g),ir(r,"style",{width:"100%",height:"100%",flexDirection:"column",justifyContent:"center",alignItems:"center",backgroundColor:"#090605",paddingLeft:2,paddingRight:2}),hn(t,$r("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),ir(t,"fg","#f77654"),hn(e,o),ir(e,"fg","#ff9e64"),hn(o,$r(" FREEDOOM ")),hn(i,$r("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),ir(i,"fg","#f77654"),ir(f,"style",{height:1}),hn(u,d),hn(d,$r("PREPARING COMBAT RUNTIME")),hn(l,$r("Starting the installed Doom extension")),ir(m,"style",{height:1}),hn(w,$r("W/S move \xB7 A/D strafe \xB7 \u2190/\u2192 or J/L turn")),hn(b,$r("F fire \xB7 Space use \xB7 Esc menu")),ir(O,"style",{height:1}),hn(k,$r("Ctrl+C returns to your coding session")),ir(k,"fg","#e0af68"),ir(s,"style",{height:1}),hn(g,$r("Open-source terminal-doom + Freedoom \xB7 rendered inside Free Code")),bw((c)=>{var{foreground:h,muted:R,muted:M,muted:L,muted:E}=n;return h!==c.e&&(c.e=ir(u,"fg",h,c.e)),R!==c.t&&(c.t=ir(l,"fg",R,c.t)),M!==c.a&&(c.a=ir(w,"fg",M,c.a)),L!==c.o&&(c.o=ir(b,"fg",L,c.o)),E!==c.i&&(c.i=ir(g,"fg",E,c.i)),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),r})()}import{effect as Ww}from"@opentui/solid";import{use as Zw}from"@opentui/solid";import{createTextNode as Fo}from"@opentui/solid";import{insertNode as xr}from"@opentui/solid";import{setProp as Qn}from"@opentui/solid";import{createElement as Hr}from"@opentui/solid";import{FrameBufferRenderable as vw,MouseButton as Me}from"@opentui/core";import{extend as Xw,useRenderer as Yw,useTerminalDimensions as Qw}from"@opentui/solid";import{ptr as $w}from"bun:ffi";import{createEffect as Hw,onCleanup as Kw}from"solid-js";import{spawn as xw}from"child_process";import{EventEmitter as Mw}from"events";import{existsSync as Bo,lstatSync as Ow,mkdirSync as Ew,readlinkSync as kw,rmSync as Rw,symlinkSync as Lw}from"fs";import{homedir as Nw}from"os";import{join as Ot,resolve as be}from"path";var uf=Buffer.from("FCDS");class cf{pending=Buffer.alloc(0);accept(n){if(n.length)this.pending=this.pending.length?Buffer.concat([this.pending,Buffer.from(n)]):Buffer.from(n);let r=[];while(this.pending.length>=uf.length){let t=this.pending.indexOf(uf);if(t<0){this.pending=this.pending.subarray(Math.max(0,this.pending.length-(uf.length-1)));break}if(t>0)this.pending=this.pending.subarray(t);if(this.pending.length<8)break;let e=this.pending.readUInt16LE(6);if(e<12||e>512){this.pending=this.pending.subarray(1);continue}if(this.pending.length<e)break;let o=this.pending.subarray(0,e);if(this.pending=this.pending.subarray(e),o[4]!==1||e<72)continue;r.push(yw(o))}return r}}function yw(n){let r=n[5];return{sequence:n.readUInt32LE(8),playerValid:Boolean(r&1),inLevel:Boolean(r&2),paused:Boolean(r&4),menuActive:Boolean(r&8),automapActive:Boolean(r&16),dead:Boolean(r&32),episode:n[12],map:n[13],skill:n[14],playerState:n[15],health:n.readInt16LE(16),armor:n.readInt16LE(18),readyWeapon:n[20],keys:n[21],weapons:n.readUInt16LE(22),ammo:d1(n,24),maxAmmo:d1(n,32),kills:n.readUInt16LE(40),totalKills:n.readUInt16LE(42),items:n.readUInt16LE(44),totalItems:n.readUInt16LE(46),secrets:n.readUInt16LE(48),totalSecrets:n.readUInt16LE(50),levelTicks:n.readUInt32LE(52),position:{x:n.readInt32LE(56),y:n.readInt32LE(60),angle:n.readUInt32LE(64)},damageCount:n.readUInt16LE(68),bonusCount:n.readUInt16LE(70)}}function d1(n,r){return[n.readUInt16LE(r),n.readUInt16LE(r+2),n.readUInt16LE(r+4),n.readUInt16LE(r+6)]}var m1=640,g1=400,lf=m1*g1*4,u1=252,c1=8;class Et extends Error{constructor(n){super(n);this.name="DoomRuntimeError"}}class kt extends Error{constructor(){super("Doom launch cancelled.");this.name="DoomLaunchCancelledError"}}class w1 extends Mw{done;child;frame=Buffer.allocUnsafe(lf);stateDecoder=new cf;frameOffset=0;stopping=!1;stderr="";constructor(n,r){super();Cw(n),this.child=xw(n.streamBinary,["-iwad",n.wad,"-warp","1","1","-skill","3"],{cwd:n.dataDirectory,env:Aw(r),stdio:["pipe","ignore","pipe","pipe","pipe"]});let t=this.child.stdio[3],e=this.child.stdio[4];if(!this.child.stdin||!t||!e)throw new Et("Doom could not open its input, framebuffer, or state pipe.");t.on("data",(o)=>this.acceptFrames(o)),e.on("data",(o)=>{for(let i of this.stateDecoder.accept(o))this.emit("state",i)}),this.child.stderr?.on("data",(o)=>{if(this.stderr.length<8000)this.stderr+=o.toString()}),this.done=new Promise((o,i)=>{this.child.once("error",i),this.child.once("exit",(f,u)=>{let d={code:f??1,signal:u||void 0};if(d.code!==0&&!this.stopping)i(new Et(`Doom exited with code ${d.code}${d.signal?` (${d.signal})`:""}.${this.stderr?` ${Fw(this.stderr)}`:""}`));else o(d);this.removeAllListeners()})})}onFrame(n){return this.on("frame",n),()=>this.off("frame",n)}onState(n){return this.on("state",n),()=>this.off("state",n)}sendKey(n,r){this.writePacket(r?1:0,n)}sendMouse(n,r=0,t=0){if(this.stopping||!this.child.stdin?.writable)return;let e=Buffer.alloc(c1);e[0]=u1,e[1]=3,e[2]=n&255,e.writeInt16LE(l1(r),3),e.writeInt16LE(l1(t),5),this.child.stdin.write(e)}stop(){if(this.stopping)return;this.stopping=!0,this.writePacket(2,0,!0),setTimeout(()=>{if(this.child.exitCode===null&&this.child.signalCode===null)this.child.kill("SIGTERM")},1000).unref()}acceptFrames(n){let r=0;while(r<n.length){let t=Math.min(lf-this.frameOffset,n.length-r);if(n.copy(this.frame,this.frameOffset,r,r+t),this.frameOffset+=t,r+=t,this.frameOffset===lf)this.emit("frame",this.frame),this.frameOffset=0}}writePacket(n,r=0,t=!1){if(!t&&this.stopping||!this.child.stdin?.writable)return;let e=Buffer.alloc(c1);e[0]=u1,e[1]=n&255,e[2]=r&255,this.child.stdin.write(e)}}function Dw(n=process.env){let r=be(n.FREECODE_DOOM_RUNTIME_DIR||Ot(process.cwd(),"packages/cli/doom")),t=be(n.FREECODE_DOOM_STREAM_BINARY||Ot(r,"freecode-doom-stream")),e=be(n.FREECODE_DOOM_WAD||Ot(r,"freedoom1.wad")),o=be(n.FREECODE_DOOM_DATA_DIR||Ot(n.XDG_CONFIG_HOME||Ot(n.HOME||Nw(),".config"),"freecode","doom"));return{directory:r,streamBinary:t,wad:e,dataDirectory:o}}function Bw(n,r=process.env){a1(n);let t=Dw(r);if(!Bo(t.streamBinary)||!Bo(t.wad))throw new Et(r.FREECODE_NATIVE_BUILD==="true"?"The Doom extension runtime is not installed.":"The Doom runtime is not prepared. Run `pnpm doom:prepare`, then launch Free Code again.");return t}function a1(n){if(n.mode==="multiplayer")throw new Et("Multiplayer Doom is not enabled yet. The launcher boundary is ready for a hosted room adapter.");if(process.platform!=="darwin")throw new Et("Doom currently ships in the native macOS build. Windows and Linux runtime packages are next.");if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Et("Doom needs an interactive terminal.")}async function h1(n={mode:"singleplayer"},r=process.env){if(a1(n),n.signal?.aborted)throw new kt;return new w1(Bw(n,r),r)}function Aw(n=process.env){let r={};for(let t of["HOME","TMPDIR","XDG_CONFIG_HOME","TERM","COLORTERM","LANG","LC_ALL"])if(n[t])r[t]=n[t];return r}function Cw(n){Ew(n.dataDirectory,{recursive:!0});let r=Ot(n.directory,"sound"),t=Ot(n.dataDirectory,"sound"),e=Ow(t,{throwIfNoEntry:!1});if(!Bo(r))return;if(e?.isSymbolicLink()){let o=be(n.dataDirectory,kw(t));if(o===r&&Bo(o))return;Rw(t)}else if(e)return;Lw(r,t,"dir")}function l1(n){return Math.max(-32768,Math.min(32767,Math.round(n)))}function Fw(n){return n.trim().split(`
|
|
13
|
-
`).at(-1)||""}var ye={width:m1,height:g1},Ln=Object.freeze({right:174,left:172,up:173,down:175,strafeLeft:160,strafeRight:161,use:162,fire:163,escape:27,enter:13,tab:9});import{spawnSync as jw}from"child_process";import{deflateSync as Pw}from"zlib";var yr="\x1B",xe=320,Co=200,Ao=[16518401,16518402],Uw=1,mf=4096,Tw=41.666666666666664;class gf{enabled;writeOutput;rgb=Buffer.allocUnsafe(xe*Co*3);configuredTmux=!1;lastPlacement;lastDrawAt=0;activeImageId;nextImageIndex=0;constructor(n,r){this.enabled=n;this.writeOutput=r}draw(n,r){if(!this.enabled||r.columns<1||r.rows<1)return!1;let t=performance.now();if(this.enableTmuxPassthrough(),this.lastPlacement&&!Gw(this.lastPlacement,r))this.clear();if(this.lastPlacement=r,t-this.lastDrawAt<Tw)return!0;this.lastDrawAt=t,zw(n,this.rgb);let e=Ao[this.nextImageIndex];this.nextImageIndex=(this.nextImageIndex+1)%Ao.length;let o=`${yr}[${r.row};${r.column}H`+this.wrapForOutput(Jw(this.rgb,r,e)+(this.activeImageId===void 0?"":s1(this.activeImageId)));return this.write(o),this.activeImageId=e,!0}clear(){if(!this.enabled)return;this.write(this.wrapForOutput(Ao.map(s1).join(""))),this.lastPlacement=void 0,this.activeImageId=void 0,this.nextImageIndex=0}destroy(){this.clear()}enableTmuxPassthrough(){if(!process.env.TMUX||this.configuredTmux)return;this.configuredTmux=!0;let n=["set-option","-p"];if(process.env.TMUX_PANE)n.push("-t",process.env.TMUX_PANE);n.push("allow-passthrough","on"),jw("tmux",n,{stdio:"ignore"})}wrapForOutput(n){return Vw(n)}write(n){this.writeOutput?.(n)}}function b1(n,r=process.env){if(r.FREECODE_DOOM_GRAPHICS==="cells")return!1;if(r.FREECODE_DOOM_GRAPHICS==="kitty")return!0;if(r.TMUX)return!1;return Boolean(n?.kitty_graphics||n?.terminal.name.toLowerCase().includes("ghostty"))}function y1(n){let r=n.writeOut;if(typeof r!=="function")return;return(t)=>{r.call(n,t)}}function zw(n,r){let t=ye.width,e=ye.height;if(n.length<t*e*4)throw RangeError("Doom framebuffer is incomplete.");if(r.length<xe*Co*3)throw RangeError("Doom RGB target is too small.");for(let o=0;o<Co;o+=1){let i=o*2*t*4,f=o*xe*3;for(let u=0;u<xe;u+=1){let d=i+u*8,l=f+u*3;r[l]=n[d+2],r[l+1]=n[d+1],r[l+2]=n[d]}}}function Jw(n,r,t=Ao[0]){let e=Pw(n).toString("base64"),o="";for(let i=0;i<e.length;i+=mf){let f=e.slice(i,i+mf),u=i+mf<e.length?1:0,d=i===0?`a=T,f=24,t=d,o=z,s=${xe},v=${Co},i=${t},p=${Uw},q=2,c=${r.columns},r=${r.rows},C=1,m=${u}`:`m=${u}`;o+=`${yr}_G${d};${f}${yr}\\`}return o}function s1(n){return`${yr}_Ga=d,d=I,i=${n},q=2${yr}\\`}function Vw(n){if(!process.env.TMUX)return n;let r="";for(let t of n.split(`${yr}\\`)){if(!t)continue;let e=`${t}${yr}\\`;r+=`${yr}Ptmux;${e.replaceAll(yr,`${yr}${yr}`)}${yr}\\`}return r}function Gw(n,r){return n.column===r.column&&n.row===r.row&&n.columns===r.columns&&n.rows===r.rows}class x1 extends vw{scaled=new Uint8Array(0);scaledWidth=0;scaledHeight=0;constructor(n,r){let t=r;super(n,{...r,width:t.width??1,height:t.height??1})}doomBounds(){let n=Math.max(1,Math.min(this.width,Math.floor(this.height*3.2))),r=Math.max(1,Math.min(this.height,Math.floor(n/3.2)));return{x:Math.floor((this.width-n)/2),y:Math.floor((this.height-r)/2),width:n,height:r}}drawDoomFrame(n){if(!this.frameBuffer||this.width<1||this.height<1)return;let r=this.doomBounds(),t=r.width,e=r.height,o=t*2,i=e*2,f=o*i*4;if(this.scaled.length!==f)this.scaled=new Uint8Array(f),this.scaledWidth=o,this.scaledHeight=i;Sw(n,this.scaled,this.scaledWidth,this.scaledHeight),this.frameBuffer.clear(),this.frameBuffer.drawSuperSampleBuffer(r.x,r.y,$w(this.scaled),this.scaled.length,"rgba8unorm",this.scaledWidth*4),this.requestRender()}}Xw({"doom-frame":x1});function M1(n){let r=Y(),t=Yw(),e=Qw(),o,i=0,f,u=!1,d=()=>Math.max(1,e().width-(e().width>120?42:0)),l=()=>Math.max(1,e().height-2),m=y1(t),w=new gf(Boolean(m)&&b1(t.capabilities),m);Hw(()=>{let c,h,R=t.useThread,M=()=>{if(!c||!h)return;w.draw(c,h),h=void 0};if(w.enabled)t.useThread=!1,t.on("frame",M);let L=n.session.onFrame((E)=>{let N=o;if(!N)return;let A=N.doomBounds(),F={column:N.x+A.x+1,row:N.y+A.y+1,columns:A.width,rows:A.height};if(w.enabled){if(!c||c.length!==E.length)c=new Uint8Array(E.length);c.set(E),h=F,t.requestRender()}else N.drawDoomFrame(E)});Kw(()=>{if(L(),w.enabled)t.off("frame",M);if(f=void 0,u=!1,i)n.session.sendMouse(0);if(i=0,w.destroy(),w.enabled)t.useThread=R})});let b=(c)=>{if(c.preventDefault(),c.stopPropagation(),f={x:c.x,y:c.y},c.button===Me.LEFT)i|=1,n.session.sendMouse(i);else if(c.button===Me.RIGHT)u=!1},O=(c)=>{if(c.preventDefault(),c.stopPropagation(),c.button===Me.LEFT)i&=-2,n.session.sendMouse(i);else if(c.button===Me.RIGHT&&!u)n.session.sendKey(Ln.use,!0),n.session.sendKey(Ln.use,!1);f={x:c.x,y:c.y},u=!1},k=(c)=>{c.preventDefault(),c.stopPropagation();let h=f;if(f={x:c.x,y:c.y},!h)return;let R=c.x-h.x,M=c.y-h.y;if(R===0&&M===0)return;if(c.isDragging&&c.button===Me.RIGHT)u=!0;n.session.sendMouse(i,R*8,M*16)},s=(c)=>{f={x:c.x,y:c.y}},g=()=>{f=void 0};return(()=>{var c=Hr("box"),h=Hr("box"),R=Hr("text"),M=Hr("b"),L=Hr("text"),E=Hr("text"),N=Hr("doom-frame"),A=Hr("box"),F=Hr("text");return xr(c,h),xr(c,N),xr(c,A),Qn(c,"style",{width:"100%",height:"100%",flexDirection:"column",backgroundColor:"#050505"}),xr(h,R),xr(h,L),xr(h,E),Qn(h,"style",{height:1,flexShrink:0,flexDirection:"row",justifyContent:"space-between",paddingLeft:1,paddingRight:1,backgroundColor:"#18110d"}),xr(R,M),Qn(R,"fg","#ff9e64"),xr(M,Fo("FREEDOOM \xB7 E1M1")),xr(L,Fo("Mouse look \xB7 no capture")),xr(E,Fo("Ctrl+C return")),Zw((U)=>{o=U},N),Qn(N,"onMouseDown",b),Qn(N,"onMouseUp",O),Qn(N,"onMouseMove",k),Qn(N,"onMouseDrag",k),Qn(N,"onMouseOver",s),Qn(N,"onMouseOut",g),xr(A,F),Qn(A,"style",{height:1,flexShrink:0,paddingLeft:1,backgroundColor:"#18110d"}),xr(F,Fo("Move to look \xB7 Left click fire \xB7 Right click use \xB7 WASD move \xB7 Esc menu")),Ww((U)=>{var{muted:ln,muted:_}=r,Bn=d(),Kn=l(),Dr={width:d(),height:l()},hr=r.muted;return ln!==U.e&&(U.e=Qn(L,"fg",ln,U.e)),_!==U.t&&(U.t=Qn(E,"fg",_,U.t)),Bn!==U.a&&(U.a=Qn(N,"width",Bn,U.a)),Kn!==U.o&&(U.o=Qn(N,"height",Kn,U.o)),Dr!==U.i&&(U.i=Qn(N,"style",Dr,U.i)),hr!==U.n&&(U.n=Qn(F,"fg",hr,U.n)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),c})()}function Sw(n,r,t,e){let{width:o,height:i}=ye;for(let f=0;f<e;f+=1){let u=Math.min(i-1,Math.floor(f*i/e));for(let d=0;d<t;d+=1){let l=Math.min(o-1,Math.floor(d*o/t)),m=(u*o+l)*4,w=(f*t+d)*4;r[w]=n[m+2],r[w+1]=n[m+1],r[w+2]=n[m],r[w+3]=255}}}import{memo as Uo}from"@opentui/solid";import{insert as Tn}from"@opentui/solid";import{effect as To}from"@opentui/solid";import{createTextNode as Dn}from"@opentui/solid";import{insertNode as Z}from"@opentui/solid";import{setProp as H}from"@opentui/solid";import{createElement as wn}from"@opentui/solid";import{createComponent as ra}from"@opentui/solid";import{TextAttributes as Xt}from"@opentui/core";import{createEffect as ta,createSignal as ea,onCleanup as oa,Show as ia}from"solid-js";var jo=[{name:"Fist",key:"1"},{name:"Pistol",key:"2",ammo:0},{name:"Shotgun",key:"3",ammo:1},{name:"Chaingun",key:"4",ammo:0},{name:"Rocket launcher",key:"5",ammo:3},{name:"Plasma rifle",key:"6",ammo:2},{name:"BFG9000",key:"7",ammo:2,minimumAmmo:40},{name:"Chainsaw",key:"1"},{name:"Super shotgun",key:"3",ammo:1,minimumAmmo:2}];class Po{previous;current;currentSince=0;lastProgressAt=0;acquiredKey;mapKey="";update(n,r=Date.now()){let t=`${n.episode}:${n.map}`;if(t!==this.mapKey)this.mapKey=t,this.lastProgressAt=r,this.current=void 0,this.acquiredKey=void 0;else if(qw(this.previous,n))this.lastProgressAt=r;let e=n.keys&~(this.previous?.keys||0);if(e)this.acquiredKey={mask:e,at:r};this.previous=n;let o=_w(n,{now:r,stalledFor:r-this.lastProgressAt,acquiredKey:this.acquiredKey&&r-this.acquiredKey.at<=12000?this.acquiredKey.mask:0});if(!this.current||o.id===this.current.id||o.priority>this.current.priority||r-this.currentSince>=6000){if(o.id!==this.current?.id)this.currentSince=r;this.current=o}let{priority:i,...f}=this.current;return f}}function O1(n){return jo[n]?.name||`Weapon ${n+1}`}function E1(n){let r=jo[n.readyWeapon];return r?.ammo===void 0?void 0:n.ammo[r.ammo]}function _w(n,r){if(!n.playerValid)return fr("starting",95,"Connecting to Doom","Reading live player state\u2026");if(n.dead)return fr("dead",100,"You went down","Press Space or Enter to restart.","critical");if(n.menuActive||n.paused)return fr("paused",90,"Game paused","Esc returns to the fight.");if(!n.inLevel)return fr("between-levels",85,"Level transition","The coach will resume when the next map begins.");if(n.health<=10)return fr("health-critical",98,`${Math.max(0,n.health)} health`,"Disengage and check side rooms for a medikit.","critical");let t=Iw(n);if(t)return t;if(n.health<=25)return fr("health-low",80,"Low health","Slow down, use cover, and search side rooms.","warning");if(n.damageCount>0)return fr("taking-damage",75,"Under fire","Keep moving and strafe with A/D.","warning");if(r.acquiredKey){let e=pw(r.acquiredKey);return fr(`key-${e}`,70,`${na(e)} key acquired`,`Revisit ${e} doors.`)}if(n.totalKills>0&&n.kills>=n.totalKills)return fr("area-clear",60,"Area clear","Focus on the exit or any secrets you want to find.");if(r.stalledFor>=45000)return fr("stalled",50,"Need a route?","Tap Tab for the automap; Space checks doors and switches.");if(n.levelTicks<420)return fr("level-start",20,`E${n.episode}M${n.map}`,"Space opens doors. Tab toggles the automap.");return fr("movement",10,"Stay mobile","Strafe with A/D and use corners to control each fight.")}function Iw(n){let r=jo[n.readyWeapon];if(r?.ammo===void 0||n.ammo[r.ammo]>=(r.minimumAmmo||1))return;let t=[6,5,4,8,3,2,1,7,0].map((e)=>({index:e,weapon:jo[e]})).find(({index:e,weapon:o})=>e!==n.readyWeapon&&Boolean(n.weapons&1<<e)&&(o.ammo===void 0||n.ammo[o.ammo]>=(o.minimumAmmo||1)));return t?fr("weapon-dry",85,`${r.name} is dry`,`Press ${t.weapon.key} for ${t.weapon.name}.`,"warning"):fr("ammo-dry",85,"Out of ammo","Fall back, search for ammo, and use melee if needed.","warning")}function qw(n,r){if(!n)return!0;return r.kills>n.kills||r.items>n.items||r.secrets>n.secrets||r.keys!==n.keys}function pw(n){if(n&9)return"blue";if(n&18)return"yellow";return"red"}function fr(n,r,t,e,o="normal"){return{id:n,priority:r,title:t,body:e,tone:o}}function na(n){return n[0].toUpperCase()+n.slice(1)}function k1(n){let r=Y(),t=new Po,[e,o]=ea();return ta(()=>{if(t=new Po,o(void 0),!n.session)return;let i=n.session.onState((f)=>{let u=t.update(f);o({state:f,advice:u})});oa(i)}),ra(ia,{get when(){return e()},get fallback(){return(()=>{var i=wn("box"),f=wn("text"),u=wn("text");return Z(i,f),Z(i,u),H(i,"style",{flexDirection:"column"}),Z(f,Dn("DOOM COACH")),H(f,"fg","#ff9e64"),Z(u,Dn("Reading live game state\u2026")),To((d)=>{var l=Xt.BOLD,m=r.muted;return l!==d.e&&(d.e=H(f,"attributes",l,d.e)),m!==d.t&&(d.t=H(u,"fg",m,d.t)),d},{e:void 0,t:void 0}),i})()},children:(i)=>{let f=()=>i().state,u=()=>i().advice,d=()=>E1(f()),l=()=>fa(f().keys),m=()=>u().tone==="critical"?r.red:u().tone==="warning"?r.yellow:r.green,w=()=>f().health<=10?r.red:f().health<=25?r.yellow:r.green;return(()=>{var b=wn("box"),O=wn("box"),k=wn("box"),s=wn("text"),g=wn("text"),c=wn("text"),h=Dn("E"),R=Dn("M"),M=wn("text"),L=Dn("Health "),E=wn("span"),N=Dn(" \xB7 Armor "),A=wn("text"),F=wn("text"),U=Dn("Kills "),ln=Dn("/"),_=Dn(" \xB7 Items "),Bn=Dn("/"),Kn=wn("text"),Dr=Dn("Secrets "),hr=Dn("/"),Vr=wn("box"),Gr=wn("text"),ut=wn("text"),P=wn("text"),Sr=wn("box"),W=wn("text"),Yt=wn("text"),Qt=wn("text"),en=wn("text");return Z(b,O),Z(b,Vr),Z(b,Sr),H(b,"style",{flexDirection:"column",gap:1}),Z(O,k),Z(O,c),Z(O,M),Z(O,A),Z(O,F),Z(O,Kn),H(O,"style",{flexDirection:"column"}),Z(k,s),Z(k,g),H(k,"style",{height:1,flexDirection:"row",justifyContent:"space-between"}),Z(s,Dn("DOOM COACH")),H(s,"fg","#ff9e64"),Tn(g,()=>da(f().levelTicks)),Z(c,h),Z(c,R),Tn(c,()=>f().episode,R),Tn(c,()=>f().map,null),Tn(c,(()=>{var j=Uo(()=>!!f().automapActive);return()=>j()?(()=>{var Sn=wn("span");return Z(Sn,Dn(" \xB7 MAP")),To((Wn)=>H(Sn,"style",{fg:r.blue},Wn)),Sn})():null})(),null),Tn(c,(()=>{var j=Uo(()=>!!(f().paused||f().menuActive));return()=>j()?(()=>{var Sn=wn("span");return Z(Sn,Dn(" \xB7 PAUSED")),To((Wn)=>H(Sn,"style",{fg:r.yellow},Wn)),Sn})():null})(),null),Z(M,L),Z(M,E),Z(M,N),Tn(E,()=>Math.max(0,f().health)),Tn(M,()=>Math.max(0,f().armor),null),Tn(A,()=>O1(f().readyWeapon),null),Tn(A,(()=>{var j=Uo(()=>d()===void 0);return()=>j()?"":` \xB7 ${d()} ammo`})(),null),Z(F,U),Z(F,ln),Z(F,_),Z(F,Bn),Tn(F,()=>f().kills,ln),Tn(F,()=>f().totalKills,_),Tn(F,()=>f().items,Bn),Tn(F,()=>f().totalItems,null),Z(Kn,Dr),Z(Kn,hr),Tn(Kn,()=>f().secrets,hr),Tn(Kn,()=>f().totalSecrets,null),Tn(Kn,(()=>{var j=Uo(()=>!!l());return()=>j()?` \xB7 Keys ${l()}`:""})(),null),Z(Vr,Gr),Z(Vr,ut),Z(Vr,P),Z(Gr,Dn("LOCAL TACTIC")),H(ut,"wrapMode","word"),Tn(ut,()=>u().title),H(P,"wrapMode","word"),Tn(P,()=>u().body),Z(Sr,W),Z(Sr,Yt),Z(Sr,Qt),Z(Sr,en),H(Sr,"style",{flexDirection:"column"}),Z(W,Dn("Controls")),Z(Yt,Dn("W/S move \xB7 A/D strafe")),Z(Qt,Dn("F fire \xB7 Space use \xB7 Tab map")),Z(en,Dn("Ctrl+C returns to Free Code")),To((j)=>{var Sn=Xt.BOLD,Wn=r.muted,$t=r.foreground,ct=Xt.BOLD,Br=r.muted,Be={fg:w()},Dt=r.muted,Ae=r.muted,Ht=r.muted,Ce={minHeight:5,flexDirection:"column",border:!0,borderColor:m(),customBorderChars:vn,paddingLeft:1,paddingRight:1},Fe=m(),Wr=Xt.BOLD,Kt=r.foreground,lt=Xt.BOLD,mt=r.muted,je=r.foreground,mn=Xt.BOLD,nn=r.muted,sr=r.muted,An=r.muted;return Sn!==j.e&&(j.e=H(s,"attributes",Sn,j.e)),Wn!==j.t&&(j.t=H(g,"fg",Wn,j.t)),$t!==j.a&&(j.a=H(c,"fg",$t,j.a)),ct!==j.o&&(j.o=H(c,"attributes",ct,j.o)),Br!==j.i&&(j.i=H(M,"fg",Br,j.i)),Be!==j.n&&(j.n=H(E,"style",Be,j.n)),Dt!==j.s&&(j.s=H(A,"fg",Dt,j.s)),Ae!==j.h&&(j.h=H(F,"fg",Ae,j.h)),Ht!==j.r&&(j.r=H(Kn,"fg",Ht,j.r)),Ce!==j.d&&(j.d=H(Vr,"style",Ce,j.d)),Fe!==j.l&&(j.l=H(Gr,"fg",Fe,j.l)),Wr!==j.u&&(j.u=H(Gr,"attributes",Wr,j.u)),Kt!==j.c&&(j.c=H(ut,"fg",Kt,j.c)),lt!==j.w&&(j.w=H(ut,"attributes",lt,j.w)),mt!==j.m&&(j.m=H(P,"fg",mt,j.m)),je!==j.f&&(j.f=H(W,"fg",je,j.f)),mn!==j.y&&(j.y=H(W,"attributes",mn,j.y)),nn!==j.g&&(j.g=H(Yt,"fg",nn,j.g)),sr!==j.p&&(j.p=H(Qt,"fg",sr,j.p)),An!==j.b&&(j.b=H(en,"fg",An,j.b)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0}),b})()}})}function fa(n){let r=[];if(n&9)r.push("B");if(n&18)r.push("Y");if(n&36)r.push("R");return r.join(" ")}function da(n){let r=Math.max(0,Math.floor(n/35));return`${Math.floor(r/60).toString().padStart(2,"0")}:${(r%60).toString().padStart(2,"0")}`}var ua="freecode.doom",ca="freecode.doom.play",af="freecode.doom.singleplayer",la=new Set([Ln.right,Ln.left,Ln.up,Ln.down,Ln.strafeLeft,Ln.strafeRight]);function L1(){return{[af]:(n)=>{let r=n;return h1(r,r.runtimeDirectory?{...process.env,FREECODE_DOOM_RUNTIME_DIR:r.runtimeDirectory}:process.env)}}}function N1({capabilityBroker:n,launchDelayMs:r}){return{extensionId:ua,supportedApiVersions:["1"],commandIds:[ca],requiredCapabilities:["ui.main","ui.sidebar","input.raw","storage.local","runtime.native"],launchProfile:af,async launch(t,e){await ga(r,e);let o=await n.launchNative(t,af,{mode:"singleplayer",signal:e,runtimeDirectory:t.extension.directory});if(e.aborted)throw o.stop(),new kt;return new hf(o)},isCancellation(t){return t instanceof kt},closureMessage(t){return t==="interaction"?"Doom closed because the agent needs your input.":"Doom closed. Your coding session is right where you left it."},renderLaunch(){return wf(f1,{})},renderMain(t){return wf(M1,{get session(){return R1(t).controller}})},renderSidebar(t){return wf(k1,{get session(){return t?R1(t).controller:void 0}})}}}class hf{releaseTimers=new Map;heldKeys=new Set;constructor(n){this.controller=n,this.done=n.done}stop(){this.releaseInput(),this.controller.stop()}releaseInput(){for(let n of this.releaseTimers.values())clearTimeout(n);this.releaseTimers.clear();for(let n of this.heldKeys)this.controller.sendKey(n,!1);this.heldKeys.clear()}handleKey(n,{kittyKeyboard:r}){let t=ma(n);if(t===void 0)return;let e=this.releaseTimers.get(t);if(e)clearTimeout(e);if(n.eventType==="release"){if(this.releaseTimers.delete(t),this.heldKeys.delete(t))this.controller.sendKey(t,!1);return}let o=this.heldKeys.has(t);if(!o)this.heldKeys.add(t),this.controller.sendKey(t,!0);if(!r){let i=setTimeout(()=>{if(this.releaseTimers.delete(t),this.heldKeys.delete(t))this.controller.sendKey(t,!1)},!o&&la.has(t)?650:160);i.unref?.(),this.releaseTimers.set(t,i)}}}function R1(n){if(!(n instanceof hf))throw Error("Doom received an incompatible extension session");return n}function ma(n){switch(n.name){case"right":case"l":return Ln.right;case"left":case"j":return Ln.left;case"up":case"w":return Ln.up;case"down":case"k":case"s":return Ln.down;case"a":return Ln.strafeLeft;case"d":return Ln.strafeRight;case"f":case"i":case"control":case"ctrl":return Ln.fire;case"space":return Ln.use;case"escape":case"esc":return Ln.escape;case"enter":case"return":return Ln.enter;case"tab":return Ln.tab;case"shift":return 182;case"alt":case"option":return 184;default:return n.name.length===1?n.name.toLowerCase().charCodeAt(0):void 0}}function ga(n,r){if(r.aborted)return Promise.reject(new kt);return new Promise((t,e)=>{let i=setTimeout(()=>{r.removeEventListener("abort",f),t()},n),f=()=>{clearTimeout(i),r.removeEventListener("abort",f),e(new kt)};r.addEventListener("abort",f,{once:!0})})}function D1({capabilityBroker:n,launchDelayMs:r}){let t=[N1({capabilityBroker:n,launchDelayMs:r})];return{resolve(e){let o=t.find((f)=>f.extensionId===e.extension.id&&f.supportedApiVersions.includes(e.extension.apiVersion)&&f.commandIds.includes(e.command.id));if(!o)return;let i=new Set(e.extension.capabilities.map((f)=>f.id));if(!o.requiredCapabilities.every((f)=>i.has(f)))return;if(o.launchProfile&&!e.extension.nativeRuntimeProfiles.includes(o.launchProfile))return;return o}}}function B1(){return L1()}import{dlopen as wa,ptr as sf}from"bun:ffi";var bf=-10,zo=1,aa=()=>wa("kernel32.dll",{GetStdHandle:{args:["i32"],returns:"ptr"},GetConsoleMode:{args:["ptr","ptr"],returns:"i32"},SetConsoleMode:{args:["ptr","u32"],returns:"i32"},FlushConsoleInputBuffer:{args:["ptr"],returns:"i32"}}),Rr;function yf(){if(process.platform!=="win32")return!1;try{return Rr??=aa(),!0}catch{return!1}}function A1(){if(process.platform!=="win32")return;if(!process.stdin.isTTY)return;if(!yf())return;let n=Rr.symbols.GetStdHandle(bf),r=new Uint32Array(1);if(Rr.symbols.GetConsoleMode(n,sf(r))===0)return;let t=r[0];if((t&zo)===0)return;Rr.symbols.SetConsoleMode(n,t&~zo)}function C1(){if(process.platform!=="win32")return;if(!process.stdin.isTTY)return;if(!yf())return;let n=Rr.symbols.GetStdHandle(bf);Rr.symbols.FlushConsoleInputBuffer(n)}var Oe;function F1(){if(process.platform!=="win32")return;if(!process.stdin.isTTY)return;if(!yf())return;if(Oe)return Oe;let n=process.stdin,r=n.setRawMode,t=Rr.symbols.GetStdHandle(bf),e=new Uint32Array(1);if(Rr.symbols.GetConsoleMode(t,sf(e))===0)return;let o=e[0],i=()=>{if(Rr.symbols.GetConsoleMode(t,sf(e))===0)return;let m=e[0];if((m&zo)===0)return;Rr.symbols.SetConsoleMode(t,m&~zo)},f=()=>{i(),setImmediate(i)},u;if(typeof r==="function")u=(m)=>{let w=r.call(n,m);return f(),w},n.setRawMode=u;f();let d=setInterval(i,100);d.unref();let l=!1;return Oe=()=>{if(l)return;if(l=!0,clearInterval(d),u&&n.setRawMode===u)n.setRawMode=r;Rr.symbols.SetConsoleMode(t,o),Oe=void 0},Oe}function Rt(n){if(n.setTerminalTitle(""),n.isDestroyed)return;n.destroy()}var Oa="all-commands",Ea=process.env.FREECODE_COMMUNITY_URL||"https://github.com/SchmitzAndrew/freecode",ka=30000;function Ra(n=process.env.FREECODE_AD_ROTATION_MS){let r=Number(n);return Number.isFinite(r)&&r>=1000&&r<=120000?r:ka}var Jo=Object.freeze([Object.freeze({tier:"free",providerID:"freecode",modelID:"free",label:"Free"}),Object.freeze({tier:"super",providerID:"freecode",modelID:"super",label:"Super"})]);function j1(n){if(n?.providerID!=="freecode")return;return Jo.find((r)=>r.modelID===n.id)}function Mf(n){return n.transcript.length===0&&!n.assistantText&&!n.reasoningText&&!n.error&&!n.pendingPermission&&!n.pendingQuestion&&n.status!=="working"}function U1(n,r,t,e,o=[],i=0){let f=n.monetization.working,u=f.cards.filter((O)=>O.kind!=="index"),d=u.length?u[f.activeIndex%u.length]:void 0,l=!n.error&&d&&(n.status==="working"||["active","complete"].includes(f.status))?d:void 0,m=Mf(n),w=m?n.monetization.welcome.cards[0]:void 0,b=m?void 0:hd(n,{hiddenCardIds:r,communityUrl:Ea,modelLabel:t,recommendedCard:e,projectChecks:o,tipIndex:i});return{home:m,welcomeCard:w,workingCard:l,sidebarCard:b}}function La(n,r,t,e,o=[],i=0){let{home:f,welcomeCard:u,workingCard:d,sidebarCard:l}=U1(n,r,t,e,o,i);if(f)return u?.action?.type==="open_url"?u:void 0;if(l?.action?.type==="open_url")return l;if(d?.action?.type==="open_url")return d;return}async function T1({client:n,cwd:r=process.cwd(),sponsor:t,monetization:e,alphaAuth:o,shutdownSignal:i}){let f=F1(),u,d,l;try{let m,w=new Promise((b)=>{m=b});if(u=await sa({exitOnCtrlC:!1,clearOnShutdown:!0,screenMode:"alternate-screen",targetFps:30,maxFps:60,useMouse:!0,enableMouseMovement:!0,useKittyKeyboard:{events:!0},backgroundColor:lr[tt].background,onDestroy:m}),A1(),d=()=>Rt(u),process.on("SIGHUP",d),l=()=>Rt(u),i?.aborted){l(),await w;return}i?.addEventListener("abort",l,{once:!0}),await ba(()=>tn(vd,{get children(){return tn(Na,{client:n,cwd:r,sponsor:t,monetization:e,alphaAuth:o,renderer:u})}}),u),await w}finally{if(l)i?.removeEventListener("abort",l);if(d)process.off("SIGHUP",d);if(u)Rt(u);C1(),f?.()}}function Na(n){let r=typeof n.client==="object"&&n.client!==null&&"v2"in n.client?n.client:void 0,t=P1(),[e,o]=p(r?{client:r}:void 0),[i,f]=p(),[u,d]=p(n.alphaAuth?{kind:"checking"}:{kind:"welcome"}),[l,m]=p(!n.alphaAuth),[w,b]=p(!1),O=Ct(`signed-out:${n.cwd}:${Date.now()}`),k=new Set,[s,g]=p(fe(n.sponsor).welcome.cards),c=!1;cn(()=>{if(c||u().kind!=="welcome"||!n.alphaAuth||!n.monetization?.baseUrl)return;c=!0;let E=Nt(t),N=new AbortController,A=setTimeout(()=>N.abort(),1e4);hi({...n.monetization,placement:"welcome",stage:"welcome_primary",count:1,sessionPseudonym:O,context:{product:{name:"Free Code",surface:"sign_in"},terminalDimensions:`${E.width}x${E.height}`},signal:N.signal}).then((F)=>{if(F.length)g(F)}).catch(()=>{}).finally(()=>clearTimeout(A)),ur(()=>{clearTimeout(A),N.abort()})});let h=(E,N)=>{if(!n.monetization?.baseUrl||!N.impressionToken)return;yi({...n.monetization,type:E,card:N,sessionPseudonym:O}).catch(()=>{})},R=(E)=>{let N=`${E.id}:${E.revision}:${E.placement}:${E.stage}`;if(k.has(N))return;k.add(N),h("impression",E)},M=(E)=>{if(E.action?.type!=="open_url")return;h("action",E),Ai(E.action.url)};cn(()=>{if(r||!l())return;let E=!1,N=typeof n.client==="function"?n.client():n.client;Promise.resolve(N).then((A)=>{if(!E)o(Pu(A))}).catch((A)=>{if(!E)f(bt(A,"Free Code could not start."))}),ur(()=>{E=!0})}),cn(()=>{if(!n.alphaAuth)return;let E=!1;n.alphaAuth.currentSession().then((N)=>{if(E)return;if(!N){d({kind:"welcome"});return}d({kind:"authenticated",user:N.user}),m(!0)}).catch((N)=>{if(E)return;let A=typeof N?.code==="string"?N.code:"auth_network_unavailable";d({kind:"error",code:A,recoverable:!0})}),ur(()=>{E=!0})});let L=()=>{if(!n.alphaAuth||w())return;b(!0),n.alphaAuth.authenticate({onState:d}).then((E)=>{if(E.kind==="authenticated")m(!0)}).finally(()=>b(!1))};return Xn(()=>({priority:200,commands:[{name:"startup.exit",title:"Exit Free Code",category:"Application",run:()=>Rt(n.renderer)},{name:"onboarding.continue",title:"Continue onboarding",category:"Onboarding",run:()=>{if(u().kind==="authenticated")m(!0);else if(["welcome","denied","error"].includes(u().kind))L()}},{name:"card.open",title:"Open sponsor",category:"Home",run:()=>{let E=s()[0];if(E?.action?.type==="open_url")M(E)}}]})),Xn(()=>({priority:200,enabled:()=>!e()||!l(),bindings:[{key:"ctrl+c",cmd:"startup.exit"}]})),Xn(()=>({priority:200,enabled:()=>!l(),bindings:[{key:"return",cmd:"onboarding.continue"},{key:"kpenter",cmd:"onboarding.continue"}]})),Xn(()=>({priority:200,enabled:()=>!l()&&u().kind==="welcome"&&s()[0]?.action?.type==="open_url",bindings:process.platform==="darwin"?[{key:"meta+o",cmd:"card.open"},{key:"super+o",cmd:"card.open"}]:[{key:"ctrl+o",cmd:"card.open"}]})),tn(eo.Provider,{get value(){return lr[tt]},get children(){return(()=>!l()?tn(ko,{get cwd(){return n.cwd},get compactHeader(){return t().height<32},hint:!1,footerLabel:"Free Code account",get interaction(){return tn(ju,{get state(){return u()},get projectPath(){return n.cwd},onSignIn:L,onRetry:L,get cards(){return s()},get cardsViewable(){return!l()},onCardAction:M,onCardImpression:R})}}):e()?tn(Da,{get client(){return e().client},get cwd(){return n.cwd},get sponsor(){return n.sponsor},get monetization(){return n.monetization},get alphaAuth(){return n.alphaAuth},get alphaExperience(){return e().alphaExperience}}):tn(ko,{get cwd(){return n.cwd},get phase(){return i()?"error":"starting"},get error(){return i()}}))()}})}function dt(n,r,t){let e=new Map;for(let o of t){if(!o||typeof o!=="object"||o.sessionID!==n||typeof o.id!=="string")continue;e.set(o.id,{...o,protocol:"stable"})}for(let o of r){if(!o||typeof o!=="object"||typeof o.id!=="string"||e.has(o.id))continue;e.set(o.id,{...o,sessionID:n,protocol:"v2"})}return[...e.values()]}function Da({client:n,cwd:r,sponsor:t,monetization:e,alphaAuth:o,alphaExperience:i,initialSession:f,initialStateOverride:u,initialDraft:d="",initialSuggestions:l=[],initialView:m,initialServerCommands:w,initialExtensions:b,extensionManager:O,openUrl:k=Ai,clipboardReader:s=Wd,bannerEffect:g,bottomBarVariant:c="rail",extensionNativeLaunchers:h,extensionLaunchDelayMs:R=900,adRotationMs:M=Ra()}){let L=ya(),E=oo(),N=P1(),A=()=>N().width,F=()=>N().height,[U,ln]=p(Ud()),_=Ma({...lr[U()]||lr[tt]});cn(()=>Object.assign(_,lr[U()]||lr[tt]));let[Bn,Kn]=p(),Dr={current:void 0},hr={current:void 0},Vr={current:"closed"},Gr=u?.sponsor??t,ut=f?de(qe({sponsor:Gr}),f):qe({sponsor:Gr}),[P,Sr]=p({...ut,...u,sponsor:Gr,monetization:u?.monetization??fe(Gr)}),W=(a)=>{let y=Nt(P),x=typeof a==="function"?a(y):a;Nt(()=>Sr(()=>x))},Yt=q(()=>P().status),Qt=Boolean(u?.pendingPermission||u?.pendingQuestion),[en,j]=p(f),Sn=q(()=>en()?.id),[Wn,$t]=p(j1(f?.model)||i),ct=w||[],[Br,Be]=p(ct),[Dt,Ae]=p(w!==void 0),Ht=O||t1(),Ce=pu({nativeLaunchers:{...B1(),...h}}),Fe=D1({capabilityBroker:Ce,launchDelayMs:R}),[Wr,Kt]=p(b||ef()),lt=q(()=>qi(Br(),{modes:Boolean(i)})),mt=q(()=>Dt()?of(Wr(),lt()):[]),je=q(()=>{let a=P(),y=[];if(a.error)y.push("/clear-error");if(a.status==="working")y.push("/interrupt");if(a.files.length>0)y.push("/diff");if(a.todos.length>0)y.push("/todos");if(a.transcript.length>0||a.assistantText||a.reasoningText)y.push("/undo","/new");return y.push("/new","/sessions","/diff","/undo","/compact"),[...new Set(y)].slice(0,5)}),[mn,nn]=p(m==="commands"?ae(ct,{modes:Boolean(i),extensionCommands:w?of(Wr(),qi(ct,{modes:Boolean(i)})):[]}):void 0),[sr,An]=p(!1),[cr,St]=p({kind:"prompt"}),[Xo,Yo]=p(0),[xc,Qo]=p([]),[_t,$o]=p(!1),[jf,_r]=p(d),[Pe,Ho]=p([]),[_n,Ar]=p(l),[Ko,Cr]=p(0),[Mc,Oc]=p(new Set),[gt,Ue]=p(!1),[So,Ec]=p(new Set),[kc,_o]=p(0),[Pf,Te]=p(),[Uf,Tf]=p(0),un={current:null},Io={current:0},Rc={current:0},qo={current:0},Lc={current:null},It={current:f},Ir={current:P()},zf={current:P().pendingQuestion?.id},po={current:P().services},ni={current:ct},Fr={current:""},jr={current:""},Bt={current:0},At={current:0},qt={current:""},Jf={current:xi()},ze={current:new Set},Vf={current:So()},Je={current:""},ri={current:{}},pt={current:0},Gf={current:void 0},Ve={current:new Map},Ge={current:0},We={current:0},Wf={current:{busy:sr(),modalOpen:Boolean(mn()),inputModeKind:cr().kind,sidebarVisible:A()>120||gt()}},Ze=()=>{Io.current+=1,Ho([])},Pr=()=>A()>120;cn(()=>{Vf.current=So()}),cn(()=>{Wf.current={busy:sr(),modalOpen:Boolean(mn()),inputModeKind:cr().kind,sidebarVisible:Pr()||gt()}}),cn(()=>{It.current=en()}),cn(()=>{Ir.current=P()}),ur(()=>hr.current?.abort()),cn(()=>{Sn(),Fr.current="",jr.current="",Bt.current=0,At.current=0,qt.current="",pt.current+=1,ze.current.clear(),Jf.current=xi(),_o(0),Tf(0)}),cn(()=>{po.current=P().services}),cn(()=>{ni.current=Br()}),cn(()=>{let a=Bn(),y=()=>a?.session?.releaseInput();L.on("blur",y),ur(()=>{L.off("blur",y),y()})}),cn(()=>{if(!P().pendingPermission&&!P().pendingQuestion)return;Vr.current="interaction";let a=Bn();if(a?.phase==="launching")Dr.current?.abort();else if(a?.phase==="active")a.session?.stop()}),cn(()=>{if(zf.current===P().pendingQuestion?.id)return;zf.current=P().pendingQuestion?.id,Yo(0),Qo([]),St({kind:"prompt"})});let wt=q(()=>Ct(en()?.id||r));cn(()=>{Je.current=wt()});let Zf=q(()=>P().files.map((a)=>typeof a==="string"?a:a?.file||a?.path||"").filter(Boolean).join("\x00")),ne=q(()=>{return Zf(),Ku(r,Nt(P).files)}),ve=q(()=>{return Zf(),Su(r,Nt(P).files)}),vf=q(()=>mi(P(),{modelLabel:Wn()?.label,projectChecks:ne()}),void 0,{equals:(a,y)=>a?.fingerprint===y.fingerprint}),Nc=q(()=>Mf(P())),Xf=q(()=>Pf()?.metadata?.fingerprint===vf().fingerprint?Pf():void 0);cn(()=>{Gf.current=Xf()});let Yf=q(()=>Boolean(P().error||P().retry||P().pendingPermission||P().pendingQuestion||P().monetization?.index?.status==="searching"||P().monetization?.index?.card||P().monetization?.working?.cards?.some((a)=>a.kind==="index")));cn(()=>{let a=en(),y=vf(),x=Ge.current+1;if(Ge.current=x,!a?.id||Nc()||Yf()||!o?.sidebarRecommendation||!y.candidates.length){Te(void 0);return}if(Ve.current.has(y.fingerprint)){Te(Ve.current.get(y.fingerprint)||void 0);return}let B=new AbortController,D=setTimeout(()=>B.abort(),2500);o.sidebarRecommendation({fingerprint:y.fingerprint,facts:y.facts,candidates:y.candidates},{signal:B.signal}).then((T)=>{if(Ge.current!==x)return;let G=ad(y,T);Ve.current.set(y.fingerprint,G||null),Te(G)}).catch(()=>{if(Ge.current!==x)return;Ve.current.set(y.fingerprint,null),Te(void 0)}).finally(()=>clearTimeout(D)),ur(()=>{clearTimeout(D),B.abort()})}),cn(()=>{if(!Sn()||Mf(P())||Yf())return;let a=setInterval(()=>Tf((y)=>y+1),Math.max(10,M));ur(()=>clearInterval(a))});let at=async(a,y,{count:x=1,prompt:B=Fr.current,sequence:D=0}={})=>{if(!e?.baseUrl)return;let T=wt(),G=jr.current||void 0,X=`${a}:${y}`,K=(ri.current[X]||0)+1;ri.current[X]=K;let En=()=>Je.current===T&&ri.current[X]===K&&(!G||jr.current===G),kn=new AbortController,J=setTimeout(()=>kn.abort(),1e4);try{let z=Ir.current,Zn=await hi({...e,placement:a,stage:y,count:x,sessionPseudonym:T,turnPseudonym:G,sequence:D,elapsedMs:z.monetization.working.startedAt?Date.now()-z.monetization.working.startedAt:0,context:gi(z,{prompt:B,projectSignals:ve(),projectChecks:ne(),placement:a,stage:y,build:process.env.FREECODE_RELEASE_VERSION||"0.0.0",modelLabel:Wn()?.label,terminalDimensions:`${A()}x${F()}`}),signal:kn.signal});if(!En())return;if(!Zn.length){if(a==="welcome")W((In)=>({...In,monetization:{...In.monetization,welcome:{...In.monetization.welcome,status:"ready"}}}));return}W((In)=>{if(!wd(a,y,In.status))return In;let bn=a==="working"&&y==="working_initial"&&In.status==="idle",pr=bn&&In.monetization.working.status==="complete"?Zn.filter((ci)=>ci.kind==="index"):Zn;if(!pr.length)return In;return{...In,monetization:ud(In.monetization,a,pr,{stage:y,...bn?{status:"complete"}:{}})}})}catch{if(En()&&a==="welcome")W((z)=>({...z,monetization:{...z.monetization,welcome:{...z.monetization.welcome,status:"ready"}}}))}finally{clearTimeout(J)}},Dc=async(a)=>{if(!e?.baseUrl)return;let y=wi(a,{dependencies:ve().dependencies,existingServices:ve().existingServices});if(!y||y.confidence<0.8)return;let x=pt.current+1;pt.current=x;let B=wt(),D=jr.current||void 0;W((X)=>({...X,monetization:{...X.monetization,index:{status:"searching"}}}));let T=new AbortController,G=setTimeout(()=>T.abort(),1e4);try{let X=Ir.current,K=gi(X,{prompt:a,projectSignals:ve(),projectChecks:ne(),placement:"sidebar",stage:"sidebar_index",build:process.env.FREECODE_RELEASE_VERSION||"0.0.0",modelLabel:Wn()?.label,terminalDimensions:`${A()}x${F()}`}),En=await si({...e,operation:"search",query:a,context:K,metadata:{serviceIntent:y},sessionPseudonym:B,turnPseudonym:D,signal:T.signal});if(pt.current!==x||Je.current!==B)return;W((kn)=>({...kn,monetization:{...kn.monetization,index:En.card?{status:"ready",searchId:String(En.card.metadata?.searchId||""),card:En.card}:{status:"failed",error:"Gravity Index returned no recommendation."}}}))}catch(X){if(pt.current!==x||Je.current!==B)return;W((K)=>({...K,monetization:{...K.monetization,index:{status:"failed",error:X instanceof Error?X.message:"Gravity Index request failed."}}}))}finally{clearTimeout(G)}};cn(()=>{if(!Sn()||!e?.baseUrl)return;W((a)=>({...a,monetization:{...a.monetization,welcome:{...a.monetization.welcome,status:"loading"}}})),Promise.all([at("welcome","welcome_primary",{count:Pr()?3:1,prompt:""}),at("sidebar","sidebar_display",{prompt:""})])}),cn(()=>{if(!Sn()||!kc())return;let a=setInterval(()=>{Bt.current+=1,W((x)=>({...x,monetization:gd(x.monetization)}));let y=Mi(At.current);if(!y)return;if(At.current=y,Ir.current.status==="working")at("working","working_sustained",{prompt:Fr.current,sequence:Bt.current});else if(Ir.current.status==="idle"&&Fr.current)at("working","working_complete",{prompt:Fr.current,sequence:Bt.current})},Math.max(10,M));ur(()=>clearInterval(a))});let ht=(a)=>{W((y)=>({...y,transcript:[...y.transcript,{type:"assistant",text:a}]}))},Xe=async(a)=>{let[y,x,B,D,T,G,X,K,En]=await Promise.all([S(n.session.messages({sessionID:a})),S(n.v2.session.permission.list({sessionID:a})),S(n.v2.session.question.list({sessionID:a})),S(n.permission.list({directory:r})),S(n.question.list({directory:r})),S(n.session.diff({sessionID:a})),S(n.session.todo({sessionID:a})),S(n.session.children({sessionID:a})),S(n.session.status({directory:r}))]),kn=await Promise.all(K.map(async(bn)=>{let[pr,ci]=await Promise.all([S(n.v2.session.permission.list({sessionID:bn.id})),S(n.v2.session.question.list({sessionID:bn.id}))]),od=bn.agent?`${bn.agent[0].toUpperCase()}${bn.agent.slice(1)}`:"Subagent";return{permissions:dt(bn.id,pr,D).map((li)=>({...li,sessionID:bn.id,originLabel:od})),questions:dt(bn.id,ci,T).map((li)=>({...li,sessionID:bn.id,originLabel:od}))}})),J=dt(a,x,D),z=dt(a,B,T),Zn=kn.flatMap((bn)=>bn.permissions),In=kn.flatMap((bn)=>bn.questions);W((bn)=>bn.sessionID===a?Ed(bn,{messages:y,permissions:J,questions:z,files:G,todos:X,children:K,childPermissions:Zn,childQuestions:In,statuses:En}):bn)},Ye=async(a)=>{let y=We.current+1;We.current=y;let[x,B,D,T,G]=await Promise.all([S(n.v2.session.permission.list({sessionID:a})),S(n.v2.session.question.list({sessionID:a})),S(n.permission.list({directory:r})),S(n.question.list({directory:r})),S(n.session.children({sessionID:a}))]),X=await Promise.all(G.map(async(z)=>{let[Zn,In]=await Promise.all([S(n.v2.session.permission.list({sessionID:z.id})),S(n.v2.session.question.list({sessionID:z.id}))]),bn=z.agent?`${z.agent[0].toUpperCase()}${z.agent.slice(1)}`:"Subagent";return{permissions:dt(z.id,Zn,D).map((pr)=>({...pr,sessionID:z.id,originLabel:bn})),questions:dt(z.id,In,T).map((pr)=>({...pr,sessionID:z.id,originLabel:bn}))}}));if(We.current!==y)return;let K=dt(a,x,D),En=dt(a,B,T),kn=X.flatMap((z)=>z.permissions),J=X.flatMap((z)=>z.questions);W((z)=>z.sessionID===a?kd(z,{permissions:K,questions:En,childPermissions:kn,childQuestions:J}):z)},ti=async()=>{let y=(await Promise.allSettled([n.v2.provider.list({location:{directory:r}}),n.mcp.status({directory:r}),n.lsp.status({directory:r}),n.formatter.status({directory:r}),n.v2.command.list({location:{directory:r}})])).map((D)=>D.status==="fulfilled"?Ki(D.value):void 0),x={providers:me(y[0]),mcp:me(y[1]),lsp:me(y[2]),formatters:me(y[3])},B=po.current;if(B.providers!==x.providers||B.mcp!==x.mcp||B.lsp!==x.lsp||B.formatters!==x.formatters)po.current=x,W((D)=>({...D,services:x}));if(Array.isArray(y[4])){let D=y[4].map((T)=>({name:T.name,description:T.description}));if(Ae(!0),JSON.stringify(ni.current)!==JSON.stringify(D))ni.current=D,Be(D)}};cn(()=>{let a=new AbortController;Ld(n,{signal:a.signal,onEvent:(y)=>{if(y.type==="server.connected")return;if(y.type.startsWith("permission.")||y.type.startsWith("question."))We.current+=1;let x=y.data?.sessionID||y.data?.info?.id||y.data?.part?.sessionID,B=y.type==="session.idle"||y.type==="session.status"&&y.data?.status?.type==="idle",D=jr.current;if(B&&x===It.current?.id&&Fr.current&&D&&qt.current!==D){qt.current=D;let T=[at("sidebar","sidebar_display",{prompt:Fr.current})],G=Mi(At.current);if(G)At.current=G,T.push(at("working","working_complete",{prompt:Fr.current}));Promise.all(T)}W((T)=>{let G=y.type==="session.created"&&y.data?.info?.parentID===T.sessionID,X=T.subagents.some((K)=>K.sessionID===x);if(T.sessionID&&x&&x!==T.sessionID&&!G&&!X)return T;return Rd(T,y)})},onReconnect:async()=>{if(It.current)await Promise.all([Xe(It.current.id),ti()]);else await ti();W((y)=>y.error?.startsWith("Reconnecting to Free Code:")?{...y,error:void 0,retry:void 0}:y)},onRetry:(y)=>W((x)=>({...x,error:`Reconnecting to Free Code: ${bt(y,"The connection was interrupted.")}`}))}),ur(()=>a.abort())}),cn(()=>{if(Qt)return;let a=en();if(!a?.id)return;let y=()=>{Ye(a.id).catch(()=>{})};if(y(),Yt()!=="working")return;let x=setInterval(y,750);ur(()=>clearInterval(x))}),cn(()=>{ti()}),cn(()=>{if(f)return;let a=!1,y=i?ge(i):Si();S(n.v2.session.create({location:{directory:r},agent:"build",...y?{model:y}:{}})).then((x)=>{if(a)return;let B=Nt(P),D={...de(B,x),services:B.services};Ir.current=D,W(D),j(x)}).catch((x)=>W((B)=>({...B,status:"error",error:x.message}))),ur(()=>{a=!0})}),cn(()=>{if(!_t())return;let a=setTimeout(()=>$o(!1),1200);ur(()=>clearTimeout(a))}),cn(()=>{if(!en()||cr().kind!=="prompt"||mn()||P().pendingPermission||P().pendingQuestion){if(_n().length)Ar([]),Cr(0);return}let a=jf(),y=a.match(/^\/(\S*)$/);if(y){let T=y[1].toLowerCase(),G=Ii(Br(),{modes:Boolean(i),extensionCommands:mt()});if(Cr(0),!T){let K=new Map(G.map((kn)=>[kn.value,kn])),En=je().flatMap((kn)=>{let J=K.get(kn);return J?[{label:J.value,value:J.value,detail:J.description}]:[]});Ar([...En,{label:"All commands\u2026",value:Oa,detail:`${Math.max(0,G.length-En.length)} more`,action:"all-commands"}]);return}let X=G.flatMap((K,En)=>{let kn=K.value.slice(1).toLowerCase(),J=K.description.toLowerCase(),z=kn.startsWith(T)?0:kn.includes(T)?1:J.includes(T)?2:-1;return z<0?[]:[{item:K,index:En,rank:z}]});X.sort((K,En)=>K.rank-En.rank||K.index-En.index),Ar(X.slice(0,5).map(({item:K})=>({label:K.value,value:K.value,detail:K.description})));return}let x=a.match(/(?:^|\s)@([^\s]*)$/);if(!x){if(_n().length)Ar([]),Cr(0);return}let B=!1,D=setTimeout(()=>{S(n.v2.fs.find({location:{directory:r},query:x[1],type:"file",limit:"8"})).then((T)=>{if(!B)Cr(0),Ar(T.slice(0,5).map((G)=>({label:`@${G.path}`,value:G.path,detail:"Attach file context"})))}).catch(()=>{if(!B)Ar([])})},120);ur(()=>{B=!0,clearTimeout(D)})});let Qf=async(a)=>{An(!0);try{let y=await S(n.v2.session.get({sessionID:a}));if(i){let x=j1(y.model),B=x||Wn()||i;if(!x){let D=ge(B);await n.v2.session.switchModel({sessionID:y.id,model:D}),y={...y,model:D}}$t(B)}j(y),W((x)=>({...de(x,y),services:x.services})),Ze(),await Xe(a)}finally{An(!1),nn(void 0)}},$f=async(a)=>{let y=en();if(!y||!i)return;An(!0);try{let x=ge(a);await n.v2.session.switchModel({sessionID:y.id,model:x}),j({...y,model:x}),W((B)=>({...B,model:x})),$t(a),nn(void 0)}finally{An(!1)}},Bc=async(a="")=>{if(!i)throw Error("Mode switching is available for managed Free Code sessions.");let y=a.toLowerCase();if(y){let x=Jo.find((B)=>B.tier===y);if(!x)throw Error("Usage: /mode [free|super]");await $f(x);return}nn({kind:"modes",title:"Choose mode",options:Jo.map((x)=>({name:x.label,description:x.tier==="free"?"Everyday coding":"Maximum capability",value:x.tier}))})},Ac=async()=>{An(!0);try{let a=await Ht.list();Kt(a),nn(e1(a))}finally{An(!1)}},Hf=async(a,y)=>{let x=new AbortController;hr.current=x,An(!0);try{let B=await Ht.apply(a,y,x.signal);return Kt((D)=>o1(D,B)),ht(`${B.displayName} ${y==="install"?"installed and enabled":y==="enable"?"enabled":y==="disable"?"disabled":"uninstalled"}.`),B}catch(B){if(B?.name!=="AbortError")W((D)=>({...D,error:bt(B,"Extension action failed.")}));return}finally{if(hr.current===x)hr.current=void 0;An(!1)}},ei=async()=>{An(!0);try{let a=Wn()?ge(Wn()):en()?.model||Si(),y=await S(n.v2.session.create({location:{directory:r},agent:"build",...a?{model:a}:{}}));Fr.current="",jr.current="",Bt.current=0,qt.current="";let x=Nt(P),B={...de(x,y),services:x.services};Ir.current=B,W(B),j(y),nn(void 0),Ue(!1),un.current?.clear(),_r(""),Ze()}finally{An(!1)}},Cc=async(a="")=>{let y=await S(n.v2.session.list({directory:r,...a?{search:a}:{},limit:100}));nn({kind:"sessions",title:a?`Sessions \xB7 ${a}`:"Sessions",options:y.map((x)=>({name:x.title||"Untitled",description:`${Uu(x.time?.updated)} \xB7 ${x.id}`,value:x.id}))})},Fc=async()=>{let a=await S(n.v2.agent.list({location:{directory:r}}));nn({kind:"agents",title:"Agents",options:a.map((y)=>({name:y.id,description:y.description||y.id,value:y.id}))})},jc=()=>{let a=_n()[Ko()]||_n()[0];if(!a||!un.current)return;if(a.action==="all-commands"){if(!en())return;un.current.clear(),_r(""),Ar([]),Cr(0),nn(ae(Br(),{modes:Boolean(i),extensionCommands:mt()}));return}let y=a.label.startsWith("@")?jf().replace(/@[^\s]*$/,`${a.label} `):`${a.value} `;un.current.replaceText(y),un.current.cursorOffset=y.length,_r(y),Ar([]),Cr(0)},Kf=()=>{L.suspend();try{let a=Vd(un.current?.plainText||"");if(un.current?.replaceText(a),un.current)un.current.cursorOffset=a.length;_r(a)}catch(a){W((y)=>({...y,error:a instanceof Error?a.message:String(a)}))}finally{L.resume()}},Sf=()=>{let a=P().transcript.map((y)=>`${y.type==="user"?"You":y.type==="tool"?"Tool":"Freecode"}: ${y.text}${y.output?`
|
|
14
|
-
${y.output}`:""}`).join(`
|
|
15
|
-
|
|
16
|
-
`);if(!L.copyToClipboardOSC52(a))W((y)=>({...y,error:"Terminal clipboard is unavailable."}));else ht("Conversation copied to the clipboard.")},Pc=(a)=>{if(a.button!==0)return;let y=L.getSelection()?.getSelectedText();if(!y)return;if(a.preventDefault(),a.stopPropagation(),L.clearSelection(),!L.copyToClipboardOSC52(y))W((x)=>({...x,error:"Terminal clipboard is unavailable."}))},Uc=async()=>{let a=en()?.id,y=Io.current;qo.current+=1;try{let x=await s().catch(()=>{return});if(!x?.data||!x.mime.startsWith("image/")||en()?.id!==a||Io.current!==y)return;let B=`clipboard-${++Rc.current}`;Ho((D)=>[...D,{id:B,mime:x.mime,filename:`${B}.png`,url:`data:${x.mime};base64,${x.data}`}])}finally{qo.current-=1}},Tc=()=>Ho((a)=>a.slice(0,-1)),oi=(a)=>{Fr.current=a,jr.current=Ct(`${It.current?.id||r}:${Date.now()}:${a}`),Bt.current=0,At.current=e?.baseUrl?1:0,qt.current="",_o(0),at("working","working_initial",{prompt:a,count:3}),Dc(a)},re=async(a,y=[])=>{let x=en();if(!x)return;let B=a.trim(),[D,...T]=B.split(/\s+/),G=T.join(" ");if(D==="/new"||D==="/clear")return ei();if(D==="/extensions")return Ac();let X=Dt()?ff(Wr(),D,lt()):void 0;if(!Dt()&&ff(Wr(),D,lt()))throw Error("Free Code is still loading project commands. Try the extension again in a moment.");if(X){if(P().status==="working"||P().pendingPermission||P().pendingQuestion)throw Error(`Finish or interrupt the active agent interaction before starting ${X.extension.displayName}.`);let J=Fe.resolve(X);if(!J)throw Error(`${X.extension.displayName} is incompatible with this version of Free Code.`);let z=new AbortController;Dr.current=z,Vr.current="closed",$o(!1),Kn({definition:J,invocation:X,phase:"launching"});try{let Zn=await J.launch(X,z.signal);Kn({definition:J,invocation:X,phase:"active",session:Zn}),await Zn.done,ht(J.closureMessage(Vr.current))}catch(Zn){if(!J.isCancellation(Zn)&&!z.signal.aborted)throw Zn}finally{if(Dr.current===z)Dr.current=void 0;Kn(void 0)}return}if(D==="/sessions")return Cc(G);if(D==="/mode")return Bc(G);if(D==="/agents")return Fc();if(D==="/compact"||D==="/summarize"){await n.session.summarize({sessionID:x.id,providerID:x.model?.providerID,modelID:x.model?.id}),ht("Session compacted.");return}if(D==="/interrupt"){await n.session.abort({sessionID:x.id});return}if(D==="/details"){W((J)=>({...J,showToolDetails:!J.showToolDetails}));return}if(D==="/sidebar"){Ue((J)=>!J);return}if(D==="/clear-screen"){W((J)=>({...J,transcript:[],assistantText:"",reasoningText:""}));return}if(D==="/clear-error"){W((J)=>({...J,error:void 0}));return}if(D==="/diff"){let J=await S(n.session.diff({sessionID:x.id}));if(W((z)=>({...z,files:J})),J.length)nn({kind:"diff",title:"Diff",files:J,selected:0});else ht(_u(r)?"No changed files.":"Diffs are unavailable until this project is a Git repository.");return}if(D==="/todos"){let J=await S(n.session.todo({sessionID:x.id}));W((z)=>({...z,todos:J})),ht(J.map((z)=>`${z.status||"pending"} \xB7 ${z.content||z.title||String(z)}`).join(`
|
|
17
|
-
`)||"No todos.");return}if(D==="/rename"){if(!G)throw Error("Usage: /rename New session title");let J=await S(n.session.update({sessionID:x.id,title:G}));j(J),ht(`Session renamed to \u201C${G}\u201D.`);return}if(D==="/fork"){let J=await S(n.session.fork({sessionID:x.id}));await Qf(J.id);return}if(D==="/delete"){nn({kind:"confirm",title:"Delete session?",message:`Permanently delete ${x.title||x.id}?`,action:"delete-session",options:[{name:"Cancel",description:"Keep this session",value:"cancel"},{name:"Delete permanently",description:"Messages and history will be removed",value:"confirm"}]});return}if(D==="/children"){let J=await S(n.session.children({sessionID:x.id}));nn({kind:"sessions",title:"Child sessions",options:J.map((z)=>({name:z.title||"Untitled",description:z.id,value:z.id}))});return}if(D==="/timeline"){let J=no(await S(n.session.messages({sessionID:x.id})));nn({kind:"timeline",title:"Session timeline",items:J.map((z)=>({id:z.id,type:z.type,text:z.text}))});return}if(D==="/undo"){let z=[...no(await S(n.session.messages({sessionID:x.id})))].reverse().find((Zn)=>Zn.type==="user"&&Zn.id);if(!z?.id)throw Error("There is no user turn to undo.");await n.session.revert({sessionID:x.id,messageID:z.id}),await Xe(x.id);return}if(D==="/redo"){await n.session.unrevert({sessionID:x.id}),await Xe(x.id);return}if(D==="/themes"){nn({kind:"themes",title:"Themes",options:Object.entries(lr).map(([J,z])=>({name:z.name,description:J===U()?"Current theme":"Persist for future launches",value:J}))});return}if(D==="/editor"){Kf();return}if(D==="/copy"||D==="/export"){Sf();return}if(D==="/help"){nn(ae(Br(),{modes:Boolean(i),extensionCommands:mt()}));return}if(D==="/exit"||D==="/quit"||D==="/q"){Rt(L);return}let K=Br().find((J)=>`/${J.name}`===D);if(K){oi(B),W((J)=>pe(J,B)),await n.session.command({sessionID:x.id,command:K.name,arguments:G}),await Ye(x.id);return}if(B.startsWith("/"))throw Error(`Unknown command: ${D}. Type /help.`);if(B.startsWith("!")){let J=B.slice(1).trim();if(!J)throw Error("Type a shell command after !");oi(B),W((z)=>pe(z,B)),await n.session.shell({sessionID:x.id,command:J,agent:x.agent||"build",...x.model?{model:{providerID:x.model.providerID,modelID:x.model.id}}:{}}),await Ye(x.id);return}let En=B||y.map((J,z)=>`[Image ${z+1}]`).join(" ");oi(En),W((J)=>pe(J,En));let kn=x.model?{providerID:x.model.providerID,modelID:x.model.id}:void 0;await n.session.promptAsync({sessionID:x.id,agent:x.agent||"build",...kn?{model:kn}:{},parts:Jd(B,r,y)}),await Ye(x.id)},_f=(a,y)=>{if(!e?.baseUrl||!y.impressionToken)return;yi({...e,type:a,card:y,sessionPseudonym:wt(),turnPseudonym:jr.current}).catch(()=>{})},Qe=(a)=>{if(a.kind==="sponsor"&&a.placement==="working")_o((B)=>B||Date.now());let x=`${a.placement==="welcome"?wt():jr.current||wt()}:${a.id}:${a.revision}:${a.placement}:${a.stage}`;if(!bd(Jf.current,x))return;_f("impression",a)},ii=(a)=>{if(un.current?.replaceText(a),un.current)un.current.cursorOffset=a.length;_r(a)},zc=(a)=>{if(a.provider!=="gravity-index"||!e?.baseUrl)return;let y=typeof a.metadata?.searchId==="string"?a.metadata.searchId:"",x=typeof a.metadata?.serviceSlug==="string"?a.metadata.serviceSlug:"";if(!y||!x)return;let B=`${y}:${x}:started`;if(ze.current.has(B))return;ze.current.add(B),si({...e,operation:"report_integration",searchId:y,serviceSlug:x,status:"started",metadata:{source:"card_action",cardId:a.id},sessionPseudonym:wt(),turnPseudonym:jr.current}).catch(()=>{ze.current.delete(B)})},te=(a)=>{let y=st(a),x=y?.action;if(!x)return;if(Ec((B)=>{let D=new Set(B);if(D.add(y.id),typeof y.metadata?.candidateId==="string")D.add(y.metadata.candidateId);return D}),A()<=120)Ue(!1);if(_f("action",y),zc(y),x.type==="open_url"){k(x.url);return}if(x.type==="open_command"){re(x.command);return}if(x.type==="prefill_prompt"){ii(x.value);return}if(x.type==="invoke_gravity_index"){ii(`Find the best service for ${x.query} using Gravity Index`);return}if(x.type==="begin_integration"){ii(`Set up ${x.serviceSlug} for this project using Gravity Index`);return}if(x.type==="open_modal")re(x.modal==="diff"?"/diff":x.modal==="todos"?"/todos":`/${x.modal}`)},If=()=>{let a=Ir.current,y=Wf.current;if(y.busy||y.modalOpen||y.inputModeKind!=="prompt"||a.pendingPermission||a.pendingQuestion)return;let x=La(a,Vf.current,Wn()?.label,Gf.current,ne(),Uf());return x?.action?.type==="open_url"?x:void 0},Jc=()=>{let a=If();if(!a)return!1;return te(a),!0},qf=async(a)=>{let y=en(),x=P().pendingQuestion;if(!x||!y)return;let B=[...xc(),a];if(Xo()<x.questions.length-1){Qo(B),Yo((D)=>D+1),St({kind:"prompt"});return}await zu(n,x.sessionID||y.id,x,B),Qo([]),Yo(0),St({kind:"prompt"})},Vc=async()=>{if(sr()||!en())return;let a=un.current?.plainText.trim()||"",y=Pe();if(!a&&y.length===0)return;un.current?.clear(),_r(""),An(!0);try{if(cr().kind==="question-custom")await qf([a]);else{let x=!a.startsWith("/")&&!a.startsWith("!");if(await re(a,x?y:[]),x)Ze()}}catch(x){W((B)=>({...B,error:x instanceof Error?x.message:String(x)}))}finally{An(!1)}},pf=({event:a,consume:y})=>{if(hr.current&&a.eventType!=="release"&&a.ctrl&&a.name==="c"){y(),hr.current.abort();return}let x=Bn();if(x?.phase==="launching"){if(y(),a.eventType!=="release"&&a.ctrl&&a.name==="c")Dr.current?.abort(),Kn(void 0);return}if(x?.phase==="active"&&x.session){if(y(),a.eventType!=="release"&&a.ctrl&&a.name==="c"){x.session.stop();return}x.session.handleKey(a,{kittyKeyboard:Boolean(L.capabilities?.kitty_keyboard)})}},Gc=E.intercept("key",pf,{priority:1000}),Wc=E.intercept("key",pf,{priority:1000,release:!0});ur(()=>{Wc(),Gc()}),Xn(()=>({priority:100,commands:[{name:"app.cancel-or-exit",title:"Cancel or exit",desc:"Clear the prompt, stop the current turn, or exit Free Code",category:"Application",run:()=>{if((un.current&&!un.current.isDestroyed?un.current.plainText:"").trim()||Pe().length||qo.current>0){un.current?.clear(),_r(""),Ze(),Ar([]),Cr(0);return}let y=en();if(P().status==="working"&&y)n.session.abort({sessionID:y.id});else if(_t())Rt(L);else $o(!0)}},{name:"app.dismiss",title:"Dismiss",desc:"Close the active view or stop the current turn",category:"Application",run:()=>{if(mn()){nn(void 0);return}if(gt()){Ue(!1);return}if(_n().length){Ar([]),Cr(0);return}if(cr().kind!=="prompt"){St({kind:"prompt"});return}let a=en();if(P().status==="working"&&a)n.session.abort({sessionID:a.id})}},{name:"card.open",title:"Open recommendation",desc:"Open the visible recommendation",category:"Application",run:Jc},{name:"diff.previous",title:"Previous changed file",category:"Diff",run:()=>nn((a)=>a?.kind==="diff"?{...a,selected:(a.selected-1+a.files.length)%a.files.length}:a)},{name:"diff.next",title:"Next changed file",category:"Diff",run:()=>nn((a)=>a?.kind==="diff"?{...a,selected:(a.selected+1)%a.files.length}:a)},{name:"suggestion.complete",title:"Complete suggestion",category:"Prompt",run:jc},{name:"suggestion.previous",title:"Previous suggestion",category:"Prompt",run:()=>Cr((a)=>(a-1+_n().length)%_n().length)},{name:"suggestion.next",title:"Next suggestion",category:"Prompt",run:()=>Cr((a)=>(a+1)%_n().length)},{name:"commands.open",title:"Open command palette",category:"Application",run:()=>nn(ae(Br(),{modes:Boolean(i),extensionCommands:mt()}))},{name:"session.new",title:"New session",category:"Session",run:ei},{name:"prompt.edit",title:"Edit prompt externally",category:"Prompt",run:Kf},{name:"prompt.paste-image",title:"Paste image from clipboard",category:"Prompt",run:Uc},{name:"prompt.attachment.remove-last",title:"Remove last image attachment",category:"Prompt",run:Tc},{name:"conversation.copy",title:"Copy conversation",category:"Session",run:Sf}]})),Xn(()=>({priority:100,bindings:[{key:"ctrl+c",cmd:"app.cancel-or-exit"},{key:"ctrl+k",cmd:"commands.open"}]})),Xn(()=>({priority:120,enabled:()=>!sr()&&!mn()&&cr().kind==="prompt",bindings:[{key:"ctrl+v",cmd:"prompt.paste-image",preventDefault:!1}]})),Xn(()=>({priority:120,enabled:()=>Pe().length>0&&!sr()&&!mn()&&cr().kind==="prompt"&&!(un.current&&!un.current.isDestroyed?un.current.plainText:""),bindings:[{key:"backspace",cmd:"prompt.attachment.remove-last"}]})),Xn(()=>({priority:100,enabled:()=>Boolean(mn()||gt()||_n().length||cr().kind!=="prompt"||P().status==="working"&&en()),bindings:[{key:"escape",cmd:"app.dismiss"}]})),Xn(()=>({priority:100,enabled:()=>Boolean(If()),bindings:[{key:"meta+o",cmd:"card.open"},{key:"super+o",cmd:"card.open"},{key:"ctrl+o",cmd:"card.open"}]})),Xn(()=>({priority:100,enabled:()=>mn()?.kind==="diff",bindings:[{key:"left",cmd:"diff.previous"},{key:"right",cmd:"diff.next"}]})),Xn(()=>({priority:100,enabled:()=>_n().length>0&&!mn(),bindings:[{key:"tab",cmd:"suggestion.complete"},{key:"up",cmd:"suggestion.previous"},{key:"down",cmd:"suggestion.next"}]})),Xn(()=>({priority:110,enabled:()=>{if(!_n().length||mn())return!1;let a=_n()[Ko()]||_n()[0],y=un.current&&!un.current.isDestroyed?un.current.plainText.trim():"";return $u(y,a,lt())},bindings:[{key:"return",cmd:"suggestion.complete"},{key:"kpenter",cmd:"suggestion.complete"}]})),Xn(()=>({priority:100,enabled:()=>!sr(),bindings:[{key:"ctrl+n",cmd:"session.new"}]})),Xn(()=>({priority:100,enabled:()=>!mn(),bindings:[{key:"ctrl+e",cmd:"prompt.edit"},{key:"ctrl+y",cmd:"conversation.copy"}]}));let Zc=async(a,y)=>{let x=en(),B=mn();if(!y||!x||!B||B.kind==="diff"||B.kind==="timeline")return;let D=String(y.value);if(B.kind==="commands"){nn(void 0),await re(D);return}if(B.kind==="extensions"){let T=Wr().find((G)=>G.id===D);if(T)nn(df(T));return}if(B.kind==="extension-actions"){let[T,G]=D.split(":",2);if(T==="run"){nn(void 0),await re(G);return}if(T==="uninstall"){let X=Wr().find((K)=>K.id===G);if(!X)return;nn({kind:"confirm",title:`Uninstall ${X.displayName}?`,message:"The extension command and downloaded runtime will be removed.",action:"uninstall-extension",extensionId:X.id,options:[{name:"Cancel",description:"Keep the extension",value:"cancel"},{name:"Uninstall",description:"Remove extension files",value:"confirm"}]});return}if(["install","enable","disable"].includes(T)&&G.startsWith("freecode.")){let X=await Hf(G,T);if(X)nn(df(X))}return}if(B.kind==="modes"){let T=Jo.find((G)=>G.tier===D);if(T)await $f(T);return}if(B.kind==="themes"){ln(D),Td(D),nn(void 0);return}if(B.kind==="confirm"){if(nn(void 0),D==="confirm"&&B.action==="delete-session")await n.session.delete({sessionID:x.id}),await ei();if(D==="confirm"&&B.action==="uninstall-extension"&&B.extensionId)await Hf(B.extensionId,"uninstall");return}An(!0);try{if(B.kind==="sessions")return void await Qf(D);if(B.kind==="agents")await n.v2.session.switchAgent({sessionID:x.id,agent:D}),j({...x,agent:D}),W((T)=>({...T,agent:D}))}finally{nn(void 0),An(!1)}},vc=(a)=>{Oc((y)=>{let x=new Set(y);if(x.has(a))x.delete(a);else x.add(a);return x})},fi=q(()=>U1(P(),So(),Wn()?.label,Xf(),ne(),Uf())),Xc=q(()=>!mn()&&!P().pendingPermission&&(!P().pendingQuestion||cr().kind==="question-custom")),qr=q(()=>Boolean(mn()||P().pendingPermission||P().pendingQuestion||P().error)),$e=q(()=>fi().sidebarCard),nd=q(()=>qr()?void 0:!Pr()&&!gt()&&$e()?.kind==="index"?$e():fi().workingCard),di=q(()=>c==="rail"&&Boolean(nd())&&!_t()&&!mn()&&!P().pendingPermission&&(!P().pendingQuestion||cr().kind==="question-custom")),ui=q(()=>Math.max(32,A()-4-(Pr()?42:0))),rd=q(()=>Math.max(8,Math.round(ui()*Zd))),Yc=q(()=>ui()-rd()),td=q(()=>qr()&&["sponsor","index"].includes($e()?.kind||"")?void 0:$e()),ee=q(()=>Wn()?.label),He=q(()=>_t()?"Press Ctrl+C again to exit":mn()?.kind==="diff"?"\u2190/\u2192 files \xB7 Esc close diff":mn()?"\u2191/\u2193 navigate \xB7 Enter select \xB7 Esc close":P().pendingPermission?"\u2191/\u2193 review \xB7 Enter choose permission \xB7 Ctrl+C interrupt":P().pendingQuestion&&cr().kind!=="question-custom"?"\u2191/\u2193 navigate \xB7 Enter select \xB7 rejection remains available":""),Qc=()=>tn(ru,{textarea:un,initialValue:d,get focused(){return Xc()},get busy(){return sr()},get mode(){return cr().kind},get agent(){return P().agent},get compact(){return F()<22},get suggestions(){return _n()},get selectedSuggestion(){return Ko()},get attachmentCount(){return Pe().length},get variant(){return di()?"rail":"current"},get adAttached(){return di()},get frameWidth(){return ui()},get railInset(){return rd()},onSubmit:()=>void Vc(),onDraftChange:()=>{let a=un.current;if(!a||a.isDestroyed)return;_r(a.plainText||"")}}),$c=q(()=>{let a=mn();return a?.kind==="diff"?a:void 0}),Hc=q(()=>{let a=mn();return a?.kind==="timeline"?a:void 0}),Kc=q(()=>{let a=mn();return a&&a.kind!=="diff"&&a.kind!=="timeline"?a:void 0}),Sc=q(()=>cr().kind!=="question-custom"?P().pendingQuestion:void 0),_c=()=>tn(xa,{get fallback(){return Qc()},get children(){return[tn(ke,{get when(){return $c()},children:(a)=>tn(Yu,{get modal(){return a()},get wide(){return Pr()}})}),tn(ke,{get when(){return Hc()},children:(a)=>tn(Qu,{get modal(){return a()}})}),tn(ke,{get when(){return Kc()},children:(a)=>(()=>{var y=dr("box"),x=dr("select");return Ee(y,x),sn(y,"titleAlignment","center"),$n(y,(()=>{var B=Hn(()=>a().kind==="confirm");return()=>B()&&(()=>{var D=dr("text");return $n(D,()=>a().message),Lt((T)=>sn(D,"fg",_.yellow,T)),D})()})(),x),$n(y,(()=>{var B=Hn(()=>!!(a().kind==="extension-actions"&&a().message));return()=>B()&&(()=>{var D=dr("text");return $n(D,()=>a().message),Lt((T)=>sn(D,"fg",_.muted,T)),D})()})(),x),sn(x,"style",{flexGrow:1,width:"100%"}),sn(x,"focused",!0),sn(x,"onSelect",Zc),sn(x,"showDescription",!0),sn(x,"wrapSelection",!0),sn(x,"showScrollIndicator",!0),Lt((B)=>{var D=a().title,T={height:Math.min(18,a().options.length*2+(a().message?7:2)),flexShrink:0,border:!0,borderColor:a().kind==="confirm"?_.red:_.blue,customBorderChars:vn,backgroundColor:_.panel,paddingLeft:1,paddingRight:1},G=a().options;return D!==B.e&&(B.e=sn(y,"title",D,B.e)),T!==B.t&&(B.t=sn(y,"style",T,B.t)),G!==B.a&&(B.a=sn(x,"options",G,B.a)),B},{e:void 0,t:void 0,a:void 0}),y})()}),tn(ke,{get when(){return P().pendingPermission},children:(a)=>tn(vu,{client:n,get sessionID(){return a().sessionID||en()?.id},get request(){return a()},get busy(){return sr()},setBusy:An,onError:(y)=>W((x)=>({...x,error:bt(y)}))})}),tn(ke,{get when(){return Sc()},children:(a)=>tn(Xu,{client:n,get sessionID(){return a().sessionID||en()?.id},get request(){return a()},get index(){return Xo()},get busy(){return sr()},setBusy:An,onAnswer:qf,onCustom:()=>St({kind:"question-custom",index:Xo()}),onError:(y)=>W((x)=>({...x,error:bt(y)}))})})]}}),Ic=()=>tn(Ru,{get status(){return P().status},get retry(){return P().retry},get card(){return Hn(()=>!!qr())()?void 0:nd()},get exitArmed(){return _t()},get variant(){return di()?"rail":"current"},get railWidth(){return Yc()},get viewable(){return!qr()},onAction:te,onImpression:Qe}),ed=()=>[Hn(Ic),Hn(_c)],qc=q(()=>fi().home);return tn(eo.Provider,{value:_,get children(){return tn(xf,{get when(){return Bn()},get fallback(){return tn(xf,{get when(){return qc()},get fallback(){return(()=>{var a=dr("box"),y=dr("box"),x=dr("scrollbox"),B=dr("box");return Ee(a,y),Ee(y,x),Ee(y,B),sn(y,"style",{flexGrow:1,minWidth:1,minHeight:1,flexDirection:"column",paddingBottom:1,paddingLeft:2,paddingRight:2}),ha((D)=>{Lc.current=D},x),sn(x,"stickyScroll",!0),sn(x,"onMouseUp",Pc),sn(x,"style",{flexGrow:1,minHeight:1,paddingTop:1}),$n(x,tn(Au,{get state(){return P()},get expandedTools(){return Mc()},onToggleTool:vc,onOpenLink:k})),sn(B,"style",{flexShrink:0}),$n(B,ed,null),$n(B,(()=>{var D=Hn(()=>!!(He()&&mn()));return()=>D()&&(()=>{var T=dr("text");return $n(T,He),Lt((G)=>sn(T,"fg",_.muted,G)),T})()})(),null),$n(a,(()=>{var D=Hn(()=>!!Pr());return()=>D()&&tn(le,{get state(){return P()},cwd:r,get title(){return en()?.title},get modelLabel(){return ee()},get card(){return td()},get cardViewable(){return!qr()},onCardAction:te,onCardImpression:Qe})})(),null),$n(a,(()=>{var D=Hn(()=>!!(!Pr()&>()));return()=>D()&&(()=>{var T=dr("box");return sn(T,"style",{position:"absolute",top:0,right:0,bottom:0,width:42}),$n(T,tn(le,{get state(){return P()},cwd:r,get title(){return en()?.title},get modelLabel(){return ee()},get card(){return td()},get cardViewable(){return!qr()},onCardAction:te,onCardImpression:Qe})),T})()})(),null),Lt((D)=>sn(a,"style",{width:"100%",height:"100%",flexDirection:"row",backgroundColor:_.background},D)),a})()},get children(){return tn(ko,{cwd:r,get modelLabel(){return ee()},get compactHeader(){return F()<22||_n().length>0&&F()<28||P().monetization.welcome.cards.length>0&&F()<28},bannerEffect:g,get interaction(){return[Hn(ed),Hn(()=>Hn(()=>!!(He()&&mn()))()&&(()=>{var a=dr("text");return $n(a,He),Lt((y)=>sn(a,"fg",_.muted,y)),a})())]},get status(){return Hn(()=>P().status==="connecting")()?"Connecting":P().status==="working"?"Working":"Ready"},get cards(){return Hn(()=>!!qr())()?[]:P().monetization.welcome.cards},get wide(){return Pr()},get cardsViewable(){return!qr()},onCardAction:te,onCardImpression:Qe})}})},children:(a)=>(()=>{var y=dr("box"),x=dr("box");return Ee(y,x),sn(x,"style",{flexGrow:1,minWidth:1,minHeight:1}),$n(x,tn(xf,{get when(){return Hn(()=>a().phase==="active")()?a().session:void 0},get fallback(){return a().definition.renderLaunch()},children:(B)=>a().definition.renderMain(B())})),$n(y,(()=>{var B=Hn(()=>!!Pr());return()=>B()&&tn(le,{get state(){return P()},cwd:r,get title(){return en()?.title},get modelLabel(){return ee()},experienceActive:!0,get experiencePanel(){return a().definition.renderSidebar(a().session)}})})(),null),$n(y,(()=>{var B=Hn(()=>!!(!Pr()&>()));return()=>B()&&(()=>{var D=dr("box");return sn(D,"style",{position:"absolute",top:0,right:0,bottom:0,width:42}),$n(D,tn(le,{get state(){return P()},cwd:r,get title(){return en()?.title},get modelLabel(){return ee()},experienceActive:!0,get experiencePanel(){return a().definition.renderSidebar(a().session)}})),D})()})(),null),Lt((B)=>sn(y,"style",{width:"100%",height:"100%",flexDirection:"row",backgroundColor:_.background},B)),y})()})}})}function z1({authoritativeIdle:n=!1}={}){let r=new Map,t=new Map,e=new Map,o=new Map,i=new Map,f=new Map,u=new Set,d=0,l=!1,m=(g,c={})=>{let h={id:`evt_mock_${++d}`,type:g,data:c};for(let R of u)R.push(h)},w=(g,c)=>{let h=t.get(g)||[];if(h.push({info:{id:`msg_mock_${++d}`,role:"assistant"},parts:[{type:"text",text:c}]}),t.set(g,h),m("session.next.text.delta",{sessionID:g,delta:c,assistantMessageID:h.at(-1).info.id,textID:`part_mock_${d}`}),m("session.next.text.ended",{sessionID:g,text:c,assistantMessageID:h.at(-1).info.id}),o.set(g,{type:"idle"}),n)m("session.status",{sessionID:g,status:{type:"idle"}});else m("session.idle",{sessionID:g})},b={v2:{health:{get:async()=>({healthy:!0,version:"mock"})},event:{subscribe:async({signal:g}={})=>{let c=Ba(g,()=>u.delete(c));return u.add(c),c.push({id:`evt_mock_${++d}`,type:"server.connected",data:{}}),{stream:c.stream}}},session:{create:async({location:g,agent:c="build",model:h}={})=>{let R={id:`ses_mock_${++d}`,title:"Mock Free Code session",agent:c,model:h||{providerID:"freecode",id:"mock"},location:g||{directory:process.cwd()}};return r.set(R.id,R),t.set(R.id,[]),o.set(R.id,{type:"idle"}),m("session.created",{info:R}),R},get:async({sessionID:g})=>r.get(g),list:async()=>[...r.values()],status:async()=>Object.fromEntries(o),compact:async({sessionID:g})=>{return m("session.compacted",{sessionID:g}),!0},switchModel:async({sessionID:g,model:c})=>{return r.set(g,{...r.get(g),model:c}),!0},switchAgent:async({sessionID:g,agent:c})=>{return r.set(g,{...r.get(g),agent:c}),!0},permission:{list:async({sessionID:g})=>[...e.values()].filter((c)=>c.sessionID===g&&c.kind==="permission"&&c.protocol==="v2").map((c)=>c.request),reply:async({sessionID:g,requestID:c,reply:h})=>O(g,c,h,"v2")},question:{list:async({sessionID:g})=>[...e.values()].filter((c)=>c.sessionID===g&&c.kind==="question"&&c.protocol==="v2").map((c)=>c.request),reply:async({sessionID:g,requestID:c,questionV2Reply:h})=>k(g,c,h.answers,"v2"),reject:async({sessionID:g,requestID:c})=>s(g,c,"v2")}},model:{list:async()=>[{id:"mock",providerID:"freecode",name:"Mock"}]},provider:{list:async()=>[{id:"freecode",name:"Free Code Mock",api:{type:"native",settings:{}},request:{headers:{},body:{}}}]},integration:{list:async()=>[{id:"freecode",name:"Free Code Mock",methods:[{type:"env",names:["FREECODE_MOCK_KEY"]}],connections:[{type:"env",name:"FREECODE_ENGINE"}]}],connect:{key:async()=>!0,oauth:async()=>({attemptID:"attempt_mock",url:"https://example.com/mock-auth",instructions:"Mock authorization opened.",mode:"code",time:{created:Date.now(),expires:Date.now()+60000}})},attempt:{complete:async()=>!0,cancel:async()=>!0,status:async()=>({status:"pending"})}},fs:{find:async({query:g=""}={})=>[{path:"README.md",type:"file"},{path:"packages/tui/src/app.tsx",type:"file"}].filter((c)=>c.path.toLowerCase().includes(g.toLowerCase()))},command:{list:async()=>[{name:"mock-command",template:"",description:"Mock project command",type:"command",location:{directory:process.cwd()}}]},agent:{list:async()=>[{id:"build",description:"Build"}]}},session:{status:async()=>Object.fromEntries(o),promptAsync:async({sessionID:g,parts:c})=>{let h=c?.filter((M)=>M.type==="text").map((M)=>M.text).join(`
|
|
18
|
-
`)||"",R=t.get(g)||[];if(R.push({info:{id:`msg_mock_${++d}`,role:"user"},parts:c||[{type:"text",text:h}]}),t.set(g,R),m("session.status",{sessionID:g,status:{type:"busy"}}),o.set(g,{type:"busy"}),m("session.next.tool.called",{sessionID:g,callID:"mock-read",tool:"Inspect project",input:{}}),m("session.next.tool.success",{sessionID:g,callID:"mock-read",result:"ok"}),h.includes("[subagent]")||h.includes("[silent-subagent]")){let M=h.includes("[silent-subagent]"),L=r.get(g),E=`ses_mock_${++d}`,N={id:E,parentID:g,title:"Inspect the project",agent:"explore",model:L?.model,location:L?.location,time:{created:Date.now(),updated:Date.now()}},A={id:`part_mock_${++d}`,sessionID:g,messageID:`msg_mock_${++d}`,type:"tool",callID:`call_mock_${d}`,tool:"task",state:{status:"running",input:{subagent_type:"explore",description:"Inspect the project"},metadata:{sessionId:E},time:{start:Date.now()}}};r.set(E,N),t.set(E,[]),o.set(E,{type:"busy"}),R.push({info:{id:A.messageID,role:"assistant",sessionID:g},parts:[A]}),i.set(E,{parentID:g,taskPart:A}),m("session.created",{info:N}),m("message.part.updated",{sessionID:g,part:A}),m("session.status",{sessionID:E,status:{type:"busy"}});for(let[F,U]of["read","bash"].entries()){let ln={id:`perm_subagent_${F+1}_${d}`,sessionID:E,permission:U,patterns:[U==="read"?"packages/**":"git status"],metadata:{},always:[]};if(e.set(ln.id,{kind:"permission",protocol:"v2",sessionID:E,request:ln}),!M)m("permission.v2.asked",ln)}return{}}if(h.includes("[permission]")){let M={id:"perm_mock",sessionID:g,permission:"edit",patterns:["example.txt"]};return e.set(M.id,{kind:"permission",protocol:"stable",sessionID:g,request:M}),m("permission.asked",M),{}}if(h.includes("[question]")){let M={id:"question_mock",sessionID:g,questions:[{question:"Choose a direction",options:[{label:"A"},{label:"B"}]}]};return e.set(M.id,{kind:"question",protocol:"stable",sessionID:g,request:M}),m("question.asked",M),{}}if(h.includes("[multi-question]")){let M={id:"question_multi_mock",sessionID:g,questions:[{header:"Scope",question:"Which areas should change?",multiple:!0,custom:!1,options:[{label:"TUI",description:"Terminal interface"},{label:"Tests",description:"Automated coverage"}]},{header:"Priority",question:"What should ship first?",custom:!0,options:[{label:"Safety",description:"Permission and question gates"},{label:"Speed",description:"Startup and navigation"}]}]};return e.set(M.id,{kind:"question",protocol:"stable",sessionID:g,request:M}),m("question.asked",M),{}}if(h.includes("[hang]"))return{};return w(g,`Mock Free Code engine received: ${h}
|
|
19
|
-
`),{}},abort:async({sessionID:g})=>{return o.set(g,{type:"idle"}),m("session.error",{sessionID:g,error:{name:"AbortError",message:"Interrupted"}}),!0},delete:async({sessionID:g})=>{return t.delete(g),o.delete(g),r.delete(g)},messages:async({sessionID:g})=>t.get(g)||[],diff:async()=>[],todo:async()=>[],update:async({sessionID:g,title:c})=>{let h={...r.get(g),title:c};return r.set(g,h),h},children:async({sessionID:g})=>[...r.values()].filter((c)=>c.parentID===g),fork:async({sessionID:g})=>{let c=r.get(g),h={...c,id:`ses_mock_${++d}`,title:`${c?.title||"Session"} fork`,parentID:g};return r.set(h.id,h),t.set(h.id,[...t.get(g)||[]]),h},revert:async({sessionID:g,messageID:c})=>{let h=t.get(g)||[],R=h.findIndex((M)=>M.info.id===c);if(R>=0)f.set(g,h.slice(R)),t.set(g,h.slice(0,R));return!0},unrevert:async({sessionID:g})=>{return t.set(g,[...t.get(g)||[],...f.get(g)||[]]),f.delete(g),!0},share:async()=>({url:"https://example.com/mock-share"}),unshare:async()=>!0,summarize:async({sessionID:g})=>{return m("session.compacted",{sessionID:g}),!0},shell:async({sessionID:g,command:c})=>{return w(g,`Mock shell: ${c}
|
|
20
|
-
`),!0},command:async({sessionID:g,command:c})=>{return w(g,`Mock command: ${c}
|
|
21
|
-
`),!0}},mcp:{status:async()=>({"mock-mcp":{status:"connected"}})},lsp:{status:async()=>[{id:"typescript",status:"connected"}]},formatter:{status:async()=>[{id:"prettier",status:"ready"}]},permission:{list:async()=>[...e.values()].filter((g)=>g.kind==="permission"&&g.protocol==="stable").map((g)=>g.request),reply:async({requestID:g,reply:c})=>{let h=e.get(g);return O(h?.sessionID,g,c,"stable")}},question:{list:async()=>[...e.values()].filter((g)=>g.kind==="question"&&g.protocol==="stable").map((g)=>g.request),reply:async({requestID:g,answers:c})=>{let h=e.get(g);return k(h?.sessionID,g,c,"stable")},reject:async({requestID:g})=>{let c=e.get(g);return s(c?.sessionID,g,"stable")}}};function O(g,c,h,R){e.delete(c),m(R==="v2"?"permission.v2.replied":"permission.replied",{sessionID:g,requestID:c,reply:h});let M=i.get(g);if(M){if(![...e.values()].some((E)=>E.sessionID===g)){w(g,`Subagent completed project inspection.
|
|
22
|
-
`),M.taskPart={...M.taskPart,state:{...M.taskPart.state,status:"completed",output:"Project inspection complete.",time:{...M.taskPart.state.time,end:Date.now()}}};let N=(t.get(M.parentID)||[]).find((A)=>A.info.id===M.taskPart.messageID);if(N)N.parts=[M.taskPart];m("message.part.updated",{sessionID:M.parentID,part:M.taskPart}),i.delete(g),w(M.parentID,`Delegated project inspection completed.
|
|
23
|
-
`)}return!0}return w(g,`Permission resolved: ${h}
|
|
24
|
-
`),!0}function k(g,c,h,R){return e.delete(c),m(R==="v2"?"question.v2.replied":"question.replied",{sessionID:g,requestID:c,answers:h}),w(g,`Question answered: ${h.flat().join(", ")}
|
|
25
|
-
`),!0}function s(g,c,h){return e.delete(c),m(h==="v2"?"question.v2.rejected":"question.rejected",{sessionID:g,requestID:c}),w(g,`Question rejected.
|
|
26
|
-
`),!0}return{client:b,emit:m,url:"mock://freecode-engine",directory:process.cwd(),binary:"mock",status:()=>({ok:!l,mock:!0,url:"mock://freecode-engine"}),close:async()=>{l=!0;for(let g of u)g.close();u.clear()}}}function Ba(n,r){let t=[],e=[],o=!1,i=()=>{if(o)return;o=!0,r?.();while(e.length)e.shift()({done:!0,value:void 0})},f=(u)=>{if(o)return;let d=e.shift();if(d)d({done:!1,value:u});else t.push(u)};return n?.addEventListener("abort",i,{once:!0}),{push:f,close:i,stream:{[Symbol.asyncIterator](){return this},next(){if(t.length)return Promise.resolve({done:!1,value:t.shift()});if(o)return Promise.resolve({done:!0,value:void 0});return new Promise((u)=>e.push(u))},return(){return i(),Promise.resolve({done:!0,value:void 0})}}}}function J1(n=process.env){if(n.FREECODE_MONETIZATION_UI==="false"||n.FREECODE_SPONSOR_UI==="false")return;let r=n.FREECODE_MONETIZATION_API_URL||n.FREECODE_API_URL,t=r?n.FREECODE_MONETIZATION_API_KEY||n.FREECODE_API_KEY:void 0;return{baseUrl:r||"https://api.freecode.sh",...t?{apiKey:t}:{}}}import{chmodSync as G1,existsSync as Fa,lstatSync as W1,mkdirSync as ja,readFileSync as Pa,renameSync as Ua,rmSync as Of,writeFileSync as Ta}from"fs";import{homedir as za}from"os";import{dirname as Ja,join as Ef,resolve as Va}from"path";var Aa=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function V1(n){if(typeof n!=="string")return;let r=n.trim().match(Aa);if(!r)return;let t=r[4]?r[4].split(".").map((e)=>({value:e,numeric:/^\d+$/.test(e)})):[];if(t.some(({numeric:e,value:o})=>e&&o.length>1&&o.startsWith("0")))return;return Object.freeze({value:n.trim(),major:r[1],minor:r[2],patch:r[3],prerelease:t})}function Re({environment:n=process.env,platform:r=process.platform}={}){let t=V1(n.FREECODE_RELEASE_VERSION)?.value||"0.0.0";return Object.freeze({version:t,platform:r,deviceLabel:Ca(r)})}function Vo(n=Re()){return Object.freeze({"x-freecode-version":n.version,...n.platform?{"x-freecode-platform":n.platform}:{},...n.deviceLabel?{"x-freecode-device-label":n.deviceLabel}:{}})}function Ca(n){if(n==="darwin")return"Free Code on macOS";if(n==="win32")return"Free Code on Windows";if(n==="linux")return"Free Code on Linux";return"Free Code terminal"}var Z1=1,Ga=8192;class Mn extends Error{constructor(n,{status:r=0,retryAfterSeconds:t,details:e}={}){super(n);if(this.name="AlphaAuthClientError",this.code=n,this.status=r,t!==void 0)this.retryAfterSeconds=t;if(e!==void 0)this.details=e}}function Wa({homeDirectory:n=za(),filePath:r,platform:t=process.platform,environment:e=process.env}={}){let o=t==="win32"&&e.APPDATA?e.APPDATA:Ef(n,".config"),i=Va(r||Ef(o,"freecode","alpha-session.json")),f=Ja(i);function u(){if(!Fa(i))return;try{if(W1(i).isSymbolicLink())throw new Mn("unsafe_session_file");let m=JSON.parse(Pa(i,"utf8"));if(m?.version!==Z1||!kf(m.sessionToken))throw new Mn("invalid_session_file");return m.sessionToken}catch(m){if(m instanceof Mn)throw m;throw new Mn("invalid_session_file")}}function d(m){if(!kf(m))throw new Mn("invalid_session_token");if(ja(f,{recursive:!0,mode:448}),W1(f).isSymbolicLink())throw new Mn("unsafe_session_directory");if(t!=="win32")G1(f,448);let w=Ef(f,`.alpha-session.${process.pid}.tmp`);try{if(Ta(w,`${JSON.stringify({version:Z1,sessionToken:m})}
|
|
27
|
-
`,{encoding:"utf8",mode:384,flag:"wx"}),t==="win32")Of(i,{force:!0});if(Ua(w,i),t!=="win32")G1(i,384)}finally{Of(w,{force:!0})}}function l(){Of(i,{force:!0})}return{path:i,load:u,save:d,clear:l}}function Q1({baseUrl:n=process.env.FREECODE_API_URL||"https://api.freecode.sh",fetchImpl:r=globalThis.fetch,sessionStore:t=Wa(),sleep:e=Za,openUrl:o,clientIdentity:i=Re()}={}){if(typeof r!=="function")throw new Mn("fetch_required");let f=Xa(n);async function u(c,{method:h="GET",body:R,sessionToken:M,signal:L}={}){let E;try{E=await r(`${f}${c}`,{method:h,signal:L,headers:{accept:"application/json",...R?{"content-type":"application/json"}:{},...M?{authorization:`Bearer ${M}`}:{},...Vo(i)},...R?{body:JSON.stringify(R)}:{}})}catch(N){if(N?.name==="AbortError")throw N;throw new Mn("auth_network_unavailable")}if(!E.ok){let N={};try{N=await E.clone().json()}catch{}let A=Y1(N?.error)||(E.status===401?"invalid_session":"auth_request_failed"),F=Le(N?.retry_after_seconds)||Le(E.headers?.get?.("retry-after"));throw new Mn(A,{status:E.status,retryAfterSeconds:F,details:{...typeof N?.reason==="string"?{reason:N.reason}:{},...typeof N?.message==="string"?{message:N.message}:{},...typeof N?.minimum_supported_version==="string"?{minimumSupportedVersion:N.minimum_supported_version}:{},...typeof N?.update_command==="string"?{updateCommand:N.update_command}:{}}})}return E}async function d(c,h={}){let R=await u(c,h),M={};try{M=await R.json()}catch{}return M}async function l(c,{method:h="GET",body:R,signal:M}={}){let L=t.load();if(!L)throw new Mn("authentication_required",{status:401});try{return await u(c,{method:h,body:R,sessionToken:L,signal:M})}catch(E){if(E instanceof Mn&&E.status===401)t.clear();throw E}}async function m({signal:c}={}){let h=await d("/v1/auth/device/start",{method:"POST",signal:c}),R=Lr(h.deviceCode||h.device_code),M=Lr(h.userCode||h.user_code),L=Rf(h.verificationUri||h.verification_uri),E=Rf(h.verificationUriComplete||h.verification_uri_complete),N=Le(h.intervalSeconds||h.interval)||5,A=$1(h.expiresAt||h.expires_at);if(!R||!M||!L)throw new Mn("invalid_auth_response");return{deviceCode:R,userCode:M,verificationUri:L,verificationUriComplete:E,intervalSeconds:N,expiresAt:A}}async function w(c,{signal:h}={}){if(!Lr(c))throw new Mn("device_code_required");let R=await d("/v1/auth/device/poll",{method:"POST",body:{device_code:c},signal:h}),M=Lr(R.status);if(M==="waiting")return{status:M,intervalSeconds:Le(R.intervalSeconds||R.interval)||5,slowDown:R.slowDown===!0||R.slow_down===!0};if(M==="denied")return{status:M,reason:Y1(R.reason)||"github_access_denied"};if(M==="expired")return{status:M,reason:"device_code_expired"};if(M==="authenticated"){let L=Lr(R.sessionToken||R.session_token),E=v1(R.user);if(!kf(L)||!E)throw new Mn("invalid_auth_response");return{status:M,sessionToken:L,user:E}}throw new Mn("invalid_auth_response")}async function b({clearInvalid:c=!0,signal:h}={}){let R=t.load();if(!R)return;try{let M=await d("/v1/auth/session",{sessionToken:R,signal:h}),L=v1(M.user);if(!L)throw new Mn("invalid_auth_response");return{sessionToken:R,user:L}}catch(M){if(c&&M instanceof Mn&&M.status===401)t.clear();throw M}}async function O(c,{signal:h}={}){if(!c||typeof c!=="object"||Array.isArray(c))throw new Mn("invalid_messages_request");return l("/v1/alpha/messages",{method:"POST",body:c,signal:h})}async function k(c,{signal:h}={}){if(!c||typeof c!=="object"||Array.isArray(c))throw new Mn("invalid_sidebar_recommendation_request");let R=await l("/v1/alpha/sidebar-recommendation",{method:"POST",body:c,signal:h});try{return await R.json()}catch{throw new Mn("invalid_sidebar_recommendation_response")}}async function s({signal:c}={}){let h=t.load();if(!h)return{ok:!0,remote:!1};let R=!1;try{await d("/v1/auth/logout",{method:"POST",sessionToken:h,signal:c}),R=!0}catch(M){if(M?.name==="AbortError")throw M}finally{t.clear()}return{ok:!0,remote:R}}async function g({onState:c=()=>{},openVerificationUrl:h=!0,signal:R}={}){c({kind:"welcome"});try{let M=await m({signal:R}),L={userCode:M.userCode,verificationUri:M.verificationUri,...M.expiresAt?{expiresAt:M.expiresAt}:{}};if(c({kind:"device_code",...L}),h&&typeof o==="function")await o(M.verificationUriComplete||M.verificationUri);let E=M.intervalSeconds;while(!0){await e(E*1000,R);let N=await w(M.deviceCode,{signal:R});if(N.status==="waiting"){E=N.slowDown?Math.max(E+5,N.intervalSeconds):N.intervalSeconds,c({kind:"waiting",...L});continue}if(N.status==="denied"){let F={kind:"denied",reason:N.reason};return c(F),F}if(N.status==="expired"){let F={kind:"error",code:N.reason,recoverable:!0};return c(F),F}t.save(N.sessionToken);let A={kind:"authenticated",user:N.user};return c(A),A}}catch(M){if(M?.name==="AbortError")throw M;let L={kind:"error",code:M instanceof Mn?M.code:"auth_failed",recoverable:!0};return c(L),L}}return{startDeviceFlow:m,pollDeviceFlow:w,currentSession:b,authenticate:g,logout:s,messages:O,sidebarRecommendation:k,sessionStore:t}}function v1(n){let r=Lr(n?.id),t=Le(n?.github?.id),e=va(n?.github?.login),o=n?.tier==="ultra"?"ultra":n?.tier==="free"?"free":void 0,i=$1(n?.expiresAt||n?.expires_at);if(!r||!t||!e||!o||!i)return;let f=Rf(n?.github?.avatarUrl||n?.github?.avatar_url);return{id:r,github:{id:t,login:e,...f?{avatarUrl:f}:{}},tier:o,expiresAt:i}}function Za(n,r){return new Promise((t,e)=>{if(r?.aborted)return e(X1());let o=setTimeout(i,n);function i(){r?.removeEventListener("abort",f),t()}function f(){clearTimeout(o),r?.removeEventListener("abort",f),e(X1())}r?.addEventListener("abort",f,{once:!0})})}function X1(){let n=Error("aborted");return n.name="AbortError",n}function kf(n){return typeof n==="string"&&n.length>0&&n.length<=Ga&&!/\s/.test(n)}function Lr(n){return typeof n==="string"&&n.trim()?n.trim():""}function Le(n){let r=Number(n);return Number.isSafeInteger(r)&&r>0?r:void 0}function va(n){let r=Lr(n);return r&&/^[a-zA-Z0-9-]{1,100}$/.test(r)?r:void 0}function Y1(n){let r=Lr(n);return r&&/^[a-z0-9_]{1,64}$/.test(r)?r:void 0}function $1(n){let r=Lr(n);return r&&Number.isFinite(Date.parse(r))?r:void 0}function Rf(n){let r=Lr(n);if(!r)return;try{let t=new URL(r);return t.protocol==="https:"?t.toString():void 0}catch{return}}function Xa(n){let r=Lr(n).replace(/\/$/,"");try{let t=new URL(r);if(t.username||t.password||t.search||t.hash)throw Error("unsafe url");if(t.protocol==="https:"||t.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(t.hostname))return t.toString().replace(/\/$/,"")}catch{}throw new Mn("invalid_api_url")}import{chmodSync as H1,existsSync as Ya,lstatSync as K1,mkdirSync as Qa,readFileSync as $a,renameSync as Ha,rmSync as Lf,writeFileSync as Ka}from"fs";import{homedir as Sa}from"os";import{dirname as _a,join as Nf,resolve as Ia}from"path";var S1=1,qa=8192;class Kr extends Error{constructor(n){super(n);this.name="CredentialStoreError",this.code=n}}function I1({homeDirectory:n=Sa(),filePath:r,platform:t=process.platform,environment:e=process.env,secrets:o=globalThis.Bun?.secrets}={}){let i=pa({homeDirectory:n,filePath:r,platform:t,environment:e});if(!o||e.FREECODE_DISABLE_KEYCHAIN==="true")return i;let f=Object.freeze({service:"sh.freecode.cli",name:"account-session"});return Object.freeze({kind:"os-keychain",fallbackPath:i.path,async load(){try{let d=await o.get(f);if(d!==null&&!Go(d))throw new Kr("invalid_keychain_credential");if(d)return d}catch{}let u=i.load();if(!u)return;try{await _1(o,f,u),i.clear()}catch{}return u},async save(u){if(!Go(u))throw new Kr("invalid_session_token");try{await _1(o,f,u),i.clear()}catch{i.save(u)}},async clear(){try{await o.delete(f)}catch{}i.clear()}})}function pa({homeDirectory:n,filePath:r,platform:t,environment:e}){let o=t==="win32"&&e.APPDATA?e.APPDATA:Nf(n,".config"),i=Ia(r||Nf(o,"freecode","session.json")),f=_a(i);function u(){if(!Ya(i))return;try{if(K1(i).isSymbolicLink())throw new Kr("unsafe_credential_file");let m=JSON.parse($a(i,"utf8"));if(m?.version!==S1||!Go(m.sessionToken))throw new Kr("invalid_credential_file");return m.sessionToken}catch(m){if(m instanceof Kr)throw m;throw new Kr("invalid_credential_file")}}function d(m){if(!Go(m))throw new Kr("invalid_session_token");if(Qa(f,{recursive:!0,mode:448}),K1(f).isSymbolicLink())throw new Kr("unsafe_credential_directory");if(t!=="win32")H1(f,448);let w=Nf(f,`.session.${process.pid}.${Date.now()}.tmp`);try{if(Ka(w,`${JSON.stringify({version:S1,sessionToken:m})}
|
|
28
|
-
`,{encoding:"utf8",mode:384,flag:"wx"}),t==="win32")Lf(i,{force:!0});if(Ha(w,i),t!=="win32")H1(i,384)}finally{Lf(w,{force:!0})}}function l(){Lf(i,{force:!0})}return Object.freeze({kind:"protected-file",path:i,load:u,save:d,clear:l})}function Go(n){return typeof n==="string"&&n.length>0&&n.length<=qa&&!/\s/.test(n)}function _1(n,r,t){return n.set({...r,value:t,allowUnrestrictedAccess:!1})}async function p1({start:n,poll:r,save:t,onState:e=()=>{},openUrl:o,openVerificationUrl:i=!0,sleep:f=Df,signal:u}={}){e({kind:"welcome"});let d=await n({signal:u}),l={userCode:d.userCode,verificationUri:d.verificationUri,...d.expiresAt?{expiresAt:d.expiresAt}:{}};if(e({kind:"device_code",...l}),i&&typeof o==="function")await o(d.verificationUriComplete||d.verificationUri);let m=d.intervalSeconds;while(!0){await f(m*1000,u);let w=await r(d.deviceCode,{signal:u});if(w.status==="waiting"){m=w.slowDown?Math.max(m+5,w.intervalSeconds):w.intervalSeconds,e({kind:"waiting",...l});continue}if(w.status==="denied"){let O={kind:"denied",reason:w.reason};return e(O),O}if(w.status==="expired"){let O={kind:"error",code:"device_code_expired",recoverable:!0};return e(O),O}await t(w.sessionToken);let b={kind:"authenticated",user:w.user};return e(b),b}}function Df(n,r){return new Promise((t,e)=>{if(r?.aborted)return e(q1());let o=setTimeout(i,n);function i(){r?.removeEventListener("abort",f),t()}function f(){clearTimeout(o),r?.removeEventListener("abort",f),e(q1())}r?.addEventListener("abort",f,{once:!0})})}function q1(){let n=Error("aborted");return n.name="AbortError",n}var n0="urn:ietf:params:oauth:grant-type:device_code",nc="freecode-cli";class tr extends Error{constructor(n,{status:r=0,retryAfterSeconds:t,details:e}={}){super(n);if(this.name="FreeCodeAuthClientError",this.code=n,this.status=r,t!==void 0)this.retryAfterSeconds=t;if(e!==void 0)this.details=e}}function tc({authBaseUrl:n=process.env.FREECODE_AUTH_URL||"https://auth.freecode.sh",apiBaseUrl:r=process.env.FREECODE_API_URL||"https://api.freecode.sh",fetchImpl:t=globalThis.fetch,credentialStore:e=I1(),sleep:o=Df,openUrl:i,clientIdentity:f=Re()}={}){if(typeof t!=="function")throw new tr("fetch_required");let u=rc(n),d=rc(r),l=Vo(f);async function m(E,N,{method:A="GET",body:F,sessionToken:U,signal:ln}={}){let _;try{_=await t(`${E}${N}`,{method:A,signal:ln,headers:{accept:"application/json",...F?{"content-type":"application/json"}:{},...U?{authorization:`Bearer ${U}`}:{},...l},...F?{body:JSON.stringify(F)}:{}})}catch(Bn){if(Bn?.name==="AbortError")throw Bn;throw new tr("auth_network_unavailable")}return _}async function w(E){try{return await E.json()}catch{return}}async function b(E,N,A){let F=await m(E,N,A),U=await w(F);if(!F.ok)throw Wo(F,U);return U}async function O({signal:E}={}){let N=await b(u,"/api/auth/device/code",{method:"POST",body:{client_id:nc,scope:"openid profile email"},signal:E}),A=Nr(N?.device_code),F=Nr(N?.user_code),U=Bf(N?.verification_uri),ln=Bf(N?.verification_uri_complete),_=Zo(N?.interval)||5,Bn=Zo(N?.expires_in);if(!A||!F||!U||!Bn)throw new tr("invalid_auth_response");return{deviceCode:A,userCode:F,verificationUri:U,verificationUriComplete:ln,intervalSeconds:_,expiresAt:new Date(Date.now()+Bn*1000).toISOString()}}async function k(E,{signal:N}={}){if(!Nr(E))throw new tr("device_code_required");let A=await m(u,"/api/auth/device/token",{method:"POST",body:{grant_type:n0,device_code:E,client_id:nc},signal:N}),F=await w(A);if(!A.ok){let _=ec(F?.error||F?.code);if(_==="authorization_pending")return{status:"waiting",intervalSeconds:5,slowDown:!1};if(_==="slow_down")return{status:"waiting",intervalSeconds:10,slowDown:!0};if(_==="access_denied")return{status:"denied",reason:"access_denied"};if(_==="expired_token"||_==="invalid_grant")return{status:"expired"};throw Wo(A,F)}let U=Nr(F?.access_token);if(!t0(U))throw new tr("invalid_auth_response");let ln=await s(U,{signal:N});return{status:"authenticated",sessionToken:U,user:ln.user}}async function s(E,{signal:N}={}){let A=await m(u,"/api/auth/get-session",{sessionToken:E,signal:N}),F=await w(A);if(!A.ok)throw Wo(A,F);let U=r0(F);if(!U)throw new tr("invalid_session",{status:401});return{sessionToken:E,user:U}}async function g({clearInvalid:E=!0,signal:N}={}){let A=await e.load();if(!A)return;try{return await s(A,{signal:N})}catch(F){if(E&&F instanceof tr&&F.status===401)await e.clear();throw F}}async function c(E,{method:N="GET",body:A,signal:F}={}){let U=await e.load();if(!U)throw new tr("authentication_required",{status:401});let ln=await m(d,E,{method:N,body:A,sessionToken:U,signal:F});if(!ln.ok){let _=await w(ln.clone()),Bn=Wo(ln,_);if(Bn.status===401)await e.clear();throw Bn}return ln}function h(E,{signal:N}={}){if(!E||typeof E!=="object"||Array.isArray(E))throw new tr("invalid_messages_request");return c("/v1/alpha/messages",{method:"POST",body:E,signal:N})}async function R(E,{signal:N}={}){if(!E||typeof E!=="object"||Array.isArray(E))throw new tr("invalid_sidebar_recommendation_request");let A=await c("/v1/alpha/sidebar-recommendation",{method:"POST",body:E,signal:N});try{return await A.json()}catch{throw new tr("invalid_sidebar_recommendation_response")}}async function M({signal:E}={}){let N=await e.load();if(!N)return{ok:!0,remote:!1};let A=!1;try{A=(await m(u,"/api/auth/sign-out",{method:"POST",body:{},sessionToken:N,signal:E})).ok}catch(F){if(F?.name==="AbortError")throw F}finally{await e.clear()}return{ok:!0,remote:A}}async function L({onState:E=()=>{},openVerificationUrl:N=!0,signal:A}={}){try{return await p1({start:O,poll:k,save:e.save,onState:E,openUrl:i,openVerificationUrl:N,sleep:o,signal:A})}catch(F){if(F?.name==="AbortError")throw F;let U={kind:"error",code:F instanceof tr?F.code:"auth_failed",recoverable:!0};return E(U),U}}return Object.freeze({startDeviceFlow:O,pollDeviceFlow:k,currentSession:g,authenticate:L,logout:M,messages:h,sidebarRecommendation:R,credentialStore:e})}function r0(n){let r=n?.user,t=n?.session,e=Nr(r?.id),o=Nr(r?.name),i=e0(r?.email),f=o0(t?.expiresAt);if(!e||!i||!f)return;let u=Bf(r?.image);return{id:e,name:o||i.split("@")[0],email:i,...u?{image:u}:{},tier:"free",expiresAt:f}}function Wo(n,r){let t=ec(r?.error||r?.code)||(n.status===401?"invalid_session":"auth_request_failed");return new tr(t,{status:n.status,retryAfterSeconds:Zo(r?.retry_after_seconds)||Zo(n.headers?.get?.("retry-after")),details:{...typeof r?.message==="string"?{message:r.message}:{},...typeof r?.minimum_supported_version==="string"?{minimumSupportedVersion:r.minimum_supported_version}:{},...typeof r?.update_command==="string"?{updateCommand:r.update_command}:{}}})}function rc(n){try{let r=new URL(Nr(n).replace(/\/$/,""));if(r.username||r.password||r.search||r.hash)throw Error("unsafe_url");if(r.protocol==="https:"||r.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(r.hostname))return r.toString().replace(/\/$/,"")}catch{}throw new tr("invalid_auth_url")}function Bf(n){try{let r=new URL(Nr(n));return r.protocol==="https:"||r.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(r.hostname)?r.toString():void 0}catch{return}}function t0(n){return typeof n==="string"&&n.length>0&&n.length<=8192&&!/\s/.test(n)}function Nr(n){return typeof n==="string"?n.trim():""}function Zo(n){let r=Number(n);return Number.isSafeInteger(r)&&r>0?r:void 0}function ec(n){let r=Nr(n).toLowerCase();return/^[a-z][a-z0-9_]{0,63}$/.test(r)?r:void 0}function e0(n){let r=Nr(n).toLowerCase();return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r)?r:void 0}function o0(n){let r=Nr(n);return r&&Number.isFinite(Date.parse(r))?r:void 0}import{randomBytes as i0,timingSafeEqual as f0}from"crypto";import{createServer as d0}from"http";import{Readable as u0}from"stream";var c0=16777216,ic=Object.freeze([Object.freeze({tier:"free",providerID:"freecode",modelID:"free",label:"Free"}),Object.freeze({tier:"super",providerID:"freecode",modelID:"super",label:"Super"})]);class Ne extends Error{constructor(n){super(n);this.name="AlphaFundedClientError",this.code=n}}function fc(n){if(!n||!["free","ultra","super"].includes(n.tier))throw new Ne("invalid_alpha_user");let r=n.tier==="ultra"||n.tier==="super"?"super":"free";return ic.find((t)=>t.tier===r)}function dc(n,r){if(!n||n.providerID!=="freecode"||n.modelID!==n.tier)throw new Ne("invalid_alpha_experience");return{npm:"@ai-sdk/anthropic",name:"Free Code Funded",options:{baseURL:`${r.url}/v1`,apiKey:r.key},models:Object.fromEntries(ic.map((t)=>[t.modelID,{name:t.label}]))}}async function uc({alphaAuth:n,hostname:r="127.0.0.1",onUpdateRequired:t}={}){if(!n||typeof n.messages!=="function")throw new Ne("alpha_auth_required");let e=i0(32).toString("base64url"),o=!1,i=d0(async(d,l)=>{try{if(d.method!=="POST"||!["/v1/messages","/messages"].includes(new URL(d.url||"/","http://localhost").pathname))return Af(l,404,{error:"not_found"});if(!m0(d.headers,e))return Af(l,401,{error:"proxy_authentication_required"});let m=await g0(d),w=new AbortController,b=()=>w.abort();d.once("aborted",b),l.once("close",b);let O=await n.messages(m,{signal:w.signal});l.statusCode=O.status;for(let[s,g]of O.headers)if(!["connection","content-length","content-encoding","transfer-encoding"].includes(s.toLowerCase()))l.setHeader(s,g);if(!O.body)return l.end();let k=u0.fromWeb(O.body);l.once("close",()=>{if(!k.destroyed)k.destroy()}),k.on("error",()=>l.destroy()).pipe(l)}catch(m){if(l.headersSent)return l.destroy();let w=Number.isSafeInteger(m?.status)&&m.status>0?m.status:m?.code==="request_too_large"?413:502,b=m?.details,O={error:l0(m?.code),...Number.isSafeInteger(m?.retryAfterSeconds)&&m.retryAfterSeconds>0?{retry_after_seconds:m.retryAfterSeconds}:{},...typeof b?.message==="string"?{message:b.message}:{},...typeof b?.minimumSupportedVersion==="string"?{minimum_supported_version:b.minimumSupportedVersion}:{},...typeof b?.updateCommand==="string"?{update_command:b.updateCommand}:{}};if(O.retry_after_seconds)l.setHeader("retry-after",String(O.retry_after_seconds));if(Af(l,w,O),m?.code==="client_update_required"&&typeof t==="function"&&!o)o=!0,queueMicrotask(()=>{try{t(Object.freeze({...O}))}catch(k){console.error("client.update_required_handler_failed",{message:String(k?.message||k||"unknown error").slice(0,256)})}})}});await new Promise((d,l)=>{i.once("error",l),i.listen(0,r,d)});let f=i.address();if(!f||typeof f==="string")throw i.close(),new Ne("proxy_start_failed");let u=!1;return{key:e,url:`http://${r}:${f.port}`,async close(){if(u)return;u=!0,await new Promise((d)=>i.close(d))}}}function oc(n){return typeof n==="string"?n.trim().slice(0,256):""}function l0(n){return/^[a-z][a-z0-9_]{0,63}$/.test(n||"")?n:"funded_proxy_failed"}function m0(n,r){let t=oc(n["x-api-key"])||oc(n.authorization).replace(/^Bearer\s+/i,""),e=Buffer.from(t),o=Buffer.from(r);return e.length===o.length&&f0(e,o)}async function g0(n){let r=[],t=0;for await(let e of n){if(t+=e.length,t>c0)throw Object.assign(Error("request_too_large"),{code:"request_too_large"});r.push(e)}try{let e=JSON.parse(Buffer.concat(r).toString("utf8"));if(!e||typeof e!=="object"||Array.isArray(e))throw Error("invalid_json");return e}catch{throw Object.assign(Error("invalid_json"),{code:"invalid_json"})}}function Af(n,r,t){n.statusCode=r,n.setHeader("content-type","application/json"),n.end(JSON.stringify(t))}import{createServer as w0}from"net";import{randomBytes as a0}from"crypto";import{spawn as h0}from"child_process";import{createOpencodeClient as s0}from"@opencode-ai/sdk/v2";async function lc({binary:n,directory:r=process.cwd(),config:t={},env:e={},hostname:o="127.0.0.1",startupTimeout:i=15000}={}){if(!n)throw Error("The Free Code engine is missing. Reinstall Free Code.");let f=await b0(o),u="freecode",d=a0(24).toString("base64url"),l=`http://${o}:${f}`,m=`Basic ${Buffer.from(`${u}:${d}`).toString("base64")}`,w=h0(n,["serve",`--hostname=${o}`,`--port=${f}`],{cwd:r,env:{...process.env,...e,OPENCODE_SERVER_USERNAME:u,OPENCODE_SERVER_PASSWORD:d,OPENCODE_CONFIG_CONTENT:JSON.stringify(t)},stdio:["ignore","pipe","pipe"]}),b=s0({baseUrl:l,directory:r,headers:{authorization:m},responseStyle:"data",throwOnError:!0}),O="",k,s=!1;w.stdout.on("data",(h)=>{O=`${O}${h}`.slice(-16000)}),w.stderr.on("data",(h)=>{O=`${O}${h}`.slice(-16000)}),w.once("error",(h)=>{k=h});let g=()=>({ok:Boolean(!s&&w.exitCode===null&&w.signalCode===null),url:l,pid:w.pid,directory:r,binary:n}),c=async()=>{if(s)return;if(s=!0,w.exitCode!==null||w.signalCode!==null)return;if(w.kill("SIGTERM"),await Promise.race([new Promise((h)=>w.once("exit",h)),new Promise((h)=>setTimeout(h,2000))]),w.exitCode===null&&w.signalCode===null)w.kill("SIGKILL");if(w.exitCode===null&&w.signalCode===null)await Promise.race([new Promise((h)=>w.once("exit",h)),new Promise((h)=>setTimeout(h,1000))])};try{await y0({client:b,child:w,getError:()=>k,getOutput:()=>O,timeout:i}),await M0(b,i)}catch(h){throw await c(),h}return{client:b,url:l,pid:w.pid,directory:r,binary:n,status:g,close:c}}async function b0(n){return new Promise((r,t)=>{let e=w0();e.unref(),e.once("error",t),e.listen(0,n,()=>{let o=e.address();e.close(()=>r(o.port))})})}async function y0({client:n,child:r,getError:t,getOutput:e,timeout:o}){let i=Date.now()+o,f;while(Date.now()<i){if(t())throw t();if(r.exitCode!==null||r.signalCode!==null)throw cc("The Free Code engine stopped during startup.",e());try{let u=i-Date.now();if(x0(await n.v2.health.get({signal:AbortSignal.timeout(Math.max(1,Math.min(2000,u)))}))?.healthy)return}catch(u){f=u}await new Promise((u)=>setTimeout(u,100))}throw cc("The Free Code engine did not become ready in time.",f?.message||e())}function x0(n){let r=n;while(r&&typeof r==="object"&&"data"in r)r=r.data;return r}async function M0(n,r){let t=new AbortController,e;try{await Promise.race([(async()=>{let o=await n.v2.event.subscribe({signal:t.signal,sseMaxRetryAttempts:1});for await(let i of o.stream)if(i.type==="server.connected")return;throw Error("The Free Code engine connection ended during startup.")})(),new Promise((o,i)=>{e=setTimeout(()=>i(Error("The Free Code engine connection timed out during startup.")),r)})])}finally{clearTimeout(e),t.abort()}}function cc(n,r){let t=Error(n);return Object.defineProperty(t,"diagnostic",{configurable:!1,enumerable:!1,value:String(r||""),writable:!1}),t}import{spawn as O0}from"child_process";function E0(n,r=process.platform){if(r==="darwin")return{command:"open",args:[n]};if(r==="win32")return{command:"rundll32.exe",args:["url.dll,FileProtocolHandler",n]};return{command:"xdg-open",args:[n]}}function Cf(n,{platform:r=process.platform,spawnImpl:t=O0}={}){let e=E0(n,r),o=t(e.command,e.args,{detached:!0,stdio:"ignore",windowsHide:!0});o.on("error",()=>{}),o.unref()}function mc(n=process.platform){return n==="win32"?["SIGTERM"]:["SIGTERM","SIGHUP"]}var gc=75;var hc=process.argv[2]||process.cwd(),k0=process.argv[3],wc=JSON.parse(process.env.FREECODE_STANDALONE_CONFIG||"{}"),R0=JSON.parse(process.env.FREECODE_STANDALONE_SPONSOR||"null"),L0=J1(),N0=process.env.FREECODE_ALPHA_ENABLED==="true"||process.env.FREECODE_ALPHA_BUILD==="true",D0=process.env.FREECODE_ACCOUNT_AUTH_ENABLED==="true",vo=N0?D0?tc({openUrl:async(n)=>Cf(n)}):Q1({openUrl:async(n)=>Cf(n)}):void 0,De,Ff,sc=!1,bc=new AbortController,B0=()=>{if(De)return De;return De=(async()=>{let n=wc,r;if(vo){let e=await vo.currentSession();if(!e)throw Error("authentication_required");r=fc(e.user),Ff=await uc({alphaAuth:vo,onUpdateRequired:()=>{sc=!0,bc.abort()}}),n={...wc,provider:{freecode:dc(r,Ff)}}}let t=process.env.FREECODE_ENGINE==="mock"?z1():await lc({binary:k0,directory:hc,config:n,env:{FREECODE_WRAPPER:"1",FREECODE_ENGINE_PIN:process.env.FREECODE_ENGINE_PIN||""}});return{host:t,client:t.client,alphaExperience:r}})(),De},ac=!1,yc=async()=>{if(ac)return;ac=!0,await(await De?.catch(()=>{return}))?.host?.close(),await Ff?.close()};for(let n of mc())process.once(n,()=>{yc().finally(()=>process.exit(n==="SIGTERM"?143:129))});try{await T1({client:B0,cwd:hc,sponsor:R0,monetization:L0,alphaAuth:vo,shutdownSignal:bc.signal})}finally{await yc()}if(sc)process.exitCode=gc;
|