qlogicagent 2.10.26 → 2.10.27
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/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -538,7 +538,7 @@ describe: Show workflow steps and variables.`},workflow:{type:"string",descripti
|
|
|
538
538
|
`))}async function Qb(t,e,r){let n=De.getTransport(t);if(!n)return{ok:!1,error:"transport not available"};let o=Qt(wr,t);if(!o)return{ok:!1,error:"no API key"};try{let s={...r,model:e},i=await n.generate(s,o);i.billingUnit||(r.mediaType==="tts"&&r.text?(i.billingUnit="per_character",i.billingQuantity=r.text.length):(r.mediaType==="video"||r.mediaType==="music")&&r.duration?(i.billingUnit="per_second",i.billingQuantity=r.duration):(i.billingUnit="per_call",i.billingQuantity=1));let a=i.model??s.model,c=i.billingUnit??"per_call",l=i.billingQuantity??1;return tv?.(a,c,l),{ok:!0,result:i}}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}}function Ft(t){if(!De)return!1;let e=or[t];if(!e)return!1;let r=De.getTransport(e.provider),n=Qt(wr,e.provider);return!!(r&&n)}function Ul(t,e){if(!Ft(t))return!1;let r=or[t],n=De.resolveModelById(r.provider,r.model,t);if(!n)return!1;let o=n.modelInfo.mediaCapabilities;return!o||!("operations"in o)||!o.operations?!0:o.operations.includes(e)}var Ve=process.cwd(),Bl=!1;function av(t){Ve=t,Bl=!0,ws(t)}function Ne(t){return U.isAbsolute(t)?U.normalize(t):U.resolve(Ve,t)}function Wn(t){let e=U.resolve(Ve)+U.sep,r=U.resolve(t);return process.platform==="win32"?r.toLowerCase().startsWith(e.toLowerCase())||r.toLowerCase()===e.slice(0,-1).toLowerCase():r.startsWith(e)||r===e.slice(0,-1)}function Xt(t){return Wn(t)?null:`Blocked: path "${t}" is outside the workspace boundary "${Ve}"`}function Zb(t){let e=t.replace(/\\/g,"/");return e.includes("../")||e.includes("..")}var c0=new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg",".ico"]),cv=new Set([".exe",".dll",".so",".dylib",".zip",".tar",".gz",".7z",".rar",".wasm",".class"]),ql=new Set;function l0(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=U.extname(e).toLowerCase();if(Bl){let o=Xt(e);if(o)throw new Error(o)}else if(Zb(t)&&!Wn(e))throw new Error(`Blocked: path traversal "${t}" escapes workspace "${Ve}"`);if(e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/"))throw new Error(`Blocked: reading device/system path ${e}`);if(cv.has(r))return{type:"binary",mimeType:"application/octet-stream"};if(c0.has(r))return{type:"image",localPath:e,mimeType:r===".png"?"image/png":r===".svg"?"image/svg+xml":r===".gif"?"image/gif":r===".webp"?"image/webp":"image/jpeg"};let n=await j.promises.readFile(e,"utf8");return ql.add(e),{type:"text",text:n}},validatePath(t){let e=Ne(t);if(Bl){let r=Xt(e);if(r)return r}else if(Zb(t)&&!Wn(e))return`Blocked: path traversal "${t}" escapes workspace "${Ve}"`;return e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/")?`Blocked: reading device/system path ${e}`:Wl&&$l(e)?"Blocked: reading sensitive file in group chat mode":null}}}function d0(){return{resolvePath:Ne,validatePath(t){let e=Ne(t),r=Xt(e);return r||(e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/")?`Blocked: writing to device/system path ${e}`:Wl&&$l(e)?"Blocked: writing sensitive file in group chat mode":null)},checkReadBeforeWrite(t){try{j.accessSync(t,j.constants.F_OK)}catch{return null}return ql.has(t)?null:"File already exists but has not been read yet in this session. Read it first with the read tool before overwriting, to avoid unintended data loss. If you intend to completely replace the file, read it first to confirm."},async writeFile(t,e){let r=Ne(t),n=Xt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8"),ql.add(r)}}}function u0(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=Xt(e);if(r)throw new Error(r);return j.promises.readFile(e,"utf8")},async writeFile(t,e){let r=Ne(t),n=Xt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8")}}}function p0(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=Xt(e);if(r)throw new Error(r);return j.promises.readFile(e,"utf8")},async writeFile(t,e){let r=Ne(t),n=Xt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8")},async deleteFile(t){let e=Ne(t),r=Xt(e);if(r)throw new Error(r);await j.promises.unlink(e)},async fileExists(t){let e=Ne(t);try{return await j.promises.access(e),!0}catch{return!1}}}}function m0(){return{resolvePath:Ne,async glob(t,e){let r=e.cwd||Ve,n=e.limit||1e3,o=[],s=!1,i=t.replace(/\\/g,"/").split("/"),a=i.some(d=>d==="**"),c=i[i.length-1]??"*",l=lv(c);try{await Vl(r,async d=>{if(o.length>=n)return s=!0,!1;let u=U.basename(d);return l.test(u)&&o.push(d),!0},a?1/0:1)}catch{}return{files:o,truncated:s}},async grep(t,e){let r=e.cwd||Ve;try{return await f0(t,r,e)}catch{return await h0(t,r,e)}}}}function lv(t){let e=t.replace(/[.+^$|()[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return e=e.replace(/\\\{([^}]+)\\\}/g,(r,n)=>"("+n.replace(/,/g,"|")+")"),new RegExp(`^${e}$`,"i")}var g0=new Set([".git",".svn",".hg","node_modules","__pycache__",".next","dist",".tox",".venv"]);async function Vl(t,e,r,n=0,o=""){if(n>r)return;let s;try{s=await j.promises.readdir(t,{withFileTypes:!0})}catch{return}for(let i of s){let a=o?`${o}/${i.name}`:i.name;if(i.isDirectory()){if(g0.has(i.name))continue;await Vl(U.join(t,i.name),e,r,n+1,a)}else if(i.isFile()&&!await e(a))return}}function f0(t,e,r){return new Promise((n,o)=>{let s=["--json","--no-heading","--max-columns","500"];r.caseInsensitive&&s.push("-i"),r.contextLines&&s.push("-C",String(r.contextLines)),r.fileGlob&&s.push("-g",r.fileGlob),s.push("--max-count",String(r.headLimit??250)),s.push(t),s.push("."),t0("rg",s,{cwd:e,maxBuffer:10*1024*1024,timeout:3e4},(i,a)=>{if(i&&!("killed"in i&&i.killed)&&i.code!==1){o(i);return}let c=[];for(let p of a.split(`
|
|
539
539
|
`))if(p.trim())try{let m=JSON.parse(p);m.type==="match"&&m.data&&c.push({path:m.data.path?.text??"",line:m.data.line_number??0,text:(m.data.lines?.text??"").trimEnd()})}catch{}let l=r.headLimit??250,d=r.offset??0,u=c.slice(d,d+l);n({matches:u,truncated:c.length>d+l})})})}async function h0(t,e,r){let n=new RegExp(t,r.caseInsensitive?"i":""),o=r.headLimit??250,s=r.offset??0,i=r.fileGlob?lv(r.fileGlob):null,a=[],c=!1;return await Vl(e,async l=>{if(a.length>=s+o+1)return c=!0,!1;if(i&&!i.test(U.basename(l)))return!0;let d=U.extname(l).toLowerCase();if(cv.has(d))return!0;try{let p=(await j.promises.readFile(U.join(e,l),"utf8")).split(`
|
|
540
540
|
`);for(let m=0;m<p.length;m++)if(n.test(p[m])&&(a.push({path:l,line:m+1,text:p[m].slice(0,500)}),a.length>=s+o+1))return c=!0,!1}catch{}return!0},1/0),{matches:a.slice(s,s+o),truncated:c}}var ev=!1;function y0(){if(!ev)if(ev=!0,Tr()){let t=process.env.QLOGICAGENT_POWERSHELL_PATH??"powershell.exe";Fn(Tl(t))}else if(process.platform==="win32"){let t=b0();Fn(Cs(t))}else{let t=process.env.SHELL?.endsWith("bash")?process.env.SHELL:"/bin/bash";Fn(Cs(t))}}function b0(){let t=process.env.QLOGICAGENT_BASH_PATH;if(t&&j.existsSync(t))return t;let e=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files (x86)\\Git\\bin\\bash.exe"],r=process.env.ProgramFiles?U.join(process.env.ProgramFiles,"Git","bin","bash.exe"):null;r&&!e.includes(r)&&e.unshift(r);for(let n of e)if(j.existsSync(n))return n;return"bash"}function v0(){return{async fetchUrl(t){let e=new AbortController,r=setTimeout(()=>e.abort(),3e4);try{let n=await fetch(t.url,{signal:e.signal,headers:{"User-Agent":"Mozilla/5.0 (compatible; QLogicAgent/1.0)",Accept:"text/html,application/xhtml+xml,text/plain,*/*"},redirect:"follow"});if(!n.ok)return{content:`HTTP ${n.status} ${n.statusText}`};let o=n.headers.get("content-type")??"",s=await n.text();return t.maxChars&&s.length>t.maxChars&&(s=s.slice(0,t.maxChars)),o.includes("html")&&t.extractMode!=="json"&&(s=k0(s)),{content:s,title:R0(s)}}finally{clearTimeout(r)}}}}function k0(t){return t.replace(/<script[\s\S]*?<\/script>/gi,"").replace(/<style[\s\S]*?<\/style>/gi,"").replace(/<[^>]+>/g," ").replace(/ /gi," ").replace(/&/gi,"&").replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,'"').replace(/'/gi,"'").replace(/\s{2,}/g," ").trim()}function R0(t){return t.match(/<title[^>]*>([^<]+)<\/title>/i)?.[1]?.trim()}function S0(){let t=async(e,r)=>{let{getModelRegistry:n}=await Promise.resolve().then(()=>(qe(),Iu)),o=n().getTunable("searxngBaseUrl")??process.env.SEARXNG_BASE_URL?.trim();if(!o)return{query:e,results:[],totalResults:0};let s=r?.maxResults??10,i=new URL("/search",o);i.searchParams.set("q",e),i.searchParams.set("format","json"),i.searchParams.set("pageno","1");let a=new AbortController,c=setTimeout(()=>a.abort(),15e3);try{let l=await fetch(i.toString(),{signal:a.signal,headers:{Accept:"application/json"}});if(!l.ok)return{query:e,results:[]};let d=await l.json(),u=(d.results??[]).slice(0,s).map(p=>({title:p.title??"",url:p.url??"",snippet:p.content??""}));if(r?.allowedDomains?.length){let p=new Set(r.allowedDomains.map(m=>m.toLowerCase()));return{query:e,results:u.filter(m=>{try{return p.has(new URL(m.url).hostname.toLowerCase())}catch{return!1}})}}if(r?.blockedDomains?.length){let p=new Set(r.blockedDomains.map(m=>m.toLowerCase()));return{query:e,results:u.filter(m=>{try{return!p.has(new URL(m.url).hostname.toLowerCase())}catch{return!0}})}}return{query:e,results:u,totalResults:d.number_of_results}}finally{clearTimeout(c)}};return{search:(e,r)=>Yb(rv,t)(e,r)}}function T0(){function t(o){if(o==="default")return ne()?.workspaceDir??Ve;let s=Ee(o);if(!s)throw new Error(`Unknown project: ${o}`);return s.workspaceDir}function e(o){return Zt(t(o))}function r(o,s){if(!s.endsWith(".md"))throw new Error("Filename must end with .md");if(s.includes(".."))throw new Error("Path traversal not allowed");let i=e(o),a=U.resolve(i,s);if(!a.startsWith(i+U.sep)&&a!==i)throw new Error("Path traversal not allowed");return a}function n(o,s){if(!j.existsSync(o))return[];let i=[];for(let a of j.readdirSync(o,{withFileTypes:!0})){let c=U.join(o,a.name);if(a.isDirectory())i.push(...n(c,s));else if(a.isFile()&&a.name.endsWith(".md")){let l=j.statSync(c);i.push({filename:U.relative(s,c).replace(/\\/g,"/"),path:c,size:l.size,updatedAt:l.mtime.toISOString(),content:j.readFileSync(c,"utf-8")})}}return i}return{list(o){let s=e(o);return n(s,s).map(i=>({filename:i.filename,path:i.path,size:i.size,updatedAt:i.updatedAt}))},read(o,s){try{let i=r(o,s);if(!j.existsSync(i))return null;let a=j.statSync(i),c=j.readFileSync(i,"utf-8");return{filename:s,path:i,size:a.size,updatedAt:a.mtime.toISOString(),content:c}}catch{return null}},write(o,s,i){let a=r(o,s);j.mkdirSync(U.dirname(a),{recursive:!0}),j.writeFileSync(a,i,"utf-8");let c=j.statSync(a);return{filename:s,path:a,size:c.size,updatedAt:c.mtime.toISOString(),content:i}},remove(o,s){try{let i=r(o,s);return j.existsSync(i)?(j.unlinkSync(i),!0):!1}catch{return!1}}}}var A0={think:"orchestration",task:"orchestration",ask_user:"orchestration",exec:"developer",read:"filesystem",write:"filesystem",edit:"filesystem",patch:"filesystem",apply_patch:"filesystem",search:"search",web_fetch:"web",web_search:"web",instructions:"filesystem",worktree:"developer",notebook_edit:"developer",workflow:"automation",sleep:"automation",project_switch:"system",tool_search:"search",image_generate:"media",tts:"media",video_generate:"media",music_generate:"media",video_edit:"media",video_merge:"media",video_upscale:"media",three_d_generate:"media",stt:"media",voice_clone:"media",media_cancel:"media",file_upload:"filesystem",file_query:"filesystem",file_delete:"filesystem"};function w0(t){for(let e of t)e.category??=A0[e.name]??"other",e.displayName??={key:`capability.tool.${e.name}.name`,fallback:e.label},e.displayDescription??={key:`capability.tool.${e.name}.description`,fallback:""}}function dv(t){t?.workdir&&(Ve=t.workdir),y0(),ws(Ve);let e=[];e.push(Ay()),e.push(Pg(void 0,{onTaskCreated:u=>Hl?.onTaskCreated?.(u),onTaskCompleted:u=>Hl?.onTaskCompleted?.(u)})),e.push(Wb({askUser:async u=>nv?.(u)??null})),e.push(jy({onProgress:t?.onExecProgress,validateCommand:async u=>{let p=/(?:>>?|[12]>)\s*(?:"([^"]+)"|'([^']+)'|(\S+))/g,m;for(;(m=p.exec(u))!==null;){let f=m[1]||m[2]||m[3];if(f){let h=U.isAbsolute(f)?U.normalize(f):U.resolve(Ve,f);if(!Wn(h))return`Blocked: output redirection to path outside workspace: ${f}`}}let g=[/(?:^|[\s;|&(])(?:"(\/[^"]+)"|'(\/[^']+)'|(\/(?!dev\/null\b)[^\s;|&><)]+))/g,/(?:^|[\s;|&(])(?:"([A-Za-z]:[\\\/][^"]+)"|'([A-Za-z]:[\\\/][^']+)'|([A-Za-z]:[\\\/][^\s;|&><)]+))/g,/(?:^|[\s;|&(])(?:"([^"]*\.\.[\\/][^"]+)"|'([^']*\.\.[\\/][^']+)'|([^\s;|&><)"']*\.\.[\\/][^\s;|&><)]+))/g];for(let f of g){let h;for(;(h=f.exec(u))!==null;){let v=h[1]||h[2]||h[3];if(!v||/^\/[a-zA-Z](?:[- ]|$)/.test(v)||/^\/[a-zA-Z]{1,3}$/.test(v))continue;let b;if(process.platform==="win32"&&/^\/[a-zA-Z]\//.test(v)){let R=v.replace(/^\/([a-zA-Z])\//,(T,A)=>`${A.toUpperCase()}:\\`).replace(/\//g,"\\");b=U.normalize(R)}else b=U.isAbsolute(v)?U.normalize(v):U.resolve(Ve,v);if(!Wn(b))return`Blocked: command references path outside workspace: ${v}`}}return null},interpretExitCode:(u,p)=>{if(u===127)return"command not found";if(u===126)return"permission denied";if(u===137)return"killed (SIGKILL / OOM)";if(u===143)return"terminated (SIGTERM)";if(u===130)return"interrupted (Ctrl+C)"}}));let r=l0(),n=d0(),o=u0(),s=p0();e.push(Fy(r)),e.push(By(n)),e.push(qy(o)),e.push(Cl(s)),e.push(zy(s)),e.push(Ky(m0())),e.push(rb(v0())),e.push(nb(S0()));let i=T0();e.push(ob(i));let a=t?.log??{info:()=>{},warn:()=>{}};e.push(sb(vb({log:a}))),e.push(Tb());let c={invokeTool:async(u,p,m)=>{let g=Ce(u);if(!g)return{result:"",error:`Unknown tool: ${u}`};try{let f=await g.execute(`wf_${Date.now()}`,p,m);return{result:f.content.map(v=>v.text??"").join(`
|
|
541
|
-
`),error:f.details?.error}}catch(f){return{result:"",error:f.message}}},getCwd:()=>Ve};e.push(Pb(c)),e.push(xb({sleep:(u,p)=>new Promise(m=>{let g=Date.now(),f=setTimeout(()=>{m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!1})},u),h=()=>{clearTimeout(f),m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!0,interruptReason:"aborted"})};p.addEventListener("abort",h,{once:!0}),p.aborted&&(clearTimeout(f),h())})}));let l={listProjects:()=>V(),switchProject:u=>St(u),onSwitched:u=>r0?.(u)};e.push(Gb(l)),e.push(Ib({searchTools:async(u,p)=>{let m=p?.maxResults??5,g=zt(),f=u.toLowerCase().split(/\s+/).filter(Boolean),h=[],v=[];for(let P of f)P.startsWith("+")&&P.length>1?h.push(P.slice(1)):v.push(P);let b=[...h,...v],R=P=>P.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase().split(/\s+/).filter(Boolean);return{matches:g.map(P=>{let I=Ce(P),E=R(P),L=(I?.description??"").toLowerCase(),ve=(I?.searchHint??"").toLowerCase();if(h.length>0){let Z=`${E.join(" ")} ${L} ${ve}`;if(!h.every(D=>Z.includes(D)))return null}let k=0;for(let Z of b){let ke=0;E.some(D=>D===Z)?ke=10:E.some(D=>D.includes(Z))?ke=5:P.toLowerCase().includes(Z)&&(ke=3),ve&&new RegExp(`\\b${Z}`,"i").test(ve)&&(ke+=4),new RegExp(`\\b${Z}`,"i").test(L)&&(ke+=2),k+=ke}return{name:P,description:I?.description??"",searchHint:I?.searchHint,score:k}}).filter(P=>P!==null&&P.score>0).sort((P,I)=>I.score-P.score).slice(0,m),query:u,totalDeferred:g.length}},activateTool:async u=>yp(u)})),e.push({...Eb({generateImage:async u=>{let p=await Ut({mediaType:"image",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,size:u.size,imageUrl:u.imageUrl,n:u.n,quality:u.quality,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,size:p.size,durationMs:p.durationMs}}}),isEnabled:()=>Ft("image")}),e.push({..._b({textToSpeech:async u=>{let p=await Ut({mediaType:"tts",model:"",prompt:"",text:u.text,channel:u.channel,voice:u.voice,speed:u.speed});return{audioPath:"",provider:p.model,mediaUrls:p.mediaUrls}}}),isEnabled:()=>Ft("tts")}),e.push({...Mb({generateVideo:async u=>{let p=await Ut({mediaType:"video",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,imageUrl:u.imageUrl,referenceVideos:u.referenceVideos,referenceAudios:u.referenceAudios,generateAudio:u.generateAudio,aspectRatio:u.aspectRatio,duration:u.duration,resolution:u.resolution,fps:u.fps,seed:u.seed,cameraFixed:u.cameraFixed,returnLastFrame:u.returnLastFrame,draft:u.draft,serviceTier:u.serviceTier,callbackUrl:u.callbackUrl,safetyIdentifier:u.safetyIdentifier,executionExpiresAfterSeconds:u.executionExpiresAfterSeconds,videoTools:u.videoTools});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,lastFrameUrl:p.lastFrameUrl,taskId:p.taskId}}}),isEnabled:()=>Ft("video")}),e.push({...Db({generateMusic:async u=>{let p=await Ut({mediaType:"music",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,lyrics:u.lyrics,duration:u.duration,isInstrumental:u.isInstrumental,audioUrl:u.audioUrl,audioFormat:u.audioFormat});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}},generateLyrics:async u=>{let p=or.music;if(!p||!De)return"";let m=De.getTransport(p.provider);if(!Ud(m))return"";let g=Qt(wr,p.provider);return g?m.generateLyrics(u,g):""}}),isEnabled:()=>Ft("music")}),e.push({...Nb({editVideo:async u=>{let p=await Ut({mediaType:"video",model:"",prompt:u.prompt,operation:"edit",sourceVideos:u.sourceVideos,referenceImages:u.referenceImages,duration:u.duration,aspectRatio:u.aspectRatio,resolution:u.resolution});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ul("video","edit")}),e.push({...Lb({mergeVideos:async u=>{let p=[`merge ${u.clips.length} clips`];u.transition&&p.push(`transition: ${u.transition}${u.transitionDuration?` (${u.transitionDuration}s)`:""}`),u.subtitles&&p.push(`burn-in subtitles: ${u.subtitles}`),u.bgm&&p.push(`background music: ${u.bgm}${u.bgmVolume!==void 0?` at volume ${u.bgmVolume}`:""}`);let m=await Ut({mediaType:"video",model:"",prompt:p.join("; "),operation:"merge",sourceVideos:u.clips.map(g=>g.video),resolution:u.outputResolution,fps:u.outputFps});return{localPath:"",servePath:m.mediaUrls[0]??"",durationSec:(m.durationMs??0)/1e3,clipCount:u.clips.length,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>Ul("video","merge")}),e.push({...Ob({upscaleVideo:async u=>{let p=["upscale"];u.sharpness&&p.push(`sharpness: ${u.sharpness}`);let m=await Ut({mediaType:"video",model:"",prompt:p.join(", "),operation:"upscale",sourceVideos:[u.video],resolution:u.targetResolution??"1080p"});return{localPath:"",servePath:m.mediaUrls[0]??"",resolution:u.targetResolution??"1080p",durationSec:(m.durationMs??0)/1e3,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>Ul("video","upscale")}),e.push({...jb({generate3D:async u=>{let p=await Ut({mediaType:"3d",model:"",prompt:u.prompt,imageUrl:u.imageUrl,outputFormat:u.outputFormat,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,metadata:p.metadata}}}),shouldDefer:!0,isEnabled:()=>Ft("3d")}),e.push({...$b({speechToText:async u=>{let p=await Ut({mediaType:"stt",model:"",prompt:"",audioUrl:u.audioUrl,metadata:u.language?{language:u.language}:void 0});return{transcription:p.metadata?.transcription??"",model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ft("stt")}),e.push({...Ub({cloneVoice:async u=>{let p=await Ut({mediaType:"voice_clone",model:"",prompt:"",text:u.text,audioUrl:u.sampleAudioUrl,speed:u.speed});return{mediaUrls:p.mediaUrls,model:p.model,voiceId:p.metadata?.voiceId,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ft("voice_clone")}),e.push({...Fb({cancelTask:async u=>{let p=u.provider??"doubao";if(!De)return{ok:!1,message:"Media client not configured."};let m=De.getTransport(p);if(!m)return{ok:!1,message:`No transport for provider: ${p}`};let g=Qt(wr,p);if(!g)return{ok:!1,message:`No API key for provider: ${p}`};try{return"deleteVideoTask"in m&&typeof m.deleteVideoTask=="function"?(await m.deleteVideoTask(u.taskId,g),{ok:!0,message:"Task cancelled."}):{ok:!1,message:`Provider ${p} does not support task cancellation.`}}catch(f){return{ok:!1,message:f instanceof Error?f.message:String(f)}}}}),shouldDefer:!0,isEnabled:()=>Ft("video")||Ft("3d")});let d=Vb({getContext:()=>({mediaClient:De,mediaProviders:or,mediaApiKeys:wr}),resolvePath:Ne});return e.push({...Hb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Bb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...qb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),w0(e),hp(e),t?.log?.info(`[tool-bootstrap] Registered ${e.length} local tools (${e.filter(u=>u.isEnabled?.()!==!1).length} enabled): ${zt().join(", ")}`),e}var Zr=class{mode;rules;defaultBehavior;compiledPatterns;constructor(e){this.mode=e.mode,this.rules=[...e.rules],this.defaultBehavior=e.defaultBehavior,this.compiledPatterns=this.compileRules(this.rules)}getMode(){return this.mode}setMode(e){this.mode=e}getRules(){return this.rules}getDefaultBehavior(){return this.defaultBehavior}replaceRules(e){this.rules=[...e],this.compiledPatterns=this.compileRules(this.rules)}setDefaultBehavior(e){this.defaultBehavior=e}addRule(e){this.rules.push(e),this.compiledPatterns=this.compileRules(this.rules)}applyUpdate(e){let r={pattern:e.pattern,behavior:e.behavior,reason:e.description,source:"user"};this.rules=[r,...this.rules.filter(n=>!E0(n.pattern,e.pattern))],this.compiledPatterns=this.compileRules(this.rules)}check(e){let{toolName:r,meta:n}=e;switch(this.mode){case"bypassPermissions":return{behavior:"allow",decisionReason:{type:"mode",mode:"bypassPermissions"}};case"dontAsk":return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"mode",mode:"dontAsk"}}:{behavior:"deny",message:`Tool "${r}" denied \u2014 mode is dontAsk`,decisionReason:{type:"mode",mode:"dontAsk"}};case"plan":return{behavior:"deny",message:`Tool "${r}" paused \u2014 mode is plan (execution suspended)`,decisionReason:{type:"mode",mode:"plan"}}}for(let{rule:o,regex:s}of this.compiledPatterns)if(s.test(r))return x0(o,e);return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"tool_check",reason:"isReadOnly"}}:n?.requiresApproval?{behavior:"ask",message:`Tool "${r}" requires approval`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"requiresApproval"}}:n?.isDangerous?{behavior:"ask",message:`Tool "${r}" is marked dangerous`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"isDangerous"}}:this.mode==="acceptEdits"?{behavior:"allow",decisionReason:{type:"mode",mode:"acceptEdits"}}:this.defaultBehavior==="allow"?{behavior:"allow"}:this.defaultBehavior==="deny"?{behavior:"deny",message:`Tool "${r}" denied by default policy`,decisionReason:{type:"other",reason:"default_deny"}}:{behavior:"ask",message:`Tool "${r}" requires approval (default policy)`,toolName:r,input:e.arguments}}compileRules(e){return e.map(r=>({rule:r,regex:P0(r.pattern)}))}};function Pr(t){if(!t||typeof t!="object")return{mode:"default",rules:[],defaultBehavior:"allow"};let e=t,r=[];for(let a of["allow","deny","ask"]){let c=e[a];if(Array.isArray(c))for(let l of c)typeof l=="string"&&r.push({pattern:l,behavior:a,source:"config"})}if(Array.isArray(e.rules)){for(let a of e.rules)if(a&&typeof a=="object"){let c=a,l=c.pattern,d=c.behavior??c.action;typeof l=="string"&&typeof d=="string"&&(d==="allow"||d==="deny"||d==="ask")&&r.push({pattern:l,behavior:d,reason:typeof c.reason=="string"?c.reason:void 0,source:typeof c.source=="string"?c.source:"config"})}}let n=e.mode,o=typeof n=="string"&&C0(n)?n:"default",s=e.default??e.defaultBehavior,i=typeof s=="string"&&I0(s)?s:"allow";return{mode:o,rules:r,defaultBehavior:i}}function P0(t){let r=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*+/g,".*");return new RegExp(`^${r}$`,"i")}function x0(t,e){let r={type:"rule",rule:t};return t.behavior==="allow"?{behavior:"allow",decisionReason:r}:t.behavior==="deny"?{behavior:"deny",message:t.reason??`Tool "${e.toolName}" denied by rule "${t.pattern}"`,decisionReason:r}:{behavior:"ask",message:t.reason??`Tool "${e.toolName}" requires approval (rule "${t.pattern}")`,toolName:e.toolName,input:e.arguments,decisionReason:r}}function C0(t){return t==="default"||t==="bypassPermissions"||t==="acceptEdits"||t==="dontAsk"||t==="plan"||t==="auto"}function I0(t){return t==="allow"||t==="deny"||t==="ask"}function E0(t,e){return t.toLocaleLowerCase()===e.toLocaleLowerCase()}function uv(t,e){let r=Pr(e);return t.setMode(r.mode),t.replaceRules(r.rules),t.setDefaultBehavior(r.defaultBehavior),r}import{randomUUID as _0}from"node:crypto";function pv(t){sv(async e=>{let r=`ask-${_0().slice(0,8)}`;return new Promise(n=>{t.pendingAskUser.set(r,{resolve:n}),t.sendNotification("turn.ask_user",{requestId:r,questions:e.map(o=>({header:o.header,question:o.question,options:o.options}))})})})}function Ms(t,e){return{name:t,compute:e,cacheBreak:!1}}function Yt(t,e,r){return{name:t,compute:e,cacheBreak:!0}}var _s=new Map;async function M0(t){return(await Promise.all(t.map(async r=>{if(!r.cacheBreak&&_s.has(r.name))return _s.get(r.name)??null;let n=await r.compute();return _s.set(r.name,n),n}))).filter(r=>r!=null)}function mv(){_s.clear()}async function Ds(t){let e=[];if(t.instructionBlock&&e.push(t.instructionBlock),t.customSystemPrompt?e.push(t.customSystemPrompt):t.basePrompt&&e.push(t.basePrompt),t.sections?.length){let r=await M0(t.sections);e.push(...r)}return t.appendSystemPrompt&&e.push(t.appendSystemPrompt),e.filter(Boolean).join(`
|
|
541
|
+
`),error:f.details?.error}}catch(f){return{result:"",error:f.message}}},getCwd:()=>Ve};e.push(Pb(c)),e.push(xb({sleep:(u,p)=>new Promise(m=>{let g=Date.now(),f=setTimeout(()=>{m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!1})},u),h=()=>{clearTimeout(f),m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!0,interruptReason:"aborted"})};p.addEventListener("abort",h,{once:!0}),p.aborted&&(clearTimeout(f),h())})}));let l={listProjects:()=>V(),switchProject:u=>St(u),onSwitched:u=>r0?.(u)};e.push(Gb(l)),e.push(Ib({searchTools:async(u,p)=>{let m=p?.maxResults??5,g=zt(),f=u.toLowerCase().split(/\s+/).filter(Boolean),h=[],v=[];for(let P of f)P.startsWith("+")&&P.length>1?h.push(P.slice(1)):v.push(P);let b=[...h,...v],R=P=>P.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase().split(/\s+/).filter(Boolean);return{matches:g.map(P=>{let I=Ce(P),E=R(P),L=(I?.description??"").toLowerCase(),ve=(I?.searchHint??"").toLowerCase();if(h.length>0){let Z=`${E.join(" ")} ${L} ${ve}`;if(!h.every(D=>Z.includes(D)))return null}let k=0;for(let Z of b){let ke=0;E.some(D=>D===Z)?ke=10:E.some(D=>D.includes(Z))?ke=5:P.toLowerCase().includes(Z)&&(ke=3),ve&&new RegExp(`\\b${Z}`,"i").test(ve)&&(ke+=4),new RegExp(`\\b${Z}`,"i").test(L)&&(ke+=2),k+=ke}return{name:P,description:I?.description??"",searchHint:I?.searchHint,score:k}}).filter(P=>P!==null&&P.score>0).sort((P,I)=>I.score-P.score).slice(0,m),query:u,totalDeferred:g.length}},activateTool:async u=>yp(u)})),e.push({...Eb({generateImage:async u=>{let p=await Ut({mediaType:"image",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,size:u.size,imageUrl:u.imageUrl,n:u.n,quality:u.quality,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,size:p.size,durationMs:p.durationMs}}}),isConcurrencySafe:!0,isEnabled:()=>Ft("image")}),e.push({..._b({textToSpeech:async u=>{let p=await Ut({mediaType:"tts",model:"",prompt:"",text:u.text,channel:u.channel,voice:u.voice,speed:u.speed});return{audioPath:"",provider:p.model,mediaUrls:p.mediaUrls}}}),isConcurrencySafe:!0,isEnabled:()=>Ft("tts")}),e.push({...Mb({generateVideo:async u=>{let p=await Ut({mediaType:"video",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,imageUrl:u.imageUrl,referenceVideos:u.referenceVideos,referenceAudios:u.referenceAudios,generateAudio:u.generateAudio,aspectRatio:u.aspectRatio,duration:u.duration,resolution:u.resolution,fps:u.fps,seed:u.seed,cameraFixed:u.cameraFixed,returnLastFrame:u.returnLastFrame,draft:u.draft,serviceTier:u.serviceTier,callbackUrl:u.callbackUrl,safetyIdentifier:u.safetyIdentifier,executionExpiresAfterSeconds:u.executionExpiresAfterSeconds,videoTools:u.videoTools});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,lastFrameUrl:p.lastFrameUrl,taskId:p.taskId}}}),isConcurrencySafe:!0,isEnabled:()=>Ft("video")}),e.push({...Db({generateMusic:async u=>{let p=await Ut({mediaType:"music",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,lyrics:u.lyrics,duration:u.duration,isInstrumental:u.isInstrumental,audioUrl:u.audioUrl,audioFormat:u.audioFormat});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}},generateLyrics:async u=>{let p=or.music;if(!p||!De)return"";let m=De.getTransport(p.provider);if(!Ud(m))return"";let g=Qt(wr,p.provider);return g?m.generateLyrics(u,g):""}}),isConcurrencySafe:!0,isEnabled:()=>Ft("music")}),e.push({...Nb({editVideo:async u=>{let p=await Ut({mediaType:"video",model:"",prompt:u.prompt,operation:"edit",sourceVideos:u.sourceVideos,referenceImages:u.referenceImages,duration:u.duration,aspectRatio:u.aspectRatio,resolution:u.resolution});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ul("video","edit")}),e.push({...Lb({mergeVideos:async u=>{let p=[`merge ${u.clips.length} clips`];u.transition&&p.push(`transition: ${u.transition}${u.transitionDuration?` (${u.transitionDuration}s)`:""}`),u.subtitles&&p.push(`burn-in subtitles: ${u.subtitles}`),u.bgm&&p.push(`background music: ${u.bgm}${u.bgmVolume!==void 0?` at volume ${u.bgmVolume}`:""}`);let m=await Ut({mediaType:"video",model:"",prompt:p.join("; "),operation:"merge",sourceVideos:u.clips.map(g=>g.video),resolution:u.outputResolution,fps:u.outputFps});return{localPath:"",servePath:m.mediaUrls[0]??"",durationSec:(m.durationMs??0)/1e3,clipCount:u.clips.length,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>Ul("video","merge")}),e.push({...Ob({upscaleVideo:async u=>{let p=["upscale"];u.sharpness&&p.push(`sharpness: ${u.sharpness}`);let m=await Ut({mediaType:"video",model:"",prompt:p.join(", "),operation:"upscale",sourceVideos:[u.video],resolution:u.targetResolution??"1080p"});return{localPath:"",servePath:m.mediaUrls[0]??"",resolution:u.targetResolution??"1080p",durationSec:(m.durationMs??0)/1e3,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>Ul("video","upscale")}),e.push({...jb({generate3D:async u=>{let p=await Ut({mediaType:"3d",model:"",prompt:u.prompt,imageUrl:u.imageUrl,outputFormat:u.outputFormat,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,metadata:p.metadata}}}),isConcurrencySafe:!0,shouldDefer:!0,isEnabled:()=>Ft("3d")}),e.push({...$b({speechToText:async u=>{let p=await Ut({mediaType:"stt",model:"",prompt:"",audioUrl:u.audioUrl,metadata:u.language?{language:u.language}:void 0});return{transcription:p.metadata?.transcription??"",model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ft("stt")}),e.push({...Ub({cloneVoice:async u=>{let p=await Ut({mediaType:"voice_clone",model:"",prompt:"",text:u.text,audioUrl:u.sampleAudioUrl,speed:u.speed});return{mediaUrls:p.mediaUrls,model:p.model,voiceId:p.metadata?.voiceId,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ft("voice_clone")}),e.push({...Fb({cancelTask:async u=>{let p=u.provider??"doubao";if(!De)return{ok:!1,message:"Media client not configured."};let m=De.getTransport(p);if(!m)return{ok:!1,message:`No transport for provider: ${p}`};let g=Qt(wr,p);if(!g)return{ok:!1,message:`No API key for provider: ${p}`};try{return"deleteVideoTask"in m&&typeof m.deleteVideoTask=="function"?(await m.deleteVideoTask(u.taskId,g),{ok:!0,message:"Task cancelled."}):{ok:!1,message:`Provider ${p} does not support task cancellation.`}}catch(f){return{ok:!1,message:f instanceof Error?f.message:String(f)}}}}),shouldDefer:!0,isEnabled:()=>Ft("video")||Ft("3d")});let d=Vb({getContext:()=>({mediaClient:De,mediaProviders:or,mediaApiKeys:wr}),resolvePath:Ne});return e.push({...Hb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Bb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...qb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),w0(e),hp(e),t?.log?.info(`[tool-bootstrap] Registered ${e.length} local tools (${e.filter(u=>u.isEnabled?.()!==!1).length} enabled): ${zt().join(", ")}`),e}var Zr=class{mode;rules;defaultBehavior;compiledPatterns;constructor(e){this.mode=e.mode,this.rules=[...e.rules],this.defaultBehavior=e.defaultBehavior,this.compiledPatterns=this.compileRules(this.rules)}getMode(){return this.mode}setMode(e){this.mode=e}getRules(){return this.rules}getDefaultBehavior(){return this.defaultBehavior}replaceRules(e){this.rules=[...e],this.compiledPatterns=this.compileRules(this.rules)}setDefaultBehavior(e){this.defaultBehavior=e}addRule(e){this.rules.push(e),this.compiledPatterns=this.compileRules(this.rules)}applyUpdate(e){let r={pattern:e.pattern,behavior:e.behavior,reason:e.description,source:"user"};this.rules=[r,...this.rules.filter(n=>!E0(n.pattern,e.pattern))],this.compiledPatterns=this.compileRules(this.rules)}check(e){let{toolName:r,meta:n}=e;switch(this.mode){case"bypassPermissions":return{behavior:"allow",decisionReason:{type:"mode",mode:"bypassPermissions"}};case"dontAsk":return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"mode",mode:"dontAsk"}}:{behavior:"deny",message:`Tool "${r}" denied \u2014 mode is dontAsk`,decisionReason:{type:"mode",mode:"dontAsk"}};case"plan":return{behavior:"deny",message:`Tool "${r}" paused \u2014 mode is plan (execution suspended)`,decisionReason:{type:"mode",mode:"plan"}}}for(let{rule:o,regex:s}of this.compiledPatterns)if(s.test(r))return x0(o,e);return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"tool_check",reason:"isReadOnly"}}:n?.requiresApproval?{behavior:"ask",message:`Tool "${r}" requires approval`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"requiresApproval"}}:n?.isDangerous?{behavior:"ask",message:`Tool "${r}" is marked dangerous`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"isDangerous"}}:this.mode==="acceptEdits"?{behavior:"allow",decisionReason:{type:"mode",mode:"acceptEdits"}}:this.defaultBehavior==="allow"?{behavior:"allow"}:this.defaultBehavior==="deny"?{behavior:"deny",message:`Tool "${r}" denied by default policy`,decisionReason:{type:"other",reason:"default_deny"}}:{behavior:"ask",message:`Tool "${r}" requires approval (default policy)`,toolName:r,input:e.arguments}}compileRules(e){return e.map(r=>({rule:r,regex:P0(r.pattern)}))}};function Pr(t){if(!t||typeof t!="object")return{mode:"default",rules:[],defaultBehavior:"allow"};let e=t,r=[];for(let a of["allow","deny","ask"]){let c=e[a];if(Array.isArray(c))for(let l of c)typeof l=="string"&&r.push({pattern:l,behavior:a,source:"config"})}if(Array.isArray(e.rules)){for(let a of e.rules)if(a&&typeof a=="object"){let c=a,l=c.pattern,d=c.behavior??c.action;typeof l=="string"&&typeof d=="string"&&(d==="allow"||d==="deny"||d==="ask")&&r.push({pattern:l,behavior:d,reason:typeof c.reason=="string"?c.reason:void 0,source:typeof c.source=="string"?c.source:"config"})}}let n=e.mode,o=typeof n=="string"&&C0(n)?n:"default",s=e.default??e.defaultBehavior,i=typeof s=="string"&&I0(s)?s:"allow";return{mode:o,rules:r,defaultBehavior:i}}function P0(t){let r=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*+/g,".*");return new RegExp(`^${r}$`,"i")}function x0(t,e){let r={type:"rule",rule:t};return t.behavior==="allow"?{behavior:"allow",decisionReason:r}:t.behavior==="deny"?{behavior:"deny",message:t.reason??`Tool "${e.toolName}" denied by rule "${t.pattern}"`,decisionReason:r}:{behavior:"ask",message:t.reason??`Tool "${e.toolName}" requires approval (rule "${t.pattern}")`,toolName:e.toolName,input:e.arguments,decisionReason:r}}function C0(t){return t==="default"||t==="bypassPermissions"||t==="acceptEdits"||t==="dontAsk"||t==="plan"||t==="auto"}function I0(t){return t==="allow"||t==="deny"||t==="ask"}function E0(t,e){return t.toLocaleLowerCase()===e.toLocaleLowerCase()}function uv(t,e){let r=Pr(e);return t.setMode(r.mode),t.replaceRules(r.rules),t.setDefaultBehavior(r.defaultBehavior),r}import{randomUUID as _0}from"node:crypto";function pv(t){sv(async e=>{let r=`ask-${_0().slice(0,8)}`;return new Promise(n=>{t.pendingAskUser.set(r,{resolve:n}),t.sendNotification("turn.ask_user",{requestId:r,questions:e.map(o=>({header:o.header,question:o.question,options:o.options}))})})})}function Ms(t,e){return{name:t,compute:e,cacheBreak:!1}}function Yt(t,e,r){return{name:t,compute:e,cacheBreak:!0}}var _s=new Map;async function M0(t){return(await Promise.all(t.map(async r=>{if(!r.cacheBreak&&_s.has(r.name))return _s.get(r.name)??null;let n=await r.compute();return _s.set(r.name,n),n}))).filter(r=>r!=null)}function mv(){_s.clear()}async function Ds(t){let e=[];if(t.instructionBlock&&e.push(t.instructionBlock),t.customSystemPrompt?e.push(t.customSystemPrompt):t.basePrompt&&e.push(t.basePrompt),t.sections?.length){let r=await M0(t.sections);e.push(...r)}return t.appendSystemPrompt&&e.push(t.appendSystemPrompt),e.filter(Boolean).join(`
|
|
542
542
|
|
|
543
543
|
`)}var D0=250;async function gv(t,e){let r=new AbortController;t.activeTurn&&(t.activeTurn.abort(),await N0(t.turnDone)),t.activeTurn=r;let n;return t.turnDone=new Promise(o=>{n=o}),e&&e!==t.currentSessionId&&(t.currentSessionId&&t.currentHooks&&(t.currentHooks.invoke("session.ended",{sessionId:t.currentSessionId}).catch(()=>{}),mv()),t.currentSessionId=e,t.sessionState=new tr(e),t.sessionTaskDomain=void 0,t.memoryPrefetchState=gt(),t.enableIdleDream()),{abortController:r,resolveTurnDone:n}}async function N0(t){let e;try{await Promise.race([t,new Promise(r=>{e=setTimeout(r,D0),e.unref?.()})])}finally{e&&clearTimeout(e)}}function Xl(t,e){t.activeTurn===e.abortController&&(t.activeTurn=null),e.resolveTurnDone()}qe();var L0=[{purpose:"imageGeneration",capability:"image"},{purpose:"tts",capability:"tts"},{purpose:"videoGeneration",capability:"video"},{purpose:"musicGeneration",capability:"music"},{purpose:"threeDGeneration",capability:"3d"},{purpose:"stt",capability:"stt"},{purpose:"voiceClone",capability:"voice_clone"}];function O0(t){let e={};for(let{purpose:r,capability:n}of L0){let o=t.getBinding(r);o&&(e[n]={provider:o.provider,model:o.nativeModelId??o.model})}return e}function Ns(t){let{host:e,config:r,turnId:n}=t,o=M(),s=o.snapshotProviderKeys();e.currentMediaApiKeys=s;let i={...O0(o),...r?.mediaProviders};iv(e.mediaClient,s,(c,l,d)=>{e.sessionState?.addMediaUsage(c,l,d)},i,(c,l,d,u,p)=>{e.sendNotification("turn.media_progress",{turnId:n,taskId:c,mediaType:l,percent:d,status:u,...p?{provider:p}:{}})});let a=o.getActiveModel("textGeneration");a?(Kl(jd(a.provider,a.apiKey)),a.keyHandle.release({success:!0})):Kl(void 0)}import*as Gn from"node:path";N();var j0=1800*1e3,hv=new Yr;function yv(t){let{config:e,host:r,sessionId:n}=t;if(e?.workdir&&typeof e.workdir=="string"&&r.setActiveWorkdir(e.workdir),!e?.workdir&&n&&e?.projectId){let i=e.projectId;try{let a=hv.getProjectWorkspaceDir(i);r.getActiveProjectRoot()!==a&&(r.log(`[turn] routing session ${n} to project ${i} (${a})`),r.setActiveWorkdir(a))}catch{r.log(`[turn] project ${i} not found, using active project`)}}e?.sessionType==="group"&&typeof e?.groupKey=="string"&&$0(e,r);let o=U0(e,r,t.nowMs??Date.now()),s=F0(e,r);return{sessionProjectRoot:s,sessionProjectId:H0(e,s,n),projectHintStale:o.projectHintStale,staleProjectHintContext:o.staleProjectHintContext}}function $0(t,e){let r=t.groupKey,n=r.split(":"),o=n.length>=3?n.slice(1).join(":"):r,s=Yo(o);if(s){e.setActiveWorkdir(s.workspaceDir),ne()?.id!==s.id&&St(s.id);return}let i=t.groupName||o,a=o.replace(/[<>:"/\\|?*\x00-\x1f]/g,"_").trim()||"group",c=Gn.join(B(),"workspaces","groups",a),l=Xo({name:i,workspaceDir:c,type:"group",groupId:o});e.setActiveWorkdir(l.workspaceDir),St(l.id),e.sendNotification("project.created",{id:l.id,name:l.name,type:"group",groupId:o,workspaceDir:l.workspaceDir})}function U0(t,e,r){let n=t?.projectHint,o=n&&typeof n=="object"&&"name"in n?n:typeof n=="string"?{name:n,updatedAt:r}:null;if(!o||t?.sessionType==="group")return{projectHintStale:!1};let s=r-o.updatedAt;if(s>j0)return e.log(`[projectHint] stale (${Math.round(s/6e4)}min old), skipping auto-switch`),{projectHintStale:!0,staleProjectHintContext:{activeProjectName:ne()?.name,projectNames:V().filter(l=>l.status==="active").map(l=>l.name).slice(0,10)}};let i=o.name,a=ne();if(!a||a.name.toLowerCase()!==i.toLowerCase()){let c=V(),l=i.toLowerCase(),d=c.find(u=>u.name.toLowerCase()===l)??c.find(u=>u.name.toLowerCase().includes(l));d&&d.status==="active"&&(St(d.id),e.setActiveWorkdir(d.workspaceDir))}return{projectHintStale:!1}}function F0(t,e){if(typeof t?.workdir=="string"&&t.workdir)return t.workdir;let r=t?.projectId;if(r)try{return hv.getProjectWorkspaceDir(r)}catch{}return e.getActiveProjectRoot()}function H0(t,e,r){if(r){let i=Wt(r,e);if(i?.projectId)return i.projectId}let n=t?.projectId;if(n&&Ee(n))return n;let o=ne();return o&&fv(o.workspaceDir,e)?o.id:V().find(i=>fv(i.workspaceDir,e))?.id}function fv(t,e){return Gn.resolve(t).toLowerCase()===Gn.resolve(e).toLowerCase()}import{randomUUID as bv}from"node:crypto";function Ls(t){let{event:e,turnId:r,now:n,host:o}=t;switch(e.type){case"delta":return o.sendNotification("turn.delta",{turnId:e.turnId,text:e.text,item:{id:`${r}-delta`,type:"message",role:"assistant",text:e.text,createdAt:n}}),!0;case"tool_call":return o.sendNotification("turn.tool_call",{turnId:e.turnId,callId:e.callId,name:e.name,arguments:e.arguments,...e.inputSummary?{inputSummary:e.inputSummary}:{},item:{id:e.callId,type:"tool_call",role:"assistant",toolName:e.name,toolCallId:e.callId,arguments:e.arguments,createdAt:n}}),!0;case"tool_result":return o.sendNotification("turn.tool_result",{turnId:e.turnId,callId:e.callId,name:e.name,ok:e.ok,...e.error?{error:e.error}:{},...e.outputPreview?{outputPreview:e.outputPreview}:{},...e.durationMs!==void 0?{durationMs:e.durationMs}:{},...e.exitCode!==void 0?{exitCode:e.exitCode}:{},...e.stdout?{stdout:e.stdout}:{},...e.stderr?{stderr:e.stderr}:{},...e.details?{details:e.details}:{},item:{id:`${e.callId}-result`,type:"tool_result",role:"assistant",toolName:e.name,toolCallId:e.callId,output:e.ok?e.outputPreview??"":e.error,approved:e.ok,createdAt:n}}),!0;case"tool_blocked":return o.sendNotification("turn.tool_blocked",{turnId:e.turnId,callId:e.callId,name:e.name,reason:e.reason,item:{id:`${e.callId}-blocked`,type:"tool_blocked",role:"system",toolName:e.name,toolCallId:e.callId,text:e.reason,approved:!1,createdAt:n}}),!0;case"recovery":return o.sendNotification("turn.recovery",{turnId:e.turnId,action:e.action,...e.detail?{detail:e.detail}:{},item:{id:`${r}-recovery-${bv().slice(0,8)}`,type:"recovery",role:"system",strategy:e.action,text:e.detail,createdAt:n}}),!0;case"plan_update":return o.sendNotification("turn.plan_update",{turnId:e.turnId,slug:e.slug,content:e.content,item:{id:`${r}-plan-${bv().slice(0,8)}`,type:"plan_update",role:"assistant",text:e.content,createdAt:n}}),!0;case"reasoning_delta":return o.sendNotification("turn.reasoning_delta",{turnId:e.turnId,text:e.text}),!0;case"suggestions":return o.sendNotification("turn.suggestions",{turnId:e.turnId,items:e.items}),!0;case"media_result":return o.sendNotification("turn.media_result",{turnId:e.turnId,mediaType:e.mediaType,url:e.url,...e.model?{model:e.model}:{},...e.provider?{provider:e.provider}:{},...e.taskId?{taskId:e.taskId}:{}}),!0;case"artifact":return o.sendNotification("turn.artifact",{turnId:e.turnId,artifactId:e.artifactId,type:e.artifactType,title:e.title,...e.filePath?{filePath:e.filePath}:{},...e.language?{language:e.language}:{},...e.content?{content:e.content}:{},...e.mimeType?{mimeType:e.mimeType}:{}}),!0;case"subagent_started":return o.sendNotification("turn.subagent_started",{turnId:e.turnId,subagentId:e.subagentId,agentType:e.agentType,...e.prompt?{prompt:e.prompt}:{}}),!0;case"subagent_ended":return o.sendNotification("turn.subagent_ended",{turnId:e.turnId,subagentId:e.subagentId,agentType:e.agentType,ok:e.ok,...e.outputPreview?{outputPreview:e.outputPreview}:{},...e.error?{error:e.error}:{}}),!0;case"annotations":return o.sendNotification("turn.annotations",{turnId:e.turnId,annotations:e.annotations}),!0;case"heartbeat":return o.sendNotification("turn.heartbeat",{turnId:e.turnId,message:e.message}),!0;case"tool_use_summary":return o.sendNotification("turn.tool_use_summary",{turnId:e.turnId,summary:e.summary}),!0;default:return!1}}var B0=`[SUGGESTION MODE]
|
|
544
544
|
Based on the conversation, suggest 1-3 short follow-up actions the user might naturally do next.
|
package/dist/index.js
CHANGED
|
@@ -537,7 +537,7 @@ describe: Show workflow steps and variables.`},workflow:{type:"string",descripti
|
|
|
537
537
|
`))}async function Xb(t,e,r){let n=De.getTransport(t);if(!n)return{ok:!1,error:"transport not available"};let o=Zt(wr,t);if(!o)return{ok:!1,error:"no API key"};try{let s={...r,model:e},i=await n.generate(s,o);i.billingUnit||(r.mediaType==="tts"&&r.text?(i.billingUnit="per_character",i.billingQuantity=r.text.length):(r.mediaType==="video"||r.mediaType==="music")&&r.duration?(i.billingUnit="per_second",i.billingQuantity=r.duration):(i.billingUnit="per_call",i.billingQuantity=1));let a=i.model??s.model,c=i.billingUnit??"per_call",l=i.billingQuantity??1;return Qb?.(a,c,l),{ok:!0,result:i}}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}}function Ut(t){if(!De)return!1;let e=nr[t];if(!e)return!1;let r=De.getTransport(e.provider),n=Zt(wr,e.provider);return!!(r&&n)}function jl(t,e){if(!Ut(t))return!1;let r=nr[t],n=De.resolveModelById(r.provider,r.model,t);if(!n)return!1;let o=n.modelInfo.mediaCapabilities;return!o||!("operations"in o)||!o.operations?!0:o.operations.includes(e)}var Ve=process.cwd(),Fl=!1;function ov(t){Ve=t,Fl=!0,As(t)}function Ne(t){return U.isAbsolute(t)?U.normalize(t):U.resolve(Ve,t)}function Wn(t){let e=U.resolve(Ve)+U.sep,r=U.resolve(t);return process.platform==="win32"?r.toLowerCase().startsWith(e.toLowerCase())||r.toLowerCase()===e.slice(0,-1).toLowerCase():r.startsWith(e)||r===e.slice(0,-1)}function Vt(t){return Wn(t)?null:`Blocked: path "${t}" is outside the workspace boundary "${Ve}"`}function Yb(t){let e=t.replace(/\\/g,"/");return e.includes("../")||e.includes("..")}var QM=new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg",".ico"]),sv=new Set([".exe",".dll",".so",".dylib",".zip",".tar",".gz",".7z",".rar",".wasm",".class"]),Hl=new Set;function ZM(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=U.extname(e).toLowerCase();if(Fl){let o=Vt(e);if(o)throw new Error(o)}else if(Yb(t)&&!Wn(e))throw new Error(`Blocked: path traversal "${t}" escapes workspace "${Ve}"`);if(e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/"))throw new Error(`Blocked: reading device/system path ${e}`);if(sv.has(r))return{type:"binary",mimeType:"application/octet-stream"};if(QM.has(r))return{type:"image",localPath:e,mimeType:r===".png"?"image/png":r===".svg"?"image/svg+xml":r===".gif"?"image/gif":r===".webp"?"image/webp":"image/jpeg"};let n=await j.promises.readFile(e,"utf8");return Hl.add(e),{type:"text",text:n}},validatePath(t){let e=Ne(t);if(Fl){let r=Vt(e);if(r)return r}else if(Yb(t)&&!Wn(e))return`Blocked: path traversal "${t}" escapes workspace "${Ve}"`;return e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/")?`Blocked: reading device/system path ${e}`:Bl&&Ol(e)?"Blocked: reading sensitive file in group chat mode":null}}}function e0(){return{resolvePath:Ne,validatePath(t){let e=Ne(t),r=Vt(e);return r||(e.startsWith("/dev/")||e.startsWith("/proc/")||e.startsWith("/sys/")?`Blocked: writing to device/system path ${e}`:Bl&&Ol(e)?"Blocked: writing sensitive file in group chat mode":null)},checkReadBeforeWrite(t){try{j.accessSync(t,j.constants.F_OK)}catch{return null}return Hl.has(t)?null:"File already exists but has not been read yet in this session. Read it first with the read tool before overwriting, to avoid unintended data loss. If you intend to completely replace the file, read it first to confirm."},async writeFile(t,e){let r=Ne(t),n=Vt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8"),Hl.add(r)}}}function t0(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=Vt(e);if(r)throw new Error(r);return j.promises.readFile(e,"utf8")},async writeFile(t,e){let r=Ne(t),n=Vt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8")}}}function r0(){return{resolvePath:Ne,async readFile(t){let e=Ne(t),r=Vt(e);if(r)throw new Error(r);return j.promises.readFile(e,"utf8")},async writeFile(t,e){let r=Ne(t),n=Vt(r);if(n)throw new Error(n);await j.promises.mkdir(U.dirname(r),{recursive:!0}),await j.promises.writeFile(r,e,"utf8")},async deleteFile(t){let e=Ne(t),r=Vt(e);if(r)throw new Error(r);await j.promises.unlink(e)},async fileExists(t){let e=Ne(t);try{return await j.promises.access(e),!0}catch{return!1}}}}function n0(){return{resolvePath:Ne,async glob(t,e){let r=e.cwd||Ve,n=e.limit||1e3,o=[],s=!1,i=t.replace(/\\/g,"/").split("/"),a=i.some(d=>d==="**"),c=i[i.length-1]??"*",l=iv(c);try{await Kl(r,async d=>{if(o.length>=n)return s=!0,!1;let u=U.basename(d);return l.test(u)&&o.push(d),!0},a?1/0:1)}catch{}return{files:o,truncated:s}},async grep(t,e){let r=e.cwd||Ve;try{return await s0(t,r,e)}catch{return await i0(t,r,e)}}}}function iv(t){let e=t.replace(/[.+^$|()[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return e=e.replace(/\\\{([^}]+)\\\}/g,(r,n)=>"("+n.replace(/,/g,"|")+")"),new RegExp(`^${e}$`,"i")}var o0=new Set([".git",".svn",".hg","node_modules","__pycache__",".next","dist",".tox",".venv"]);async function Kl(t,e,r,n=0,o=""){if(n>r)return;let s;try{s=await j.promises.readdir(t,{withFileTypes:!0})}catch{return}for(let i of s){let a=o?`${o}/${i.name}`:i.name;if(i.isDirectory()){if(o0.has(i.name))continue;await Kl(U.join(t,i.name),e,r,n+1,a)}else if(i.isFile()&&!await e(a))return}}function s0(t,e,r){return new Promise((n,o)=>{let s=["--json","--no-heading","--max-columns","500"];r.caseInsensitive&&s.push("-i"),r.contextLines&&s.push("-C",String(r.contextLines)),r.fileGlob&&s.push("-g",r.fileGlob),s.push("--max-count",String(r.headLimit??250)),s.push(t),s.push("."),GM("rg",s,{cwd:e,maxBuffer:10*1024*1024,timeout:3e4},(i,a)=>{if(i&&!("killed"in i&&i.killed)&&i.code!==1){o(i);return}let c=[];for(let p of a.split(`
|
|
538
538
|
`))if(p.trim())try{let m=JSON.parse(p);m.type==="match"&&m.data&&c.push({path:m.data.path?.text??"",line:m.data.line_number??0,text:(m.data.lines?.text??"").trimEnd()})}catch{}let l=r.headLimit??250,d=r.offset??0,u=c.slice(d,d+l);n({matches:u,truncated:c.length>d+l})})})}async function i0(t,e,r){let n=new RegExp(t,r.caseInsensitive?"i":""),o=r.headLimit??250,s=r.offset??0,i=r.fileGlob?iv(r.fileGlob):null,a=[],c=!1;return await Kl(e,async l=>{if(a.length>=s+o+1)return c=!0,!1;if(i&&!i.test(U.basename(l)))return!0;let d=U.extname(l).toLowerCase();if(sv.has(d))return!0;try{let p=(await j.promises.readFile(U.join(e,l),"utf8")).split(`
|
|
539
539
|
`);for(let m=0;m<p.length;m++)if(n.test(p[m])&&(a.push({path:l,line:m+1,text:p[m].slice(0,500)}),a.length>=s+o+1))return c=!0,!1}catch{}return!0},1/0),{matches:a.slice(s,s+o),truncated:c}}var Jb=!1;function a0(){if(!Jb)if(Jb=!0,Tr()){let t=process.env.QLOGICAGENT_POWERSHELL_PATH??"powershell.exe";Fn(Rl(t))}else if(process.platform==="win32"){let t=c0();Fn(xs(t))}else{let t=process.env.SHELL?.endsWith("bash")?process.env.SHELL:"/bin/bash";Fn(xs(t))}}function c0(){let t=process.env.QLOGICAGENT_BASH_PATH;if(t&&j.existsSync(t))return t;let e=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files (x86)\\Git\\bin\\bash.exe"],r=process.env.ProgramFiles?U.join(process.env.ProgramFiles,"Git","bin","bash.exe"):null;r&&!e.includes(r)&&e.unshift(r);for(let n of e)if(j.existsSync(n))return n;return"bash"}function l0(){return{async fetchUrl(t){let e=new AbortController,r=setTimeout(()=>e.abort(),3e4);try{let n=await fetch(t.url,{signal:e.signal,headers:{"User-Agent":"Mozilla/5.0 (compatible; QLogicAgent/1.0)",Accept:"text/html,application/xhtml+xml,text/plain,*/*"},redirect:"follow"});if(!n.ok)return{content:`HTTP ${n.status} ${n.statusText}`};let o=n.headers.get("content-type")??"",s=await n.text();return t.maxChars&&s.length>t.maxChars&&(s=s.slice(0,t.maxChars)),o.includes("html")&&t.extractMode!=="json"&&(s=d0(s)),{content:s,title:u0(s)}}finally{clearTimeout(r)}}}}function d0(t){return t.replace(/<script[\s\S]*?<\/script>/gi,"").replace(/<style[\s\S]*?<\/style>/gi,"").replace(/<[^>]+>/g," ").replace(/ /gi," ").replace(/&/gi,"&").replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,'"').replace(/'/gi,"'").replace(/\s{2,}/g," ").trim()}function u0(t){return t.match(/<title[^>]*>([^<]+)<\/title>/i)?.[1]?.trim()}function p0(){let t=async(e,r)=>{let{getModelRegistry:n}=await Promise.resolve().then(()=>(qe(),_u)),o=n().getTunable("searxngBaseUrl")??process.env.SEARXNG_BASE_URL?.trim();if(!o)return{query:e,results:[],totalResults:0};let s=r?.maxResults??10,i=new URL("/search",o);i.searchParams.set("q",e),i.searchParams.set("format","json"),i.searchParams.set("pageno","1");let a=new AbortController,c=setTimeout(()=>a.abort(),15e3);try{let l=await fetch(i.toString(),{signal:a.signal,headers:{Accept:"application/json"}});if(!l.ok)return{query:e,results:[]};let d=await l.json(),u=(d.results??[]).slice(0,s).map(p=>({title:p.title??"",url:p.url??"",snippet:p.content??""}));if(r?.allowedDomains?.length){let p=new Set(r.allowedDomains.map(m=>m.toLowerCase()));return{query:e,results:u.filter(m=>{try{return p.has(new URL(m.url).hostname.toLowerCase())}catch{return!1}})}}if(r?.blockedDomains?.length){let p=new Set(r.blockedDomains.map(m=>m.toLowerCase()));return{query:e,results:u.filter(m=>{try{return!p.has(new URL(m.url).hostname.toLowerCase())}catch{return!0}})}}return{query:e,results:u,totalResults:d.number_of_results}}finally{clearTimeout(c)}};return{search:(e,r)=>zb(Zb,t)(e,r)}}function m0(){function t(o){if(o==="default")return ne()?.workspaceDir??Ve;let s=Ee(o);if(!s)throw new Error(`Unknown project: ${o}`);return s.workspaceDir}function e(o){return Qt(t(o))}function r(o,s){if(!s.endsWith(".md"))throw new Error("Filename must end with .md");if(s.includes(".."))throw new Error("Path traversal not allowed");let i=e(o),a=U.resolve(i,s);if(!a.startsWith(i+U.sep)&&a!==i)throw new Error("Path traversal not allowed");return a}function n(o,s){if(!j.existsSync(o))return[];let i=[];for(let a of j.readdirSync(o,{withFileTypes:!0})){let c=U.join(o,a.name);if(a.isDirectory())i.push(...n(c,s));else if(a.isFile()&&a.name.endsWith(".md")){let l=j.statSync(c);i.push({filename:U.relative(s,c).replace(/\\/g,"/"),path:c,size:l.size,updatedAt:l.mtime.toISOString(),content:j.readFileSync(c,"utf-8")})}}return i}return{list(o){let s=e(o);return n(s,s).map(i=>({filename:i.filename,path:i.path,size:i.size,updatedAt:i.updatedAt}))},read(o,s){try{let i=r(o,s);if(!j.existsSync(i))return null;let a=j.statSync(i),c=j.readFileSync(i,"utf-8");return{filename:s,path:i,size:a.size,updatedAt:a.mtime.toISOString(),content:c}}catch{return null}},write(o,s,i){let a=r(o,s);j.mkdirSync(U.dirname(a),{recursive:!0}),j.writeFileSync(a,i,"utf-8");let c=j.statSync(a);return{filename:s,path:a,size:c.size,updatedAt:c.mtime.toISOString(),content:i}},remove(o,s){try{let i=r(o,s);return j.existsSync(i)?(j.unlinkSync(i),!0):!1}catch{return!1}}}}var g0={think:"orchestration",task:"orchestration",ask_user:"orchestration",exec:"developer",read:"filesystem",write:"filesystem",edit:"filesystem",patch:"filesystem",apply_patch:"filesystem",search:"search",web_fetch:"web",web_search:"web",instructions:"filesystem",worktree:"developer",notebook_edit:"developer",workflow:"automation",sleep:"automation",project_switch:"system",tool_search:"search",image_generate:"media",tts:"media",video_generate:"media",music_generate:"media",video_edit:"media",video_merge:"media",video_upscale:"media",three_d_generate:"media",stt:"media",voice_clone:"media",media_cancel:"media",file_upload:"filesystem",file_query:"filesystem",file_delete:"filesystem"};function f0(t){for(let e of t)e.category??=g0[e.name]??"other",e.displayName??={key:`capability.tool.${e.name}.name`,fallback:e.label},e.displayDescription??={key:`capability.tool.${e.name}.description`,fallback:""}}function av(t){t?.workdir&&(Ve=t.workdir),a0(),As(Ve);let e=[];e.push(Ry()),e.push(Tg(void 0,{onTaskCreated:u=>Ul?.onTaskCreated?.(u),onTaskCompleted:u=>Ul?.onTaskCompleted?.(u)})),e.push(Hb({askUser:async u=>ev?.(u)??null})),e.push(Ny({onProgress:t?.onExecProgress,validateCommand:async u=>{let p=/(?:>>?|[12]>)\s*(?:"([^"]+)"|'([^']+)'|(\S+))/g,m;for(;(m=p.exec(u))!==null;){let f=m[1]||m[2]||m[3];if(f){let h=U.isAbsolute(f)?U.normalize(f):U.resolve(Ve,f);if(!Wn(h))return`Blocked: output redirection to path outside workspace: ${f}`}}let g=[/(?:^|[\s;|&(])(?:"(\/[^"]+)"|'(\/[^']+)'|(\/(?!dev\/null\b)[^\s;|&><)]+))/g,/(?:^|[\s;|&(])(?:"([A-Za-z]:[\\\/][^"]+)"|'([A-Za-z]:[\\\/][^']+)'|([A-Za-z]:[\\\/][^\s;|&><)]+))/g,/(?:^|[\s;|&(])(?:"([^"]*\.\.[\\/][^"]+)"|'([^']*\.\.[\\/][^']+)'|([^\s;|&><)"']*\.\.[\\/][^\s;|&><)]+))/g];for(let f of g){let h;for(;(h=f.exec(u))!==null;){let v=h[1]||h[2]||h[3];if(!v||/^\/[a-zA-Z](?:[- ]|$)/.test(v)||/^\/[a-zA-Z]{1,3}$/.test(v))continue;let b;if(process.platform==="win32"&&/^\/[a-zA-Z]\//.test(v)){let R=v.replace(/^\/([a-zA-Z])\//,(T,A)=>`${A.toUpperCase()}:\\`).replace(/\//g,"\\");b=U.normalize(R)}else b=U.isAbsolute(v)?U.normalize(v):U.resolve(Ve,v);if(!Wn(b))return`Blocked: command references path outside workspace: ${v}`}}return null},interpretExitCode:(u,p)=>{if(u===127)return"command not found";if(u===126)return"permission denied";if(u===137)return"killed (SIGKILL / OOM)";if(u===143)return"terminated (SIGTERM)";if(u===130)return"interrupted (Ctrl+C)"}}));let r=ZM(),n=e0(),o=t0(),s=r0();e.push(jy(r)),e.push(Uy(n)),e.push(Fy(o)),e.push(Pl(s)),e.push(Wy(s)),e.push(qy(n0())),e.push(Zy(l0())),e.push(eb(p0()));let i=m0();e.push(tb(i));let a=t?.log??{info:()=>{},warn:()=>{}};e.push(rb(hb({log:a}))),e.push(kb());let c={invokeTool:async(u,p,m)=>{let g=Ce(u);if(!g)return{result:"",error:`Unknown tool: ${u}`};try{let f=await g.execute(`wf_${Date.now()}`,p,m);return{result:f.content.map(v=>v.text??"").join(`
|
|
540
|
-
`),error:f.details?.error}}catch(f){return{result:"",error:f.message}}},getCwd:()=>Ve};e.push(Tb(c)),e.push(Ab({sleep:(u,p)=>new Promise(m=>{let g=Date.now(),f=setTimeout(()=>{m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!1})},u),h=()=>{clearTimeout(f),m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!0,interruptReason:"aborted"})};p.addEventListener("abort",h,{once:!0}),p.aborted&&(clearTimeout(f),h())})}));let l={listProjects:()=>V(),switchProject:u=>Rt(u),onSwitched:u=>KM?.(u)};e.push(Bb(l)),e.push(Pb({searchTools:async(u,p)=>{let m=p?.maxResults??5,g=Kt(),f=u.toLowerCase().split(/\s+/).filter(Boolean),h=[],v=[];for(let P of f)P.startsWith("+")&&P.length>1?h.push(P.slice(1)):v.push(P);let b=[...h,...v],R=P=>P.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase().split(/\s+/).filter(Boolean);return{matches:g.map(P=>{let I=Ce(P),E=R(P),L=(I?.description??"").toLowerCase(),ve=(I?.searchHint??"").toLowerCase();if(h.length>0){let Z=`${E.join(" ")} ${L} ${ve}`;if(!h.every(D=>Z.includes(D)))return null}let k=0;for(let Z of b){let ke=0;E.some(D=>D===Z)?ke=10:E.some(D=>D.includes(Z))?ke=5:P.toLowerCase().includes(Z)&&(ke=3),ve&&new RegExp(`\\b${Z}`,"i").test(ve)&&(ke+=4),new RegExp(`\\b${Z}`,"i").test(L)&&(ke+=2),k+=ke}return{name:P,description:I?.description??"",searchHint:I?.searchHint,score:k}}).filter(P=>P!==null&&P.score>0).sort((P,I)=>I.score-P.score).slice(0,m),query:u,totalDeferred:g.length}},activateTool:async u=>am(u)})),e.push({...xb({generateImage:async u=>{let p=await $t({mediaType:"image",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,size:u.size,imageUrl:u.imageUrl,n:u.n,quality:u.quality,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,size:p.size,durationMs:p.durationMs}}}),isEnabled:()=>Ut("image")}),e.push({...Cb({textToSpeech:async u=>{let p=await $t({mediaType:"tts",model:"",prompt:"",text:u.text,channel:u.channel,voice:u.voice,speed:u.speed});return{audioPath:"",provider:p.model,mediaUrls:p.mediaUrls}}}),isEnabled:()=>Ut("tts")}),e.push({...Ib({generateVideo:async u=>{let p=await $t({mediaType:"video",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,imageUrl:u.imageUrl,referenceVideos:u.referenceVideos,referenceAudios:u.referenceAudios,generateAudio:u.generateAudio,aspectRatio:u.aspectRatio,duration:u.duration,resolution:u.resolution,fps:u.fps,seed:u.seed,cameraFixed:u.cameraFixed,returnLastFrame:u.returnLastFrame,draft:u.draft,serviceTier:u.serviceTier,callbackUrl:u.callbackUrl,safetyIdentifier:u.safetyIdentifier,executionExpiresAfterSeconds:u.executionExpiresAfterSeconds,videoTools:u.videoTools});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,lastFrameUrl:p.lastFrameUrl,taskId:p.taskId}}}),isEnabled:()=>Ut("video")}),e.push({...Eb({generateMusic:async u=>{let p=await $t({mediaType:"music",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,lyrics:u.lyrics,duration:u.duration,isInstrumental:u.isInstrumental,audioUrl:u.audioUrl,audioFormat:u.audioFormat});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}},generateLyrics:async u=>{let p=nr.music;if(!p||!De)return"";let m=De.getTransport(p.provider);if(!tp(m))return"";let g=Zt(wr,p.provider);return g?m.generateLyrics(u,g):""}}),isEnabled:()=>Ut("music")}),e.push({..._b({editVideo:async u=>{let p=await $t({mediaType:"video",model:"",prompt:u.prompt,operation:"edit",sourceVideos:u.sourceVideos,referenceImages:u.referenceImages,duration:u.duration,aspectRatio:u.aspectRatio,resolution:u.resolution});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>jl("video","edit")}),e.push({...Mb({mergeVideos:async u=>{let p=[`merge ${u.clips.length} clips`];u.transition&&p.push(`transition: ${u.transition}${u.transitionDuration?` (${u.transitionDuration}s)`:""}`),u.subtitles&&p.push(`burn-in subtitles: ${u.subtitles}`),u.bgm&&p.push(`background music: ${u.bgm}${u.bgmVolume!==void 0?` at volume ${u.bgmVolume}`:""}`);let m=await $t({mediaType:"video",model:"",prompt:p.join("; "),operation:"merge",sourceVideos:u.clips.map(g=>g.video),resolution:u.outputResolution,fps:u.outputFps});return{localPath:"",servePath:m.mediaUrls[0]??"",durationSec:(m.durationMs??0)/1e3,clipCount:u.clips.length,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>jl("video","merge")}),e.push({...Db({upscaleVideo:async u=>{let p=["upscale"];u.sharpness&&p.push(`sharpness: ${u.sharpness}`);let m=await $t({mediaType:"video",model:"",prompt:p.join(", "),operation:"upscale",sourceVideos:[u.video],resolution:u.targetResolution??"1080p"});return{localPath:"",servePath:m.mediaUrls[0]??"",resolution:u.targetResolution??"1080p",durationSec:(m.durationMs??0)/1e3,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>jl("video","upscale")}),e.push({...Nb({generate3D:async u=>{let p=await $t({mediaType:"3d",model:"",prompt:u.prompt,imageUrl:u.imageUrl,outputFormat:u.outputFormat,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,metadata:p.metadata}}}),shouldDefer:!0,isEnabled:()=>Ut("3d")}),e.push({...Lb({speechToText:async u=>{let p=await $t({mediaType:"stt",model:"",prompt:"",audioUrl:u.audioUrl,metadata:u.language?{language:u.language}:void 0});return{transcription:p.metadata?.transcription??"",model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ut("stt")}),e.push({...Ob({cloneVoice:async u=>{let p=await $t({mediaType:"voice_clone",model:"",prompt:"",text:u.text,audioUrl:u.sampleAudioUrl,speed:u.speed});return{mediaUrls:p.mediaUrls,model:p.model,voiceId:p.metadata?.voiceId,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ut("voice_clone")}),e.push({...jb({cancelTask:async u=>{let p=u.provider??"doubao";if(!De)return{ok:!1,message:"Media client not configured."};let m=De.getTransport(p);if(!m)return{ok:!1,message:`No transport for provider: ${p}`};let g=Zt(wr,p);if(!g)return{ok:!1,message:`No API key for provider: ${p}`};try{return"deleteVideoTask"in m&&typeof m.deleteVideoTask=="function"?(await m.deleteVideoTask(u.taskId,g),{ok:!0,message:"Task cancelled."}):{ok:!1,message:`Provider ${p} does not support task cancellation.`}}catch(f){return{ok:!1,message:f instanceof Error?f.message:String(f)}}}}),shouldDefer:!0,isEnabled:()=>Ut("video")||Ut("3d")});let d=Gb({getContext:()=>({mediaClient:De,mediaProviders:nr,mediaApiKeys:wr}),resolvePath:Ne});return e.push({...$b(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Ub(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Fb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),f0(e),im(e),t?.log?.info(`[tool-bootstrap] Registered ${e.length} local tools (${e.filter(u=>u.isEnabled?.()!==!1).length} enabled): ${Kt().join(", ")}`),e}var Jr=class{mode;rules;defaultBehavior;compiledPatterns;constructor(e){this.mode=e.mode,this.rules=[...e.rules],this.defaultBehavior=e.defaultBehavior,this.compiledPatterns=this.compileRules(this.rules)}getMode(){return this.mode}setMode(e){this.mode=e}getRules(){return this.rules}getDefaultBehavior(){return this.defaultBehavior}replaceRules(e){this.rules=[...e],this.compiledPatterns=this.compileRules(this.rules)}setDefaultBehavior(e){this.defaultBehavior=e}addRule(e){this.rules.push(e),this.compiledPatterns=this.compileRules(this.rules)}applyUpdate(e){let r={pattern:e.pattern,behavior:e.behavior,reason:e.description,source:"user"};this.rules=[r,...this.rules.filter(n=>!k0(n.pattern,e.pattern))],this.compiledPatterns=this.compileRules(this.rules)}check(e){let{toolName:r,meta:n}=e;switch(this.mode){case"bypassPermissions":return{behavior:"allow",decisionReason:{type:"mode",mode:"bypassPermissions"}};case"dontAsk":return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"mode",mode:"dontAsk"}}:{behavior:"deny",message:`Tool "${r}" denied \u2014 mode is dontAsk`,decisionReason:{type:"mode",mode:"dontAsk"}};case"plan":return{behavior:"deny",message:`Tool "${r}" paused \u2014 mode is plan (execution suspended)`,decisionReason:{type:"mode",mode:"plan"}}}for(let{rule:o,regex:s}of this.compiledPatterns)if(s.test(r))return y0(o,e);return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"tool_check",reason:"isReadOnly"}}:n?.requiresApproval?{behavior:"ask",message:`Tool "${r}" requires approval`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"requiresApproval"}}:n?.isDangerous?{behavior:"ask",message:`Tool "${r}" is marked dangerous`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"isDangerous"}}:this.mode==="acceptEdits"?{behavior:"allow",decisionReason:{type:"mode",mode:"acceptEdits"}}:this.defaultBehavior==="allow"?{behavior:"allow"}:this.defaultBehavior==="deny"?{behavior:"deny",message:`Tool "${r}" denied by default policy`,decisionReason:{type:"other",reason:"default_deny"}}:{behavior:"ask",message:`Tool "${r}" requires approval (default policy)`,toolName:r,input:e.arguments}}compileRules(e){return e.map(r=>({rule:r,regex:h0(r.pattern)}))}};function Pr(t){if(!t||typeof t!="object")return{mode:"default",rules:[],defaultBehavior:"allow"};let e=t,r=[];for(let a of["allow","deny","ask"]){let c=e[a];if(Array.isArray(c))for(let l of c)typeof l=="string"&&r.push({pattern:l,behavior:a,source:"config"})}if(Array.isArray(e.rules)){for(let a of e.rules)if(a&&typeof a=="object"){let c=a,l=c.pattern,d=c.behavior??c.action;typeof l=="string"&&typeof d=="string"&&(d==="allow"||d==="deny"||d==="ask")&&r.push({pattern:l,behavior:d,reason:typeof c.reason=="string"?c.reason:void 0,source:typeof c.source=="string"?c.source:"config"})}}let n=e.mode,o=typeof n=="string"&&b0(n)?n:"default",s=e.default??e.defaultBehavior,i=typeof s=="string"&&v0(s)?s:"allow";return{mode:o,rules:r,defaultBehavior:i}}function h0(t){let r=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*+/g,".*");return new RegExp(`^${r}$`,"i")}function y0(t,e){let r={type:"rule",rule:t};return t.behavior==="allow"?{behavior:"allow",decisionReason:r}:t.behavior==="deny"?{behavior:"deny",message:t.reason??`Tool "${e.toolName}" denied by rule "${t.pattern}"`,decisionReason:r}:{behavior:"ask",message:t.reason??`Tool "${e.toolName}" requires approval (rule "${t.pattern}")`,toolName:e.toolName,input:e.arguments,decisionReason:r}}function b0(t){return t==="default"||t==="bypassPermissions"||t==="acceptEdits"||t==="dontAsk"||t==="plan"||t==="auto"}function v0(t){return t==="allow"||t==="deny"||t==="ask"}function k0(t,e){return t.toLocaleLowerCase()===e.toLocaleLowerCase()}function cv(t,e){let r=Pr(e);return t.setMode(r.mode),t.replaceRules(r.rules),t.setDefaultBehavior(r.defaultBehavior),r}import{randomUUID as R0}from"node:crypto";function lv(t){rv(async e=>{let r=`ask-${R0().slice(0,8)}`;return new Promise(n=>{t.pendingAskUser.set(r,{resolve:n}),t.sendNotification("turn.ask_user",{requestId:r,questions:e.map(o=>({header:o.header,question:o.question,options:o.options}))})})})}function _s(t,e){return{name:t,compute:e,cacheBreak:!1}}function Xt(t,e,r){return{name:t,compute:e,cacheBreak:!0}}var Es=new Map;async function S0(t){return(await Promise.all(t.map(async r=>{if(!r.cacheBreak&&Es.has(r.name))return Es.get(r.name)??null;let n=await r.compute();return Es.set(r.name,n),n}))).filter(r=>r!=null)}function dv(){Es.clear()}async function Ms(t){let e=[];if(t.instructionBlock&&e.push(t.instructionBlock),t.customSystemPrompt?e.push(t.customSystemPrompt):t.basePrompt&&e.push(t.basePrompt),t.sections?.length){let r=await S0(t.sections);e.push(...r)}return t.appendSystemPrompt&&e.push(t.appendSystemPrompt),e.filter(Boolean).join(`
|
|
540
|
+
`),error:f.details?.error}}catch(f){return{result:"",error:f.message}}},getCwd:()=>Ve};e.push(Tb(c)),e.push(Ab({sleep:(u,p)=>new Promise(m=>{let g=Date.now(),f=setTimeout(()=>{m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!1})},u),h=()=>{clearTimeout(f),m({sleptSeconds:Math.round((Date.now()-g)/1e3),interrupted:!0,interruptReason:"aborted"})};p.addEventListener("abort",h,{once:!0}),p.aborted&&(clearTimeout(f),h())})}));let l={listProjects:()=>V(),switchProject:u=>Rt(u),onSwitched:u=>KM?.(u)};e.push(Bb(l)),e.push(Pb({searchTools:async(u,p)=>{let m=p?.maxResults??5,g=Kt(),f=u.toLowerCase().split(/\s+/).filter(Boolean),h=[],v=[];for(let P of f)P.startsWith("+")&&P.length>1?h.push(P.slice(1)):v.push(P);let b=[...h,...v],R=P=>P.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase().split(/\s+/).filter(Boolean);return{matches:g.map(P=>{let I=Ce(P),E=R(P),L=(I?.description??"").toLowerCase(),ve=(I?.searchHint??"").toLowerCase();if(h.length>0){let Z=`${E.join(" ")} ${L} ${ve}`;if(!h.every(D=>Z.includes(D)))return null}let k=0;for(let Z of b){let ke=0;E.some(D=>D===Z)?ke=10:E.some(D=>D.includes(Z))?ke=5:P.toLowerCase().includes(Z)&&(ke=3),ve&&new RegExp(`\\b${Z}`,"i").test(ve)&&(ke+=4),new RegExp(`\\b${Z}`,"i").test(L)&&(ke+=2),k+=ke}return{name:P,description:I?.description??"",searchHint:I?.searchHint,score:k}}).filter(P=>P!==null&&P.score>0).sort((P,I)=>I.score-P.score).slice(0,m),query:u,totalDeferred:g.length}},activateTool:async u=>am(u)})),e.push({...xb({generateImage:async u=>{let p=await $t({mediaType:"image",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,size:u.size,imageUrl:u.imageUrl,n:u.n,quality:u.quality,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,size:p.size,durationMs:p.durationMs}}}),isConcurrencySafe:!0,isEnabled:()=>Ut("image")}),e.push({...Cb({textToSpeech:async u=>{let p=await $t({mediaType:"tts",model:"",prompt:"",text:u.text,channel:u.channel,voice:u.voice,speed:u.speed});return{audioPath:"",provider:p.model,mediaUrls:p.mediaUrls}}}),isConcurrencySafe:!0,isEnabled:()=>Ut("tts")}),e.push({...Ib({generateVideo:async u=>{let p=await $t({mediaType:"video",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,imageUrl:u.imageUrl,referenceVideos:u.referenceVideos,referenceAudios:u.referenceAudios,generateAudio:u.generateAudio,aspectRatio:u.aspectRatio,duration:u.duration,resolution:u.resolution,fps:u.fps,seed:u.seed,cameraFixed:u.cameraFixed,returnLastFrame:u.returnLastFrame,draft:u.draft,serviceTier:u.serviceTier,callbackUrl:u.callbackUrl,safetyIdentifier:u.safetyIdentifier,executionExpiresAfterSeconds:u.executionExpiresAfterSeconds,videoTools:u.videoTools});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,lastFrameUrl:p.lastFrameUrl,taskId:p.taskId}}}),isConcurrencySafe:!0,isEnabled:()=>Ut("video")}),e.push({...Eb({generateMusic:async u=>{let p=await $t({mediaType:"music",model:"",prompt:u.prompt,purpose:u.purpose,style:u.style,lyrics:u.lyrics,duration:u.duration,isInstrumental:u.isInstrumental,audioUrl:u.audioUrl,audioFormat:u.audioFormat});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}},generateLyrics:async u=>{let p=nr.music;if(!p||!De)return"";let m=De.getTransport(p.provider);if(!tp(m))return"";let g=Zt(wr,p.provider);return g?m.generateLyrics(u,g):""}}),isConcurrencySafe:!0,isEnabled:()=>Ut("music")}),e.push({..._b({editVideo:async u=>{let p=await $t({mediaType:"video",model:"",prompt:u.prompt,operation:"edit",sourceVideos:u.sourceVideos,referenceImages:u.referenceImages,duration:u.duration,aspectRatio:u.aspectRatio,resolution:u.resolution});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>jl("video","edit")}),e.push({...Mb({mergeVideos:async u=>{let p=[`merge ${u.clips.length} clips`];u.transition&&p.push(`transition: ${u.transition}${u.transitionDuration?` (${u.transitionDuration}s)`:""}`),u.subtitles&&p.push(`burn-in subtitles: ${u.subtitles}`),u.bgm&&p.push(`background music: ${u.bgm}${u.bgmVolume!==void 0?` at volume ${u.bgmVolume}`:""}`);let m=await $t({mediaType:"video",model:"",prompt:p.join("; "),operation:"merge",sourceVideos:u.clips.map(g=>g.video),resolution:u.outputResolution,fps:u.outputFps});return{localPath:"",servePath:m.mediaUrls[0]??"",durationSec:(m.durationMs??0)/1e3,clipCount:u.clips.length,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>jl("video","merge")}),e.push({...Db({upscaleVideo:async u=>{let p=["upscale"];u.sharpness&&p.push(`sharpness: ${u.sharpness}`);let m=await $t({mediaType:"video",model:"",prompt:p.join(", "),operation:"upscale",sourceVideos:[u.video],resolution:u.targetResolution??"1080p"});return{localPath:"",servePath:m.mediaUrls[0]??"",resolution:u.targetResolution??"1080p",durationSec:(m.durationMs??0)/1e3,mediaUrls:m.mediaUrls}}}),shouldDefer:!0,isEnabled:()=>jl("video","upscale")}),e.push({...Nb({generate3D:async u=>{let p=await $t({mediaType:"3d",model:"",prompt:u.prompt,imageUrl:u.imageUrl,outputFormat:u.outputFormat,seed:u.seed});return{mediaUrls:p.mediaUrls,model:p.model,durationMs:p.durationMs,metadata:p.metadata}}}),isConcurrencySafe:!0,shouldDefer:!0,isEnabled:()=>Ut("3d")}),e.push({...Lb({speechToText:async u=>{let p=await $t({mediaType:"stt",model:"",prompt:"",audioUrl:u.audioUrl,metadata:u.language?{language:u.language}:void 0});return{transcription:p.metadata?.transcription??"",model:p.model,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ut("stt")}),e.push({...Ob({cloneVoice:async u=>{let p=await $t({mediaType:"voice_clone",model:"",prompt:"",text:u.text,audioUrl:u.sampleAudioUrl,speed:u.speed});return{mediaUrls:p.mediaUrls,model:p.model,voiceId:p.metadata?.voiceId,durationMs:p.durationMs}}}),shouldDefer:!0,isEnabled:()=>Ut("voice_clone")}),e.push({...jb({cancelTask:async u=>{let p=u.provider??"doubao";if(!De)return{ok:!1,message:"Media client not configured."};let m=De.getTransport(p);if(!m)return{ok:!1,message:`No transport for provider: ${p}`};let g=Zt(wr,p);if(!g)return{ok:!1,message:`No API key for provider: ${p}`};try{return"deleteVideoTask"in m&&typeof m.deleteVideoTask=="function"?(await m.deleteVideoTask(u.taskId,g),{ok:!0,message:"Task cancelled."}):{ok:!1,message:`Provider ${p} does not support task cancellation.`}}catch(f){return{ok:!1,message:f instanceof Error?f.message:String(f)}}}}),shouldDefer:!0,isEnabled:()=>Ut("video")||Ut("3d")});let d=Gb({getContext:()=>({mediaClient:De,mediaProviders:nr,mediaApiKeys:wr}),resolvePath:Ne});return e.push({...$b(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Ub(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),e.push({...Fb(d),shouldDefer:!0,isEnabled:()=>d.isAvailable()}),f0(e),im(e),t?.log?.info(`[tool-bootstrap] Registered ${e.length} local tools (${e.filter(u=>u.isEnabled?.()!==!1).length} enabled): ${Kt().join(", ")}`),e}var Jr=class{mode;rules;defaultBehavior;compiledPatterns;constructor(e){this.mode=e.mode,this.rules=[...e.rules],this.defaultBehavior=e.defaultBehavior,this.compiledPatterns=this.compileRules(this.rules)}getMode(){return this.mode}setMode(e){this.mode=e}getRules(){return this.rules}getDefaultBehavior(){return this.defaultBehavior}replaceRules(e){this.rules=[...e],this.compiledPatterns=this.compileRules(this.rules)}setDefaultBehavior(e){this.defaultBehavior=e}addRule(e){this.rules.push(e),this.compiledPatterns=this.compileRules(this.rules)}applyUpdate(e){let r={pattern:e.pattern,behavior:e.behavior,reason:e.description,source:"user"};this.rules=[r,...this.rules.filter(n=>!k0(n.pattern,e.pattern))],this.compiledPatterns=this.compileRules(this.rules)}check(e){let{toolName:r,meta:n}=e;switch(this.mode){case"bypassPermissions":return{behavior:"allow",decisionReason:{type:"mode",mode:"bypassPermissions"}};case"dontAsk":return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"mode",mode:"dontAsk"}}:{behavior:"deny",message:`Tool "${r}" denied \u2014 mode is dontAsk`,decisionReason:{type:"mode",mode:"dontAsk"}};case"plan":return{behavior:"deny",message:`Tool "${r}" paused \u2014 mode is plan (execution suspended)`,decisionReason:{type:"mode",mode:"plan"}}}for(let{rule:o,regex:s}of this.compiledPatterns)if(s.test(r))return y0(o,e);return n?.isReadOnly?{behavior:"allow",decisionReason:{type:"tool_check",reason:"isReadOnly"}}:n?.requiresApproval?{behavior:"ask",message:`Tool "${r}" requires approval`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"requiresApproval"}}:n?.isDangerous?{behavior:"ask",message:`Tool "${r}" is marked dangerous`,toolName:r,input:e.arguments,decisionReason:{type:"tool_check",reason:"isDangerous"}}:this.mode==="acceptEdits"?{behavior:"allow",decisionReason:{type:"mode",mode:"acceptEdits"}}:this.defaultBehavior==="allow"?{behavior:"allow"}:this.defaultBehavior==="deny"?{behavior:"deny",message:`Tool "${r}" denied by default policy`,decisionReason:{type:"other",reason:"default_deny"}}:{behavior:"ask",message:`Tool "${r}" requires approval (default policy)`,toolName:r,input:e.arguments}}compileRules(e){return e.map(r=>({rule:r,regex:h0(r.pattern)}))}};function Pr(t){if(!t||typeof t!="object")return{mode:"default",rules:[],defaultBehavior:"allow"};let e=t,r=[];for(let a of["allow","deny","ask"]){let c=e[a];if(Array.isArray(c))for(let l of c)typeof l=="string"&&r.push({pattern:l,behavior:a,source:"config"})}if(Array.isArray(e.rules)){for(let a of e.rules)if(a&&typeof a=="object"){let c=a,l=c.pattern,d=c.behavior??c.action;typeof l=="string"&&typeof d=="string"&&(d==="allow"||d==="deny"||d==="ask")&&r.push({pattern:l,behavior:d,reason:typeof c.reason=="string"?c.reason:void 0,source:typeof c.source=="string"?c.source:"config"})}}let n=e.mode,o=typeof n=="string"&&b0(n)?n:"default",s=e.default??e.defaultBehavior,i=typeof s=="string"&&v0(s)?s:"allow";return{mode:o,rules:r,defaultBehavior:i}}function h0(t){let r=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*+/g,".*");return new RegExp(`^${r}$`,"i")}function y0(t,e){let r={type:"rule",rule:t};return t.behavior==="allow"?{behavior:"allow",decisionReason:r}:t.behavior==="deny"?{behavior:"deny",message:t.reason??`Tool "${e.toolName}" denied by rule "${t.pattern}"`,decisionReason:r}:{behavior:"ask",message:t.reason??`Tool "${e.toolName}" requires approval (rule "${t.pattern}")`,toolName:e.toolName,input:e.arguments,decisionReason:r}}function b0(t){return t==="default"||t==="bypassPermissions"||t==="acceptEdits"||t==="dontAsk"||t==="plan"||t==="auto"}function v0(t){return t==="allow"||t==="deny"||t==="ask"}function k0(t,e){return t.toLocaleLowerCase()===e.toLocaleLowerCase()}function cv(t,e){let r=Pr(e);return t.setMode(r.mode),t.replaceRules(r.rules),t.setDefaultBehavior(r.defaultBehavior),r}import{randomUUID as R0}from"node:crypto";function lv(t){rv(async e=>{let r=`ask-${R0().slice(0,8)}`;return new Promise(n=>{t.pendingAskUser.set(r,{resolve:n}),t.sendNotification("turn.ask_user",{requestId:r,questions:e.map(o=>({header:o.header,question:o.question,options:o.options}))})})})}function _s(t,e){return{name:t,compute:e,cacheBreak:!1}}function Xt(t,e,r){return{name:t,compute:e,cacheBreak:!0}}var Es=new Map;async function S0(t){return(await Promise.all(t.map(async r=>{if(!r.cacheBreak&&Es.has(r.name))return Es.get(r.name)??null;let n=await r.compute();return Es.set(r.name,n),n}))).filter(r=>r!=null)}function dv(){Es.clear()}async function Ms(t){let e=[];if(t.instructionBlock&&e.push(t.instructionBlock),t.customSystemPrompt?e.push(t.customSystemPrompt):t.basePrompt&&e.push(t.basePrompt),t.sections?.length){let r=await S0(t.sections);e.push(...r)}return t.appendSystemPrompt&&e.push(t.appendSystemPrompt),e.filter(Boolean).join(`
|
|
541
541
|
|
|
542
542
|
`)}var T0=250;async function uv(t,e){let r=new AbortController;t.activeTurn&&(t.activeTurn.abort(),await A0(t.turnDone)),t.activeTurn=r;let n;return t.turnDone=new Promise(o=>{n=o}),e&&e!==t.currentSessionId&&(t.currentSessionId&&t.currentHooks&&(t.currentHooks.invoke("session.ended",{sessionId:t.currentSessionId}).catch(()=>{}),dv()),t.currentSessionId=e,t.sessionState=new er(e),t.sessionTaskDomain=void 0,t.memoryPrefetchState=gt(),t.enableIdleDream()),{abortController:r,resolveTurnDone:n}}async function A0(t){let e;try{await Promise.race([t,new Promise(r=>{e=setTimeout(r,T0),e.unref?.()})])}finally{e&&clearTimeout(e)}}function zl(t,e){t.activeTurn===e.abortController&&(t.activeTurn=null),e.resolveTurnDone()}qe();var w0=[{purpose:"imageGeneration",capability:"image"},{purpose:"tts",capability:"tts"},{purpose:"videoGeneration",capability:"video"},{purpose:"musicGeneration",capability:"music"},{purpose:"threeDGeneration",capability:"3d"},{purpose:"stt",capability:"stt"},{purpose:"voiceClone",capability:"voice_clone"}];function P0(t){let e={};for(let{purpose:r,capability:n}of w0){let o=t.getBinding(r);o&&(e[n]={provider:o.provider,model:o.nativeModelId??o.model})}return e}function Ds(t){let{host:e,config:r,turnId:n}=t,o=M(),s=o.snapshotProviderKeys();e.currentMediaApiKeys=s;let i={...P0(o),...r?.mediaProviders};nv(e.mediaClient,s,(c,l,d)=>{e.sessionState?.addMediaUsage(c,l,d)},i,(c,l,d,u,p)=>{e.sendNotification("turn.media_progress",{turnId:n,taskId:c,mediaType:l,percent:d,status:u,...p?{provider:p}:{}})});let a=o.getActiveModel("textGeneration");a?(Wl(Zu(a.provider,a.apiKey)),a.keyHandle.release({success:!0})):Wl(void 0)}import*as Gn from"node:path";N();var x0=1800*1e3,mv=new Vr;function gv(t){let{config:e,host:r,sessionId:n}=t;if(e?.workdir&&typeof e.workdir=="string"&&r.setActiveWorkdir(e.workdir),!e?.workdir&&n&&e?.projectId){let i=e.projectId;try{let a=mv.getProjectWorkspaceDir(i);r.getActiveProjectRoot()!==a&&(r.log(`[turn] routing session ${n} to project ${i} (${a})`),r.setActiveWorkdir(a))}catch{r.log(`[turn] project ${i} not found, using active project`)}}e?.sessionType==="group"&&typeof e?.groupKey=="string"&&C0(e,r);let o=I0(e,r,t.nowMs??Date.now()),s=E0(e,r);return{sessionProjectRoot:s,sessionProjectId:_0(e,s,n),projectHintStale:o.projectHintStale,staleProjectHintContext:o.staleProjectHintContext}}function C0(t,e){let r=t.groupKey,n=r.split(":"),o=n.length>=3?n.slice(1).join(":"):r,s=Xo(o);if(s){e.setActiveWorkdir(s.workspaceDir),ne()?.id!==s.id&&Rt(s.id);return}let i=t.groupName||o,a=o.replace(/[<>:"/\\|?*\x00-\x1f]/g,"_").trim()||"group",c=Gn.join(B(),"workspaces","groups",a),l=Vo({name:i,workspaceDir:c,type:"group",groupId:o});e.setActiveWorkdir(l.workspaceDir),Rt(l.id),e.sendNotification("project.created",{id:l.id,name:l.name,type:"group",groupId:o,workspaceDir:l.workspaceDir})}function I0(t,e,r){let n=t?.projectHint,o=n&&typeof n=="object"&&"name"in n?n:typeof n=="string"?{name:n,updatedAt:r}:null;if(!o||t?.sessionType==="group")return{projectHintStale:!1};let s=r-o.updatedAt;if(s>x0)return e.log(`[projectHint] stale (${Math.round(s/6e4)}min old), skipping auto-switch`),{projectHintStale:!0,staleProjectHintContext:{activeProjectName:ne()?.name,projectNames:V().filter(l=>l.status==="active").map(l=>l.name).slice(0,10)}};let i=o.name,a=ne();if(!a||a.name.toLowerCase()!==i.toLowerCase()){let c=V(),l=i.toLowerCase(),d=c.find(u=>u.name.toLowerCase()===l)??c.find(u=>u.name.toLowerCase().includes(l));d&&d.status==="active"&&(Rt(d.id),e.setActiveWorkdir(d.workspaceDir))}return{projectHintStale:!1}}function E0(t,e){if(typeof t?.workdir=="string"&&t.workdir)return t.workdir;let r=t?.projectId;if(r)try{return mv.getProjectWorkspaceDir(r)}catch{}return e.getActiveProjectRoot()}function _0(t,e,r){if(r){let i=qt(r,e);if(i?.projectId)return i.projectId}let n=t?.projectId;if(n&&Ee(n))return n;let o=ne();return o&&pv(o.workspaceDir,e)?o.id:V().find(i=>pv(i.workspaceDir,e))?.id}function pv(t,e){return Gn.resolve(t).toLowerCase()===Gn.resolve(e).toLowerCase()}import{randomUUID as fv}from"node:crypto";function Ns(t){let{event:e,turnId:r,now:n,host:o}=t;switch(e.type){case"delta":return o.sendNotification("turn.delta",{turnId:e.turnId,text:e.text,item:{id:`${r}-delta`,type:"message",role:"assistant",text:e.text,createdAt:n}}),!0;case"tool_call":return o.sendNotification("turn.tool_call",{turnId:e.turnId,callId:e.callId,name:e.name,arguments:e.arguments,...e.inputSummary?{inputSummary:e.inputSummary}:{},item:{id:e.callId,type:"tool_call",role:"assistant",toolName:e.name,toolCallId:e.callId,arguments:e.arguments,createdAt:n}}),!0;case"tool_result":return o.sendNotification("turn.tool_result",{turnId:e.turnId,callId:e.callId,name:e.name,ok:e.ok,...e.error?{error:e.error}:{},...e.outputPreview?{outputPreview:e.outputPreview}:{},...e.durationMs!==void 0?{durationMs:e.durationMs}:{},...e.exitCode!==void 0?{exitCode:e.exitCode}:{},...e.stdout?{stdout:e.stdout}:{},...e.stderr?{stderr:e.stderr}:{},...e.details?{details:e.details}:{},item:{id:`${e.callId}-result`,type:"tool_result",role:"assistant",toolName:e.name,toolCallId:e.callId,output:e.ok?e.outputPreview??"":e.error,approved:e.ok,createdAt:n}}),!0;case"tool_blocked":return o.sendNotification("turn.tool_blocked",{turnId:e.turnId,callId:e.callId,name:e.name,reason:e.reason,item:{id:`${e.callId}-blocked`,type:"tool_blocked",role:"system",toolName:e.name,toolCallId:e.callId,text:e.reason,approved:!1,createdAt:n}}),!0;case"recovery":return o.sendNotification("turn.recovery",{turnId:e.turnId,action:e.action,...e.detail?{detail:e.detail}:{},item:{id:`${r}-recovery-${fv().slice(0,8)}`,type:"recovery",role:"system",strategy:e.action,text:e.detail,createdAt:n}}),!0;case"plan_update":return o.sendNotification("turn.plan_update",{turnId:e.turnId,slug:e.slug,content:e.content,item:{id:`${r}-plan-${fv().slice(0,8)}`,type:"plan_update",role:"assistant",text:e.content,createdAt:n}}),!0;case"reasoning_delta":return o.sendNotification("turn.reasoning_delta",{turnId:e.turnId,text:e.text}),!0;case"suggestions":return o.sendNotification("turn.suggestions",{turnId:e.turnId,items:e.items}),!0;case"media_result":return o.sendNotification("turn.media_result",{turnId:e.turnId,mediaType:e.mediaType,url:e.url,...e.model?{model:e.model}:{},...e.provider?{provider:e.provider}:{},...e.taskId?{taskId:e.taskId}:{}}),!0;case"artifact":return o.sendNotification("turn.artifact",{turnId:e.turnId,artifactId:e.artifactId,type:e.artifactType,title:e.title,...e.filePath?{filePath:e.filePath}:{},...e.language?{language:e.language}:{},...e.content?{content:e.content}:{},...e.mimeType?{mimeType:e.mimeType}:{}}),!0;case"subagent_started":return o.sendNotification("turn.subagent_started",{turnId:e.turnId,subagentId:e.subagentId,agentType:e.agentType,...e.prompt?{prompt:e.prompt}:{}}),!0;case"subagent_ended":return o.sendNotification("turn.subagent_ended",{turnId:e.turnId,subagentId:e.subagentId,agentType:e.agentType,ok:e.ok,...e.outputPreview?{outputPreview:e.outputPreview}:{},...e.error?{error:e.error}:{}}),!0;case"annotations":return o.sendNotification("turn.annotations",{turnId:e.turnId,annotations:e.annotations}),!0;case"heartbeat":return o.sendNotification("turn.heartbeat",{turnId:e.turnId,message:e.message}),!0;case"tool_use_summary":return o.sendNotification("turn.tool_use_summary",{turnId:e.turnId,summary:e.summary}),!0;default:return!1}}var M0=`[SUGGESTION MODE]
|
|
543
543
|
Based on the conversation, suggest 1-3 short follow-up actions the user might naturally do next.
|