@zibby/cli 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,28 @@
1
1
  #!/usr/bin/env node
2
- var _t=Object.defineProperty;var Ee=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var m=(e,t)=>()=>(e&&(t=e(e=0)),t);var $e=(e,t)=>{for(var r in t)_t(e,r,{get:t[r],enumerable:!0})};var ve,be=m(()=>{ve="ffffffff-ffff-ffff-ffff-ffffffffffff"});var De,ke=m(()=>{De="00000000-0000-0000-0000-000000000000"});var Le,Ce=m(()=>{Le=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i});function bt(e){return typeof e=="string"&&Le.test(e)}var L,F=m(()=>{Ce();L=bt});function Dt(e){if(!L(e))throw TypeError("Invalid UUID");let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,t&255,(t=parseInt(e.slice(9,13),16))>>>8,t&255,(t=parseInt(e.slice(14,18),16))>>>8,t&255,(t=parseInt(e.slice(19,23),16))>>>8,t&255,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255)}var v,G=m(()=>{F();v=Dt});function _(e,t=0){return(y[e[t+0]]+y[e[t+1]]+y[e[t+2]]+y[e[t+3]]+"-"+y[e[t+4]]+y[e[t+5]]+"-"+y[e[t+6]]+y[e[t+7]]+"-"+y[e[t+8]]+y[e[t+9]]+"-"+y[e[t+10]]+y[e[t+11]]+y[e[t+12]]+y[e[t+13]]+y[e[t+14]]+y[e[t+15]]).toLowerCase()}function kt(e,t=0){let r=_(e,t);if(!L(r))throw TypeError("Stringified UUID is invalid");return r}var y,Ne,b=m(()=>{F();y=[];for(let e=0;e<256;++e)y.push((e+256).toString(16).slice(1));Ne=kt});import{randomFillSync as Lt}from"crypto";function D(){return Y>q.length-16&&(Lt(q),Y=0),q.slice(Y,Y+=16)}var q,Y,V=m(()=>{q=new Uint8Array(256),Y=q.length});function Ct(e,t,r){let n,o=e?._v6??!1;if(e){let s=Object.keys(e);s.length===1&&s[0]==="_v6"&&(e=void 0)}if(e)n=je(e.random??e.rng?.()??D(),e.msecs,e.nsecs,e.clockseq,e.node,t,r);else{let s=Date.now(),i=D();Nt(z,s,i),n=je(i,z.msecs,z.nsecs,o?void 0:z.clockseq,o?void 0:z.node,t,r)}return t??_(n)}function Nt(e,t,r){return e.msecs??=-1/0,e.nsecs??=0,t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=r.slice(10,16),e.node[0]|=1,e.clockseq=(r[8]<<8|r[9])&16383),e.msecs=t,e}function je(e,t,r,n,o,s,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!s)s=new Uint8Array(16),i=0;else if(i<0||i+16>s.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);t??=Date.now(),r??=0,n??=(e[8]<<8|e[9])&16383,o??=e.slice(10,16),t+=122192928e5;let f=((t&268435455)*1e4+r)%4294967296;s[i++]=f>>>24&255,s[i++]=f>>>16&255,s[i++]=f>>>8&255,s[i++]=f&255;let a=t/4294967296*1e4&268435455;s[i++]=a>>>8&255,s[i++]=a&255,s[i++]=a>>>24&15|16,s[i++]=a>>>16&255,s[i++]=n>>>8|128,s[i++]=n&255;for(let c=0;c<6;++c)s[i++]=o[c];return s}var z,Z,ce=m(()=>{V();b();z={};Z=Ct});function B(e){let t=typeof e=="string"?v(e):e,r=jt(t);return typeof e=="string"?_(r):r}function jt(e){return Uint8Array.of((e[6]&15)<<4|e[7]>>4&15,(e[7]&15)<<4|(e[4]&240)>>4,(e[4]&15)<<4|(e[5]&240)>>4,(e[5]&15)<<4|(e[0]&240)>>4,(e[0]&15)<<4|(e[1]&240)>>4,(e[1]&15)<<4|(e[2]&240)>>4,96|e[2]&15,e[3],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}var le=m(()=>{G();b()});import{createHash as Kt}from"crypto";function Ft(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Kt("md5").update(e).digest()}var Ke,Fe=m(()=>{Ke=Ft});function Gt(e){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let r=0;r<e.length;++r)t[r]=e.charCodeAt(r);return t}function W(e,t,r,n,o,s){let i=typeof r=="string"?Gt(r):r,f=typeof n=="string"?v(n):n;if(typeof n=="string"&&(n=v(n)),n?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let a=new Uint8Array(16+i.length);if(a.set(f),a.set(i,f.length),a=t(a),a[6]=a[6]&15|e,a[8]=a[8]&63|128,o){if(s=s||0,s<0||s+16>o.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`);for(let c=0;c<16;++c)o[s+c]=a[c];return o}return _(a)}var X,ee,fe=m(()=>{G();b();X="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ee="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function pe(e,t,r,n){return W(48,Ke,e,t,r,n)}var Ge,ze=m(()=>{Fe();fe();pe.DNS=X;pe.URL=ee;Ge=pe});import{randomUUID as zt}from"crypto";var de,Be=m(()=>{de={randomUUID:zt}});function Bt(e,t,r){if(de.randomUUID&&!t&&!e)return de.randomUUID();e=e||{};let n=e.random??e.rng?.()??D();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let o=0;o<16;++o)t[r+o]=n[o];return t}return _(n)}var We,He=m(()=>{Be();V();b();We=Bt});import{createHash as Wt}from"crypto";function Ht(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Wt("sha1").update(e).digest()}var Je,Me=m(()=>{Je=Ht});function ue(e,t,r,n){return W(80,Je,e,t,r,n)}var Qe,Ye=m(()=>{Me();fe();ue.DNS=X;ue.URL=ee;Qe=ue});function Jt(e,t,r){e??={},r??=0;let n=Z({...e,_v6:!0},new Uint8Array(16));if(n=B(n),t){if(r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let o=0;o<16;o++)t[r+o]=n[o];return t}return _(n)}var qe,Ve=m(()=>{b();ce();le();qe=Jt});function ge(e){let t=typeof e=="string"?v(e):e,r=Mt(t);return typeof e=="string"?_(r):r}function Mt(e){return Uint8Array.of((e[3]&15)<<4|e[4]>>4&15,(e[4]&15)<<4|(e[5]&240)>>4,(e[5]&15)<<4|e[6]&15,e[7],(e[1]&15)<<4|(e[2]&240)>>4,(e[2]&15)<<4|(e[3]&240)>>4,16|(e[0]&240)>>4,(e[0]&15)<<4|(e[1]&240)>>4,e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}var Ze=m(()=>{G();b()});function Qt(e,t,r){let n;if(e)n=Xe(e.random??e.rng?.()??D(),e.msecs,e.seq,t,r);else{let o=Date.now(),s=D();Yt(me,o,s),n=Xe(s,me.msecs,me.seq,t,r)}return t??_(n)}function Yt(e,t,r){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],e.msecs=t):(e.seq=e.seq+1|0,e.seq===0&&e.msecs++),e}function Xe(e,t,r,n,o=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!n)n=new Uint8Array(16),o=0;else if(o<0||o+16>n.length)throw new RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`);return t??=Date.now(),r??=e[6]*127<<24|e[7]<<16|e[8]<<8|e[9],n[o++]=t/1099511627776&255,n[o++]=t/4294967296&255,n[o++]=t/16777216&255,n[o++]=t/65536&255,n[o++]=t/256&255,n[o++]=t&255,n[o++]=112|r>>>28&15,n[o++]=r>>>20&255,n[o++]=128|r>>>14&63,n[o++]=r>>>6&255,n[o++]=r<<2&255|e[10]&3,n[o++]=e[11],n[o++]=e[12],n[o++]=e[13],n[o++]=e[14],n[o++]=e[15],n}var me,et,tt=m(()=>{V();b();me={};et=Qt});function qt(e){if(!L(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var rt,ot=m(()=>{F();rt=qt});var nt={};$e(nt,{MAX:()=>ve,NIL:()=>De,parse:()=>v,stringify:()=>Ne,v1:()=>Z,v1ToV6:()=>B,v3:()=>Ge,v4:()=>We,v5:()=>Qe,v6:()=>qe,v6ToV1:()=>ge,v7:()=>et,validate:()=>L,version:()=>rt});var it=m(()=>{be();ke();G();b();ce();le();ze();He();Ye();Ve();Ze();tt();F();ot()});var ft={};$e(ft,{uploadSessionArtifacts:()=>ar});import{readdirSync as at,statSync as he,createReadStream as Vt,existsSync as Zt}from"node:fs";import{join as ct,relative as Xt,sep as er,extname as tr}from"node:path";function ir(e){let t=tr(e).toLowerCase();return nr[t]||"application/octet-stream"}function lt(e){let t=[],r;try{r=at(e)}catch{return t}for(let n of r){if(rr.has(n)||n.startsWith(".")||or.has(n))continue;let o=ct(e,n),s;try{s=he(o)}catch{continue}s.isDirectory()?t.push(...lt(o)):s.isFile()&&t.push(o)}return t}async function sr({apiUrl:e,apiKey:t,executionId:r,nodeName:n,filename:o,absolutePath:s,sizeBytes:i,contentType:f}){let a;try{let c=await fetch(`${e}/${r}/artifacts/upload-url`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({nodeName:n,filename:o,contentType:f,sizeBytes:i})});if(!c.ok){let l=await c.text();return console.warn(`[artifacts] upload-url failed for ${n}/${o}: ${c.status} ${l.slice(0,200)}`),null}a=await c.json()}catch(c){return console.warn(`[artifacts] upload-url request errored for ${n}/${o}: ${c.message}`),null}try{let c=Vt(s),l=a.requiredHeaders?{...a.requiredHeaders,"Content-Length":String(i)}:{"Content-Type":f,"Content-Length":String(i)},u=await fetch(a.url,{method:"PUT",headers:l,body:c,duplex:"half"});if(!u.ok)return console.warn(`[artifacts] S3 PUT failed for ${n}/${o}: ${u.status}`),null}catch(c){return console.warn(`[artifacts] S3 PUT errored for ${n}/${o}: ${c.message}`),null}return{nodeName:n,filename:o,s3Key:a.s3Key,contentType:f,sizeBytes:i}}async function ar({sessionPath:e,executionId:t,apiUrl:r,apiKey:n}){let o={uploaded:[],skipped:[]};if(!e||!Zt(e))return o;if(!r||!n||!t)return console.warn("[artifacts] uploader missing required input \u2014 skipping"),o;let s;try{s=at(e)}catch(l){return console.warn(`[artifacts] could not read session folder ${e}: ${l.message}`),o}let i=[];for(let l of s){let u=ct(e,l),d;try{d=he(u)}catch{continue}if(!d.isDirectory()||l.startsWith(".")||l.startsWith("_"))continue;let k=lt(u);for(let x of k){let T=Xt(u,x).split(er).join("/"),U;try{U=he(x).size}catch{continue}if(U>st){o.skipped.push({nodeName:l,filename:T,reason:`size ${U} > ${st}`});continue}if(U===0){o.skipped.push({nodeName:l,filename:T,reason:"empty"});continue}i.push({apiUrl:r,apiKey:n,executionId:t,nodeName:l,filename:T,absolutePath:x,sizeBytes:U,contentType:ir(T)})}}if(i.length===0)return o;let f=4,a=i.slice(),c=Array.from({length:Math.min(f,a.length)},async()=>{for(;a.length;){let l=a.shift(),u=await sr(l);u?o.uploaded.push(u):o.skipped.push({nodeName:l.nodeName,filename:l.filename,reason:"upload failed"})}});if(await Promise.all(c),o.uploaded.length>0)try{let l=await fetch(`${r}/${t}/artifacts`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({files:o.uploaded})});if(!l.ok){let u=await l.text();console.warn(`[artifacts] record failed: ${l.status} ${u.slice(0,200)}`)}}catch(l){console.warn(`[artifacts] record errored: ${l.message}`)}return o}var st,rr,or,nr,pt=m(()=>{st=500*1024*1024,rr=new Set([".DS_Store","Thumbs.db",".zibby-stop"]),or=new Set(["node_modules",".git","dist",".zibby","__tests__","__mocks__",".cache",".next",".turbo"]),nr={".webm":"video/webm",".mp4":"video/mp4",".mov":"video/quicktime",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".log":"text/plain",".json":"application/json",".yaml":"application/yaml",".yml":"application/yaml",".pdf":"application/pdf",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip"}});import{mkdirSync as ht,writeFileSync as cr,existsSync as C,readFileSync as dt}from"fs";import{join as A,dirname as lr,resolve as ut}from"path";import{pathToFileURL as ye}from"url";import{execSync as fr,spawn as gt}from"node:child_process";import{SQSClient as Et,SendMessageCommand as $t}from"@aws-sdk/client-sqs";var ne=null;function Rt(){return ne||(ne=new Et({region:process.env.AWS_REGION||"ap-southeast-2"})),ne}async function Re(e,t,r,n){let{EXECUTION_ID:o,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=n;if(!o)return;let c={executionId:o,...s&&{sqsAuthToken:s},step:{name:e,status:t,logs:r,timestamp:new Date().toISOString(),...t==="success"&&{completedAt:new Date().toISOString()}},status:t==="failed"?"failed":"running"};try{i?await ie(i,o,c,a):f&&await se(f,o,c)}catch(l){console.error(`\u26A0\uFE0F Failed to send progress: ${l.message}`)}}async function Ue(e,t,r){let{EXECUTION_ID:n,SQS_AUTH_TOKEN:o,PROGRESS_API_URL:s,PROGRESS_QUEUE_URL:i,PROJECT_API_TOKEN:f}=e;if(!n||!r)return;let a=JSON.stringify(r).length;console.log(`Sending artifact: ${t} (${(a/1024).toFixed(1)}KB)`);let c={executionId:n,...o&&{sqsAuthToken:o},artifacts:{[t]:r},timestamp:new Date().toISOString()},l=s?"HTTP":i?"SQS":"NONE",u=JSON.stringify(c).length;try{if(s)await ie(s,n,c,f);else if(i)await se(i,n,c);else{console.warn(`\u26A0\uFE0F No transport configured for artifact ${t} \u2014 neither PROGRESS_API_URL nor PROGRESS_QUEUE_URL set`);return}console.log(`Artifact ${t} sent via ${l} (payload=${(u/1024).toFixed(1)}KB, value=${(a/1024).toFixed(1)}KB)`)}catch(d){console.error(`Failed to send artifact ${t} via ${l}:`),console.error(` Payload size: ${(u/1024).toFixed(1)}KB, Value size: ${(a/1024).toFixed(1)}KB`),console.error(` Error: ${d.message}`),d.name&&console.error(` Error type: ${d.name}`),d.code&&console.error(` Error code: ${d.code}`),u>256*1024&&console.error(" \u26A0\uFE0F Message exceeds SQS 256KB limit! Consider splitting or compressing.")}}async function Oe(e,{status:t,error:r,finalState:n}){let{EXECUTION_ID:o,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=e;if(!o)return;let c={executionId:o,...s&&{sqsAuthToken:s},status:t,...r&&{error:r},...n&&typeof n=="object"&&Object.keys(n).length>0?{finalState:n}:{},timestamp:new Date().toISOString()},l=i?"HTTP":f?"SQS":"NONE",u=JSON.stringify(c).length;console.log(`Sending final status: ${t} via ${l} (${(u/1024).toFixed(1)}KB)`);try{if(i)await ie(i,o,c,a);else if(f){let d=["completed","failed","insufficient_context","blocked"].includes(t)?"execution_completed":"progress_update";await se(f,o,c,d)}else{console.warn("No transport configured for final status \u2014 neither PROGRESS_API_URL nor PROGRESS_QUEUE_URL set");return}console.log(`Final status ${t} sent via ${l}`)}catch(d){console.error(`Failed to send final status (${t}) via ${l}:`),console.error(` Payload: ${(u/1024).toFixed(1)}KB`),console.error(` Error: ${d.message}`),d.name&&console.error(` Error type: ${d.name}`),d.code&&console.error(` Error code: ${d.code}`)}}async function ie(e,t,r,n){let o=`${e}/${t}/progress`,s={"Content-Type":"application/json"};n&&(s.Authorization=`Bearer ${n}`);let i=await fetch(o,{method:"POST",headers:s,body:JSON.stringify(r)});if(!i.ok){let f=await i.text();throw new Error(`HTTP ${i.status}: ${f}`)}}async function se(e,t,r,n="progress_update"){let o=JSON.stringify(r),s=(o.length/1024).toFixed(1);o.length>256*1024&&console.error(`\u274C SQS message too large: ${s}KB (limit 256KB) for ${t} [${n}]`),await Rt().send(new $t({QueueUrl:e,MessageBody:o,MessageGroupId:t,MessageAttributes:{executionId:{DataType:"String",StringValue:t},messageType:{DataType:"String",StringValue:n}}}))}function Ut(e,t){try{let r=e?.sessionPath||e?.SESSION_PATH||process.env.ZIBBY_SESSION_PATH;if(!r||!t)return null;let n=Ee("fs"),s=Ee("path").join(r,t,"usage.json");if(!n.existsSync(s))return null;let i=n.readFileSync(s,"utf-8"),f=JSON.parse(i);return!f.input_tokens&&!f.output_tokens&&!f.inputTokens&&!f.outputTokens?null:f}catch{return null}}function Ie(e,t,r=null){return async function(o,s,i){let f=Date.now(),a=[],c="",l=console.log,u=process.stdout.write.bind(process.stdout),d=process.stderr.write.bind(process.stderr),k=!1;console.log=(...g)=>{let S=g.map(E=>typeof E=="string"?E:JSON.stringify(E)).join(" ");a.push(S),k=!0,l(...g),k=!1};let x="";process.stdout.write=(g,S,E)=>{if(!k){let N=typeof g=="string"?g:g.toString();x+=N;let h=x.split(`
3
- `);x=h.pop()||"";for(let J of h){let M=J.trim();M&&a.push(M)}}return u(g,S,E)},l(`[Middleware] Started capturing logs for ${o}`);let T=!1,U=setInterval(()=>{if(T)return;let g=a.join(`
4
- `);g!==c&&g.length>0&&(c=g,d(`\u{1F4E1} [Middleware] Sending live update for ${o}: ${g.length} chars, ${a.length} lines
5
- `),e(o,"in_progress",g,i).catch(S=>{d(`\u26A0\uFE0F [Middleware] Failed to send live update: ${S.message}
6
- `)}))},500);try{await e(o,"in_progress","",i);let g=await s(),S=((Date.now()-f)/1e3).toFixed(1);T=!0,clearInterval(U),await new Promise(h=>setImmediate(h)),console.log=l,process.stdout.write=u,x.trim()&&(a.push(x.trim()),x="");let E=a.join(`
7
- `);d(`\u{1F4E1} [Middleware] Sending final update for ${o}: ${E.length} chars, ${a.length} total lines captured
8
- `);let N=Ut(i,o);if(N)try{await t(i,`usage_${o}`,N)}catch(h){d(`\u26A0\uFE0F [Middleware] usage ship failed for ${o}: ${h.message}
9
- `)}if(g.success){if(await e(o,"success",E||`Completed in ${S}s`,i),r)try{let h=r(o,g);h&&h.key&&h.value&&await t(i,h.key,h.value)}catch(h){d(`\u26A0\uFE0F [Middleware] artifactExtractor for ${o} threw: ${h.message}
10
- `)}}else await e(o,"failed",`${E}
2
+ var Ct=Object.defineProperty;var Ce=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var y=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ne=(e,t)=>{for(var r in t)Ct(e,r,{get:t[r],enumerable:!0})};var He,Je=y(()=>{He="ffffffff-ffff-ffff-ffff-ffffffffffff"});var Me,Qe=y(()=>{Me="00000000-0000-0000-0000-000000000000"});var Ye,qe=y(()=>{Ye=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i});function Vt(e){return typeof e=="string"&&Ye.test(e)}var F,J=y(()=>{qe();F=Vt});function Xt(e){if(!F(e))throw TypeError("Invalid UUID");let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,t&255,(t=parseInt(e.slice(9,13),16))>>>8,t&255,(t=parseInt(e.slice(14,18),16))>>>8,t&255,(t=parseInt(e.slice(19,23),16))>>>8,t&255,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255)}var C,M=y(()=>{J();C=Xt});function U(e,t=0){return($[e[t+0]]+$[e[t+1]]+$[e[t+2]]+$[e[t+3]]+"-"+$[e[t+4]]+$[e[t+5]]+"-"+$[e[t+6]]+$[e[t+7]]+"-"+$[e[t+8]]+$[e[t+9]]+"-"+$[e[t+10]]+$[e[t+11]]+$[e[t+12]]+$[e[t+13]]+$[e[t+14]]+$[e[t+15]]).toLowerCase()}function Zt(e,t=0){let r=U(e,t);if(!F(r))throw TypeError("Stringified UUID is invalid");return r}var $,Ve,N=y(()=>{J();$=[];for(let e=0;e<256;++e)$.push((e+256).toString(16).slice(1));Ve=Zt});import{randomFillSync as er}from"crypto";function j(){return re>oe.length-16&&(er(oe),re=0),oe.slice(re,re+=16)}var oe,re,ne=y(()=>{oe=new Uint8Array(256),re=oe.length});function tr(e,t,r){let o,n=e?._v6??!1;if(e){let s=Object.keys(e);s.length===1&&s[0]==="_v6"&&(e=void 0)}if(e)o=Xe(e.random??e.rng?.()??j(),e.msecs,e.nsecs,e.clockseq,e.node,t,r);else{let s=Date.now(),i=j();rr(Q,s,i),o=Xe(i,Q.msecs,Q.nsecs,n?void 0:Q.clockseq,n?void 0:Q.node,t,r)}return t??U(o)}function rr(e,t,r){return e.msecs??=-1/0,e.nsecs??=0,t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=r.slice(10,16),e.node[0]|=1,e.clockseq=(r[8]<<8|r[9])&16383),e.msecs=t,e}function Xe(e,t,r,o,n,s,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!s)s=new Uint8Array(16),i=0;else if(i<0||i+16>s.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);t??=Date.now(),r??=0,o??=(e[8]<<8|e[9])&16383,n??=e.slice(10,16),t+=122192928e5;let f=((t&268435455)*1e4+r)%4294967296;s[i++]=f>>>24&255,s[i++]=f>>>16&255,s[i++]=f>>>8&255,s[i++]=f&255;let a=t/4294967296*1e4&268435455;s[i++]=a>>>8&255,s[i++]=a&255,s[i++]=a>>>24&15|16,s[i++]=a>>>16&255,s[i++]=o>>>8|128,s[i++]=o&255;for(let l=0;l<6;++l)s[i++]=n[l];return s}var Q,se,he=y(()=>{ne();N();Q={};se=tr});function Y(e){let t=typeof e=="string"?C(e):e,r=or(t);return typeof e=="string"?U(r):r}function or(e){return Uint8Array.of((e[6]&15)<<4|e[7]>>4&15,(e[7]&15)<<4|(e[4]&240)>>4,(e[4]&15)<<4|(e[5]&240)>>4,(e[5]&15)<<4|(e[0]&240)>>4,(e[0]&15)<<4|(e[1]&240)>>4,(e[1]&15)<<4|(e[2]&240)>>4,96|e[2]&15,e[3],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}var we=y(()=>{M();N()});import{createHash as nr}from"crypto";function sr(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),nr("md5").update(e).digest()}var Ze,et=y(()=>{Ze=sr});function ir(e){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let r=0;r<e.length;++r)t[r]=e.charCodeAt(r);return t}function q(e,t,r,o,n,s){let i=typeof r=="string"?ir(r):r,f=typeof o=="string"?C(o):o;if(typeof o=="string"&&(o=C(o)),o?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let a=new Uint8Array(16+i.length);if(a.set(f),a.set(i,f.length),a=t(a),a[6]=a[6]&15|e,a[8]=a[8]&63|128,n){if(s=s||0,s<0||s+16>n.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`);for(let l=0;l<16;++l)n[s+l]=a[l];return n}return U(a)}var ie,ae,Se=y(()=>{M();N();ie="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ae="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function ye(e,t,r,o){return q(48,Ze,e,t,r,o)}var tt,rt=y(()=>{et();Se();ye.DNS=ie;ye.URL=ae;tt=ye});import{randomUUID as ar}from"crypto";var xe,ot=y(()=>{xe={randomUUID:ar}});function cr(e,t,r){if(xe.randomUUID&&!t&&!e)return xe.randomUUID();e=e||{};let o=e.random??e.rng?.()??j();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)t[r+n]=o[n];return t}return U(o)}var nt,st=y(()=>{ot();ne();N();nt=cr});import{createHash as lr}from"crypto";function fr(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),lr("sha1").update(e).digest()}var it,at=y(()=>{it=fr});function _e(e,t,r,o){return q(80,it,e,t,r,o)}var ct,lt=y(()=>{at();Se();_e.DNS=ie;_e.URL=ae;ct=_e});function pr(e,t,r){e??={},r??=0;let o=se({...e,_v6:!0},new Uint8Array(16));if(o=Y(o),t){if(r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;n++)t[r+n]=o[n];return t}return U(o)}var ft,pt=y(()=>{N();he();we();ft=pr});function Ee(e){let t=typeof e=="string"?C(e):e,r=dr(t);return typeof e=="string"?U(r):r}function dr(e){return Uint8Array.of((e[3]&15)<<4|e[4]>>4&15,(e[4]&15)<<4|(e[5]&240)>>4,(e[5]&15)<<4|e[6]&15,e[7],(e[1]&15)<<4|(e[2]&240)>>4,(e[2]&15)<<4|(e[3]&240)>>4,16|(e[0]&240)>>4,(e[0]&15)<<4|(e[1]&240)>>4,e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}var dt=y(()=>{M();N()});function ur(e,t,r){let o;if(e)o=ut(e.random??e.rng?.()??j(),e.msecs,e.seq,t,r);else{let n=Date.now(),s=j();gr($e,n,s),o=ut(s,$e.msecs,$e.seq,t,r)}return t??U(o)}function gr(e,t,r){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],e.msecs=t):(e.seq=e.seq+1|0,e.seq===0&&e.msecs++),e}function ut(e,t,r,o,n=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!o)o=new Uint8Array(16),n=0;else if(n<0||n+16>o.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);return t??=Date.now(),r??=e[6]*127<<24|e[7]<<16|e[8]<<8|e[9],o[n++]=t/1099511627776&255,o[n++]=t/4294967296&255,o[n++]=t/16777216&255,o[n++]=t/65536&255,o[n++]=t/256&255,o[n++]=t&255,o[n++]=112|r>>>28&15,o[n++]=r>>>20&255,o[n++]=128|r>>>14&63,o[n++]=r>>>6&255,o[n++]=r<<2&255|e[10]&3,o[n++]=e[11],o[n++]=e[12],o[n++]=e[13],o[n++]=e[14],o[n++]=e[15],o}var $e,gt,mt=y(()=>{ne();N();$e={};gt=ur});function mr(e){if(!F(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var ht,wt=y(()=>{J();ht=mr});var St={};Ne(St,{MAX:()=>He,NIL:()=>Me,parse:()=>C,stringify:()=>Ve,v1:()=>se,v1ToV6:()=>Y,v3:()=>tt,v4:()=>nt,v5:()=>ct,v6:()=>ft,v6ToV1:()=>Ee,v7:()=>gt,validate:()=>F,version:()=>ht});var yt=y(()=>{Je();Qe();M();N();he();we();rt();st();lt();pt();dt();mt();J();wt()});var Rt={};Ne(Rt,{uploadSessionArtifacts:()=>Or});import{readdirSync as _t,statSync as Re,createReadStream as hr,existsSync as wr}from"node:fs";import{join as Et,relative as Sr,sep as yr,extname as xr}from"node:path";function Rr(e){let t=xr(e).toLowerCase();return $r[t]||"application/octet-stream"}function $t(e){let t=[],r;try{r=_t(e)}catch{return t}for(let o of r){if(_r.has(o)||o.startsWith(".")||Er.has(o))continue;let n=Et(e,o),s;try{s=Re(n)}catch{continue}s.isDirectory()?t.push(...$t(n)):s.isFile()&&t.push(n)}return t}async function Ur({apiUrl:e,apiKey:t,executionId:r,nodeName:o,filename:n,absolutePath:s,sizeBytes:i,contentType:f}){let a;try{let l=await fetch(`${e}/${r}/artifacts/upload-url`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({nodeName:o,filename:n,contentType:f,sizeBytes:i})});if(!l.ok){let c=await l.text();return console.warn(`[artifacts] upload-url failed for ${o}/${n}: ${l.status} ${c.slice(0,200)}`),null}a=await l.json()}catch(l){return console.warn(`[artifacts] upload-url request errored for ${o}/${n}: ${l.message}`),null}try{let l=hr(s),c=a.requiredHeaders?{...a.requiredHeaders,"Content-Length":String(i)}:{"Content-Type":f,"Content-Length":String(i)},p=await fetch(a.url,{method:"PUT",headers:c,body:l,duplex:"half"});if(!p.ok)return console.warn(`[artifacts] S3 PUT failed for ${o}/${n}: ${p.status}`),null}catch(l){return console.warn(`[artifacts] S3 PUT errored for ${o}/${n}: ${l.message}`),null}return{nodeName:o,filename:n,s3Key:a.s3Key,contentType:f,sizeBytes:i}}async function Or({sessionPath:e,executionId:t,apiUrl:r,apiKey:o}){let n={uploaded:[],skipped:[]};if(!e||!wr(e))return n;if(!r||!o||!t)return console.warn("[artifacts] uploader missing required input \u2014 skipping"),n;let s;try{s=_t(e)}catch(c){return console.warn(`[artifacts] could not read session folder ${e}: ${c.message}`),n}let i=[];for(let c of s){let p=Et(e,c),d;try{d=Re(p)}catch{continue}if(!d.isDirectory()||c.startsWith(".")||c.startsWith("_"))continue;let R=$t(p);for(let S of R){let I=Sr(p,S).split(yr).join("/"),_;try{_=Re(S).size}catch{continue}if(_>xt){n.skipped.push({nodeName:c,filename:I,reason:`size ${_} > ${xt}`});continue}if(_===0){n.skipped.push({nodeName:c,filename:I,reason:"empty"});continue}i.push({apiUrl:r,apiKey:o,executionId:t,nodeName:c,filename:I,absolutePath:S,sizeBytes:_,contentType:Rr(I)})}}if(i.length===0)return n;let f=4,a=i.slice(),l=Array.from({length:Math.min(f,a.length)},async()=>{for(;a.length;){let c=a.shift(),p=await Ur(c);p?n.uploaded.push(p):n.skipped.push({nodeName:c.nodeName,filename:c.filename,reason:"upload failed"})}});if(await Promise.all(l),n.uploaded.length>0)try{let c=await fetch(`${r}/${t}/artifacts`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({files:n.uploaded})});if(!c.ok){let p=await c.text();console.warn(`[artifacts] record failed: ${c.status} ${p.slice(0,200)}`)}}catch(c){console.warn(`[artifacts] record errored: ${c.message}`)}return n}var xt,_r,Er,$r,Ut=y(()=>{xt=500*1024*1024,_r=new Set([".DS_Store","Thumbs.db",".zibby-stop"]),Er=new Set(["node_modules",".git","dist",".zibby","__tests__","__mocks__",".cache",".next",".turbo"]),$r={".webm":"video/webm",".mp4":"video/mp4",".mov":"video/quicktime",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".log":"text/plain",".json":"application/json",".yaml":"application/yaml",".yml":"application/yaml",".pdf":"application/pdf",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip"}});import{mkdirSync as Pt,writeFileSync as Ir,existsSync as G,readFileSync as Ot}from"fs";import{join as D,dirname as Tr,resolve as It}from"path";import{pathToFileURL as Oe}from"url";import{spawn as Ie}from"node:child_process";import{SQSClient as Nt,SendMessageCommand as jt}from"@aws-sdk/client-sqs";var pe=null;function Kt(){return pe||(pe=new Nt({region:process.env.AWS_REGION||"ap-southeast-2"})),pe}async function de(e,t,r,o){let{EXECUTION_ID:n,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=o;if(!n)return;let l={executionId:n,...s&&{sqsAuthToken:s},step:{name:e,status:t,logs:r,timestamp:new Date().toISOString(),...t==="success"&&{completedAt:new Date().toISOString()}},status:t==="failed"?"failed":"running"};try{i?await ue(i,n,l,a):f&&await ge(f,n,l)}catch(c){console.error(`\u26A0\uFE0F Failed to send progress: ${c.message}`)}}async function je(e,t,r){let{EXECUTION_ID:o,SQS_AUTH_TOKEN:n,PROGRESS_API_URL:s,PROGRESS_QUEUE_URL:i,PROJECT_API_TOKEN:f}=e;if(!o||!r)return;let a=JSON.stringify(r).length;console.log(`Sending artifact: ${t} (${(a/1024).toFixed(1)}KB)`);let l={executionId:o,...n&&{sqsAuthToken:n},artifacts:{[t]:r},timestamp:new Date().toISOString()},c=s?"HTTP":i?"SQS":"NONE",p=JSON.stringify(l).length;try{if(s)await ue(s,o,l,f);else if(i)await ge(i,o,l);else{console.warn(`\u26A0\uFE0F No transport configured for artifact ${t} \u2014 neither PROGRESS_API_URL nor PROGRESS_QUEUE_URL set`);return}console.log(`Artifact ${t} sent via ${c} (payload=${(p/1024).toFixed(1)}KB, value=${(a/1024).toFixed(1)}KB)`)}catch(d){console.error(`Failed to send artifact ${t} via ${c}:`),console.error(` Payload size: ${(p/1024).toFixed(1)}KB, Value size: ${(a/1024).toFixed(1)}KB`),console.error(` Error: ${d.message}`),d.name&&console.error(` Error type: ${d.name}`),d.code&&console.error(` Error code: ${d.code}`),p>256*1024&&console.error(" \u26A0\uFE0F Message exceeds SQS 256KB limit! Consider splitting or compressing.")}}async function Ke(e,{status:t,error:r,finalState:o}){let{EXECUTION_ID:n,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=e;if(!n)return;let l={executionId:n,...s&&{sqsAuthToken:s},status:t,...r&&{error:r},...o&&typeof o=="object"&&Object.keys(o).length>0?{finalState:o}:{},timestamp:new Date().toISOString()},c=i?"HTTP":f?"SQS":"NONE",p=JSON.stringify(l).length;console.log(`Sending final status: ${t} via ${c} (${(p/1024).toFixed(1)}KB)`);try{if(i)await ue(i,n,l,a);else if(f){let d=["completed","failed","insufficient_context","blocked"].includes(t)?"execution_completed":"progress_update";await ge(f,n,l,d)}else{console.warn("No transport configured for final status \u2014 neither PROGRESS_API_URL nor PROGRESS_QUEUE_URL set");return}console.log(`Final status ${t} sent via ${c}`)}catch(d){console.error(`Failed to send final status (${t}) via ${c}:`),console.error(` Payload: ${(p/1024).toFixed(1)}KB`),console.error(` Error: ${d.message}`),d.name&&console.error(` Error type: ${d.name}`),d.code&&console.error(` Error code: ${d.code}`)}}async function ue(e,t,r,o){let n=`${e}/${t}/progress`,s={"Content-Type":"application/json"};o&&(s.Authorization=`Bearer ${o}`);let i=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(r)});if(!i.ok){let f=await i.text();throw new Error(`HTTP ${i.status}: ${f}`)}}async function ge(e,t,r,o="progress_update"){let n=JSON.stringify(r),s=(n.length/1024).toFixed(1);n.length>256*1024&&console.error(`\u274C SQS message too large: ${s}KB (limit 256KB) for ${t} [${o}]`),await Kt().send(new jt({QueueUrl:e,MessageBody:n,MessageGroupId:t,MessageAttributes:{executionId:{DataType:"String",StringValue:t},messageType:{DataType:"String",StringValue:o}}}))}function Ft(e,t){try{let r=e?.sessionPath||e?.SESSION_PATH||process.env.ZIBBY_SESSION_PATH;if(!r||!t)return null;let o=Ce("fs"),s=Ce("path").join(r,t,"usage.json");if(!o.existsSync(s))return null;let i=o.readFileSync(s,"utf-8"),f=JSON.parse(i);return!f.input_tokens&&!f.output_tokens&&!f.inputTokens&&!f.outputTokens?null:f}catch{return null}}function Fe(e,t,r=null){return async function(n,s,i){let f=Date.now(),a=[],l="",c=console.log,p=process.stdout.write.bind(process.stdout),d=process.stderr.write.bind(process.stderr),R=!1;console.log=(...w)=>{let u=w.map(h=>typeof h=="string"?h:JSON.stringify(h)).join(" ");a.push(u),R=!0,c(...w),R=!1};let S="";process.stdout.write=(w,u,h)=>{if(!R){let x=typeof w=="string"?w:w.toString();S+=x;let m=S.split(`
3
+ `);S=m.pop()||"";for(let O of m){let b=O.trim();b&&a.push(b)}}return p(w,u,h)},c(`[Middleware] Started capturing logs for ${n}`);let I=!1,_=setInterval(()=>{if(I)return;let w=a.join(`
4
+ `);w!==l&&w.length>0&&(l=w,d(`\u{1F4E1} [Middleware] Sending live update for ${n}: ${w.length} chars, ${a.length} lines
5
+ `),e(n,"in_progress",w,i).catch(u=>{d(`\u26A0\uFE0F [Middleware] Failed to send live update: ${u.message}
6
+ `)}))},500);try{await e(n,"in_progress","",i);let w=await s(),u=((Date.now()-f)/1e3).toFixed(1);I=!0,clearInterval(_),await new Promise(m=>setImmediate(m)),console.log=c,process.stdout.write=p,S.trim()&&(a.push(S.trim()),S="");let h=a.join(`
7
+ `);d(`\u{1F4E1} [Middleware] Sending final update for ${n}: ${h.length} chars, ${a.length} total lines captured
8
+ `);let x=Ft(i,n);if(x)try{await t(i,`usage_${n}`,x)}catch(m){d(`\u26A0\uFE0F [Middleware] usage ship failed for ${n}: ${m.message}
9
+ `)}if(w.success){if(await e(n,"success",h||`Completed in ${u}s`,i),r)try{let m=r(n,w);m&&m.key&&m.value&&await t(i,m.key,m.value)}catch(m){d(`\u26A0\uFE0F [Middleware] artifactExtractor for ${n} threw: ${m.message}
10
+ `)}}else await e(n,"failed",`${h}
11
11
 
12
- Error: ${g.error}`,i);return g}catch(g){T=!0,clearInterval(U),await new Promise(E=>setImmediate(E)),console.log=l,process.stdout.write=u;let S=`${a.join(`
12
+ Error: ${w.error}`,i);return w}catch(w){I=!0,clearInterval(_),await new Promise(h=>setImmediate(h)),console.log=c,process.stdout.write=p;let u=`${a.join(`
13
13
  `)}
14
14
 
15
- Error: ${g.message}`;throw await e(o,"failed",S,i),g}}}function Te({workflowType:e,jobId:t,projectId:r,agentType:n,model:o,egressIp:s,egressKind:i}){let f="\u2500".repeat(60),a=`${n||"default"} (model: ${o||"auto"})`,c=["",f,` Workflow: ${e}`,` Job: ${t||"local"}`,` Project: ${r||"none"}`,` Agent: ${a}`];if(s||i){let l=s||"unknown",u=i||"static";c.push(` Egress: ${l} (${u})`)}return c.push(f),c.join(`
16
- `)}import{existsSync as Ot,writeFileSync as It}from"fs";import{join as Ae}from"path";var ae={width:1280,height:720},Tt="on",At="tests",Pt="test-results/playwright";function vt(e={}){let t=e.viewport&&typeof e.viewport=="object"?{width:Number(e.viewport.width)||ae.width,height:Number(e.viewport.height)||ae.height}:ae,r=typeof e.video=="string"?e.video:Tt,n=e.paths?.generated||At,o=e.playwrightArtifacts!==!1,s=o?"on":"off",i=o?"only-on-failure":"off";return`// AUTO-GENERATED at workflow run start by @zibby/cli's
15
+ Error: ${w.message}`;throw await e(n,"failed",u,i),w}}}import{existsSync as Gt,readFileSync as zt}from"fs";var Bt="/tmp/zibby-entrypoint-setup.log",Wt=500;function B(e){return e.replace(/\r/g,"").trimEnd()}function Ge({reportProgressFn:e,state:t,entrypointLogPath:r=Bt}={}){if(!t||!t.EXECUTION_ID)return{finalize:async()=>{},getBuffer:()=>""};let o=[],n=0,s=!1;try{if(Gt(r)){let u=zt(r,"utf-8");for(let h of u.split(`
16
+ `)){let x=B(h);x&&o.push(x)}}}catch{}let i=console.log,f=console.warn,a=console.error,l=process.stdout.write.bind(process.stdout),c=process.stderr.write.bind(process.stderr),p=!1,d=u=>(...h)=>{let x=h.map(m=>typeof m=="string"?m:(()=>{try{return JSON.stringify(m)}catch{return String(m)}})()).join(" ");for(let m of x.split(`
17
+ `)){let O=B(m);O&&o.push(O)}p=!0;try{u(...h)}finally{p=!1}};console.log=d(i),console.warn=d(f),console.error=d(a);let R="",S="";process.stdout.write=(u,h,x)=>{if(!p){let m=typeof u=="string"?u:u.toString();R+=m;let O=R.split(`
18
+ `);R=O.pop()||"";for(let b of O){let K=B(b);K&&o.push(K)}}return l(u,h,x)},process.stderr.write=(u,h,x)=>{if(!p){let m=typeof u=="string"?u:u.toString();S+=m;let O=S.split(`
19
+ `);S=O.pop()||"";for(let b of O){let K=B(b);K&&o.push(K)}}return c(u,h,x)};let _=setInterval(()=>{if(s)return;let u=o.join(`
20
+ `);u.length!==n&&(n=u.length,e("setup","in_progress",u,t).catch(h=>{c(`[setup-progress] flush failed: ${h.message}
21
+ `)}))},Wt);return _.unref&&_.unref(),{finalize:async()=>{if(s)return;s=!0,clearInterval(_),console.log=i,console.warn=f,console.error=a,process.stdout.write=l,process.stderr.write=c,R.trim()&&(o.push(B(R)),R=""),S.trim()&&(o.push(B(S)),S="");let u=o.join(`
22
+ `);if(u.length>0)try{await e("setup","in_progress",u,t)}catch(h){c(`[setup-progress] final flush failed: ${h.message}
23
+ `)}},getBuffer:()=>o.join(`
24
+ `)}}function ze({workflowType:e,jobId:t,projectId:r,agentType:o,model:n,egressIp:s,egressKind:i}){let f="\u2500".repeat(60),a=`${o||"default"} (model: ${n||"auto"})`,l=["",f,` Workflow: ${e}`,` Job: ${t||"local"}`,` Project: ${r||"none"}`,` Agent: ${a}`];if(s||i){let c=s||"unknown",p=i||"static";l.push(` Egress: ${c} (${p})`)}return l.push(f),l.join(`
25
+ `)}import{existsSync as Ht,writeFileSync as Jt}from"fs";import{join as Be}from"path";var me={width:1280,height:720},Mt="on",Qt="tests",Yt="test-results/playwright";function qt(e={}){let t=e.viewport&&typeof e.viewport=="object"?{width:Number(e.viewport.width)||me.width,height:Number(e.viewport.height)||me.height}:me,r=typeof e.video=="string"?e.video:Mt,o=e.paths?.generated||Qt,n=e.playwrightArtifacts!==!1,s=n?"on":"off",i=n?"only-on-failure":"off";return`// AUTO-GENERATED at workflow run start by @zibby/cli's
17
26
  // playwright-config-materialize.js. Derived from the bundled
18
27
  // zibby.config.json (which @zibby/workflow-deploy serialized from your
19
28
  // project's .zibby.config.mjs). Do NOT edit by hand \u2014 re-run a workflow
@@ -23,8 +32,8 @@ Error: ${g.message}`;throw await e(o,"failed",S,i),g}}}function Te({workflowType
23
32
  import { defineConfig } from '@playwright/test';
24
33
 
25
34
  export default defineConfig({
26
- testDir: '${n.replace(/'/g,"\\'")}',
27
- outputDir: '${Pt}',
35
+ testDir: '${o.replace(/'/g,"\\'")}',
36
+ outputDir: '${Yt}',
28
37
  timeout: 60000,
29
38
  retries: 0,
30
39
  workers: 1,
@@ -39,7 +48,8 @@ export default defineConfig({
39
48
 
40
49
  reporter: [['list']],
41
50
  });
42
- `}function Pe(e,t){if(!e)return{written:!1,path:null,reason:"no workspaceDir"};for(let o of["js","mjs","ts"]){let s=Ae(e,`playwright.config.${o}`);if(Ot(s))return{written:!1,path:s,reason:`existing playwright.config.${o} in workspace`}}let r=Ae(e,"playwright.config.js"),n=vt(t||{});try{return It(r,n,"utf-8"),{written:!0,path:r,reason:"derived from zibby.config"}}catch(o){return{written:!1,path:null,reason:`write failed: ${o.message}`}}}import"@zibby/core";var H=process.env.WORKSPACE||"/workspace";async function pr(e,t){ht(t,{recursive:!0});let r=Date.now();console.log("[setup] Fetching bundle...");let n=setInterval(()=>{let s=((Date.now()-r)/1e3).toFixed(1);console.log(`[setup] still fetching (${s}s elapsed)`)},3e3);try{await new Promise((s,i)=>{let f=gt("curl",["-fsSL",e],{stdio:["ignore","pipe","inherit"]}),a=gt("tar",["-xzf","-","-C",t],{stdio:["pipe","inherit","inherit"]});f.stdout.pipe(a.stdin);let c,l,u=()=>{if(c!==void 0&&l!==void 0){if(c!==0)return i(new Error(`curl exited ${c}`));if(l!==0)return i(new Error(`tar exited ${l}`));s()}};f.on("close",d=>{c=d,u()}),a.on("close",d=>{l=d,u()}),f.on("error",i),a.on("error",i)})}finally{clearInterval(n)}let o=((Date.now()-r)/1e3).toFixed(1);return console.log(`[setup] Bundle extracted (${o}s)`),t}async function mt(){let e=process.env.WORKFLOW_SOURCES_URL;if(!e)throw new Error("WORKFLOW_SOURCES_URL env var is required");let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch sources: ${t.status} ${t.statusText}`);let r=await t.json();if(!r.sources||typeof r.sources!="object")throw new Error('Invalid sources payload \u2014 missing "sources" map');return r}function dr(e){let t=e?.agent;if(!t)return null;if(typeof t=="string")return t;if(typeof t=="object"){if(typeof t.provider=="string")return t.provider;for(let r of["claude","cursor","codex","gemini"])if(t[r])return r}return null}function ur(e,t){let r=ut(t),n=0;for(let[o,s]of Object.entries(e)){let i=ut(t,o);if(!i.startsWith(`${r}/`)&&i!==r){console.error(` \u26D4 Skipping unsafe path: ${o}`);continue}ht(lr(i),{recursive:!0}),cr(i,s,"utf-8"),n++}return n}async function gr(){let e=process.env.ZIBBY_EGRESS_PROXY_URL,t=process.env.ZIBBY_EGRESS_TOKEN;if(!(!e||!t))try{let r=await import("undici"),n=new r.ProxyAgent({uri:e,token:`Bearer ${t}`});r.setGlobalDispatcher(n)}catch(r){console.warn(`[setup] Failed to install egress proxy dispatcher: ${r.message}`)}}async function mr(){if(process.env.ZIBBY_EGRESS_IP)return{ip:process.env.ZIBBY_EGRESS_IP,kind:"static"};try{let e=new AbortController,t=setTimeout(()=>e.abort(),1500),r=await fetch("https://api.ipify.org?format=json",{signal:e.signal});return clearTimeout(t),r.ok?{ip:(await r.json())?.ip||null,kind:"dynamic"}:{ip:null,kind:"dynamic"}}catch{return{ip:null,kind:"dynamic"}}}async function hr(e,t){let r=A(e,"graph.mjs");if(!C(r))throw new Error(`graph.mjs not found at ${r}`);let n=await import(ye(r).href),o=t?.entryClass,s=o&&n[o]||n.default||Object.values(n).find(i=>typeof i=="function"&&i.prototype?.buildGraph);if(!s)throw new Error("No WorkflowAgent class found in graph.mjs");return s}async function Jo(){if(!process.env.NODE_PATH){process.env.NODE_PATH="/opt/zibby/packages";let p=await import("module");p.default._initPaths&&p.default._initPaths()}await gr();let{WORKFLOW_JOB_ID:e,WORKFLOW_TYPE:t,PROJECT_ID:r,AGENT_TYPE:n,MODEL:o}=process.env;t||(console.error("Missing WORKFLOW_TYPE env var"),process.exit(1));let s=process.env.WORKFLOW_BUNDLE_URL,i,f={},a,c;if(s){a=t,i=A(H,".zibby","workflows",a);try{await pr(s,i);try{let p=await mt();f=p.input||{},c=p.version}catch{}}catch(p){console.warn(`[setup] Bundle extract failed (${p.message}); falling back to source install`),i=null}}if(!i){let p=await mt(),{sources:w,input:$,workflowType:O,version:R}=p;f=$||{},a=O||t,c=R,console.log(`[setup] Workflow v${c||"?"} (${Object.keys(w).length} files)`),i=A(H,".zibby","workflows",a);let P=ur(w,i);console.log(`[setup] Wrote ${P} files`),console.log("[setup] Installing dependencies...");try{fr("npm install --silent --no-audit --no-fund",{cwd:i,stdio:"inherit"}),console.log("[setup] Dependencies installed")}catch(I){console.warn(`[setup] npm install failed: ${I.message}`)}}let l={},u=A(i,"workflow.json");C(u)&&(l=JSON.parse(dt(u,"utf-8")));let d={},k=A(i,"zibby.config.json");if(C(k))try{d=JSON.parse(dt(k,"utf-8")),console.log("[setup] Loaded user config from zibby.config.json")}catch(p){console.warn(`[setup] Failed to parse zibby.config.json: ${p.message} \u2014 falling back to defaults`)}let x=Pe(H,d);x.written?console.log(`[setup] Materialized playwright.config.js \u2192 ${x.path} (${x.reason})`):x.path&&console.log(`[setup] Using existing playwright config: ${x.path}`);let T=dr(d)||n,U=await mr();console.log(Te({workflowType:t,jobId:e,projectId:r,agentType:T,model:o,egressIp:U.ip,egressKind:U.kind}));let g=await hr(i,l);console.log(`[setup] Loaded ${g.name}`);let S=[],E=A(i,"node_modules","@zibby","agent-workflow"),N=A(i,"node_modules","@zibby","core","node_modules","@zibby","agent-workflow");C(E)&&S.push({kind:"hoisted",path:E}),C(N)&&S.push({kind:"nested",path:N});let h=process.env.ZIBBY_RUN_DIAG==="1";if(h){let{readdirSync:p}=await import("fs");console.log(` [diag] @zibby/agent-workflow copies in bundle: ${S.length}`);for(let w of S)console.log(` [diag] ${w.kind}: ${w.path}`);try{let w=A(i,"node_modules","@zibby");C(w)&&console.log(` [diag] node_modules/@zibby/ contents: [${p(w).join(", ")}]`)}catch{}}let J=A(i,"node_modules","@zibby","core","dist","index.js");if(C(J)&&S.length>0)try{let p=await import(ye(J).href),w=[p.AssistantStrategy,p.CursorAgentStrategy,p.ClaudeAgentStrategy,p.CodexAgentStrategy,p.GeminiAgentStrategy].filter(Boolean);for(let $ of S){let O=A($.path,"dist","index.js");if(!C(O))continue;let R=await import(ye(O).href),P=h?R.listStrategies():null;for(let I of w)try{R.registerStrategy(new I)}catch(St){console.warn(` register ${I.name} into ${$.kind} failed: ${St.message}`)}h&&console.log(` [diag] ${$.kind} registry: before=[${P.join(",")||"empty"}] after=[${R.listStrategies().join(",")||"empty"}]`)}console.log("[setup] Registered 5 agent strategies (assistant, cursor, claude, codex, gemini)")}catch(p){console.warn(`[setup] Failed to bridge strategies: ${p.message}`)}else console.warn("[setup] No @zibby/core or @zibby/agent-workflow in bundle \u2014 agent strategies may be unavailable");let M=Date.now(),xe=new g({workflow:a||t}),te=xe.buildGraph(),wt=Ie(Re,Ue);Array.isArray(te.middleware)?te.middleware.push(wt):console.warn("[run] graph.middleware not an array \u2014 per-node progress reporting disabled for this run");let K=process.env.WORKFLOW_UUID||null,Q=process.env.ZIBBY_CONVERSATION_ID||null,re=!1;if(K&&Q)try{let{v5:p}=await Promise.resolve().then(()=>(it(),nt)),w=p(`${K}:${Q}`,"6ba7b810-9dad-11d1-80b4-00c04fd430c8"),$=(process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE||"").replace(/\/executions\/?$/,"").replace(/\/+$/,""),O=process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] sessionId=${w} apiUrl=${$?"set":"unset"} apiKey=${O?"set":"unset"}`),$&&O){let R=`${$}/workflows/${encodeURIComponent(K)}/sessions/${encodeURIComponent(w)}`,P=await fetch(R,{method:"GET",headers:{Authorization:`Bearer ${O}`}});if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] GET ${R} \u2192 HTTP ${P.status}`),P.ok){let I=await P.json().catch(()=>({}));re=Array.isArray(I?.entries)&&I.entries.length>0,process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] hasPriorSession=${re} entries=${I?.entries?.length??"n/a"}`)}}}catch(p){process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] threw: ${p.message}`)}let oe=null;try{process.env.REPOS&&(oe=JSON.parse(process.env.REPOS))}catch{}let yt={...f||{},cwd:H,runId:e||`run-${Date.now()}`,config:d,input:f||{},...K?{workflowUuid:K}:{},...Q?{conversationId:Q}:{},...re?{hasPriorSession:!0}:{},workspace:H,...oe?{repos:oe}:{},...process.env.GITHUB_TOKEN?{githubToken:process.env.GITHUB_TOKEN}:{},EXECUTION_ID:process.env.EXECUTION_ID||e||"",PROGRESS_API_URL:process.env.PROGRESS_API_URL||"",PROGRESS_QUEUE_URL:process.env.PROGRESS_QUEUE_URL||"",SQS_AUTH_TOKEN:process.env.SQS_AUTH_TOKEN||"",PROJECT_API_TOKEN:process.env.PROJECT_API_TOKEN||""};console.log("");let j;try{j=await te.run(xe,yt)}catch(p){console.error(`
43
- Workflow execution failed: ${p.message}`),console.error(p.stack),await we("failed",p.message),process.exit(1)}let Se=((Date.now()-M)/1e3).toFixed(1),xt=j?.success!==!1,_e=a||t;if(process.env.UPLOAD_ARTIFACTS!=="0"){let p=j?.state?.sessionPath,w=process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE,$=process.env.PROJECT_API_TOKEN,O=process.env.WORKFLOW_JOB_ID;if(p&&w&&$&&O)try{let{uploadSessionArtifacts:R}=await Promise.resolve().then(()=>(pt(),ft)),{uploaded:P,skipped:I}=await R({sessionPath:p,executionId:O,apiUrl:w,apiKey:$});console.log(`[artifacts] uploaded ${P.length} file(s)${I.length?`, skipped ${I.length}`:""}`)}catch(R){console.warn(`[artifacts] uploader threw: ${R.message}`)}else console.log("[artifacts] skipping upload \u2014 sessionPath/apiUrl/apiKey/executionId missing")}xt?(console.log(`
44
- [done] ${_e} completed in ${Se}s`),await we("completed",null,j?.state)):(console.error(`
45
- [done] ${_e} failed after ${Se}s`),await we("failed",j?.error||"Workflow execution failed",j?.state),process.exit(1))}async function we(e,t=null,r=void 0){let n={EXECUTION_ID:process.env.WORKFLOW_JOB_ID,PROGRESS_API_URL:process.env.PROGRESS_API_URL,PROGRESS_QUEUE_URL:process.env.PROGRESS_QUEUE_URL,PROJECT_API_TOKEN:process.env.PROJECT_API_TOKEN,SQS_AUTH_TOKEN:process.env.SQS_AUTH_TOKEN};if(n.EXECUTION_ID)try{await Oe(n,{status:e,...t&&{error:t},...r?{finalState:r}:{}})}catch(o){console.error(`\u26A0\uFE0F Failed to report status: ${o.message}`)}}export{dr as resolveAgentFromConfig,Jo as runWorkflowCommand};
51
+ `}function We(e,t){if(!e)return{written:!1,path:null,reason:"no workspaceDir"};for(let n of["js","mjs","ts"]){let s=Be(e,`playwright.config.${n}`);if(Ht(s))return{written:!1,path:s,reason:`existing playwright.config.${n} in workspace`}}let r=Be(e,"playwright.config.js"),o=qt(t||{});try{return Jt(r,o,"utf-8"),{written:!0,path:r,reason:"derived from zibby.config"}}catch(n){return{written:!1,path:null,reason:`write failed: ${n.message}`}}}import"@zibby/core";var V=process.env.WORKSPACE||"/workspace";async function Pr(e,t){Pt(t,{recursive:!0});let r=Date.now();console.log("[setup] Fetching bundle...");let o=setInterval(()=>{let s=((Date.now()-r)/1e3).toFixed(1);console.log(`[setup] still fetching (${s}s elapsed)`)},3e3);try{await new Promise((s,i)=>{let f=Ie("curl",["-fsSL",e],{stdio:["ignore","pipe","inherit"]}),a=Ie("tar",["-xzf","-","-C",t],{stdio:["pipe","inherit","inherit"]});f.stdout.pipe(a.stdin);let l,c,p=()=>{if(l!==void 0&&c!==void 0){if(l!==0)return i(new Error(`curl exited ${l}`));if(c!==0)return i(new Error(`tar exited ${c}`));s()}};f.on("close",d=>{l=d,p()}),a.on("close",d=>{c=d,p()}),f.on("error",i),a.on("error",i)})}finally{clearInterval(o)}let n=((Date.now()-r)/1e3).toFixed(1);return console.log(`[setup] Bundle extracted (${n}s)`),t}async function Tt(){let e=process.env.WORKFLOW_SOURCES_URL;if(!e)throw new Error("WORKFLOW_SOURCES_URL env var is required");let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch sources: ${t.status} ${t.statusText}`);let r=await t.json();if(!r.sources||typeof r.sources!="object")throw new Error('Invalid sources payload \u2014 missing "sources" map');return r}function Ar(e){let t=e?.agent;if(!t)return null;if(typeof t=="string")return t;if(typeof t=="object"){if(typeof t.provider=="string")return t.provider;for(let r of["claude","cursor","codex","gemini"])if(t[r])return r}return null}function vr(e,t){let r=It(t),o=0;for(let[n,s]of Object.entries(e)){let i=It(t,n);if(!i.startsWith(`${r}/`)&&i!==r){console.error(` \u26D4 Skipping unsafe path: ${n}`);continue}Pt(Tr(i),{recursive:!0}),Ir(i,s,"utf-8"),o++}return o}async function br(){let e=process.env.ZIBBY_EGRESS_PROXY_URL,t=process.env.ZIBBY_EGRESS_TOKEN;if(!(!e||!t))try{let r=await import("undici"),o=new r.ProxyAgent({uri:e,token:`Bearer ${t}`});r.setGlobalDispatcher(o)}catch(r){console.warn(`[setup] Failed to install egress proxy dispatcher: ${r.message}`)}}async function Dr(){if(process.env.ZIBBY_EGRESS_IP)return{ip:process.env.ZIBBY_EGRESS_IP,kind:"static"};try{let e=new AbortController,t=setTimeout(()=>e.abort(),1500),r=await fetch("https://api.ipify.org?format=json",{signal:e.signal});return clearTimeout(t),r.ok?{ip:(await r.json())?.ip||null,kind:"dynamic"}:{ip:null,kind:"dynamic"}}catch{return{ip:null,kind:"dynamic"}}}async function Lr(e,t){let r=D(e,"graph.mjs");if(!G(r))throw new Error(`graph.mjs not found at ${r}`);let o=await import(Oe(r).href),n=t?.entryClass,s=n&&o[n]||o.default||Object.values(o).find(i=>typeof i=="function"&&i.prototype?.buildGraph);if(!s)throw new Error("No WorkflowAgent class found in graph.mjs");return s}async function gn(){if(!process.env.NODE_PATH){process.env.NODE_PATH="/opt/zibby/packages";let g=await import("module");g.default._initPaths&&g.default._initPaths()}let e={EXECUTION_ID:process.env.EXECUTION_ID||process.env.WORKFLOW_JOB_ID||"",PROGRESS_API_URL:process.env.PROGRESS_API_URL||"",PROGRESS_QUEUE_URL:process.env.PROGRESS_QUEUE_URL||"",SQS_AUTH_TOKEN:process.env.SQS_AUTH_TOKEN||"",PROJECT_API_TOKEN:process.env.PROJECT_API_TOKEN||""},t=Ge({reportProgressFn:de,state:e});await br();let{WORKFLOW_JOB_ID:r,WORKFLOW_TYPE:o,PROJECT_ID:n,AGENT_TYPE:s,MODEL:i}=process.env;o||(console.error("Missing WORKFLOW_TYPE env var"),process.exit(1));let f=process.env.WORKFLOW_BUNDLE_URL,a,l={},c,p;if(f){c=o,a=D(V,".zibby","workflows",c);try{await Pr(f,a);try{let g=await Tt();l=g.input||{},p=g.version}catch{}}catch(g){console.warn(`[setup] Bundle extract failed (${g.message}); falling back to source install`),a=null}}if(!a){let g=await Tt(),{sources:E,input:T,workflowType:A,version:P}=g;l=T||{},c=A||o,p=P,console.log(`[setup] Workflow v${p||"?"} (${Object.keys(E).length} files)`),a=D(V,".zibby","workflows",c);let L=vr(E,a);console.log(`[setup] Wrote ${L} files`),console.log("[setup] Installing dependencies...");let v=Date.now();try{await new Promise((Lt,ve)=>{let Z=Ie("npm",["install","--silent","--no-audit","--no-fund"],{cwd:a,stdio:["ignore","pipe","pipe"]}),be=(k,De)=>{let ee="";k.on("data",te=>{ee+=te.toString();let Le=ee.split(`
52
+ `);ee=Le.pop()||"";for(let kt of Le){let ke=kt.replace(/\r/g,"").trimEnd();ke&&De(ke)}}),k.on("end",()=>{let te=ee.replace(/\r/g,"").trimEnd();te&&De(te)})};be(Z.stdout,k=>console.log(`[npm] ${k}`)),be(Z.stderr,k=>console.warn(`[npm] ${k}`)),Z.on("error",ve),Z.on("close",k=>{k===0?Lt():ve(new Error(`npm install exited with code ${k}`))})});let H=((Date.now()-v)/1e3).toFixed(1);console.log(`[setup] Dependencies installed (${H}s)`)}catch(H){console.warn(`[setup] npm install failed: ${H.message}`)}}let d={},R=D(a,"workflow.json");G(R)&&(d=JSON.parse(Ot(R,"utf-8")));let S={},I=D(a,"zibby.config.json");if(G(I))try{S=JSON.parse(Ot(I,"utf-8")),console.log("[setup] Loaded user config from zibby.config.json")}catch(g){console.warn(`[setup] Failed to parse zibby.config.json: ${g.message} \u2014 falling back to defaults`)}let _=We(V,S);_.written?console.log(`[setup] Materialized playwright.config.js \u2192 ${_.path} (${_.reason})`):_.path&&console.log(`[setup] Using existing playwright config: ${_.path}`);let w=Ar(S)||s,u=await Dr();console.log(ze({workflowType:o,jobId:r,projectId:n,agentType:w,model:i,egressIp:u.ip,egressKind:u.kind}));let h=await Lr(a,d);console.log(`[setup] Loaded ${h.name}`);let x=[],m=D(a,"node_modules","@zibby","agent-workflow"),O=D(a,"node_modules","@zibby","core","node_modules","@zibby","agent-workflow");G(m)&&x.push({kind:"hoisted",path:m}),G(O)&&x.push({kind:"nested",path:O});let b=process.env.ZIBBY_RUN_DIAG==="1";if(b){let{readdirSync:g}=await import("fs");console.log(` [diag] @zibby/agent-workflow copies in bundle: ${x.length}`);for(let E of x)console.log(` [diag] ${E.kind}: ${E.path}`);try{let E=D(a,"node_modules","@zibby");G(E)&&console.log(` [diag] node_modules/@zibby/ contents: [${g(E).join(", ")}]`)}catch{}}let K=D(a,"node_modules","@zibby","core","dist","index.js");if(G(K)&&x.length>0)try{let g=await import(Oe(K).href),E=[g.AssistantStrategy,g.CursorAgentStrategy,g.ClaudeAgentStrategy,g.CodexAgentStrategy,g.GeminiAgentStrategy].filter(Boolean);for(let T of x){let A=D(T.path,"dist","index.js");if(!G(A))continue;let P=await import(Oe(A).href),L=b?P.listStrategies():null;for(let v of E)try{P.registerStrategy(new v)}catch(H){console.warn(` register ${v.name} into ${T.kind} failed: ${H.message}`)}b&&console.log(` [diag] ${T.kind} registry: before=[${L.join(",")||"empty"}] after=[${P.listStrategies().join(",")||"empty"}]`)}console.log("[setup] Registered 5 agent strategies (assistant, cursor, claude, codex, gemini)")}catch(g){console.warn(`[setup] Failed to bridge strategies: ${g.message}`)}else console.warn("[setup] No @zibby/core or @zibby/agent-workflow in bundle \u2014 agent strategies may be unavailable");let At=Date.now(),Te=new h({workflow:c||o}),ce=Te.buildGraph(),vt=Fe(de,je);Array.isArray(ce.middleware)?ce.middleware.push(vt):console.warn("[run] graph.middleware not an array \u2014 per-node progress reporting disabled for this run");let W=process.env.WORKFLOW_UUID||null,X=process.env.ZIBBY_CONVERSATION_ID||null,le=!1;if(W&&X)try{let{v5:g}=await Promise.resolve().then(()=>(yt(),St)),E=g(`${W}:${X}`,"6ba7b810-9dad-11d1-80b4-00c04fd430c8"),T=(process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE||"").replace(/\/executions\/?$/,"").replace(/\/+$/,""),A=process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] sessionId=${E} apiUrl=${T?"set":"unset"} apiKey=${A?"set":"unset"}`),T&&A){let P=`${T}/workflows/${encodeURIComponent(W)}/sessions/${encodeURIComponent(E)}`,L=await fetch(P,{method:"GET",headers:{Authorization:`Bearer ${A}`}});if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] GET ${P} \u2192 HTTP ${L.status}`),L.ok){let v=await L.json().catch(()=>({}));le=Array.isArray(v?.entries)&&v.entries.length>0,process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] hasPriorSession=${le} entries=${v?.entries?.length??"n/a"}`)}}}catch(g){process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] threw: ${g.message}`)}let fe=null;try{process.env.REPOS&&(fe=JSON.parse(process.env.REPOS))}catch{}let bt={...l||{},cwd:V,runId:r||`run-${Date.now()}`,config:S,input:l||{},...W?{workflowUuid:W}:{},...X?{conversationId:X}:{},...le?{hasPriorSession:!0}:{},workspace:V,...fe?{repos:fe}:{},...process.env.GITHUB_TOKEN?{githubToken:process.env.GITHUB_TOKEN}:{},EXECUTION_ID:process.env.EXECUTION_ID||r||"",PROGRESS_API_URL:process.env.PROGRESS_API_URL||"",PROGRESS_QUEUE_URL:process.env.PROGRESS_QUEUE_URL||"",SQS_AUTH_TOKEN:process.env.SQS_AUTH_TOKEN||"",PROJECT_API_TOKEN:process.env.PROJECT_API_TOKEN||""};await t.finalize(),console.log("");let z;try{z=await ce.run(Te,bt)}catch(g){console.error(`
53
+ Workflow execution failed: ${g.message}`),console.error(g.stack),await Ue("failed",g.message),process.exit(1)}let Pe=((Date.now()-At)/1e3).toFixed(1),Dt=z?.success!==!1,Ae=c||o;if(process.env.UPLOAD_ARTIFACTS!=="0"){let g=z?.state?.sessionPath,E=process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE,T=process.env.PROJECT_API_TOKEN,A=process.env.WORKFLOW_JOB_ID;if(g&&E&&T&&A)try{let{uploadSessionArtifacts:P}=await Promise.resolve().then(()=>(Ut(),Rt)),{uploaded:L,skipped:v}=await P({sessionPath:g,executionId:A,apiUrl:E,apiKey:T});console.log(`[artifacts] uploaded ${L.length} file(s)${v.length?`, skipped ${v.length}`:""}`)}catch(P){console.warn(`[artifacts] uploader threw: ${P.message}`)}else console.log("[artifacts] skipping upload \u2014 sessionPath/apiUrl/apiKey/executionId missing")}Dt?(console.log(`
54
+ [done] ${Ae} completed in ${Pe}s`),await Ue("completed",null,z?.state)):(console.error(`
55
+ [done] ${Ae} failed after ${Pe}s`),await Ue("failed",z?.error||"Workflow execution failed",z?.state),process.exit(1))}async function Ue(e,t=null,r=void 0){let o={EXECUTION_ID:process.env.WORKFLOW_JOB_ID,PROGRESS_API_URL:process.env.PROGRESS_API_URL,PROGRESS_QUEUE_URL:process.env.PROGRESS_QUEUE_URL,PROJECT_API_TOKEN:process.env.PROJECT_API_TOKEN,SQS_AUTH_TOKEN:process.env.SQS_AUTH_TOKEN};if(o.EXECUTION_ID)try{await Ke(o,{status:e,...t&&{error:t},...r?{finalState:r}:{}})}catch(n){console.error(`\u26A0\uFE0F Failed to report status: ${n.message}`)}}export{Ar as resolveAgentFromConfig,gn as runWorkflowCommand};
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zibby/cli",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Zibby CLI - Test automation generator and runner",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,10 @@
1
+ import{existsSync as z,readFileSync as I}from"fs";var b="/tmp/zibby-entrypoint-setup.log",x=500;function c(p){return p.replace(/\r/g,"").trimEnd()}function v({reportProgressFn:p,state:u,entrypointLogPath:S=b}={}){if(!u||!u.EXECUTION_ID)return{finalize:async()=>{},getBuffer:()=>""};let o=[],h=0,d=!1;try{if(z(S)){let t=I(S,"utf-8");for(let r of t.split(`
2
+ `)){let s=c(r);s&&o.push(s)}}}catch{}let L=console.log,_=console.warn,j=console.error,E=process.stdout.write.bind(process.stdout),a=process.stderr.write.bind(process.stderr),g=!1,m=t=>(...r)=>{let s=r.map(n=>typeof n=="string"?n:(()=>{try{return JSON.stringify(n)}catch{return String(n)}})()).join(" ");for(let n of s.split(`
3
+ `)){let e=c(n);e&&o.push(e)}g=!0;try{t(...r)}finally{g=!1}};console.log=m(L),console.warn=m(_),console.error=m(j);let i="",l="";process.stdout.write=(t,r,s)=>{if(!g){let n=typeof t=="string"?t:t.toString();i+=n;let e=i.split(`
4
+ `);i=e.pop()||"";for(let w of e){let f=c(w);f&&o.push(f)}}return E(t,r,s)},process.stderr.write=(t,r,s)=>{if(!g){let n=typeof t=="string"?t:t.toString();l+=n;let e=l.split(`
5
+ `);l=e.pop()||"";for(let w of e){let f=c(w);f&&o.push(f)}}return a(t,r,s)};let y=setInterval(()=>{if(d)return;let t=o.join(`
6
+ `);t.length!==h&&(h=t.length,p("setup","in_progress",t,u).catch(r=>{a(`[setup-progress] flush failed: ${r.message}
7
+ `)}))},x);return y.unref&&y.unref(),{finalize:async()=>{if(d)return;d=!0,clearInterval(y),console.log=L,console.warn=_,console.error=j,process.stdout.write=E,process.stderr.write=a,i.trim()&&(o.push(c(i)),i=""),l.trim()&&(o.push(c(l)),l="");let t=o.join(`
8
+ `);if(t.length>0)try{await p("setup","in_progress",t,u)}catch(r){a(`[setup-progress] final flush failed: ${r.message}
9
+ `)}},getBuffer:()=>o.join(`
10
+ `)}}export{v as startSetupProgress};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zibby/cli",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Zibby CLI - Test automation generator and runner",
5
5
  "type": "module",
6
6
  "bin": {