@iquantum/cli 1.1.1 → 1.1.2
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/dist/bin.js +2 -2
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -429,7 +429,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
429
429
|
`),E};var Bi=vI(jF(),1);var YR=vI(OB(),1);var PZ=vI(OB(),1);var Qi=vI(OB(),1);var gi=vI(OB(),1);var V6=vI(OB(),1);var TZ=new TextDecoder,Ei=/^(?:\x1b)([a-zA-Z0-9])$/,Ci=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,bZ={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[P":"f1","[Q":"f2","[R":"f3","[S":"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},fZ=[...Object.values(bZ),"backspace"],Di=(A)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(A)},wi=(A)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(A)},uZ=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,Ui=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,$i={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},Gi={2:"insert",3:"delete",5:"pageup",6:"pagedown",7:"home",8:"end",11:"f1",12:"f2",13:"f3",14:"f4",15:"f5",17:"f6",18:"f7",19:"f8",20:"f9",21:"f10",23:"f11",24:"f12"},jZ={27:"escape",9:"tab",127:"backspace",8:"backspace",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpsubtract",57413:"kpadd",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"kpbegin",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"mediatracknext",57436:"mediatrackprevious",57437:"mediarecord",57438:"lowervolume",57439:"raisevolume",57440:"mutevolume",57441:"leftshift",57442:"leftcontrol",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightcontrol",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"isoLevel3Shift",57454:"isoLevel5Shift"},yZ=(A)=>A>=0&&A<=1114111&&!(A>=55296&&A<=57343),V5=(A)=>yZ(A)?String.fromCodePoint(A):"?";function hZ(A){if(A===3)return"release";if(A===2)return"repeat";return"press"}function xZ(A){return{ctrl:!!(A&Dw.ctrl),shift:!!(A&Dw.shift),meta:!!(A&(Dw.meta|Dw.alt)),super:!!(A&Dw.super),hyper:!!(A&Dw.hyper),capsLock:!!(A&Dw.capsLock),numLock:!!(A&Dw.numLock)}}var Ji=(A)=>{let I=uZ.exec(A);if(!I)return null;let E=parseInt(I[1],10),C=I[2]?Math.max(0,parseInt(I[2],10)-1):0,Q=I[3]?parseInt(I[3],10):1,D=I[4];if(!yZ(E))return null;let $;if(D)$=D.split(":").map((K)=>V5(parseInt(K,10))).join("");let H,k;if(E===32)H="space",k=!0;else if(E===13)H="return",k=!0;else if(jZ[E])H=jZ[E],k=!1;else if(E>=1&&E<=26)H=String.fromCodePoint(E+96),k=!1;else H=V5(E).toLowerCase(),k=!0;if(k&&!$)$=V5(E);return{name:H,...xZ(C),eventType:hZ(Q),sequence:A,raw:A,isKittyProtocol:!0,isPrintable:k,text:$}},Hi=(A)=>{let I=Ui.exec(A);if(!I)return null;let E=parseInt(I[1],10),C=Math.max(0,parseInt(I[2],10)-1),Q=parseInt(I[3],10),D=I[4],$=D==="~"?Gi[E]:$i[D];if(!$)return null;return{name:$,...xZ(C),eventType:hZ(Q),sequence:A,raw:A,isKittyProtocol:!0,isPrintable:!1}},vi=(A="")=>{let I;if(A instanceof Uint8Array)if(A[0]>127&&A[1]===void 0)A[0]-=128,A="\x1B"+TZ.decode(A);else A=TZ.decode(A);else if(A!==void 0&&typeof A!=="string")A=String(A);else if(!A)A="";let E=Ji(A);if(E)return E;let C=Hi(A);if(C)return C;if(uZ.test(A))return{name:"",ctrl:!1,meta:!1,shift:!1,sequence:A,raw:A,isKittyProtocol:!0,isPrintable:!1};let Q={name:"",ctrl:!1,meta:!1,shift:!1,sequence:A,raw:A};if(Q.sequence=Q.sequence||A||Q.name,A==="\r"||A==="\x1B\r")Q.raw=void 0,Q.name="return",Q.meta=A.length===2;else if(A===`
|
|
430
430
|
`)Q.name="enter";else if(A==="\t")Q.name="tab";else if(A==="\b"||A==="\x1B\b")Q.name="backspace",Q.meta=A.charAt(0)==="\x1B";else if(A==="\x7F"||A==="\x1B\x7F")Q.name="backspace",Q.meta=A.charAt(0)==="\x1B";else if(A==="\x1B"||A==="\x1B\x1B")Q.name="escape",Q.meta=A.length===2;else if(A===" "||A==="\x1B ")Q.name="space",Q.meta=A.length===2;else if(A.length===1&&A<="\x1A")Q.name=String.fromCharCode(A.charCodeAt(0)+97-1),Q.ctrl=!0;else if(A.length===1&&A>="0"&&A<="9")Q.name="number";else if(A.length===1&&A>="a"&&A<="z")Q.name=A;else if(A.length===1&&A>="A"&&A<="Z")Q.name=A.toLowerCase(),Q.shift=!0;else if(I=Ei.exec(A))Q.name=I[1].toLowerCase(),Q.meta=!0,Q.shift=/^[A-Z]$/.test(I[1]);else if(I=Ci.exec(A)){let D=[...A];if(D[0]==="\x1B"&&D[1]==="\x1B")Q.meta=!0;let $=[I[1],I[2],I[4],I[6]].filter(Boolean).join(""),H=(I[3]||I[5]||1)-1;Q.ctrl=!!(H&4),Q.meta=Q.meta||!!(H&10),Q.shift=!!(H&1),Q.code=$,Q.name=bZ[$]??"",Q.shift=Di($)||Q.shift,Q.ctrl=wi($)||Q.ctrl}return Q},iZ=vi;var mZ=vI(OB(),1);var P5=()=>mZ.useContext(JR);var Mi=(A,I={})=>{let{setRawMode:E,internal_exitOnCtrlC:C,internal_eventEmitter:Q}=P5();V6.useEffect(()=>{if(I.isActive===!1)return;return E(!0),()=>{E(!1)}},[I.isActive,E]);let D=V6.useEffectEvent(($)=>{let H=iZ($),k={upArrow:H.name==="up",downArrow:H.name==="down",leftArrow:H.name==="left",rightArrow:H.name==="right",pageDown:H.name==="pagedown",pageUp:H.name==="pageup",home:H.name==="home",end:H.name==="end",return:H.name==="return",escape:H.name==="escape",ctrl:H.ctrl,shift:H.shift,tab:H.name==="tab",backspace:H.name==="backspace",delete:H.name==="delete",meta:H.meta,super:H.super??!1,hyper:H.hyper??!1,capsLock:H.capsLock??!1,numLock:H.numLock??!1,eventType:H.eventType},K;if(H.isKittyProtocol)if(H.isPrintable)K=H.text??H.name;else if(H.ctrl&&H.name.length===1)K=H.name;else K="";else if(H.ctrl)K=H.name??"";else K=H.sequence;if(!H.isKittyProtocol&&fZ.includes(H.name))K="";if(K.startsWith("\x1B"))K=K.slice(1);if(K.length===1&&/[A-Z]/.test(K))k.shift=!0;if(K==="c"&&k.ctrl&&C)return;sE.discreteUpdates(()=>{A(K,k)})});V6.useEffect(()=>{if(I.isActive===!1)return;return Q.on("input",D),()=>{Q.removeListener("input",D)}},[I.isActive,Q,D])},wU=Mi;var nZ=vI(OB(),1);var Ni=vI(OB(),1);var Fi=vI(OB(),1);var Ri=vI(OB(),1);var T5=vI(OB(),1);var Li=vI(OB(),1);var ki=vI(OB(),1);var XR=vI(OB(),1);var P6=vI(OB(),1);var rZ=vI(OB(),1);var SR=vI(OB(),1);var FP=vI(OB(),1);import{homedir as CP}from"os";import{join as DP}from"path";var hE=vI(OB(),1);import{request as lZ}from"http";class o1{#I;constructor(A){this.#I=A}health(){return this.#B("/health")}createSession(A,I={}){return this.#A("/sessions",{repoPath:A,...I})}getSession(A){return this.#B(`/sessions/${A}`)}async destroySession(A){await this.#g(`/sessions/${A}`)}startTask(A,I){return this.#A(`/sessions/${A}/task`,{prompt:I})}async currentPlan(A){try{return await this.#B(`/sessions/${A}/plan`)}catch(I){if(I instanceof qR&&I.statusCode===404)return null;throw I}}async approve(A){await this.#A(`/sessions/${A}/approve`)}reject(A,I){return this.#A(`/sessions/${A}/reject`,{feedback:I})}listCheckpoints(A){return this.#B(`/sessions/${A}/checkpoints`)}async restore(A,I){await this.#A(`/sessions/${A}/checkpoints/${encodeURIComponent(I)}/restore`)}async postMessage(A,I){await this.#A(`/sessions/${A}/messages`,{role:"user",content:I})}async postPermission(A,I,E){await this.#A(`/sessions/${A}/permission`,{requestId:I,approved:E})}async deleteMessages(A){await this.#g(`/sessions/${A}/messages`)}compact(A){return this.#A(`/sessions/${A}/compact`)}getMessages(A,I={}){let E=new URLSearchParams;if(I.before)E.set("before",I.before);if(I.limit!==void 0)E.set("limit",String(I.limit));let C=E.toString();return this.#B(`/sessions/${A}/messages${C?`?${C}`:""}`)}async cancelStream(A){await this.#A(`/sessions/${A}/cancel`)}listMcpTools(){return this.#B("/mcp/tools")}async*openStream(A){let I=await this.#E(`/sessions/${A}/stream`),E=new TextDecoder,C="";for await(let Q of I){C+=E.decode(Q,{stream:!0});let D=C.split(`
|
|
431
431
|
|
|
432
|
-
`);C=D.pop()??"";for(let $ of D){let H=$.trim();if(H.startsWith("data: ")){let k=H.slice(6).trim();if(k)yield JSON.parse(k)}}}}#E(A){let I=this.#I;return new Promise((E,C)=>{let Q=lZ({socketPath:I,method:"GET",path:A,headers:{Accept:"text/event-stream"}});Q.on("response",(D)=>{if(D.statusCode!==200){C(new qR(`HTTP ${D.statusCode}`,D.statusCode??500));return}E(D)}),Q.on("error",C),Q.end()})}#B(A){return this.#Q("GET",A)}#A(A,I){return this.#Q("POST",A,I)}#g(A){return this.#Q("DELETE",A)}#Q(A,I,E){return new Promise((C,Q)=>{let D=E!==void 0?JSON.stringify(E):void 0,$=lZ({socketPath:this.#I,method:A,path:I,headers:D?{"content-type":"application/json","content-length":Buffer.byteLength(D)}:{}},(H)=>{let k=[];H.on("data",(K)=>k.push(K)),H.on("end",()=>{let K=Buffer.concat(k).toString("utf8").trim();if(H.statusCode&&H.statusCode>=400){let _=`HTTP ${H.statusCode}`;try{let P=JSON.parse(K);if(P.error)_=P.error}catch{}Q(new qR(_,H.statusCode));return}C(K?JSON.parse(K):void 0)})});if($.on("error",Q),D)$.write(D);$.end()})}}class qR extends Error{statusCode;constructor(A,I){super(A);this.statusCode=I;this.name="HttpError"}}function aG(A){if(A instanceof Error){let I=A.code;return A.message.includes("ENOENT")||A.message.includes("ECONNREFUSED")||A.message.includes("typo in the url or port")||I==="FailedToOpenSocket"}return!1}import{spawn as Yi}from"child_process";import{existsSync as Xi}from"fs";import{mkdir as Si,open as qi,readFile as zi,rm as oZ}from"fs/promises";import{homedir as Oi}from"os";import{dirname as zR,join as b5,resolve as dZ}from"path";import{fileURLToPath as _i}from"url";function Wi(A,I=Xi){let E=dZ(A,"../../../iquantum-daemon/src/index.ts");if(I(E))return E;return dZ(A,"daemon.js")}function Zi(){return Wi(zR(_i(import.meta.url)))}function Vi(A){return b5(zR(A),"daemon.log")}function j5(A){return b5(zR(A),"daemon.pid")}async function d1(A,I){let E=A.daemonEntry??Zi(),C=zR(A.socketPath);await Si(C,{recursive:!0});let Q=Vi(A.socketPath),D=await qi(Q,"a"),$=["run",E],H=Yi(process.execPath,$,{detached:!0,stdio:["ignore",D.fd,D.fd],env:Pi()});H.unref(),await D.close(),I.writeln(`daemon started (pid ${H.pid??"?"})`),I.writeln(`logs: ${Q}`)}function Pi(A=b5(Oi(),".iquantum"),I=process.env){return{...R$(A),...I}}async function pZ(A,I){let E=await Ti(j5(A.socketPath));if(!E){I.writeln("daemon is not running");return}try{process.kill(E,"SIGTERM"),await oZ(j5(A.socketPath),{force:!0}),I.writeln(`daemon stopped (pid ${E})`)}catch(C){if(C instanceof Error&&C.code==="ESRCH")I.writeln("daemon is not running"),await oZ(j5(A.socketPath),{force:!0});else throw C}}async function tZ(A,I){try{await A.client.health(),I.writeln("daemon is running")}catch{I.writeln("daemon is not running")}}async function Ti(A){try{let I=await zi(A,"utf8"),E=parseInt(I.trim(),10);return Number.isFinite(E)?E:null}catch{return null}}import{spawn as AV}from"child_process";import{homedir as yi}from"os";import{join as hi}from"path";var eG=vI(OB(),1);import{join as ji}from"path";var f5="claude-sonnet-4-6",u5="claude-haiku-4-5-20251001",bi="ghcr.io/ayhamjo7/iquantum-sandbox:latest";function aZ(A){let I=A.trim();if(!I)return"API key is required.";if(!I.startsWith("sk-"))return"API key must start with sk-.";return null}function fi(A,I=process.env){return{apiKey:A.apiKey.trim(),architectModel:A.architectModel.trim()||f5,editorModel:A.editorModel.trim()||u5,sandboxImage:I.IQUANTUM_SANDBOX_IMAGE?.trim()||bi}}async function sZ(A,I,E,C=()=>{return}){let Q=fi(A);await E.writeConfigFile(I,{ANTHROPIC_API_KEY:Q.apiKey,IQUANTUM_ARCHITECT_MODEL:Q.architectModel,IQUANTUM_EDITOR_MODEL:Q.editorModel,IQUANTUM_SANDBOX_IMAGE:Q.sandboxImage}),C(`\u2713 Config saved \u2192 ${ji(I,"config.json")}`),C(`Pulling sandbox image ${Q.sandboxImage}\u2026`),await E.pullSandboxImage(Q.sandboxImage,($)=>{let H=$.trim();if(H)C(H)}),C("\u2713 Sandbox image ready");let D=E.loadConfig(process.env,{configDir:I});return C("Starting daemon\u2026"),await E.startDaemon(D.socketPath),C("\u2713 Daemon started"),Q}function eZ(A){if(!A)throw Error("iq init requires an interactive terminal")}var FC=vI(RQ(),1);function OR({onComplete:A,configDir:I=hi(yi(),".iquantum"),services:E,startDaemonFn:C,isTTY:Q=process.stdin.isTTY}){eZ(Q);let D=xi(E,C),[$,H]=eG.useState("apiKey"),[k,K]=eG.useState(""),[_,P]=eG.useState(""),[q,W]=eG.useState(""),[u,x]=eG.useState(),[m,VA]=eG.useState([]);wU((HA,kA)=>{if(kA.ctrl&&HA==="c")process.exit(0);if($==="submitting"||$==="done")return;if(kA.backspace||kA.delete){QI((NA)=>NA.slice(0,-1));return}if(kA.return){if($==="apiKey"){let NA=aZ(k);if(NA){x(NA);return}x(void 0),H("architectModel");return}if($==="architectModel"){H("editorModel");return}H("submitting"),sZ({apiKey:k,architectModel:_,editorModel:q},I,D,(NA)=>VA((fA)=>[...fA,NA])).then(()=>{H("done"),A()}).catch((NA)=>{H("editorModel"),x(NA instanceof Error?NA.message:String(NA))});return}if(!kA.ctrl&&!kA.meta&&HA)QI((NA)=>`${NA}${HA}`),x(void 0)});function QI(HA){if($==="apiKey"){K(HA);return}if($==="architectModel"){P(HA);return}if($==="editorModel")W(HA)}return FC.jsxDEV(MB,{flexDirection:"column",children:[FC.jsxDEV(EI,{color:"cyan",children:"Welcome to iquantum"},void 0,!1,void 0,this),FC.jsxDEV(EI,{dimColor:!0,children:"First-run setup"},void 0,!1,void 0,this),FC.jsxDEV(EI,{children:["Anthropic API key:"," ",k?"*".repeat(k.length):FC.jsxDEV(EI,{dimColor:!0,children:"(required)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),FC.jsxDEV(EI,{children:["Architect model:"," ",_||FC.jsxDEV(EI,{dimColor:!0,children:["[",f5,"]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),FC.jsxDEV(EI,{children:["Editor model:"," ",q||FC.jsxDEV(EI,{dimColor:!0,children:["[",u5,"]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),u?FC.jsxDEV(EI,{color:"red",children:u},void 0,!1,void 0,this):null,m.map((HA)=>FC.jsxDEV(EI,{children:HA},HA,!1,void 0,this)),$==="apiKey"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter API key, then press \u21B5"},void 0,!1,void 0,this):null,$==="architectModel"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter architect model or press \u21B5 for default"},void 0,!1,void 0,this):null,$==="editorModel"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter editor model or press \u21B5 for default"},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function xi(A,I){return{writeConfigFile:A?.writeConfigFile??dv,pullSandboxImage:A?.pullSandboxImage??ii,startDaemon:A?.startDaemon??I??((E)=>d1({socketPath:E},{writeln:()=>{return}})),loadConfig:A?.loadConfig??Z1}}async function ii(A,I=()=>{return}){if(await mi(A))return;await new Promise((E,C)=>{let Q=AV("docker",["pull",A],{stdio:["ignore","pipe","pipe"]});Q.stdout.setEncoding("utf8"),Q.stderr.setEncoding("utf8"),Q.stdout.on("data",I),Q.stderr.on("data",I),Q.once("error",C),Q.once("close",(D)=>{if(D===0){E();return}C(Error(`docker pull exited with code ${D??"?"}`))})})}async function mi(A){return new Promise((I,E)=>{let C=AV("docker",["image","inspect",A],{stdio:["ignore","ignore","ignore"]});C.once("error",E),C.once("close",(Q)=>{I(Q===0)})})}class y5{#I;constructor(A){this.#I=new Map(A.map((I)=>[I.name,I]))}getCompletions(A){let I=A.toLowerCase();return[...this.#I.values()].filter((E)=>E.name.toLowerCase().startsWith(I))}get(A){return this.#I.get(A.toLowerCase())}getAll(){return[...this.#I.values()]}}var ni=/^[0-9a-f]{7,64}$/i;function nC(A,I){A.dispatch({type:"system_message",text:I,level:"info"})}function ww(A,I){A.dispatch({type:"system_message",text:I,level:"error"})}var ci=[{name:"help",description:"Show available commands",run(A,I){let E=I.registry.getAll().map((C)=>` /${C.name.padEnd(12)} ${C.description}`).join(`
|
|
432
|
+
`);C=D.pop()??"";for(let $ of D){let H=$.trim();if(H.startsWith("data: ")){let k=H.slice(6).trim();if(k)yield JSON.parse(k)}}}}#E(A){let I=this.#I;return new Promise((E,C)=>{let Q=lZ({socketPath:I,method:"GET",path:A,headers:{Accept:"text/event-stream"}});Q.on("response",(D)=>{if(D.statusCode!==200){C(new qR(`HTTP ${D.statusCode}`,D.statusCode??500));return}E(D)}),Q.on("error",C),Q.end()})}#B(A){return this.#Q("GET",A)}#A(A,I){return this.#Q("POST",A,I)}#g(A){return this.#Q("DELETE",A)}#Q(A,I,E){return new Promise((C,Q)=>{let D=E!==void 0?JSON.stringify(E):void 0,$=lZ({socketPath:this.#I,method:A,path:I,headers:D?{"content-type":"application/json","content-length":Buffer.byteLength(D)}:{}},(H)=>{let k=[];H.on("data",(K)=>k.push(K)),H.on("end",()=>{let K=Buffer.concat(k).toString("utf8").trim();if(H.statusCode&&H.statusCode>=400){let _=`HTTP ${H.statusCode}`;try{let P=JSON.parse(K);if(P.error)_=P.error}catch{}Q(new qR(_,H.statusCode));return}C(K?JSON.parse(K):void 0)})});if($.setTimeout(1e4,()=>{$.destroy(Error("daemon request timed out"))}),$.on("error",Q),D)$.write(D);$.end()})}}class qR extends Error{statusCode;constructor(A,I){super(A);this.statusCode=I;this.name="HttpError"}}function aG(A){if(A instanceof Error){let I=A.code;return A.message.includes("ENOENT")||A.message.includes("ECONNREFUSED")||A.message.includes("typo in the url or port")||I==="FailedToOpenSocket"}return!1}import{spawn as Yi}from"child_process";import{existsSync as Xi}from"fs";import{mkdir as Si,open as qi,readFile as zi,rm as oZ}from"fs/promises";import{homedir as Oi}from"os";import{dirname as zR,join as b5,resolve as dZ}from"path";import{fileURLToPath as _i}from"url";function Wi(A,I=Xi){let E=dZ(A,"../../../iquantum-daemon/src/index.ts");if(I(E))return E;return dZ(A,"daemon.js")}function Zi(){return Wi(zR(_i(import.meta.url)))}function Vi(A){return b5(zR(A),"daemon.log")}function j5(A){return b5(zR(A),"daemon.pid")}async function d1(A,I){let E=A.daemonEntry??Zi(),C=zR(A.socketPath);await Si(C,{recursive:!0});let Q=Vi(A.socketPath),D=await qi(Q,"a"),$=["run",E],H=Yi(process.execPath,$,{detached:!0,stdio:["ignore",D.fd,D.fd],env:Pi()});H.unref(),await D.close(),I.writeln(`daemon started (pid ${H.pid??"?"})`),I.writeln(`logs: ${Q}`)}function Pi(A=b5(Oi(),".iquantum"),I=process.env){return{...R$(A),...I}}async function pZ(A,I){let E=await Ti(j5(A.socketPath));if(!E){I.writeln("daemon is not running");return}try{process.kill(E,"SIGTERM"),await oZ(j5(A.socketPath),{force:!0}),I.writeln(`daemon stopped (pid ${E})`)}catch(C){if(C instanceof Error&&C.code==="ESRCH")I.writeln("daemon is not running"),await oZ(j5(A.socketPath),{force:!0});else throw C}}async function tZ(A,I){try{await A.client.health(),I.writeln("daemon is running")}catch{I.writeln("daemon is not running")}}async function Ti(A){try{let I=await zi(A,"utf8"),E=parseInt(I.trim(),10);return Number.isFinite(E)?E:null}catch{return null}}import{spawn as AV}from"child_process";import{homedir as yi}from"os";import{join as hi}from"path";var eG=vI(OB(),1);import{join as ji}from"path";var f5="claude-sonnet-4-6",u5="claude-haiku-4-5-20251001",bi="ghcr.io/ayhamjo7/iquantum-sandbox:latest";function aZ(A){let I=A.trim();if(!I)return"API key is required.";if(!I.startsWith("sk-"))return"API key must start with sk-.";return null}function fi(A,I=process.env){return{apiKey:A.apiKey.trim(),architectModel:A.architectModel.trim()||f5,editorModel:A.editorModel.trim()||u5,sandboxImage:I.IQUANTUM_SANDBOX_IMAGE?.trim()||bi}}async function sZ(A,I,E,C=()=>{return}){let Q=fi(A);await E.writeConfigFile(I,{ANTHROPIC_API_KEY:Q.apiKey,IQUANTUM_ARCHITECT_MODEL:Q.architectModel,IQUANTUM_EDITOR_MODEL:Q.editorModel,IQUANTUM_SANDBOX_IMAGE:Q.sandboxImage}),C(`\u2713 Config saved \u2192 ${ji(I,"config.json")}`),C(`Pulling sandbox image ${Q.sandboxImage}\u2026`),await E.pullSandboxImage(Q.sandboxImage,($)=>{let H=$.trim();if(H)C(H)}),C("\u2713 Sandbox image ready");let D=E.loadConfig(process.env,{configDir:I});return C("Starting daemon\u2026"),await E.startDaemon(D.socketPath),C("\u2713 Daemon started"),Q}function eZ(A){if(!A)throw Error("iq init requires an interactive terminal")}var FC=vI(RQ(),1);function OR({onComplete:A,configDir:I=hi(yi(),".iquantum"),services:E,startDaemonFn:C,isTTY:Q=process.stdin.isTTY}){eZ(Q);let D=xi(E,C),[$,H]=eG.useState("apiKey"),[k,K]=eG.useState(""),[_,P]=eG.useState(""),[q,W]=eG.useState(""),[u,x]=eG.useState(),[m,VA]=eG.useState([]);wU((HA,kA)=>{if(kA.ctrl&&HA==="c")process.exit(0);if($==="submitting"||$==="done")return;if(kA.backspace||kA.delete){QI((NA)=>NA.slice(0,-1));return}if(kA.return){if($==="apiKey"){let NA=aZ(k);if(NA){x(NA);return}x(void 0),H("architectModel");return}if($==="architectModel"){H("editorModel");return}H("submitting"),sZ({apiKey:k,architectModel:_,editorModel:q},I,D,(NA)=>VA((fA)=>[...fA,NA])).then(()=>{H("done"),A()}).catch((NA)=>{H("editorModel"),x(NA instanceof Error?NA.message:String(NA))});return}if(!kA.ctrl&&!kA.meta&&HA)QI((NA)=>`${NA}${HA}`),x(void 0)});function QI(HA){if($==="apiKey"){K(HA);return}if($==="architectModel"){P(HA);return}if($==="editorModel")W(HA)}return FC.jsxDEV(MB,{flexDirection:"column",children:[FC.jsxDEV(EI,{color:"cyan",children:"Welcome to iquantum"},void 0,!1,void 0,this),FC.jsxDEV(EI,{dimColor:!0,children:"First-run setup"},void 0,!1,void 0,this),FC.jsxDEV(EI,{children:["Anthropic API key:"," ",k?"*".repeat(k.length):FC.jsxDEV(EI,{dimColor:!0,children:"(required)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),FC.jsxDEV(EI,{children:["Architect model:"," ",_||FC.jsxDEV(EI,{dimColor:!0,children:["[",f5,"]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),FC.jsxDEV(EI,{children:["Editor model:"," ",q||FC.jsxDEV(EI,{dimColor:!0,children:["[",u5,"]"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),u?FC.jsxDEV(EI,{color:"red",children:u},void 0,!1,void 0,this):null,m.map((HA)=>FC.jsxDEV(EI,{children:HA},HA,!1,void 0,this)),$==="apiKey"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter API key, then press \u21B5"},void 0,!1,void 0,this):null,$==="architectModel"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter architect model or press \u21B5 for default"},void 0,!1,void 0,this):null,$==="editorModel"?FC.jsxDEV(EI,{dimColor:!0,children:"Enter editor model or press \u21B5 for default"},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function xi(A,I){return{writeConfigFile:A?.writeConfigFile??dv,pullSandboxImage:A?.pullSandboxImage??ii,startDaemon:A?.startDaemon??I??((E)=>d1({socketPath:E},{writeln:()=>{return}})),loadConfig:A?.loadConfig??Z1}}async function ii(A,I=()=>{return}){if(await mi(A))return;await new Promise((E,C)=>{let Q=AV("docker",["pull",A],{stdio:["ignore","pipe","pipe"]});Q.stdout.setEncoding("utf8"),Q.stderr.setEncoding("utf8"),Q.stdout.on("data",I),Q.stderr.on("data",I),Q.once("error",C),Q.once("close",(D)=>{if(D===0){E();return}C(Error(`docker pull exited with code ${D??"?"}`))})})}async function mi(A){return new Promise((I,E)=>{let C=AV("docker",["image","inspect",A],{stdio:["ignore","ignore","ignore"]});C.once("error",E),C.once("close",(Q)=>{I(Q===0)})})}class y5{#I;constructor(A){this.#I=new Map(A.map((I)=>[I.name,I]))}getCompletions(A){let I=A.toLowerCase();return[...this.#I.values()].filter((E)=>E.name.toLowerCase().startsWith(I))}get(A){return this.#I.get(A.toLowerCase())}getAll(){return[...this.#I.values()]}}var ni=/^[0-9a-f]{7,64}$/i;function nC(A,I){A.dispatch({type:"system_message",text:I,level:"info"})}function ww(A,I){A.dispatch({type:"system_message",text:I,level:"error"})}var ci=[{name:"help",description:"Show available commands",run(A,I){let E=I.registry.getAll().map((C)=>` /${C.name.padEnd(12)} ${C.description}`).join(`
|
|
433
433
|
`);nC(I,`Commands:
|
|
434
434
|
${E}`)}},{name:"status",description:"Show session ID, model, and token count",run(A,I){nC(I,[`Session : ${I.sessionId}`,`Model : ${I.modelName}`,`Tokens : ${I.tokenCount}`].join(`
|
|
435
435
|
`))}},{name:"model",description:"Show current model configuration",run(A,I){nC(I,[`Architect : ${I.modelName}`,`Editor : ${I.editorModel}`,"Hint: use `iq config set` or environment variables to override"].join(`
|
|
@@ -509,7 +509,7 @@ Please report this to https://github.com/markedjs/marked.`,A){let C="<p>An error
|
|
|
509
509
|
`).replaceAll(/<[^>]+>/g,"").replaceAll(/\n{3,}/g,`
|
|
510
510
|
|
|
511
511
|
`).trim())}function ym(A){return A.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll(""",'"').replaceAll("'","'")}function s5(A){let I=null;return A.split(`
|
|
512
|
-
`).map((E)=>{if(E.startsWith("+++")||E.startsWith("---"))return{type:"header",content:E,lineNo:null};if(E.startsWith("@@")){let Q=E.match(/^@@ -(\d+)/)?.[1];return I=Q?Number.parseInt(Q,10):null,{type:"hunk",content:E,lineNo:null}}if(E.startsWith("+"))return{type:"add",content:E.slice(1),lineNo:null};if(E.startsWith("-")){let Q=I;if(I!==null)I+=1;return{type:"del",content:E.slice(1),lineNo:Q}}let C=I;if(I!==null)I+=1;return{type:"ctx",content:E.startsWith(" ")?E.slice(1):E,lineNo:C}})}function mV(A){let I=s5(A);return{addCount:I.filter((E)=>E.type==="add").length,delCount:I.filter((E)=>E.type==="del").length}}var cg=vI(RQ(),1);function nV({file:A,patch:I,addCount:E,delCount:C}){let D=s5(I).map(($,H)=>({...$,key:`${A}:${H}:${$.type}`}));return cg.jsxDEV(MB,{flexDirection:"column",marginY:1,children:[cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:["\u250C\u2500 ",hm(A)," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.success,children:["+",E]},void 0,!0,void 0,this),cg.jsxDEV(EI,{dimColor:!0,children:" "},void 0,!1,void 0,this),cg.jsxDEV(EI,{color:ug.error,children:["\u2212",C]},void 0,!0,void 0,this),cg.jsxDEV(EI,{dimColor:!0,children:" \u2500\u2500\u2500\u2500\u2500\u2510"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D.map(($)=>{let H=$.lineNo===null?" ":`${$.lineNo}`.padStart(4," ");switch($.type){case"add":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.success,children:["+",$.content]},void 0,!0,void 0,this)]},$.key,!0,void 0,this);case"del":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.error,children:["-",$.content]},void 0,!0,void 0,this)]},$.key,!0,void 0,this);case"hunk":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.info,children:$.content},void 0,!1,void 0,this)]},$.key,!0,void 0,this);case"header":return cg.jsxDEV(MB,{children:cg.jsxDEV(EI,{dimColor:!0,children:[H," ",$.content]},void 0,!0,void 0,this)},$.key,!1,void 0,this);default:return cg.jsxDEV(MB,{children:cg.jsxDEV(EI,{dimColor:!0,children:[H," ",$.content]},void 0,!0,void 0,this)},$.key,!1,void 0,this)}})]},void 0,!0,void 0,this)}function hm(A){let I=process.stdout.columns??80,E=Math.max(0,I-20);if(A.length<=E)return A;if(E<=1)return"\u2026".slice(0,E);return`${A.slice(0,E-1)}\u2026`}var fR=vI(OB(),1),x6=vI(RQ(),1),cV=["\xB7","\xB7\xB7","\xB7\xB7\xB7"];function rV({text:A,expanded:I,isStreaming:E}){let[C,Q]=fR.useState(0);fR.useEffect(()=>{if(!E||I)return;let $=setInterval(()=>{Q((H)=>(H+1)%cV.length)},400);return()=>clearInterval($)},[I,E]);let D=A.length>80?`${A.slice(0,79)}\u2026`:A;return x6.jsxDEV(MB,{flexDirection:"column",children:[x6.jsxDEV(EI,{dimColor:!0,children:["\u2234 Thinking",!I&&E?cV[C]:""," ",I?"[ctrl+o to collapse]":"[ctrl+o to expand]"]},void 0,!0,void 0,this),I?x6.jsxDEV(EI,{dimColor:!0,children:A},void 0,!1,void 0,this):D?x6.jsxDEV(EI,{dimColor:!0,children:D},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var HE=vI(RQ(),1);function lV({items:A,streamingText:I="",thinkingText:E="",thinkingExpanded:C,thinkingStreaming:Q=!1}){return HE.jsxDEV(MB,{flexDirection:"column",minHeight:1,children:[A.map((D)=>HE.jsxDEV(xm,{item:D,thinkingExpanded:C,thinkingStreaming:Q},D.id,!1,void 0,this)),E||I?HE.jsxDEV(oV,{text:I,thinking:E,thinkingExpanded:C,thinkingStreaming:Q},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var xm=uR.memo(function({item:I,thinkingExpanded:E,thinkingStreaming:C}){if(I.type==="session_separator")return HE.jsxDEV(EI,{dimColor:!0,children:["\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ",fD.resumed," \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"]},void 0,!0,void 0,this);if(I.type==="compact_boundary")return HE.jsxDEV(EI,{dimColor:!0,children:["\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ",fD.compacted," \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"]},void 0,!0,void 0,this);if(I.type==="diff_preview")return HE.jsxDEV(nV,{file:I.file,patch:I.patch,addCount:I.addCount,delCount:I.delCount},void 0,!1,void 0,this);if(I.type==="checkpoint")return HE.jsxDEV(KV,{hash:I.hash,message:I.message},void 0,!1,void 0,this);if(I.type==="system_message"){if(I.level==="error")return HE.jsxDEV(A4,{message:I.text},void 0,!1,void 0,this);return HE.jsxDEV(EI,{color:"cyan",dimColor:!0,children:I.text},void 0,!1,void 0,this)}if(I.type==="permission_request"){if(!I.resolved)return null;return HE.jsxDEV(EI,{dimColor:!0,children:[I.approved?"\u2713":"\u2717"," tool ",I.tool," ",I.approved?"approved":"denied"]},void 0,!0,void 0,this)}if(I.role==="user")return HE.jsxDEV(im,{text:I.text},void 0,!1,void 0,this);return HE.jsxDEV(oV,{text:I.text,...I.thinking?{thinking:I.thinking}:{},thinkingExpanded:E,thinkingStreaming:C},void 0,!1,void 0,this)}),im=uR.memo(function({text:I}){return HE.jsxDEV(MB,{justifyContent:"flex-end",children:[HE.jsxDEV(EI,{dimColor:!0,children:"you "},void 0,!1,void 0,this),HE.jsxDEV(EI,{children:I},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}),oV=uR.memo(function({text:I,thinking:E,thinkingExpanded:C,thinkingStreaming:Q}){return HE.jsxDEV(MB,{flexDirection:"column",children:[E?HE.jsxDEV(rV,{text:E,expanded:C,isStreaming:Q},void 0,!1,void 0,this):null,I?HE.jsxDEV(EI,{children:iV(I)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)});function dV(A,I){return A.slice(-Math.max(1,I))}var tV=vI(RQ(),1);function pV({items:A,streamingText:I,thinkingText:E,thinkingExpanded:C,thinkingStreaming:Q,maxVisibleItems:D=20}){return tV.jsxDEV(lV,{items:dV(A,D),streamingText:I,thinkingText:E,thinkingExpanded:C,thinkingStreaming:Q},void 0,!1,void 0,this)}var mm="Daemon disconnected. Run `iq daemon start` to reconnect.";function e5(A){if(aG(A))return mm;return A instanceof Error?A.message:String(A)}var sV={tokenCount:0,isSubmitting:!1,messages:[],streamingText:"",thinkingText:"",thinkingExpanded:!1,nextTranscriptId:1,pendingPermissionId:null,completedPhases:new Set,retryCount:0,isFirstSubmit:!1},i6=["planning","implementing","validating"],nm=new Set(i6);function eV(A,I){switch(I.type){case"submitted":return{...A,error:void 0,isSubmitting:!0,streamingText:"",thinkingText:"",messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"message",role:"user",text:I.content}],nextTranscriptId:A.nextTranscriptId+1,completedPhases:new Set,retryCount:0,isFirstSubmit:!0};case"submit_error":return{...A,error:I.message,isSubmitting:!1};case"toggle_thinking":return{...A,thinkingExpanded:!A.thinkingExpanded};case"permission_resolved":return{...A,pendingPermissionId:null,messages:A.messages.map((E)=>E.type==="permission_request"&&E.requestId===I.requestId?{...E,resolved:!0,approved:I.approved}:E)};case"system_message":return{...A,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"system_message",text:I.text,level:I.level??"info"}],nextTranscriptId:A.nextTranscriptId+1};case"clear_transcript":return{...A,messages:[],streamingText:"",thinkingText:"",error:void 0,pendingPermissionId:null};case"hydrate_history":{let E=I.items.some((C)=>C.type==="checkpoint");return{...A,messages:[...I.items,...A.messages],completedPhases:E?new Set(i6):A.completedPhases,isFirstSubmit:E?!0:A.isFirstSubmit}}case"frame":return cm(A,I.frame)}}function cm(A,I){switch(I.type){case"phase_change":return{...A,phase:I.phase,completedPhases:lm(A.completedPhases,A.phase,I.phase)};case"token":if(A.error)return A;return{...A,streamingText:`${A.streamingText}${I.delta}`};case"thinking":if(A.error)return A;return{...A,thinkingText:`${A.thinkingText}${I.delta}`};case"compact_boundary":return{...A,tokenCount:I.tokenCount,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"compact_boundary",summary:I.summary}],nextTranscriptId:A.nextTranscriptId+1};case"done":if(A.error)return A;return rm(A);case"error":return{...A,error:I.message,phase:void 0,isSubmitting:!1,streamingText:"",thinkingText:""};case"diff_preview":{let{addCount:E,delCount:C}=mV(I.patch);return{...A,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"diff_preview",file:I.file,patch:I.patch,addCount:E,delCount:C}],nextTranscriptId:A.nextTranscriptId+1}}case"permission_request":return{...A,pendingPermissionId:I.requestId,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"permission_request",requestId:I.requestId,tool:I.tool,input:I.input,resolved:!1}],nextTranscriptId:A.nextTranscriptId+1};case"checkpoint":return{...A,completedPhases:new Set(i6),messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"checkpoint",hash:I.hash,message:I.message}],nextTranscriptId:A.nextTranscriptId+1};case"mcp_tool_call":case"plan_ready":return A;case"validate_result":return I.passed?A:{...A,retryCount:A.retryCount+1}}}function rm(A){let I=A.streamingText.length>0||A.thinkingText.length>0;return{...A,phase:void 0,isSubmitting:!1,streamingText:"",thinkingText:"",messages:I?[...A.messages,{id:E4(A.nextTranscriptId),type:"message",role:"assistant",text:A.streamingText,...A.thinkingText?{thinking:A.thinkingText}:{}}]:A.messages,nextTranscriptId:I?A.nextTranscriptId+1:A.nextTranscriptId}}function lm(A,I,E){if(!I||!aV(I)||!aV(E))return A;let C=i6.indexOf(I);if(i6.indexOf(E)<=C)return A;return new Set([...A,I])}function aV(A){return nm.has(A)}function E4(A){return`transcript-${A}`}var $U=vI(RQ(),1);function AP({client:A,session:I,modelName:E,editorModel:C,version:Q,maxRetries:D,registry:$,initialMessages:H=[]}){let[k,K]=GU.useReducer(eV,H,(W)=>({...sV,messages:W})),_=GU.useRef(!1),P=GU.useRef(0),q=GU.useMemo(()=>{if(!k.pendingPermissionId)return null;let W=k.messages.find((u)=>u.type==="permission_request"&&u.requestId===k.pendingPermissionId&&!u.resolved);return W?.type==="permission_request"?W:null},[k.pendingPermissionId,k.messages]);return wU((W,u)=>{if(u.ctrl&&W==="o"){K({type:"toggle_thinking"});return}if(u.ctrl&&W==="c"){let x=Date.now();if(x-P.current<500)process.exit(0);P.current=x;return}if(u.ctrl&&W==="l"){process.stdout.write("\x1B[2J\x1B[3J\x1B[H");return}if(u.escape&&k.isSubmitting)_.current=!1,K({type:"submit_error",message:"cancelled"}),A.cancelStream(I.id).catch(()=>{})}),GU.useEffect(()=>{let W=!0;return(async()=>{try{for await(let u of A.openStream(I.id)){if(!W)return;if(K({type:"frame",frame:u}),u.type==="done"||u.type==="error")_.current=!1}}catch(u){if(W)K({type:"submit_error",message:e5(u)}),_.current=!1}})(),()=>{W=!1}},[A,I.id]),$U.jsxDEV(MB,{flexDirection:"column",children:[$U.jsxDEV(pV,{items:k.messages,streamingText:k.streamingText,thinkingText:k.thinkingText,thinkingExpanded:k.thinkingExpanded,thinkingStreaming:k.phase==="thinking"},void 0,!1,void 0,this),k.isFirstSubmit?$U.jsxDEV(wV,{activePhase:k.phase??null,completedPhases:k.completedPhases},void 0,!1,void 0,this):null,q?$U.jsxDEV(CV,{requestId:q.requestId,tool:q.tool,input:q.input,onResolve:async(W,u)=>{try{await A.postPermission(I.id,W,u)}catch{}K({type:"permission_resolved",requestId:W,approved:u})}},void 0,!1,void 0,this):$U.jsxDEV(JV,{...k.phase?{phase:k.phase}:{},retryCount:k.retryCount,maxRetries:D},void 0,!1,void 0,this),k.error?$U.jsxDEV(A4,{message:k.error},void 0,!1,void 0,this):null,$U.jsxDEV(UV,{disabled:k.isSubmitting,isFirstSubmit:k.isFirstSubmit,...$?{registry:$}:{},onSubmit:async(W)=>{if(W.startsWith("/")&&$){let[u,...x]=W.slice(1).split(" "),m=u??"",VA=$.get(m);if(VA){await VA.run(x.join(" "),{client:A,registry:$,sessionId:I.id,dispatch:K,tokenCount:k.tokenCount,modelName:E,editorModel:C});return}K({type:"system_message",text:`Unknown command: /${m}. Type /help for a list.`,level:"error"});return}if(_.current)return;_.current=!0,K({type:"submitted",content:W});try{await A.postMessage(I.id,W)}catch(u){K({type:"submit_error",message:e5(u)}),_.current=!1}}},void 0,!1,void 0,this),$U.jsxDEV(NV,{version:Q,modelName:E,tokenCount:k.tokenCount},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{mkdir as om,readFile as dm,writeFile as pm}from"fs/promises";import{join as IP}from"path";async function BP(A){try{return(await dm(IP(A,"last-session"),"utf8")).trim()||null}catch{return null}}async function QP(A,I){await om(A,{recursive:!0}),await pm(IP(A,"last-session"),I,"utf8")}async function gP(A,I,E=A7,C={}){try{await A.health();return}catch($){if(!aG($))throw $}await I();let Q=C.attempts??50,D=C.pollIntervalMs??200;for(let $=0;$<Q;$+=1){await E(D);try{await A.health();return}catch(H){if(!aG(H))throw H}}throw Error("daemon did not become ready within 10 seconds")}async function A7(A){await new Promise((I)=>setTimeout(I,A))}function I7(A,I){try{return A(process.env,{configDir:I})}catch(E){if(E instanceof uG)return null;throw E}}import{mkdirSync as tm,readFileSync as am,writeFileSync as sm}from"fs";import{join as em}from"path";function An(A,I){let E=(K)=>K.replace(/^v/,"").split(".").map((_)=>parseInt(_,10)||0),[C=0,Q=0,D=0]=E(A),[$=0,H=0,k=0]=E(I);if($!==C)return $>C;if(H!==Q)return H>Q;return k>D}function EP(A,I,E="@iquantum/cli"){let C=em(I,"update-check.json"),Q=null;try{Q=JSON.parse(am(C,"utf8"))}catch{}let D=86400000;if(!Q||Date.now()-new Date(Q.checkedAt).getTime()>D)fetch(`https://registry.npmjs.org/${E}/latest`).then((H)=>H.json()).then((H)=>{let k=typeof H==="object"&&H!==null&&"version"in H&&typeof H.version==="string"?H.version:null;if(!k)return;try{tm(I,{recursive:!0}),sm(C,JSON.stringify({checkedAt:new Date().toISOString(),latestVersion:k},null,2),"utf8")}catch{}}).catch(()=>{});if(!Q?.latestVersion)return{updateAvailable:!1,latestVersion:null};return{updateAvailable:An(A,Q.latestVersion),latestVersion:Q.latestVersion}}var s1="1.1.1";var X0=vI(RQ(),1);function In({client:A,socketPath:I,modelName:E,editorModel:C,maxRetries:Q,version:D,repoPath:$,iquantumDir:H,skipSplash:k=!1,startDaemonFn:K,sleep:_,readLastSession:P=BP,writeLastSession:q=QP}){let W=H??DP(CP(),".iquantum"),u=hE.useMemo(()=>EP(s1,W),[W]),[x,m]=hE.useState(),[VA,QI]=hE.useState([]),[HA,kA]=hE.useState(k),NA=hE.useRef(IV()),[fA,bA]=hE.useState(),mA=hE.useCallback(()=>kA(!0),[]);if(hE.useEffect(()=>{let rA=!0;return(async()=>{try{await gP(A,K??(()=>d1({socketPath:I},{writeln:()=>{return}})),_??A7);let gI,UI=!1,NI=await P(W);if(NI)try{let nI=await A.getSession(NI);await A.listCheckpoints(NI),gI=nI,UI=!0}catch{}if(!gI)gI=await A.createSession($,{requireApproval:!0,autoApprove:!1}),await q(W,gI.id).catch(()=>{return});if(UI&&gI){let nI=await A.getMessages(gI.id,{limit:50}).catch(()=>null);if(nI&&nI.messages.length>0&&rA)QI(Qn(nI.messages,gI.id))}if(rA)m(gI)}catch(gI){if(rA)bA(gI instanceof Error?gI.message:String(gI))}})(),()=>{rA=!1}},[A,W,P,$,_,I,K,q]),fA)return X0.jsxDEV(A4,{message:fA},void 0,!1,void 0,this);if(!x)return X0.jsxDEV(EI,{dimColor:!0,children:"Starting daemon\u2026"},void 0,!1,void 0,this);if(!HA)return X0.jsxDEV(QV,{version:D,modelName:E,sessionId:x.id,skip:k,onComplete:mA},void 0,!1,void 0,this);return X0.jsxDEV(MB,{flexDirection:"column",children:[u.updateAvailable&&u.latestVersion?X0.jsxDEV(EI,{dimColor:!0,children:` update available: ${s1} \u2192 ${u.latestVersion} (run iq update)`},void 0,!1,void 0,this):null,X0.jsxDEV(AP,{client:A,session:x,modelName:E,editorModel:C,version:D,maxRetries:Q,registry:NA.current,initialMessages:VA},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Bn({version:A,repoPath:I,iquantumDir:E,loadConfigFn:C=Z1,clientFactory:Q=($)=>new o1($),startDaemonFn:D}){let $=E??DP(CP(),".iquantum"),[H,k]=hE.useState(()=>I7(C,$)),[K,_]=hE.useState(),P=hE.useMemo(()=>H?Q(H.socketPath):null,[Q,H]),q=hE.useCallback(()=>{try{k(I7(C,$))}catch(W){_(W instanceof Error?W.message:String(W))}},[C,$]);if(K)return X0.jsxDEV(A4,{message:K},void 0,!1,void 0,this);if(!H||!P)return X0.jsxDEV(OR,{configDir:$,onComplete:q,...D?{startDaemonFn:D}:{}},void 0,!1,void 0,this);return X0.jsxDEV(In,{client:P,socketPath:H.socketPath,modelName:H.architectModel,editorModel:H.editorModel,maxRetries:H.maxRetries,version:A,repoPath:I,iquantumDir:$,...D?{startDaemonFn:()=>D(H.socketPath)}:{}},void 0,!1,void 0,this)}function Qn(A,I){let E=0,C=A.filter((Q)=>Q.role==="user"||Q.role==="assistant").map((Q)=>({id:`history-${I}-${E++}`,type:"message",role:Q.role==="assistant"?"assistant":"user",text:Q.content.map((D)=>typeof D.text==="string"?D.text:"").join(`
|
|
512
|
+
`).map((E)=>{if(E.startsWith("+++")||E.startsWith("---"))return{type:"header",content:E,lineNo:null};if(E.startsWith("@@")){let Q=E.match(/^@@ -(\d+)/)?.[1];return I=Q?Number.parseInt(Q,10):null,{type:"hunk",content:E,lineNo:null}}if(E.startsWith("+"))return{type:"add",content:E.slice(1),lineNo:null};if(E.startsWith("-")){let Q=I;if(I!==null)I+=1;return{type:"del",content:E.slice(1),lineNo:Q}}let C=I;if(I!==null)I+=1;return{type:"ctx",content:E.startsWith(" ")?E.slice(1):E,lineNo:C}})}function mV(A){let I=s5(A);return{addCount:I.filter((E)=>E.type==="add").length,delCount:I.filter((E)=>E.type==="del").length}}var cg=vI(RQ(),1);function nV({file:A,patch:I,addCount:E,delCount:C}){let D=s5(I).map(($,H)=>({...$,key:`${A}:${H}:${$.type}`}));return cg.jsxDEV(MB,{flexDirection:"column",marginY:1,children:[cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:["\u250C\u2500 ",hm(A)," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.success,children:["+",E]},void 0,!0,void 0,this),cg.jsxDEV(EI,{dimColor:!0,children:" "},void 0,!1,void 0,this),cg.jsxDEV(EI,{color:ug.error,children:["\u2212",C]},void 0,!0,void 0,this),cg.jsxDEV(EI,{dimColor:!0,children:" \u2500\u2500\u2500\u2500\u2500\u2510"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),D.map(($)=>{let H=$.lineNo===null?" ":`${$.lineNo}`.padStart(4," ");switch($.type){case"add":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.success,children:["+",$.content]},void 0,!0,void 0,this)]},$.key,!0,void 0,this);case"del":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.error,children:["-",$.content]},void 0,!0,void 0,this)]},$.key,!0,void 0,this);case"hunk":return cg.jsxDEV(MB,{children:[cg.jsxDEV(EI,{dimColor:!0,children:[H," "]},void 0,!0,void 0,this),cg.jsxDEV(EI,{color:ug.info,children:$.content},void 0,!1,void 0,this)]},$.key,!0,void 0,this);case"header":return cg.jsxDEV(MB,{children:cg.jsxDEV(EI,{dimColor:!0,children:[H," ",$.content]},void 0,!0,void 0,this)},$.key,!1,void 0,this);default:return cg.jsxDEV(MB,{children:cg.jsxDEV(EI,{dimColor:!0,children:[H," ",$.content]},void 0,!0,void 0,this)},$.key,!1,void 0,this)}})]},void 0,!0,void 0,this)}function hm(A){let I=process.stdout.columns??80,E=Math.max(0,I-20);if(A.length<=E)return A;if(E<=1)return"\u2026".slice(0,E);return`${A.slice(0,E-1)}\u2026`}var fR=vI(OB(),1),x6=vI(RQ(),1),cV=["\xB7","\xB7\xB7","\xB7\xB7\xB7"];function rV({text:A,expanded:I,isStreaming:E}){let[C,Q]=fR.useState(0);fR.useEffect(()=>{if(!E||I)return;let $=setInterval(()=>{Q((H)=>(H+1)%cV.length)},400);return()=>clearInterval($)},[I,E]);let D=A.length>80?`${A.slice(0,79)}\u2026`:A;return x6.jsxDEV(MB,{flexDirection:"column",children:[x6.jsxDEV(EI,{dimColor:!0,children:["\u2234 Thinking",!I&&E?cV[C]:""," ",I?"[ctrl+o to collapse]":"[ctrl+o to expand]"]},void 0,!0,void 0,this),I?x6.jsxDEV(EI,{dimColor:!0,children:A},void 0,!1,void 0,this):D?x6.jsxDEV(EI,{dimColor:!0,children:D},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var HE=vI(RQ(),1);function lV({items:A,streamingText:I="",thinkingText:E="",thinkingExpanded:C,thinkingStreaming:Q=!1}){return HE.jsxDEV(MB,{flexDirection:"column",minHeight:1,children:[A.map((D)=>HE.jsxDEV(xm,{item:D,thinkingExpanded:C,thinkingStreaming:Q},D.id,!1,void 0,this)),E||I?HE.jsxDEV(oV,{text:I,thinking:E,thinkingExpanded:C,thinkingStreaming:Q},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var xm=uR.memo(function({item:I,thinkingExpanded:E,thinkingStreaming:C}){if(I.type==="session_separator")return HE.jsxDEV(EI,{dimColor:!0,children:["\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ",fD.resumed," \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"]},void 0,!0,void 0,this);if(I.type==="compact_boundary")return HE.jsxDEV(EI,{dimColor:!0,children:["\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ",fD.compacted," \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"]},void 0,!0,void 0,this);if(I.type==="diff_preview")return HE.jsxDEV(nV,{file:I.file,patch:I.patch,addCount:I.addCount,delCount:I.delCount},void 0,!1,void 0,this);if(I.type==="checkpoint")return HE.jsxDEV(KV,{hash:I.hash,message:I.message},void 0,!1,void 0,this);if(I.type==="system_message"){if(I.level==="error")return HE.jsxDEV(A4,{message:I.text},void 0,!1,void 0,this);return HE.jsxDEV(EI,{color:"cyan",dimColor:!0,children:I.text},void 0,!1,void 0,this)}if(I.type==="permission_request"){if(!I.resolved)return null;return HE.jsxDEV(EI,{dimColor:!0,children:[I.approved?"\u2713":"\u2717"," tool ",I.tool," ",I.approved?"approved":"denied"]},void 0,!0,void 0,this)}if(I.role==="user")return HE.jsxDEV(im,{text:I.text},void 0,!1,void 0,this);return HE.jsxDEV(oV,{text:I.text,...I.thinking?{thinking:I.thinking}:{},thinkingExpanded:E,thinkingStreaming:C},void 0,!1,void 0,this)}),im=uR.memo(function({text:I}){return HE.jsxDEV(MB,{justifyContent:"flex-end",children:[HE.jsxDEV(EI,{dimColor:!0,children:"you "},void 0,!1,void 0,this),HE.jsxDEV(EI,{children:I},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}),oV=uR.memo(function({text:I,thinking:E,thinkingExpanded:C,thinkingStreaming:Q}){return HE.jsxDEV(MB,{flexDirection:"column",children:[E?HE.jsxDEV(rV,{text:E,expanded:C,isStreaming:Q},void 0,!1,void 0,this):null,I?HE.jsxDEV(EI,{children:iV(I)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)});function dV(A,I){return A.slice(-Math.max(1,I))}var tV=vI(RQ(),1);function pV({items:A,streamingText:I,thinkingText:E,thinkingExpanded:C,thinkingStreaming:Q,maxVisibleItems:D=20}){return tV.jsxDEV(lV,{items:dV(A,D),streamingText:I,thinkingText:E,thinkingExpanded:C,thinkingStreaming:Q},void 0,!1,void 0,this)}var mm="Daemon disconnected. Run `iq daemon start` to reconnect.";function e5(A){if(aG(A))return mm;return A instanceof Error?A.message:String(A)}var sV={tokenCount:0,isSubmitting:!1,messages:[],streamingText:"",thinkingText:"",thinkingExpanded:!1,nextTranscriptId:1,pendingPermissionId:null,completedPhases:new Set,retryCount:0,isFirstSubmit:!1},i6=["planning","implementing","validating"],nm=new Set(i6);function eV(A,I){switch(I.type){case"submitted":return{...A,error:void 0,isSubmitting:!0,streamingText:"",thinkingText:"",messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"message",role:"user",text:I.content}],nextTranscriptId:A.nextTranscriptId+1,completedPhases:new Set,retryCount:0,isFirstSubmit:!0};case"submit_error":return{...A,error:I.message,isSubmitting:!1};case"toggle_thinking":return{...A,thinkingExpanded:!A.thinkingExpanded};case"permission_resolved":return{...A,pendingPermissionId:null,messages:A.messages.map((E)=>E.type==="permission_request"&&E.requestId===I.requestId?{...E,resolved:!0,approved:I.approved}:E)};case"system_message":return{...A,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"system_message",text:I.text,level:I.level??"info"}],nextTranscriptId:A.nextTranscriptId+1};case"clear_transcript":return{...A,messages:[],streamingText:"",thinkingText:"",error:void 0,pendingPermissionId:null};case"hydrate_history":{let E=I.items.some((C)=>C.type==="checkpoint");return{...A,messages:[...I.items,...A.messages],completedPhases:E?new Set(i6):A.completedPhases,isFirstSubmit:E?!0:A.isFirstSubmit}}case"frame":return cm(A,I.frame)}}function cm(A,I){switch(I.type){case"phase_change":return{...A,phase:I.phase,completedPhases:lm(A.completedPhases,A.phase,I.phase)};case"token":if(A.error)return A;return{...A,streamingText:`${A.streamingText}${I.delta}`};case"thinking":if(A.error)return A;return{...A,thinkingText:`${A.thinkingText}${I.delta}`};case"compact_boundary":return{...A,tokenCount:I.tokenCount,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"compact_boundary",summary:I.summary}],nextTranscriptId:A.nextTranscriptId+1};case"done":if(A.error)return A;return rm(A);case"error":return{...A,error:I.message,phase:void 0,isSubmitting:!1,streamingText:"",thinkingText:""};case"diff_preview":{let{addCount:E,delCount:C}=mV(I.patch);return{...A,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"diff_preview",file:I.file,patch:I.patch,addCount:E,delCount:C}],nextTranscriptId:A.nextTranscriptId+1}}case"permission_request":return{...A,pendingPermissionId:I.requestId,messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"permission_request",requestId:I.requestId,tool:I.tool,input:I.input,resolved:!1}],nextTranscriptId:A.nextTranscriptId+1};case"checkpoint":return{...A,completedPhases:new Set(i6),messages:[...A.messages,{id:E4(A.nextTranscriptId),type:"checkpoint",hash:I.hash,message:I.message}],nextTranscriptId:A.nextTranscriptId+1};case"mcp_tool_call":case"plan_ready":return A;case"validate_result":return I.passed?A:{...A,retryCount:A.retryCount+1}}}function rm(A){let I=A.streamingText.length>0||A.thinkingText.length>0;return{...A,phase:void 0,isSubmitting:!1,streamingText:"",thinkingText:"",messages:I?[...A.messages,{id:E4(A.nextTranscriptId),type:"message",role:"assistant",text:A.streamingText,...A.thinkingText?{thinking:A.thinkingText}:{}}]:A.messages,nextTranscriptId:I?A.nextTranscriptId+1:A.nextTranscriptId}}function lm(A,I,E){if(!I||!aV(I)||!aV(E))return A;let C=i6.indexOf(I);if(i6.indexOf(E)<=C)return A;return new Set([...A,I])}function aV(A){return nm.has(A)}function E4(A){return`transcript-${A}`}var $U=vI(RQ(),1);function AP({client:A,session:I,modelName:E,editorModel:C,version:Q,maxRetries:D,registry:$,initialMessages:H=[]}){let[k,K]=GU.useReducer(eV,H,(W)=>({...sV,messages:W})),_=GU.useRef(!1),P=GU.useRef(0),q=GU.useMemo(()=>{if(!k.pendingPermissionId)return null;let W=k.messages.find((u)=>u.type==="permission_request"&&u.requestId===k.pendingPermissionId&&!u.resolved);return W?.type==="permission_request"?W:null},[k.pendingPermissionId,k.messages]);return wU((W,u)=>{if(u.ctrl&&W==="o"){K({type:"toggle_thinking"});return}if(u.ctrl&&W==="c"){let x=Date.now();if(x-P.current<500)process.exit(0);P.current=x;return}if(u.ctrl&&W==="l"){process.stdout.write("\x1B[2J\x1B[3J\x1B[H");return}if(u.escape&&k.isSubmitting)_.current=!1,K({type:"submit_error",message:"cancelled"}),A.cancelStream(I.id).catch(()=>{})}),GU.useEffect(()=>{let W=!0;return(async()=>{try{for await(let u of A.openStream(I.id)){if(!W)return;if(K({type:"frame",frame:u}),u.type==="done"||u.type==="error")_.current=!1}}catch(u){if(W)K({type:"submit_error",message:e5(u)}),_.current=!1}})(),()=>{W=!1}},[A,I.id]),$U.jsxDEV(MB,{flexDirection:"column",children:[$U.jsxDEV(pV,{items:k.messages,streamingText:k.streamingText,thinkingText:k.thinkingText,thinkingExpanded:k.thinkingExpanded,thinkingStreaming:k.phase==="thinking"},void 0,!1,void 0,this),k.isFirstSubmit?$U.jsxDEV(wV,{activePhase:k.phase??null,completedPhases:k.completedPhases},void 0,!1,void 0,this):null,q?$U.jsxDEV(CV,{requestId:q.requestId,tool:q.tool,input:q.input,onResolve:async(W,u)=>{try{await A.postPermission(I.id,W,u)}catch{}K({type:"permission_resolved",requestId:W,approved:u})}},void 0,!1,void 0,this):$U.jsxDEV(JV,{...k.phase?{phase:k.phase}:{},retryCount:k.retryCount,maxRetries:D},void 0,!1,void 0,this),k.error?$U.jsxDEV(A4,{message:k.error},void 0,!1,void 0,this):null,$U.jsxDEV(UV,{disabled:k.isSubmitting,isFirstSubmit:k.isFirstSubmit,...$?{registry:$}:{},onSubmit:async(W)=>{if(W.startsWith("/")&&$){let[u,...x]=W.slice(1).split(" "),m=u??"",VA=$.get(m);if(VA){await VA.run(x.join(" "),{client:A,registry:$,sessionId:I.id,dispatch:K,tokenCount:k.tokenCount,modelName:E,editorModel:C});return}K({type:"system_message",text:`Unknown command: /${m}. Type /help for a list.`,level:"error"});return}if(_.current)return;_.current=!0,K({type:"submitted",content:W});try{await A.postMessage(I.id,W)}catch(u){K({type:"submit_error",message:e5(u)}),_.current=!1}}},void 0,!1,void 0,this),$U.jsxDEV(NV,{version:Q,modelName:E,tokenCount:k.tokenCount},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{mkdir as om,readFile as dm,writeFile as pm}from"fs/promises";import{join as IP}from"path";async function BP(A){try{return(await dm(IP(A,"last-session"),"utf8")).trim()||null}catch{return null}}async function QP(A,I){await om(A,{recursive:!0}),await pm(IP(A,"last-session"),I,"utf8")}async function gP(A,I,E=A7,C={}){try{await A.health();return}catch($){if(!aG($))throw $}await I();let Q=C.attempts??50,D=C.pollIntervalMs??200;for(let $=0;$<Q;$+=1){await E(D);try{await A.health();return}catch(H){if(!aG(H))throw H}}throw Error("daemon did not become ready within 10 seconds")}async function A7(A){await new Promise((I)=>setTimeout(I,A))}function I7(A,I){try{return A(process.env,{configDir:I})}catch(E){if(E instanceof uG)return null;throw E}}import{mkdirSync as tm,readFileSync as am,writeFileSync as sm}from"fs";import{join as em}from"path";function An(A,I){let E=(K)=>K.replace(/^v/,"").split(".").map((_)=>parseInt(_,10)||0),[C=0,Q=0,D=0]=E(A),[$=0,H=0,k=0]=E(I);if($!==C)return $>C;if(H!==Q)return H>Q;return k>D}function EP(A,I,E="@iquantum/cli"){let C=em(I,"update-check.json"),Q=null;try{Q=JSON.parse(am(C,"utf8"))}catch{}let D=86400000;if(!Q||Date.now()-new Date(Q.checkedAt).getTime()>D)fetch(`https://registry.npmjs.org/${E}/latest`).then((H)=>H.json()).then((H)=>{let k=typeof H==="object"&&H!==null&&"version"in H&&typeof H.version==="string"?H.version:null;if(!k)return;try{tm(I,{recursive:!0}),sm(C,JSON.stringify({checkedAt:new Date().toISOString(),latestVersion:k},null,2),"utf8")}catch{}}).catch(()=>{});if(!Q?.latestVersion)return{updateAvailable:!1,latestVersion:null};return{updateAvailable:An(A,Q.latestVersion),latestVersion:Q.latestVersion}}var s1="1.1.2";var X0=vI(RQ(),1);function In({client:A,socketPath:I,modelName:E,editorModel:C,maxRetries:Q,version:D,repoPath:$,iquantumDir:H,skipSplash:k=!1,startDaemonFn:K,sleep:_,readLastSession:P=BP,writeLastSession:q=QP}){let W=H??DP(CP(),".iquantum"),u=hE.useMemo(()=>EP(s1,W),[W]),[x,m]=hE.useState(),[VA,QI]=hE.useState([]),[HA,kA]=hE.useState(k),NA=hE.useRef(IV()),[fA,bA]=hE.useState(),mA=hE.useCallback(()=>kA(!0),[]);if(hE.useEffect(()=>{let rA=!0;return(async()=>{try{await gP(A,K??(()=>d1({socketPath:I},{writeln:()=>{return}})),_??A7);let gI,UI=!1,NI=await P(W);if(NI)try{let nI=await A.getSession(NI);await A.listCheckpoints(NI),gI=nI,UI=!0}catch{}if(!gI)gI=await A.createSession($,{requireApproval:!0,autoApprove:!1}),await q(W,gI.id).catch(()=>{return});if(UI&&gI){let nI=await A.getMessages(gI.id,{limit:50}).catch(()=>null);if(nI&&nI.messages.length>0&&rA)QI(Qn(nI.messages,gI.id))}if(rA)m(gI)}catch(gI){if(rA)bA(gI instanceof Error?gI.message:String(gI))}})(),()=>{rA=!1}},[A,W,P,$,_,I,K,q]),fA)return X0.jsxDEV(A4,{message:fA},void 0,!1,void 0,this);if(!x)return X0.jsxDEV(EI,{dimColor:!0,children:"Starting daemon\u2026"},void 0,!1,void 0,this);if(!HA)return X0.jsxDEV(QV,{version:D,modelName:E,sessionId:x.id,skip:k,onComplete:mA},void 0,!1,void 0,this);return X0.jsxDEV(MB,{flexDirection:"column",children:[u.updateAvailable&&u.latestVersion?X0.jsxDEV(EI,{dimColor:!0,children:` update available: ${s1} \u2192 ${u.latestVersion} (run iq update)`},void 0,!1,void 0,this):null,X0.jsxDEV(AP,{client:A,session:x,modelName:E,editorModel:C,version:D,maxRetries:Q,registry:NA.current,initialMessages:VA},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Bn({version:A,repoPath:I,iquantumDir:E,loadConfigFn:C=Z1,clientFactory:Q=($)=>new o1($),startDaemonFn:D}){let $=E??DP(CP(),".iquantum"),[H,k]=hE.useState(()=>I7(C,$)),[K,_]=hE.useState(),P=hE.useMemo(()=>H?Q(H.socketPath):null,[Q,H]),q=hE.useCallback(()=>{try{k(I7(C,$))}catch(W){_(W instanceof Error?W.message:String(W))}},[C,$]);if(K)return X0.jsxDEV(A4,{message:K},void 0,!1,void 0,this);if(!H||!P)return X0.jsxDEV(OR,{configDir:$,onComplete:q,...D?{startDaemonFn:D}:{}},void 0,!1,void 0,this);return X0.jsxDEV(In,{client:P,socketPath:H.socketPath,modelName:H.architectModel,editorModel:H.editorModel,maxRetries:H.maxRetries,version:A,repoPath:I,iquantumDir:$,...D?{startDaemonFn:()=>D(H.socketPath)}:{}},void 0,!1,void 0,this)}function Qn(A,I){let E=0,C=A.filter((Q)=>Q.role==="user"||Q.role==="assistant").map((Q)=>({id:`history-${I}-${E++}`,type:"message",role:Q.role==="assistant"?"assistant":"user",text:Q.content.map((D)=>typeof D.text==="string"?D.text:"").join(`
|
|
513
513
|
`).trim()}));return C.push({id:`history-sep-${I}`,type:"session_separator"}),C}async function wP(A){await Z6(X0.jsxDEV(Bn,{version:A.version,repoPath:A.repoPath??process.cwd(),...A.iquantumDir?{iquantumDir:A.iquantumDir}:{},...A.loadConfigFn?{loadConfigFn:A.loadConfigFn}:{},...A.clientFactory?{clientFactory:A.clientFactory}:{},...A.startDaemonFn?{startDaemonFn:A.startDaemonFn}:{}},void 0,!1,void 0,this),{exitOnCtrlC:!1}).waitUntilExit()}import{homedir as gn}from"os";import{join as En}from"path";var B7=["ANTHROPIC_API_KEY","IQUANTUM_PROVIDER","IQUANTUM_BASE_URL","IQUANTUM_API_KEY","IQUANTUM_ARCHITECT_MODEL","IQUANTUM_EDITOR_MODEL","IQUANTUM_SOCKET","IQUANTUM_SANDBOX_IMAGE","IQUANTUM_EXEC_TIMEOUT_MS","IQUANTUM_MCP_SERVERS","MAX_RETRIES"];function UP(A){return B7.includes(A)}function $P(A,I){if((A==="ANTHROPIC_API_KEY"||A==="IQUANTUM_API_KEY")&&I.length>7)return`${I.slice(0,3)}...${I.slice(-4)}`;return I}function Q7(){return En(gn(),".iquantum")}function GP(A,I=Q7()){let E=R$(I),C=Object.entries(E);if(C.length===0){A.writeln("No config file found. Run `iq init` to create one.");return}for(let[Q,D]of C)if(typeof D==="string")A.writeln(`${Q}=${$P(Q,D)}`)}async function JP(A,I,E,C=Q7()){if(!UP(A)){E.writeln(`Unknown config key: ${A}
|
|
514
514
|
Known keys: ${B7.join(", ")}`);return}await dv(C,{[A]:I}),E.writeln(`set ${A}`)}function HP(A,I,E=Q7()){if(!UP(A)){I.writeln(`Unknown config key: ${A}
|
|
515
515
|
Known keys: ${B7.join(", ")}`);return}let Q=R$(E)[A];if(typeof Q!=="string"){I.writeln("(not set)");return}I.writeln($P(A,Q))}async function vP(A,I,E,C,Q){let D=I.repo??process.cwd(),$;try{$=await E.createSession(D,{requireApproval:!0,autoApprove:!0})}catch(K){if(aG(K)){Q.writeln("daemon is not running \u2014 start it first with: iq daemon start");return}throw K}let H=E.openStream($.id),k=E.startTask($.id,A);try{for await(let K of H)switch(K.type){case"token":Q.write(K.delta);break;case"phase_change":if(K.phase==="implementing")Q.writeln(`
|