@zenku/cli-node 0.1.33 → 0.1.34

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/zenku-bundle.cjs +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenku/cli-node",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "description": "Zenku CLI (Node.js) — runs under node, no native binary.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "bin": {
package/zenku-bundle.cjs CHANGED
@@ -226,7 +226,7 @@ ${p}
226
226
  ${r.result.output}
227
227
  `),r.error&&process.stderr.write(aa(`Error: ${r.error}`)+`
228
228
  `)}})}catch(r){y("%s",M(r))}}),e.command("resolve").description("Resolve a pending interaction (HITL approval, user input, or A2UI form)").argument("<callback-token>","callback token from the pending interaction").option("--decision <value>","decision: approve, deny, submit, or cancel").option("--input <text>","user input text or JSON for A2UI forms").option("--conversation <id>","conversation ID (subscribe to continuation after resolving)").action(async(n,i)=>{let{client:r}=await It(),{controller:o,cleanup:a}=Hp();try{let s=i.decision;s&&!["approve","deny","submit","cancel"].includes(s)&&y("invalid --decision: %s (expected approve, deny, submit, or cancel)",s);let u=await r.resolve(n,{decision:s,userInput:i.input});if(Pe()||process.stderr.write(Ie(`[resolved] ${u.decision}`)+`
229
- `),i.conversation){let c=r.subscribe(i.conversation,void 0,o.signal);pe()&&!Pe()?await oa(r,c,i.conversation,o.signal,{breakOnExit:!0}):await ua(c,{},o.signal,{breakOnExit:!0})}else v({json:()=>u,human:()=>{E("Resolved (use --conversation to stream continuation)")}})}catch(s){if(s instanceof DOMException&&s.name==="AbortError")return;y("%s",M(s))}finally{o.abort(),a()}}),zr(e,{pbService:"auth"}),e}function lD(e){e.addCommand(gx())}var kD=require("node:crypto"),X=require("node:fs"),CD=require("node:os"),me=require("node:path");var dD=require("module"),vx=(0,dD.createRequire)("/"),Dx;try{Dx=vx("worker_threads").Worker}catch{}var Te=Uint8Array,Ar=Uint16Array,yx=Int32Array,pD=new Te([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),mD=new Te([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),bx=new Te([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fD=function(e,t){for(var n=new Ar(31),i=0;i<31;++i)n[i]=t+=1<<e[i-1];for(var r=new yx(n[30]),i=1;i<30;++i)for(var o=n[i];o<n[i+1];++o)r[o]=o-n[i]<<5|i;return{b:n,r}},hD=fD(pD,2),gD=hD.b,$x=hD.r;gD[28]=258,$x[258]=28;var vD=fD(mD,0),_x=vD.b,zE=vD.r,tm=new Ar(32768);for(q=0;q<32768;++q)mt=(q&43690)>>1|(q&21845)<<1,mt=(mt&52428)>>2|(mt&13107)<<2,mt=(mt&61680)>>4|(mt&3855)<<4,tm[q]=((mt&65280)>>8|(mt&255)<<8)>>1;var mt,q,An=(function(e,t,n){for(var i=e.length,r=0,o=new Ar(t);r<i;++r)e[r]&&++o[e[r]-1];var a=new Ar(t);for(r=1;r<t;++r)a[r]=a[r-1]+o[r-1]<<1;var s;if(n){s=new Ar(1<<t);var u=15-t;for(r=0;r<i;++r)if(e[r])for(var c=r<<4|e[r],l=t-e[r],d=a[e[r]-1]++<<l,p=d|(1<<l)-1;d<=p;++d)s[tm[d]>>u]=c}else for(s=new Ar(i),r=0;r<i;++r)e[r]&&(s[r]=tm[a[e[r]-1]++]>>15-e[r]);return s}),Tn=new Te(288);for(q=0;q<144;++q)Tn[q]=8;var q;for(q=144;q<256;++q)Tn[q]=9;var q;for(q=256;q<280;++q)Tn[q]=7;var q;for(q=280;q<288;++q)Tn[q]=8;var q,DD=new Te(32);for(q=0;q<32;++q)DD[q]=5;var q;var xx=An(Tn,9,1);var wx=An(DD,5,1),Xp=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},He=function(e,t,n){var i=t/8|0;return(e[i]|e[i+1]<<8)>>(t&7)&n},Qp=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},kx=function(e){return(e+7)/8|0},nm=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Te(e.subarray(t,n))};var Cx=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Le=function(e,t,n){var i=new Error(t||Cx[e]);if(i.code=e,Error.captureStackTrace&&Error.captureStackTrace(i,Le),!n)throw i;return i},Ix=function(e,t,n,i){var r=e.length,o=i?i.length:0;if(!r||t.f&&!t.l)return n||new Te(0);var a=!n,s=a||t.i!=2,u=t.i;a&&(n=new Te(r*3));var c=function(ym){var bm=n.length;if(ym>bm){var $m=new Te(Math.max(bm*2,ym));$m.set(n),n=$m}},l=t.f||0,d=t.p||0,p=t.b||0,f=t.l,g=t.d,x=t.m,S=t.n,N=r*8;do{if(!f){l=He(e,d,1);var H=He(e,d+1,3);if(d+=3,H)if(H==1)f=xx,g=wx,x=9,S=5;else if(H==2){var Nn=He(e,d,31)+257,Rn=He(e,d+10,15)+4,pm=Nn+He(e,d+5,31)+1;d+=14;for(var Tr=new Te(pm),Da=new Te(19),je=0;je<Rn;++je)Da[bx[je]]=He(e,d+je*3,7);d+=Rn*3;for(var mm=Xp(Da),LD=(1<<mm)-1,MD=An(Da,mm,1),je=0;je<pm;){var fm=MD[He(e,d,LD)];d+=fm&15;var O=fm>>4;if(O<16)Tr[je++]=O;else{var Vt=0,Bn=0;for(O==16?(Bn=3+He(e,d,3),d+=2,Vt=Tr[je-1]):O==17?(Bn=3+He(e,d,7),d+=3):O==18&&(Bn=11+He(e,d,127),d+=7);Bn--;)Tr[je++]=Vt}}var hm=Tr.subarray(0,Nn),ft=Tr.subarray(Nn);x=Xp(hm),S=Xp(ft),f=An(hm,x,1),g=An(ft,S,1)}else Le(1);else{var O=kx(d)+4,W=e[O-4]|e[O-3]<<8,ge=O+W;if(ge>r){u&&Le(0);break}s&&c(p+W),n.set(e.subarray(O,ge),p),t.b=p+=W,t.p=d=ge*8,t.f=l;continue}if(d>N){u&&Le(0);break}}s&&c(p+131072);for(var qD=(1<<x)-1,VD=(1<<S)-1,ya=d;;ya=d){var Vt=f[Qp(e,d)&qD],Wt=Vt>>4;if(d+=Vt&15,d>N){u&&Le(0);break}if(Vt||Le(2),Wt<256)n[p++]=Wt;else if(Wt==256){ya=d,f=null;break}else{var gm=Wt-254;if(Wt>264){var je=Wt-257,jr=pD[je];gm=He(e,d,(1<<jr)-1)+gD[je],d+=jr}var ba=g[Qp(e,d)&VD],$a=ba>>4;ba||Le(3),d+=ba&15;var ft=_x[$a];if($a>3){var jr=mD[$a];ft+=Qp(e,d)&(1<<jr)-1,d+=jr}if(d>N){u&&Le(0);break}s&&c(p+131072);var vm=p+gm;if(p<ft){var Dm=o-ft,WD=Math.min(ft,vm);for(Dm+p<0&&Le(3);p<WD;++p)n[p]=i[Dm+p]}for(;p<vm;++p)n[p]=n[p-ft]}}t.l=f,t.p=ya,t.b=p,t.f=l,f&&(l=1,t.m=x,t.d=g,t.n=S)}while(!l);return p!=n.length&&a?nm(n,0,p):n.subarray(0,p)};var Sx=new Te(0);var nt=function(e,t){return e[t]|e[t+1]<<8},Ye=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},em=function(e,t){return Ye(e,t)+Ye(e,t+4)*4294967296};function Ex(e,t){return Ix(e,{i:2},t&&t.out,t&&t.dictionary)}var rm=typeof TextDecoder<"u"&&new TextDecoder,Fx=0;try{rm.decode(Sx,{stream:!0}),Fx=1}catch{}var Ox=function(e){for(var t="",n=0;;){var i=e[n++],r=(i>127)+(i>223)+(i>239);if(n+r>e.length)return{s:t,r:nm(e,n-1)};r?r==3?(i=((i&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|i>>10,56320|i&1023)):r&1?t+=String.fromCharCode((i&31)<<6|e[n++]&63):t+=String.fromCharCode((i&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(i)}};function zx(e,t){if(t){for(var n="",i=0;i<e.length;i+=16384)n+=String.fromCharCode.apply(null,e.subarray(i,i+16384));return n}else{if(rm)return rm.decode(e);var r=Ox(e),o=r.s,n=r.r;return n.length&&Le(8),o}}var Px=function(e,t){return t+30+nt(e,t+26)+nt(e,t+28)},Ax=function(e,t,n){var i=nt(e,t+28),r=zx(e.subarray(t+46,t+46+i),!(nt(e,t+8)&2048)),o=t+46+i,a=Ye(e,t+20),s=n&&a==4294967295?Tx(e,o):[a,Ye(e,t+24),Ye(e,t+42)],u=s[0],c=s[1],l=s[2];return[nt(e,t+10),u,c,r,o+nt(e,t+30)+nt(e,t+32),l]},Tx=function(e,t){for(;nt(e,t)!=1;t+=4+nt(e,t+2));return[em(e,t+12),em(e,t+4),em(e,t+20)]};function ca(e,t){for(var n={},i=e.length-22;Ye(e,i)!=101010256;--i)(!i||e.length-i>65558)&&Le(13);var r=nt(e,i+8);if(!r)return{};var o=Ye(e,i+16),a=o==4294967295||r==65535;if(a){var s=Ye(e,i-12);a=Ye(e,s)==101075792,a&&(r=Ye(e,s+32),o=Ye(e,s+48))}for(var u=t&&t.filter,c=0;c<r;++c){var l=Ax(e,o,a),d=l[0],p=l[1],f=l[2],g=l[3],x=l[4],S=l[5],N=Px(e,S);o=x,(!u||u({name:g,size:p,originalSize:f,compression:d}))&&(d?d==8?n[g]=Ex(e.subarray(N,N+p),{out:new Te(f)}):Le(14,"unknown compression type "+d):n[g]=nm(e,N,N+p))}return n}var bD="https://unpkg.com/@zenku/agent-kit",jx=15e3;async function im(e,t){let n=new AbortController,i=setTimeout(()=>n.abort(),jx);try{return await fetch(e,{...t,signal:n.signal})}finally{clearTimeout(i)}}async function yD(e){let t=`${bD}@latest/${e}`,n;try{n=await im(t)}catch(i){throw i instanceof DOMException&&i.name==="AbortError"?new Error("request timed out"):new Error(`failed to fetch ${e}: ${i instanceof Error?i.message:String(i)}`)}if(n.status===404)throw new Error(`@zenku/agent-kit: ${e} not found`);if(!n.ok)throw new Error(`failed to fetch ${e}: HTTP ${n.status}`);return await n.json()}async function Ux(e){let t=`${bD}@latest/${e}`,n;try{n=await im(t)}catch(i){throw i instanceof DOMException&&i.name==="AbortError"?new Error("request timed out"):new Error(`failed to fetch ${e}: ${i instanceof Error?i.message:String(i)}`)}if(n.status===404)throw new Error(`@zenku/agent-kit: ${e} not found`);if(!n.ok)throw new Error(`failed to fetch ${e}: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())}function Nx(e){if(e)try{let t=JSON.parse(e);if(Array.isArray(t))return t}catch{}}function Rx(e,t){let n=[];if(e.skills)for(let[r,o]of Object.entries(e.skills))n.push({name:typeof o.name=="string"?o.name:r,type:"skill",description:typeof o.description=="string"?o.description:""});if(e.agents)for(let[r,o]of Object.entries(e.agents))n.push({name:typeof o.name=="string"?o.name:r,type:"agent",description:typeof o.description=="string"?o.description:"",model:typeof o.model=="string"?o.model:void 0,color:typeof o.color=="string"?o.color:void 0,tools:Nx(typeof o.tools=="string"?o.tools:void 0)});if(e.personas)for(let[r,o]of Object.entries(e.personas))n.push({name:typeof o.name=="string"?o.name:r,type:"persona",description:typeof o.description=="string"?o.description:"",model:typeof o.model=="string"?o.model:void 0,color:typeof o.color=="string"?o.color:void 0});let i={skill:0,agent:1,persona:2};return n.sort((r,o)=>{let a=i[r.type]??99,s=i[o.type]??99;return a!==s?a-s:r.name.localeCompare(o.name)}),{version:t,items:n}}async function jn(){let[e,t]=await Promise.all([yD("manifest.json"),yD("package.json")]);return Rx(e,t.version)}function la(e,t){return e.items.find(n=>n.name===t)??null}async function da(e,t){let n={skill:".skill",agent:".agent",persona:".persona"};return Ux(`${{skill:"skills",agent:"agents",persona:"personas"}[t]}/${e}${n[t]}`)}async function $D(e,t){let n;try{n=await im(`${t}/key`,{headers:{Authorization:`Bearer ${e}`}})}catch(r){throw r instanceof DOMException&&r.name==="AbortError"?new Error("encryption key request timed out"):new Error(`failed to fetch encryption key: ${r instanceof Error?r.message:String(r)}`)}if(n.status===401)throw new Error("authentication required to install kit items (run `zenku login` first)");if(!n.ok)throw new Error(`failed to fetch encryption key: HTTP ${n.status}`);let{key:i}=await n.json();return Buffer.from(i,"hex")}var Bx=["claude","opencode"],sm={claude:".claude",opencode:".opencode"};function pa(e){if(!e||e==="all")return Bx;if(e==="claude"||e==="opencode")return[e];y('invalid --target "%s" (expected: claude, opencode, all)',e)}function Zx(){let e=process.cwd();for(;;){if((0,X.existsSync)((0,me.join)(e,".claude"))||(0,X.existsSync)((0,me.join)(e,".opencode"))||(0,X.existsSync)((0,me.join)(e,".git"))||(0,X.existsSync)((0,me.join)(e,"package.json")))return e;let t=(0,me.resolve)(e,"..");if(t===e)return process.cwd();e=t}}function ma(e){return e?(0,CD.homedir)():Zx()}function fa(e,t,n,i){let r=sm[i];return n==="skill"?(0,me.join)(e,r,"skills",t):(0,me.join)(e,r,"agents",`${t}.md`)}function Lx(e,t){let n=(0,me.join)(e,sm[t],"skills");return(0,X.existsSync)(n)?(0,X.readdirSync)(n,{withFileTypes:!0}).filter(i=>i.isDirectory()&&(0,X.existsSync)((0,me.join)(n,i.name,"SKILL.md"))).map(i=>i.name):[]}function Mx(e,t){let n=(0,me.join)(e,sm[t],"agents");return(0,X.existsSync)(n)?(0,X.readdirSync)(n).filter(i=>i.endsWith(".md")).map(i=>i.slice(0,-3)):[]}function _D(e,t){let n=new Map;for(let i of t){for(let r of Lx(e,i)){let o=`skill:${r}`,a=n.get(o);a?a.targets.push(i):n.set(o,{name:r,type:"skill",targets:[i]})}for(let r of Mx(e,i)){let o=`agent:${r}`,a=n.get(o);a?a.targets.push(i):n.set(o,{name:r,type:"agent",targets:[i]})}}return[...n.values()].sort((i,r)=>i.type!==r.type?i.type==="skill"?-1:1:i.name.localeCompare(r.name))}function xD(e,t){let n=ca(e);for(let i of Object.keys(n)){if(i.endsWith("/"))continue;let r=(0,me.join)(t,i);(0,X.mkdirSync)((0,me.dirname)(r),{recursive:!0}),(0,X.writeFileSync)(r,n[i])}}function wD(e,t){let n=ca(e),i=Object.keys(n).find(r=>r.endsWith(".md"));if(!i)throw new Error("no .md file found in agent archive");(0,X.mkdirSync)((0,me.dirname)(t),{recursive:!0}),(0,X.writeFileSync)(t,n[i])}function om(e,t){let n=e.slice(0,12),i=e.slice(12,28),r=e.slice(28),o=(0,kD.createDecipheriv)("aes-256-gcm",t,Buffer.from(n));return o.setAuthTag(Buffer.from(i)),new Uint8Array(Buffer.concat([o.update(Buffer.from(r)),o.final()]))}async function am(){let{profile:e,token:t}=await En(),n=e.services["kit-key"];return n||y("no kit-key service URL configured in profile"),$D(t,n)}var ha=["--target <value>","install target: claude, opencode, all (default: all)"];function qx(){let e=new z("agent-kit").description("Manage skills, agents, and personas from @zenku/agent-kit");return e.command("list").description("List available skills, agents, and personas from @zenku/agent-kit").option("--skills","show skills only").option("--agents","show agents only").option("--personas","show personas only").action(async t=>{let n=await k("Fetching kit catalog...",()=>jn()),i=n.items;t.skills&&(i=i.filter(r=>r.type==="skill")),t.agents&&(i=i.filter(r=>r.type==="agent")),t.personas&&(i=i.filter(r=>r.type==="persona")),v({json:()=>({version:n.version,items:i}),human:()=>{E("@zenku/agent-kit v%s",n.version),L(["NAME","TYPE","DESCRIPTION"],i.map(r=>[r.name,r.type,pt(r.description,60)]))}})}),e.command("info").description("Show metadata for a skill, agent, or persona").argument("<name>","skill, agent, or persona name").action(async t=>{let n=await k("Authenticating...",()=>am()),{item:i,files:r,version:o}=await k("Fetching kit catalog...",async()=>{let a=await jn(),s=la(a,t);s||y('"%s" not found in agent-kit (run `zenku agent-kit list` to see available items)',t);let u=await da(s.name,s.type),c=om(u,n),l=ca(c),d=Object.keys(l).filter(p=>!p.endsWith("/")).sort();return{item:s,files:d,version:a.version}});v({json:()=>({version:o,...i,files:r}),human:()=>{process.stdout.write(`Name: ${i.name}
229
+ `),i.conversation){let c=r.subscribe(i.conversation,void 0,o.signal);pe()&&!Pe()?await oa(r,c,i.conversation,o.signal,{breakOnExit:!0}):await ua(c,{},o.signal,{breakOnExit:!0})}else v({json:()=>u,human:()=>{E("Resolved (use --conversation to stream continuation)")}})}catch(s){if(s instanceof DOMException&&s.name==="AbortError")return;y("%s",M(s))}finally{o.abort(),a()}}),zr(e,{pbService:"auth"}),e}function lD(e){e.addCommand(gx())}var kD=require("node:crypto"),X=require("node:fs"),CD=require("node:os"),me=require("node:path");var dD=require("module"),vx=(0,dD.createRequire)("/"),Dx;try{Dx=vx("worker_threads").Worker}catch{}var Te=Uint8Array,Ar=Uint16Array,yx=Int32Array,pD=new Te([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),mD=new Te([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),bx=new Te([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fD=function(e,t){for(var n=new Ar(31),i=0;i<31;++i)n[i]=t+=1<<e[i-1];for(var r=new yx(n[30]),i=1;i<30;++i)for(var o=n[i];o<n[i+1];++o)r[o]=o-n[i]<<5|i;return{b:n,r}},hD=fD(pD,2),gD=hD.b,$x=hD.r;gD[28]=258,$x[258]=28;var vD=fD(mD,0),_x=vD.b,zE=vD.r,tm=new Ar(32768);for(q=0;q<32768;++q)mt=(q&43690)>>1|(q&21845)<<1,mt=(mt&52428)>>2|(mt&13107)<<2,mt=(mt&61680)>>4|(mt&3855)<<4,tm[q]=((mt&65280)>>8|(mt&255)<<8)>>1;var mt,q,An=(function(e,t,n){for(var i=e.length,r=0,o=new Ar(t);r<i;++r)e[r]&&++o[e[r]-1];var a=new Ar(t);for(r=1;r<t;++r)a[r]=a[r-1]+o[r-1]<<1;var s;if(n){s=new Ar(1<<t);var u=15-t;for(r=0;r<i;++r)if(e[r])for(var c=r<<4|e[r],l=t-e[r],d=a[e[r]-1]++<<l,p=d|(1<<l)-1;d<=p;++d)s[tm[d]>>u]=c}else for(s=new Ar(i),r=0;r<i;++r)e[r]&&(s[r]=tm[a[e[r]-1]++]>>15-e[r]);return s}),Tn=new Te(288);for(q=0;q<144;++q)Tn[q]=8;var q;for(q=144;q<256;++q)Tn[q]=9;var q;for(q=256;q<280;++q)Tn[q]=7;var q;for(q=280;q<288;++q)Tn[q]=8;var q,DD=new Te(32);for(q=0;q<32;++q)DD[q]=5;var q;var xx=An(Tn,9,1);var wx=An(DD,5,1),Xp=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},He=function(e,t,n){var i=t/8|0;return(e[i]|e[i+1]<<8)>>(t&7)&n},Qp=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},kx=function(e){return(e+7)/8|0},nm=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Te(e.subarray(t,n))};var Cx=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Le=function(e,t,n){var i=new Error(t||Cx[e]);if(i.code=e,Error.captureStackTrace&&Error.captureStackTrace(i,Le),!n)throw i;return i},Ix=function(e,t,n,i){var r=e.length,o=i?i.length:0;if(!r||t.f&&!t.l)return n||new Te(0);var a=!n,s=a||t.i!=2,u=t.i;a&&(n=new Te(r*3));var c=function(ym){var bm=n.length;if(ym>bm){var $m=new Te(Math.max(bm*2,ym));$m.set(n),n=$m}},l=t.f||0,d=t.p||0,p=t.b||0,f=t.l,g=t.d,x=t.m,S=t.n,N=r*8;do{if(!f){l=He(e,d,1);var H=He(e,d+1,3);if(d+=3,H)if(H==1)f=xx,g=wx,x=9,S=5;else if(H==2){var Nn=He(e,d,31)+257,Rn=He(e,d+10,15)+4,pm=Nn+He(e,d+5,31)+1;d+=14;for(var Tr=new Te(pm),Da=new Te(19),je=0;je<Rn;++je)Da[bx[je]]=He(e,d+je*3,7);d+=Rn*3;for(var mm=Xp(Da),LD=(1<<mm)-1,MD=An(Da,mm,1),je=0;je<pm;){var fm=MD[He(e,d,LD)];d+=fm&15;var O=fm>>4;if(O<16)Tr[je++]=O;else{var Vt=0,Bn=0;for(O==16?(Bn=3+He(e,d,3),d+=2,Vt=Tr[je-1]):O==17?(Bn=3+He(e,d,7),d+=3):O==18&&(Bn=11+He(e,d,127),d+=7);Bn--;)Tr[je++]=Vt}}var hm=Tr.subarray(0,Nn),ft=Tr.subarray(Nn);x=Xp(hm),S=Xp(ft),f=An(hm,x,1),g=An(ft,S,1)}else Le(1);else{var O=kx(d)+4,W=e[O-4]|e[O-3]<<8,ge=O+W;if(ge>r){u&&Le(0);break}s&&c(p+W),n.set(e.subarray(O,ge),p),t.b=p+=W,t.p=d=ge*8,t.f=l;continue}if(d>N){u&&Le(0);break}}s&&c(p+131072);for(var qD=(1<<x)-1,VD=(1<<S)-1,ya=d;;ya=d){var Vt=f[Qp(e,d)&qD],Wt=Vt>>4;if(d+=Vt&15,d>N){u&&Le(0);break}if(Vt||Le(2),Wt<256)n[p++]=Wt;else if(Wt==256){ya=d,f=null;break}else{var gm=Wt-254;if(Wt>264){var je=Wt-257,jr=pD[je];gm=He(e,d,(1<<jr)-1)+gD[je],d+=jr}var ba=g[Qp(e,d)&VD],$a=ba>>4;ba||Le(3),d+=ba&15;var ft=_x[$a];if($a>3){var jr=mD[$a];ft+=Qp(e,d)&(1<<jr)-1,d+=jr}if(d>N){u&&Le(0);break}s&&c(p+131072);var vm=p+gm;if(p<ft){var Dm=o-ft,WD=Math.min(ft,vm);for(Dm+p<0&&Le(3);p<WD;++p)n[p]=i[Dm+p]}for(;p<vm;++p)n[p]=n[p-ft]}}t.l=f,t.p=ya,t.b=p,t.f=l,f&&(l=1,t.m=x,t.d=g,t.n=S)}while(!l);return p!=n.length&&a?nm(n,0,p):n.subarray(0,p)};var Sx=new Te(0);var nt=function(e,t){return e[t]|e[t+1]<<8},Ye=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},em=function(e,t){return Ye(e,t)+Ye(e,t+4)*4294967296};function Ex(e,t){return Ix(e,{i:2},t&&t.out,t&&t.dictionary)}var rm=typeof TextDecoder<"u"&&new TextDecoder,Fx=0;try{rm.decode(Sx,{stream:!0}),Fx=1}catch{}var Ox=function(e){for(var t="",n=0;;){var i=e[n++],r=(i>127)+(i>223)+(i>239);if(n+r>e.length)return{s:t,r:nm(e,n-1)};r?r==3?(i=((i&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|i>>10,56320|i&1023)):r&1?t+=String.fromCharCode((i&31)<<6|e[n++]&63):t+=String.fromCharCode((i&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(i)}};function zx(e,t){if(t){for(var n="",i=0;i<e.length;i+=16384)n+=String.fromCharCode.apply(null,e.subarray(i,i+16384));return n}else{if(rm)return rm.decode(e);var r=Ox(e),o=r.s,n=r.r;return n.length&&Le(8),o}}var Px=function(e,t){return t+30+nt(e,t+26)+nt(e,t+28)},Ax=function(e,t,n){var i=nt(e,t+28),r=zx(e.subarray(t+46,t+46+i),!(nt(e,t+8)&2048)),o=t+46+i,a=Ye(e,t+20),s=n&&a==4294967295?Tx(e,o):[a,Ye(e,t+24),Ye(e,t+42)],u=s[0],c=s[1],l=s[2];return[nt(e,t+10),u,c,r,o+nt(e,t+30)+nt(e,t+32),l]},Tx=function(e,t){for(;nt(e,t)!=1;t+=4+nt(e,t+2));return[em(e,t+12),em(e,t+4),em(e,t+20)]};function ca(e,t){for(var n={},i=e.length-22;Ye(e,i)!=101010256;--i)(!i||e.length-i>65558)&&Le(13);var r=nt(e,i+8);if(!r)return{};var o=Ye(e,i+16),a=o==4294967295||r==65535;if(a){var s=Ye(e,i-12);a=Ye(e,s)==101075792,a&&(r=Ye(e,s+32),o=Ye(e,s+48))}for(var u=t&&t.filter,c=0;c<r;++c){var l=Ax(e,o,a),d=l[0],p=l[1],f=l[2],g=l[3],x=l[4],S=l[5],N=Px(e,S);o=x,(!u||u({name:g,size:p,originalSize:f,compression:d}))&&(d?d==8?n[g]=Ex(e.subarray(N,N+p),{out:new Te(f)}):Le(14,"unknown compression type "+d):n[g]=nm(e,N,N+p))}return n}var bD="https://unpkg.com/@zenku/agent-kit",jx=15e3;async function im(e,t){let n=new AbortController,i=setTimeout(()=>n.abort(),jx);try{return await fetch(e,{...t,signal:n.signal})}finally{clearTimeout(i)}}async function yD(e){let t=`${bD}@latest/${e}`,n;try{n=await im(t)}catch(i){throw i instanceof DOMException&&i.name==="AbortError"?new Error("request timed out"):new Error(`failed to fetch ${e}: ${i instanceof Error?i.message:String(i)}`)}if(n.status===404)throw new Error(`@zenku/agent-kit: ${e} not found`);if(!n.ok)throw new Error(`failed to fetch ${e}: HTTP ${n.status}`);return await n.json()}async function Ux(e){let t=`${bD}@latest/${e}`,n;try{n=await im(t)}catch(i){throw i instanceof DOMException&&i.name==="AbortError"?new Error("request timed out"):new Error(`failed to fetch ${e}: ${i instanceof Error?i.message:String(i)}`)}if(n.status===404)throw new Error(`@zenku/agent-kit: ${e} not found`);if(!n.ok)throw new Error(`failed to fetch ${e}: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())}function Nx(e){if(e)try{let t=JSON.parse(e);if(Array.isArray(t))return t}catch{}}function Rx(e,t){let n=[];if(e.skills)for(let[r,o]of Object.entries(e.skills))n.push({name:typeof o.name=="string"?o.name:r,type:"skill",description:typeof o.description=="string"?o.description:""});if(e.agents)for(let[r,o]of Object.entries(e.agents))n.push({name:typeof o.name=="string"?o.name:r,type:"agent",description:typeof o.description=="string"?o.description:"",model:typeof o.model=="string"?o.model:void 0,color:typeof o.color=="string"?o.color:void 0,tools:Nx(typeof o.tools=="string"?o.tools:void 0)});if(e.personas)for(let[r,o]of Object.entries(e.personas))n.push({name:typeof o.name=="string"?o.name:r,type:"persona",description:typeof o.description=="string"?o.description:"",model:typeof o.model=="string"?o.model:void 0,color:typeof o.color=="string"?o.color:void 0});let i={skill:0,agent:1,persona:2};return n.sort((r,o)=>{let a=i[r.type]??99,s=i[o.type]??99;return a!==s?a-s:r.name.localeCompare(o.name)}),{version:t,items:n}}async function jn(){let[e,t]=await Promise.all([yD("manifest.json"),yD("package.json")]);return Rx(e,t.version)}function la(e,t){return e.items.find(n=>n.name===t)??null}async function da(e,t){let n={skill:".skill",agent:".agent",persona:".persona"};return Ux(`${{skill:"skills",agent:"agents",persona:"personas"}[t]}/${e}${n[t]}`)}async function $D(e,t){let n;try{n=await im(`${t}/key`,{headers:{Authorization:`Bearer ${e}`}})}catch(r){throw r instanceof DOMException&&r.name==="AbortError"?new Error("encryption key request timed out"):new Error(`failed to fetch encryption key: ${r instanceof Error?r.message:String(r)}`)}if(n.status===401)throw new Error("authentication required to install kit items (run `zenku login` first)");if(!n.ok)throw new Error(`failed to fetch encryption key: HTTP ${n.status}`);let{key:i}=await n.json();return Buffer.from(i,"hex")}var Bx=["claude","opencode"],sm={claude:".claude",opencode:".opencode"};function pa(e){if(!e||e==="all")return Bx;if(e==="claude"||e==="opencode")return[e];y('invalid --target "%s" (expected: claude, opencode, all)',e)}function Zx(){let e=process.cwd();for(;;){if((0,X.existsSync)((0,me.join)(e,".claude"))||(0,X.existsSync)((0,me.join)(e,".opencode"))||(0,X.existsSync)((0,me.join)(e,".git"))||(0,X.existsSync)((0,me.join)(e,"package.json")))return e;let t=(0,me.resolve)(e,"..");if(t===e)return process.cwd();e=t}}function ma(e){return e?(0,CD.homedir)():Zx()}function fa(e,t,n,i){let r=sm[i];return n==="skill"?(0,me.join)(e,r,"skills",t):(0,me.join)(e,r,"agents",`${t}.md`)}function Lx(e,t){let n=(0,me.join)(e,sm[t],"skills");return(0,X.existsSync)(n)?(0,X.readdirSync)(n,{withFileTypes:!0}).filter(i=>i.isDirectory()&&(0,X.existsSync)((0,me.join)(n,i.name,"SKILL.md"))).map(i=>i.name):[]}function Mx(e,t){let n=(0,me.join)(e,sm[t],"agents");return(0,X.existsSync)(n)?(0,X.readdirSync)(n).filter(i=>i.endsWith(".md")).map(i=>i.slice(0,-3)):[]}function _D(e,t){let n=new Map;for(let i of t){for(let r of Lx(e,i)){let o=`skill:${r}`,a=n.get(o);a?a.targets.push(i):n.set(o,{name:r,type:"skill",targets:[i]})}for(let r of Mx(e,i)){let o=`agent:${r}`,a=n.get(o);a?a.targets.push(i):n.set(o,{name:r,type:"agent",targets:[i]})}}return[...n.values()].sort((i,r)=>i.type!==r.type?i.type==="skill"?-1:1:i.name.localeCompare(r.name))}function xD(e,t){let n=ca(e);for(let i of Object.keys(n)){if(i.endsWith("/"))continue;let r=(0,me.join)(t,i);(0,X.mkdirSync)((0,me.dirname)(r),{recursive:!0}),(0,X.writeFileSync)(r,n[i])}}function wD(e,t){let n=ca(e),i=Object.keys(n).find(r=>r.endsWith(".md"));if(!i)throw new Error("no .md file found in agent archive");(0,X.mkdirSync)((0,me.dirname)(t),{recursive:!0}),(0,X.writeFileSync)(t,n[i])}function om(e,t){let n=e.slice(0,12),i=e.slice(12,28),r=e.slice(28),o=(0,kD.createDecipheriv)("aes-256-gcm",t,Buffer.from(n));return o.setAuthTag(Buffer.from(i)),new Uint8Array(Buffer.concat([o.update(Buffer.from(r)),o.final()]))}async function am(){let e=process.env.AGENT_KIT_ENCRYPTION_KEY;if(e)return Buffer.from(e,"hex");let{profile:t,token:n}=await En(),i=t.services["kit-key"];return i||y("no kit-key service URL configured in profile"),$D(n,i)}var ha=["--target <value>","install target: claude, opencode, all (default: all)"];function qx(){let e=new z("agent-kit").description("Manage skills, agents, and personas from @zenku/agent-kit");return e.command("list").description("List available skills, agents, and personas from @zenku/agent-kit").option("--skills","show skills only").option("--agents","show agents only").option("--personas","show personas only").action(async t=>{let n=await k("Fetching kit catalog...",()=>jn()),i=n.items;t.skills&&(i=i.filter(r=>r.type==="skill")),t.agents&&(i=i.filter(r=>r.type==="agent")),t.personas&&(i=i.filter(r=>r.type==="persona")),v({json:()=>({version:n.version,items:i}),human:()=>{E("@zenku/agent-kit v%s",n.version),L(["NAME","TYPE","DESCRIPTION"],i.map(r=>[r.name,r.type,pt(r.description,60)]))}})}),e.command("info").description("Show metadata for a skill, agent, or persona").argument("<name>","skill, agent, or persona name").action(async t=>{let n=await k("Authenticating...",()=>am()),{item:i,files:r,version:o}=await k("Fetching kit catalog...",async()=>{let a=await jn(),s=la(a,t);s||y('"%s" not found in agent-kit (run `zenku agent-kit list` to see available items)',t);let u=await da(s.name,s.type),c=om(u,n),l=ca(c),d=Object.keys(l).filter(p=>!p.endsWith("/")).sort();return{item:s,files:d,version:a.version}});v({json:()=>({version:o,...i,files:r}),human:()=>{process.stdout.write(`Name: ${i.name}
230
230
  `),process.stdout.write(`Type: ${i.type}
231
231
  `),process.stdout.write(`Kit version: ${o}
232
232
  `),i.model&&process.stdout.write(`Model: ${i.model}
@@ -254,4 +254,4 @@ ${JSON.stringify(o.data,null,2)}
254
254
  `),process.stdout.write(`Timezone: ${Q(o.timezone)}
255
255
  `),process.stdout.write(`Next Run: ${qt(o.next)}
256
256
  `)}})}),t.command("upsert").description("Create or update a scheduler").requiredOption("-q, --queue <name>","queue name").requiredOption("--id <id>","scheduler ID").requiredOption("--pattern <cron>","cron pattern").option("--timezone <tz>","timezone (e.g., America/New_York)").option("--data <json>","job data as JSON string").action(async n=>{let i={queue:n.queue,id:n.id,pattern:n.pattern};if(n.timezone&&(i.timezone=n.timezone),n.data)try{i.data=JSON.parse(n.data)}catch{y("invalid JSON for --data")}let r=await K("jobs"),o=await k("Upserting scheduler...",()=>r.mutate("schedulers.upsert",i));v({json:()=>o,human:()=>I("Scheduler upserted: %s",o.schedulerId)})}),t.command("remove").description("Remove a scheduler").requiredOption("-q, --queue <name>","queue name").argument("<id>","scheduler ID").action(async(n,i)=>{let r=await K("jobs");await k("Removing scheduler...",()=>r.mutate("schedulers.remove",{queue:i.queue,id:n})),v({json:()=>({success:!0,id:n,queue:i.queue}),human:()=>I("Scheduler %s removed",n)})}),e.addCommand(t),e.command("web").description("Open the Bull Board dashboard in the browser").option("--no-open","print the URL without opening the browser").action(async({open:n})=>{let i=oe(ue()),{profile:r}=se(i),o=r.services.jobs;o||y("no jobs API URL configured (run `zenku profile show` to check)");let a=`${o.replace(/\/+$/,"")}/dashboard`;if(n){let s=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";(0,SD.exec)(`${s} "${a}"`)}v({json:()=>({url:a}),human:()=>E("Opening %s",a)})}),e}function ED(e){e.addCommand(Vx())}var le=require("node:fs"),Se=require("node:path"),Un=require("node:os");function um(e){return e||(process.env.CLAUDE_CONFIG_DIR?process.env.CLAUDE_CONFIG_DIR:(0,Se.join)((0,Un.homedir)(),".claude"))}function FD(e){return e||(process.env.ZENKU_MACHINE_ID?process.env.ZENKU_MACHINE_ID:(0,Un.hostname)())}function cm(e){let t=[],n;try{n=(0,le.readdirSync)(e,{withFileTypes:!0})}catch{return t}for(let i of n){let r=(0,Se.join)(e,i.name);i.isDirectory()?t.push(...cm(r)):i.isFile()&&i.name.endsWith(".jsonl")&&t.push(r)}return t}function it(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Wx(e,t){let n=(0,le.statSync)(e);return Date.now()-n.mtimeMs>=t*86400*1e3}function OD(e,t,n){let i=(0,Se.relative)(t,e);return`${n}/${i}`}function lm(e){return e.replace(/'/g,"\\'")}async function zD(e,t,n,i,r,o,a){let u=(0,le.statSync)(t).size,c=null;try{let p=await e.collection("session_files").getFirstListItem(`key='${lm(n)}'`);c={id:p.id,size:p.size}}catch{}if(c&&c.size===u)return{status:"skipped",key:n,size:u};if(a)return c?E("[DRY-RUN] Would update: %s (%s -> %s)",n,it(c.size),it(u)):E("[DRY-RUN] Would upload: %s (%s)",n,it(u)),{status:c?"updated":"uploaded",key:n,size:u};let l=(0,le.readFileSync)(t),d=new File([l],(0,Se.basename)(t),{type:"application/x-ndjson"});try{return c?(await e.collection("session_files").update(c.id,{size:u,file:d}),I("Updated: %s (%s -> %s)",n,it(c.size),it(u)),{status:"updated",key:n,size:u}):(await e.collection("session_files").create({key:n,machine_id:i,size:u,tenant_id:r,account_id:o,file:d}),I("Uploaded: %s (%s)",n,it(u)),{status:"uploaded",key:n,size:u})}catch(p){let f=p instanceof Error?p.message:String(p);return{status:"failed",key:n,size:u,error:f}}}function Gx(){let e=new z("sessions").description("Upload and manage Claude Code session transcripts");return e.command("sync").description("Scan local Claude Code sessions and upload new/changed files").option("--machine-id <id>","machine identifier for R2 key namespacing").option("--claude-dir <path>","Claude config directory").option("--dry-run","show what would be uploaded without uploading").option("--cleanup-days <days>","delete local files older than N days after successful upload").action(async t=>{let n=um(t.claudeDir),i=FD(t.machineId),r=t.dryRun??!1,o=t.cleanupDays?Number(t.cleanupDays):0;o&&(Number.isNaN(o)||o<1)&&y("--cleanup-days requires a positive integer");let a=(0,Se.join)(n,"projects"),s=cm(a);if(s.length===0){E("No session files found in %s",a);return}let{client:u,profile:c}=await P("library"),l=Ge(c),d=Je(c);o>0&&E("Cleanup mode: syncing files older than %s days",o),E("Scanning %s sessions in %s",s.length,a);let p=0,f=0,g=0,x=0,S=0,N=0;for(let H of s){if(o>0&&!Wx(H,o)){N++;continue}let O=OD(H,a,i),W=await zD(u,H,O,i,l,d,r);switch(W.status){case"uploaded":p++;break;case"updated":f++;break;case"skipped":g++;break;case"failed":E("Failed: %s \u2014 %s",O,W.error),x++;continue}if(o>0)if(r)E("[DRY-RUN] Would delete local: %s",H);else try{(0,le.unlinkSync)(H),S++}catch{E("Failed to delete local: %s",H)}}E(""),o>0?E("Summary: %s total, %s too new (<%sd), %s uploaded, %s updated, %s unchanged, %s deleted locally, %s failed",s.length,N,o,p,f,g,S,x):E("Summary: %s total, %s uploaded, %s updated, %s unchanged, %s failed",s.length,p,f,g,x)}),e.command("list").description("List Claude Code session files").option("--remote","list uploaded session files from PocketBase").option("--claude-dir <path>","Claude config directory").action(async t=>{if(t.remote){let{client:n}=await P("library"),i=await k("Fetching session files...",()=>n.collection("session_files").getList(1,200,{sort:"-created"}));v({json:()=>i.items,human:()=>{let r=i.items.map(o=>[o.id,o.key,o.machine_id,it(o.size),o.created]);L(["ID","KEY","MACHINE","SIZE","CREATED"],r)}})}else{let n=um(t.claudeDir),i=(0,Se.join)(n,"projects"),r=cm(i);v({json:()=>r.map(o=>{let a=(0,le.statSync)(o);return{path:o,size:a.size,modified:a.mtime}}),human:()=>{let o=r.map(a=>{let s=(0,le.statSync)(a);return[(0,Se.relative)(i,a),it(s.size),s.mtime.toISOString().slice(0,19)]});L(["PATH","SIZE","MODIFIED"],o),E(`
257
- %s files, %s total`,r.length,it(r.reduce((a,s)=>a+(0,le.statSync)(s).size,0)))}})}}),e.command("upload").description("Upload a single session file").option("--hook","hook mode: read session path from stdin JSON").option("--machine-id <id>","machine identifier for R2 key namespacing").option("--claude-dir <path>","Claude config directory").argument("[file]","path to .jsonl file (when not using --hook)").action(async(t,n)=>{let i=um(n.claudeDir),r=FD(n.machineId),o=(0,Se.join)(i,"projects"),a;if(n.hook){let f;try{f=(0,le.readFileSync)(0,"utf-8")}catch{y("failed to read from stdin")}let g;try{g=JSON.parse(f)}catch{y("invalid JSON on stdin")}let x=g.transcript_path;x||y("no transcript_path in hook input"),a=x.replace(/^~/,(0,Un.homedir)())}else t?a=t:y("provide a file path or use --hook to read from stdin");try{(0,le.statSync)(a)}catch{y("file not found: %s",a)}let s=OD(a,o,r),{client:u,profile:c}=await P("library"),l=Ge(c),d=Je(c),p=await zD(u,a,s,r,l,d,!1);p.status==="failed"&&y("upload failed: %s",p.error),v({json:()=>p,human:()=>{p.status==="skipped"&&E("Skipped (unchanged): %s",s)}})}),e.command("download").description("Download session files from PocketBase").argument("[dir]","output directory",".").option("--key <key>","download a specific file by key").option("--machine-id <id>","download all files from a specific machine").action(async(t,n)=>{let{client:i}=await P("library"),r=[];n.key&&r.push(`key='${lm(n.key)}'`),n.machineId&&r.push(`machine_id='${lm(n.machineId)}'`);let o=r.length>0?r.join(" && "):"",a=await k("Fetching session files...",()=>i.collection("session_files").getFullList({sort:"key",filter:o}));if(a.length===0){E("No session files found");return}E("Downloading %s files to %s",a.length,t);let s=await i.files.getToken(),u=0,c=0;for(let l of a){let d=l.key,p=l.file,f=(0,Se.join)(t,d),g=i.files.getURL(l,p,{token:s});try{let x=await fetch(g);if(!x.ok){E("Failed: %s \u2014 HTTP %s",d,x.status),c++;continue}let S=Buffer.from(await x.arrayBuffer());(0,le.mkdirSync)((0,Se.dirname)(f),{recursive:!0}),(0,le.writeFileSync)(f,S),I("Downloaded: %s (%s)",d,it(S.length)),u++}catch(x){let S=x instanceof Error?x.message:String(x);E("Failed: %s \u2014 %s",d,S),c++}}E(""),E("Summary: %s total, %s downloaded, %s failed",a.length,u,c),v({json:()=>a.map(l=>({id:l.id,key:l.key,machine_id:l.machine_id,size:l.size})),human:()=>{}})}),e}function PD(e){e.addCommand(Gx())}var ga=require("node:child_process"),he=require("node:fs"),TD=require("node:os"),St=require("node:path");function AD(){return!0}var jD="https://registry.npmjs.org",Jx=15e3,UD="@zenku";function Kx(){let{platform:e,arch:t}=process,n=["darwin-arm64","darwin-x64","linux-arm64","linux-x64"],i=`${e}-${t}`;return n.includes(i)||y("Unsupported platform: %s",i),`cli-${i}`}async function Hx(e){let t=`${jD}/${UD}/${e}/latest`,n=new AbortController,i=setTimeout(()=>n.abort(),Jx);try{let r=await fetch(t,{signal:n.signal});if(!r.ok)throw new Error(`HTTP ${r.status}`);return(await r.json()).version}catch(r){throw r instanceof DOMException&&r.name==="AbortError"?new Error("request timed out"):r}finally{clearTimeout(i)}}function Yx(e,t){let n=`${e}-${t}.tgz`,i=`${jD}/${UD}/${e}/-/${n}`,r=(0,he.mkdtempSync)((0,St.join)((0,TD.tmpdir)(),"zenku-upgrade-"));try{(0,ga.execSync)(`curl -fsSL "${i}" -o "${(0,St.join)(r,n)}"`,{stdio:"pipe"}),(0,ga.execSync)(`tar xzf "${(0,St.join)(r,n)}" -C "${r}"`,{stdio:"pipe"});let o=(0,St.join)(r,"package","zenku"),a=process.execPath,s=(0,St.dirname)(a),u=(0,St.join)(s,`.zenku-upgrade-${process.pid}`),c=!1;try{(0,he.accessSync)(s,he.constants.W_OK)}catch{c=!0}if(c)(0,ga.execSync)(`sudo install -m 755 "${o}" "${a}"`,{stdio:"inherit"});else{(0,he.copyFileSync)(o,u),(0,he.chmodSync)(u,493);try{(0,he.renameSync)(u,a)}catch{try{(0,he.unlinkSync)(u)}catch{}throw new Error(`failed to replace binary at ${a}`)}}}finally{(0,he.rmSync)(r,{recursive:!0,force:!0})}}function ND(e){e.addCommand(new z("upgrade").description("Upgrade zenku to the latest version").action(async()=>{if(AD()){v({json:()=>({mode:"bundle",message:"Self-upgrade not available in bundle mode. Use: npm update -g @zenku/cli-node"}),human:()=>{E("Self-upgrade is not available in bundle mode."),E("Update via npm: npm update -g @zenku/cli-node")}});return}let t=dm(),n=Kx(),i=await k("Checking for updates...",()=>Hx(n));if(t===i){v({json:()=>({previous:t,latest:i,upgraded:!1}),human:()=>E("Already up to date (v%s).",t)});return}E("v%s \u2192 v%s",t,i),await k(`Downloading v${i}...`,async()=>{Yx(n,i)}),v({json:()=>({previous:t,latest:i,upgraded:!0}),human:()=>E("Upgraded zenku to v%s.",i)})}))}var Xx={};function dm(){return"0.1.33"}function ZD(){let e=new z;return e.name("zenku").description("Zenku CLI \u2014 manage PocketBase services from the terminal.").version(dm()).option("--profile <name>","config profile to use").option("--tenant <id>","override tenant ID for this command").option("--account <id>","override account ID for this command").option("--json","output as JSON").option("--interactive","force interactive mode").option("--non-interactive","force non-interactive mode").hook("preAction",t=>{let n=t.optsWithGlobals();Wv(n.profile??""),zv(n.tenant??""),Pv(n.account??""),Ev(!!n.json),n.interactive&&n.nonInteractive&&y("--interactive and --non-interactive cannot be used together"),n.interactive?Md("interactive"):n.nonInteractive&&Md("non-interactive")}),e.commandsGroup("Core Commands:"),oD(e),uD(e),lD(e),ID(e),e.commandsGroup("Platform Commands:"),rD(e),nD(e),ED(e),e.commandsGroup("Auth & Config:"),Hv(e),Yv(e),Xv(e),eD(e),e.commandsGroup("Other:"),PD(e),ND(e),e.addHelpCommand(new z("help").argument("[command]")),e}var Qx=ZD();Qx.parse();
257
+ %s files, %s total`,r.length,it(r.reduce((a,s)=>a+(0,le.statSync)(s).size,0)))}})}}),e.command("upload").description("Upload a single session file").option("--hook","hook mode: read session path from stdin JSON").option("--machine-id <id>","machine identifier for R2 key namespacing").option("--claude-dir <path>","Claude config directory").argument("[file]","path to .jsonl file (when not using --hook)").action(async(t,n)=>{let i=um(n.claudeDir),r=FD(n.machineId),o=(0,Se.join)(i,"projects"),a;if(n.hook){let f;try{f=(0,le.readFileSync)(0,"utf-8")}catch{y("failed to read from stdin")}let g;try{g=JSON.parse(f)}catch{y("invalid JSON on stdin")}let x=g.transcript_path;x||y("no transcript_path in hook input"),a=x.replace(/^~/,(0,Un.homedir)())}else t?a=t:y("provide a file path or use --hook to read from stdin");try{(0,le.statSync)(a)}catch{y("file not found: %s",a)}let s=OD(a,o,r),{client:u,profile:c}=await P("library"),l=Ge(c),d=Je(c),p=await zD(u,a,s,r,l,d,!1);p.status==="failed"&&y("upload failed: %s",p.error),v({json:()=>p,human:()=>{p.status==="skipped"&&E("Skipped (unchanged): %s",s)}})}),e.command("download").description("Download session files from PocketBase").argument("[dir]","output directory",".").option("--key <key>","download a specific file by key").option("--machine-id <id>","download all files from a specific machine").action(async(t,n)=>{let{client:i}=await P("library"),r=[];n.key&&r.push(`key='${lm(n.key)}'`),n.machineId&&r.push(`machine_id='${lm(n.machineId)}'`);let o=r.length>0?r.join(" && "):"",a=await k("Fetching session files...",()=>i.collection("session_files").getFullList({sort:"key",filter:o}));if(a.length===0){E("No session files found");return}E("Downloading %s files to %s",a.length,t);let s=await i.files.getToken(),u=0,c=0;for(let l of a){let d=l.key,p=l.file,f=(0,Se.join)(t,d),g=i.files.getURL(l,p,{token:s});try{let x=await fetch(g);if(!x.ok){E("Failed: %s \u2014 HTTP %s",d,x.status),c++;continue}let S=Buffer.from(await x.arrayBuffer());(0,le.mkdirSync)((0,Se.dirname)(f),{recursive:!0}),(0,le.writeFileSync)(f,S),I("Downloaded: %s (%s)",d,it(S.length)),u++}catch(x){let S=x instanceof Error?x.message:String(x);E("Failed: %s \u2014 %s",d,S),c++}}E(""),E("Summary: %s total, %s downloaded, %s failed",a.length,u,c),v({json:()=>a.map(l=>({id:l.id,key:l.key,machine_id:l.machine_id,size:l.size})),human:()=>{}})}),e}function PD(e){e.addCommand(Gx())}var ga=require("node:child_process"),he=require("node:fs"),TD=require("node:os"),St=require("node:path");function AD(){return!0}var jD="https://registry.npmjs.org",Jx=15e3,UD="@zenku";function Kx(){let{platform:e,arch:t}=process,n=["darwin-arm64","darwin-x64","linux-arm64","linux-x64"],i=`${e}-${t}`;return n.includes(i)||y("Unsupported platform: %s",i),`cli-${i}`}async function Hx(e){let t=`${jD}/${UD}/${e}/latest`,n=new AbortController,i=setTimeout(()=>n.abort(),Jx);try{let r=await fetch(t,{signal:n.signal});if(!r.ok)throw new Error(`HTTP ${r.status}`);return(await r.json()).version}catch(r){throw r instanceof DOMException&&r.name==="AbortError"?new Error("request timed out"):r}finally{clearTimeout(i)}}function Yx(e,t){let n=`${e}-${t}.tgz`,i=`${jD}/${UD}/${e}/-/${n}`,r=(0,he.mkdtempSync)((0,St.join)((0,TD.tmpdir)(),"zenku-upgrade-"));try{(0,ga.execSync)(`curl -fsSL "${i}" -o "${(0,St.join)(r,n)}"`,{stdio:"pipe"}),(0,ga.execSync)(`tar xzf "${(0,St.join)(r,n)}" -C "${r}"`,{stdio:"pipe"});let o=(0,St.join)(r,"package","zenku"),a=process.execPath,s=(0,St.dirname)(a),u=(0,St.join)(s,`.zenku-upgrade-${process.pid}`),c=!1;try{(0,he.accessSync)(s,he.constants.W_OK)}catch{c=!0}if(c)(0,ga.execSync)(`sudo install -m 755 "${o}" "${a}"`,{stdio:"inherit"});else{(0,he.copyFileSync)(o,u),(0,he.chmodSync)(u,493);try{(0,he.renameSync)(u,a)}catch{try{(0,he.unlinkSync)(u)}catch{}throw new Error(`failed to replace binary at ${a}`)}}}finally{(0,he.rmSync)(r,{recursive:!0,force:!0})}}function ND(e){e.addCommand(new z("upgrade").description("Upgrade zenku to the latest version").action(async()=>{if(AD()){v({json:()=>({mode:"bundle",message:"Self-upgrade not available in bundle mode. Use: npm update -g @zenku/cli-node"}),human:()=>{E("Self-upgrade is not available in bundle mode."),E("Update via npm: npm update -g @zenku/cli-node")}});return}let t=dm(),n=Kx(),i=await k("Checking for updates...",()=>Hx(n));if(t===i){v({json:()=>({previous:t,latest:i,upgraded:!1}),human:()=>E("Already up to date (v%s).",t)});return}E("v%s \u2192 v%s",t,i),await k(`Downloading v${i}...`,async()=>{Yx(n,i)}),v({json:()=>({previous:t,latest:i,upgraded:!0}),human:()=>E("Upgraded zenku to v%s.",i)})}))}var Xx={};function dm(){return"0.1.34"}function ZD(){let e=new z;return e.name("zenku").description("Zenku CLI \u2014 manage PocketBase services from the terminal.").version(dm()).option("--profile <name>","config profile to use").option("--tenant <id>","override tenant ID for this command").option("--account <id>","override account ID for this command").option("--json","output as JSON").option("--interactive","force interactive mode").option("--non-interactive","force non-interactive mode").hook("preAction",t=>{let n=t.optsWithGlobals();Wv(n.profile??""),zv(n.tenant??""),Pv(n.account??""),Ev(!!n.json),n.interactive&&n.nonInteractive&&y("--interactive and --non-interactive cannot be used together"),n.interactive?Md("interactive"):n.nonInteractive&&Md("non-interactive")}),e.commandsGroup("Core Commands:"),oD(e),uD(e),lD(e),ID(e),e.commandsGroup("Platform Commands:"),rD(e),nD(e),ED(e),e.commandsGroup("Auth & Config:"),Hv(e),Yv(e),Xv(e),eD(e),e.commandsGroup("Other:"),PD(e),ND(e),e.addHelpCommand(new z("help").argument("[command]")),e}var Qx=ZD();Qx.parse();