Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package picsart-gen-ai for openSUSE:Factory 
checked in at 2026-08-25 13:20:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/picsart-gen-ai (Old)
 and      /work/SRC/openSUSE:Factory/.picsart-gen-ai.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "picsart-gen-ai"

Tue Aug 25 13:20:05 2026 rev:3 rq:1373481 version:2.69.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/picsart-gen-ai/picsart-gen-ai.changes    
2026-08-24 12:15:03.242319092 +0200
+++ /work/SRC/openSUSE:Factory/.picsart-gen-ai.new.1258/picsart-gen-ai.changes  
2026-08-25 13:20:25.263659179 +0200
@@ -1,0 +2,11 @@
+Mon Aug 24 20:12:35 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 2.69.0:
+  * Report the generation-tracking events under event_type instead
+    of event, so the started and completed events match the current
+    telemetry schema
+- Re-vendor the runtime dependencies for the new release: picomatch
+  4.0.5 -> 4.0.7 is the only change, the dependency set is otherwise
+  unchanged
+
+-------------------------------------------------------------------

Old:
----
  gen-ai-2.68.1.tgz

New:
----
  gen-ai-2.69.0.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ picsart-gen-ai.spec ++++++
--- /var/tmp/diff_new_pack.SaBrJK/_old  2026-08-25 13:20:26.587705930 +0200
+++ /var/tmp/diff_new_pack.SaBrJK/_new  2026-08-25 13:20:26.592706106 +0200
@@ -28,7 +28,7 @@
 %define npm_name gen-ai
 %define npm_scope @picsart
 Name:           picsart-gen-ai
-Version:        2.68.1
+Version:        2.69.0
 Release:        0
 Summary:        Picsart AI CLI for generating images, video and audio
 # Legal-Review-Notice: the CLI itself is MIT. The published cli.js is a bundle

++++++ gen-ai-2.68.1.tgz -> gen-ai-2.69.0.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/cli.js new/package/cli.js
--- old/package/cli.js  1985-10-26 09:15:00.000000000 +0100
+++ new/package/cli.js  1985-10-26 09:15:00.000000000 +0100
@@ -373,7 +373,7 @@
 `);}return r.out.result(t.text),true}function 
_J(t,e,r){if(nMe(t,e,r))return;if(e.jsonMode){r.out.json({url:t.url,model:t.model.id,results:t.results,durationMs:t.durationMs});return}if(e.quietMode){t.url&&r.out.result(t.url);return}let
 i=FJ(t.durationMs),n=[["Model",t.model.name]];i&&n.push(["Time",i]);let 
o=t.results??[];o.length>1&&n.push(["Results",`${o.length} items`]);let 
s=[];for(let A of 
o)A.url&&(s.push(r.color.link(A.url,A.url)),A.exploreImageId&&s.push(`  
${r.color.dim(`id: ${A.exploreImageId}`)}`));let 
a=[...Te(n,{color:r.color}).split(`
 `),"",...s];process.stderr.write(`${ae(a,{color:r.color,title:"\u2713 
Generation 
Complete",borderColor:"#64ED68",maxWidth:process.stdout.columns||120,plain:e.plainMode})}
 `),t.url&&r.out.success(`Result: ${t.url}`);}function 
TJ(t,e,r){if(e.jsonMode){r.out.json({error:t.error,model:t.model.id,durationMs:t.durationMs});return}r.out.error(`Generation
 failed: ${t.error??"unknown error"}`);}function 
xJ(t,e,r){if(e.jsonMode){r.out.json({status:"cancelled",model:t.model.id,durationMs:t.durationMs,...t.taskId?{taskId:t.taskId}:{}});return}r.out.info("Generation
 cancelled");}function 
MJ(t,e,r){if(e.jsonMode){r.out.json({error:t.error,taskId:t.taskId,model:t.model.id,durationMs:t.durationMs,status:"timeout"});return}r.out.warn(`Generation
 still running. Task id: 
${t.taskId??"unknown"}`),t.error&&r.out.info(t.error),r.out.info("Tip: `gen-ai 
history` will show the latest entry once it finishes.");}ht();async function 
NJ(t,e,r){let i=as(e),n=new 
URL(t),s=(He.basename(n.pathname)||"output").replace(/[<>:"|?*\u0000-\u001f]/g,"_")||"output";Ie.mkdirSync(i,{recursive:true});let
 a=He.join(i,s);if(Ie.existsSync(a)){let 
l=He.extname(s),d=s.slice(0,s.length-l.length);for
 (let f=1;;f++){let 
g=He.join(i,`${d}-${f}${l}`);if(!Ie.existsSync(g)){a=g;break}}}r.out.info(`Downloading
 to ${a}...`);let A=await 
fetch(t,{signal:AbortSignal.timeout(12e4)});if(!A.ok)throw new Error(`Download 
failed: ${A.status}`);let u=await A.arrayBuffer();return 
Ie.writeFileSync(a,Buffer.from(u)),r.out.success(`Saved: ${a}`),a}function 
LJ(t,e){let r=t.split("?")[0].split(".").pop()?.toLowerCase();return 
r&&["mp4","webm","mp3","wav","png","jpg","jpeg","webp","gif"].includes(r)?r:e==="video"?"mp4":e==="audio"?"mp3":"png"}function
 UJ(t,e,r){let i=LJ(t,e),n=String(Date.now()).slice(-6);return 
`${(r||"generation").slice(0,40).replace(/[^a-zA-Z0-9]+/g,"-")}-${n}.${i}`}var 
oMe="Generate a short, descriptive filename for an AI-generated asset. Rules: 
3-6 words, kebab-case, lowercase, English only, no file extension, no quotes, 
no markdown. Describe the visual/audio content, not the technical process. 
Example outputs: golden-hour-mountain-flight, neon-cyberpunk-city-rain, 
calm-ocean-wave
 s-sunset";function sMe(t){return 
t.replace(/[`"'*_#]/g,"").replace(/\s+/g,"-").toLowerCase().replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,60)}function
 OJ(t,e){let 
r={tool:"ai-playground",model:t.modelId||t.id,prompt:e.prompt||"",subType:t.inputType,service:t.provider};e.duration!=null&&(r.duration=String(e.duration));let
 i={};return 
e.aspectRatio&&(i.aspectRatio=e.aspectRatio),e.resolution&&(i.resolution=e.resolution),e.quality&&(i.quality=e.quality),e.imageUrls?.length&&(i.referenceImageUrls=e.imageUrls),e.videoUrl&&(i.referenceVideoUrl=e.videoUrl),e.audioUrl&&(i.referenceAudioUrl=e.audioUrl),Object.keys(i).length>0&&(r.textScript=JSON.stringify(i)),r}async
 function PJ(t,e,r,i,n,o){let 
s=LJ(t,e),a=String(Date.now()).slice(-6);if(!r)return UJ(t,e,r);try{let 
A=`Generate a kebab-case filename for this ${e} (${n}) made with ${i}:
-"${r}"`,l=(await 
o({model:"gpt-4.1-mini",messages:[{role:"system",content:oMe},{role:"user",content:A}],max_tokens:32,temperature:.3}))?.choices?.[0]?.message?.content;if(!l)throw
 new Error("Empty response");let d=sMe(l);if(!d)throw new Error("Sanitized to 
empty");return `${d}-${a}.${s}`}catch{return UJ(t,e,r)}}var 
GJ=false,LI=false;function AMe(t){let e;try{e=new URL(t);}catch{return  
false}if(e.protocol!=="https:")return  false;let 
r=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost")return  
false;let i=isIP(r);return i===0?true:!YJ(r,i)}function YJ(t,e){return 
e===4?t==="0.0.0.0"||t.startsWith("0.")||t.startsWith("127.")||t.startsWith("10.")||t.startsWith("192.168.")||t.startsWith("169.254.")||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(t):t==="::1"||t.startsWith("fe80")||t.startsWith("fc")||t.startsWith("fd")||t.startsWith("::ffff:")}async
 function uMe(t){if(!AMe(t))return  false;let e=new 
URL(t).hostname.replace(/^\[|\]$
 /g,"").toLowerCase();if(isIP(e)!==0)return  true;try{let r=await 
lookup(e,{all:!0});return !Array.isArray(r)||r.length===0?!1:r.every(i=>{let 
n=i.address.toLowerCase(),o=isIP(n);return o!==0&&!YJ(n,o)})}catch{return  
false}}function lMe(){if(GJ)return 
LI;try{execFileSync("ffmpeg",["-version"],{stdio:"ignore"}),LI=!0;}catch{LI=false;}return
 GJ=true,LI}async function HJ(t,e){if(!lMe()||!await uMe(t))return;let 
r=Ie.mkdtempSync(He.join(ji.tmpdir(),"gen-ai-preview-")),i=He.join(r,"frame.jpg");try{return
 
execFileSync("ffmpeg",["-i",t,"-vframes","1","-q:v","2",i,"-y"],{stdio:"ignore",timeout:3e4}),Ie.existsSync(i)?await
 rn(i,e):void 
0}catch{return}finally{try{Ie.rmSync(r,{recursive:!0,force:!0});}catch{}}}async 
function uD(t,e,r){if(!(t.status!=="completed"||!t.url))try{let 
i=t.model,n=t.params.prompt,o=await 
PJ(t.url,i.mode,n,i.name,i.inputType,e.runCompletion),s=OJ(i,t.params),a;i.mode==="video"&&(a=await
 HJ(t.url,{token:e.token,uid:e.uid,uploadUrl:e.uploadUrl})),r.out.info("Saving 
to P
 icsart Drive..."),await 
e.saveFn({url:t.url,name:o,resourceType:wc(i.mode),attributes:s,folderUid:e.folderUid,previewUrl:a}),r.out.success("Saved
 to Drive");}catch(i){r.out.error(`Drive save failed: 
${i.message}`);}}CE();async function 
WJ(t,e,r){if(t.status!=="completed"||!t.url){if(e.bell&&vb(),e.notify){let 
i=t.status==="cancelled"?"Generation 
cancelled":t.status==="timeout"?`Generation still running. Task id: 
${t.taskId??"unknown"}`:`Generation failed: 
${t.error??"unknown"}`;Qb("gen-ai",i);}return}if(e.imagePreview!==false&&t.model.mode==="image"&&nu())try{await
 Lj(t.url,"result");}catch{}e.clipboard&&xj(t.url)&&r.out.info("URL copied to 
clipboard"),e.open&&CA(t.url),e.bell&&vb(),e.notify&&Qb("gen-ai",`${t.model.name}
 generation complete`);}async function jJ(t,e,r,i){let 
n={jsonMode:e.jsonMode,quietMode:e.quietMode,plainMode:e.plainMode};t.status==="completed"?_J(t,n,r):t.status==="cancelled"?xJ(t,n,r):t.status==="timeout"?MJ(t,n,r):TJ(t,n,r);let
 o=t.text!=null;if(!o&&t.status===
 "completed"&&e.download){let 
u=t.results&&t.results.length>0?t.results.map(l=>l.url):t.url?[t.url]:[];for(let
 l of u)try{await NJ(l,e.download,r);}catch(d){r.out.error(`Download failed: 
${d.message}`);}}if(!o&&t.status==="completed"&&e.driveSave&&i)if(t.results&&t.results.length>1)for(let
 u of t.results){let l={...t,url:u.url,results:[u]};await uD(l,i,r);}else await 
uD(t,i,r);let 
s=t.results&&t.results.length>0?t.results.map(u=>u.url):t.url?[t.url]:[],a=t.params,A={timestamp:new
 
Date().toISOString(),model:t.model.id,modelName:t.model.name,prompt:a.prompt,params:t.params,imageUrls:a.imageUrls,videoUrl:a.videoUrl,audioUrl:a.audioUrl,videoUrls:a.videoUrls,audioUrls:a.audioUrls,startFrame:a.startFrame,endFrame:a.endFrame,staticMask:a.staticMask,sceneImage:a.sceneImage,styleImage:a.styleImage,resultUrl:s[0],rawResultUrl:s[0],resultUrls:s.length>1?s:void
 
0,durationMs:t.durationMs,status:t.status==="completed"?"completed":t.status==="timeout"?"timeout":t.status==="cancelled"?"cancelled":"f
 ailed",error:t.error};try{Gj(A);}catch{}await WJ(t,e,r);}ht();Xt();async 
function JJ(t){try{let e=t.driveFolder?await yI(t.driveFolder):await 
EI();return 
{token:t.token,uid:t.uid,folderUid:e,uploadUrl:t.uploadUrl,runCompletion:async 
r=>await(await 
Ye()).runWorkflow("CHAT_COMPLETIONS",r,{mode:"sync"}),saveFn:r=>CI({url:r.url,name:r.name,resourceType:r.resourceType,attributes:r.attributes,folderUid:r.folderUid,previewUrl:r.previewUrl})}}catch(e){let
 r=e instanceof Error?e.message:String(e);be().warn(`Drive save unavailable 
(${r}) \u2014 result will not be saved to Drive`);return}}ht();function 
$J(t,e,r){let 
i=t.clipboard||(e.autoClipboard??false),n=t.bell||(e.autoBell??false),o=t.notify||(e.autoNotify??false),s=t.open!=null?t.open:e.autoOpen??false,a;return
 t["no-download"]?a=void 
0:t.download?a=as(t.download):e.downloadDir?a=as(e.downloadDir):a="./output",{download:a,driveSave:t["save-to-drive"]??true,driveFolder:t["drive-folder"]??"gen-ai-cli",open:s,clipboard:i,bell:n,notify:o,imag
 
ePreview:e.imagePreview??true,jsonMode:r.json,quietMode:r.quiet,plainMode:r.plain}}CE();var
 
cMe="https://picsart.com/pricing",dMe=["page_origin","action_button"],zJ={page_origin:"gen_ai_cli",action_button:"gen_ai_cli_credits_wall"};function
 KJ(t){let e=new URLSearchParams({checkout:"credit"});for(let r of dMe){let 
i=t[r];i&&e.set(r,i);}return `${cMe}?${e.toString()}`}function ZJ(t){return 
!!(t instanceof Sc||t instanceof Rs&&t.statusCode===402||t instanceof 
Error&&/402|not enough.*credit|insufficient.*credit/i.test(t.message))}async 
function XJ(t,e){let r=t instanceof Error?t.message:"not enough 
credits";if(e.out.error(`Insufficient credits: ${r}`),e.flags.noInput)return  
true;let i=await xe({message:"What would you like to do?",choices:[{name:"Open 
browser to add 
credits",value:"buy"},{name:"Exit",value:"exit"}],cancelOnly:true});return 
i===j||i===X||i==="exit"||i==="buy"&&(CA(KJ(zJ)),e.out.info("Opening checkout 
in browser...")),true}async function fMe(t,e){try{let i=(await Ye()).
 getCredits,n=await i(t,e);return typeof n=="number"?n:null}catch{return 
null}}async function e3(t,e){let r=await fMe(t,e);if(r!=null)return 
{value:r,exact:true};let i=pMe(t,e);return 
i==null?null:{value:i,exact:false}}function gMe(t,e){if(!t)return null;let 
r=t.max;t.unit==="second"&&e.duration&&e.duration>0&&(r*=e.duration);let 
i=e.count&&e.count>0?e.count:1;return Math.ceil(r*i)}function pMe(t,e){let 
r={};typeof e.resolution=="string"&&(r.resolution=e.resolution),typeof 
e.generateAudio=="boolean"&&(r.generateAudio=e.generateAudio);let 
i=Or(t).getCreditsInfo(Object.keys(r).length?r:void 0),n=typeof 
e.duration=="number"?e.duration:void 0,o=typeof e.count=="number"?e.count:void 
0;return gMe(i,{duration:n,count:o})}async function t3(t,e,r,i){await 
xs(),await Pr.pricing.load();let n=await e3(t.id,e);if(!n){i.warn(`Could not 
determine cost for ${t.name}; --max-cost not enforced for this 
run.`);return}if(n.value>r){let o=n.exact?`Cost ${n.value}`:`Estimated cost 
~${n.value}`;throw new R(
 `${o} credits exceeds --max-cost ${r} for ${t.name}. Raise --max-cost or 
adjust params (resolution/duration/count) to proceed.`)}}async function 
r3(t,e,r,i){await xs(),await Pr.pricing.load();let o=(await 
Promise.all(t.map(a=>e3(a.id,e)))).filter(a=>a!=null);if(o.length===0){i.warn("Could
 not determine cost for any of the models; --max-cost not enforced for this 
run.");return}let s=o.reduce((a,A)=>a+A.value,0);if(s>r){let 
a=o.every(A=>A.exact)?`Total cost ${s}`:`Estimated total cost ~${s}`;throw new 
R(`${a} credits across ${t.length} models exceeds --max-cost ${r}. Raise 
--max-cost or compare fewer models.`)}}function i3(t){let 
e=Math.floor(t/1e3);if(e<60)return `${e}s`;let 
r=Math.floor(e/60),i=e%60;if(r<60)return `${r}m ${i}s`;let 
n=Math.floor(r/60),o=r%60;return `${n}h ${String(o).padStart(2,"0")}m`}function 
mMe(t,e=30,r){let 
i=Math.round(t/100*e),n=e-i,o=cu.green("\u2588".repeat(i))+cu.dim("\u2591".repeat(n)),s=r!=null?`
 ${cu.dim(`(${i3(r)})`)}`:"";return `${o} ${t.toFixed(0)}%${
 s}`}function n3(t){let e=t;return 
r=>{if(r.percent!=null)e.text=mMe(r.percent,30,r.elapsed);else {let 
i=i3(r.elapsed);e.text=`${r.status}... ${cu.dim(`(${i})`)}`;}}}kE();function 
s3(t){RE.event({event:"cli_generation_started",data:{flow_id:t.flow.id,model_id:t.inputs.model.id,model_name:t.inputs.model.name,model_vendor:t.inputs.model.provider,params:a3(t.inputs.params),files:A3(t.inputs.files)}});}function
 
PI(t){let{result:e,error:r,inputs:i}=t,n=e?.status??t.status??"failed";RE.event({event:"cli_generation_completed",data:{flow_id:t.flow.id,model_id:i?.model.id,model_name:i?.model.name,model_vendor:i?.model.provider,status:n,duration_ms:e?.durationMs,task_id:e?.taskId,result_count:e?.results.length,error_name:r===void
 0?void 0:r instanceof 
Error?r.constructor.name:"Unknown",error_message:r===void 0?void 0:r instanceof 
Error?r.message:String(r),params:i?a3(i.params):void 0,files:i?A3(i.files):void 
0}});}function a3(t){let 
e=process.env.PULSE_REDACT_PROMPTS==="1",r={};for(let[i,n]of 
 Object.entries(t)){if(i==="prompt"&&e){r[i]="[redacted]";continue}if(typeof 
n=="string"&&hMe(n)){r[i]=`[file:${He.extname(n).slice(1)||"unknown"}]`;continue}r[i]=n;}return
 r}function A3(t){let e={};return 
t.images?.length&&(e.images_count=t.images.length),t.startFrame&&(e.has_start_frame=true),t.endFrame&&(e.has_end_frame=true),t.video&&(e.has_video=true),t.audio&&(e.has_audio=true),t.videos?.length&&(e.videos_count=t.videos.length),t.audios?.length&&(e.audios_count=t.audios.length),e}function
 hMe(t){return 
t.startsWith("http://";)||t.startsWith("https://";)?false:!!(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("~")||/^[a-zA-Z]:[\\/]/.test(t))}Xt();function
 EMe(t){let e=sn(t);if(e==="image")return {imageUrls:[t]};if(e==="video")return 
{videoUrl:t};if(e==="audio")return {audioUrl:t};throw new Error(`Unsupported 
file type: ${t}`)}function yMe(t){let e=[...new 
Set(t.map(sn))];if(e.includes(null))throw new Error("Unsupported file type in 
directory input");let r
 =e;if(r.length!==1)throw new Error("Multi mode requires files of a single 
media type");let i=r[0];if(i==="image")return 
t.flatMap(n=>["--image",n]);if(t.length!==1)throw new Error(`Multi mode 
supports exactly one ${i} file. Use --batch instead.`);return 
i==="video"?["--video",t[0]]:["--audio",t[0]]}function IMe(t){let e=[];for(let 
r=0;r<t.length;r++){let 
i=t[r];if(i==="--download"&&r+1<t.length){e.push("--output",t[++r]);continue}i==="--no-download"&&e.push("--no-download");}return
 e}async function c3(t,e){let 
r=be(),i=bI(t.type),n=Gs(He.resolve(t.inputDir),i,0);if(n.length===0)throw new 
R(`No matching files found in: ${t.inputDir}`);if(n.length>t.maxFiles)throw new 
R(`Found ${n.length} files, exceeds --max-files (${t.maxFiles}). Use 
--max-files to increase.`);r.info(`Found ${n.length} file(s) in 
${t.inputDir}`);let o;if(t.multi)o="multi";else if(t.batch)o="batch";else 
if(Ao()&&!t.silent){let u=await xe({message:"Input directory 
mode",choices:[{name:"Multi-image \u2014 send all file
 s as inputs to one generation",value:"multi"},{name:"Batch \u2014 one 
generation per file",value:"batch"}]});if(u===j||u===X)return 
{kind:"cancelled"};o=u;}else throw new R("--input-dir requires --multi or 
--batch in non-interactive mode");if(o==="multi"){if(n.length>14)throw new 
R(`Multi mode supports max 14 files, got ${n.length}. Use --batch 
instead.`);let u=["--model",e.id,...yMe(n),...t.extraArgs];return 
t.prompt&&u.push("--prompt",t.prompt),t.dryRun&&u.push("--dry-run"),t.silent&&u.push("--silent"),{kind:"multi-generate",generateArgs:u}}let
 
s={defaults:{...t.prompt?{prompt:t.prompt}:{}},jobs:n.map(u=>({id:He.basename(u,He.extname(u)),model:e.id,...EMe(u)}))};kW(s.jobs);let
 
a=He.join(ji.tmpdir(),`gen-ai-batch-${Date.now()}.json`);Ie.writeFileSync(a,JSON.stringify(s,null,2));let
 A=[a,"--concurrency",String(t.concurrency),...IMe(t.extraArgs)];return 
t.dryRun&&A.push("--dry-run"),{kind:"run-batch",batchArgs:A,tmpFile:a}}var 
CMe=new Set(["input-dir","multi","batch","type","max-file
 
s","concurrency","model","prompt","dry-run","silent","image","video","audio"]);async
 function g3(t,e,r){let i=e["input-dir"];if(typeof 
i!="string"||i.length===0)return;let n=typeof e.model=="string"?e.model:void 
0;if(!n)throw new R("--input-dir requires --model (-m) to know which model to 
dispatch.");let o=xI(n,t);if(!o)throw new R(`Model "${n}" is not in the ${t.id} 
flow's catalog.`);let s=BMe(e),a=await c3({inputDir:i,prompt:typeof 
e.prompt=="string"?e.prompt:void 
0,multi:e.multi===true,batch:e.batch===true,type:e.type,maxFiles:typeof 
e["max-files"]=="number"?e["max-files"]:30,concurrency:typeof 
e.concurrency=="number"?e.concurrency:3,dryRun:e["dry-run"]===true,silent:r.flags.noInput,extraArgs:s},o);if(a.kind!=="cancelled"){if(a.kind==="multi-generate"){await
 run([t.id,...a.generateArgs]);return}try{await 
run(["batch:run",...a.batchArgs]);}finally{try{Ie.unlinkSync(a.tmpFile);}catch{}}}}function
 BMe(t){let e=[];for(let[r,i]of 
Object.entries(t))if(!CMe.has(r)&&!(i==null||i===false)
 ){if(i===true){e.push(`--${r}`);continue}if(Array.isArray(i)){for(let n of 
i)e.push(`--${r}`,String(n));continue}e.push(`--${r}`,String(i));}return 
e}async function QMe(t,e,r){if(typeof 
e["input-dir"]=="string"&&e["input-dir"].length>0){await g3(t,e,r);return}let 
i=$J(e,Et(),{json:r.flags.json||e.output==="json",quiet:r.flags.quiet,plain:r.flags.plain}),n,o,s,a=false;try{let
 A=await vJ(t,e,r);if(!A)return;n=A,typeof e["max-cost"]=="number"&&await 
t3(A.model,A.params,e["max-cost"],r.out);let{authenticatedFetch:u,creds:l}=await
 Bi(),d=u,f=_t(),g=ss(),h;i.driveSave&&(h=await 
JJ({token:l.token,uid:l.uid,uploadUrl:g,driveFolder:i.driveFolder}));let 
m=oJ(`${A.model.name}...`,r.flags.quiet);o=m;let E=new 
AbortController,y=()=>{E.abort(),m.fail("Cancelled"),process.removeListener("SIGINT",y),process.once("SIGINT",()=>process.exit(130)),(async()=>{try{PI({flow:t,flags:e,inputs:A,status:"cancelled",error:new
 Error("User cancelled (SIGINT)")}),await 
FE();}finally{process.exit(130);}})().catch(
 ()=>{});};s=y,process.on("SIGINT",y),m.start();let 
B=e["poll-timeout"],Q=typeof B=="string"?kJ(B):void 
0;s3({flow:t,flags:e,inputs:A});let b=await 
RJ(A,{apiUrl:f,uploadUrl:g,authenticatedFetch:d},{signal:E.signal,onProgress:n3(m),pollTimeoutMs:Q});if(PI({flow:t,flags:e,inputs:A,result:b}),a=!0,b.status==="completed"){let
 T=Math.floor(b.durationMs/1e3);m.succeed(`${A.model.name} \xB7 ${T}s`);}else 
b.status==="cancelled"?m.fail("Cancelled"):b.status==="timeout"?m.warn("Still 
running on server"):m.fail("Failed");process.removeListener("SIGINT",y);let 
w=RW(r,{authenticatedFetch:d,uploadUrl:g});await 
jJ(b,i,w,h);}catch(A){if(s&&process.removeListener("SIGINT",s),o?.stop(),a||PI({flow:t,inputs:n,status:"failed",error:A}),ZJ(A)){process.exitCode=ue.CREDITS_ERROR,await
 XJ(A,r);return}throw A}}function $(t){class e extends F{static 
summary=t.description;static examples=t.examples?[...t.examples]:[];static 
flags=JS(t,on(),P.list());async run(){let{flags:i}=await 
this.parse(this.constructor);a
 wait QMe(t,i,this.deps);}}return e}var Kt=$(J.generate);function lD(t){let 
e=Math.floor(t/1e3);if(e<60)return `${e}s`;let 
r=Math.floor(e/60),i=e%60;if(r<60)return `${r}m ${i}s`;let 
n=Math.floor(r/60),o=r%60;return `${n}h ${String(o).padStart(2,"0")}m`}function 
GI(t,e){let 
r=t.status==="completed"?e.green("completed"):t.status==="cancelled"?e.dim("cancelled"):e.red(t.status==="timeout"?"timeout":"failed"),i=[];return
 t.id&&i.push(["Id",t.id]),i.push(["Model",`${t.modelName??t.model} 
(${t.model})`],["Prompt",t.prompt??"(none)"],["Status",r]),t.resultUrl&&i.push(["Result",t.resultUrl]),t.resultUrls&&t.resultUrls.length>1&&i.push(["Results",`${t.resultUrls.length}
 
items`]),t.durationMs&&i.push(["Duration",lD(t.durationMs)]),i.push(["Time",t.timestamp]),t.error&&i.push(["Error",t.error]),Object.keys(t.params).length>0&&i.push(["Params",JSON.stringify(t.params)]),Te(i,{color:e}).split(`
+"${r}"`,l=(await 
o({model:"gpt-4.1-mini",messages:[{role:"system",content:oMe},{role:"user",content:A}],max_tokens:32,temperature:.3}))?.choices?.[0]?.message?.content;if(!l)throw
 new Error("Empty response");let d=sMe(l);if(!d)throw new Error("Sanitized to 
empty");return `${d}-${a}.${s}`}catch{return UJ(t,e,r)}}var 
GJ=false,LI=false;function AMe(t){let e;try{e=new URL(t);}catch{return  
false}if(e.protocol!=="https:")return  false;let 
r=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost")return  
false;let i=isIP(r);return i===0?true:!YJ(r,i)}function YJ(t,e){return 
e===4?t==="0.0.0.0"||t.startsWith("0.")||t.startsWith("127.")||t.startsWith("10.")||t.startsWith("192.168.")||t.startsWith("169.254.")||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(t):t==="::1"||t.startsWith("fe80")||t.startsWith("fc")||t.startsWith("fd")||t.startsWith("::ffff:")}async
 function uMe(t){if(!AMe(t))return  false;let e=new 
URL(t).hostname.replace(/^\[|\]$
 /g,"").toLowerCase();if(isIP(e)!==0)return  true;try{let r=await 
lookup(e,{all:!0});return !Array.isArray(r)||r.length===0?!1:r.every(i=>{let 
n=i.address.toLowerCase(),o=isIP(n);return o!==0&&!YJ(n,o)})}catch{return  
false}}function lMe(){if(GJ)return 
LI;try{execFileSync("ffmpeg",["-version"],{stdio:"ignore"}),LI=!0;}catch{LI=false;}return
 GJ=true,LI}async function HJ(t,e){if(!lMe()||!await uMe(t))return;let 
r=Ie.mkdtempSync(He.join(ji.tmpdir(),"gen-ai-preview-")),i=He.join(r,"frame.jpg");try{return
 
execFileSync("ffmpeg",["-i",t,"-vframes","1","-q:v","2",i,"-y"],{stdio:"ignore",timeout:3e4}),Ie.existsSync(i)?await
 rn(i,e):void 
0}catch{return}finally{try{Ie.rmSync(r,{recursive:!0,force:!0});}catch{}}}async 
function uD(t,e,r){if(!(t.status!=="completed"||!t.url))try{let 
i=t.model,n=t.params.prompt,o=await 
PJ(t.url,i.mode,n,i.name,i.inputType,e.runCompletion),s=OJ(i,t.params),a;i.mode==="video"&&(a=await
 HJ(t.url,{token:e.token,uid:e.uid,uploadUrl:e.uploadUrl})),r.out.info("Saving 
to P
 icsart Drive..."),await 
e.saveFn({url:t.url,name:o,resourceType:wc(i.mode),attributes:s,folderUid:e.folderUid,previewUrl:a}),r.out.success("Saved
 to Drive");}catch(i){r.out.error(`Drive save failed: 
${i.message}`);}}CE();async function 
WJ(t,e,r){if(t.status!=="completed"||!t.url){if(e.bell&&vb(),e.notify){let 
i=t.status==="cancelled"?"Generation 
cancelled":t.status==="timeout"?`Generation still running. Task id: 
${t.taskId??"unknown"}`:`Generation failed: 
${t.error??"unknown"}`;Qb("gen-ai",i);}return}if(e.imagePreview!==false&&t.model.mode==="image"&&nu())try{await
 Lj(t.url,"result");}catch{}e.clipboard&&xj(t.url)&&r.out.info("URL copied to 
clipboard"),e.open&&CA(t.url),e.bell&&vb(),e.notify&&Qb("gen-ai",`${t.model.name}
 generation complete`);}async function jJ(t,e,r,i){let 
n={jsonMode:e.jsonMode,quietMode:e.quietMode,plainMode:e.plainMode};t.status==="completed"?_J(t,n,r):t.status==="cancelled"?xJ(t,n,r):t.status==="timeout"?MJ(t,n,r):TJ(t,n,r);let
 o=t.text!=null;if(!o&&t.status===
 "completed"&&e.download){let 
u=t.results&&t.results.length>0?t.results.map(l=>l.url):t.url?[t.url]:[];for(let
 l of u)try{await NJ(l,e.download,r);}catch(d){r.out.error(`Download failed: 
${d.message}`);}}if(!o&&t.status==="completed"&&e.driveSave&&i)if(t.results&&t.results.length>1)for(let
 u of t.results){let l={...t,url:u.url,results:[u]};await uD(l,i,r);}else await 
uD(t,i,r);let 
s=t.results&&t.results.length>0?t.results.map(u=>u.url):t.url?[t.url]:[],a=t.params,A={timestamp:new
 
Date().toISOString(),model:t.model.id,modelName:t.model.name,prompt:a.prompt,params:t.params,imageUrls:a.imageUrls,videoUrl:a.videoUrl,audioUrl:a.audioUrl,videoUrls:a.videoUrls,audioUrls:a.audioUrls,startFrame:a.startFrame,endFrame:a.endFrame,staticMask:a.staticMask,sceneImage:a.sceneImage,styleImage:a.styleImage,resultUrl:s[0],rawResultUrl:s[0],resultUrls:s.length>1?s:void
 
0,durationMs:t.durationMs,status:t.status==="completed"?"completed":t.status==="timeout"?"timeout":t.status==="cancelled"?"cancelled":"f
 ailed",error:t.error};try{Gj(A);}catch{}await WJ(t,e,r);}ht();Xt();async 
function JJ(t){try{let e=t.driveFolder?await yI(t.driveFolder):await 
EI();return 
{token:t.token,uid:t.uid,folderUid:e,uploadUrl:t.uploadUrl,runCompletion:async 
r=>await(await 
Ye()).runWorkflow("CHAT_COMPLETIONS",r,{mode:"sync"}),saveFn:r=>CI({url:r.url,name:r.name,resourceType:r.resourceType,attributes:r.attributes,folderUid:r.folderUid,previewUrl:r.previewUrl})}}catch(e){let
 r=e instanceof Error?e.message:String(e);be().warn(`Drive save unavailable 
(${r}) \u2014 result will not be saved to Drive`);return}}ht();function 
$J(t,e,r){let 
i=t.clipboard||(e.autoClipboard??false),n=t.bell||(e.autoBell??false),o=t.notify||(e.autoNotify??false),s=t.open!=null?t.open:e.autoOpen??false,a;return
 t["no-download"]?a=void 
0:t.download?a=as(t.download):e.downloadDir?a=as(e.downloadDir):a="./output",{download:a,driveSave:t["save-to-drive"]??true,driveFolder:t["drive-folder"]??"gen-ai-cli",open:s,clipboard:i,bell:n,notify:o,imag
 
ePreview:e.imagePreview??true,jsonMode:r.json,quietMode:r.quiet,plainMode:r.plain}}CE();var
 
cMe="https://picsart.com/pricing",dMe=["page_origin","action_button"],zJ={page_origin:"gen_ai_cli",action_button:"gen_ai_cli_credits_wall"};function
 KJ(t){let e=new URLSearchParams({checkout:"credit"});for(let r of dMe){let 
i=t[r];i&&e.set(r,i);}return `${cMe}?${e.toString()}`}function ZJ(t){return 
!!(t instanceof Sc||t instanceof Rs&&t.statusCode===402||t instanceof 
Error&&/402|not enough.*credit|insufficient.*credit/i.test(t.message))}async 
function XJ(t,e){let r=t instanceof Error?t.message:"not enough 
credits";if(e.out.error(`Insufficient credits: ${r}`),e.flags.noInput)return  
true;let i=await xe({message:"What would you like to do?",choices:[{name:"Open 
browser to add 
credits",value:"buy"},{name:"Exit",value:"exit"}],cancelOnly:true});return 
i===j||i===X||i==="exit"||i==="buy"&&(CA(KJ(zJ)),e.out.info("Opening checkout 
in browser...")),true}async function fMe(t,e){try{let i=(await Ye()).
 getCredits,n=await i(t,e);return typeof n=="number"?n:null}catch{return 
null}}async function e3(t,e){let r=await fMe(t,e);if(r!=null)return 
{value:r,exact:true};let i=pMe(t,e);return 
i==null?null:{value:i,exact:false}}function gMe(t,e){if(!t)return null;let 
r=t.max;t.unit==="second"&&e.duration&&e.duration>0&&(r*=e.duration);let 
i=e.count&&e.count>0?e.count:1;return Math.ceil(r*i)}function pMe(t,e){let 
r={};typeof e.resolution=="string"&&(r.resolution=e.resolution),typeof 
e.generateAudio=="boolean"&&(r.generateAudio=e.generateAudio);let 
i=Or(t).getCreditsInfo(Object.keys(r).length?r:void 0),n=typeof 
e.duration=="number"?e.duration:void 0,o=typeof e.count=="number"?e.count:void 
0;return gMe(i,{duration:n,count:o})}async function t3(t,e,r,i){await 
xs(),await Pr.pricing.load();let n=await e3(t.id,e);if(!n){i.warn(`Could not 
determine cost for ${t.name}; --max-cost not enforced for this 
run.`);return}if(n.value>r){let o=n.exact?`Cost ${n.value}`:`Estimated cost 
~${n.value}`;throw new R(
 `${o} credits exceeds --max-cost ${r} for ${t.name}. Raise --max-cost or 
adjust params (resolution/duration/count) to proceed.`)}}async function 
r3(t,e,r,i){await xs(),await Pr.pricing.load();let o=(await 
Promise.all(t.map(a=>e3(a.id,e)))).filter(a=>a!=null);if(o.length===0){i.warn("Could
 not determine cost for any of the models; --max-cost not enforced for this 
run.");return}let s=o.reduce((a,A)=>a+A.value,0);if(s>r){let 
a=o.every(A=>A.exact)?`Total cost ${s}`:`Estimated total cost ~${s}`;throw new 
R(`${a} credits across ${t.length} models exceeds --max-cost ${r}. Raise 
--max-cost or compare fewer models.`)}}function i3(t){let 
e=Math.floor(t/1e3);if(e<60)return `${e}s`;let 
r=Math.floor(e/60),i=e%60;if(r<60)return `${r}m ${i}s`;let 
n=Math.floor(r/60),o=r%60;return `${n}h ${String(o).padStart(2,"0")}m`}function 
mMe(t,e=30,r){let 
i=Math.round(t/100*e),n=e-i,o=cu.green("\u2588".repeat(i))+cu.dim("\u2591".repeat(n)),s=r!=null?`
 ${cu.dim(`(${i3(r)})`)}`:"";return `${o} ${t.toFixed(0)}%${
 s}`}function n3(t){let e=t;return 
r=>{if(r.percent!=null)e.text=mMe(r.percent,30,r.elapsed);else {let 
i=i3(r.elapsed);e.text=`${r.status}... ${cu.dim(`(${i})`)}`;}}}kE();function 
s3(t){RE.event({event_type:"cli_generation_started",data:{flow_id:t.flow.id,model_id:t.inputs.model.id,model_name:t.inputs.model.name,model_vendor:t.inputs.model.provider,params:a3(t.inputs.params),files:A3(t.inputs.files)}});}function
 
PI(t){let{result:e,error:r,inputs:i}=t,n=e?.status??t.status??"failed";RE.event({event_type:"cli_generation_completed",data:{flow_id:t.flow.id,model_id:i?.model.id,model_name:i?.model.name,model_vendor:i?.model.provider,status:n,duration_ms:e?.durationMs,task_id:e?.taskId,result_count:e?.results.length,error_name:r===void
 0?void 0:r instanceof 
Error?r.constructor.name:"Unknown",error_message:r===void 0?void 0:r instanceof 
Error?r.message:String(r),params:i?a3(i.params):void 0,files:i?A3(i.files):void 
0}});}function a3(t){let e=process.env.PULSE_REDACT_PROMPTS==="1",r={};for(l
 et[i,n]of 
Object.entries(t)){if(i==="prompt"&&e){r[i]="[redacted]";continue}if(typeof 
n=="string"&&hMe(n)){r[i]=`[file:${He.extname(n).slice(1)||"unknown"}]`;continue}r[i]=n;}return
 r}function A3(t){let e={};return 
t.images?.length&&(e.images_count=t.images.length),t.startFrame&&(e.has_start_frame=true),t.endFrame&&(e.has_end_frame=true),t.video&&(e.has_video=true),t.audio&&(e.has_audio=true),t.videos?.length&&(e.videos_count=t.videos.length),t.audios?.length&&(e.audios_count=t.audios.length),e}function
 hMe(t){return 
t.startsWith("http://";)||t.startsWith("https://";)?false:!!(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("~")||/^[a-zA-Z]:[\\/]/.test(t))}Xt();function
 EMe(t){let e=sn(t);if(e==="image")return {imageUrls:[t]};if(e==="video")return 
{videoUrl:t};if(e==="audio")return {audioUrl:t};throw new Error(`Unsupported 
file type: ${t}`)}function yMe(t){let e=[...new 
Set(t.map(sn))];if(e.includes(null))throw new Error("Unsupported file type in 
directory inp
 ut");let r=e;if(r.length!==1)throw new Error("Multi mode requires files of a 
single media type");let i=r[0];if(i==="image")return 
t.flatMap(n=>["--image",n]);if(t.length!==1)throw new Error(`Multi mode 
supports exactly one ${i} file. Use --batch instead.`);return 
i==="video"?["--video",t[0]]:["--audio",t[0]]}function IMe(t){let e=[];for(let 
r=0;r<t.length;r++){let 
i=t[r];if(i==="--download"&&r+1<t.length){e.push("--output",t[++r]);continue}i==="--no-download"&&e.push("--no-download");}return
 e}async function c3(t,e){let 
r=be(),i=bI(t.type),n=Gs(He.resolve(t.inputDir),i,0);if(n.length===0)throw new 
R(`No matching files found in: ${t.inputDir}`);if(n.length>t.maxFiles)throw new 
R(`Found ${n.length} files, exceeds --max-files (${t.maxFiles}). Use 
--max-files to increase.`);r.info(`Found ${n.length} file(s) in 
${t.inputDir}`);let o;if(t.multi)o="multi";else if(t.batch)o="batch";else 
if(Ao()&&!t.silent){let u=await xe({message:"Input directory 
mode",choices:[{name:"Multi-image \u2014 sen
 d all files as inputs to one generation",value:"multi"},{name:"Batch \u2014 
one generation per file",value:"batch"}]});if(u===j||u===X)return 
{kind:"cancelled"};o=u;}else throw new R("--input-dir requires --multi or 
--batch in non-interactive mode");if(o==="multi"){if(n.length>14)throw new 
R(`Multi mode supports max 14 files, got ${n.length}. Use --batch 
instead.`);let u=["--model",e.id,...yMe(n),...t.extraArgs];return 
t.prompt&&u.push("--prompt",t.prompt),t.dryRun&&u.push("--dry-run"),t.silent&&u.push("--silent"),{kind:"multi-generate",generateArgs:u}}let
 
s={defaults:{...t.prompt?{prompt:t.prompt}:{}},jobs:n.map(u=>({id:He.basename(u,He.extname(u)),model:e.id,...EMe(u)}))};kW(s.jobs);let
 
a=He.join(ji.tmpdir(),`gen-ai-batch-${Date.now()}.json`);Ie.writeFileSync(a,JSON.stringify(s,null,2));let
 A=[a,"--concurrency",String(t.concurrency),...IMe(t.extraArgs)];return 
t.dryRun&&A.push("--dry-run"),{kind:"run-batch",batchArgs:A,tmpFile:a}}var 
CMe=new Set(["input-dir","multi","batch","type"
 
,"max-files","concurrency","model","prompt","dry-run","silent","image","video","audio"]);async
 function g3(t,e,r){let i=e["input-dir"];if(typeof 
i!="string"||i.length===0)return;let n=typeof e.model=="string"?e.model:void 
0;if(!n)throw new R("--input-dir requires --model (-m) to know which model to 
dispatch.");let o=xI(n,t);if(!o)throw new R(`Model "${n}" is not in the ${t.id} 
flow's catalog.`);let s=BMe(e),a=await c3({inputDir:i,prompt:typeof 
e.prompt=="string"?e.prompt:void 
0,multi:e.multi===true,batch:e.batch===true,type:e.type,maxFiles:typeof 
e["max-files"]=="number"?e["max-files"]:30,concurrency:typeof 
e.concurrency=="number"?e.concurrency:3,dryRun:e["dry-run"]===true,silent:r.flags.noInput,extraArgs:s},o);if(a.kind!=="cancelled"){if(a.kind==="multi-generate"){await
 run([t.id,...a.generateArgs]);return}try{await 
run(["batch:run",...a.batchArgs]);}finally{try{Ie.unlinkSync(a.tmpFile);}catch{}}}}function
 BMe(t){let e=[];for(let[r,i]of Object.entries(t))if(!CMe.has(r)&&!(i==null||
 
i===false)){if(i===true){e.push(`--${r}`);continue}if(Array.isArray(i)){for(let 
n of i)e.push(`--${r}`,String(n));continue}e.push(`--${r}`,String(i));}return 
e}async function QMe(t,e,r){if(typeof 
e["input-dir"]=="string"&&e["input-dir"].length>0){await g3(t,e,r);return}let 
i=$J(e,Et(),{json:r.flags.json||e.output==="json",quiet:r.flags.quiet,plain:r.flags.plain}),n,o,s,a=false;try{let
 A=await vJ(t,e,r);if(!A)return;n=A,typeof e["max-cost"]=="number"&&await 
t3(A.model,A.params,e["max-cost"],r.out);let{authenticatedFetch:u,creds:l}=await
 Bi(),d=u,f=_t(),g=ss(),h;i.driveSave&&(h=await 
JJ({token:l.token,uid:l.uid,uploadUrl:g,driveFolder:i.driveFolder}));let 
m=oJ(`${A.model.name}...`,r.flags.quiet);o=m;let E=new 
AbortController,y=()=>{E.abort(),m.fail("Cancelled"),process.removeListener("SIGINT",y),process.once("SIGINT",()=>process.exit(130)),(async()=>{try{PI({flow:t,flags:e,inputs:A,status:"cancelled",error:new
 Error("User cancelled (SIGINT)")}),await FE();}finally{process.exit(130);}}
 )().catch(()=>{});};s=y,process.on("SIGINT",y),m.start();let 
B=e["poll-timeout"],Q=typeof B=="string"?kJ(B):void 
0;s3({flow:t,flags:e,inputs:A});let b=await 
RJ(A,{apiUrl:f,uploadUrl:g,authenticatedFetch:d},{signal:E.signal,onProgress:n3(m),pollTimeoutMs:Q});if(PI({flow:t,flags:e,inputs:A,result:b}),a=!0,b.status==="completed"){let
 T=Math.floor(b.durationMs/1e3);m.succeed(`${A.model.name} \xB7 ${T}s`);}else 
b.status==="cancelled"?m.fail("Cancelled"):b.status==="timeout"?m.warn("Still 
running on server"):m.fail("Failed");process.removeListener("SIGINT",y);let 
w=RW(r,{authenticatedFetch:d,uploadUrl:g});await 
jJ(b,i,w,h);}catch(A){if(s&&process.removeListener("SIGINT",s),o?.stop(),a||PI({flow:t,inputs:n,status:"failed",error:A}),ZJ(A)){process.exitCode=ue.CREDITS_ERROR,await
 XJ(A,r);return}throw A}}function $(t){class e extends F{static 
summary=t.description;static examples=t.examples?[...t.examples]:[];static 
flags=JS(t,on(),P.list());async run(){let{flags:i}=await this.parse(this.cons
 tructor);await QMe(t,i,this.deps);}}return e}var Kt=$(J.generate);function 
lD(t){let e=Math.floor(t/1e3);if(e<60)return `${e}s`;let 
r=Math.floor(e/60),i=e%60;if(r<60)return `${r}m ${i}s`;let 
n=Math.floor(r/60),o=r%60;return `${n}h ${String(o).padStart(2,"0")}m`}function 
GI(t,e){let 
r=t.status==="completed"?e.green("completed"):t.status==="cancelled"?e.dim("cancelled"):e.red(t.status==="timeout"?"timeout":"failed"),i=[];return
 t.id&&i.push(["Id",t.id]),i.push(["Model",`${t.modelName??t.model} 
(${t.model})`],["Prompt",t.prompt??"(none)"],["Status",r]),t.resultUrl&&i.push(["Result",t.resultUrl]),t.resultUrls&&t.resultUrls.length>1&&i.push(["Results",`${t.resultUrls.length}
 
items`]),t.durationMs&&i.push(["Duration",lD(t.durationMs)]),i.push(["Time",t.timestamp]),t.error&&i.push(["Error",t.error]),Object.keys(t.params).length>0&&i.push(["Params",JSON.stringify(t.params)]),Te(i,{color:e}).split(`
 `)}var od=class t extends F{static description="Browse recent generation 
history (interactive) or print it as a table";static examples=[{command:"<%= 
config.bin %> history",description:"Browse with arrow keys; select an entry to 
view details or replay it"},{command:"<%= config.bin %> replay 
<id>",description:"Re-run a specific entry by the id shown here"},{command:"<%= 
config.bin %> history -n 50 --json",description:"Last 50 entries as JSON 
(includes ids)"}];static 
flags={...F.baseFlags,n:Flags.integer({char:"n",description:"Number of entries 
to show",default:20,min:1})};async run(){let{flags:e}=await 
this.parse(t),r=qj(e.n);if(r.length===0){this.out.info("No generation history 
yet.");return}if(this.isJsonMode){this.out.json(r);return}if(this.noInput){this.renderTable(r);return}await
 this.browse(r);}async browse(e){let 
r=e.map((i,n)=>({name:this.formatRow(i),value:n}));for(;;){let i=await 
xe({message:"Generation history (\u2191\u2193 to browse, Enter for 
details):",choices:r,pageSiz
 e:15});if(i===j||i===X)return;let 
n=e[i];this.out.card(GI(n,this.color),{title:"Generation Details"});let o=await 
xe({message:"What next?",choices:[{name:"Replay this 
generation",value:"replay"},{name:"Back to 
list",value:"back"}]});if(o==="replay"){await 
Kt.run(Au(n));return}if(o===j||o===X)return}}formatRow(e){let 
r=this.color.dim((e.id??"").padEnd(11).slice(0,11)),i=e.timestamp.replace("T"," 
").slice(0,19),n=(e.modelName??e.model).padEnd(22).slice(0,22),o=Ir(e.prompt??"(no
 
prompt)",32).padEnd(32),s=e.status==="completed"?this.color.green("OK"):this.color.red("FAIL");return
 `${r}  ${this.color.dim(i)}  ${n}  ${o}  
${s}`}renderTable(e){this.out.divider({label:"Generation 
History"}),process.stderr.write(`
 `);let r=e.map(i=>({id:i.id??"-",time:i.timestamp.replace("T"," 
").slice(0,19),model:i.modelName??i.model,prompt:Ir(i.prompt??"(no 
prompt)",30),status:i.status==="completed"?this.color.green("OK"):this.color.red("FAIL"),duration:i.durationMs?lD(i.durationMs):"-"}));if(this.out.richTable(r,{columns:[{key:"id",label:"Id"},{key:"time",label:"Time"},{key:"model",label:"Model"},{key:"prompt",label:"Prompt"},{key:"status",label:"Status"},{key:"duration",label:"Duration"}]}),!this.isQuiet){let
 i=ou().length;this.out.result(`
 ${e.length} entries (total: ${i})`);}}};var sd=class extends F{static 
description="Show the most recent generation entry";static examples=["<%= 
config.bin %> history last","<%= config.bin %> history last --json"];static 
flags={...F.baseFlags};async run(){let e=qs();if(!e){this.out.info("No 
generation 
history.");return}if(this.isJsonMode){this.out.json(e);return}this.out.card(GI(e,this.color),{title:"Last
 Generation"});}};var 
kMe=fileURLToPath(import.meta.url),cD=dirname(kMe);function FMe(t){try{return 
readdirSync(t,{withFileTypes:!0}).some(e=>e.isDirectory()&&existsSync(join(t,e.name,"SKILL.md")))}catch{return
  false}}function _Me(){let 
t=[join(cD,"skills"),join(cD,"..","..","..","skills"),join(cD,"..","..","..","install","skills")];return
 t.find(FMe)??t.find(e=>existsSync(e))??t[0]}async function TMe(t={}){let 
e=process.env.GEN_AI_SKILLS_SRC??_Me(),r=process.env.GEN_AI_SKILLS_DEST??t.to??join(homedir(),".claude","skills");if(!existsSync(e))throw
 new Error(`Skills source not found: 
 ${e}`);mkdirSync(r,{recursive:true});let 
i=readdirSync(e,{withFileTypes:true}).filter(A=>A.isDirectory()&&existsSync(join(e,A.name,"SKILL.md"))).map(A=>A.name),n=0,o=0;for(let
 A of i){let 
u=join(r,A);if(existsSync(u)&&!t.force){o++,process.stderr.write(`\u2014 ${A} 
(already exists; use --force to overwrite)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/package.json new/package/package.json
--- old/package/package.json    1985-10-26 09:15:00.000000000 +0100
+++ new/package/package.json    1985-10-26 09:15:00.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "name": "@picsart/gen-ai",
-  "version": "2.68.1",
+  "version": "2.69.0",
   "type": "module",
   "description": "Picsart AI CLI — generate images, video, and audio from the 
terminal",
   "license": "MIT",

++++++ node_modules.obscpio ++++++
Binary files old/picomatch-4.0.5.tgz and new/picomatch-4.0.5.tgz differ
Binary files old/picomatch-4.0.7.tgz and new/picomatch-4.0.7.tgz differ

++++++ node_modules.spec.inc ++++++
--- /var/tmp/diff_new_pack.SaBrJK/_old  2026-08-25 13:20:27.197727469 +0200
+++ /var/tmp/diff_new_pack.SaBrJK/_new  2026-08-25 13:20:27.208727857 +0200
@@ -52,7 +52,7 @@
 Source10051:         
https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz#/mute-stream-3.0.0.tgz
 Source10052:         
https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz#/onetime-7.0.0.tgz
 Source10053:         
https://registry.npmjs.org/ora/-/ora-8.2.0.tgz#/ora-8.2.0.tgz
-Source10054:         
https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz#/picomatch-4.0.5.tgz
+Source10054:         
https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz#/picomatch-4.0.7.tgz
 Source10055:         
https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz#/powershell-utils-0.1.0.tgz
 Source10056:         
https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz#/restore-cursor-5.1.0.tgz
 Source10057:         
https://registry.npmjs.org/semver/-/semver-7.8.5.tgz#/semver-7.8.5.tgz

++++++ node_modules.sums ++++++
--- /var/tmp/diff_new_pack.SaBrJK/_old  2026-08-25 13:20:27.274730188 +0200
+++ /var/tmp/diff_new_pack.SaBrJK/_new  2026-08-25 13:20:27.279730364 +0200
@@ -52,7 +52,7 @@
 SHA512 (mute-stream-3.0.0.tgz) = 
7641093d5bee9f816bcaa0666792a10e8d0af620d70309f4f2d30b0e29cd75104d3dc6040e2598cac2dc73a9379a34cc95b3fd2b2ca5bd1a5de3016dc2b4fdaf
 SHA512 (onetime-7.0.0.tgz) = 
55726373cec549c17cf2e69f4b726594382f026f9cfd295fcf4ea5a2b8f6b80637e2b954bb436dfaff30ade88899cae00238c81e9d6b5e94c394b386c36f56c1
 SHA512 (ora-8.2.0.tgz) = 
c1e3fe059f0c54d9e50a6f1cd1075cd56496ab8427ec8fbd0891a6ed06a58ba838e1efcf5336e336a257e4d27d96394d328b1f26f8357ca10620b9252bd7309f
-SHA512 (picomatch-4.0.5.tgz) = 
46fc3072bb8d8c8d67713e7145a91ec92f4b7fc95c22dbf7e0a0fe6a27fe547f6476e0327d8062a46875db6ef8c6d7a720f675d7dfd1f4175305af200304a1d0
+SHA512 (picomatch-4.0.7.tgz) = 
a9c26ef3c436216a89b030f9dbd24a31dc069bf76f2275b81ef427470887f49b62849bf318eb1c0ed1c4df1d6904a794393cac43c91598b9c9da426eef285c18
 SHA512 (powershell-utils-0.1.0.tgz) = 
74cd2356e5c93ec0cde83bd1a5e6b8f38b4251a3225d68ee0a7fbe1c64ea516cc60e3bf9b5990466574027f50c96a458185ac3fdeb41ca8e3fc4eb82fec9d7d8
 SHA512 (restore-cursor-5.1.0.tgz) = 
a0c03675caf0eaed187f12505e6df8d9b14a5ff138b06f6b6d3ccef69b54711fdef00df7707baf4ad8983b01fb7ecce4665675cffb5af400283e4d85e2a20e1c
 SHA512 (semver-7.8.5.tgz) = 
63bfca0ec6fc2e3a28669c1aa86cae94ee8342592c8029dc7211c693eb19218e1206f52870c044147e54af57c8e1d57e26f974c3a723bee71a222e34a6e462a0

++++++ package-lock.json ++++++
--- /var/tmp/diff_new_pack.SaBrJK/_old  2026-08-25 13:20:27.332732236 +0200
+++ /var/tmp/diff_new_pack.SaBrJK/_new  2026-08-25 13:20:27.344732660 +0200
@@ -1,12 +1,12 @@
 {
   "name": "@picsart/gen-ai",
-  "version": "2.68.1",
+  "version": "2.69.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "@picsart/gen-ai",
-      "version": "2.68.1",
+      "version": "2.69.0",
       "license": "MIT",
       "dependencies": {
         "@inquirer/checkbox": "^5.1.2",
@@ -750,9 +750,9 @@
       }
     },
     "node_modules/picomatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz";,
-      "integrity": 
"sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz";,
+      "integrity": 
"sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
       "license": "MIT",
       "engines": {
         "node": ">=12"

Reply via email to