@qitqode/qitqode-android-arm64 0.1.31 → 0.1.33
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/bundle/{chunk-6t1ehq36.js → chunk-0e1vkdze.js} +1 -1
- package/bundle/{chunk-s9ntkjz3.js → chunk-0h6rn479.js} +1 -1
- package/bundle/{chunk-gcw4rn10.js → chunk-0t4324w5.js} +1 -1
- package/bundle/chunk-18bj8z8m.js +28 -0
- package/bundle/{chunk-n0dy98h2.js → chunk-19g6dhva.js} +1 -1
- package/bundle/{chunk-0w0ctb90.js → chunk-1ap7sh2c.js} +1 -1
- package/bundle/{chunk-qvnb3j71.js → chunk-2bn2b29j.js} +1 -1
- package/bundle/{chunk-1fswr17z.js → chunk-2et3wkjy.js} +1 -1
- package/bundle/{chunk-gbrnn2dk.js → chunk-3bssxmtg.js} +1 -1
- package/bundle/{chunk-mh0j6dzy.js → chunk-3dadmgxa.js} +1 -1
- package/bundle/{chunk-ssajqv72.js → chunk-43xt69m8.js} +1 -1
- package/bundle/{chunk-44a82dg0.js → chunk-481k3dag.js} +2 -2
- package/bundle/{chunk-3h9rq2wq.js → chunk-48nm6v8b.js} +1 -1
- package/bundle/{chunk-f8eter69.js → chunk-4fgzp2zd.js} +1 -1
- package/bundle/{chunk-csz0dgyp.js → chunk-4m5yesw8.js} +1 -1
- package/bundle/{chunk-0yt5njh7.js → chunk-5gmjtmc4.js} +2 -2
- package/bundle/{chunk-bgw4fvg2.js → chunk-5v6b8mr6.js} +1 -1
- package/bundle/{chunk-4d87mhwn.js → chunk-6r7z94e6.js} +1 -1
- package/bundle/{chunk-mcg24gkb.js → chunk-711dc303.js} +1 -1
- package/bundle/{chunk-3ytjm3az.js → chunk-9bzhxenb.js} +1 -1
- package/bundle/{chunk-phv9kdq6.js → chunk-9k6hz80e.js} +1 -1
- package/bundle/{chunk-c1vnp55z.js → chunk-a1g7jr3r.js} +1 -1
- package/bundle/{chunk-jxswwvr3.js → chunk-a1kazz9r.js} +1 -1
- package/bundle/{chunk-hnctaq8s.js → chunk-a3aqmm3x.js} +1 -1
- package/bundle/{chunk-anwnwfjf.js → chunk-aecc391x.js} +1 -1
- package/bundle/{chunk-mxzceza9.js → chunk-bdd97g5y.js} +1 -1
- package/bundle/{chunk-5v0xjs3x.js → chunk-bnap670d.js} +1 -1
- package/bundle/chunk-bnmz683j.js +2 -0
- package/bundle/{chunk-8ymffyep.js → chunk-ccmbckek.js} +1 -1
- package/bundle/{chunk-5eq1fft9.js → chunk-ctpy42xe.js} +1 -1
- package/bundle/{chunk-fxdtq2ed.js → chunk-d2ttw3wf.js} +1 -1
- package/bundle/{chunk-83gqkmth.js → chunk-d8dsdcb3.js} +1 -1
- package/bundle/{chunk-53w4zqps.js → chunk-dxje3azs.js} +1 -1
- package/bundle/{chunk-d68fzyw7.js → chunk-e1w70zdn.js} +1 -1
- package/bundle/{chunk-eh7e49k4.js → chunk-ea5ph627.js} +1 -1
- package/bundle/{chunk-50tb3g5x.js → chunk-etvs6a6y.js} +1 -1
- package/bundle/{chunk-r78czx4d.js → chunk-famryv52.js} +1 -1
- package/bundle/{chunk-qbc36nbb.js → chunk-ff8nb7b3.js} +1 -1
- package/bundle/{chunk-pxvk3syj.js → chunk-fgzk49cr.js} +1 -1
- package/bundle/{chunk-6bphjajd.js → chunk-ftas05da.js} +1 -1
- package/bundle/{chunk-20f83ca0.js → chunk-ftn49yn1.js} +1 -1
- package/bundle/{chunk-z6pwkwdr.js → chunk-ftnadrks.js} +1 -1
- package/bundle/{chunk-7pfj4x1a.js → chunk-g453xy7p.js} +1 -1
- package/bundle/{chunk-31mnd3ph.js → chunk-gxq9vh1z.js} +1 -1
- package/bundle/chunk-hdrbyarv.js +3 -0
- package/bundle/{chunk-9mjz6e27.js → chunk-hkqnqw3x.js} +1 -1
- package/bundle/{chunk-vb286b31.js → chunk-m1s19p9n.js} +1 -1
- package/bundle/{chunk-r4ndwym0.js → chunk-mpkvpn2y.js} +1 -1
- package/bundle/{chunk-9x5232dw.js → chunk-mrt1z4m8.js} +1 -1
- package/bundle/{chunk-fyqjm5fv.js → chunk-n1600mnf.js} +1 -1
- package/bundle/{chunk-cmbh77cs.js → chunk-n6wt9m2k.js} +1 -1
- package/bundle/{chunk-4gkk28xk.js → chunk-np50azpb.js} +1 -1
- package/bundle/chunk-p3pemdns.js +2 -0
- package/bundle/{chunk-takew94z.js → chunk-pfyhg0m7.js} +1 -1
- package/bundle/{chunk-68yw2hk9.js → chunk-q6pn67ps.js} +1 -1
- package/bundle/{chunk-redjxn13.js → chunk-qn6gdhns.js} +1 -1
- package/bundle/{chunk-pf9g671w.js → chunk-r1zf109g.js} +1 -1
- package/bundle/{chunk-1f7ajq8s.js → chunk-rbbw7bs0.js} +1 -1
- package/bundle/{chunk-50sv6y2e.js → chunk-rh9vnpgr.js} +1 -1
- package/bundle/{chunk-c1bdzxbx.js → chunk-rryytkmg.js} +1 -1
- package/bundle/{chunk-c14s0kxq.js → chunk-rvfvk2ty.js} +1 -1
- package/bundle/{chunk-cnmq5xtq.js → chunk-rzt0ge3t.js} +2 -2
- package/bundle/{chunk-pctt1qv8.js → chunk-s08qccxa.js} +1 -1
- package/bundle/{chunk-vbeb74ny.js → chunk-s2x0rqj4.js} +1 -1
- package/bundle/{chunk-d65qs4d0.js → chunk-srt5peec.js} +1 -1
- package/bundle/{chunk-fq0x3esz.js → chunk-tc18nbmn.js} +2 -2
- package/bundle/{chunk-ehhas0ew.js → chunk-te47zdxd.js} +1 -1
- package/bundle/{chunk-f2btnww9.js → chunk-tt9smgmg.js} +1 -1
- package/bundle/{chunk-ez8vkgfz.js → chunk-v7ezt8k3.js} +1 -1
- package/bundle/{chunk-6bpe215q.js → chunk-v7w4nfn7.js} +1 -1
- package/bundle/{chunk-abd1cfpg.js → chunk-vqg5q96v.js} +1 -1
- package/bundle/{chunk-drvkj3xg.js → chunk-vrc0h1q7.js} +1 -1
- package/bundle/{chunk-jcjbr3q7.js → chunk-vykgpaqt.js} +1 -1
- package/bundle/{chunk-04n2ycg5.js → chunk-wefez1gt.js} +45 -45
- package/bundle/{chunk-fjq3a347.js → chunk-x5trw1f5.js} +1 -1
- package/bundle/{chunk-11x3t2tt.js → chunk-xn70ep9n.js} +1 -1
- package/bundle/{chunk-g9cjsfvg.js → chunk-yphsjp71.js} +1 -1
- package/bundle/{chunk-873skv7w.js → chunk-zzv0yayn.js} +1 -1
- package/bundle/index.js +3 -3
- package/bundle/worker.js +1 -1
- package/package.json +1 -1
- package/bundle/chunk-excnptfy.js +0 -2
- package/bundle/chunk-m5m448mg.js +0 -3
- package/bundle/chunk-nsk8dkwp.js +0 -28
- package/bundle/chunk-ppjnqexm.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{rm as jn,sm as pt,tm as bn,um as _t,wm as Xr,xm as Yr}from"./chunk-redjxn13.js";import{$m as fo,Bm as er,Cm as mr,Dm as ur,Dn as ut,Em as yr,Fm as lr,Gm as fr,Hm as gr,Im as sr,Jm as pr,Km as _r,Lm as Nr,Mm as Tr,Nm as q,Om as Ar,Pm as dr,Qm as Or,Rm as $r,Sm as Dr,Tm as vr,Um as F,Vm as D,Wm as yn,Xm as un,Ym as Zo,Zm as Qr,_m as U,an as Rn,bn as go,cn as so,dn as po,en as _o,fn as No,gn as To,hn as Ao,in as Br,jn as Oo,kn as $o,ln as Do,mn as Ir,nn as vo,on as Lr,pn as Qo,qn as Sr,rn as Gr,sn as Mr,tn as xr,un as Cr,vn as Jr,wn as Bo,xn as Io,ym as uo,yn as wo,zm as yo}from"./chunk-bn0h9dny.js";import{ho as wn,lo as Fn}from"./chunk-vcw00k0n.js";import{Co as ft}from"./chunk-2hc5z7b5.js";import{Do as Mo}from"./chunk-d68fzyw7.js";import{Fq as Pn,Gq as hn,Hq as _n,Iq as hr,Jq as it,Lq as nt}from"./chunk-c1bdzxbx.js";import{Mq as rt}from"./chunk-ehhas0ew.js";import{Sr as ro}from"./chunk-4cnwn1rh.js";import{Gs as fn,Qs as On,Rs as nn,Wr as co,_s as a}from"./chunk-m5m448mg.js";import{kt as Zr,nt as ko,ot as z,st as mo}from"./chunk-tqj69nh6.js";import{ut as j}from"./chunk-5tray1fw.js";import{Fz as Cn,jz as Nn,rz as Gn}from"./chunk-gagtmjmp.js";import{EI as In,OE as h,RM as _,WD as Ro,aO as Ur,bE as Zn,bN as Wo,iE as gn,pH as r,uB as an,yE as Wr,zC as Dn}from"./chunk-zs8kqdsf.js";import{DO as dn}from"./chunk-7xm75w1e.js";var qo={};dn(qo,{run:()=>Ot});var mn={time_created:F().notNull().$default(()=>Date.now()),time_updated:F().notNull().$onUpdate(()=>Date.now())};var G=un("project",{id:D().$type().primaryKey(),worktree:D().notNull(),vcs:D(),name:D(),icon_url:D(),icon_color:D(),...mn,time_initialized:F(),sandboxes:D({mode:"json"}).notNull().$type(),commands:D({mode:"json"}).$type()});var ln=un("session",{id:D().$type().primaryKey(),project_id:D().$type().notNull().references(()=>G.id,{onDelete:"cascade"}),workspace_id:D().$type(),parent_id:D().$type(),context_from:D().$type(),context_watermark:D().$type(),slug:D().notNull(),directory:D().notNull(),title:D().notNull(),version:D().notNull(),share_url:D(),summary_additions:F(),summary_deletions:F(),summary_files:F(),summary_diffs:D({mode:"json"}).$type(),revert:D({mode:"json"}).$type(),permission:D({mode:"json"}).$type(),...mn,time_compacting:F(),time_archived:F(),last_checkpoint_message_id:D().$type()},(n)=>[yn("session_project_idx").on(n.project_id),yn("session_workspace_idx").on(n.workspace_id),yn("session_parent_idx").on(n.parent_id),yn("session_context_from_idx").on(n.context_from)]),eo=un("message",{id:D().$type().primaryKey(),session_id:D().$type().notNull().references(()=>ln.id,{onDelete:"cascade"}),agent_id:D().notNull().default("main"),...mn,data:D({mode:"json"}).notNull().$type()},(n)=>[yn("message_session_time_created_id_idx").on(n.session_id,n.time_created,n.id),yn("message_session_agent_idx").on(n.session_id,n.agent_id,n.id)]),Xo=un("part",{id:D().$type().primaryKey(),message_id:D().$type().notNull().references(()=>eo.id,{onDelete:"cascade"}),session_id:D().$type().notNull(),...mn,data:D({mode:"json"}).notNull().$type()},(n)=>[yn("part_message_id_id_idx").on(n.message_id,n.id),yn("part_session_idx").on(n.session_id)]),Yo=un("todo",{session_id:D().$type().notNull().references(()=>ln.id,{onDelete:"cascade"}),content:D().notNull(),status:D().notNull(),position:F().notNull(),...mn},(n)=>[Zo({columns:[n.session_id,n.position]}),yn("todo_session_idx").on(n.session_id)]),ao=un("permission",{project_id:D().primaryKey().references(()=>G.id,{onDelete:"cascade"}),...mn,data:D({mode:"json"}).notNull().$type()});var zo=un("session_share",{session_id:D().primaryKey().references(()=>ln.id,{onDelete:"cascade"}),id:D().notNull(),secret:D().notNull(),url:D().notNull(),...mn});import Y from"path";var W=a.create({service:"json-migration"});async function Ot(n,o){let t=Y.join(On.Path.data,"storage");if(!await mo.exists(t))return W.info("storage directory does not exist, skipping migration"),{projects:0,sessions:0,messages:0,parts:0,todos:0,permissions:0,shares:0,errors:[]};W.info("starting json to sqlite migration",{storageDir:t});let g=performance.now();n.run("PRAGMA journal_mode = WAL"),n.run("PRAGMA synchronous = OFF"),n.run("PRAGMA cache_size = 10000"),n.run("PRAGMA temp_store = MEMORY");let e={projects:0,sessions:0,messages:0,parts:0,todos:0,permissions:0,shares:0,errors:[]},T={sessions:0,todos:0,permissions:0,shares:0},p=e.errors,A=1000,M=Date.now();async function H(l){return ko.scan(l,{cwd:t,absolute:!0})}async function C(l,L,x){let v=x-L,N=Array(v);for(let K=0;K<v;K++)N[K]=mo.readJson(l[L+K]);let S=await Promise.allSettled(N),P=Array(v);for(let K=0;K<S.length;K++){let k=S[K];if(k.status==="fulfilled"){P[K]=k.value;continue}p.push(`failed to read ${l[L+K]}: ${k.reason}`)}return P}function J(l,L,x){if(l.length===0)return 0;try{return n.insert(L).values(l).onConflictDoNothing().run(),l.length}catch(v){return p.push(`failed to migrate ${x} batch: ${v}`),0}}W.info("scanning files...");let[R,O,Q,I,f,s,m]=await Promise.all([H("project/*.json"),H("session/*/*.json"),H("message/*/*.json"),H("part/*/*.json"),H("todo/*.json"),H("permission/*.json"),H("session_share/*.json")]);W.info("file scan complete",{projects:R.length,sessions:O.length,messages:Q.length,parts:I.length,todos:f.length,permissions:s.length,shares:m.length});let y=Math.max(1,R.length+O.length+Q.length+I.length+f.length+s.length+m.length),i=o?.progress,u=0,$=(l,L)=>{u=Math.min(y,u+L),i?.({current:u,total:y,label:l})};i?.({current:u,total:y,label:"starting"}),n.run("BEGIN TRANSACTION");let B=new Set,d=[];for(let l=0;l<R.length;l+=A){let L=Math.min(l+A,R.length),x=await C(R,l,L);d.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=Y.basename(R[l+v],".json");B.add(S),d.push({id:S,worktree:N.worktree??"/",vcs:N.vcs,name:N.name??void 0,icon_url:N.icon?.url,icon_color:N.icon?.color,time_created:N.time?.created??M,time_updated:N.time?.updated??M,time_initialized:N.time?.initialized,sandboxes:N.sandboxes??[],commands:N.commands})}e.projects+=J(d,G,"project"),$("projects",L-l)}W.info("migrated projects",{count:e.projects,duration:Math.round(performance.now()-g)});let E=O.map((l)=>Y.basename(Y.dirname(l))),X=new Set,en=[];for(let l=0;l<O.length;l+=A){let L=Math.min(l+A,O.length),x=await C(O,l,L);en.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=Y.basename(O[l+v],".json"),P=E[l+v];if(!B.has(P)){T.sessions++;continue}X.add(S),en.push({id:S,project_id:P,parent_id:N.parentID??null,slug:N.slug??"",directory:N.directory??"",title:N.title??"",version:N.version??"",share_url:N.share?.url??null,summary_additions:N.summary?.additions??null,summary_deletions:N.summary?.deletions??null,summary_files:N.summary?.files??null,summary_diffs:N.summary?.diffs??null,revert:N.revert??null,permission:N.permission??null,time_created:N.time?.created??M,time_updated:N.time?.updated??M,time_compacting:N.time?.compacting??null,time_archived:N.time?.archived??null})}e.sessions+=J(en,ln,"session"),$("sessions",L-l)}if(W.info("migrated sessions",{count:e.sessions}),T.sessions>0)W.warn("skipped orphaned sessions",{count:T.sessions});let sn=[],c=[],zn=new Map;for(let l of Q){let L=Y.basename(Y.dirname(l));if(!X.has(L))continue;sn.push(l),c.push(L)}for(let l=0;l<sn.length;l+=A){let L=Math.min(l+A,sn.length),x=await C(sn,l,L),v=Array(x.length),N=0;for(let S=0;S<x.length;S++){let P=x[S];if(!P)continue;let K=sn[l+S],k=Y.basename(K,".json"),Hn=c[l+S];zn.set(k,Hn);let vn=P;delete vn.id,delete vn.sessionID,v[N++]={id:k,session_id:Hn,time_created:P.time?.created??M,time_updated:P.time?.updated??M,data:vn}}v.length=N,e.messages+=J(v,eo,"message"),$("messages",L-l)}W.info("migrated messages",{count:e.messages});for(let l=0;l<I.length;l+=A){let L=Math.min(l+A,I.length),x=await C(I,l,L),v=Array(x.length),N=0;for(let S=0;S<x.length;S++){let P=x[S];if(!P)continue;let K=I[l+S],k=Y.basename(K,".json"),Hn=Y.basename(Y.dirname(K)),vn=zn.get(Hn);if(!vn){p.push(`part missing message session: ${K}`);continue}if(!X.has(vn))continue;let Vn=P;delete Vn.id,delete Vn.messageID,delete Vn.sessionID,v[N++]={id:k,message_id:Hn,session_id:vn,time_created:P.time?.created??M,time_updated:P.time?.updated??M,data:Vn}}v.length=N,e.parts+=J(v,Xo,"part"),$("parts",L-l)}W.info("migrated parts",{count:e.parts});let An=f.map((l)=>Y.basename(l,".json"));for(let l=0;l<f.length;l+=A){let L=Math.min(l+A,f.length),x=await C(f,l,L),v=[];for(let N=0;N<x.length;N++){let S=x[N];if(!S)continue;let P=An[l+N];if(!X.has(P)){T.todos++;continue}if(!Array.isArray(S)){p.push(`todo not an array: ${f[l+N]}`);continue}for(let K=0;K<S.length;K++){let k=S[K];if(!k?.content||!k?.status)continue;v.push({session_id:P,content:k.content,status:k.status,position:K,time_created:M,time_updated:M})}}e.todos+=J(v,Yo,"todo"),$("todos",L-l)}if(W.info("migrated todos",{count:e.todos}),T.todos>0)W.warn("skipped orphaned todos",{count:T.todos});let kn=s.map((l)=>Y.basename(l,".json")),Jn=[];for(let l=0;l<s.length;l+=A){let L=Math.min(l+A,s.length),x=await C(s,l,L);Jn.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=kn[l+v];if(!B.has(S)){T.permissions++;continue}Jn.push({project_id:S,data:N})}e.permissions+=J(Jn,ao,"permission"),$("permissions",L-l)}if(W.info("migrated permissions",{count:e.permissions}),T.permissions>0)W.warn("skipped orphaned permissions",{count:T.permissions});let qn=m.map((l)=>Y.basename(l,".json")),Ln=[];for(let l=0;l<m.length;l+=A){let L=Math.min(l+A,m.length),x=await C(m,l,L);Ln.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=qn[l+v];if(!X.has(S)){T.shares++;continue}if(!N?.id||!N?.secret||!N?.url){p.push(`session_share missing id/secret/url: ${m[l+v]}`);continue}Ln.push({session_id:S,id:N.id,secret:N.secret,url:N.url})}e.shares+=J(Ln,zo,"session_share"),$("shares",L-l)}if(W.info("migrated session shares",{count:e.shares}),T.shares>0)W.warn("skipped orphaned session shares",{count:T.shares});if(n.run("COMMIT"),W.info("json migration complete",{projects:e.projects,sessions:e.sessions,messages:e.messages,parts:e.parts,todos:e.todos,permissions:e.permissions,shares:e.shares,errorCount:e.errors.length,duration:Math.round(performance.now()-g)}),e.errors.length>0)W.warn("migration errors",{errors:e.errors.slice(0,20)});return i?.({current:y,total:y,label:"complete"}),e}var Bn={};dn(Bn,{use:()=>Ce,transaction:()=>He,textDecoder:()=>re,sumDistinct:()=>rr,sum:()=>or,sql:()=>q,relationsOrderToSQL:()=>ci,relationsFilterToSQL:()=>Ri,relationToSQL:()=>Hi,relationExtrasToSQL:()=>Ji,processRelations:()=>Ci,placeholder:()=>dr,param:()=>Tr,orderSelectedFields:()=>oe,orderByOperators:()=>xi,or:()=>go,operators:()=>Mi,notLike:()=>Sr,notInArray:()=>Br,notIlike:()=>Mr,notExists:()=>Ir,notBetween:()=>Lr,not:()=>so,noopMapper:()=>_r,noopEncoder:()=>pr,noopDecoder:()=>sr,ne:()=>fo,name:()=>fr,min:()=>ir,max:()=>tr,mapUpdateSet:()=>ne,mapResultRow:()=>hi,mapRelationalRow:()=>Gi,mapColumnsInSQLToAlias:()=>ti,mapColumnsInAliasedSQLToAlias:()=>ri,lte:()=>To,lt:()=>No,like:()=>Qo,l2Distance:()=>Zi,l1Distance:()=>Ui,jaccardDistance:()=>Wi,isWithEnum:()=>bi,isView:()=>Dr,isTable:()=>Xt,isSQLWrapper:()=>mr,isNull:()=>Oo,isNotNull:()=>$o,isDriverValueEncoder:()=>gr,isConfig:()=>ji,is:()=>Mt,innerProduct:()=>Pi,inArray:()=>Ao,ilike:()=>Gr,haveSameKeys:()=>Fi,hasOwnEntityKind:()=>Gt,hammingDistance:()=>Ei,gte:()=>_o,gt:()=>po,getViewSelectedFields:()=>wi,getViewName:()=>vr,getTableUniqueName:()=>Zt,getTableName:()=>Ut,getTableLikeName:()=>Vi,getTableColumns:()=>qi,getTableAsAliasSQL:()=>Si,getOriginalColumnFromAlias:()=>oi,getOrderByOperators:()=>Li,getColumns:()=>ki,getColumnTable:()=>Ct,getColumnNameAndConfig:()=>zi,getChannelPath:()=>gt,fillPlaceholders:()=>Or,fieldSelectionToSQL:()=>Ii,extractTablesFromSchema:()=>Bi,extractExtendedColumnType:()=>mi,exists:()=>Do,eq:()=>U,entityKind:()=>St,effect:()=>Je,desc:()=>Io,defineRelationsPart:()=>Qi,defineRelations:()=>vi,createRelationsHelper:()=>Di,countDistinct:()=>bo,count:()=>lo,cosineDistance:()=>Ki,close:()=>xe,buildRelationsParts:()=>$i,buildRelations:()=>Oi,bindIfParam:()=>Qr,between:()=>vo,avgDistinct:()=>nr,avg:()=>ho,assertUnreachable:()=>ai,asc:()=>Bo,arrayOverlaps:()=>Jr,arrayContains:()=>xr,arrayContained:()=>Cr,applyMixins:()=>Yi,and:()=>Rn,aliasedTableColumn:()=>ni,aliasedTable:()=>ht,aliasedRelation:()=>bt,aliasedColumn:()=>jt,WithSubquery:()=>at,ViewSelectionAliasProxyHandler:()=>Ft,ViewBaseConfig:()=>zt,View:()=>$r,TransactionRollbackError:()=>li,TableSchema:()=>Wt,TableColumns:()=>Pt,TableAliasProxyHandler:()=>wt,Table:()=>Et,Subquery:()=>Yt,StringChunk:()=>ur,SQL:()=>yr,RelationsHelperStatic:()=>di,RelationsBuilderTable:()=>Ai,RelationsBuilderJunctionColumn:()=>Ti,RelationsBuilderColumn:()=>Ni,RelationTableAliasProxyHandler:()=>Vt,Relation:()=>_i,QueryPromise:()=>ii,Placeholder:()=>Ar,Path:()=>Ko,Param:()=>Nr,OriginalName:()=>Kt,One:()=>pi,NotFoundError:()=>Me,NoopLogger:()=>Lt,Name:()=>lr,Many:()=>si,IsAlias:()=>ct,FakePrimitiveParam:()=>er,ExtraConfigColumns:()=>Rt,ExtraConfigBuilder:()=>Ht,DrizzleQueryError:()=>yi,DrizzleError:()=>ui,DefaultLogger:()=>It,Count:()=>gi,ConsoleLogWriter:()=>Bt,ColumnTableAliasProxyHandler:()=>qt,ColumnBuilder:()=>ei,ColumnAliasProxyHandler:()=>kt,Column:()=>xt,Client:()=>Mn,CONSTANTS:()=>Xi,BaseName:()=>Jt,AggregatedField:()=>fi});import $t from"crypto";import Vo,{existsSync as Dt,readdirSync as vt}from"fs";import{join as Qt}from"path";function Fo(n){if(Vo.existsSync(`${n.migrationsFolder}/meta/_journal.json`))throw Error('We detected that you have old drizzle-kit migration folders. You must upgrade drizzle-kit and run "drizzle-kit up"');let o=n.migrationsFolder,t=[],g=vt(o).map((e)=>({path:Qt(o,e,"migration.sql"),name:e})).filter((e)=>Dt(e.path));g.sort((e,T)=>e.name.localeCompare(T.name));for(let e of g){let T=e.path,p=e.name.slice(0,14),A=Vo.readFileSync(T).toString(),M=A.split("--> statement-breakpoint").map((C)=>{return C}),H=wo(p);t.push({sql:M,bps:!0,folderMillis:H,hash:$t.createHash("sha256").update(A).digest("hex"),name:e.name})}return t}function jo(n,o){if(Array.isArray(o)||"migrationsJournal"in o){let g=Array.isArray(o)?o:o.migrationsJournal,e=Array.isArray(o)?void 0:o.migrationsTable,T=g.map((p)=>({sql:p.sql.split("--> statement-breakpoint"),folderMillis:p.timestamp,hash:"",bps:!0,name:p.name}));return n.dialect.migrate(T,n.session,{migrationsTable:e})}let t=Fo(o);return n.dialect.migrate(t,n.session,o)}function lo(n){return q`count(${n||q.raw("*")})`.mapWith(Number)}function bo(n){return q`count(distinct ${n})`.mapWith(Number)}function ho(n){return q`avg(${n})`.mapWith(String)}function nr(n){return q`avg(distinct ${n})`.mapWith(String)}function or(n){return q`sum(${n})`.mapWith(String)}function rr(n){return q`sum(distinct ${n})`.mapWith(String)}function tr(n){return q`max(${n})`.mapWith(uo(n,yo)?n:String)}function ir(n){return q`min(${n})`.mapWith(uo(n,yo)?n:String)}import oo from"path";var Wn={};dn(Wn,{workspaceID:()=>$e,useEffect:()=>Qe,use:()=>ve,make:()=>De,invalidate:()=>Ie,has:()=>Be,get:()=>Ho,directory:()=>no,context:()=>Jo,bind:()=>Oe});import{EventEmitter as te}from"events";var cn=new te;var Lo=new Set;function Hr(n){return Lo.add(n),()=>{Lo.delete(n)}}async function So(n){await Promise.allSettled([...Lo].map((o)=>o(n)))}function Kn(n){return n()}var Fr={};dn(Fr,{setInitialized:()=>se,list:()=>fe,layer:()=>wr,get:()=>ge,fromRow:()=>pn,defaultLayer:()=>Co,UpdateInput:()=>le,Service:()=>Sn,Info:()=>qr,Event:()=>Vr});import*as w from"fs/promises";import*as ar from"os";import*as $n from"path";var ie=_.String.pipe(_.brand("ProjectID")),V=ie.pipe(wn((n)=>({global:n.make("global"),zod:j.string().pipe(j.custom())})));import*as Qn from"fs/promises";import*as b from"path";import*as Kr from"crypto";async function Go(n){let o=b.resolve(n);while(!0){let t=b.join(o,".git"),g=await Qn.stat(t).catch(()=>null);if(g){if(g.isDirectory())return t;let p=(await Qn.readFile(t,"utf-8")).trim().match(/^gitdir:\s*(.+)$/);if(!p)return null;let A=b.isAbsolute(p[1])?p[1]:b.resolve(o,p[1]);return b.resolve(A,"../..")}let e=b.dirname(o);if(e===o)return null;o=e}}async function Rr(n){let o=await Qn.readFile(n,"utf-8").catch(()=>null);if(o===null)return null;return o.trim()||null}async function cr(n){let o=await Rr(n);if(o)return o;let t=Kr.randomUUID();try{return await Qn.writeFile(n,t,{flag:"wx"}),t}catch(g){if(g.code!=="EEXIST")throw g;let e=await Rr(n);if(e)return e;throw Error(`Project ID file was concurrently created but is empty: ${n}`)}}async function Er(n){let o=await Go(n);if(o){let g=b.join(o,"qitqode-project-id");return V.make(await cr(g))}let t=b.join(n,".qitqode-project-id");return V.make(await cr(t))}async function me(n){let o=await Go(n);if(!o)return;let t=$n.join(n,".qitqode-project-id"),g=$n.join(o,"qitqode-project-id"),e=(A)=>w.access(A).then(()=>!0).catch(()=>!1);if(await e(t)){if(!await e(g)){let A=await w.readFile(t,"utf-8");await w.writeFile(g,A)}await w.unlink(t).catch(()=>{})}let T=$n.join(o,"info","exclude");if(await w.mkdir($n.dirname(T),{recursive:!0}),!(await w.readFile(T,"utf-8").catch(()=>"")).includes(".qitqode-project-id"))await w.appendFile(T,`
|
|
2
|
+
import{rm as jn,sm as pt,tm as bn,um as _t,wm as Xr,xm as Yr}from"./chunk-qn6gdhns.js";import{$m as fo,Bm as er,Cm as mr,Dm as ur,Dn as ut,Em as yr,Fm as lr,Gm as fr,Hm as gr,Im as sr,Jm as pr,Km as _r,Lm as Nr,Mm as Tr,Nm as q,Om as Ar,Pm as dr,Qm as Or,Rm as $r,Sm as Dr,Tm as vr,Um as F,Vm as D,Wm as yn,Xm as un,Ym as Zo,Zm as Qr,_m as U,an as Rn,bn as go,cn as so,dn as po,en as _o,fn as No,gn as To,hn as Ao,in as Br,jn as Oo,kn as $o,ln as Do,mn as Ir,nn as vo,on as Lr,pn as Qo,qn as Sr,rn as Gr,sn as Mr,tn as xr,un as Cr,vn as Jr,wn as Bo,xn as Io,ym as uo,yn as wo,zm as yo}from"./chunk-bn0h9dny.js";import{ho as wn,lo as Fn}from"./chunk-vcw00k0n.js";import{Co as ft}from"./chunk-2hc5z7b5.js";import{Do as Mo}from"./chunk-e1w70zdn.js";import{Fq as Pn,Gq as hn,Hq as _n,Iq as hr,Jq as it,Lq as nt}from"./chunk-rryytkmg.js";import{Mq as rt}from"./chunk-te47zdxd.js";import{Sr as ro}from"./chunk-4cnwn1rh.js";import{Gs as fn,Qs as On,Rs as nn,Wr as co,_s as a}from"./chunk-hdrbyarv.js";import{kt as Zr,nt as ko,ot as z,st as mo}from"./chunk-tqj69nh6.js";import{ut as j}from"./chunk-5tray1fw.js";import{Fz as Cn,jz as Nn,rz as Gn}from"./chunk-gagtmjmp.js";import{EI as In,OE as h,RM as _,WD as Ro,aO as Ur,bE as Zn,bN as Wo,iE as gn,pH as r,uB as an,yE as Wr,zC as Dn}from"./chunk-zs8kqdsf.js";import{DO as dn}from"./chunk-7xm75w1e.js";var qo={};dn(qo,{run:()=>Ot});var mn={time_created:F().notNull().$default(()=>Date.now()),time_updated:F().notNull().$onUpdate(()=>Date.now())};var G=un("project",{id:D().$type().primaryKey(),worktree:D().notNull(),vcs:D(),name:D(),icon_url:D(),icon_color:D(),...mn,time_initialized:F(),sandboxes:D({mode:"json"}).notNull().$type(),commands:D({mode:"json"}).$type()});var ln=un("session",{id:D().$type().primaryKey(),project_id:D().$type().notNull().references(()=>G.id,{onDelete:"cascade"}),workspace_id:D().$type(),parent_id:D().$type(),context_from:D().$type(),context_watermark:D().$type(),slug:D().notNull(),directory:D().notNull(),title:D().notNull(),version:D().notNull(),share_url:D(),summary_additions:F(),summary_deletions:F(),summary_files:F(),summary_diffs:D({mode:"json"}).$type(),revert:D({mode:"json"}).$type(),permission:D({mode:"json"}).$type(),...mn,time_compacting:F(),time_archived:F(),last_checkpoint_message_id:D().$type()},(n)=>[yn("session_project_idx").on(n.project_id),yn("session_workspace_idx").on(n.workspace_id),yn("session_parent_idx").on(n.parent_id),yn("session_context_from_idx").on(n.context_from)]),eo=un("message",{id:D().$type().primaryKey(),session_id:D().$type().notNull().references(()=>ln.id,{onDelete:"cascade"}),agent_id:D().notNull().default("main"),...mn,data:D({mode:"json"}).notNull().$type()},(n)=>[yn("message_session_time_created_id_idx").on(n.session_id,n.time_created,n.id),yn("message_session_agent_idx").on(n.session_id,n.agent_id,n.id)]),Xo=un("part",{id:D().$type().primaryKey(),message_id:D().$type().notNull().references(()=>eo.id,{onDelete:"cascade"}),session_id:D().$type().notNull(),...mn,data:D({mode:"json"}).notNull().$type()},(n)=>[yn("part_message_id_id_idx").on(n.message_id,n.id),yn("part_session_idx").on(n.session_id)]),Yo=un("todo",{session_id:D().$type().notNull().references(()=>ln.id,{onDelete:"cascade"}),content:D().notNull(),status:D().notNull(),position:F().notNull(),...mn},(n)=>[Zo({columns:[n.session_id,n.position]}),yn("todo_session_idx").on(n.session_id)]),ao=un("permission",{project_id:D().primaryKey().references(()=>G.id,{onDelete:"cascade"}),...mn,data:D({mode:"json"}).notNull().$type()});var zo=un("session_share",{session_id:D().primaryKey().references(()=>ln.id,{onDelete:"cascade"}),id:D().notNull(),secret:D().notNull(),url:D().notNull(),...mn});import Y from"path";var W=a.create({service:"json-migration"});async function Ot(n,o){let t=Y.join(On.Path.data,"storage");if(!await mo.exists(t))return W.info("storage directory does not exist, skipping migration"),{projects:0,sessions:0,messages:0,parts:0,todos:0,permissions:0,shares:0,errors:[]};W.info("starting json to sqlite migration",{storageDir:t});let g=performance.now();n.run("PRAGMA journal_mode = WAL"),n.run("PRAGMA synchronous = OFF"),n.run("PRAGMA cache_size = 10000"),n.run("PRAGMA temp_store = MEMORY");let e={projects:0,sessions:0,messages:0,parts:0,todos:0,permissions:0,shares:0,errors:[]},T={sessions:0,todos:0,permissions:0,shares:0},p=e.errors,A=1000,M=Date.now();async function H(l){return ko.scan(l,{cwd:t,absolute:!0})}async function C(l,L,x){let v=x-L,N=Array(v);for(let K=0;K<v;K++)N[K]=mo.readJson(l[L+K]);let S=await Promise.allSettled(N),P=Array(v);for(let K=0;K<S.length;K++){let k=S[K];if(k.status==="fulfilled"){P[K]=k.value;continue}p.push(`failed to read ${l[L+K]}: ${k.reason}`)}return P}function J(l,L,x){if(l.length===0)return 0;try{return n.insert(L).values(l).onConflictDoNothing().run(),l.length}catch(v){return p.push(`failed to migrate ${x} batch: ${v}`),0}}W.info("scanning files...");let[R,O,Q,I,f,s,m]=await Promise.all([H("project/*.json"),H("session/*/*.json"),H("message/*/*.json"),H("part/*/*.json"),H("todo/*.json"),H("permission/*.json"),H("session_share/*.json")]);W.info("file scan complete",{projects:R.length,sessions:O.length,messages:Q.length,parts:I.length,todos:f.length,permissions:s.length,shares:m.length});let y=Math.max(1,R.length+O.length+Q.length+I.length+f.length+s.length+m.length),i=o?.progress,u=0,$=(l,L)=>{u=Math.min(y,u+L),i?.({current:u,total:y,label:l})};i?.({current:u,total:y,label:"starting"}),n.run("BEGIN TRANSACTION");let B=new Set,d=[];for(let l=0;l<R.length;l+=A){let L=Math.min(l+A,R.length),x=await C(R,l,L);d.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=Y.basename(R[l+v],".json");B.add(S),d.push({id:S,worktree:N.worktree??"/",vcs:N.vcs,name:N.name??void 0,icon_url:N.icon?.url,icon_color:N.icon?.color,time_created:N.time?.created??M,time_updated:N.time?.updated??M,time_initialized:N.time?.initialized,sandboxes:N.sandboxes??[],commands:N.commands})}e.projects+=J(d,G,"project"),$("projects",L-l)}W.info("migrated projects",{count:e.projects,duration:Math.round(performance.now()-g)});let E=O.map((l)=>Y.basename(Y.dirname(l))),X=new Set,en=[];for(let l=0;l<O.length;l+=A){let L=Math.min(l+A,O.length),x=await C(O,l,L);en.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=Y.basename(O[l+v],".json"),P=E[l+v];if(!B.has(P)){T.sessions++;continue}X.add(S),en.push({id:S,project_id:P,parent_id:N.parentID??null,slug:N.slug??"",directory:N.directory??"",title:N.title??"",version:N.version??"",share_url:N.share?.url??null,summary_additions:N.summary?.additions??null,summary_deletions:N.summary?.deletions??null,summary_files:N.summary?.files??null,summary_diffs:N.summary?.diffs??null,revert:N.revert??null,permission:N.permission??null,time_created:N.time?.created??M,time_updated:N.time?.updated??M,time_compacting:N.time?.compacting??null,time_archived:N.time?.archived??null})}e.sessions+=J(en,ln,"session"),$("sessions",L-l)}if(W.info("migrated sessions",{count:e.sessions}),T.sessions>0)W.warn("skipped orphaned sessions",{count:T.sessions});let sn=[],c=[],zn=new Map;for(let l of Q){let L=Y.basename(Y.dirname(l));if(!X.has(L))continue;sn.push(l),c.push(L)}for(let l=0;l<sn.length;l+=A){let L=Math.min(l+A,sn.length),x=await C(sn,l,L),v=Array(x.length),N=0;for(let S=0;S<x.length;S++){let P=x[S];if(!P)continue;let K=sn[l+S],k=Y.basename(K,".json"),Hn=c[l+S];zn.set(k,Hn);let vn=P;delete vn.id,delete vn.sessionID,v[N++]={id:k,session_id:Hn,time_created:P.time?.created??M,time_updated:P.time?.updated??M,data:vn}}v.length=N,e.messages+=J(v,eo,"message"),$("messages",L-l)}W.info("migrated messages",{count:e.messages});for(let l=0;l<I.length;l+=A){let L=Math.min(l+A,I.length),x=await C(I,l,L),v=Array(x.length),N=0;for(let S=0;S<x.length;S++){let P=x[S];if(!P)continue;let K=I[l+S],k=Y.basename(K,".json"),Hn=Y.basename(Y.dirname(K)),vn=zn.get(Hn);if(!vn){p.push(`part missing message session: ${K}`);continue}if(!X.has(vn))continue;let Vn=P;delete Vn.id,delete Vn.messageID,delete Vn.sessionID,v[N++]={id:k,message_id:Hn,session_id:vn,time_created:P.time?.created??M,time_updated:P.time?.updated??M,data:Vn}}v.length=N,e.parts+=J(v,Xo,"part"),$("parts",L-l)}W.info("migrated parts",{count:e.parts});let An=f.map((l)=>Y.basename(l,".json"));for(let l=0;l<f.length;l+=A){let L=Math.min(l+A,f.length),x=await C(f,l,L),v=[];for(let N=0;N<x.length;N++){let S=x[N];if(!S)continue;let P=An[l+N];if(!X.has(P)){T.todos++;continue}if(!Array.isArray(S)){p.push(`todo not an array: ${f[l+N]}`);continue}for(let K=0;K<S.length;K++){let k=S[K];if(!k?.content||!k?.status)continue;v.push({session_id:P,content:k.content,status:k.status,position:K,time_created:M,time_updated:M})}}e.todos+=J(v,Yo,"todo"),$("todos",L-l)}if(W.info("migrated todos",{count:e.todos}),T.todos>0)W.warn("skipped orphaned todos",{count:T.todos});let kn=s.map((l)=>Y.basename(l,".json")),Jn=[];for(let l=0;l<s.length;l+=A){let L=Math.min(l+A,s.length),x=await C(s,l,L);Jn.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=kn[l+v];if(!B.has(S)){T.permissions++;continue}Jn.push({project_id:S,data:N})}e.permissions+=J(Jn,ao,"permission"),$("permissions",L-l)}if(W.info("migrated permissions",{count:e.permissions}),T.permissions>0)W.warn("skipped orphaned permissions",{count:T.permissions});let qn=m.map((l)=>Y.basename(l,".json")),Ln=[];for(let l=0;l<m.length;l+=A){let L=Math.min(l+A,m.length),x=await C(m,l,L);Ln.length=0;for(let v=0;v<x.length;v++){let N=x[v];if(!N)continue;let S=qn[l+v];if(!X.has(S)){T.shares++;continue}if(!N?.id||!N?.secret||!N?.url){p.push(`session_share missing id/secret/url: ${m[l+v]}`);continue}Ln.push({session_id:S,id:N.id,secret:N.secret,url:N.url})}e.shares+=J(Ln,zo,"session_share"),$("shares",L-l)}if(W.info("migrated session shares",{count:e.shares}),T.shares>0)W.warn("skipped orphaned session shares",{count:T.shares});if(n.run("COMMIT"),W.info("json migration complete",{projects:e.projects,sessions:e.sessions,messages:e.messages,parts:e.parts,todos:e.todos,permissions:e.permissions,shares:e.shares,errorCount:e.errors.length,duration:Math.round(performance.now()-g)}),e.errors.length>0)W.warn("migration errors",{errors:e.errors.slice(0,20)});return i?.({current:y,total:y,label:"complete"}),e}var Bn={};dn(Bn,{use:()=>Ce,transaction:()=>He,textDecoder:()=>re,sumDistinct:()=>rr,sum:()=>or,sql:()=>q,relationsOrderToSQL:()=>ci,relationsFilterToSQL:()=>Ri,relationToSQL:()=>Hi,relationExtrasToSQL:()=>Ji,processRelations:()=>Ci,placeholder:()=>dr,param:()=>Tr,orderSelectedFields:()=>oe,orderByOperators:()=>xi,or:()=>go,operators:()=>Mi,notLike:()=>Sr,notInArray:()=>Br,notIlike:()=>Mr,notExists:()=>Ir,notBetween:()=>Lr,not:()=>so,noopMapper:()=>_r,noopEncoder:()=>pr,noopDecoder:()=>sr,ne:()=>fo,name:()=>fr,min:()=>ir,max:()=>tr,mapUpdateSet:()=>ne,mapResultRow:()=>hi,mapRelationalRow:()=>Gi,mapColumnsInSQLToAlias:()=>ti,mapColumnsInAliasedSQLToAlias:()=>ri,lte:()=>To,lt:()=>No,like:()=>Qo,l2Distance:()=>Zi,l1Distance:()=>Ui,jaccardDistance:()=>Wi,isWithEnum:()=>bi,isView:()=>Dr,isTable:()=>Xt,isSQLWrapper:()=>mr,isNull:()=>Oo,isNotNull:()=>$o,isDriverValueEncoder:()=>gr,isConfig:()=>ji,is:()=>Mt,innerProduct:()=>Pi,inArray:()=>Ao,ilike:()=>Gr,haveSameKeys:()=>Fi,hasOwnEntityKind:()=>Gt,hammingDistance:()=>Ei,gte:()=>_o,gt:()=>po,getViewSelectedFields:()=>wi,getViewName:()=>vr,getTableUniqueName:()=>Zt,getTableName:()=>Ut,getTableLikeName:()=>Vi,getTableColumns:()=>qi,getTableAsAliasSQL:()=>Si,getOriginalColumnFromAlias:()=>oi,getOrderByOperators:()=>Li,getColumns:()=>ki,getColumnTable:()=>Ct,getColumnNameAndConfig:()=>zi,getChannelPath:()=>gt,fillPlaceholders:()=>Or,fieldSelectionToSQL:()=>Ii,extractTablesFromSchema:()=>Bi,extractExtendedColumnType:()=>mi,exists:()=>Do,eq:()=>U,entityKind:()=>St,effect:()=>Je,desc:()=>Io,defineRelationsPart:()=>Qi,defineRelations:()=>vi,createRelationsHelper:()=>Di,countDistinct:()=>bo,count:()=>lo,cosineDistance:()=>Ki,close:()=>xe,buildRelationsParts:()=>$i,buildRelations:()=>Oi,bindIfParam:()=>Qr,between:()=>vo,avgDistinct:()=>nr,avg:()=>ho,assertUnreachable:()=>ai,asc:()=>Bo,arrayOverlaps:()=>Jr,arrayContains:()=>xr,arrayContained:()=>Cr,applyMixins:()=>Yi,and:()=>Rn,aliasedTableColumn:()=>ni,aliasedTable:()=>ht,aliasedRelation:()=>bt,aliasedColumn:()=>jt,WithSubquery:()=>at,ViewSelectionAliasProxyHandler:()=>Ft,ViewBaseConfig:()=>zt,View:()=>$r,TransactionRollbackError:()=>li,TableSchema:()=>Wt,TableColumns:()=>Pt,TableAliasProxyHandler:()=>wt,Table:()=>Et,Subquery:()=>Yt,StringChunk:()=>ur,SQL:()=>yr,RelationsHelperStatic:()=>di,RelationsBuilderTable:()=>Ai,RelationsBuilderJunctionColumn:()=>Ti,RelationsBuilderColumn:()=>Ni,RelationTableAliasProxyHandler:()=>Vt,Relation:()=>_i,QueryPromise:()=>ii,Placeholder:()=>Ar,Path:()=>Ko,Param:()=>Nr,OriginalName:()=>Kt,One:()=>pi,NotFoundError:()=>Me,NoopLogger:()=>Lt,Name:()=>lr,Many:()=>si,IsAlias:()=>ct,FakePrimitiveParam:()=>er,ExtraConfigColumns:()=>Rt,ExtraConfigBuilder:()=>Ht,DrizzleQueryError:()=>yi,DrizzleError:()=>ui,DefaultLogger:()=>It,Count:()=>gi,ConsoleLogWriter:()=>Bt,ColumnTableAliasProxyHandler:()=>qt,ColumnBuilder:()=>ei,ColumnAliasProxyHandler:()=>kt,Column:()=>xt,Client:()=>Mn,CONSTANTS:()=>Xi,BaseName:()=>Jt,AggregatedField:()=>fi});import $t from"crypto";import Vo,{existsSync as Dt,readdirSync as vt}from"fs";import{join as Qt}from"path";function Fo(n){if(Vo.existsSync(`${n.migrationsFolder}/meta/_journal.json`))throw Error('We detected that you have old drizzle-kit migration folders. You must upgrade drizzle-kit and run "drizzle-kit up"');let o=n.migrationsFolder,t=[],g=vt(o).map((e)=>({path:Qt(o,e,"migration.sql"),name:e})).filter((e)=>Dt(e.path));g.sort((e,T)=>e.name.localeCompare(T.name));for(let e of g){let T=e.path,p=e.name.slice(0,14),A=Vo.readFileSync(T).toString(),M=A.split("--> statement-breakpoint").map((C)=>{return C}),H=wo(p);t.push({sql:M,bps:!0,folderMillis:H,hash:$t.createHash("sha256").update(A).digest("hex"),name:e.name})}return t}function jo(n,o){if(Array.isArray(o)||"migrationsJournal"in o){let g=Array.isArray(o)?o:o.migrationsJournal,e=Array.isArray(o)?void 0:o.migrationsTable,T=g.map((p)=>({sql:p.sql.split("--> statement-breakpoint"),folderMillis:p.timestamp,hash:"",bps:!0,name:p.name}));return n.dialect.migrate(T,n.session,{migrationsTable:e})}let t=Fo(o);return n.dialect.migrate(t,n.session,o)}function lo(n){return q`count(${n||q.raw("*")})`.mapWith(Number)}function bo(n){return q`count(distinct ${n})`.mapWith(Number)}function ho(n){return q`avg(${n})`.mapWith(String)}function nr(n){return q`avg(distinct ${n})`.mapWith(String)}function or(n){return q`sum(${n})`.mapWith(String)}function rr(n){return q`sum(distinct ${n})`.mapWith(String)}function tr(n){return q`max(${n})`.mapWith(uo(n,yo)?n:String)}function ir(n){return q`min(${n})`.mapWith(uo(n,yo)?n:String)}import oo from"path";var Wn={};dn(Wn,{workspaceID:()=>$e,useEffect:()=>Qe,use:()=>ve,make:()=>De,invalidate:()=>Ie,has:()=>Be,get:()=>Ho,directory:()=>no,context:()=>Jo,bind:()=>Oe});import{EventEmitter as te}from"events";var cn=new te;var Lo=new Set;function Hr(n){return Lo.add(n),()=>{Lo.delete(n)}}async function So(n){await Promise.allSettled([...Lo].map((o)=>o(n)))}function Kn(n){return n()}var Fr={};dn(Fr,{setInitialized:()=>se,list:()=>fe,layer:()=>wr,get:()=>ge,fromRow:()=>pn,defaultLayer:()=>Co,UpdateInput:()=>le,Service:()=>Sn,Info:()=>qr,Event:()=>Vr});import*as w from"fs/promises";import*as ar from"os";import*as $n from"path";var ie=_.String.pipe(_.brand("ProjectID")),V=ie.pipe(wn((n)=>({global:n.make("global"),zod:j.string().pipe(j.custom())})));import*as Qn from"fs/promises";import*as b from"path";import*as Kr from"crypto";async function Go(n){let o=b.resolve(n);while(!0){let t=b.join(o,".git"),g=await Qn.stat(t).catch(()=>null);if(g){if(g.isDirectory())return t;let p=(await Qn.readFile(t,"utf-8")).trim().match(/^gitdir:\s*(.+)$/);if(!p)return null;let A=b.isAbsolute(p[1])?p[1]:b.resolve(o,p[1]);return b.resolve(A,"../..")}let e=b.dirname(o);if(e===o)return null;o=e}}async function Rr(n){let o=await Qn.readFile(n,"utf-8").catch(()=>null);if(o===null)return null;return o.trim()||null}async function cr(n){let o=await Rr(n);if(o)return o;let t=Kr.randomUUID();try{return await Qn.writeFile(n,t,{flag:"wx"}),t}catch(g){if(g.code!=="EEXIST")throw g;let e=await Rr(n);if(e)return e;throw Error(`Project ID file was concurrently created but is empty: ${n}`)}}async function Er(n){let o=await Go(n);if(o){let g=b.join(o,"qitqode-project-id");return V.make(await cr(g))}let t=b.join(n,".qitqode-project-id");return V.make(await cr(t))}async function me(n){let o=await Go(n);if(!o)return;let t=$n.join(n,".qitqode-project-id"),g=$n.join(o,"qitqode-project-id"),e=(A)=>w.access(A).then(()=>!0).catch(()=>!1);if(await e(t)){if(!await e(g)){let A=await w.readFile(t,"utf-8");await w.writeFile(g,A)}await w.unlink(t).catch(()=>{})}let T=$n.join(o,"info","exclude");if(await w.mkdir($n.dirname(T),{recursive:!0}),!(await w.readFile(T,"utf-8").catch(()=>"")).includes(".qitqode-project-id"))await w.appendFile(T,`
|
|
3
3
|
.qitqode-project-id
|
|
4
4
|
`)}var Pr=a.create({service:"project"}),ue=262144,xo=_.Literal("git"),zr=_.Struct({url:_.optional(_.String),override:_.optional(_.String),color:_.optional(_.String)}),kr=_.Struct({start:_.optional(_.String.annotate({description:"Startup script to run when creating a new workspace (worktree)"}))}),ye=_.Struct({created:_.Number,updated:_.Number,initialized:_.optional(_.Number)}),qr=_.Struct({id:V,worktree:_.String,vcs:_.optional(xo),name:_.optional(_.String),icon:_.optional(zr),commands:_.optional(kr),time:ye,sandboxes:_.Array(_.String)}).annotate({identifier:"Project"}).pipe(wn((n)=>({zod:Fn(n)}))),Vr={Updated:Yr.define("project.updated",qr.zod)};function pn(n){let o=n.icon_url||n.icon_color?{url:n.icon_url??void 0,color:n.icon_color??void 0}:void 0;return{id:n.id,worktree:n.worktree,vcs:n.vcs?_.decodeUnknownSync(xo)(n.vcs):void 0,name:n.name??void 0,icon:o,time:{created:n.time_created,updated:n.time_updated,initialized:n.time_initialized??void 0},sandboxes:n.sandboxes,commands:n.commands??void 0}}var le=j.object({projectID:V.zod,name:j.string().optional(),icon:Fn(zr).optional(),commands:Fn(kr).optional()});class Sn extends Dn.Service()("@qitqode/Project"){}var wr=h.effect(Sn,r.gen(function*(){let n=yield*z.Service,o=yield*Ur.Path,t=yield*jn.ChildProcessSpawner,g=r.fnUntraced(function*(i,u){return yield*Xr(t,i,u)},r.catch(()=>r.succeed({code:1,text:"",stderr:""}))),e=(i)=>r.sync(()=>Bn.use(i)),T=(i)=>r.sync(()=>cn.emit("event",{directory:"global",project:i.id,payload:{type:Vr.Updated.type,properties:i}})),p=_.decodeUnknownSync(_.optional(xo))(nn.QITQODE_FAKE_VCS),A=(i,u)=>{if(!u)return i;if(u=u.replace(/[\r\n]+$/,""),!u)return i;if(u=z.windowsPath(u),o.isAbsolute(u))return o.normalize(u);return o.resolve(i,u)},M=yield*Wr.Scope,H=r.fn("Project.fromDirectory")(function*(i){Pr.info("fromDirectory",{directory:i});let u=yield*r.gen(function*(){if(nn.QITQODE_DISABLE_GIT)return{id:V.global,worktree:i,sandbox:i,vcs:p};let X=(yield*n.up({targets:[".git"],start:i}).pipe(r.orDie))[0];if(!X)return{id:V.global,worktree:"/",sandbox:"/",vcs:p};let en=o.dirname(X),sn=process.env.HOME??process.env.USERPROFILE??ar.homedir();if(en===sn||$n.parse(en).root===en)return Pr.warn("ignoring .git at home or filesystem root, snapshots disabled",{dotgit:X}),{id:V.global,worktree:i,sandbox:i,vcs:p};let c=en,zn=yield*r.sync(()=>Mo("git")),An;if(!zn)return{id:An??V.global,worktree:c,sandbox:c,vcs:p};let kn=yield*g(["rev-parse","--git-common-dir"],{cwd:c});if(kn.code!==0)return{id:An??V.global,worktree:c,sandbox:c,vcs:p};let Jn=(()=>{let Ln=A(c,kn.text.trim());return Ln===c?c:o.dirname(Ln)})();if(An==null)yield*r.promise(()=>me(c)),An=yield*r.promise(()=>Er(c));let qn=yield*g(["rev-parse","--show-toplevel"],{cwd:c});if(qn.code!==0)return{id:An,worktree:c,sandbox:c,vcs:p};return c=A(c,qn.text.trim()),{id:An,sandbox:c,worktree:Jn,vcs:"git"}}),$=yield*e((E)=>E.select().from(G).where(U(G.id,u.id)).get()),B=$?pn($):{id:u.id,worktree:u.worktree,vcs:u.vcs,sandboxes:[],time:{created:Date.now(),updated:Date.now()}};if(nn.QITQODE_EXPERIMENTAL_ICON_DISCOVERY)yield*C(B).pipe(r.ignore,r.forkIn(M));let d={...B,worktree:u.worktree,vcs:u.vcs,time:{...B.time,updated:Date.now()}};if(u.sandbox!==d.worktree&&!d.sandboxes.includes(u.sandbox))d.sandboxes.push(u.sandbox);if(d.sandboxes=yield*r.forEach(d.sandboxes,(E)=>n.exists(E).pipe(r.orDie,r.map((X)=>X?E:void 0)),{concurrency:16}).pipe(r.map((E)=>E.filter((X)=>X!==void 0))),yield*e((E)=>E.insert(G).values({id:d.id,worktree:d.worktree,vcs:d.vcs??null,name:d.name,icon_url:d.icon?.url,icon_color:d.icon?.color,time_created:d.time.created,time_updated:d.time.updated,time_initialized:d.time.initialized,sandboxes:d.sandboxes,commands:d.commands}).onConflictDoUpdate({target:G.id,set:{worktree:d.worktree,vcs:d.vcs??null,name:d.name,icon_url:d.icon?.url,icon_color:d.icon?.color,time_updated:d.time.updated,time_initialized:d.time.initialized,sandboxes:d.sandboxes,commands:d.commands}}).run()),u.id!==V.global)yield*e((E)=>E.update(ln).set({project_id:u.id}).where(Rn(U(ln.project_id,V.global),U(ln.directory,u.worktree))).run());return yield*T(d),{project:d,sandbox:u.sandbox}}),C=r.fn("Project.discover")(function*(i){if(i.vcs!=="git")return;if(i.icon?.override)return;if(i.icon?.url)return;let $=(yield*n.glob("**/favicon.{ico,png,svg,jpg,jpeg,webp}",{cwd:i.worktree,absolute:!0,include:"file"}).pipe(r.orDie)).sort((sn,c)=>sn.length-c.length)[0];if(!$)return;let B=yield*n.stat($).pipe(r.orDie);if(Number(B.size)>ue)return;let d=yield*n.readFile($).pipe(r.orDie),E=Buffer.from(d).toString("base64"),en=`data:${z.mimeType($)};base64,${E}`;yield*O({projectID:i.id,icon:{url:en}})}),J=r.fn("Project.list")(function*(){return yield*e((i)=>i.select().from(G).all().map(pn))}),R=r.fn("Project.get")(function*(i){let u=yield*e(($)=>$.select().from(G).where(U(G.id,i)).get());return u?pn(u):void 0}),O=r.fn("Project.update")(function*(i){let u=yield*e((B)=>B.update(G).set({name:i.name,icon_url:i.icon?.url,icon_color:i.icon?.color,commands:i.commands,time_updated:Date.now()}).where(U(G.id,i.projectID)).returning().get());if(!u)throw Error(`Project not found: ${i.projectID}`);let $=pn(u);return yield*T($),$}),Q=r.fn("Project.initGit")(function*(i){if(i.project.vcs==="git")return i.project;if(!(yield*r.sync(()=>Mo("git"))))throw Error("Git is not installed");let u=yield*g(["init","--quiet"],{cwd:i.directory});if(u.code!==0)throw Error(u.stderr.trim()||u.text.trim()||"Failed to initialize git repository");let{project:$}=yield*H(i.directory);return $}),I=r.fn("Project.setInitialized")(function*(i){yield*e((u)=>u.update(G).set({time_initialized:Date.now()}).where(U(G.id,i)).run())}),f=r.fn("Project.sandboxes")(function*(i){let u=yield*e((B)=>B.select().from(G).where(U(G.id,i)).get());if(!u)return[];let $=pn(u);return yield*r.forEach($.sandboxes,(B)=>n.isDir(B).pipe(r.orDie,r.map((d)=>d?B:void 0)),{concurrency:16}).pipe(r.map((B)=>B.filter((d)=>d!==void 0)))}),s=r.fnUntraced(function*(i,u){let $=yield*e((B)=>B.update(G).set({sandboxes:u,time_updated:Date.now()}).where(U(G.id,i)).returning().get());if(!$)throw Error(`Project not found: ${i}`);yield*T(pn($))}),m=r.fn("Project.addSandbox")(function*(i,u){let $=yield*e((d)=>d.select().from(G).where(U(G.id,i)).get());if(!$)throw Error(`Project not found: ${i}`);let B=[...$.sandboxes];if(!B.includes(u))B.push(u);yield*s(i,B)}),y=r.fn("Project.removeSandbox")(function*(i,u){let $=yield*e((d)=>d.select().from(G).where(U(G.id,i)).get());if(!$)throw Error(`Project not found: ${i}`);let B=$.sandboxes.filter((d)=>d!==u);yield*s(i,B)});return Sn.of({fromDirectory:H,discover:C,list:J,get:R,update:O,initGit:Q,setInitialized:I,sandboxes:f,addSandbox:m,removeSandbox:y})})),Co=wr.pipe(h.provide(bn),h.provide(z.defaultLayer),h.provide(Zr.layer));function fe(){return Bn.use((n)=>n.select().from(G).all().map((o)=>pn(o)))}function ge(n){let o=Bn.use((t)=>t.select().from(G).where(U(G.id,n)).get());if(!o)return;return pn(o)}function se(n){Bn.use((o)=>o.update(G).set({time_initialized:Date.now()}).where(U(G.id,n)).run())}import{parse as pe}from"path";var rn=fn.create("instance");hr(()=>rn.use());var tn=new Map,_e=nt(Sn,Co),Ne=new Set(["/etc","/proc","/sys","/dev","/boot","/root","/var","/private/etc","/private/var"]);function Te(n){if(n===pe(n).root)return"filesystem root is not a valid project directory";for(let o of Ne)if(n===o||z.contains(o,n))return"target is a protected system directory";return null}function Ae(n){let o=Te(n);if(o)throw Error("Access denied: "+o)}var En={all:void 0};function jr(n){return Kn(async()=>{let o=n.project&&n.worktree?{directory:n.directory,worktree:n.worktree,project:n.project}:await _e.runPromise((t)=>t.fromDirectory(n.directory)).then(({project:t,sandbox:g})=>({directory:n.directory,worktree:g,project:t}));return await rn.provide(o,async()=>{await n.init?.()}),o})}function br(n,o){let t=o.catch((g)=>{if(tn.get(n)===t)tn.delete(n);throw g});return tn.set(n,t),t}var on={async provide(n){let o=z.resolve(n.directory);Ae(o);let t=tn.get(o);if(!t)a.Default.info("creating instance",{directory:o}),t=br(o,jr({directory:o,init:n.init}));let g=await t;return rn.provide(g,async()=>{return n.fn()})},get current(){return rn.use()},get directory(){return rn.use().directory},get worktree(){return rn.use().worktree},get project(){return rn.use().project},containsPath(n,o){let t=o??on;if(z.contains(t.directory,n))return!0;if(t.worktree==="/")return!1;return z.contains(t.worktree,n)},bind(n){let o=rn.use();return(...t)=>rn.provide(o,()=>n(...t))},restore(n,o){return rn.provide(n,o)},async reload(n){let o=z.resolve(n.directory);a.Default.info("reloading instance",{directory:o}),await So(o),tn.delete(o);let t=br(o,jr({...n,directory:o}));return cn.emit("event",{directory:o,project:n.project?.id,workspace:_n.workspaceID,payload:{type:"server.instance.disposed",properties:{directory:o}}}),await t},async dispose(){let{directory:n,project:o}=on;a.Default.info("disposing instance",{directory:n}),await So(n),tn.delete(n),cn.emit("event",{directory:n,project:o.id,workspace:_n.workspaceID,payload:{type:"server.instance.disposed",properties:{directory:n}}})},async disposeAll(){if(En.all)return En.all;return En.all=Kn(async()=>{a.Default.info("disposing all instances");let n=[...tn.entries()];for(let[o,t]of n){if(tn.get(o)!==t)continue;let g=await t.catch((e)=>{a.Default.warn("instance dispose failed",{key:o,error:e});return});if(!g){if(tn.get(o)===t)tn.delete(o);continue}if(tn.get(o)!==t)continue;await rn.provide(g,async()=>{await on.dispose()})}}).finally(()=>{En.all=void 0}),En.all}};var ot="~qitqode/InstanceState",Oe=(n)=>{try{return on.bind(n)}catch(g){if(!(g instanceof fn.NotFound))throw g}let o=In.getCurrent(),t=o?Dn.getReferenceUnsafe(o.context,Pn):void 0;if(!t)return n;return(...g)=>on.restore(t,()=>n(...g))},Jo=r.gen(function*(){return(yield*Pn)??on.current}),$e=r.gen(function*(){return(yield*hn)??_n.workspaceID}),no=r.map(Jo,(n)=>n.directory),De=(n)=>r.gen(function*(){let o=yield*Gn.make({capacity:Number.POSITIVE_INFINITY,lookup:()=>r.gen(function*(){return yield*n(yield*Jo)})}),t=Hr((g)=>r.runPromise(Gn.invalidate(o,g).pipe(r.provide(rt))));return yield*r.addFinalizer(()=>r.sync(t)),{[ot]:ot,cache:o}}),Ho=(n)=>r.gen(function*(){return yield*Gn.get(n.cache,yield*no)}),ve=(n,o)=>r.map(Ho(n),o),Qe=(n,o)=>r.flatMap(Ho(n),o),Be=(n)=>r.gen(function*(){return yield*Gn.has(n.cache,yield*no)}),Ie=(n)=>r.gen(function*(){return yield*Gn.invalidate(n.cache,yield*no)});var et={};dn(et,{make:()=>Le});function tt(n,o,t){if(n&&o!==void 0)return _n.restore(o,()=>on.restore(n,t));if(n)return on.restore(n,t);if(o!==void 0)return _n.restore(o,t);return t()}function Le(){return r.gen(function*(){let n=yield*r.context(),t=(yield*Pn)??(()=>{try{return on.current}catch(p){if(!(p instanceof fn.NotFound))throw p}})(),g=(yield*hn)??_n.workspaceID,e=(p)=>it(p,{instance:t,workspace:g}),T=(p)=>e(p).pipe(r.provide(n));return{promise:(p)=>tt(t,g,()=>r.runPromise(T(p))),fork:(p)=>tt(t,g,()=>r.runFork(T(p)))}})}var mt={};dn(mt,{make:()=>Se,Cancelled:()=>Un});class Un extends _.TaggedErrorClass()("RunnerCancelled",{}){}var Se=(n,o)=>{let t=Nn.makeUnsafe({_tag:"Idle"}),g=o?.onIdle??r.void,e=o?.onBusy??r.void,T=o?.onInterrupt,p=0,A=()=>Nn.getUnsafe(t),M=()=>{return p+=1,p},H=(m,y)=>Zn.isFailure(y)&&Ro.hasInterruptsOnly(y.cause)?gn.fail(m,new Un).pipe(r.asVoid):gn.done(m,y).pipe(r.asVoid),C=()=>Nn.modify(t,(m)=>[m._tag==="Idle"?g:r.void,m]).pipe(r.flatten),J=(m,y,i)=>Nn.modify(t,(u)=>[r.gen(function*(){if(u._tag==="Running"&&u.run.id===m)yield*g;yield*H(y,i)}),u._tag==="Running"&&u.run.id===m?{_tag:"Idle"}:u]).pipe(r.flatten),R=(m,y)=>r.gen(function*(){let i=M(),u=yield*m.pipe(r.onExit(($)=>J(i,y,$)),r.forkIn(n));return{id:i,done:y,fiber:u}}),O=(m)=>Nn.modifyEffect(t,r.fnUntraced(function*(y){if(y._tag==="Shell"&&y.shell.id===m)return[g,{_tag:"Idle"}];if(y._tag==="ShellThenRun"&&y.shell.id===m){let i=yield*R(y.run.work,y.run.done);return[r.void,{_tag:"Running",run:i}]}return[r.void,y]})).pipe(r.flatten),Q=(m)=>In.interrupt(m.fiber),I=(m)=>Nn.modifyEffect(t,r.fnUntraced(function*(y){switch(y._tag){case"Running":case"ShellThenRun":if(o?.onReentryWarn)yield*o.onReentryWarn({label:o.label??"(unlabeled)",existingRunId:y.run.id});return[gn.await(y.run.done),y];case"Shell":{let i={id:M(),done:yield*gn.make(),work:m};return[gn.await(i.done),{_tag:"ShellThenRun",shell:y.shell,run:i}]}case"Idle":{let i=yield*gn.make(),u=yield*R(m,i);return[gn.await(i),{_tag:"Running",run:u}]}}})).pipe(r.flatten,r.catch((y)=>y instanceof Un?T??r.die(y):r.fail(y))),f=(m)=>Nn.modifyEffect(t,r.fnUntraced(function*(y){if(y._tag!=="Idle")return[r.sync(()=>{if(o?.busy)o.busy();throw Error("Runner is busy")}),y];yield*e;let i=M(),u=yield*m.pipe(r.ensuring(O(i)),r.forkChild),$={id:i,fiber:u};return[r.gen(function*(){let B=yield*In.await(u);if(Zn.isSuccess(B))return B.value;if(Ro.hasInterruptsOnly(B.cause)&&T)return yield*T;return yield*r.failCause(B.cause)}),{_tag:"Shell",shell:$}]})).pipe(r.flatten),s=Nn.modify(t,(m)=>{switch(m._tag){case"Idle":return[r.void,m];case"Running":return[r.gen(function*(){yield*In.interrupt(m.run.fiber);let y=yield*In.await(m.run.fiber);yield*H(m.run.done,y),yield*gn.await(m.run.done).pipe(r.exit,r.asVoid),yield*C()}),{_tag:"Idle"}];case"Shell":return[r.gen(function*(){yield*Q(m.shell),yield*C()}),{_tag:"Idle"}];case"ShellThenRun":return[r.gen(function*(){yield*gn.fail(m.run.done,new Un).pipe(r.asVoid),yield*Q(m.shell),yield*C()}),{_tag:"Idle"}]}}).pipe(r.flatten);return{get state(){return A()},get busy(){return A()._tag!=="Idle"},ensureRunning:I,startShell:f,cancel:s}};import{Database as Ge}from"bun:sqlite";function yt(n){let o=new Ge(n,{create:!0});return ut({client:o})}var Me=ro.create("NotFoundError",j.object({message:j.string()})),lt=a.create({service:"db"});function gt(){if(["latest","beta","prod"].includes(co)||nn.QITQODE_DISABLE_CHANNEL_DB)return oo.join(On.Path.data,"qitqode.db");let n=co.replace(/[^a-zA-Z0-9._-]/g,"-");return oo.join(On.Path.data,`qitqode-${n}.db`)}var Ko=Kn(()=>{if(nn.QITQODE_DB){if(nn.QITQODE_DB===":memory:"||oo.isAbsolute(nn.QITQODE_DB))return nn.QITQODE_DB;return oo.join(On.Path.data,nn.QITQODE_DB)}return gt()}),Mn=ft(()=>{lt.info("opening database",{path:Ko});let n=yt(Ko);n.run("PRAGMA journal_mode = WAL"),n.run("PRAGMA synchronous = NORMAL"),n.run("PRAGMA busy_timeout = 5000"),n.run("PRAGMA cache_size = -64000"),n.run("PRAGMA foreign_keys = ON"),n.run("PRAGMA wal_checkpoint(PASSIVE)");let o=[{sql:"CREATE TABLE `project` (\n\t`id` text PRIMARY KEY,\n\t`worktree` text NOT NULL,\n\t`vcs` text,\n\t`name` text,\n\t`icon_url` text,\n\t`icon_color` text,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`time_initialized` integer,\n\t`sandboxes` text NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE `message` (\n\t`id` text PRIMARY KEY,\n\t`session_id` text NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`data` text NOT NULL,\n\tCONSTRAINT `fk_message_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE TABLE `part` (\n\t`id` text PRIMARY KEY,\n\t`message_id` text NOT NULL,\n\t`session_id` text NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`data` text NOT NULL,\n\tCONSTRAINT `fk_part_message_id_message_id_fk` FOREIGN KEY (`message_id`) REFERENCES `message`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE TABLE `permission` (\n\t`project_id` text PRIMARY KEY,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`data` text NOT NULL,\n\tCONSTRAINT `fk_permission_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE TABLE `session` (\n\t`id` text PRIMARY KEY,\n\t`project_id` text NOT NULL,\n\t`parent_id` text,\n\t`slug` text NOT NULL,\n\t`directory` text NOT NULL,\n\t`title` text NOT NULL,\n\t`version` text NOT NULL,\n\t`share_url` text,\n\t`summary_additions` integer,\n\t`summary_deletions` integer,\n\t`summary_files` integer,\n\t`summary_diffs` text,\n\t`revert` text,\n\t`permission` text,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`time_compacting` integer,\n\t`time_archived` integer,\n\tCONSTRAINT `fk_session_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE TABLE `todo` (\n\t`session_id` text NOT NULL,\n\t`content` text NOT NULL,\n\t`status` text NOT NULL,\n\t`priority` text NOT NULL,\n\t`position` integer NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\tCONSTRAINT `todo_pk` PRIMARY KEY(`session_id`, `position`),\n\tCONSTRAINT `fk_todo_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE TABLE `session_share` (\n\t`session_id` text PRIMARY KEY,\n\t`id` text NOT NULL,\n\t`secret` text NOT NULL,\n\t`url` text NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\tCONSTRAINT `fk_session_share_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE INDEX `message_session_idx` ON `message` (`session_id`);--> statement-breakpoint\nCREATE INDEX `part_message_idx` ON `part` (`message_id`);--> statement-breakpoint\nCREATE INDEX `part_session_idx` ON `part` (`session_id`);--> statement-breakpoint\nCREATE INDEX `session_project_idx` ON `session` (`project_id`);--> statement-breakpoint\nCREATE INDEX `session_parent_idx` ON `session` (`parent_id`);--> statement-breakpoint\nCREATE INDEX `todo_session_idx` ON `todo` (`session_id`);",timestamp:1769552633000,name:"20260127222353_familiar_lady_ursula"},{sql:"ALTER TABLE `project` ADD `commands` text;",timestamp:1770830228000,name:"20260211171708_add_project_commands"},{sql:"CREATE TABLE `control_account` (\n\t`email` text NOT NULL,\n\t`url` text NOT NULL,\n\t`access_token` text NOT NULL,\n\t`refresh_token` text NOT NULL,\n\t`token_expiry` integer,\n\t`active` integer NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\tCONSTRAINT `control_account_pk` PRIMARY KEY(`email`, `url`)\n);\n",timestamp:1770993676000,name:"20260213144116_wakeful_the_professor"},{sql:"CREATE TABLE `workspace` (\n\t`id` text PRIMARY KEY,\n\t`branch` text,\n\t`project_id` text NOT NULL,\n\t`config` text NOT NULL,\n\tCONSTRAINT `fk_workspace_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE\n);\n",timestamp:1772056728000,name:"20260225215848_workspace"},{sql:"ALTER TABLE `session` ADD `workspace_id` text;--> statement-breakpoint\nCREATE INDEX `session_workspace_idx` ON `session` (`workspace_id`);",timestamp:1772228279000,name:"20260227213759_add_session_workspace_id"},{sql:"CREATE TABLE `account` (\n\t`id` text PRIMARY KEY,\n\t`email` text NOT NULL,\n\t`url` text NOT NULL,\n\t`access_token` text NOT NULL,\n\t`refresh_token` text NOT NULL,\n\t`token_expiry` integer,\n\t`selected_org_id` text,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE `account_state` (\n\t`id` integer PRIMARY KEY NOT NULL,\n\t`active_account_id` text,\n\tFOREIGN KEY (`active_account_id`) REFERENCES `account`(`id`) ON UPDATE no action ON DELETE set null\n);\n",timestamp:1772310750000,name:"20260228203230_blue_harpoon"},{sql:"ALTER TABLE `workspace` ADD `type` text NOT NULL;--> statement-breakpoint\nALTER TABLE `workspace` ADD `name` text;--> statement-breakpoint\nALTER TABLE `workspace` ADD `directory` text;--> statement-breakpoint\nALTER TABLE `workspace` ADD `extra` text;--> statement-breakpoint\nALTER TABLE `workspace` DROP COLUMN `config`;",timestamp:1772579546000,name:"20260303231226_add_workspace_fields"},{sql:"ALTER TABLE `account_state` ADD `active_org_id` text;--> statement-breakpoint\nUPDATE `account_state` SET `active_org_id` = (SELECT `selected_org_id` FROM `account` WHERE `account`.`id` = `account_state`.`active_account_id`);--> statement-breakpoint\nALTER TABLE `account` DROP COLUMN `selected_org_id`;\n",timestamp:1773097200000,name:"20260309230000_move_org_to_state"},{sql:"DROP INDEX IF EXISTS `message_session_idx`;--> statement-breakpoint\nDROP INDEX IF EXISTS `part_message_idx`;--> statement-breakpoint\nCREATE INDEX `message_session_time_created_id_idx` ON `message` (`session_id`,`time_created`,`id`);--> statement-breakpoint\nCREATE INDEX `part_message_id_id_idx` ON `part` (`message_id`,`id`);",timestamp:1773290071000,name:"20260312043431_session_message_cursor"},{sql:"CREATE TABLE `event_sequence` (\n\t`aggregate_id` text PRIMARY KEY,\n\t`seq` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE `event` (\n\t`id` text PRIMARY KEY,\n\t`aggregate_id` text NOT NULL,\n\t`seq` integer NOT NULL,\n\t`type` text NOT NULL,\n\t`data` text NOT NULL,\n\tCONSTRAINT `fk_event_aggregate_id_event_sequence_aggregate_id_fk` FOREIGN KEY (`aggregate_id`) REFERENCES `event_sequence`(`aggregate_id`) ON DELETE CASCADE\n);\n",timestamp:1774309702000,name:"20260323234822_events"},{sql:"PRAGMA foreign_keys=OFF;--> statement-breakpoint\nCREATE TABLE `__new_workspace` (\n\t`id` text PRIMARY KEY,\n\t`type` text NOT NULL,\n\t`name` text DEFAULT '' NOT NULL,\n\t`branch` text,\n\t`directory` text,\n\t`extra` text,\n\t`project_id` text NOT NULL,\n\tCONSTRAINT `fk_workspace_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nINSERT INTO `__new_workspace`(`id`, `type`, `branch`, `name`, `directory`, `extra`, `project_id`) SELECT `id`, `type`, `branch`, `name`, `directory`, `extra`, `project_id` FROM `workspace`;--> statement-breakpoint\nDROP TABLE `workspace`;--> statement-breakpoint\nALTER TABLE `__new_workspace` RENAME TO `workspace`;--> statement-breakpoint\nPRAGMA foreign_keys=ON;",timestamp:1775843113000,name:"20260410174513_workspace-name"},{sql:"CREATE TABLE `session_entry` (\n\t`id` text PRIMARY KEY,\n\t`session_id` text NOT NULL,\n\t`type` text NOT NULL,\n\t`time_created` integer NOT NULL,\n\t`time_updated` integer NOT NULL,\n\t`data` text NOT NULL,\n\tCONSTRAINT `fk_session_entry_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE\n);\n--> statement-breakpoint\nCREATE INDEX `session_entry_session_idx` ON `session_entry` (`session_id`);--> statement-breakpoint\nCREATE INDEX `session_entry_session_type_idx` ON `session_entry` (`session_id`,`type`);--> statement-breakpoint\nCREATE INDEX `session_entry_time_created_idx` ON `session_entry` (`time_created`);",timestamp:1776103196000,name:"20260413175956_chief_energizer"},{sql:"ALTER TABLE `session` ADD `context_from` text;--> statement-breakpoint\nALTER TABLE `session` ADD `context_watermark` text;--> statement-breakpoint\nCREATE INDEX `session_context_from_idx` ON `session` (`context_from`);\n",timestamp:1776873600000,name:"20260422160000_context_inheritance"},{sql:"CREATE TABLE `task_registry` (\n `id` text PRIMARY KEY,\n `parent_session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `status` text NOT NULL,\n `agent` text NOT NULL,\n `description` text NOT NULL,\n `context_mode` text NOT NULL,\n `background` integer NOT NULL,\n `last_turn_time` integer NOT NULL,\n `turn_count` integer NOT NULL DEFAULT 0,\n `error` text,\n `time_completed` integer,\n `time_created` integer NOT NULL,\n `time_updated` integer NOT NULL\n);--> statement-breakpoint\nCREATE INDEX `task_registry_parent_idx` ON `task_registry` (`parent_session_id`);--> statement-breakpoint\nCREATE INDEX `task_registry_status_idx` ON `task_registry` (`status`);--> statement-breakpoint\nCREATE INDEX `task_registry_status_last_turn_idx` ON `task_registry` (`status`, `last_turn_time`);\n",timestamp:1776877200000,name:"20260422170000_task_registry"},{sql:"DROP INDEX IF EXISTS `session_entry_session_idx`;--> statement-breakpoint\nDROP INDEX IF EXISTS `session_entry_session_type_idx`;--> statement-breakpoint\nDROP INDEX IF EXISTS `session_entry_time_created_idx`;--> statement-breakpoint\nDROP TABLE IF EXISTS `session_entry`;\n",timestamp:1776956061000,name:"20260423145421_remove_session_entry"},{sql:"DROP INDEX IF EXISTS `task_registry_parent_idx`;--> statement-breakpoint\nDROP INDEX IF EXISTS `task_registry_status_idx`;--> statement-breakpoint\nDROP INDEX IF EXISTS `task_registry_status_last_turn_idx`;--> statement-breakpoint\nALTER TABLE `task_registry` RENAME TO `actor_registry`;--> statement-breakpoint\nCREATE INDEX `actor_registry_parent_idx` ON `actor_registry` (`parent_session_id`);--> statement-breakpoint\nCREATE INDEX `actor_registry_status_idx` ON `actor_registry` (`status`);--> statement-breakpoint\nCREATE INDEX `actor_registry_status_last_turn_idx` ON `actor_registry` (`status`, `last_turn_time`);\n",timestamp:1778803200000,name:"20260515000000_actor_rename"},{sql:"CREATE TABLE `memory_fts` (\n `path` text PRIMARY KEY NOT NULL,\n `scope` text NOT NULL,\n `scope_id` text DEFAULT '' NOT NULL,\n `type` text NOT NULL,\n `body` text NOT NULL,\n `fingerprint` text NOT NULL,\n `last_indexed_at` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE INDEX `memory_fts_scope_idx` ON `memory_fts` (`scope`, `scope_id`);\n--> statement-breakpoint\nCREATE INDEX `memory_fts_type_idx` ON `memory_fts` (`type`);\n--> statement-breakpoint\nCREATE VIRTUAL TABLE `memory_fts_idx` USING fts5(\n body,\n content='memory_fts',\n content_rowid='rowid',\n tokenize='unicode61 remove_diacritics 1'\n);\n--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ai` AFTER INSERT ON `memory_fts` BEGIN\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.rowid, NEW.body);\nEND;\n--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ad` AFTER DELETE ON `memory_fts` BEGIN\n DELETE FROM `memory_fts_idx` WHERE rowid = OLD.rowid;\nEND;\n--> statement-breakpoint\nCREATE TRIGGER `memory_fts_au` AFTER UPDATE ON `memory_fts` BEGIN\n DELETE FROM `memory_fts_idx` WHERE rowid = OLD.rowid;\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.rowid, NEW.body);\nEND;\n",timestamp:1778806800000,name:"20260515010000_memory_fts"},{sql:"CREATE TABLE `task` (\n `id` text NOT NULL,\n `session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `parent_task_id` text,\n `kind` text NOT NULL DEFAULT 'user',\n `status` text NOT NULL,\n `focus` integer NOT NULL DEFAULT 0,\n `summary` text NOT NULL,\n `created_at` integer NOT NULL,\n `last_event_at` integer NOT NULL,\n `ended_at` integer,\n `cleanup_after` integer,\n PRIMARY KEY (`session_id`, `id`)\n);--> statement-breakpoint\nCREATE INDEX `task_session_idx` ON `task` (`session_id`);--> statement-breakpoint\nCREATE INDEX `task_parent_idx` ON `task` (`session_id`, `parent_task_id`);--> statement-breakpoint\nCREATE INDEX `task_status_idx` ON `task` (`status`);--> statement-breakpoint\nCREATE INDEX `task_kind_idx` ON `task` (`kind`);--> statement-breakpoint\nCREATE UNIQUE INDEX `task_focus_per_session_idx` ON `task` (`session_id`) WHERE focus = 1;--> statement-breakpoint\nCREATE TABLE `task_event` (\n `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n `session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `task_id` text NOT NULL,\n `at` integer NOT NULL,\n `kind` text NOT NULL,\n `summary` text,\n FOREIGN KEY (`session_id`, `task_id`) REFERENCES `task`(`session_id`, `id`) ON DELETE CASCADE\n);--> statement-breakpoint\nCREATE INDEX `task_event_task_idx` ON `task_event` (`session_id`, `task_id`, `at`);\n",timestamp:1778810400000,name:"20260515020000_user_task"},{sql:"ALTER TABLE `session` ADD `last_checkpoint_message_id` text;\n",timestamp:1779148800000,name:"20260519000000_last_checkpoint_message_id"},{sql:"ALTER TABLE `message` ADD `agent_id` text;--> statement-breakpoint\nCREATE INDEX `message_session_agent_idx` ON `message` (`session_id`,`agent_id`,`id`);\n",timestamp:1779321600000,name:"20260521000000_message_agent_id"},{sql:"DROP TABLE `actor_registry`;--> statement-breakpoint\nCREATE TABLE `actor_registry` (\n `session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `actor_id` text NOT NULL,\n `mode` text NOT NULL,\n `parent_actor_id` text,\n `status` text NOT NULL,\n `agent` text NOT NULL,\n `description` text NOT NULL,\n `context_mode` text NOT NULL,\n `context_watermark` text,\n `background` integer NOT NULL,\n `tools` text,\n `last_turn_time` integer NOT NULL,\n `turn_count` integer NOT NULL DEFAULT 0,\n `error` text,\n `time_completed` integer,\n `time_created` integer NOT NULL,\n `time_updated` integer NOT NULL,\n PRIMARY KEY (`session_id`, `actor_id`)\n);--> statement-breakpoint\nCREATE INDEX `actor_registry_session_agent_idx` ON `actor_registry` (`session_id`, `agent`);--> statement-breakpoint\nCREATE INDEX `actor_registry_session_parent_idx` ON `actor_registry` (`session_id`, `parent_actor_id`);--> statement-breakpoint\nCREATE INDEX `actor_registry_status_idx` ON `actor_registry` (`status`);--> statement-breakpoint\nCREATE INDEX `actor_registry_status_last_turn_idx` ON `actor_registry` (`status`, `last_turn_time`);\n",timestamp:1779321660000,name:"20260521000100_actor_registry_v6"},{sql:"DROP TRIGGER IF EXISTS `memory_fts_ai`;--> statement-breakpoint\nDROP TRIGGER IF EXISTS `memory_fts_ad`;--> statement-breakpoint\nDROP TRIGGER IF EXISTS `memory_fts_au`;--> statement-breakpoint\nDROP TABLE IF EXISTS `memory_fts_idx`;--> statement-breakpoint\nDROP TABLE IF EXISTS `memory_fts`;--> statement-breakpoint\nCREATE TABLE `memory_fts` (\n `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n `path` text NOT NULL UNIQUE,\n `scope` text NOT NULL,\n `scope_id` text DEFAULT '' NOT NULL,\n `type` text NOT NULL,\n `body` text NOT NULL,\n `fingerprint` text NOT NULL,\n `last_indexed_at` integer NOT NULL\n);--> statement-breakpoint\nCREATE INDEX `memory_fts_scope_idx` ON `memory_fts` (`scope`, `scope_id`);--> statement-breakpoint\nCREATE INDEX `memory_fts_type_idx` ON `memory_fts` (`type`);--> statement-breakpoint\nCREATE VIRTUAL TABLE `memory_fts_idx` USING fts5(\n body,\n content='memory_fts',\n content_rowid='id',\n tokenize='unicode61 remove_diacritics 1'\n);--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ai` AFTER INSERT ON `memory_fts` BEGIN\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.id, NEW.body);\nEND;--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ad` AFTER DELETE ON `memory_fts` BEGIN\n DELETE FROM `memory_fts_idx` WHERE rowid = OLD.id;\nEND;--> statement-breakpoint\nCREATE TRIGGER `memory_fts_au` AFTER UPDATE ON `memory_fts` BEGIN\n DELETE FROM `memory_fts_idx` WHERE rowid = OLD.id;\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.id, NEW.body);\nEND;\n",timestamp:1779325200000,name:"20260521010000_memory_fts_v6"},{sql:"-- Fix v6.1 trigger pattern: external content FTS5 vtab requires the 'delete'\n-- magic command to remove OLD body's tokens, NOT a plain DELETE FROM the vtab.\n-- The previous DELETE FROM pattern was contentless-mode syntax misapplied to\n-- external-content mode, leaving stale tokens accumulating until vtab corrupts.\nDROP TRIGGER IF EXISTS `memory_fts_ai`;--> statement-breakpoint\nDROP TRIGGER IF EXISTS `memory_fts_ad`;--> statement-breakpoint\nDROP TRIGGER IF EXISTS `memory_fts_au`;--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ai` AFTER INSERT ON `memory_fts` BEGIN\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.id, NEW.body);\nEND;--> statement-breakpoint\nCREATE TRIGGER `memory_fts_ad` AFTER DELETE ON `memory_fts` BEGIN\n INSERT INTO `memory_fts_idx`(`memory_fts_idx`, rowid, body) VALUES('delete', OLD.id, OLD.body);\nEND;--> statement-breakpoint\nCREATE TRIGGER `memory_fts_au` AFTER UPDATE ON `memory_fts` BEGIN\n INSERT INTO `memory_fts_idx`(`memory_fts_idx`, rowid, body) VALUES('delete', OLD.id, OLD.body);\n INSERT INTO `memory_fts_idx`(rowid, body) VALUES (NEW.id, NEW.body);\nEND;\n",timestamp:1779328800000,name:"20260521020000_memory_fts_triggers"},{sql:"UPDATE `message` SET `agent_id` = 'main' WHERE `agent_id` IS NULL;--> statement-breakpoint\nCREATE TABLE `message_new` (\n `id` text PRIMARY KEY NOT NULL,\n `session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `agent_id` text NOT NULL DEFAULT 'main',\n `time_created` integer NOT NULL,\n `time_updated` integer NOT NULL,\n `data` text NOT NULL\n);--> statement-breakpoint\nINSERT INTO `message_new` SELECT `id`, `session_id`, COALESCE(`agent_id`, 'main'), `time_created`, `time_updated`, `data` FROM `message`;--> statement-breakpoint\nDROP TABLE `message`;--> statement-breakpoint\nALTER TABLE `message_new` RENAME TO `message`;--> statement-breakpoint\nCREATE INDEX `message_session_time_created_id_idx` ON `message` (`session_id`,`time_created`,`id`);--> statement-breakpoint\nCREATE INDEX `message_session_agent_idx` ON `message` (`session_id`,`agent_id`,`id`);\n",timestamp:1779753600000,name:"20260526000000_agent_id_main"},{sql:"ALTER TABLE `actor_registry` ADD COLUMN `last_outcome` text;--> statement-breakpoint\nALTER TABLE `actor_registry` ADD COLUMN `lifecycle` text NOT NULL DEFAULT 'ephemeral';--> statement-breakpoint\nALTER TABLE `actor_registry` RENAME COLUMN `error` TO `last_error`;--> statement-breakpoint\nUPDATE `actor_registry` SET `last_outcome` = 'success' WHERE `status` = 'completed';--> statement-breakpoint\nUPDATE `actor_registry` SET `last_outcome` = 'failure' WHERE `status` = 'failed';--> statement-breakpoint\nUPDATE `actor_registry` SET `last_outcome` = 'cancelled' WHERE `status` = 'cancelled';--> statement-breakpoint\nUPDATE `actor_registry` SET `status` = 'idle' WHERE `status` IN ('completed','failed','cancelled');--> statement-breakpoint\nUPDATE `actor_registry` SET `lifecycle` = CASE `mode` WHEN 'peer' THEN 'persistent' WHEN 'main' THEN 'persistent' ELSE 'ephemeral' END;\n",timestamp:1779840000000,name:"20260527000000_actor_lifecycle"},{sql:"CREATE TABLE `inbox` (\n `id` text PRIMARY KEY NOT NULL,\n `receiver_session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `receiver_actor_id` text NOT NULL,\n `sender_session_id` text,\n `sender_actor_id` text,\n `type` text NOT NULL DEFAULT 'text',\n `content` text NOT NULL,\n `created_at` integer NOT NULL\n);--> statement-breakpoint\nCREATE INDEX `inbox_receiver_idx` ON `inbox` (`receiver_session_id`,`receiver_actor_id`,`id`);--> statement-breakpoint\nCREATE INDEX `inbox_created_idx` ON `inbox` (`created_at`);\n",timestamp:1779840060000,name:"20260527000100_inbox"},{sql:"-- todo: drop priority column\nALTER TABLE `todo` DROP COLUMN `priority`;\n--> statement-breakpoint\n\n-- task: drop focus-dependent index before dropping its column\nDROP INDEX `task_focus_per_session_idx`;\n--> statement-breakpoint\nDROP INDEX `task_kind_idx`;\n--> statement-breakpoint\nALTER TABLE `task` DROP COLUMN `focus`;\n--> statement-breakpoint\nALTER TABLE `task` DROP COLUMN `kind`;\n--> statement-breakpoint\n\n-- migrate status values: proposed/active -> open\nUPDATE `task` SET `status` = 'open' WHERE `status` IN ('proposed', 'active');\n",timestamp:1780012800000,name:"20260529000000_task_todo_redesign"},{sql:"ALTER TABLE `task` ADD COLUMN `owner` text;\n",timestamp:1780444800000,name:"20260603000000_task_in_progress_owner"},{sql:"CREATE TABLE `workflow_run` (\n `id` text PRIMARY KEY NOT NULL,\n `session_id` text NOT NULL REFERENCES `session`(`id`) ON DELETE CASCADE,\n `name` text NOT NULL,\n `status` text NOT NULL,\n `running` integer NOT NULL DEFAULT 0,\n `succeeded` integer NOT NULL DEFAULT 0,\n `failed` integer NOT NULL DEFAULT 0,\n `current_phase` text,\n `parent_actor_id` text,\n `args` text,\n `error` text,\n `time_created` integer NOT NULL,\n `time_updated` integer NOT NULL\n);--> statement-breakpoint\nCREATE INDEX `workflow_run_session_idx` ON `workflow_run` (`session_id`);--> statement-breakpoint\nCREATE INDEX `workflow_run_status_idx` ON `workflow_run` (`status`);\n",timestamp:1780444800000,name:"20260603000000_workflow_run"},{sql:"ALTER TABLE `workflow_run` ADD COLUMN `script_sha` text;\n",timestamp:1780531200000,name:"20260604000000_workflow_script_sha"},{sql:"CREATE TABLE `claude_import` (\n `source_uuid` text PRIMARY KEY NOT NULL,\n `session_id` text NOT NULL,\n `source_path` text NOT NULL,\n `source_mtime` integer NOT NULL,\n `time_imported` integer NOT NULL\n);\n",timestamp:1780876800000,name:"20260608000000_claude_import"},{sql:"ALTER TABLE `claude_import` ADD `message_ids` text;\n",timestamp:1780880400000,name:"20260608010000_claude_import_message_ids"},{sql:"CREATE TABLE `history_fts` (\n `part_id` text PRIMARY KEY NOT NULL,\n `session_id` text NOT NULL,\n `message_id` text NOT NULL,\n `project_id` text NOT NULL,\n `kind` text NOT NULL,\n `tool_name` text,\n `body` text NOT NULL,\n `time_created` integer NOT NULL\n);--> statement-breakpoint\nCREATE INDEX `history_fts_session_idx` ON `history_fts` (`session_id`, `time_created`);--> statement-breakpoint\nCREATE INDEX `history_fts_project_idx` ON `history_fts` (`project_id`, `time_created`);--> statement-breakpoint\nCREATE INDEX `history_fts_message_idx` ON `history_fts` (`message_id`);--> statement-breakpoint\nCREATE VIRTUAL TABLE `history_fts_idx` USING fts5(\n body,\n content='history_fts',\n content_rowid='rowid',\n tokenize='unicode61 remove_diacritics 1'\n);--> statement-breakpoint\nCREATE TRIGGER `history_fts_ai` AFTER INSERT ON `history_fts` BEGIN\n INSERT INTO `history_fts_idx`(rowid, body) VALUES (NEW.rowid, NEW.body);\nEND;--> statement-breakpoint\nCREATE TRIGGER `history_fts_ad` AFTER DELETE ON `history_fts` BEGIN\n INSERT INTO `history_fts_idx`(`history_fts_idx`, rowid, body) VALUES('delete', OLD.rowid, OLD.body);\nEND;--> statement-breakpoint\nCREATE TRIGGER `history_fts_au` AFTER UPDATE ON `history_fts` BEGIN\n INSERT INTO `history_fts_idx`(`history_fts_idx`, rowid, body) VALUES('delete', OLD.rowid, OLD.body);\n INSERT INTO `history_fts_idx`(rowid, body) VALUES (NEW.rowid, NEW.body);\nEND;\n",timestamp:1780963200000,name:"20260609000000_history_fts"},{sql:"ALTER TABLE `workflow_run` ADD COLUMN `agent_timeout_ms` integer;\n",timestamp:1781046000000,name:"20260609230000_workflow_agent_timeout"},{sql:"CREATE TABLE `external_import` (\n `source` text NOT NULL,\n `source_key` text NOT NULL,\n `session_id` text NOT NULL,\n `source_path` text NOT NULL,\n `source_mtime` integer NOT NULL,\n `time_imported` integer NOT NULL,\n `message_ids` text,\n PRIMARY KEY (`source`, `source_key`)\n);\n\nINSERT INTO `external_import` (`source`, `source_key`, `session_id`, `source_path`, `source_mtime`, `time_imported`, `message_ids`)\nSELECT 'cc', `source_uuid`, `session_id`, `source_path`, `source_mtime`, `time_imported`, `message_ids`\nFROM `claude_import`;\n\nDROP TABLE `claude_import`;\n",timestamp:1781222400000,name:"20260612000000_external_import"}];if(o.length>0){if(lt.info("applying migrations",{count:o.length,mode:"bundled"}),nn.QITQODE_SKIP_MIGRATIONS)for(let t of o)t.sql="select 1;";jo(n,o)}return n});function xe(){Mn().$client.close(),Mn.reset()}var Xn=fn.create("database");function Ce(n){try{return n(Xn.use().tx)}catch(o){if(o instanceof fn.NotFound){let t=[],g=Xn.provide({effects:t,tx:Mn()},()=>n(Mn()));for(let e of t)e();return g}throw o}}function Je(n){let o=Wn.bind(n);try{Xn.use().effects.push(o)}catch{o()}}function He(n,o){try{return n(Xn.use().tx)}catch(t){if(t instanceof fn.NotFound){let g=[],e=Wn.bind((p)=>Xn.provide({tx:p,effects:g},()=>n(p))),T=Mn().transaction(e,{behavior:o?.behavior});for(let p of g)p();return T}throw t}}var dt={};dn(dt,{layer:()=>At,defaultLayer:()=>Ve,Service:()=>io,NotFoundError:()=>Uo});import Z from"path";var xn={};dn(xn,{layer:()=>Nt,defaultLayer:()=>Ke,Service:()=>to,Git:()=>xn});var Re=["--no-optional-locks","-c","core.autocrlf=false","-c","core.fsmonitor=false","-c","core.longpaths=true","-c","core.symlinks=true","-c","core.quotepath=false"],Yn=(n)=>n.text().trim(),Eo=(n)=>n.split("\x00").filter(Boolean),ce=(n)=>({exitCode:1,text:()=>"",stdout:Buffer.alloc(0),stderr:Buffer.from(n instanceof Error?n.message:String(n))}),st=(n)=>{if(n==="??")return"added";if(n.includes("U"))return"modified";if(n.includes("A")&&!n.includes("D"))return"added";if(n.includes("D")&&!n.includes("A"))return"deleted";return"modified"};class to extends Dn.Service()("@qitqode/Git"){}var Nt=h.effect(to,r.gen(function*(){let n=yield*jn.ChildProcessSpawner,o=r.fn("Git.run")(function*(f,s){let m=pt.make("git",[...Re,...f],{cwd:s.cwd,env:s.env,extendEnv:!0,stdin:"ignore",stdout:"pipe",stderr:"pipe"}),y=yield*_t(n,m);return{exitCode:y.code,text:()=>y.text,stdout:Buffer.from(y.text),stderr:Buffer.from(y.stderr)}},r.scoped,r.catch((f)=>r.succeed(ce(f)))),t=r.fn("Git.text")(function*(f,s){return(yield*o(f,s)).text()}),g=r.fn("Git.lines")(function*(f,s){return(yield*t(f,s)).split(/\r?\n/).map((m)=>m.trim()).filter(Boolean)}),e=r.fnUntraced(function*(f){return yield*g(["for-each-ref","--format=%(refname:short)","refs/heads"],{cwd:f})}),T=r.fnUntraced(function*(f,s){let m=yield*o(["config","init.defaultBranch"],{cwd:f}),y=Yn(m);if(!y||!s.includes(y))return;return{name:y,ref:y}}),p=r.fnUntraced(function*(f){let s=yield*g(["remote"],{cwd:f});if(s.includes("origin"))return"origin";if(s.length===1)return s[0];if(s.includes("upstream"))return"upstream";return s[0]}),A=r.fn("Git.branch")(function*(f){let s=yield*o(["symbolic-ref","--quiet","--short","HEAD"],{cwd:f});if(s.exitCode!==0)return;return Yn(s)||void 0}),M=r.fn("Git.prefix")(function*(f){let s=yield*o(["rev-parse","--show-prefix"],{cwd:f});if(s.exitCode!==0)return"";return Yn(s)}),H=r.fn("Git.defaultBranch")(function*(f){let s=yield*p(f);if(s){let i=yield*o(["symbolic-ref",`refs/remotes/${s}/HEAD`],{cwd:f});if(i.exitCode===0){let u=Yn(i).replace(/^refs\/remotes\//,""),$=u.startsWith(`${s}/`)?u.slice(`${s}/`.length):"";if($)return{name:$,ref:u}}}let m=yield*e(f),y=yield*T(f,m);if(y)return y;if(m.includes("main"))return{name:"main",ref:"main"};if(m.includes("master"))return{name:"master",ref:"master"}}),C=r.fn("Git.hasHead")(function*(f){return(yield*o(["rev-parse","--verify","HEAD"],{cwd:f})).exitCode===0}),J=r.fn("Git.mergeBase")(function*(f,s,m="HEAD"){let y=yield*o(["merge-base",s,m],{cwd:f});if(y.exitCode!==0)return;return Yn(y)||void 0}),R=r.fn("Git.show")(function*(f,s,m,y=""){let i=y?`${y}${m}`:m,u=yield*o(["show",`${s}:${i}`],{cwd:f});if(u.exitCode!==0)return"";if(u.stdout.includes(0))return"";return u.text()}),O=r.fn("Git.status")(function*(f){return Eo(yield*t(["status","--porcelain=v1","--untracked-files=all","--no-renames","-z","--","."],{cwd:f})).flatMap((s)=>{let m=s.slice(3);if(!m)return[];let y=s.slice(0,2);return[{file:m,code:y,status:st(y)}]})}),Q=r.fn("Git.diff")(function*(f,s){let m=Eo(yield*t(["diff","--no-ext-diff","--no-renames","--name-status","-z",s,"--","."],{cwd:f}));return m.flatMap((y,i)=>{if(i%2!==0)return[];let u=m[i+1];if(!y||!u)return[];return[{file:u,code:y,status:st(y)}]})}),I=r.fn("Git.stats")(function*(f,s){return Eo(yield*t(["diff","--no-ext-diff","--no-renames","--numstat","-z",s,"--","."],{cwd:f})).flatMap((m)=>{let y=m.indexOf("\t"),i=m.indexOf("\t",y+1);if(y===-1||i===-1)return[];let u=m.slice(i+1);if(!u)return[];let $=m.slice(0,y),B=m.slice(y+1,i),d=$==="-"?0:Number.parseInt($||"0",10),E=B==="-"?0:Number.parseInt(B||"0",10);return[{file:u,additions:Number.isFinite(d)?d:0,deletions:Number.isFinite(E)?E:0}]})});return to.of({run:o,branch:A,prefix:M,defaultBranch:H,hasHead:C,mergeBase:J,show:R,status:O,diff:Q,stats:I})})),Ke=Nt.pipe(h.provide(bn));var Tn=a.create({service:"storage"}),Uo=ro.create("NotFoundError",j.object({message:j.string()})),Ee=_.Struct({path:_.optional(_.Struct({root:_.optional(_.String)}))}),Pe=_.Struct({id:_.String}),We=_.Struct({id:_.String}),Ue=_.Struct({additions:_.Number,deletions:_.Number}),Ze=_.Struct({id:_.String,projectID:_.String,summary:_.Struct({diffs:_.Array(Ue)})}),Xe=_.decodeUnknownOption(Ee),Ye=_.decodeUnknownOption(Pe),ae=_.decodeUnknownOption(We),ze=_.decodeUnknownOption(Ze);class io extends Dn.Service()("@qitqode/Storage"){}function ke(n,o){return Z.join(n,...o)+".json"}function Po(n){if(!n||typeof n!=="object")return!1;if("code"in n&&n.code==="ENOENT")return!0;if("reason"in n&&n.reason&&typeof n.reason==="object"&&"_tag"in n.reason)return n.reason._tag==="NotFound";return!1}function qe(n){let o=Number.parseInt(n,10);return Number.isNaN(o)?0:o}var Tt=[r.fn("Storage.migration.1")(function*(n,o,t){let g=Z.resolve(n,"../project");if(!(yield*o.isDir(g)))return;let e=yield*o.glob("*",{cwd:g,include:"all"});for(let T of e){let p=Z.join(g,T);if(!(yield*o.isDir(p)))continue;Tn.info(`migrating project ${T}`);let A=T,M="/";if(A!=="global"){for(let J of yield*o.glob("storage/session/message/*/*.json",{cwd:p,absolute:!0})){let R=Xe(yield*o.readJson(J),{onExcessProperty:"preserve"}),O=an.isSome(R)?R.value.path?.root:void 0;if(!O)continue;M=O;break}if(!M)continue;if(!(yield*o.isDir(M)))continue;let H=yield*t.run(["rev-list","--max-parents=0","--all"],{cwd:M}),[C]=H.text().split(`
|
|
5
5
|
`).filter(Boolean).map((J)=>J.trim()).toSorted();if(!C)continue;A=C,yield*o.writeWithDirs(Z.join(n,"project",A+".json"),JSON.stringify({id:C,vcs:"git",worktree:M,time:{created:Date.now(),initialized:Date.now()}},null,2)),Tn.info(`migrating sessions for project ${A}`);for(let J of yield*o.glob("storage/session/info/*.json",{cwd:p,absolute:!0})){let R=Z.join(n,"session",A,Z.basename(J));Tn.info("copying",{sessionFile:J,dest:R});let O=yield*o.readJson(J),Q=Ye(O,{onExcessProperty:"preserve"});if(yield*o.writeWithDirs(R,JSON.stringify(O,null,2)),an.isNone(Q))continue;Tn.info(`migrating messages for session ${Q.value.id}`);for(let I of yield*o.glob(`storage/session/message/${Q.value.id}/*.json`,{cwd:p,absolute:!0})){let f=Z.join(n,"message",Q.value.id,Z.basename(I));Tn.info("copying",{msgFile:I,dest:f});let s=yield*o.readJson(I),m=ae(s,{onExcessProperty:"preserve"});if(yield*o.writeWithDirs(f,JSON.stringify(s,null,2)),an.isNone(m))continue;Tn.info(`migrating parts for message ${m.value.id}`);for(let y of yield*o.glob(`storage/session/part/${Q.value.id}/${m.value.id}/*.json`,{cwd:p,absolute:!0})){let i=Z.join(n,"part",m.value.id,Z.basename(y)),u=yield*o.readJson(y);Tn.info("copying",{partFile:y,dest:i}),yield*o.writeWithDirs(i,JSON.stringify(u,null,2))}}}}}}),r.fn("Storage.migration.2")(function*(n,o){for(let t of yield*o.glob("session/*/*.json",{cwd:n,absolute:!0})){let g=yield*o.readJson(t),e=ze(g,{onExcessProperty:"preserve"});if(an.isNone(e))continue;let T=e.value.summary.diffs;yield*o.writeWithDirs(Z.join(n,"session_diff",e.value.id+".json"),JSON.stringify(T,null,2)),yield*o.writeWithDirs(Z.join(n,"session",e.value.projectID,e.value.id+".json"),JSON.stringify({...g,summary:{additions:T.reduce((p,A)=>p+A.additions,0),deletions:T.reduce((p,A)=>p+A.deletions,0)}},null,2))}})],At=h.effect(io,r.gen(function*(){let n=yield*z.Service,o=yield*xn.Service,t=yield*Wo.make({lookup:()=>Cn.make(),idleTimeToLive:0}),g=yield*r.cached(r.gen(function*(){let O=Z.join(On.Path.data,"storage"),Q=Z.join(O,"migration"),I=yield*n.readFileString(Q).pipe(r.map(qe),r.catchIf(Po,()=>r.succeed(0)),r.orElseSucceed(()=>0));for(let f=I;f<Tt.length;f++){Tn.info("running migration",{index:f});let s=Tt[f],m=yield*r.exit(s(O,n,o));if(Zn.isFailure(m)){Tn.error("failed to run migration",{index:f,cause:m.cause});break}yield*n.writeWithDirs(Q,String(f+1))}return{dir:O}})),e=(O)=>r.fail(new Uo({message:`Resource not found: ${O}`})),T=(O,Q)=>Q.pipe(r.catchIf(Po,()=>e(O))),p=r.fnUntraced(function*(O,Q){yield*n.writeWithDirs(O,JSON.stringify(Q,null,2))}),A=(O,Q)=>r.scoped(r.gen(function*(){let I=ke((yield*g).dir,O);return yield*Q(I,yield*Wo.get(t,I))})),M=r.fn("Storage.remove")(function*(O){yield*A(O,(Q,I)=>Cn.withWriteLock(I,n.remove(Q).pipe(r.catchIf(Po,()=>r.void))))}),H=(O)=>r.gen(function*(){return yield*A(O,(I,f)=>Cn.withReadLock(f,T(I,n.readJson(I))))}),C=(O,Q)=>r.gen(function*(){return yield*A(O,(f,s)=>Cn.withWriteLock(s,r.gen(function*(){let m=yield*T(f,n.readJson(f));return Q(m),yield*p(f,m),m})))}),J=(O,Q)=>r.gen(function*(){yield*A(O,(I,f)=>Cn.withWriteLock(f,p(I,Q)))}),R=r.fn("Storage.list")(function*(O){let Q=(yield*g).dir,I=Z.join(Q,...O);return(yield*n.glob("**/*",{cwd:I,include:"file"}).pipe(r.catch(()=>r.succeed([])))).map((s)=>[...O,...s.slice(0,-5).split(Z.sep)]).toSorted((s,m)=>s.join("/").localeCompare(m.join("/")))});return io.of({remove:M,read:H,update:C,write:J,list:R})})),Ve=At.pipe(h.provide(z.defaultLayer),h.provide(xn.defaultLayer));export{cn as Ql,Hr as Rl,Kn as Sl,mn as Tl,G as Ul,ln as Vl,eo as Wl,Xo as Xl,Yo as Yl,ao as Zl,zo as _l,qo as $l,lo as am,Bn as bm,xn as cm,Uo as dm,dt as em,V as fm,Go as gm,Er as hm,se as im,Fr as jm,Te as km,on as lm,Wn as mm,Le as nm,et as om,mt as pm};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{go as a0}from"./chunk-htz93dsd.js";import{Pq as f0,Rq as l0}from"./chunk-ehhas0ew.js";import{Pr as o0}from"./chunk-0dt0bxz6.js";import{Sr as T0}from"./chunk-4cnwn1rh.js";import{Ms as C0,Os as s,Qs as H0,Rs as r,_r as P0}from"./chunk-m5m448mg.js";import{$s as a,it as n0,ot as f,st as S}from"./chunk-tqj69nh6.js";import{ut as p}from"./chunk-5tray1fw.js";import{Yy as u0}from"./chunk-gagtmjmp.js";import{OE as g,RM as w,YN as s0,Zz as p0,cH as N0,hF as C,pH as J,uB as L,zC as R0}from"./chunk-zs8kqdsf.js";import{BO as X0,DO as i0,FO as _2}from"./chunk-7xm75w1e.js";function h0(Z,Q){let z,$=()=>z??=u0.make(g.provideMerge(Q,f0.layer),{memoMap:l0});return{runSync:(X)=>$().runSync(Z.use(X)),runPromiseExit:(X,Y)=>$().runPromiseExit(Z.use(X),Y),runPromise:(X,Y)=>$().runPromise(Z.use(X),Y),runFork:(X)=>$().runFork(Z.use(X)),runCallback:(X)=>$().runCallback(Z.use(X))}}var Y0={};i0(Y0,{which:()=>w2,sanitize:()=>t0,outdated:()=>K2,layer:()=>e0,install:()=>N2,defaultLayer:()=>Z2,add:()=>F2,Service:()=>z0,Npm:()=>Y0,InstallFailedError:()=>V0});var r0=X0(o0(),1),b0=X0(a0(),1);import k from"path";import I0 from"path";import A2 from"os";import{randomUUID as D2}from"crypto";var B0;((Q0)=>{class Z extends w.TaggedErrorClass()("LockTimeoutError",{key:w.String}){}Q0.LockTimeoutError=Z;class Q extends w.TaggedErrorClass()("LockCompromisedError",{detail:w.String}){}Q0.LockCompromisedError=Q;class z extends w.TaggedErrorClass()("ReleaseError",{detail:w.String,cause:w.optional(w.Defect)}){get message(){return this.detail}}class $ extends w.TaggedErrorClass()("NotAcquired",{}){}let X=60000,Y=300000,U=100,G=2000,W=Math.max(100,Math.floor(X/3)),I=C.exponential(U,1.7).pipe(C.either(C.spaced(G)),C.jittered,C.while((j)=>j.elapsed<Y)),H=w.fromJsonString(w.Struct({token:w.String,pid:w.Number,hostname:w.String,createdAt:w.String})),q=w.decodeUnknownSync(H),R=w.encodeSync(H);class N extends R0.Service()("EffectFlock"){}Q0.Service=N;function A(){return performance.timeOrigin+performance.now()}let O=(j)=>L.getOrElse(j.mtime,()=>new Date(0)).getTime(),K=(j)=>j.reason._tag==="NotFound"||j.reason._tag==="Unknown";Q0.layer=g.effect(N,J.gen(function*(){let j=yield*s.Service,_=yield*f.Service,V=I0.join(j.state,"locks"),B=A2.hostname(),M=new Set,m=(D)=>_.stat(D).pipe(J.catchIf(K,()=>J.void),J.orDie),l=(D)=>_.remove(D,{recursive:!0}).pipe(J.ignore),d=(D)=>_.makeDirectory(D,{mode:448}).pipe(J.as(!0),J.catchIf((T)=>T.reason._tag==="AlreadyExists",()=>J.succeed(!1)),J.orDie),M0=(D,T,E,P)=>_.writeFileString(D,T,{flag:"wx"}).pipe(J.catch(()=>J.gen(function*(){return yield*l(E),yield*new Q({detail:P})}))),w0=J.fnUntraced(function*(D){let T=yield*m(D);if(T&&A()-O(T)>X)yield*l(D);return!1}),Z0=J.fnUntraced(function*(D){if(M.has(D))return;yield*_.makeDirectory(D,{recursive:!0}).pipe(J.orDie),M.add(D)}),F=J.fnUntraced(function*(D,T,E){let P=A(),h=yield*m(T);if(h)return P-O(h)>X;let $0=yield*m(E);if($0)return P-O($0)>X;let q0=yield*m(D);if(!q0)return!1;return P-O(q0)>X}),b=(D,T)=>J.gen(function*(){let E=D2(),P=I0.join(D,"meta.json"),h=I0.join(D,"heartbeat");if(!(yield*d(D))){if(!(yield*F(D,h,P)))return yield*new $;let O0=D+".breaker";if(!(yield*_.makeDirectory(O0,{mode:448}).pipe(J.as(!0),J.catchIf((V2)=>V2.reason._tag==="AlreadyExists",()=>w0(O0)),J.catchIf(K,()=>J.succeed(!1)),J.orDie)))return yield*new $;if(!(yield*J.gen(function*(){if(!(yield*F(D,h,P)))return!1;return yield*l(D),yield*d(D)}).pipe(J.ensuring(l(O0)))))return yield*new $}yield*M0(h,"",D,"heartbeat already existed");let q0=R({token:E,pid:process.pid,hostname:B,createdAt:new Date().toISOString()});return yield*M0(P,q0,D,"meta.json already existed"),{token:E,metaPath:P,heartbeatPath:h,lockDir:D}}).pipe(J.withSpan("EffectFlock.tryAcquire",{attributes:{key:T}})),U0=(D,T)=>b(D,T).pipe(J.retry({while:(E)=>E._tag==="NotAcquired",schedule:I}),J.catchTag("NotAcquired",()=>J.fail(new Z({key:T})))),i=(D)=>J.gen(function*(){let T=yield*_.readFileString(D.metaPath).pipe(J.catch((P)=>{if(K(P))return J.die(new z({detail:"metadata missing"}));return J.die(P)}));if((yield*J.try({try:()=>q(T),catch:(P)=>new z({detail:"metadata invalid",cause:P})}).pipe(J.orDie)).token!==D.token)return yield*J.die(new z({detail:"token mismatch"}));yield*l(D.lockDir)}),k0=J.fn("EffectFlock.acquire")(function*(D,T){let E=T??V;yield*Z0(E);let P=I0.join(E,C0.fast(D)+".lock"),h=yield*J.acquireRelease(U0(P,D),($0)=>i($0));yield*_.utimes(h.heartbeatPath,new Date,new Date).pipe(J.ignore,J.repeat(C.spaced(W)),J.forkScoped)}),B2=p0.dual((D)=>J.isEffect(D[0]),(D,T,E)=>J.scoped(J.gen(function*(){return yield*k0(T,E),yield*D})));return N.of({acquire:k0,withLock:B2})})),Q0.defaultLayer=Q0.layer.pipe(g.provide(f.defaultLayer),g.provide(s.layer))})(B0||={});class V0 extends w.TaggedErrorClass()("NpmInstallFailedError",{add:w.Array(w.String).pipe(w.optional),dir:w.String,cause:w.optional(w.Defect)}){}class z0 extends R0.Service()("@qitqode/Npm"){}var c0=process.platform==="win32"?new Set(["<",">",":",'"',"|","?","*"]):void 0;function t0(Z){if(!c0)return Z;return Array.from(Z,(Q)=>c0.has(Q)||Q.charCodeAt(0)<32?"_":Q).join("")}var d0=(Z,Q)=>{let z;try{let $=typeof Bun<"u"?import.meta.resolve(Z,Q):import.meta.resolve(Q);z=L.some($)}catch{z=L.none()}return{directory:Q,entrypoint:z}},e0=g.effect(z0,J.gen(function*(){let Z=yield*f.Service,Q=yield*s.Service,z=yield*s0.FileSystem,$=yield*B0.Service,X=(H)=>k.join(Q.cache,"packages",t0(H)),Y=(H)=>J.gen(function*(){yield*$.acquire(`npm-install:${H.dir}`);let{Arborist:q}=yield*J.promise(()=>import("./chunk-gb00fh4z.js").then((m)=>X0(m.default,1))),R=new q({path:H.dir,binLinks:!0,progress:!1,savePrefix:"",ignoreScripts:!0});return yield*J.tryPromise({try:()=>R.reify({add:H?.add||[],save:!0,saveType:"prod"}),catch:(N)=>new V0({cause:N,add:H?.add,dir:H.dir})})}).pipe(J.withSpan("Npm.reify",{attributes:H})),U=J.fn("Npm.outdated")(function*(H,q){let R=yield*J.tryPromise({try:()=>fetch(`https://registry.npmjs.org/${H}`),catch:()=>{return}}).pipe(J.orElseSucceed(()=>{return}));if(!R||!R.ok)return!1;let A=(yield*J.tryPromise({try:()=>R.json(),catch:()=>{return}}).pipe(J.orElseSucceed(()=>{return})))?.["dist-tags"]?.latest;if(!A)return!1;if(/[\s^~*xX<>|=]/.test(q))return!b0.default.satisfies(A,q);return b0.default.lt(q,A)}),G=J.fn("Npm.add")(function*(H){let q=X(H),R=(()=>{try{return r0.default(H).name??H}catch{return H}})();if(yield*Z.existsSafe(q))return d0(R,k.join(q,"node_modules",R));let A=(yield*Y({dir:q,add:[H]})).edgesOut.values().next().value?.to;if(!A)return yield*new V0({add:[H],dir:q});return d0(A.name,A.path)},J.scoped),W=J.fn("Npm.install")(function*(H,q){if(!(yield*Z.access(H,{writable:!0}).pipe(J.as(!0),J.orElseSucceed(()=>!1))))return;let N=q?.add.map((A)=>[A.name,A.version].filter(Boolean).join("@"))??[];if(yield*J.gen(function*(){if(!(yield*Z.existsSafe(k.join(H,"node_modules"))))return yield*Y({add:N,dir:H}),!0;return!1}).pipe(J.withSpan("Npm.checkNodeModules")))return;yield*J.gen(function*(){let A=yield*Z.readJson(k.join(H,"package.json")).pipe(J.orElseSucceed(()=>({}))),O=yield*Z.readJson(k.join(H,"package-lock.json")).pipe(J.orElseSucceed(()=>({}))),K=A,y=O,v=new Set([...Object.keys(K?.dependencies||{}),...Object.keys(K?.devDependencies||{}),...Object.keys(K?.peerDependencies||{}),...Object.keys(K?.optionalDependencies||{}),...(q?.add||[]).map((V)=>V.name)]),j=y?.packages?.[""]||{},_=new Set([...Object.keys(j?.dependencies||{}),...Object.keys(j?.devDependencies||{}),...Object.keys(j?.peerDependencies||{}),...Object.keys(j?.optionalDependencies||{})]);for(let V of v)if(!_.has(V)){yield*Y({dir:H,add:N});return}}).pipe(J.withSpan("Npm.checkDirty"));return},J.scoped),I=J.fn("Npm.which")(function*(H){let q=X(H),R=k.join(q,"node_modules",".bin"),N=J.fnUntraced(function*(){let A=yield*z.readDirectory(R).pipe(J.catch(()=>J.succeed([])));if(A.length===0)return L.none();if(A.length===1)return L.some(A[0]);let O=yield*Z.readJson(k.join(q,"node_modules",H,"package.json")).pipe(J.option);if(L.isSome(O)){let K=O.value;if(K?.bin){let y=H.startsWith("@")?H.split("/")[1]:H,v=K.bin;if(typeof v==="string")return L.some(y);let j=Object.keys(v);if(j.length===1)return L.some(j[0]);return v[y]?L.some(y):L.some(j[0])}}return L.some(A[0])});return yield*J.gen(function*(){let A=yield*N();if(L.isSome(A))return L.some(k.join(R,A.value));yield*z.remove(k.join(q,"package-lock.json")).pipe(J.orElseSucceed(()=>{})),yield*G(H);let O=yield*N();if(L.isNone(O))return L.none();return L.some(k.join(R,O.value))}).pipe(J.scoped,J.orElseSucceed(()=>L.none()))});return z0.of({add:G,install:W,outdated:U,which:I})})),Z2=e0.pipe(g.provide(B0.layer),g.provide(f.layer),g.provide(s.layer),g.provide(n0.layer)),{runPromise:A0}=h0(z0,Z2);async function N2(...Z){return A0((Q)=>Q.install(...Z))}async function F2(...Z){let Q=await A0((z)=>z.add(...Z));return{directory:Q.directory,entrypoint:L.getOrUndefined(Q.entrypoint)}}async function K2(...Z){return A0((Q)=>Q.outdated(...Z))}async function w2(...Z){let Q=await A0((z)=>z.which(...Z));return L.getOrUndefined(Q)}var Q2=X0(o0(),1),D0=X0(a0(),1);import u from"path";import{fileURLToPath as _0,pathToFileURL as n}from"url";var O2=["opencode-openai-codex-auth","opencode-copilot-auth"];function _Z(Z){return O2.some((Q)=>Z.includes(Q))}function z2(Z){try{return Q2.default(Z)}catch{}}function NZ(Z){let Q=z2(Z);if(Q?.type==="alias"&&!Q.name){let z=Q.subSpec;if(z?.name){let $=!z.rawSpec||z.rawSpec==="*"?"latest":z.rawSpec;return{pkg:z.name,version:$}}}if(!Q?.name)return{pkg:Z,version:""};if(Q.raw===Q.name)return{pkg:Q.name,version:"latest"};return{pkg:Q.name,version:Q.rawSpec}}var b2=["index.ts","index.tsx","index.js","index.mjs","index.cjs"];function X2(Z){if(J2(Z))return"file";return"npm"}function L2(Z,Q){if(Z.startsWith("file://"))return _0(Z);if(u.isAbsolute(Z))return Z;return u.resolve(Q,Z)}function Y2(Z){return u.isAbsolute(Z)||/^[A-Za-z]:[\\/]/.test(Z)}function T2(Z){if(typeof Z==="string")return Z;if(!a(Z))return;for(let Q of["import","default"]){let z=Z[Q];if(typeof z==="string")return z}return}function y2(Z){let Q=Z.json.main;if(typeof Q!=="string")return;let z=Q.trim();if(!z)return;return z}function H2(Z,Q,z,$){let X=L2(Q,$.dir),Y=S.resolve($.dir),U=S.resolve(X);if(!S.contains(Y,U))throw Error(`Plugin ${Z} resolved ${z} entry outside plugin directory`);return U}function $2(Z,Q,z,$){return n(H2(Z,Q,z,$)).href}function P2(Z,Q,z){let $=z.json.exports;if(a($)){let Y=T2($[`./${Q}`]);if(Y)return $2(Z,Y,Q,z)}if(Q!=="server")return;let X=y2(z);if(!X)return;return $2(Z,X,Q,z)}function S2(Z){if(Z.startsWith("file://"))return _0(Z);if(u.isAbsolute(Z))return Z}async function L0(Z){for(let Q of b2){let z=u.join(Z,Q);if(await S.exists(z))return z}}async function m2(Z){let Q=S2(Z);if(!Q)return;if(!(await S.statAsync(Q))?.isDirectory())return;return Q}async function E2(Z,Q,z,$){let X=X2(Z),Y=$??(X==="npm"?await o(Q):await o(Q).catch(()=>{return}));if(!Y)return Q;let U=P2(Z,z,Y);if(U)return U;let G=await m2(Q);if(z==="tui"){if(X==="file"&&G){let W=await L0(G);if(W)return n(W).href}if(X==="npm")return;if(G)return;return Q}if(G&&a(Y.json.exports)){if(X==="file"){let W=await L0(G);if(W)return n(W).href}return}return Q}function J2(Z){return Z.startsWith("file://")||Z.startsWith(".")||Y2(Z)}async function v2(Z){let Q=Z.startsWith("file://")?_0(Z):Z,z=u.isAbsolute(Q)||/^[A-Za-z]:[\\/]/.test(Q)?Q:u.resolve(Q);if(!(await S.statAsync(z))?.isDirectory()){if(Z.startsWith("file://"))return Z;return n(z).href}if(await S.exists(u.join(z,"package.json")))return n(z).href;let X=await L0(z);if(X)return n(X).href;throw Error(`Plugin directory ${z} is missing package.json or index file`)}async function FZ(Z,Q,z){if(!D0.default.valid(Q)||D0.default.major(Q)===0)return;let $=z??await o(Z).catch(()=>{return});if(!$)return;let X=$.json.engines;if(!a(X))return;let Y=X.qitqode??X.opencode;if(typeof Y!=="string")return;if(!D0.default.satisfies(Q,Y))throw Error(`Plugin requires qitqode ${Y} but running ${Q}`)}async function KZ(Z){if(J2(Z))return v2(Z);let Q=z2(Z),z=Q?.name&&Q.raw===Q.name?`${Q.name}@latest`:Z;return(await Y0.add(z)).directory}async function o(Z){let Q=Z.startsWith("file://")?_0(Z):Z,$=(await S.statAsync(Q))?.isDirectory()?Q:u.dirname(Q),X=u.join($,"package.json"),Y=await S.readJson(X);return{dir:$,pkg:X,json:Y}}async function wZ(Z,Q,z){let $=X2(Z),X=$==="npm"?await o(Q):await o(Q).catch(()=>{return}),Y=await E2(Z,Q,z,X);return{spec:Z,source:$,target:Q,pkg:X,entry:Y}}function OZ(Z,Q){let z=Q.json["oc-themes"];if(z===void 0)return[];if(!Array.isArray(z))throw TypeError(`Plugin ${Z} has invalid oc-themes field`);let $=z.map((X)=>{if(typeof X!=="string")throw TypeError(`Plugin ${Z} has invalid oc-themes entry`);let Y=X.trim();if(!Y)throw TypeError(`Plugin ${Z} has empty oc-themes entry`);if(Y.startsWith("file://")||Y2(Y))throw TypeError(`Plugin ${Z} oc-themes entry must be relative: ${X}`);return H2(Z,Y,"oc-themes",Q)});return Array.from(new Set($))}function bZ(Z,Q){if(Z===void 0)return;if(typeof Z!=="string")throw TypeError(`Plugin ${Q} has invalid id type ${typeof Z}`);let z=Z.trim();if(!z)throw TypeError(`Plugin ${Q} has an empty id`);return z}function LZ(Z,Q,z,$="strict"){let X=Z.default;if(!a(X)){if($==="detect")return;throw TypeError(`Plugin ${Q} must default export an object with ${z}()`)}if($==="detect"&&!("id"in X)&&!("server"in X)&&!("tui"in X))return;let Y="server"in X?X.server:void 0,U="tui"in X?X.tui:void 0;if(Y!==void 0&&typeof Y!=="function")throw TypeError(`Plugin ${Q} has invalid server export`);if(U!==void 0&&typeof U!=="function")throw TypeError(`Plugin ${Q} has invalid tui export`);if(Y!==void 0&&U!==void 0)throw TypeError(`Plugin ${Q} must default export either server() or tui(), not both`);if(z==="server"&&Y===void 0)throw TypeError(`Plugin ${Q} must default export an object with server()`);if(z==="tui"&&U===void 0)throw TypeError(`Plugin ${Q} must default export an object with tui()`);return X}async function TZ(Z,Q,z,$,X){if(Z==="file"){if($)return $;throw TypeError(`Path plugin ${Q} must export id`)}if($)return $;let Y=X??await o(z);if(typeof Y.json.name!=="string"||!Y.json.name.trim())throw TypeError(`Plugin package ${Y.pkg} is missing name`);return Y.json.name.trim()}var S0={};i0(S0,{readFile:()=>l2,files:()=>g2,fileInDirectory:()=>f2,directories:()=>k2,claudeCommandDirectories:()=>u2,ConfigPaths:()=>S0});import y0 from"path";var W2=T0.create("ConfigJsonError",p.object({path:p.string(),message:p.string().optional()})),mZ=T0.create("ConfigInvalidError",p.object({path:p.string(),issues:p.custom().optional(),message:p.string().optional()}));var g2=N0("ConfigPaths.projectFiles")(function*(Z,Q,z){return(yield*(yield*f.Service).up({targets:[`${Z}.jsonc`,`${Z}.json`],start:Q,stop:z})).toReversed()}),k2=N0("ConfigPaths.directories")(function*(Z,Q){let z=yield*f.Service;return P0([H0.Path.config,...!r.QITQODE_DISABLE_PROJECT_CONFIG?yield*z.up({targets:[".qitqode"],start:Z,stop:Q}):[],...yield*z.up({targets:[".qitqode"],start:H0.Path.home,stop:H0.Path.home}),...r.QITQODE_CONFIG_DIR?[r.QITQODE_CONFIG_DIR]:[]])}),u2=N0("ConfigPaths.claudeCommandDirectories")(function*(Z,Q){if(r.QITQODE_DISABLE_CLAUDE_CODE_COMMANDS)return[];let z=yield*f.Service;return P0([y0.join(H0.Path.home,".claude"),...!r.QITQODE_DISABLE_PROJECT_CONFIG?yield*z.up({targets:[".claude"],start:Z,stop:Q}):[]])});function f2(Z,Q){return[y0.join(Z,`${Q}.json`),y0.join(Z,`${Q}.jsonc`)]}async function l2(Z){return S.readText(Z).catch((Q)=>{if(Q.code==="ENOENT")return;throw new W2({path:Z},{cause:Q})})}function W0(Z,Q=!1){let z=Z.length,$=0,X="",Y=0,U=16,G=0,W=0,I=0,H=0,q=0;function R(j,_){let V=0,B=0;while(V<j||!_){let M=Z.charCodeAt($);if(M>=48&&M<=57)B=B*16+M-48;else if(M>=65&&M<=70)B=B*16+M-65+10;else if(M>=97&&M<=102)B=B*16+M-97+10;else break;$++,V++}if(V<j)B=-1;return B}function N(j){$=j,X="",Y=0,U=16,q=0}function A(){let j=$;if(Z.charCodeAt($)===48)$++;else{$++;while($<Z.length&&t(Z.charCodeAt($)))$++}if($<Z.length&&Z.charCodeAt($)===46)if($++,$<Z.length&&t(Z.charCodeAt($))){$++;while($<Z.length&&t(Z.charCodeAt($)))$++}else return q=3,Z.substring(j,$);let _=$;if($<Z.length&&(Z.charCodeAt($)===69||Z.charCodeAt($)===101)){if($++,$<Z.length&&Z.charCodeAt($)===43||Z.charCodeAt($)===45)$++;if($<Z.length&&t(Z.charCodeAt($))){$++;while($<Z.length&&t(Z.charCodeAt($)))$++;_=$}else q=3}return Z.substring(j,_)}function O(){let j="",_=$;while(!0){if($>=z){j+=Z.substring(_,$),q=2;break}let V=Z.charCodeAt($);if(V===34){j+=Z.substring(_,$),$++;break}if(V===92){if(j+=Z.substring(_,$),$++,$>=z){q=2;break}switch(Z.charCodeAt($++)){case 34:j+='"';break;case 92:j+="\\";break;case 47:j+="/";break;case 98:j+="\b";break;case 102:j+="\f";break;case 110:j+=`
|
|
2
|
+
import{go as a0}from"./chunk-htz93dsd.js";import{Pq as f0,Rq as l0}from"./chunk-te47zdxd.js";import{Pr as o0}from"./chunk-0dt0bxz6.js";import{Sr as T0}from"./chunk-4cnwn1rh.js";import{Ms as C0,Os as s,Qs as H0,Rs as r,_r as P0}from"./chunk-hdrbyarv.js";import{$s as a,it as n0,ot as f,st as S}from"./chunk-tqj69nh6.js";import{ut as p}from"./chunk-5tray1fw.js";import{Yy as u0}from"./chunk-gagtmjmp.js";import{OE as g,RM as w,YN as s0,Zz as p0,cH as N0,hF as C,pH as J,uB as L,zC as R0}from"./chunk-zs8kqdsf.js";import{BO as X0,DO as i0,FO as _2}from"./chunk-7xm75w1e.js";function h0(Z,Q){let z,$=()=>z??=u0.make(g.provideMerge(Q,f0.layer),{memoMap:l0});return{runSync:(X)=>$().runSync(Z.use(X)),runPromiseExit:(X,Y)=>$().runPromiseExit(Z.use(X),Y),runPromise:(X,Y)=>$().runPromise(Z.use(X),Y),runFork:(X)=>$().runFork(Z.use(X)),runCallback:(X)=>$().runCallback(Z.use(X))}}var Y0={};i0(Y0,{which:()=>w2,sanitize:()=>t0,outdated:()=>K2,layer:()=>e0,install:()=>N2,defaultLayer:()=>Z2,add:()=>F2,Service:()=>z0,Npm:()=>Y0,InstallFailedError:()=>V0});var r0=X0(o0(),1),b0=X0(a0(),1);import k from"path";import I0 from"path";import A2 from"os";import{randomUUID as D2}from"crypto";var B0;((Q0)=>{class Z extends w.TaggedErrorClass()("LockTimeoutError",{key:w.String}){}Q0.LockTimeoutError=Z;class Q extends w.TaggedErrorClass()("LockCompromisedError",{detail:w.String}){}Q0.LockCompromisedError=Q;class z extends w.TaggedErrorClass()("ReleaseError",{detail:w.String,cause:w.optional(w.Defect)}){get message(){return this.detail}}class $ extends w.TaggedErrorClass()("NotAcquired",{}){}let X=60000,Y=300000,U=100,G=2000,W=Math.max(100,Math.floor(X/3)),I=C.exponential(U,1.7).pipe(C.either(C.spaced(G)),C.jittered,C.while((j)=>j.elapsed<Y)),H=w.fromJsonString(w.Struct({token:w.String,pid:w.Number,hostname:w.String,createdAt:w.String})),q=w.decodeUnknownSync(H),R=w.encodeSync(H);class N extends R0.Service()("EffectFlock"){}Q0.Service=N;function A(){return performance.timeOrigin+performance.now()}let O=(j)=>L.getOrElse(j.mtime,()=>new Date(0)).getTime(),K=(j)=>j.reason._tag==="NotFound"||j.reason._tag==="Unknown";Q0.layer=g.effect(N,J.gen(function*(){let j=yield*s.Service,_=yield*f.Service,V=I0.join(j.state,"locks"),B=A2.hostname(),M=new Set,m=(D)=>_.stat(D).pipe(J.catchIf(K,()=>J.void),J.orDie),l=(D)=>_.remove(D,{recursive:!0}).pipe(J.ignore),d=(D)=>_.makeDirectory(D,{mode:448}).pipe(J.as(!0),J.catchIf((T)=>T.reason._tag==="AlreadyExists",()=>J.succeed(!1)),J.orDie),M0=(D,T,E,P)=>_.writeFileString(D,T,{flag:"wx"}).pipe(J.catch(()=>J.gen(function*(){return yield*l(E),yield*new Q({detail:P})}))),w0=J.fnUntraced(function*(D){let T=yield*m(D);if(T&&A()-O(T)>X)yield*l(D);return!1}),Z0=J.fnUntraced(function*(D){if(M.has(D))return;yield*_.makeDirectory(D,{recursive:!0}).pipe(J.orDie),M.add(D)}),F=J.fnUntraced(function*(D,T,E){let P=A(),h=yield*m(T);if(h)return P-O(h)>X;let $0=yield*m(E);if($0)return P-O($0)>X;let q0=yield*m(D);if(!q0)return!1;return P-O(q0)>X}),b=(D,T)=>J.gen(function*(){let E=D2(),P=I0.join(D,"meta.json"),h=I0.join(D,"heartbeat");if(!(yield*d(D))){if(!(yield*F(D,h,P)))return yield*new $;let O0=D+".breaker";if(!(yield*_.makeDirectory(O0,{mode:448}).pipe(J.as(!0),J.catchIf((V2)=>V2.reason._tag==="AlreadyExists",()=>w0(O0)),J.catchIf(K,()=>J.succeed(!1)),J.orDie)))return yield*new $;if(!(yield*J.gen(function*(){if(!(yield*F(D,h,P)))return!1;return yield*l(D),yield*d(D)}).pipe(J.ensuring(l(O0)))))return yield*new $}yield*M0(h,"",D,"heartbeat already existed");let q0=R({token:E,pid:process.pid,hostname:B,createdAt:new Date().toISOString()});return yield*M0(P,q0,D,"meta.json already existed"),{token:E,metaPath:P,heartbeatPath:h,lockDir:D}}).pipe(J.withSpan("EffectFlock.tryAcquire",{attributes:{key:T}})),U0=(D,T)=>b(D,T).pipe(J.retry({while:(E)=>E._tag==="NotAcquired",schedule:I}),J.catchTag("NotAcquired",()=>J.fail(new Z({key:T})))),i=(D)=>J.gen(function*(){let T=yield*_.readFileString(D.metaPath).pipe(J.catch((P)=>{if(K(P))return J.die(new z({detail:"metadata missing"}));return J.die(P)}));if((yield*J.try({try:()=>q(T),catch:(P)=>new z({detail:"metadata invalid",cause:P})}).pipe(J.orDie)).token!==D.token)return yield*J.die(new z({detail:"token mismatch"}));yield*l(D.lockDir)}),k0=J.fn("EffectFlock.acquire")(function*(D,T){let E=T??V;yield*Z0(E);let P=I0.join(E,C0.fast(D)+".lock"),h=yield*J.acquireRelease(U0(P,D),($0)=>i($0));yield*_.utimes(h.heartbeatPath,new Date,new Date).pipe(J.ignore,J.repeat(C.spaced(W)),J.forkScoped)}),B2=p0.dual((D)=>J.isEffect(D[0]),(D,T,E)=>J.scoped(J.gen(function*(){return yield*k0(T,E),yield*D})));return N.of({acquire:k0,withLock:B2})})),Q0.defaultLayer=Q0.layer.pipe(g.provide(f.defaultLayer),g.provide(s.layer))})(B0||={});class V0 extends w.TaggedErrorClass()("NpmInstallFailedError",{add:w.Array(w.String).pipe(w.optional),dir:w.String,cause:w.optional(w.Defect)}){}class z0 extends R0.Service()("@qitqode/Npm"){}var c0=process.platform==="win32"?new Set(["<",">",":",'"',"|","?","*"]):void 0;function t0(Z){if(!c0)return Z;return Array.from(Z,(Q)=>c0.has(Q)||Q.charCodeAt(0)<32?"_":Q).join("")}var d0=(Z,Q)=>{let z;try{let $=typeof Bun<"u"?import.meta.resolve(Z,Q):import.meta.resolve(Q);z=L.some($)}catch{z=L.none()}return{directory:Q,entrypoint:z}},e0=g.effect(z0,J.gen(function*(){let Z=yield*f.Service,Q=yield*s.Service,z=yield*s0.FileSystem,$=yield*B0.Service,X=(H)=>k.join(Q.cache,"packages",t0(H)),Y=(H)=>J.gen(function*(){yield*$.acquire(`npm-install:${H.dir}`);let{Arborist:q}=yield*J.promise(()=>import("./chunk-gb00fh4z.js").then((m)=>X0(m.default,1))),R=new q({path:H.dir,binLinks:!0,progress:!1,savePrefix:"",ignoreScripts:!0});return yield*J.tryPromise({try:()=>R.reify({add:H?.add||[],save:!0,saveType:"prod"}),catch:(N)=>new V0({cause:N,add:H?.add,dir:H.dir})})}).pipe(J.withSpan("Npm.reify",{attributes:H})),U=J.fn("Npm.outdated")(function*(H,q){let R=yield*J.tryPromise({try:()=>fetch(`https://registry.npmjs.org/${H}`),catch:()=>{return}}).pipe(J.orElseSucceed(()=>{return}));if(!R||!R.ok)return!1;let A=(yield*J.tryPromise({try:()=>R.json(),catch:()=>{return}}).pipe(J.orElseSucceed(()=>{return})))?.["dist-tags"]?.latest;if(!A)return!1;if(/[\s^~*xX<>|=]/.test(q))return!b0.default.satisfies(A,q);return b0.default.lt(q,A)}),G=J.fn("Npm.add")(function*(H){let q=X(H),R=(()=>{try{return r0.default(H).name??H}catch{return H}})();if(yield*Z.existsSafe(q))return d0(R,k.join(q,"node_modules",R));let A=(yield*Y({dir:q,add:[H]})).edgesOut.values().next().value?.to;if(!A)return yield*new V0({add:[H],dir:q});return d0(A.name,A.path)},J.scoped),W=J.fn("Npm.install")(function*(H,q){if(!(yield*Z.access(H,{writable:!0}).pipe(J.as(!0),J.orElseSucceed(()=>!1))))return;let N=q?.add.map((A)=>[A.name,A.version].filter(Boolean).join("@"))??[];if(yield*J.gen(function*(){if(!(yield*Z.existsSafe(k.join(H,"node_modules"))))return yield*Y({add:N,dir:H}),!0;return!1}).pipe(J.withSpan("Npm.checkNodeModules")))return;yield*J.gen(function*(){let A=yield*Z.readJson(k.join(H,"package.json")).pipe(J.orElseSucceed(()=>({}))),O=yield*Z.readJson(k.join(H,"package-lock.json")).pipe(J.orElseSucceed(()=>({}))),K=A,y=O,v=new Set([...Object.keys(K?.dependencies||{}),...Object.keys(K?.devDependencies||{}),...Object.keys(K?.peerDependencies||{}),...Object.keys(K?.optionalDependencies||{}),...(q?.add||[]).map((V)=>V.name)]),j=y?.packages?.[""]||{},_=new Set([...Object.keys(j?.dependencies||{}),...Object.keys(j?.devDependencies||{}),...Object.keys(j?.peerDependencies||{}),...Object.keys(j?.optionalDependencies||{})]);for(let V of v)if(!_.has(V)){yield*Y({dir:H,add:N});return}}).pipe(J.withSpan("Npm.checkDirty"));return},J.scoped),I=J.fn("Npm.which")(function*(H){let q=X(H),R=k.join(q,"node_modules",".bin"),N=J.fnUntraced(function*(){let A=yield*z.readDirectory(R).pipe(J.catch(()=>J.succeed([])));if(A.length===0)return L.none();if(A.length===1)return L.some(A[0]);let O=yield*Z.readJson(k.join(q,"node_modules",H,"package.json")).pipe(J.option);if(L.isSome(O)){let K=O.value;if(K?.bin){let y=H.startsWith("@")?H.split("/")[1]:H,v=K.bin;if(typeof v==="string")return L.some(y);let j=Object.keys(v);if(j.length===1)return L.some(j[0]);return v[y]?L.some(y):L.some(j[0])}}return L.some(A[0])});return yield*J.gen(function*(){let A=yield*N();if(L.isSome(A))return L.some(k.join(R,A.value));yield*z.remove(k.join(q,"package-lock.json")).pipe(J.orElseSucceed(()=>{})),yield*G(H);let O=yield*N();if(L.isNone(O))return L.none();return L.some(k.join(R,O.value))}).pipe(J.scoped,J.orElseSucceed(()=>L.none()))});return z0.of({add:G,install:W,outdated:U,which:I})})),Z2=e0.pipe(g.provide(B0.layer),g.provide(f.layer),g.provide(s.layer),g.provide(n0.layer)),{runPromise:A0}=h0(z0,Z2);async function N2(...Z){return A0((Q)=>Q.install(...Z))}async function F2(...Z){let Q=await A0((z)=>z.add(...Z));return{directory:Q.directory,entrypoint:L.getOrUndefined(Q.entrypoint)}}async function K2(...Z){return A0((Q)=>Q.outdated(...Z))}async function w2(...Z){let Q=await A0((z)=>z.which(...Z));return L.getOrUndefined(Q)}var Q2=X0(o0(),1),D0=X0(a0(),1);import u from"path";import{fileURLToPath as _0,pathToFileURL as n}from"url";var O2=["opencode-openai-codex-auth","opencode-copilot-auth"];function _Z(Z){return O2.some((Q)=>Z.includes(Q))}function z2(Z){try{return Q2.default(Z)}catch{}}function NZ(Z){let Q=z2(Z);if(Q?.type==="alias"&&!Q.name){let z=Q.subSpec;if(z?.name){let $=!z.rawSpec||z.rawSpec==="*"?"latest":z.rawSpec;return{pkg:z.name,version:$}}}if(!Q?.name)return{pkg:Z,version:""};if(Q.raw===Q.name)return{pkg:Q.name,version:"latest"};return{pkg:Q.name,version:Q.rawSpec}}var b2=["index.ts","index.tsx","index.js","index.mjs","index.cjs"];function X2(Z){if(J2(Z))return"file";return"npm"}function L2(Z,Q){if(Z.startsWith("file://"))return _0(Z);if(u.isAbsolute(Z))return Z;return u.resolve(Q,Z)}function Y2(Z){return u.isAbsolute(Z)||/^[A-Za-z]:[\\/]/.test(Z)}function T2(Z){if(typeof Z==="string")return Z;if(!a(Z))return;for(let Q of["import","default"]){let z=Z[Q];if(typeof z==="string")return z}return}function y2(Z){let Q=Z.json.main;if(typeof Q!=="string")return;let z=Q.trim();if(!z)return;return z}function H2(Z,Q,z,$){let X=L2(Q,$.dir),Y=S.resolve($.dir),U=S.resolve(X);if(!S.contains(Y,U))throw Error(`Plugin ${Z} resolved ${z} entry outside plugin directory`);return U}function $2(Z,Q,z,$){return n(H2(Z,Q,z,$)).href}function P2(Z,Q,z){let $=z.json.exports;if(a($)){let Y=T2($[`./${Q}`]);if(Y)return $2(Z,Y,Q,z)}if(Q!=="server")return;let X=y2(z);if(!X)return;return $2(Z,X,Q,z)}function S2(Z){if(Z.startsWith("file://"))return _0(Z);if(u.isAbsolute(Z))return Z}async function L0(Z){for(let Q of b2){let z=u.join(Z,Q);if(await S.exists(z))return z}}async function m2(Z){let Q=S2(Z);if(!Q)return;if(!(await S.statAsync(Q))?.isDirectory())return;return Q}async function E2(Z,Q,z,$){let X=X2(Z),Y=$??(X==="npm"?await o(Q):await o(Q).catch(()=>{return}));if(!Y)return Q;let U=P2(Z,z,Y);if(U)return U;let G=await m2(Q);if(z==="tui"){if(X==="file"&&G){let W=await L0(G);if(W)return n(W).href}if(X==="npm")return;if(G)return;return Q}if(G&&a(Y.json.exports)){if(X==="file"){let W=await L0(G);if(W)return n(W).href}return}return Q}function J2(Z){return Z.startsWith("file://")||Z.startsWith(".")||Y2(Z)}async function v2(Z){let Q=Z.startsWith("file://")?_0(Z):Z,z=u.isAbsolute(Q)||/^[A-Za-z]:[\\/]/.test(Q)?Q:u.resolve(Q);if(!(await S.statAsync(z))?.isDirectory()){if(Z.startsWith("file://"))return Z;return n(z).href}if(await S.exists(u.join(z,"package.json")))return n(z).href;let X=await L0(z);if(X)return n(X).href;throw Error(`Plugin directory ${z} is missing package.json or index file`)}async function FZ(Z,Q,z){if(!D0.default.valid(Q)||D0.default.major(Q)===0)return;let $=z??await o(Z).catch(()=>{return});if(!$)return;let X=$.json.engines;if(!a(X))return;let Y=X.qitqode??X.opencode;if(typeof Y!=="string")return;if(!D0.default.satisfies(Q,Y))throw Error(`Plugin requires qitqode ${Y} but running ${Q}`)}async function KZ(Z){if(J2(Z))return v2(Z);let Q=z2(Z),z=Q?.name&&Q.raw===Q.name?`${Q.name}@latest`:Z;return(await Y0.add(z)).directory}async function o(Z){let Q=Z.startsWith("file://")?_0(Z):Z,$=(await S.statAsync(Q))?.isDirectory()?Q:u.dirname(Q),X=u.join($,"package.json"),Y=await S.readJson(X);return{dir:$,pkg:X,json:Y}}async function wZ(Z,Q,z){let $=X2(Z),X=$==="npm"?await o(Q):await o(Q).catch(()=>{return}),Y=await E2(Z,Q,z,X);return{spec:Z,source:$,target:Q,pkg:X,entry:Y}}function OZ(Z,Q){let z=Q.json["oc-themes"];if(z===void 0)return[];if(!Array.isArray(z))throw TypeError(`Plugin ${Z} has invalid oc-themes field`);let $=z.map((X)=>{if(typeof X!=="string")throw TypeError(`Plugin ${Z} has invalid oc-themes entry`);let Y=X.trim();if(!Y)throw TypeError(`Plugin ${Z} has empty oc-themes entry`);if(Y.startsWith("file://")||Y2(Y))throw TypeError(`Plugin ${Z} oc-themes entry must be relative: ${X}`);return H2(Z,Y,"oc-themes",Q)});return Array.from(new Set($))}function bZ(Z,Q){if(Z===void 0)return;if(typeof Z!=="string")throw TypeError(`Plugin ${Q} has invalid id type ${typeof Z}`);let z=Z.trim();if(!z)throw TypeError(`Plugin ${Q} has an empty id`);return z}function LZ(Z,Q,z,$="strict"){let X=Z.default;if(!a(X)){if($==="detect")return;throw TypeError(`Plugin ${Q} must default export an object with ${z}()`)}if($==="detect"&&!("id"in X)&&!("server"in X)&&!("tui"in X))return;let Y="server"in X?X.server:void 0,U="tui"in X?X.tui:void 0;if(Y!==void 0&&typeof Y!=="function")throw TypeError(`Plugin ${Q} has invalid server export`);if(U!==void 0&&typeof U!=="function")throw TypeError(`Plugin ${Q} has invalid tui export`);if(Y!==void 0&&U!==void 0)throw TypeError(`Plugin ${Q} must default export either server() or tui(), not both`);if(z==="server"&&Y===void 0)throw TypeError(`Plugin ${Q} must default export an object with server()`);if(z==="tui"&&U===void 0)throw TypeError(`Plugin ${Q} must default export an object with tui()`);return X}async function TZ(Z,Q,z,$,X){if(Z==="file"){if($)return $;throw TypeError(`Path plugin ${Q} must export id`)}if($)return $;let Y=X??await o(z);if(typeof Y.json.name!=="string"||!Y.json.name.trim())throw TypeError(`Plugin package ${Y.pkg} is missing name`);return Y.json.name.trim()}var S0={};i0(S0,{readFile:()=>l2,files:()=>g2,fileInDirectory:()=>f2,directories:()=>k2,claudeCommandDirectories:()=>u2,ConfigPaths:()=>S0});import y0 from"path";var W2=T0.create("ConfigJsonError",p.object({path:p.string(),message:p.string().optional()})),mZ=T0.create("ConfigInvalidError",p.object({path:p.string(),issues:p.custom().optional(),message:p.string().optional()}));var g2=N0("ConfigPaths.projectFiles")(function*(Z,Q,z){return(yield*(yield*f.Service).up({targets:[`${Z}.jsonc`,`${Z}.json`],start:Q,stop:z})).toReversed()}),k2=N0("ConfigPaths.directories")(function*(Z,Q){let z=yield*f.Service;return P0([H0.Path.config,...!r.QITQODE_DISABLE_PROJECT_CONFIG?yield*z.up({targets:[".qitqode"],start:Z,stop:Q}):[],...yield*z.up({targets:[".qitqode"],start:H0.Path.home,stop:H0.Path.home}),...r.QITQODE_CONFIG_DIR?[r.QITQODE_CONFIG_DIR]:[]])}),u2=N0("ConfigPaths.claudeCommandDirectories")(function*(Z,Q){if(r.QITQODE_DISABLE_CLAUDE_CODE_COMMANDS)return[];let z=yield*f.Service;return P0([y0.join(H0.Path.home,".claude"),...!r.QITQODE_DISABLE_PROJECT_CONFIG?yield*z.up({targets:[".claude"],start:Z,stop:Q}):[]])});function f2(Z,Q){return[y0.join(Z,`${Q}.json`),y0.join(Z,`${Q}.jsonc`)]}async function l2(Z){return S.readText(Z).catch((Q)=>{if(Q.code==="ENOENT")return;throw new W2({path:Z},{cause:Q})})}function W0(Z,Q=!1){let z=Z.length,$=0,X="",Y=0,U=16,G=0,W=0,I=0,H=0,q=0;function R(j,_){let V=0,B=0;while(V<j||!_){let M=Z.charCodeAt($);if(M>=48&&M<=57)B=B*16+M-48;else if(M>=65&&M<=70)B=B*16+M-65+10;else if(M>=97&&M<=102)B=B*16+M-97+10;else break;$++,V++}if(V<j)B=-1;return B}function N(j){$=j,X="",Y=0,U=16,q=0}function A(){let j=$;if(Z.charCodeAt($)===48)$++;else{$++;while($<Z.length&&t(Z.charCodeAt($)))$++}if($<Z.length&&Z.charCodeAt($)===46)if($++,$<Z.length&&t(Z.charCodeAt($))){$++;while($<Z.length&&t(Z.charCodeAt($)))$++}else return q=3,Z.substring(j,$);let _=$;if($<Z.length&&(Z.charCodeAt($)===69||Z.charCodeAt($)===101)){if($++,$<Z.length&&Z.charCodeAt($)===43||Z.charCodeAt($)===45)$++;if($<Z.length&&t(Z.charCodeAt($))){$++;while($<Z.length&&t(Z.charCodeAt($)))$++;_=$}else q=3}return Z.substring(j,_)}function O(){let j="",_=$;while(!0){if($>=z){j+=Z.substring(_,$),q=2;break}let V=Z.charCodeAt($);if(V===34){j+=Z.substring(_,$),$++;break}if(V===92){if(j+=Z.substring(_,$),$++,$>=z){q=2;break}switch(Z.charCodeAt($++)){case 34:j+='"';break;case 92:j+="\\";break;case 47:j+="/";break;case 98:j+="\b";break;case 102:j+="\f";break;case 110:j+=`
|
|
3
3
|
`;break;case 114:j+="\r";break;case 116:j+="\t";break;case 117:let M=R(4,!0);if(M>=0)j+=String.fromCharCode(M);else q=4;break;default:q=5}_=$;continue}if(V>=0&&V<=31)if(J0(V)){j+=Z.substring(_,$),q=2;break}else q=6;$++}return j}function K(){if(X="",q=0,Y=$,W=G,H=I,$>=z)return Y=z,U=17;let j=Z.charCodeAt($);if(m0(j)){do $++,X+=String.fromCharCode(j),j=Z.charCodeAt($);while(m0(j));return U=15}if(J0(j)){if($++,X+=String.fromCharCode(j),j===13&&Z.charCodeAt($)===10)$++,X+=`
|
|
4
4
|
`;return G++,I=$,U=14}switch(j){case 123:return $++,U=1;case 125:return $++,U=2;case 91:return $++,U=3;case 93:return $++,U=4;case 58:return $++,U=6;case 44:return $++,U=5;case 34:return $++,X=O(),U=10;case 47:let _=$-1;if(Z.charCodeAt($+1)===47){$+=2;while($<z){if(J0(Z.charCodeAt($)))break;$++}return X=Z.substring(_,$),U=12}if(Z.charCodeAt($+1)===42){$+=2;let V=z-1,B=!1;while($<V){let M=Z.charCodeAt($);if(M===42&&Z.charCodeAt($+1)===47){$+=2,B=!0;break}if($++,J0(M)){if(M===13&&Z.charCodeAt($)===10)$++;G++,I=$}}if(!B)$++,q=1;return X=Z.substring(_,$),U=13}return X+=String.fromCharCode(j),$++,U=16;case 45:if(X+=String.fromCharCode(j),$++,$===z||!t(Z.charCodeAt($)))return U=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return X+=A(),U=11;default:while($<z&&y(j))$++,j=Z.charCodeAt($);if(Y!==$){switch(X=Z.substring(Y,$),X){case"true":return U=8;case"false":return U=9;case"null":return U=7}return U=16}return X+=String.fromCharCode(j),$++,U=16}}function y(j){if(m0(j)||J0(j))return!1;switch(j){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function v(){let j;do j=K();while(j>=12&&j<=15);return j}return{setPosition:N,getPosition:()=>$,scan:Q?v:K,getToken:()=>U,getTokenValue:()=>X,getTokenOffset:()=>Y,getTokenLength:()=>$-Y,getTokenStartLine:()=>W,getTokenStartCharacter:()=>Y-H,getTokenError:()=>q}}function m0(Z){return Z===32||Z===9}function J0(Z){return Z===10||Z===13}function t(Z){return Z>=48&&Z<=57}var G2;(function(Z){Z[Z.lineFeed=10]="lineFeed",Z[Z.carriageReturn=13]="carriageReturn",Z[Z.space=32]="space",Z[Z._0=48]="_0",Z[Z._1=49]="_1",Z[Z._2=50]="_2",Z[Z._3=51]="_3",Z[Z._4=52]="_4",Z[Z._5=53]="_5",Z[Z._6=54]="_6",Z[Z._7=55]="_7",Z[Z._8=56]="_8",Z[Z._9=57]="_9",Z[Z.a=97]="a",Z[Z.b=98]="b",Z[Z.c=99]="c",Z[Z.d=100]="d",Z[Z.e=101]="e",Z[Z.f=102]="f",Z[Z.g=103]="g",Z[Z.h=104]="h",Z[Z.i=105]="i",Z[Z.j=106]="j",Z[Z.k=107]="k",Z[Z.l=108]="l",Z[Z.m=109]="m",Z[Z.n=110]="n",Z[Z.o=111]="o",Z[Z.p=112]="p",Z[Z.q=113]="q",Z[Z.r=114]="r",Z[Z.s=115]="s",Z[Z.t=116]="t",Z[Z.u=117]="u",Z[Z.v=118]="v",Z[Z.w=119]="w",Z[Z.x=120]="x",Z[Z.y=121]="y",Z[Z.z=122]="z",Z[Z.A=65]="A",Z[Z.B=66]="B",Z[Z.C=67]="C",Z[Z.D=68]="D",Z[Z.E=69]="E",Z[Z.F=70]="F",Z[Z.G=71]="G",Z[Z.H=72]="H",Z[Z.I=73]="I",Z[Z.J=74]="J",Z[Z.K=75]="K",Z[Z.L=76]="L",Z[Z.M=77]="M",Z[Z.N=78]="N",Z[Z.O=79]="O",Z[Z.P=80]="P",Z[Z.Q=81]="Q",Z[Z.R=82]="R",Z[Z.S=83]="S",Z[Z.T=84]="T",Z[Z.U=85]="U",Z[Z.V=86]="V",Z[Z.W=87]="W",Z[Z.X=88]="X",Z[Z.Y=89]="Y",Z[Z.Z=90]="Z",Z[Z.asterisk=42]="asterisk",Z[Z.backslash=92]="backslash",Z[Z.closeBrace=125]="closeBrace",Z[Z.closeBracket=93]="closeBracket",Z[Z.colon=58]="colon",Z[Z.comma=44]="comma",Z[Z.dot=46]="dot",Z[Z.doubleQuote=34]="doubleQuote",Z[Z.minus=45]="minus",Z[Z.openBrace=123]="openBrace",Z[Z.openBracket=91]="openBracket",Z[Z.plus=43]="plus",Z[Z.slash=47]="slash",Z[Z.formFeed=12]="formFeed",Z[Z.tab=9]="tab"})(G2||(G2={}));var x=Array(20).fill(0).map((Z,Q)=>{return" ".repeat(Q)});var E0={" ":{"\n":Array(200).fill(0).map((Z,Q)=>{return`
|
|
5
5
|
`+" ".repeat(Q)}),"\r":Array(200).fill(0).map((Z,Q)=>{return"\r"+" ".repeat(Q)}),"\r\n":Array(200).fill(0).map((Z,Q)=>{return`\r
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Rd as a}from"./chunk-yajd975f.js";import{Sf as d}from"./chunk-
|
|
2
|
+
import{Rd as a}from"./chunk-yajd975f.js";import{Sf as d}from"./chunk-a1g7jr3r.js";import{Vf as i}from"./chunk-rbk8seme.js";import{$l as p,bm as n}from"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import{Dn as f}from"./chunk-bn0h9dny.js";import"./chunk-vcw00k0n.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-hdrbyarv.js";import{bt as m}from"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-7xm75w1e.js";import{spawn as y}from"child_process";import{Database as g}from"bun:sqlite";import{EOL as l}from"os";var b=a({command:"$0 [query]",describe:"open an interactive sqlite3 shell or run a query",builder:(t)=>{return t.positional("query",{type:"string",describe:"SQL query to execute"}).option("format",{type:"string",choices:["json","tsv"],default:"tsv",describe:"Output format"})},handler:async(t)=>{let o=t.query;if(o){let r=new g(n.Path,{readonly:!0});try{let e=r.query(o).all();if(t.format==="json")console.log(JSON.stringify(e,null,2));else if(e.length>0){let s=Object.keys(e[0]);console.log(s.join("\t"));for(let u of e)console.log(s.map((h)=>u[h]).join("\t"))}}catch(e){i.error(m(e)),process.exit(1)}r.close();return}let c=y("sqlite3",[n.Path],{stdio:"inherit"});await new Promise((r)=>c.on("close",r))}}),w=a({command:"path",describe:"print the database path",handler:()=>{console.log(n.Path)}}),q=a({command:"migrate",describe:"migrate JSON data to SQLite (merges with existing data)",handler:async()=>{let t=new g(n.Path),o=process.stderr.isTTY,c=-1;if(o)process.stderr.write("\x1B[?25l");try{let r=await p.run(f({client:t}),{progress:(e)=>{let s=Math.floor(e.current/e.total*100);if(s===c)return;if(c=s,o)process.stderr.write(d(s,`${e.current}/${e.total}`)+" ");else process.stderr.write(`sqlite-migration:${s}${l}`)}});if(o)process.stderr.write(`
|
|
3
3
|
`);if(o)process.stderr.write("\x1B[?25h");else process.stderr.write(`sqlite-migration:done${l}`);if(i.println(`Migration complete: ${r.projects} projects, ${r.sessions} sessions, ${r.messages} messages`),r.errors.length>0)i.println(`${r.errors.length} errors occurred during migration`)}catch(r){if(o)process.stderr.write("\x1B[?25h");i.error(`Migration failed: ${m(r)}`),process.exit(1)}finally{t.close()}}}),v=a({command:"db",describe:"database tools",builder:(t)=>{return t.command(b).command(w).command(q).demandCommand()},handler:()=>{}});export{v as DbCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Vr as X}from"./chunk-
|
|
2
|
+
import{Vr as X}from"./chunk-hdrbyarv.js";function D(j){return j.parserConfiguration({"populate--":!0}).scriptName("qitqode").wrap(100).help("help","show help").alias("help","h").version("version","show version number",X).alias("version","v").option("print-logs",{describe:"print logs to stderr",type:"boolean"}).option("log-level",{describe:"log level",type:"string",choices:["DEBUG","INFO","WARN","ERROR"]}).option("pure",{describe:"run without external plugins",type:"boolean"})}var H={port:{type:"number",describe:"port to listen on",default:0},hostname:{type:"string",describe:"hostname to listen on",default:"127.0.0.1"},mdns:{type:"boolean",describe:"enable mDNS service discovery (defaults hostname to 0.0.0.0)",default:!1},"mdns-domain":{type:"string",describe:"custom domain name for mDNS service (default: qitqode.local)",default:"qitqode.local"},cors:{type:"string",array:!0,describe:"additional domains to allow for CORS",default:[]},"no-auth":{type:"boolean",describe:"allow starting without authentication on non-loopback addresses (DANGEROUS)",default:!1}};function u(j){return j.options(H)}function F(j,z=process.argv){return z.some((B)=>B===j||B.startsWith(`${j}=`))}function P(j,z=process.argv){return F("--port",z)||F("--hostname",z)||F("--mdns",z)||!!j.mdns||j.port!==0||j.hostname!=="127.0.0.1"}function _(j,z,B=process.argv){let J=F("--port",B),Z=F("--hostname",B),$=F("--mdns",B),q=F("--mdns-domain",B),K=$?j.mdns:z?.server?.mdns??j.mdns,M=q?j["mdns-domain"]:z?.server?.mdnsDomain??j["mdns-domain"],N=J?j.port:z?.server?.port??j.port,U=Z?j.hostname:K&&!z?.server?.hostname?"0.0.0.0":z?.server?.hostname??j.hostname,V=z?.server?.cors??[],Y=Array.isArray(j.cors)?j.cors:j.cors?[j.cors]:[],b=[...V,...Y],A=j["no-auth"];return{hostname:U,port:N,mdns:K,mdnsDomain:M,cors:b,noAuth:A}}var k={model:{type:"string",alias:["m"],describe:"model to use in the format of provider/model"},continue:{alias:["c"],describe:"continue the last session",type:"boolean"},session:{alias:["s"],type:"string",describe:"session id to continue"},fork:{type:"boolean",describe:"fork the session when continuing (use with --continue or --session)"},prompt:{type:"string",describe:"prompt to use"},agent:{type:"string",describe:"agent to use"},dark:{type:"boolean",describe:"start in dark theme (overrides saved theme preference for this launch)"},light:{type:"boolean",describe:"start in light theme (overrides saved theme preference for this launch)"},monochrome:{type:"boolean",describe:"start in monochrome accessible rendering \u2014 no color, plain terminal, screen-reader friendly"},headless:{type:"boolean",describe:"headless permissionless mode for AI subagent use \u2014 auto-approves all tool permissions, implies --never-ask"},fullauto:{type:"boolean",describe:"full-auto mode for the interactive TUI \u2014 never asks: starts in build mode, auto-decides questions and auto-approves every tool permission that is not explicitly denied by your config (dangerous!)"},"api-key":{type:"string",describe:"Qortex API key for non-interactive authentication in headless mode (can also be set via $QLEX_API_KEY)"},sso:{type:"boolean",describe:"sign in via SSO device-code flow before starting a headless session \u2014 prints a URL and code, waits for browser approval (requires --headless)"},free:{type:"boolean",describe:"start in Free tier (no cost) \u2014 shorthand for the Free model tier"},default:{type:"boolean",describe:"start in Default tier \u2014 shorthand for the Default model tier"},fast:{type:"boolean",describe:"start in Fast tier \u2014 shorthand for the Fast model tier"},economy:{type:"boolean",describe:"start in Economy tier \u2014 shorthand for the Economy model tier"},power:{type:"boolean",describe:"start in Power tier \u2014 shorthand for the Power model tier"},orchestrated:{type:"boolean",describe:"start in Orchestrated tier \u2014 shorthand for the Orchestrated model tier"}},L=36,W="\x1B[38;5;214m",I="\x1B[0;2m",Q="\x1B[0m";function G(j,z){let B=Math.round(j/100*L),J=`${"\u25A0".repeat(B)}${"\uFF65".repeat(L-B)}`;return`\r${W}${J} ${j.toString().padStart(3)}%${Q} ${I}${z}${Q}`}
|
|
3
3
|
export{D as Mf,H as Nf,u as Of,P as Pf,_ as Qf,k as Rf,G as Sf};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ed as d}from"./chunk-
|
|
2
|
+
import{Ed as d}from"./chunk-n1600mnf.js";import{Rd as f}from"./chunk-yajd975f.js";import{Vf as e}from"./chunk-rbk8seme.js";import{gh as l}from"./chunk-tc18nbmn.js";import"./chunk-481k3dag.js";import"./chunk-vxyy2dp3.js";import"./chunk-yp5bypsp.js";import"./chunk-7hm0c2yg.js";import"./chunk-gj0wt0cy.js";import"./chunk-5hw6xa49.js";import"./chunk-326p5b10.js";import{Cl as u,kk as m}from"./chunk-wefez1gt.js";import"./chunk-ccmbckek.js";import"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import"./chunk-bn0h9dny.js";import"./chunk-mpkvpn2y.js";import"./chunk-9bzhxenb.js";import"./chunk-htz93dsd.js";import"./chunk-vcw00k0n.js";import"./chunk-famryv52.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-4jtxtkj7.js";import"./chunk-ay8emwym.js";import"./chunk-2maqde7w.js";import"./chunk-kj20f048.js";import"./chunk-cqtkxwd8.js";import"./chunk-x9rbv6p6.js";import"./chunk-g5rabwre.js";import"./chunk-jbx3s7nw.js";import"./chunk-15hw2z9t.js";import"./chunk-48ge2ryx.js";import"./chunk-n9xns8by.js";import"./chunk-y9q0hb7b.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-0dt0bxz6.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-0t4324w5.js";import"./chunk-hdrbyarv.js";import"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-dxpj0cxh.js";import"./chunk-zw815d68.js";import"./chunk-7xm75w1e.js";var v=f({command:"usage [sessionID]",describe:"show per-turn token/cost breakdown for a session (debug/verification tool)",builder:(o)=>{return o.positional("sessionID",{describe:"session ID to inspect (default: most recently updated session)",type:"string"}).option("format",{describe:"output format",type:"string",choices:["table","json"],default:"table"}).option("limit",{describe:"number of most recent turns to show (default: all)",type:"number"})},handler:async(o)=>{await d(process.cwd(),async()=>{let a=o.sessionID?m.make(o.sessionID):[...u.list({roots:!1,limit:1})][0]?.id;if(!a)e.error("No sessions found"),process.exit(1);let p=(await l.runPromise(u.Service.use((s)=>s.messages({sessionID:a,agentID:"*"})))).filter((s)=>s.info.role==="assistant").map((s)=>{let t=s.info,c=s.parts.filter((n)=>n.type==="step-finish");return{messageID:t.id,provider:t.providerID,model:t.modelID,finish:t.finish,cost:t.cost??0,tokens:t.tokens??{input:0,output:0,reasoning:0,cache:{read:0,write:0}},steps:c.map((n)=>({cost:n.cost,tokens:n.tokens}))}}),r=o.limit?p.slice(-o.limit):p;if(r.length===0){e.println("No assistant turns found for this session");return}if(o.format==="json"){console.log(JSON.stringify({sessionID:a,turns:r},null,2));return}e.println(`Session ${a} \u2014 ${r.length} turn(s)`),e.println("");for(let s of r){let t=s.tokens,c=t.input+t.cache.read+t.cache.write,n=t.output+t.reasoning;if(e.println(`${s.messageID} ${s.provider}/${s.model} finish=${s.finish??"-"}`),e.println(` tokens input=${t.input} cache.read=${t.cache.read} cache.write=${t.cache.write} output=${t.output} reasoning=${t.reasoning} (in=${c} out=${n})`),e.println(` cost $${s.cost.toFixed(6)}`),s.steps.length>1)e.println(` steps ${s.steps.length}`),s.steps.forEach((i,g)=>{e.println(` [${g}] input=${i.tokens.input} output=${i.tokens.output} cache.read=${i.tokens.cache.read} cache.write=${i.tokens.cache.write} reasoning=${i.tokens.reasoning} cost=$${i.cost.toFixed(6)}`)});e.println("")}let h=r.reduce((s,t)=>s+t.cost,0);e.println(`Total cost for shown turns: $${h.toFixed(6)}`),e.println("(source: Session.getUsage(), same numbers persisted to the message record \u2014 see session.usage log tag)")})}});export{v as UsageCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{O as o}from"./chunk-6p7yg5sr.js";import{P as i}from"./chunk-
|
|
2
|
+
import{O as o}from"./chunk-6p7yg5sr.js";import{P as i}from"./chunk-vrc0h1q7.js";import{Ed as p}from"./chunk-n1600mnf.js";import{Rd as n}from"./chunk-yajd975f.js";import{Vf as B}from"./chunk-rbk8seme.js";import{ag as l}from"./chunk-s08qccxa.js";import"./chunk-xn70ep9n.js";import"./chunk-q6pn67ps.js";import"./chunk-pfyhg0m7.js";import"./chunk-cjww2jmv.js";import"./chunk-nfg7nt13.js";import"./chunk-xvwvd4kq.js";import"./chunk-ff8nb7b3.js";import{gh as g}from"./chunk-tc18nbmn.js";import{Uh as d}from"./chunk-481k3dag.js";import"./chunk-vxyy2dp3.js";import"./chunk-yp5bypsp.js";import"./chunk-7hm0c2yg.js";import"./chunk-gj0wt0cy.js";import"./chunk-5hw6xa49.js";import"./chunk-326p5b10.js";import{rl as f}from"./chunk-wefez1gt.js";import"./chunk-ccmbckek.js";import"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import"./chunk-bn0h9dny.js";import"./chunk-mpkvpn2y.js";import"./chunk-9bzhxenb.js";import"./chunk-htz93dsd.js";import"./chunk-vcw00k0n.js";import{no as D}from"./chunk-famryv52.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-4jtxtkj7.js";import"./chunk-ay8emwym.js";import"./chunk-2maqde7w.js";import"./chunk-kj20f048.js";import"./chunk-cqtkxwd8.js";import"./chunk-x9rbv6p6.js";import"./chunk-g5rabwre.js";import"./chunk-jbx3s7nw.js";import"./chunk-15hw2z9t.js";import"./chunk-48ge2ryx.js";import"./chunk-n9xns8by.js";import"./chunk-y9q0hb7b.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-0dt0bxz6.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-0t4324w5.js";import{Hs as u,Rs as I,_s as x}from"./chunk-hdrbyarv.js";import{st as y}from"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-dxpj0cxh.js";import"./chunk-zw815d68.js";import"./chunk-7xm75w1e.js";import Q from"path";import{pathToFileURL as a}from"url";import{EOL as O}from"os";function $(j){let K=j.state;return{input:K.input,metadata:"metadata"in K?K.metadata:{},part:j}}function C(j){let K=j.description?B.Style.TEXT_DIM+` ${j.description}`+B.Style.TEXT_NORMAL:"";B.println(B.Style.TEXT_NORMAL+j.icon,B.Style.TEXT_NORMAL+j.title+K)}function b(j,K){if(B.empty(),C(j),!K?.trim())return;B.println(K),B.empty()}function c(j){let K=j.state,V="input"in K?K.input:void 0,Y=("title"in K&&K.title?K.title:void 0)||(V&&typeof V==="object"&&Object.keys(V).length>0?JSON.stringify(V):"Unknown");C({icon:"\u2699",title:`${j.tool} ${Y}`})}function t(j){let K=j.path??"",V=`${j.kind} "${j.pattern}"`,Y=K?`in ${T(K)}`:"",H=j.count===void 0?Y:`${Y}${Y?" \xB7 ":""}${j.count} ${j.count===1?"match":"matches"}`;C({icon:"\u2731",title:V,...H&&{description:H}})}function r(j){t({kind:"Glob",pattern:j.input.pattern,path:j.input.path,count:j.metadata.count})}function jj(j){t({kind:"Grep",pattern:j.input.pattern,path:j.input.path,count:j.metadata.matches})}function Bj(j){let K=T(j.input.filePath),V=Object.entries(j.input).filter(([H,S])=>{if(H==="filePath")return!1;return typeof S==="string"||typeof S==="number"||typeof S==="boolean"}),Y=V.length?`[${V.map(([H,S])=>`${H}=${S}`).join(", ")}]`:void 0;C({icon:"\u2192",title:`Read ${K}`,...Y&&{description:Y}})}function Gj(j){b({icon:"\u2190",title:`Write ${T(j.input.filePath)}`},j.part.state.status==="completed"?j.part.state.output:void 0)}function Jj(j){C({icon:"%",title:`WebFetch ${j.input.url}`})}function Kj(j){let K=T(j.input.filePath),V=j.metadata.diff;b({icon:"\u2190",title:`Edit ${K}`},V)}function Mj(j){C({icon:"\u25C7",title:`Exa Code Search "${j.input.query}"`})}function Nj(j){C({icon:"\u25C8",title:`Web Search "${j.input.query}"`})}function k(j){let K=j.part.state.input?.operation??j.part.state.input,V=j.part.state.status,Y=typeof K?.subagent_type==="string"&&K.subagent_type.trim().length>0?K.subagent_type:"unknown",H=u.titlecase(Y),S=typeof K?.description==="string"&&K.description.trim().length>0?K.description:void 0,w=V==="error"?"\u2717":V==="running"?"\u2022":"\u2713",L=S??`${H} Task`;C({icon:w,title:L,description:S?`${H} Agent`:void 0})}function Vj(j){C({icon:"\u2192",title:`Skill "${j.input.name}"`})}function Xj(j){let K=j.part.state.status==="completed"?j.part.state.output?.trim():void 0;b({icon:"$",title:`${j.input.command}`},K)}function T(j){if(!j)return"";if(Q.isAbsolute(j))return Q.relative(process.cwd(),j)||".";return j}var Tj=n({command:"run [message..]",describe:"run qitqode with a message",builder:(j)=>{return j.positional("message",{describe:"message to send",type:"string",array:!0,default:[]}).option("command",{describe:"the command to run, use message for args",type:"string"}).option("continue",{alias:["c"],describe:"continue the last session",type:"boolean"}).option("session",{alias:["s"],describe:"session id to continue",type:"string"}).option("fork",{describe:"fork the session before continuing (requires --continue or --session)",type:"boolean"}).option("share",{type:"boolean",describe:"share the session"}).option("model",{type:"string",alias:["m"],describe:"model to use in the format of provider/model"}).option("agent",{type:"string",describe:"agent to use"}).option("format",{type:"string",choices:["default","json"],default:"default",describe:"format: default (formatted) or json (raw JSON events)"}).option("file",{alias:["f"],type:"string",array:!0,describe:"file(s) to attach to message"}).option("title",{type:"string",describe:"title for the session (uses truncated prompt if no value provided)"}).option("attach",{type:"string",describe:"attach to a running qitqode server (e.g., http://localhost:4096)"}).option("password",{alias:["p"],type:"string",describe:"basic auth password (defaults to QITQODE_SERVER_PASSWORD)"}).option("dir",{type:"string",describe:"directory to run in, path on remote server if attaching"}).option("port",{type:"number",describe:"port for the local server (defaults to random port if no value provided)"}).option("variant",{type:"string",describe:"model variant (provider-specific reasoning effort, e.g., high, max, minimal)"}).option("thinking",{type:"boolean",describe:"show thinking blocks",default:!1}).option("dangerously-skip-permissions",{type:"boolean",describe:"auto-approve permissions that are not explicitly denied (dangerous!)",default:!1})},handler:async(j)=>{let K=[...j.message,...j["--"]||[]].join(" "),V=(()=>{if(!j.dir)return;if(j.attach)return j.dir;try{return process.chdir(j.dir),process.cwd()}catch{B.error("Failed to change directory to "+j.dir),process.exit(1)}})(),Y=[];if(j.file){let M=Array.isArray(j.file)?j.file:[j.file];for(let X of M){let N=Q.resolve(process.cwd(),X);if(!await y.exists(N))B.error(`File not found: ${X}`),process.exit(1);let W=await y.isDir(N)?"application/x-directory":"text/plain";Y.push({type:"file",url:a(N).href,filename:Q.basename(N),mime:W})}}if(!process.stdin.isTTY)K+=`
|
|
3
3
|
`+await Bun.stdin.text();if(K.trim().length===0&&!j.command)B.error("You must provide a message or a command"),process.exit(1);if(j.fork&&!j.continue&&!j.session)B.error("--fork requires --continue or --session"),process.exit(1);let H=[{permission:"question",action:"deny",pattern:"*"},{permission:"plan_enter",action:"deny",pattern:"*"},{permission:"plan_exit",action:"deny",pattern:"*"}];function S(){if(j.title===void 0)return;if(j.title!=="")return j.title;return K.slice(0,50)+(K.length>50?"...":"")}async function w(M){let X=j.continue?(await M.session.list()).data?.find((Z)=>!Z.parentID)?.id:j.session;if(X&&j.fork)return(await M.session.fork({sessionID:X})).data?.id;if(X)return X;let N=S();return(await M.session.create({title:N,permission:H})).data?.id}async function L(M,X){let N=await M.config.get();if(!N.data)return;if(N.data.share!=="auto"&&!I.QITQODE_AUTO_SHARE&&!j.share)return;let W=await M.session.share({sessionID:X}).catch((Z)=>{if(Z instanceof Error&&Z.message.includes("disabled"))B.println(B.Style.TEXT_DANGER_BOLD+"! "+Z.message);return{error:Z}});if(!W.error&&"data"in W&&W.data?.share?.url)B.println(B.Style.TEXT_INFO_BOLD+"~ "+W.data.share.url)}async function h(M){function X(G){try{if(G.tool==="bash")return Xj($(G));if(G.tool==="glob")return r($(G));if(G.tool==="grep")return jj($(G));if(G.tool==="read")return Bj($(G));if(G.tool==="write")return Gj($(G));if(G.tool==="webfetch")return Jj($(G));if(G.tool==="edit")return Kj($(G));if(G.tool==="codesearch")return Mj($(G));if(G.tool==="websearch")return Nj($(G));if(G.tool==="actor")return k($(G));if(G.tool==="skill")return Vj($(G));return c(G)}catch{return c(G)}}function N(G,q){if(j.format==="json")return process.stdout.write(JSON.stringify({type:G,timestamp:Date.now(),sessionID:A,...q})+O),!0;return!1}let W=await M.event.subscribe(),Z;async function e(G){let q=new Map,z=x.create({service:"cli.run"}),E=W.stream[Symbol.asyncIterator](),F=G.completion.then(()=>"DONE");try{while(!0){let P=await Promise.race([E.next(),F]);if(P==="DONE")break;if(P.done)break;let _=P.value;if(G.onEvent(_),z.debug("event received",{type:_.type}),_.type==="message.updated"&&_.properties.info.role==="assistant"&&j.format!=="json"&&q.get("start")!==!0)B.empty(),B.println(`> ${_.properties.info.agent} \xB7 ${_.properties.info.modelID}`),B.empty(),q.set("start",!0);if(_.type==="message.part.updated"){let J=_.properties.part;if(J.sessionID!==A)continue;if(J.type==="tool"&&(J.state.status==="completed"||J.state.status==="error")){if(N("tool_use",{part:J}))continue;if(J.state.status==="completed"){X(J);continue}C({icon:"\u2717",title:`${J.tool} failed`}),B.error(J.state.error)}if(J.type==="tool"&&J.tool==="actor"&&J.state.status==="running"&&j.format!=="json"){if(q.get(J.id)===!0)continue;k($(J)),q.set(J.id,!0)}if(J.type==="step-start"){if(N("step_start",{part:J}))continue}if(J.type==="step-finish"){if(N("step_finish",{part:J}))continue}if(J.type==="text"&&J.time?.end){if(N("text",{part:J}))continue;let R=J.text.trim();if(!R)continue;if(!process.stdout.isTTY){process.stdout.write(R+O);continue}B.empty(),B.println(R),B.empty()}if(J.type==="reasoning"&&J.time?.end&&j.thinking){if(N("reasoning",{part:J}))continue;let R=J.text.trim();if(!R)continue;let U=`Thinking: ${R}`;if(process.stdout.isTTY){B.empty(),B.println(`${B.Style.TEXT_DIM}\x1B[3m${U}\x1B[0m${B.Style.TEXT_NORMAL}`),B.empty();continue}process.stdout.write(U+O)}}if(_.type==="session.error"){let J=_.properties;if(J.sessionID!==A||!J.error)continue;let R=String(J.error.name);if("data"in J.error&&J.error.data&&"message"in J.error.data)R=String(J.error.data.message);if(Z=Z?Z+O+R:R,N("error",{error:J.error}))continue;B.error(R)}if(_.type==="permission.asked"){let J=_.properties;if(J.sessionID!==A)continue;if(j["dangerously-skip-permissions"])await M.permission.reply({requestID:J.id,reply:"once"});else B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL+`permission requested: ${J.permission} (${J.patterns.join(", ")}); auto-rejecting`),await M.permission.reply({requestID:J.id,reply:"reject"})}}}finally{G.stop(),await E.return?.(void 0).catch(()=>{})}}let v=await(async()=>{if(!j.agent)return;let G=j.agent;if(j.attach){let z=await M.app.agents(void 0,{throwOnError:!0}).then((F)=>F.data??[]).catch(()=>{return});if(!z){B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL,`failed to list agents from ${j.attach}. Falling back to default agent`);return}let E=z.find((F)=>F.name===G);if(!E){B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL,`agent "${G}" not found. Falling back to default agent`);return}if(E.mode==="subagent"){B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL,`agent "${G}" is a subagent, not a primary agent. Falling back to default agent`);return}return G}let q=await g.runPromise(d.Service.use((z)=>z.get(G)));if(!q){B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL,`agent "${G}" not found. Falling back to default agent`);return}if(q.mode==="subagent"){B.println(B.Style.TEXT_WARNING_BOLD+"!",B.Style.TEXT_NORMAL,`agent "${G}" is a subagent, not a primary agent. Falling back to default agent`);return}return G})(),A=await w(M);if(!A)B.error("Session not found"),process.exit(1);await L(M,A);let s=x.create({service:"cli.run.poll"}),m=o({sessionID:A,query:async()=>{try{return(await M.session.status()).data?.[A]}catch(G){throw s.debug("session.status query failed",{error:G}),G}}});if(e(m).catch((G)=>{console.error(G),process.exit(1)}),j.command)await M.session.command({sessionID:A,agent:v,model:j.model,command:j.command,arguments:K,variant:j.variant});else{let G=j.model?f.parseModel(j.model):void 0;await M.session.prompt({sessionID:A,agent:v,model:G,variant:j.variant,parts:[...Y,{type:"text",text:K}]})}m.markStarted()}if(j.attach){let M=i({password:j.password}),X=D({baseUrl:j.attach,directory:V,headers:M});return await h(X)}await p(process.cwd(),async()=>{let X=D({baseUrl:"http://qitqode.internal",fetch:async(N,W)=>{let Z=new Request(N,W);return l.Default().app.fetch(Z)}});await h(X)})}});export{Tj as RunCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Id as q,Jd as K,Kd as D,Nd as L,Od as N}from"./chunk-p62gb4wj.js";import"./chunk-x4sp99g6.js";import{Vf as B}from"./chunk-rbk8seme.js";import{gh as G}from"./chunk-
|
|
2
|
+
import{Id as q,Jd as K,Kd as D,Nd as L,Od as N}from"./chunk-p62gb4wj.js";import"./chunk-x4sp99g6.js";import{Vf as B}from"./chunk-rbk8seme.js";import{gh as G}from"./chunk-tc18nbmn.js";import"./chunk-481k3dag.js";import"./chunk-vxyy2dp3.js";import"./chunk-yp5bypsp.js";import"./chunk-7hm0c2yg.js";import"./chunk-gj0wt0cy.js";import"./chunk-5hw6xa49.js";import"./chunk-326p5b10.js";import"./chunk-wefez1gt.js";import{Fl as C}from"./chunk-ccmbckek.js";import"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import"./chunk-bn0h9dny.js";import"./chunk-mpkvpn2y.js";import"./chunk-9bzhxenb.js";import"./chunk-htz93dsd.js";import"./chunk-vcw00k0n.js";import"./chunk-famryv52.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-4jtxtkj7.js";import"./chunk-ay8emwym.js";import"./chunk-2maqde7w.js";import"./chunk-kj20f048.js";import"./chunk-cqtkxwd8.js";import"./chunk-x9rbv6p6.js";import"./chunk-g5rabwre.js";import"./chunk-jbx3s7nw.js";import"./chunk-15hw2z9t.js";import"./chunk-48ge2ryx.js";import"./chunk-n9xns8by.js";import"./chunk-y9q0hb7b.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-0dt0bxz6.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-0t4324w5.js";import{Vr as J}from"./chunk-hdrbyarv.js";import"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-dxpj0cxh.js";import"./chunk-zw815d68.js";import"./chunk-7xm75w1e.js";var X={command:"upgrade [target]",describe:"upgrade qitqode to the latest or a specific version",builder:(z)=>{return z.positional("target",{describe:"version to upgrade to, for ex '0.1.48' or 'v0.1.48'",type:"string"}).option("method",{alias:"m",describe:"installation method to use",type:"string",choices:["curl","npm","pnpm","bun","brew","choco","scoop"]})},handler:async(z)=>{B.empty(),B.println(B.logo(" ")),B.empty(),K("Upgrade");let O=await G.runPromise(C.Service.use((j)=>j.method())),E=z.method??O;if(E==="unknown"){if(q.error(`qitqode is installed to ${process.execPath} and may be managed by a package manager`),!await N({message:"Install anyways?",options:[{label:"Yes",value:!0},{label:"No",value:!1}],initialValue:!1})){D("Done");return}}q.info("Using method: "+E);let F=z.target?z.target.replace(/^v/,""):await G.runPromise(C.Service.use((j)=>j.latest()));if(J===F){q.warn(`qitqode upgrade skipped: ${F} is already installed`),D("Done");return}q.info(`From ${J} \u2192 ${F}`);let H=L();H.start("Upgrading...");let x=await G.runPromise(C.Service.use((j)=>j.upgrade(E,F))).catch((j)=>j);if(x){if(H.stop("Upgrade failed",1),x instanceof C.UpgradeFailedError)if(E==="choco"&&x.stderr.includes("not running from an elevated command shell"))q.error("Please run the terminal as Administrator and try again");else q.error(x.stderr);else if(x instanceof Error)q.error(x.message);D("Done");return}H.stop("Upgrade complete"),D("Done")}};export{X as UpgradeCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{fh as a,gh as b}from"./chunk-
|
|
2
|
+
import{fh as a,gh as b}from"./chunk-tc18nbmn.js";import"./chunk-481k3dag.js";import"./chunk-vxyy2dp3.js";import"./chunk-yp5bypsp.js";import"./chunk-7hm0c2yg.js";import"./chunk-gj0wt0cy.js";import"./chunk-5hw6xa49.js";import"./chunk-326p5b10.js";import"./chunk-wefez1gt.js";import"./chunk-ccmbckek.js";import"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import"./chunk-bn0h9dny.js";import"./chunk-mpkvpn2y.js";import"./chunk-9bzhxenb.js";import"./chunk-htz93dsd.js";import"./chunk-vcw00k0n.js";import"./chunk-famryv52.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-4jtxtkj7.js";import"./chunk-ay8emwym.js";import"./chunk-2maqde7w.js";import"./chunk-kj20f048.js";import"./chunk-cqtkxwd8.js";import"./chunk-x9rbv6p6.js";import"./chunk-g5rabwre.js";import"./chunk-jbx3s7nw.js";import"./chunk-15hw2z9t.js";import"./chunk-48ge2ryx.js";import"./chunk-n9xns8by.js";import"./chunk-y9q0hb7b.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-0dt0bxz6.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-0t4324w5.js";import"./chunk-hdrbyarv.js";import"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-dxpj0cxh.js";import"./chunk-zw815d68.js";import"./chunk-7xm75w1e.js";export{b as AppRuntime,a as AppLayer};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Qs as p,Rs as f,_s as m}from"./chunk-
|
|
2
|
+
import{Qs as p,Rs as f,_s as m}from"./chunk-hdrbyarv.js";import{DO as l}from"./chunk-7xm75w1e.js";var n={};l(n,{start:()=>I,Heap:()=>n});import h from"path";import{writeHeapSnapshot as u}from"v8";var i=m.create({service:"heap"}),g=60000,d=2147483648,o,s=!1,a=!0;function I(){if(!f.QITQODE_AUTO_HEAP_SNAPSHOT)return;if(o)return;let c=async()=>{if(s)return;let e=process.memoryUsage();if(e.rss<=d){a=!0;return}if(!a)return;s=!0,a=!1;let r=h.join(p.Path.log,`heap-${process.pid}-${new Date().toISOString().replace(/[:.]/g,"")}.heapsnapshot`);i.warn("heap usage exceeded limit",{rss:e.rss,heap:e.heapUsed,file:r}),await Promise.resolve().then(()=>u(r)).catch((t)=>{i.error("failed to write heap snapshot",{error:t instanceof Error?t.message:String(t),file:r})}),s=!1};o=setInterval(()=>{c()},g),o.unref?.()}
|
|
3
3
|
export{I as Wf,n as Xf};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{n as a,o as b}from"./chunk-rzt0ge3t.js";import"./chunk-srt5peec.js";import"./chunk-d8dsdcb3.js";import"./chunk-c8k32724.js";import"./chunk-yphsjp71.js";import"./chunk-t9mz17gb.js";import"./chunk-yt3f3j35.js";import"./chunk-rh9vnpgr.js";import"./chunk-wfb608qf.js";import"./chunk-ea5ph627.js";import"./chunk-bzgj60w4.js";import"./chunk-kdcnder5.js";import"./chunk-x4sp99g6.js";import"./chunk-fvzwbjh8.js";import"./chunk-e10py6yr.js";import"./chunk-fgzk49cr.js";import"./chunk-rbk8seme.js";import"./chunk-q6pn67ps.js";import"./chunk-pfyhg0m7.js";import"./chunk-481k3dag.js";import"./chunk-vxyy2dp3.js";import"./chunk-wefez1gt.js";import"./chunk-ccmbckek.js";import"./chunk-711dc303.js";import"./chunk-qn6gdhns.js";import"./chunk-bn0h9dny.js";import"./chunk-mpkvpn2y.js";import"./chunk-9bzhxenb.js";import"./chunk-htz93dsd.js";import"./chunk-vcw00k0n.js";import"./chunk-famryv52.js";import"./chunk-2hc5z7b5.js";import"./chunk-e1w70zdn.js";import"./chunk-4jtxtkj7.js";import"./chunk-ay8emwym.js";import"./chunk-2maqde7w.js";import"./chunk-kj20f048.js";import"./chunk-cqtkxwd8.js";import"./chunk-x9rbv6p6.js";import"./chunk-g5rabwre.js";import"./chunk-jbx3s7nw.js";import"./chunk-15hw2z9t.js";import"./chunk-48ge2ryx.js";import"./chunk-n9xns8by.js";import"./chunk-y9q0hb7b.js";import"./chunk-rryytkmg.js";import"./chunk-te47zdxd.js";import"./chunk-d6ry9418.js";import"./chunk-0dt0bxz6.js";import"./chunk-10bjs581.js";import"./chunk-4cnwn1rh.js";import"./chunk-0t4324w5.js";import"./chunk-hdrbyarv.js";import"./chunk-tqj69nh6.js";import"./chunk-ag8kz1e7.js";import"./chunk-5tray1fw.js";import"./chunk-c11d28qn.js";import"./chunk-mzs2pjyc.js";import"./chunk-gagtmjmp.js";import"./chunk-zs8kqdsf.js";import"./chunk-dxpj0cxh.js";import"./chunk-zw815d68.js";import"./chunk-7xm75w1e.js";export{b as tui,a as rendererConfig};
|