@zibby/cli 0.4.32 → 0.4.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/workflows/run.js +15 -15
- package/dist/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var St=Object.defineProperty;var m=(e,t)=>()=>(e&&(t=e(e=0)),t);var $e=(e,t)=>{for(var o in t)St(e,o,{get:t[o],enumerable:!0})};var ve,Ae=m(()=>{ve="ffffffff-ffff-ffff-ffff-ffffffffffff"});var Pe,be=m(()=>{Pe="00000000-0000-0000-0000-000000000000"});var De,ke=m(()=>{De=/^(?:[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 At(e){return typeof e=="string"&&De.test(e)}var L,K=m(()=>{ke();L=At});function Pt(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 P,z=m(()=>{K();P=Pt});function S(e,t=0){return(w[e[t+0]]+w[e[t+1]]+w[e[t+2]]+w[e[t+3]]+"-"+w[e[t+4]]+w[e[t+5]]+"-"+w[e[t+6]]+w[e[t+7]]+"-"+w[e[t+8]]+w[e[t+9]]+"-"+w[e[t+10]]+w[e[t+11]]+w[e[t+12]]+w[e[t+13]]+w[e[t+14]]+w[e[t+15]]).toLowerCase()}function bt(e,t=0){let o=S(e,t);if(!L(o))throw TypeError("Stringified UUID is invalid");return o}var w,Le,b=m(()=>{K();w=[];for(let e=0;e<256;++e)w.push((e+256).toString(16).slice(1));Le=bt});import{randomFillSync as Dt}from"crypto";function D(){return Q>V.length-16&&(Dt(V),Q=0),V.slice(Q,Q+=16)}var V,Q,q=m(()=>{V=new Uint8Array(256),Q=V.length});function kt(e,t,o){let n,r=e?._v6??!1;if(e){let s=Object.keys(e);s.length===1&&s[0]==="_v6"&&(e=void 0)}if(e)n=Ce(e.random??e.rng?.()??D(),e.msecs,e.nsecs,e.clockseq,e.node,t,o);else{let s=Date.now(),i=D();Lt(G,s,i),n=Ce(i,G.msecs,G.nsecs,r?void 0:G.clockseq,r?void 0:G.node,t,o)}return t??S(n)}function Lt(e,t,o){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=o.slice(10,16),e.node[0]|=1,e.clockseq=(o[8]<<8|o[9])&16383),e.msecs=t,e}function Ce(e,t,o,n,r,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(),o??=0,n??=(e[8]<<8|e[9])&16383,r??=e.slice(10,16),t+=122192928e5;let f=((t&268435455)*1e4+o)%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++]=r[c];return s}var G,Z,ae=m(()=>{q();b();G={};Z=kt});function W(e){let t=typeof e=="string"?P(e):e,o=Ct(t);return typeof e=="string"?S(o):o}function Ct(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 ce=m(()=>{z();b()});import{createHash as Nt}from"crypto";function jt(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Nt("md5").update(e).digest()}var Ne,je=m(()=>{Ne=jt});function Ft(e){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let o=0;o<e.length;++o)t[o]=e.charCodeAt(o);return t}function B(e,t,o,n,r,s){let i=typeof o=="string"?Ft(o):o,f=typeof n=="string"?P(n):n;if(typeof n=="string"&&(n=P(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,r){if(s=s||0,s<0||s+16>r.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`);for(let c=0;c<16;++c)r[s+c]=a[c];return r}return S(a)}var X,ee,le=m(()=>{z();b();X="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ee="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function fe(e,t,o,n){return B(48,Ne,e,t,o,n)}var Fe,Ke=m(()=>{je();le();fe.DNS=X;fe.URL=ee;Fe=fe});import{randomUUID as Kt}from"crypto";var pe,ze=m(()=>{pe={randomUUID:Kt}});function zt(e,t,o){if(pe.randomUUID&&!t&&!e)return pe.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(o=o||0,o<0||o+16>t.length)throw new RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`);for(let r=0;r<16;++r)t[o+r]=n[r];return t}return S(n)}var Ge,We=m(()=>{ze();q();b();Ge=zt});import{createHash as Gt}from"crypto";function Wt(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Gt("sha1").update(e).digest()}var Be,Me=m(()=>{Be=Wt});function de(e,t,o,n){return B(80,Be,e,t,o,n)}var Je,He=m(()=>{Me();le();de.DNS=X;de.URL=ee;Je=de});function Bt(e,t,o){e??={},o??=0;let n=Z({...e,_v6:!0},new Uint8Array(16));if(n=W(n),t){if(o<0||o+16>t.length)throw new RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`);for(let r=0;r<16;r++)t[o+r]=n[r];return t}return S(n)}var Ye,Qe=m(()=>{b();ae();ce();Ye=Bt});function ue(e){let t=typeof e=="string"?P(e):e,o=Mt(t);return typeof e=="string"?S(o):o}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 Ve=m(()=>{z();b()});function Jt(e,t,o){let n;if(e)n=qe(e.random??e.rng?.()??D(),e.msecs,e.seq,t,o);else{let r=Date.now(),s=D();Ht(ge,r,s),n=qe(s,ge.msecs,ge.seq,t,o)}return t??S(n)}function Ht(e,t,o){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=o[6]<<23|o[7]<<16|o[8]<<8|o[9],e.msecs=t):(e.seq=e.seq+1|0,e.seq===0&&e.msecs++),e}function qe(e,t,o,n,r=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!n)n=new Uint8Array(16),r=0;else if(r<0||r+16>n.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);return t??=Date.now(),o??=e[6]*127<<24|e[7]<<16|e[8]<<8|e[9],n[r++]=t/1099511627776&255,n[r++]=t/4294967296&255,n[r++]=t/16777216&255,n[r++]=t/65536&255,n[r++]=t/256&255,n[r++]=t&255,n[r++]=112|o>>>28&15,n[r++]=o>>>20&255,n[r++]=128|o>>>14&63,n[r++]=o>>>6&255,n[r++]=o<<2&255|e[10]&3,n[r++]=e[11],n[r++]=e[12],n[r++]=e[13],n[r++]=e[14],n[r++]=e[15],n}var ge,Ze,Xe=m(()=>{q();b();ge={};Ze=Jt});function Yt(e){if(!L(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var et,tt=m(()=>{K();et=Yt});var ot={};$e(ot,{MAX:()=>ve,NIL:()=>Pe,parse:()=>P,stringify:()=>Le,v1:()=>Z,v1ToV6:()=>W,v3:()=>Fe,v4:()=>Ge,v5:()=>Je,v6:()=>Ye,v6ToV1:()=>ue,v7:()=>Ze,validate:()=>L,version:()=>et});var rt=m(()=>{Ae();be();z();b();ae();ce();Ke();We();He();Qe();Ve();Xe();K();tt()});var ct={};$e(ct,{uploadSessionArtifacts:()=>io});import{readdirSync as it,statSync as me,createReadStream as Qt,existsSync as Vt}from"node:fs";import{join as st,relative as qt,sep as Zt,extname as Xt}from"node:path";function ro(e){let t=Xt(e).toLowerCase();return oo[t]||"application/octet-stream"}function at(e){let t=[],o;try{o=it(e)}catch{return t}for(let n of o){if(eo.has(n)||n.startsWith(".")||to.has(n))continue;let r=st(e,n),s;try{s=me(r)}catch{continue}s.isDirectory()?t.push(...at(r)):s.isFile()&&t.push(r)}return t}async function no({apiUrl:e,apiKey:t,executionId:o,nodeName:n,filename:r,absolutePath:s,sizeBytes:i,contentType:f}){let a;try{let c=await fetch(`${e}/${o}/artifacts/upload-url`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({nodeName:n,filename:r,contentType:f,sizeBytes:i})});if(!c.ok){let l=await c.text();return console.warn(`[artifacts] upload-url failed for ${n}/${r}: ${c.status} ${l.slice(0,200)}`),null}a=await c.json()}catch(c){return console.warn(`[artifacts] upload-url request errored for ${n}/${r}: ${c.message}`),null}try{let c=Qt(s),l=a.requiredHeaders?{...a.requiredHeaders,"Content-Length":String(i)}:{"Content-Type":f,"Content-Length":String(i)},d=await fetch(a.url,{method:"PUT",headers:l,body:c,duplex:"half"});if(!d.ok)return console.warn(`[artifacts] S3 PUT failed for ${n}/${r}: ${d.status}`),null}catch(c){return console.warn(`[artifacts] S3 PUT errored for ${n}/${r}: ${c.message}`),null}return{nodeName:n,filename:r,s3Key:a.s3Key,contentType:f,sizeBytes:i}}async function io({sessionPath:e,executionId:t,apiUrl:o,apiKey:n}){let r={uploaded:[],skipped:[]};if(!e||!Vt(e))return r;if(!o||!n||!t)return console.warn("[artifacts] uploader missing required input \u2014 skipping"),r;let s;try{s=it(e)}catch(l){return console.warn(`[artifacts] could not read session folder ${e}: ${l.message}`),r}let i=[];for(let l of s){let d=st(e,l),u;try{u=me(d)}catch{continue}if(!u.isDirectory()||l.startsWith(".")||l.startsWith("_"))continue;let k=at(d);for(let x of k){let T=qt(d,x).split(Zt).join("/"),U;try{U=me(x).size}catch{continue}if(U>nt){r.skipped.push({nodeName:l,filename:T,reason:`size ${U} > ${nt}`});continue}if(U===0){r.skipped.push({nodeName:l,filename:T,reason:"empty"});continue}i.push({apiUrl:o,apiKey:n,executionId:t,nodeName:l,filename:T,absolutePath:x,sizeBytes:U,contentType:ro(T)})}}if(i.length===0)return r;let f=4,a=i.slice(),c=Array.from({length:Math.min(f,a.length)},async()=>{for(;a.length;){let l=a.shift(),d=await no(l);d?r.uploaded.push(d):r.skipped.push({nodeName:l.nodeName,filename:l.filename,reason:"upload failed"})}});if(await Promise.all(c),r.uploaded.length>0)try{let l=await fetch(`${o}/${t}/artifacts`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify({files:r.uploaded})});if(!l.ok){let d=await l.text();console.warn(`[artifacts] record failed: ${l.status} ${d.slice(0,200)}`)}}catch(l){console.warn(`[artifacts] record errored: ${l.message}`)}return r}var nt,eo,to,oo,lt=m(()=>{nt=500*1024*1024,eo=new Set([".DS_Store","Thumbs.db",".zibby-stop"]),to=new Set(["node_modules",".git","dist",".zibby","__tests__","__mocks__",".cache",".next",".turbo"]),oo={".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 gt,writeFileSync as so,existsSync as C,readFileSync as ft}from"fs";import{join as v,dirname as ao,resolve as pt}from"path";import{pathToFileURL as we}from"url";import{execSync as co,spawn as dt}from"node:child_process";import{SQSClient as $t,SendMessageCommand as _t}from"@aws-sdk/client-sqs";var re=null;function Et(){return re||(re=new $t({region:process.env.AWS_REGION||"ap-southeast-2"})),re}async function _e(e,t,o,n){let{EXECUTION_ID:r,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=n;if(!r)return;let c={executionId:r,...s&&{sqsAuthToken:s},step:{name:e,status:t,logs:o,timestamp:new Date().toISOString(),...t==="success"&&{completedAt:new Date().toISOString()}},status:t==="failed"?"failed":"running"};try{i?await ne(i,r,c,a):f&&await ie(f,r,c)}catch(l){console.error(`\u26A0\uFE0F Failed to send progress: ${l.message}`)}}async function Ee(e,t,o){let{EXECUTION_ID:n,SQS_AUTH_TOKEN:r,PROGRESS_API_URL:s,PROGRESS_QUEUE_URL:i,PROJECT_API_TOKEN:f}=e;if(!n||!o)return;let a=JSON.stringify(o).length;console.log(`Sending artifact: ${t} (${(a/1024).toFixed(1)}KB)`);let c={executionId:n,...r&&{sqsAuthToken:r},artifacts:{[t]:o},timestamp:new Date().toISOString()},l=s?"HTTP":i?"SQS":"NONE",d=JSON.stringify(c).length;try{if(s)await ne(s,n,c,f);else if(i)await ie(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=${(d/1024).toFixed(1)}KB, value=${(a/1024).toFixed(1)}KB)`)}catch(u){console.error(`Failed to send artifact ${t} via ${l}:`),console.error(` Payload size: ${(d/1024).toFixed(1)}KB, Value size: ${(a/1024).toFixed(1)}KB`),console.error(` Error: ${u.message}`),u.name&&console.error(` Error type: ${u.name}`),u.code&&console.error(` Error code: ${u.code}`),d>256*1024&&console.error(" \u26A0\uFE0F Message exceeds SQS 256KB limit! Consider splitting or compressing.")}}async function Re(e,{status:t,error:o,finalState:n}){let{EXECUTION_ID:r,SQS_AUTH_TOKEN:s,PROGRESS_API_URL:i,PROGRESS_QUEUE_URL:f,PROJECT_API_TOKEN:a}=e;if(!r)return;let c={executionId:r,...s&&{sqsAuthToken:s},status:t,...o&&{error:o},...n&&typeof n=="object"&&Object.keys(n).length>0?{finalState:n}:{},timestamp:new Date().toISOString()},l=i?"HTTP":f?"SQS":"NONE",d=JSON.stringify(c).length;console.log(`Sending final status: ${t} via ${l} (${(d/1024).toFixed(1)}KB)`);try{if(i)await ne(i,r,c,a);else if(f){let u=["completed","failed","insufficient_context","blocked"].includes(t)?"execution_completed":"progress_update";await ie(f,r,c,u)}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(u){console.error(`Failed to send final status (${t}) via ${l}:`),console.error(` Payload: ${(d/1024).toFixed(1)}KB`),console.error(` Error: ${u.message}`),u.name&&console.error(` Error type: ${u.name}`),u.code&&console.error(` Error code: ${u.code}`)}}async function ne(e,t,o,n){let r=`${e}/${t}/progress`,s={"Content-Type":"application/json"};n&&(s.Authorization=`Bearer ${n}`);let i=await fetch(r,{method:"POST",headers:s,body:JSON.stringify(o)});if(!i.ok){let f=await i.text();throw new Error(`HTTP ${i.status}: ${f}`)}}async function ie(e,t,o,n="progress_update"){let r=JSON.stringify(o),s=(r.length/1024).toFixed(1);r.length>256*1024&&console.error(`\u274C SQS message too large: ${s}KB (limit 256KB) for ${t} [${n}]`),await Et().send(new _t({QueueUrl:e,MessageBody:r,MessageGroupId:t,MessageAttributes:{executionId:{DataType:"String",StringValue:t},messageType:{DataType:"String",StringValue:n}}}))}function Ue(e,t,o=null){return async function(r,s,i){let f=Date.now(),a=[],c="",l=console.log,d=process.stdout.write.bind(process.stdout),u=process.stderr.write.bind(process.stderr),k=!1;console.log=(...g)=>{let y=g.map($=>typeof $=="string"?$:JSON.stringify($)).join(" ");a.push(y),k=!0,l(...g),k=!1};let x="";process.stdout.write=(g,y,$)=>{if(!k){let _=typeof g=="string"?g:g.toString();x+=_;let N=x.split(`
|
|
3
|
-
`);x=N.pop()||"";for(let J of N){let H=J.trim();H&&a.push(H)}}return d(g,y,$)},l(`[Middleware] Started capturing logs for ${
|
|
4
|
-
`);g!==c&&g.length>0&&(c=g,u(`\u{1F4E1} [Middleware] Sending live update for ${
|
|
5
|
-
`),e(
|
|
6
|
-
`)}))},500);try{await e(
|
|
7
|
-
`);if(u(`\u{1F4E1} [Middleware] Sending final update for ${
|
|
8
|
-
`),g.success){if(await e(
|
|
9
|
-
`)}}else await e(
|
|
2
|
+
var St=Object.defineProperty;var m=(e,t)=>()=>(e&&(t=e(e=0)),t);var _e=(e,t)=>{for(var r in t)St(e,r,{get:t[r],enumerable:!0})};var ve,Pe=m(()=>{ve="ffffffff-ffff-ffff-ffff-ffffffffffff"});var be,De=m(()=>{be="00000000-0000-0000-0000-000000000000"});var ke,Le=m(()=>{ke=/^(?:[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"&&ke.test(e)}var L,K=m(()=>{Le();L=vt});function Pt(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 P,z=m(()=>{K();P=Pt});function S(e,t=0){return(w[e[t+0]]+w[e[t+1]]+w[e[t+2]]+w[e[t+3]]+"-"+w[e[t+4]]+w[e[t+5]]+"-"+w[e[t+6]]+w[e[t+7]]+"-"+w[e[t+8]]+w[e[t+9]]+"-"+w[e[t+10]]+w[e[t+11]]+w[e[t+12]]+w[e[t+13]]+w[e[t+14]]+w[e[t+15]]).toLowerCase()}function bt(e,t=0){let r=S(e,t);if(!L(r))throw TypeError("Stringified UUID is invalid");return r}var w,Ce,b=m(()=>{K();w=[];for(let e=0;e<256;++e)w.push((e+256).toString(16).slice(1));Ce=bt});import{randomFillSync as Dt}from"crypto";function D(){return Q>V.length-16&&(Dt(V),Q=0),V.slice(Q,Q+=16)}var V,Q,q=m(()=>{V=new Uint8Array(256),Q=V.length});function kt(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=Ne(e.random??e.rng?.()??D(),e.msecs,e.nsecs,e.clockseq,e.node,t,r);else{let s=Date.now(),i=D();Lt(G,s,i),n=Ne(i,G.msecs,G.nsecs,o?void 0:G.clockseq,o?void 0:G.node,t,r)}return t??S(n)}function Lt(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 Ne(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 G,Z,ce=m(()=>{q();b();G={};Z=kt});function W(e){let t=typeof e=="string"?P(e):e,r=Ct(t);return typeof e=="string"?S(r):r}function Ct(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(()=>{z();b()});import{createHash as Nt}from"crypto";function jt(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Nt("md5").update(e).digest()}var je,Fe=m(()=>{je=jt});function Ft(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 B(e,t,r,n,o,s){let i=typeof r=="string"?Ft(r):r,f=typeof n=="string"?P(n):n;if(typeof n=="string"&&(n=P(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 S(a)}var X,ee,fe=m(()=>{z();b();X="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ee="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function pe(e,t,r,n){return B(48,je,e,t,r,n)}var Ke,ze=m(()=>{Fe();fe();pe.DNS=X;pe.URL=ee;Ke=pe});import{randomUUID as Kt}from"crypto";var de,Ge=m(()=>{de={randomUUID:Kt}});function zt(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 S(n)}var We,Be=m(()=>{Ge();q();b();We=zt});import{createHash as Gt}from"crypto";function Wt(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Gt("sha1").update(e).digest()}var Me,Je=m(()=>{Me=Wt});function ue(e,t,r,n){return B(80,Me,e,t,r,n)}var He,Ye=m(()=>{Je();fe();ue.DNS=X;ue.URL=ee;He=ue});function Bt(e,t,r){e??={},r??=0;let n=Z({...e,_v6:!0},new Uint8Array(16));if(n=W(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 S(n)}var Qe,Ve=m(()=>{b();ce();le();Qe=Bt});function ge(e){let t=typeof e=="string"?P(e):e,r=Mt(t);return typeof e=="string"?S(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 qe=m(()=>{z();b()});function Jt(e,t,r){let n;if(e)n=Ze(e.random??e.rng?.()??D(),e.msecs,e.seq,t,r);else{let o=Date.now(),s=D();Ht(me,o,s),n=Ze(s,me.msecs,me.seq,t,r)}return t??S(n)}function Ht(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 Ze(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,Xe,et=m(()=>{q();b();me={};Xe=Jt});function Yt(e){if(!L(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var tt,rt=m(()=>{K();tt=Yt});var ot={};_e(ot,{MAX:()=>ve,NIL:()=>be,parse:()=>P,stringify:()=>Ce,v1:()=>Z,v1ToV6:()=>W,v3:()=>Ke,v4:()=>We,v5:()=>He,v6:()=>Qe,v6ToV1:()=>ge,v7:()=>Xe,validate:()=>L,version:()=>tt});var nt=m(()=>{Pe();De();z();b();ce();le();ze();Be();Ye();Ve();qe();et();K();rt()});var lt={};_e(lt,{uploadSessionArtifacts:()=>ir});import{readdirSync as st,statSync as he,createReadStream as Qt,existsSync as Vt}from"node:fs";import{join as at,relative as qt,sep as Zt,extname as Xt}from"node:path";function or(e){let t=Xt(e).toLowerCase();return rr[t]||"application/octet-stream"}function ct(e){let t=[],r;try{r=st(e)}catch{return t}for(let n of r){if(er.has(n)||n.startsWith(".")||tr.has(n))continue;let o=at(e,n),s;try{s=he(o)}catch{continue}s.isDirectory()?t.push(...ct(o)):s.isFile()&&t.push(o)}return t}async function nr({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=Qt(s),l=a.requiredHeaders?{...a.requiredHeaders,"Content-Length":String(i)}:{"Content-Type":f,"Content-Length":String(i)},d=await fetch(a.url,{method:"PUT",headers:l,body:c,duplex:"half"});if(!d.ok)return console.warn(`[artifacts] S3 PUT failed for ${n}/${o}: ${d.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 ir({sessionPath:e,executionId:t,apiUrl:r,apiKey:n}){let o={uploaded:[],skipped:[]};if(!e||!Vt(e))return o;if(!r||!n||!t)return console.warn("[artifacts] uploader missing required input \u2014 skipping"),o;let s;try{s=st(e)}catch(l){return console.warn(`[artifacts] could not read session folder ${e}: ${l.message}`),o}let i=[];for(let l of s){let d=at(e,l),u;try{u=he(d)}catch{continue}if(!u.isDirectory()||l.startsWith(".")||l.startsWith("_"))continue;let k=ct(d);for(let x of k){let T=qt(d,x).split(Zt).join("/"),U;try{U=he(x).size}catch{continue}if(U>it){o.skipped.push({nodeName:l,filename:T,reason:`size ${U} > ${it}`});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:or(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(),d=await nr(l);d?o.uploaded.push(d):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 d=await l.text();console.warn(`[artifacts] record failed: ${l.status} ${d.slice(0,200)}`)}}catch(l){console.warn(`[artifacts] record errored: ${l.message}`)}return o}var it,er,tr,rr,ft=m(()=>{it=500*1024*1024,er=new Set([".DS_Store","Thumbs.db",".zibby-stop"]),tr=new Set(["node_modules",".git","dist",".zibby","__tests__","__mocks__",".cache",".next",".turbo"]),rr={".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 mt,writeFileSync as sr,existsSync as C,readFileSync as pt}from"fs";import{join as A,dirname as ar,resolve as dt}from"path";import{pathToFileURL as xe}from"url";import{execSync as cr,spawn as ut}from"node:child_process";import{SQSClient as $t,SendMessageCommand as _t}from"@aws-sdk/client-sqs";var ne=null;function Et(){return ne||(ne=new $t({region:process.env.AWS_REGION||"ap-southeast-2"})),ne}async function Ee(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 Re(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",d=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=${(d/1024).toFixed(1)}KB, value=${(a/1024).toFixed(1)}KB)`)}catch(u){console.error(`Failed to send artifact ${t} via ${l}:`),console.error(` Payload size: ${(d/1024).toFixed(1)}KB, Value size: ${(a/1024).toFixed(1)}KB`),console.error(` Error: ${u.message}`),u.name&&console.error(` Error type: ${u.name}`),u.code&&console.error(` Error code: ${u.code}`),d>256*1024&&console.error(" \u26A0\uFE0F Message exceeds SQS 256KB limit! Consider splitting or compressing.")}}async function Ue(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",d=JSON.stringify(c).length;console.log(`Sending final status: ${t} via ${l} (${(d/1024).toFixed(1)}KB)`);try{if(i)await ie(i,o,c,a);else if(f){let u=["completed","failed","insufficient_context","blocked"].includes(t)?"execution_completed":"progress_update";await se(f,o,c,u)}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(u){console.error(`Failed to send final status (${t}) via ${l}:`),console.error(` Payload: ${(d/1024).toFixed(1)}KB`),console.error(` Error: ${u.message}`),u.name&&console.error(` Error type: ${u.name}`),u.code&&console.error(` Error code: ${u.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 Et().send(new _t({QueueUrl:e,MessageBody:o,MessageGroupId:t,MessageAttributes:{executionId:{DataType:"String",StringValue:t},messageType:{DataType:"String",StringValue:n}}}))}function Ie(e,t,r=null){return async function(o,s,i){let f=Date.now(),a=[],c="",l=console.log,d=process.stdout.write.bind(process.stdout),u=process.stderr.write.bind(process.stderr),k=!1;console.log=(...g)=>{let y=g.map($=>typeof $=="string"?$:JSON.stringify($)).join(" ");a.push(y),k=!0,l(...g),k=!1};let x="";process.stdout.write=(g,y,$)=>{if(!k){let _=typeof g=="string"?g:g.toString();x+=_;let N=x.split(`
|
|
3
|
+
`);x=N.pop()||"";for(let J of N){let H=J.trim();H&&a.push(H)}}return d(g,y,$)},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,u(`\u{1F4E1} [Middleware] Sending live update for ${o}: ${g.length} chars, ${a.length} lines
|
|
5
|
+
`),e(o,"in_progress",g,i).catch(y=>{u(`\u26A0\uFE0F [Middleware] Failed to send live update: ${y.message}
|
|
6
|
+
`)}))},500);try{await e(o,"in_progress","",i);let g=await s(),y=((Date.now()-f)/1e3).toFixed(1);T=!0,clearInterval(U),await new Promise(_=>setImmediate(_)),console.log=l,process.stdout.write=d,x.trim()&&(a.push(x.trim()),x="");let $=a.join(`
|
|
7
|
+
`);if(u(`\u{1F4E1} [Middleware] Sending final update for ${o}: ${$.length} chars, ${a.length} total lines captured
|
|
8
|
+
`),g.success){if(await e(o,"success",$||`Completed in ${y}s`,i),r)try{let _=r(o,g);_&&_.key&&_.value&&await t(i,_.key,_.value)}catch(_){u(`\u26A0\uFE0F [Middleware] artifactExtractor for ${o} threw: ${_.message}
|
|
9
|
+
`)}}else await e(o,"failed",`${$}
|
|
10
10
|
|
|
11
11
|
Error: ${g.error}`,i);return g}catch(g){T=!0,clearInterval(U),await new Promise($=>setImmediate($)),console.log=l,process.stdout.write=d;let y=`${a.join(`
|
|
12
12
|
`)}
|
|
13
13
|
|
|
14
|
-
Error: ${g.message}`;throw await e(
|
|
15
|
-
`)}import{existsSync as Rt,writeFileSync as Ut}from"fs";import{join as
|
|
14
|
+
Error: ${g.message}`;throw await e(o,"failed",y,i),g}}}function Oe({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",d=i||"static";c.push(` Egress: ${l} (${d})`)}return c.push(f),c.join(`
|
|
15
|
+
`)}import{existsSync as Rt,writeFileSync as Ut}from"fs";import{join as Te}from"path";var ae={width:1280,height:720},It="on",Ot="tests",Tt="test-results/playwright";function At(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:It,n=e.paths?.generated||Ot,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
|
|
16
16
|
// playwright-config-materialize.js. Derived from the bundled
|
|
17
17
|
// zibby.config.json (which @zibby/workflow-deploy serialized from your
|
|
18
18
|
// project's .zibby.config.mjs). Do NOT edit by hand \u2014 re-run a workflow
|
|
@@ -31,14 +31,14 @@ export default defineConfig({
|
|
|
31
31
|
use: {
|
|
32
32
|
headless: process.env.PLAYWRIGHT_HEADLESS === '1',
|
|
33
33
|
viewport: { width: ${t.width}, height: ${t.height} },
|
|
34
|
-
video: '${
|
|
34
|
+
video: '${r}',
|
|
35
35
|
trace: '${s}',
|
|
36
36
|
screenshot: '${i}',
|
|
37
37
|
},
|
|
38
38
|
|
|
39
39
|
reporter: [['list']],
|
|
40
40
|
});
|
|
41
|
-
`}function
|
|
42
|
-
Workflow execution failed: ${p.message}`),console.error(p.stack),await
|
|
43
|
-
[done] ${
|
|
44
|
-
[done] ${
|
|
41
|
+
`}function Ae(e,t){if(!e)return{written:!1,path:null,reason:"no workspaceDir"};for(let o of["js","mjs","ts"]){let s=Te(e,`playwright.config.${o}`);if(Rt(s))return{written:!1,path:s,reason:`existing playwright.config.${o} in workspace`}}let r=Te(e,"playwright.config.js"),n=At(t||{});try{return Ut(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 M=process.env.WORKSPACE||"/workspace";async function lr(e,t){mt(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=ut("curl",["-fsSL",e],{stdio:["ignore","pipe","inherit"]}),a=ut("tar",["-xzf","-","-C",t],{stdio:["pipe","inherit","inherit"]});f.stdout.pipe(a.stdin);let c,l,d=()=>{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",u=>{c=u,d()}),a.on("close",u=>{l=u,d()}),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 gt(){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 fr(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 pr(e,t){let r=dt(t),n=0;for(let[o,s]of Object.entries(e)){let i=dt(t,o);if(!i.startsWith(`${r}/`)&&i!==r){console.error(` \u26D4 Skipping unsafe path: ${o}`);continue}mt(ar(i),{recursive:!0}),sr(i,s,"utf-8"),n++}return n}async function dr(){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 ur(){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 gr(e,t){let r=A(e,"graph.mjs");if(!C(r))throw new Error(`graph.mjs not found at ${r}`);let n=await import(xe(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 Bo(){if(!process.env.NODE_PATH){process.env.NODE_PATH="/opt/zibby/packages";let p=await import("module");p.default._initPaths&&p.default._initPaths()}await dr();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(M,".zibby","workflows",a);try{await lr(s,i);try{let p=await gt();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 gt(),{sources:h,input:E,workflowType:I,version:R}=p;f=E||{},a=I||t,c=R,console.log(`[setup] Workflow v${c||"?"} (${Object.keys(h).length} files)`),i=A(M,".zibby","workflows",a);let v=pr(h,i);console.log(`[setup] Wrote ${v} files`),console.log("[setup] Installing dependencies...");try{cr("npm install --silent --no-audit --no-fund",{cwd:i,stdio:"inherit"}),console.log("[setup] Dependencies installed")}catch(O){console.warn(`[setup] npm install failed: ${O.message}`)}}let l={},d=A(i,"workflow.json");C(d)&&(l=JSON.parse(pt(d,"utf-8")));let u={},k=A(i,"zibby.config.json");if(C(k))try{u=JSON.parse(pt(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=Ae(M,u);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=fr(u)||n,U=await ur();console.log(Oe({workflowType:t,jobId:e,projectId:r,agentType:T,model:o,egressIp:U.ip,egressKind:U.kind}));let g=await gr(i,l);console.log(`[setup] Loaded ${g.name}`);let y=[],$=A(i,"node_modules","@zibby","agent-workflow"),_=A(i,"node_modules","@zibby","core","node_modules","@zibby","agent-workflow");C($)&&y.push({kind:"hoisted",path:$}),C(_)&&y.push({kind:"nested",path:_});let N=process.env.ZIBBY_RUN_DIAG==="1";if(N){let{readdirSync:p}=await import("fs");console.log(` [diag] @zibby/agent-workflow copies in bundle: ${y.length}`);for(let h of y)console.log(` [diag] ${h.kind}: ${h.path}`);try{let h=A(i,"node_modules","@zibby");C(h)&&console.log(` [diag] node_modules/@zibby/ contents: [${p(h).join(", ")}]`)}catch{}}let J=A(i,"node_modules","@zibby","core","dist","index.js");if(C(J)&&y.length>0)try{let p=await import(xe(J).href),h=[p.AssistantStrategy,p.CursorAgentStrategy,p.ClaudeAgentStrategy,p.CodexAgentStrategy,p.GeminiAgentStrategy].filter(Boolean);for(let E of y){let I=A(E.path,"dist","index.js");if(!C(I))continue;let R=await import(xe(I).href),v=N?R.listStrategies():null;for(let O of h)try{R.registerStrategy(new O)}catch(yt){console.warn(` register ${O.name} into ${E.kind} failed: ${yt.message}`)}N&&console.log(` [diag] ${E.kind} registry: before=[${v.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 H=Date.now(),ye=new g({workflow:a||t}),te=ye.buildGraph(),ht=Ie(Ee,Re);Array.isArray(te.middleware)?te.middleware.push(ht):console.warn("[run] graph.middleware not an array \u2014 per-node progress reporting disabled for this run");let F=process.env.WORKFLOW_UUID||null,Y=process.env.ZIBBY_CONVERSATION_ID||null,re=!1;if(F&&Y)try{let{v5:p}=await Promise.resolve().then(()=>(nt(),ot)),h=p(`${F}:${Y}`,"6ba7b810-9dad-11d1-80b4-00c04fd430c8"),E=(process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE||"").replace(/\/executions\/?$/,"").replace(/\/+$/,""),I=process.env.PROJECT_API_TOKEN;if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] sessionId=${h} apiUrl=${E?"set":"unset"} apiKey=${I?"set":"unset"}`),E&&I){let R=`${E}/workflows/${encodeURIComponent(F)}/sessions/${encodeURIComponent(h)}`,v=await fetch(R,{method:"GET",headers:{Authorization:`Bearer ${I}`}});if(process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] GET ${R} \u2192 HTTP ${v.status}`),v.ok){let O=await v.json().catch(()=>({}));re=Array.isArray(O?.entries)&&O.entries.length>0,process.env.ZIBBY_SDK_DEBUG==="1"&&console.log(`[session-preflight] hasPriorSession=${re} entries=${O?.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 wt={...f||{},cwd:M,runId:e||`run-${Date.now()}`,config:u,input:f||{},...F?{workflowUuid:F}:{},...Y?{conversationId:Y}:{},...re?{hasPriorSession:!0}:{},workspace:M,...oe?{repos:oe}:{},...process.env.GITHUB_TOKEN?{githubToken:process.env.GITHUB_TOKEN}:{}};console.log("");let j;try{j=await te.run(ye,wt)}catch(p){console.error(`
|
|
42
|
+
Workflow execution failed: ${p.message}`),console.error(p.stack),await we("failed",p.message),process.exit(1)}let Se=((Date.now()-H)/1e3).toFixed(1),xt=j?.success!==!1,$e=a||t;if(process.env.UPLOAD_ARTIFACTS!=="0"){let p=j?.state?.sessionPath,h=process.env.PROGRESS_API_URL||process.env.ZIBBY_API_BASE,E=process.env.PROJECT_API_TOKEN,I=process.env.WORKFLOW_JOB_ID;if(p&&h&&E&&I)try{let{uploadSessionArtifacts:R}=await Promise.resolve().then(()=>(ft(),lt)),{uploaded:v,skipped:O}=await R({sessionPath:p,executionId:I,apiUrl:h,apiKey:E});console.log(`[artifacts] uploaded ${v.length} file(s)${O.length?`, skipped ${O.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(`
|
|
43
|
+
[done] ${$e} completed in ${Se}s`),await we("completed",null,j?.state)):(console.error(`
|
|
44
|
+
[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 Ue(n,{status:e,...t&&{error:t},...r?{finalState:r}:{}})}catch(o){console.error(`\u26A0\uFE0F Failed to report status: ${o.message}`)}}export{fr as resolveAgentFromConfig,Bo as runWorkflowCommand};
|
package/dist/package.json
CHANGED