agent-afk 5.147.1 → 5.147.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs
CHANGED
|
@@ -364,7 +364,7 @@ end
|
|
|
364
364
|
`,await tA.writeFile(t,i,"utf8")}function mme(e,t,n){if(!vo(e))return new Error(`git worktree add failed: ${String(e)}`);let r=e.stderr??"",o=e.message??"",i=`${r}
|
|
365
365
|
${o}`;return i.includes("already checked out")||i.includes("is already used by worktree")?new Error(`Branch '${t}' is already checked out in another worktree. Pick a different name.`):i.includes("already exists")?new Error(`Worktree path '${n}' already exists. Remove it or pick a different branch name.`):new Error(o||r||"git worktree add failed")}async function xy(e,t){let n=t?.execFile??uU,r=Ry(t?.branchPrefix),o=await dU(n);return await pU(o),yU(o,e,{execFile:n,prefix:r,baseRef:t?.baseRef})}async function mU(e){let t=e?.execFile??uU,n=Ry(e?.branchPrefix),r=await dU(t);await pU(r);let o=await fU(r,e?.baseRef,t),i;return{repoRoot:r,handle:()=>i,async create(s){return i===void 0&&(i=await yU(r,s,{execFile:t,prefix:n,preResolvedBase:o})),i}}}async function fU(e,t,n){let r=fme(t);if(r!==void 0)return oA(r,"worktree base ref"),await gU(e,r,n),{ref:r,sha:await hU(e,r,n)}}function oA(e,t){if(e.trim().length===0)throw new Error(`Invalid worktree base ref from ${t}: '' \u2014 base ref cannot be empty.`);if(e.startsWith("-"))throw new Error(`Invalid worktree base ref from ${t}: '${e}' \u2014 must not start with '-' (would be parsed by git as a flag).`);if(e.includes("\0"))throw new Error(`Invalid worktree base ref from ${t}: contains a NUL byte.`);if(/\s/.test(e))throw new Error(`Invalid worktree base ref from ${t}: '${e}' \u2014 must not contain whitespace.`)}function fme(e){let t=e??v.AFK_WORKTREE_BASE;if(!(t===void 0||t.length===0))return t}async function gU(e,t,n){let r=t.indexOf("/");if(r<=0)return;let o=t.slice(0,r),i;try{let{stdout:a}=await n("git",["-C",e,"remote"]);i=a.split(`
|
|
366
366
|
`).map(l=>l.trim()).filter(l=>l.length>0)}catch{return}if(!i.includes(o))return;let s=t.slice(r+1).replace(/[~^@:].*$/,"");if(s.length!==0)try{await n("git",["-C",e,"fetch","--no-tags",o,s])}catch(a){let l=vo(a)?a.message||a.stderr||"":String(a);console.warn(`Worktree base: could not fetch '${o}/${s}' (${l.trim()}). Using the local copy of '${t}', which may be stale.`)}}async function hU(e,t,n){try{let{stdout:r}=await n("git",["-C",e,"rev-parse","--verify",`${t}^{commit}`]),o=r.trim();if(o.length===0)throw new Error("empty rev-parse output");return o}catch(r){let o=vo(r)?r.message||r.stderr||"":String(r);throw new Error(`Cannot resolve worktree base ref '${t}': ${o.trim()} \u2014 check the ref exists (for a remote branch, make sure the remote is reachable so it can be fetched).`)}}async function gme(e,t){try{let{stdout:n}=await t("git",["-C",e,"symbolic-ref","--short","--quiet","refs/remotes/origin/HEAD"]),r=n.trim();if(r.length>0)return r}catch{}for(let n of["origin/main","origin/master"])try{let{stdout:r}=await t("git",["-C",e,"rev-parse","--verify","--quiet",`${n}^{commit}`]);if(r.trim().length>0)return n}catch{}}async function hme(e,t,n){try{return await hU(e,t,n)}catch{return}}async function yU(e,t,n){let{execFile:r,prefix:o}=n,i=t===!0?dme(o):t;pme(i);let s=i.replaceAll("/","-"),a=nA(e,".afk-worktrees",s),l,c,u=n.preResolvedBase??await fU(e,n.baseRef,r);if(u!==void 0)c=u.sha,l=u.ref;else{let f=await gme(e,r);if(f!==void 0){await gU(e,f,r);let g=await hme(e,f,r);g!==void 0&&(c=g,l=f)}}let d=["-C",e,"worktree","add","-b",i,a];c!==void 0&&d.push(c);try{await r("git",d)}catch(f){throw mme(f,i,a)}await Ty(e);let p={path:a,branch:i,cleanup:async f=>{let g=p.path,h=p.branch;if(f?.force===!0){console.log(`Worktree removed (zero turns \u2014 no work done): ${g}`);try{await r("git",["-C",e,"worktree","remove","--force",g])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: 'git worktree remove --force ${g}' failed (${E}). Manual removal may be needed.`);return}try{await r("git",["-C",e,"branch","-d",h])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Could not delete branch '${h}': ${E}`)}return}let b;try{b=await r("git",["-C",g,"status","--porcelain"])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: could not check status at ${g} (${E}). Skipping removal \u2014 manual cleanup may be needed.`);return}let S=T=>{if(console.log(`Worktree preserved at ${g} (branch: ${h}) \u2014 ${T}.`),B$(g),!U$()){let R=Qx(v.SHELL)==="fish"?"afk shell-init fish | source (add to ~/.config/fish/config.fish)":'eval "$(afk shell-init)" (add to ~/.zshrc or ~/.bashrc)';console.log(` \u2192 cd ${g}
|
|
367
|
-
\u2192 Or install one-time: ${R}`)}};if(b.stdout.trim().length>0){S("uncommitted changes");return}let w=await Pp(r,g);if(w.protect){S(w.because==="git-failed"?`the ignored-file probe failed (${w.detail}), so removal would be a guess`:`ignored local state \`git status\` cannot see: ${w.detail}`);return}let k=f?.disposition??"remove";if(k==="keep-locked"){try{await r("git",["-C",e,"worktree","lock","--reason",`afk: kept on exit ${new Date().toISOString()}`,g])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: could not lock ${g} (${E}). It is preserved now, but a later sweep may reclaim it.`)}S("kept on exit");return}if(k==="keep-unlocked"){S("kept on exit (not locked \u2014 a later sweep may reclaim it)");return}try{await r("git",["-C",e,"worktree","remove","--force",g])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: 'git worktree remove --force ${g}' failed (${E}). Manual removal may be needed.`);return}try{await r("git",["-C",e,"branch","-d",h])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Could not delete branch '${h}': ${E}`)}}};try{let f=c??"",g=l??"";if(c===void 0){try{f=(await r("git",["-C",e,"rev-parse","HEAD"])).stdout.trim()}catch{}try{g=(await r("git",["-C",e,"symbolic-ref","--short","HEAD"])).stdout.trim()}catch{}}let h={owner:"interactive",pid:process.pid,createdAt:new Date().toISOString(),baseSha:f,baseBranch:g};await tA.writeFile(nA(a,".afk-worktree-meta.json"),JSON.stringify(h,null,2),"utf-8")}catch{}return p}var uU,lme,cme,cU,Mp=y(()=>{"use strict";N();Qg();Zx();vy();Ey();uU=rme(nme),lme="afk/",cme=/^[A-Za-z0-9_\-./]*$/,cU=64});import{existsSync as Nr,readdirSync as SU,readFileSync as Ay,realpathSync as yme,statSync as bme}from"fs";import{homedir as sA}from"os";import{join as un,basename as Sme}from"path";function $p(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let t={};for(let n of oc){let r=e[n];if(r!==void 0){if(r===!0){t[n]={plugins:!0,skills:!0,mcp:!0};continue}if(r!==!1&&typeof r=="object"&&r!==null&&!Array.isArray(r)){let o=r;t[n]={plugins:o.plugins===!0,skills:o.skills===!0,mcp:o.mcp===!0}}}}return Object.keys(t).length>0?t:void 0}function aA(){return[vn(),Yg()]}function En(e=aA()){for(let t of e)if(Nr(t))try{let n=JSON.parse(Ay(t,"utf-8")),r=$p(n.importFrom);if(r!==void 0)return r}catch{}}function ar(e,t=sA()){let n={pluginRoots:[],skillRoots:[],mcpConfigs:[]};if(!e)return n;for(let r of oc){let o=e[r];if(!o)continue;let i=Dp[r];if(o.plugins)for(let s of i.pluginRoots(t))Nr(s)&&n.pluginRoots.push({dir:s,binary:r});if(o.skills){let s=`imported:${r}`;for(let a of i.skillRoots(t))Nr(a)&&n.skillRoots.push({dir:a,origin:s})}if(o.mcp){let s=vU(i.mcpConfigCandidates(t));s&&n.mcpConfigs.push({source:s,format:i.mcpFormat})}}return n}function wU(e,t=sA()){return Dp[e].pluginEnabledState(t)}function Cy(e=sA()){return oc.map(t=>vme(t,e))}function vme(e,t){let n=Dp[e],r=[];for(let l of n.pluginRoots(t))r.push(...Eme(l));let o=[];for(let l of n.skillRoots(t))o.push(...Rme(l));let i=vU(n.mcpConfigCandidates(t)),s=i?xme(i,n.mcpFormat):[],a=r.length>0||o.length>0||i!==null||n.pluginRoots(t).some(Nr)||n.skillRoots(t).some(Nr);return{binary:e,label:n.label,present:a,plugins:r,skills:o,mcpServers:s,mcpConfigPath:i,mcpFormat:n.mcpFormat}}function vU(e){for(let t of e)if(Nr(t))return t;return null}function kme(e){let t=un(e,".claude","settings.json");if(!Nr(t))return Op;let n;try{n=JSON.parse(Ay(t,"utf-8"))}catch{return Op}if(!n||typeof n!="object")return Op;let r=n.enabledPlugins;if(!r||typeof r!="object"||Array.isArray(r))return Op;let o=new Map;for(let[i,s]of Object.entries(r))typeof s=="boolean"&&o.set(i,s);return o}function Tme(e){try{let t=JSON.parse(Ay(un(e,".claude-plugin","plugin.json"),"utf-8"));return typeof t.name=="string"&&t.name.length>0?t.name:null}catch{return null}}function Eme(e){if(!Nr(e))return[];let t=[];return kU(e,0,t,new Set),t}function kU(e,t,n,r){let o;try{o=yme(e)}catch{o=e}if(t>wme||r.has(o))return;if(r.add(o),Nr(un(e,".claude-plugin","plugin.json"))){let s=Tme(e)??Sme(e)??e;n.push({name:s,path:e});return}let i;try{i=SU(e)}catch{return}for(let s of i){if(s.startsWith("."))continue;let a=un(e,s);try{bme(a).isDirectory()&&kU(a,t+1,n,r)}catch{}}}function Rme(e){let t;try{t=SU(e,{withFileTypes:!0})}catch{return[]}let n=[];for(let r of t)!r.isDirectory()||r.name.startsWith("_")||r.name.startsWith(".")||Nr(un(e,r.name,"SKILL.md"))&&n.push({name:r.name,path:un(e,r.name)});return n}function xme(e,t){let n;try{n=Ay(e,"utf-8")}catch{return[]}return t==="json"?Ame(n):Cme(n)}function Ame(e){let t;try{t=JSON.parse(e)}catch{return[]}if(t===null||typeof t!="object")return[];let n=t.mcpServers;if(n===null||typeof n!="object"||Array.isArray(n))return[];let r=[];for(let[o,i]of Object.entries(n))r.push({name:o,command:Ime(i)});return r}function Cme(e){let t=[],n=e.split(/\r?\n/),r=!1,o=null,i=null,s=null,a=[],l=()=>{if(r&&o){let u;s!==null?u=s:i!==null?u=a.length>0?[i,...a].join(" "):i:u="(no command)",t.push({name:o,command:u})}o=null,i=null,s=null,a=[]},c=/^\[mcp_servers\.([^\]]+)\]\s*$/;for(let u of n){let d=u.trim();if(d===""||d.startsWith("#"))continue;let p=c.exec(d);if(p){l(),r=!0,o=p[1]??null;continue}if(d.startsWith("[")){l(),r=!1;continue}if(!r)continue;let f=d.indexOf("=");if(f===-1)continue;let g=d.slice(0,f).trim(),h=d.slice(f+1).trim();g==="command"?i=iA(bU(h)):g==="url"?s=iA(bU(h)):g==="args"&&(a=_me(h))}return l(),t}function bU(e){if(e.startsWith('"')||e.startsWith("'"))return e;let t=e.indexOf(" #");return t===-1?e:e.slice(0,t).trimEnd()}function _me(e){let t=e.trim();if(!t.startsWith("["))return[];let n=t.slice(1,t.lastIndexOf("]"));if(!n.trim())return[];try{return n.split(",").map(r=>iA(r.trim())).filter(r=>r.length>0)}catch{return[]}}function iA(e){let t=e.match(/^"([^"]*)"$/)??e.match(/^'([^']*)'$/);return t&&t[1]!==void 0?t[1]:e.startsWith('"')||e.startsWith("'")?e.slice(1):e.endsWith('"')||e.endsWith("'")?e.slice(0,-1):e}function Ime(e){if(e===null||typeof e!="object")return"(invalid)";let t=e;if(typeof t.url=="string")return t.url;if(typeof t.command=="string"){let n=Array.isArray(t.args)?t.args.filter(r=>typeof r=="string"):[];return[t.command,...n].join(" ")}return"(no command)"}var oc,Op,Dp,D6e,wme,ko=y(()=>{"use strict";H();oc=["claude-code","codex"],Op=new Map,Dp={"claude-code":{label:"Claude Code",pluginRoots:e=>[un(e,".claude","plugins")],skillRoots:e=>[un(e,".claude","skills")],mcpConfigCandidates:e=>[un(e,".claude","mcp.json"),un(e,".claude",".mcp.json"),un(e,".claude","claude-code","mcp.json")],mcpFormat:"json",pluginEnabledState:e=>kme(e)},codex:{label:"Codex",pluginRoots:e=>[un(e,".codex","plugins")],skillRoots:e=>[un(e,".codex","skills")],mcpConfigCandidates:e=>[un(e,".codex","config.toml")],mcpFormat:"toml",pluginEnabledState:()=>Op}},D6e={"claude-code":Dp["claude-code"].label,codex:Dp.codex.label},wme=5});import{readFileSync as Pme,existsSync as Mme}from"fs";function _y(e){if(!Mme(e))return;let t=Pme(e,"utf-8"),n=JSON.parse(t),r={},o=rL(n.models);if(typeof n.model=="string"&&n.model.length>0){let i=n.model.toLowerCase();r.model=Zd(i)?i:n.model}if(typeof n.maxTokens=="number"&&(r.maxTokens=n.maxTokens),typeof n.temperature=="number"&&(r.temperature=n.temperature),typeof n.systemPrompt=="string"&&n.systemPrompt.length>0&&(r.systemPrompt=n.systemPrompt),typeof n.permissionMode=="string"){let i=n.permissionMode;(i==="default"||i==="plan"||i==="autonomous"||i==="bypassPermissions")&&(r.permissionMode=i)}if(n.autoRouting&&typeof n.autoRouting=="object"){let i={};typeof n.autoRouting.interactive=="boolean"&&(i.interactive=n.autoRouting.interactive),typeof n.autoRouting.chat=="boolean"&&(i.chat=n.autoRouting.chat),typeof n.autoRouting.telegram=="boolean"&&(i.telegram=n.autoRouting.telegram),typeof n.autoRouting.daemon=="boolean"&&(i.daemon=n.autoRouting.daemon),r.autoRouting=i}if(n.daemon&&typeof n.daemon=="object"){let i={};typeof n.daemon.task=="string"&&(i.task=n.daemon.task),typeof n.daemon.taskId=="string"&&(i.taskId=n.daemon.taskId);let s=n.daemon.worktreePrune;s&&typeof s=="object"&&(i.worktreePrune={enabled:typeof s.enabled=="boolean"?s.enabled:!0,cron:typeof s.cron=="string"?s.cron:"0 4 * * *",maxAgeDaysClean:typeof s.maxAgeDaysClean=="number"?s.maxAgeDaysClean:14,maxAgeDaysDirty:typeof s.maxAgeDaysDirty=="number"?s.maxAgeDaysDirty:30,scope:typeof s.scope=="string"?s.scope:"all"}),typeof n.daemon.verifyDone=="boolean"&&(i.verifyDone=n.daemon.verifyDone),r.daemon=i}if(n.telegram&&typeof n.telegram=="object"){let i={},s=n.telegram.notify;if(s&&typeof s=="object"){let a={};if((s.mode==="primary"||s.mode==="broadcast"||s.mode==="custom")&&(a.mode=s.mode),typeof s.primaryChatId=="number"&&Number.isFinite(s.primaryChatId)&&(a.primaryChatId=s.primaryChatId),Array.isArray(s.targets)){let l=s.targets.filter(c=>typeof c=="number"&&Number.isFinite(c));l.length>0&&(a.targets=l)}i.notify=a}if(typeof n.telegram.verifyDone=="boolean"&&(i.verifyDone=n.telegram.verifyDone),Array.isArray(n.telegram.tagOnlyChats)){let a=n.telegram.tagOnlyChats.filter(l=>typeof l=="number"&&Number.isFinite(l));a.length>0&&(i.tagOnlyChats=a)}if(n.telegram.chatAliases&&typeof n.telegram.chatAliases=="object"&&!Array.isArray(n.telegram.chatAliases)){let a={};for(let[l,c]of Object.entries(n.telegram.chatAliases))typeof c=="number"&&Number.isFinite(c)&&c!==0&&(a[l]=c);Object.keys(a).length>0&&(i.chatAliases=a)}r.telegram=i}if(n.updatePolicy&&["notify","auto","off"].includes(n.updatePolicy)&&(r.updatePolicy=n.updatePolicy),n.theme&&["dark","light","umber","auto"].includes(n.theme)&&(r.theme=n.theme),typeof n.autoResumeOnUsageLimit=="boolean"&&(r.autoResumeOnUsageLimit=n.autoResumeOnUsageLimit),typeof n.enforceDoneEvidence=="boolean"&&(r.enforceDoneEvidence=n.enforceDoneEvidence),typeof n.bgSummaries=="boolean"&&(r.bgSummaries=n.bgSummaries),typeof n.maxSummaryCallsPerSession=="number"&&(r.maxSummaryCallsPerSession=Math.min(500,Math.max(1,n.maxSummaryCallsPerSession))),n.hooks!==null&&typeof n.hooks=="object"&&!Array.isArray(n.hooks)&&(r.hooks=n.hooks),typeof n.enableShellHooks=="boolean"&&(r.enableShellHooks=n.enableShellHooks),typeof n.enablePluginHooks=="boolean"&&(r.enablePluginHooks=n.enablePluginHooks),aA().includes(e)){let i=$p(n.importFrom);i!==void 0&&(r.importFrom=i)}if(n.interactive&&typeof n.interactive=="object"){let i={};typeof n.interactive.worktreeAutoname=="boolean"&&(i.worktreeAutoname=n.interactive.worktreeAutoname),typeof n.interactive.worktreeBranchPrefix=="string"&&(i.worktreeBranchPrefix=rA(n.interactive.worktreeBranchPrefix,`${e}#/interactive/worktreeBranchPrefix`)),typeof n.interactive.worktreeBase=="string"&&n.interactive.worktreeBase.trim().length>0&&(oA(n.interactive.worktreeBase,`${e}#/interactive/worktreeBase`),i.worktreeBase=n.interactive.worktreeBase),(n.interactive.worktreeOnExit==="ask"||n.interactive.worktreeOnExit==="keep"||n.interactive.worktreeOnExit==="remove")&&(i.worktreeOnExit=n.interactive.worktreeOnExit),typeof n.interactive.suggestGhost=="boolean"&&(i.suggestGhost=n.interactive.suggestGhost),(n.interactive.thinkingUi==="summary"||n.interactive.thinkingUi==="live"||n.interactive.thinkingUi==="digest"||n.interactive.thinkingUi==="off")&&(i.thinkingUi=n.interactive.thinkingUi),Object.keys(i).length>0&&(r.interactive=i)}return{config:r,modelsPartial:o}}function TU(e){let t={...e.config};return Object.keys(e.modelsPartial).length>0&&(t.models=e.modelsPartial),t}var lA=y(()=>{"use strict";Ln();Ht();Mp();ko()});function EU(){Fp=void 0}function Lp(){if(Fp!==void 0)return Fp;let e=Sy().map(r=>r.path),t=!1;for(let r of e){let o;try{o=_y(r)}catch(s){console.error(`Warning: Failed to parse ${r}:`,s),t=!0;continue}if(o===void 0)continue;let i={...o,sourcePath:r};return t||(Fp=i),i}let n={config:{},sourcePath:void 0,modelsPartial:{}};return t||(Fp=n),n}var Fp,RU=y(()=>{"use strict";Xx();lA()});import{readFileSync as Ome,existsSync as cA,realpathSync as xU}from"fs";function Iy(){Np=void 0}function AU(e){if(!cA(e))return null;try{let t=Ome(e,"utf-8").trim();return t.length>0?t:null}catch{return null}}function Dme(e,t){if(e===t)return!0;if(!cA(e)||!cA(t))return!1;try{return xU(e)===xU(t)}catch{return!1}}function hi(e=process.cwd()){if(Np?.cwd===e)return Np.value;let t=zg(),n=Vg(e),r=AU(t),o=Dme(n,t)?null:AU(n),i;return r!==null&&o!==null?i={content:`${$me(t)}
|
|
367
|
+
\u2192 Or install one-time: ${R}`)}};if(b.stdout.trim().length>0){S("uncommitted changes");return}let w=await Pp(r,g);if(w.protect){S(w.because==="git-failed"?`the ignored-file probe failed (${w.detail}), so removal would be a guess`:`ignored local state \`git status\` cannot see: ${w.detail}`);return}let k=f?.disposition??"remove";if(k==="keep-locked"){try{await r("git",["-C",e,"worktree","lock","--reason",`afk: kept on exit ${new Date().toISOString()}`,g])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: could not lock ${g} (${E}). It is preserved now, but a later sweep may reclaim it.`)}S("kept on exit");return}if(k==="keep-unlocked"){S("kept on exit (not locked \u2014 a later sweep may reclaim it)");return}try{await r("git",["-C",e,"worktree","remove","--force",g])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Worktree cleanup: 'git worktree remove --force ${g}' failed (${E}). Manual removal may be needed.`);return}try{await r("git",["-C",e,"branch","-d",h])}catch(T){let E=vo(T)?T.message||T.stderr||"":String(T);console.warn(`Could not delete branch '${h}': ${E}`)}}};try{let f=c??"",g=l??"";if(c===void 0){try{f=(await r("git",["-C",e,"rev-parse","HEAD"])).stdout.trim()}catch{}try{g=(await r("git",["-C",e,"symbolic-ref","--short","HEAD"])).stdout.trim()}catch{}}let h={owner:"interactive",pid:process.pid,createdAt:new Date().toISOString(),baseSha:f,baseBranch:g};await tA.writeFile(nA(a,".afk-worktree-meta.json"),JSON.stringify(h,null,2),"utf-8")}catch{}return p}var uU,lme,cme,cU,Mp=y(()=>{"use strict";N();Qg();Zx();vy();Ey();uU=rme(nme),lme="afk/",cme=/^[A-Za-z0-9_\-./]*$/,cU=64});import{existsSync as Nr,readdirSync as SU,readFileSync as Ay,realpathSync as yme,statSync as bme}from"fs";import{homedir as sA}from"os";import{join as un,basename as Sme}from"path";function $p(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let t={};for(let n of oc){let r=e[n];if(r!==void 0){if(r===!0){t[n]={plugins:!0,skills:!0,mcp:!0};continue}if(r!==!1&&typeof r=="object"&&r!==null&&!Array.isArray(r)){let o=r;t[n]={plugins:o.plugins===!0,skills:o.skills===!0,mcp:o.mcp===!0}}}}return Object.keys(t).length>0?t:void 0}function aA(){return[vn(),Yg()]}function En(e=aA()){for(let t of e)if(Nr(t))try{let n=JSON.parse(Ay(t,"utf-8")),r=$p(n.importFrom);if(r!==void 0)return r}catch{}}function ar(e,t=sA()){let n={pluginRoots:[],skillRoots:[],mcpConfigs:[]};if(!e)return n;for(let r of oc){let o=e[r];if(!o)continue;let i=Dp[r];if(o.plugins)for(let s of i.pluginRoots(t))Nr(s)&&n.pluginRoots.push({dir:s,binary:r});if(o.skills){let s=`imported:${r}`;for(let a of i.skillRoots(t))Nr(a)&&n.skillRoots.push({dir:a,origin:s})}if(o.mcp){let s=vU(i.mcpConfigCandidates(t));s&&n.mcpConfigs.push({source:s,format:i.mcpFormat})}}return n}function wU(e,t=sA()){return Dp[e].pluginEnabledState(t)}function Cy(e=sA()){return oc.map(t=>vme(t,e))}function vme(e,t){let n=Dp[e],r=[];for(let l of n.pluginRoots(t))r.push(...Eme(l));let o=[];for(let l of n.skillRoots(t))o.push(...Rme(l));let i=vU(n.mcpConfigCandidates(t)),s=i?xme(i,n.mcpFormat):[],a=r.length>0||o.length>0||i!==null||n.pluginRoots(t).some(Nr)||n.skillRoots(t).some(Nr);return{binary:e,label:n.label,present:a,plugins:r,skills:o,mcpServers:s,mcpConfigPath:i,mcpFormat:n.mcpFormat}}function vU(e){for(let t of e)if(Nr(t))return t;return null}function kme(e){let t=un(e,".claude","settings.json");if(!Nr(t))return Op;let n;try{n=JSON.parse(Ay(t,"utf-8"))}catch{return Op}if(!n||typeof n!="object")return Op;let r=n.enabledPlugins;if(!r||typeof r!="object"||Array.isArray(r))return Op;let o=new Map;for(let[i,s]of Object.entries(r))typeof s=="boolean"&&o.set(i,s);return o}function Tme(e){try{let t=JSON.parse(Ay(un(e,".claude-plugin","plugin.json"),"utf-8"));return typeof t.name=="string"&&t.name.length>0?t.name:null}catch{return null}}function Eme(e){if(!Nr(e))return[];let t=[];return kU(e,0,t,new Set),t}function kU(e,t,n,r){let o;try{o=yme(e)}catch{o=e}if(t>wme||r.has(o))return;if(r.add(o),Nr(un(e,".claude-plugin","plugin.json"))){let s=Tme(e)??Sme(e)??e;n.push({name:s,path:e});return}let i;try{i=SU(e)}catch{return}for(let s of i){if(s.startsWith("."))continue;let a=un(e,s);try{bme(a).isDirectory()&&kU(a,t+1,n,r)}catch{}}}function Rme(e){let t;try{t=SU(e,{withFileTypes:!0})}catch{return[]}let n=[];for(let r of t)!r.isDirectory()||r.name.startsWith("_")||r.name.startsWith(".")||Nr(un(e,r.name,"SKILL.md"))&&n.push({name:r.name,path:un(e,r.name)});return n}function xme(e,t){let n;try{n=Ay(e,"utf-8")}catch{return[]}return t==="json"?Ame(n):Cme(n)}function Ame(e){let t;try{t=JSON.parse(e)}catch{return[]}if(t===null||typeof t!="object")return[];let n=t.mcpServers;if(n===null||typeof n!="object"||Array.isArray(n))return[];let r=[];for(let[o,i]of Object.entries(n))r.push({name:o,command:Ime(i)});return r}function Cme(e){let t=[],n=e.split(/\r?\n/),r=!1,o=null,i=null,s=null,a=[],l=()=>{if(r&&o){let u;s!==null?u=s:i!==null?u=a.length>0?[i,...a].join(" "):i:u="(no command)",t.push({name:o,command:u})}o=null,i=null,s=null,a=[]},c=/^\[mcp_servers\.([^\]]+)\]\s*$/;for(let u of n){let d=u.trim();if(d===""||d.startsWith("#"))continue;let p=c.exec(d);if(p){l(),r=!0,o=p[1]??null;continue}if(d.startsWith("[")){l(),r=!1;continue}if(!r)continue;let f=d.indexOf("=");if(f===-1)continue;let g=d.slice(0,f).trim(),h=d.slice(f+1).trim();g==="command"?i=iA(bU(h)):g==="url"?s=iA(bU(h)):g==="args"&&(a=_me(h))}return l(),t}function bU(e){if(e.startsWith('"')||e.startsWith("'"))return e;let t=e.indexOf(" #");return t===-1?e:e.slice(0,t).trimEnd()}function _me(e){let t=e.trim();if(!t.startsWith("["))return[];let n=t.slice(1,t.lastIndexOf("]"));if(!n.trim())return[];try{return n.split(",").map(r=>iA(r.trim())).filter(r=>r.length>0)}catch{return[]}}function iA(e){let t=e.match(/^"([^"]*)"$/)??e.match(/^'([^']*)'$/);return t&&t[1]!==void 0?t[1]:e.startsWith('"')||e.startsWith("'")?e.slice(1):e.endsWith('"')||e.endsWith("'")?e.slice(0,-1):e}function Ime(e){if(e===null||typeof e!="object")return"(invalid)";let t=e;if(typeof t.url=="string")return t.url;if(typeof t.command=="string"){let n=Array.isArray(t.args)?t.args.filter(r=>typeof r=="string"):[];return[t.command,...n].join(" ")}return"(no command)"}var oc,Op,Dp,D5e,wme,ko=y(()=>{"use strict";H();oc=["claude-code","codex"],Op=new Map,Dp={"claude-code":{label:"Claude Code",pluginRoots:e=>[un(e,".claude","plugins")],skillRoots:e=>[un(e,".claude","skills")],mcpConfigCandidates:e=>[un(e,".claude","mcp.json"),un(e,".claude",".mcp.json"),un(e,".claude","claude-code","mcp.json")],mcpFormat:"json",pluginEnabledState:e=>kme(e)},codex:{label:"Codex",pluginRoots:e=>[un(e,".codex","plugins")],skillRoots:e=>[un(e,".codex","skills")],mcpConfigCandidates:e=>[un(e,".codex","config.toml")],mcpFormat:"toml",pluginEnabledState:()=>Op}},D5e={"claude-code":Dp["claude-code"].label,codex:Dp.codex.label},wme=5});import{readFileSync as Pme,existsSync as Mme}from"fs";function _y(e){if(!Mme(e))return;let t=Pme(e,"utf-8"),n=JSON.parse(t),r={},o=rL(n.models);if(typeof n.model=="string"&&n.model.length>0){let i=n.model.toLowerCase();r.model=Zd(i)?i:n.model}if(typeof n.maxTokens=="number"&&(r.maxTokens=n.maxTokens),typeof n.temperature=="number"&&(r.temperature=n.temperature),typeof n.systemPrompt=="string"&&n.systemPrompt.length>0&&(r.systemPrompt=n.systemPrompt),typeof n.permissionMode=="string"){let i=n.permissionMode;(i==="default"||i==="plan"||i==="autonomous"||i==="bypassPermissions")&&(r.permissionMode=i)}if(n.autoRouting&&typeof n.autoRouting=="object"){let i={};typeof n.autoRouting.interactive=="boolean"&&(i.interactive=n.autoRouting.interactive),typeof n.autoRouting.chat=="boolean"&&(i.chat=n.autoRouting.chat),typeof n.autoRouting.telegram=="boolean"&&(i.telegram=n.autoRouting.telegram),typeof n.autoRouting.daemon=="boolean"&&(i.daemon=n.autoRouting.daemon),r.autoRouting=i}if(n.daemon&&typeof n.daemon=="object"){let i={};typeof n.daemon.task=="string"&&(i.task=n.daemon.task),typeof n.daemon.taskId=="string"&&(i.taskId=n.daemon.taskId);let s=n.daemon.worktreePrune;s&&typeof s=="object"&&(i.worktreePrune={enabled:typeof s.enabled=="boolean"?s.enabled:!0,cron:typeof s.cron=="string"?s.cron:"0 4 * * *",maxAgeDaysClean:typeof s.maxAgeDaysClean=="number"?s.maxAgeDaysClean:14,maxAgeDaysDirty:typeof s.maxAgeDaysDirty=="number"?s.maxAgeDaysDirty:30,scope:typeof s.scope=="string"?s.scope:"all"}),typeof n.daemon.verifyDone=="boolean"&&(i.verifyDone=n.daemon.verifyDone),r.daemon=i}if(n.telegram&&typeof n.telegram=="object"){let i={},s=n.telegram.notify;if(s&&typeof s=="object"){let a={};if((s.mode==="primary"||s.mode==="broadcast"||s.mode==="custom")&&(a.mode=s.mode),typeof s.primaryChatId=="number"&&Number.isFinite(s.primaryChatId)&&(a.primaryChatId=s.primaryChatId),Array.isArray(s.targets)){let l=s.targets.filter(c=>typeof c=="number"&&Number.isFinite(c));l.length>0&&(a.targets=l)}i.notify=a}if(typeof n.telegram.verifyDone=="boolean"&&(i.verifyDone=n.telegram.verifyDone),Array.isArray(n.telegram.tagOnlyChats)){let a=n.telegram.tagOnlyChats.filter(l=>typeof l=="number"&&Number.isFinite(l));a.length>0&&(i.tagOnlyChats=a)}if(n.telegram.chatAliases&&typeof n.telegram.chatAliases=="object"&&!Array.isArray(n.telegram.chatAliases)){let a={};for(let[l,c]of Object.entries(n.telegram.chatAliases))typeof c=="number"&&Number.isFinite(c)&&c!==0&&(a[l]=c);Object.keys(a).length>0&&(i.chatAliases=a)}r.telegram=i}if(n.updatePolicy&&["notify","auto","off"].includes(n.updatePolicy)&&(r.updatePolicy=n.updatePolicy),n.theme&&["dark","light","umber","auto"].includes(n.theme)&&(r.theme=n.theme),typeof n.autoResumeOnUsageLimit=="boolean"&&(r.autoResumeOnUsageLimit=n.autoResumeOnUsageLimit),typeof n.enforceDoneEvidence=="boolean"&&(r.enforceDoneEvidence=n.enforceDoneEvidence),typeof n.bgSummaries=="boolean"&&(r.bgSummaries=n.bgSummaries),typeof n.maxSummaryCallsPerSession=="number"&&(r.maxSummaryCallsPerSession=Math.min(500,Math.max(1,n.maxSummaryCallsPerSession))),n.hooks!==null&&typeof n.hooks=="object"&&!Array.isArray(n.hooks)&&(r.hooks=n.hooks),typeof n.enableShellHooks=="boolean"&&(r.enableShellHooks=n.enableShellHooks),typeof n.enablePluginHooks=="boolean"&&(r.enablePluginHooks=n.enablePluginHooks),aA().includes(e)){let i=$p(n.importFrom);i!==void 0&&(r.importFrom=i)}if(n.interactive&&typeof n.interactive=="object"){let i={};typeof n.interactive.worktreeAutoname=="boolean"&&(i.worktreeAutoname=n.interactive.worktreeAutoname),typeof n.interactive.worktreeBranchPrefix=="string"&&(i.worktreeBranchPrefix=rA(n.interactive.worktreeBranchPrefix,`${e}#/interactive/worktreeBranchPrefix`)),typeof n.interactive.worktreeBase=="string"&&n.interactive.worktreeBase.trim().length>0&&(oA(n.interactive.worktreeBase,`${e}#/interactive/worktreeBase`),i.worktreeBase=n.interactive.worktreeBase),(n.interactive.worktreeOnExit==="ask"||n.interactive.worktreeOnExit==="keep"||n.interactive.worktreeOnExit==="remove")&&(i.worktreeOnExit=n.interactive.worktreeOnExit),typeof n.interactive.suggestGhost=="boolean"&&(i.suggestGhost=n.interactive.suggestGhost),(n.interactive.thinkingUi==="summary"||n.interactive.thinkingUi==="live"||n.interactive.thinkingUi==="digest"||n.interactive.thinkingUi==="off")&&(i.thinkingUi=n.interactive.thinkingUi),Object.keys(i).length>0&&(r.interactive=i)}return{config:r,modelsPartial:o}}function TU(e){let t={...e.config};return Object.keys(e.modelsPartial).length>0&&(t.models=e.modelsPartial),t}var lA=y(()=>{"use strict";Ln();Ht();Mp();ko()});function EU(){Fp=void 0}function Lp(){if(Fp!==void 0)return Fp;let e=Sy().map(r=>r.path),t=!1;for(let r of e){let o;try{o=_y(r)}catch(s){console.error(`Warning: Failed to parse ${r}:`,s),t=!0;continue}if(o===void 0)continue;let i={...o,sourcePath:r};return t||(Fp=i),i}let n={config:{},sourcePath:void 0,modelsPartial:{}};return t||(Fp=n),n}var Fp,RU=y(()=>{"use strict";Xx();lA()});import{readFileSync as Ome,existsSync as cA,realpathSync as xU}from"fs";function Iy(){Np=void 0}function AU(e){if(!cA(e))return null;try{let t=Ome(e,"utf-8").trim();return t.length>0?t:null}catch{return null}}function Dme(e,t){if(e===t)return!0;if(!cA(e)||!cA(t))return!1;try{return xU(e)===xU(t)}catch{return!1}}function hi(e=process.cwd()){if(Np?.cwd===e)return Np.value;let t=zg(),n=Vg(e),r=AU(t),o=Dme(n,t)?null:AU(n),i;return r!==null&&o!==null?i={content:`${$me(t)}
|
|
368
368
|
|
|
369
369
|
${r}
|
|
370
370
|
|
|
@@ -377,7 +377,7 @@ ${o}`,paths:[t,n]}:o!==null?i={content:o,paths:[n]}:r!==null?i={content:r,paths:
|
|
|
377
377
|
|
|
378
378
|
${t}`}var Vme,fA=y(()=>{"use strict";Vme=new Set(["script","style","noscript","template","svg"])});function Xme(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new Error("aborted"));return}let o=()=>{clearTimeout(i),r(t?.reason??new Error("aborted"))},i=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e);t?.addEventListener("abort",o,{once:!0})})}function HU(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function Qme(e,t){let n=e.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,t)}async function WU(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??Xme,l=n.signal??void 0,c;for(let u=0;u<=o;u++){if(l?.aborted)throw l.reason??new Error("aborted");try{let d=await e(t,n);if(!Jme.has(d.status)||u===o)return d;let p=Qme(d,s)??HU(u,i,s);F("[web/retryFetch] retrying",{url:t,attempt:u,status:d.status,waitMs:p}),await d.body?.cancel().catch(()=>{}),await a(p,l)}catch(d){if(l?.aborted||(c=d,u===o))throw d;let p=HU(u,i,s);F("[web/retryFetch] retrying after error",{url:t,attempt:u,waitMs:p}),await a(p,l)}}throw c??new Error("retryFetch: exhausted without a result")}var Jme,KU=y(()=>{"use strict";ue();Jme=new Set([429,502,503,504])});import{BlockList as Zme,isIP as hA}from"node:net";import{lookup as efe}from"node:dns/promises";import{Agent as tfe}from"undici";function qU(){let e=v.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function ife(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function gA(e){let t=hA(e);return t===0?!1:ofe.check(e,t===4?"ipv4":"ipv6")}async function zU(e){return efe(e,{all:!0,verbatim:!0})}async function yA(e,t={}){if(t.allowPrivateHosts??qU())return{allowed:!0};let n;try{n=new URL(e)}catch{return{allowed:!1,reason:`"${e}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=ife(n.hostname),o=(a,l)=>`refusing to fetch ${l} \u2014 internal/private address ${a} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`;if(hA(r)!==0)return gA(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??zU,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if(gA(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Hp(e,t={}){let n=await yA(e,t);if(!n.allowed)throw new lr(n.reason)}async function Oy(e,t,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},i=t;for(let s=0;s<=GU;s++){await Hp(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??qU())?{dispatcher:sfe}:{}},l=await WU(e,i,a,r.retry??{});if(!afe.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let u;try{u=new URL(c,l.url||i).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),i=u}throw new lr(`too many redirects (>${GU}) starting from ${t}`)}var nfe,rfe,ofe,lr,sfe,GU,afe,bA=y(()=>{"use strict";N();KU();nfe=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.168.0.0",16]],rfe=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],ofe=(()=>{let e=new Zme;for(let[t,n]of nfe)e.addSubnet(t,n,"ipv4");for(let[t,n]of rfe)e.addSubnet(t,n,"ipv6");return e})(),lr=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};sfe=new tfe({connect:{lookup(e,t,n){zU(e).then(r=>{let o=r.find(s=>gA(s.address));if(o!==void 0){n(new lr(`refusing to connect to ${e} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let i=r[0];if(i===void 0){n(new Error(`DNS lookup returned no addresses for ${e}`),"",0);return}n(null,i.address,hA(i.address))},r=>n(r,"",0))}}});GU=20,afe=new Set([301,302,303,307,308])});import{readFileSync as lfe}from"node:fs";import{join as cfe}from"path";function ufe(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function VU(e,t){return ufe(t).test(e)}function mfe(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(dfe.has(t))return!0;if(pfe.has(t))return!1}return!1}function YU(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function ffe(e){if(e===void 0||e===""||e==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${e}`)}function JU(e){let t=e===void 0||e.trim()===""?"default":e.trim();return Ud(t),t}function gfe(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function hfe(e){try{return lfe(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function yfe(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright")n.backend="playwright";else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=JU(t.defaultProfile)),n}function XU(e){let t=e?.env??v,n=e?.readFileSync??hfe,r=e?.surface??t.AGENT_SURFACE,o=mfe(t.AFK_BROWSER_HEADLESS,r),i=YU(t.AFK_BROWSER_ALLOWED_DOMAINS),s=YU(t.AFK_BROWSER_BLOCKED_DOMAINS),a=gfe(t.AFK_BROWSER_DOM_SNAPSHOTS),l=ffe(t.AFK_BROWSER_BACKEND),c=JU(t.AFK_BROWSER_DEFAULT_PROFILE),u={headless:o,allowedDomains:i,blockedDomains:s,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},d=t.AFK_BROWSER_CONFIG,p=d!==void 0&&d.trim()!==""?d.trim():cfe(tr(),"browser.json"),f=n(p);if(f===void 0)return u;let g;try{g=JSON.parse(f)}catch(b){throw new Error(`Failed to parse browser config at ${p}: ${String(b)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${p} must be a JSON object`);let h=yfe(u,g);return h.configPath=p,h}function Dy(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(VU(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>VU(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var dfe,pfe,$y=y(()=>{"use strict";N();H();dfe=new Set(["daemon","subagent","telegram","afk"]),pfe=new Set(["repl","interactive","cli"])});import{existsSync as bfe,readFileSync as Sfe}from"node:fs";import{createRequire as wfe}from"node:module";import{dirname as vfe,join as kfe}from"node:path";function ej(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<Efe&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function dn(e){let t=ej(e);return ZU.some(n=>t.includes(n))}function Rfe(){try{let t=wfe(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(Sfe(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let i=kfe(vfe(t),o);return bfe(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function Wp(){return QU??=Rfe()??Tfe,QU}function SA(e){return e.includes("install chromium")}function Un(e,t){let n=ej(e),r=t?.latched===!0?` ${xfe}`:"";if(n.includes("Executable doesn't exist")){let o="";return t?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${Wp()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Wp()}). Or pick a different tool.${r}`}function Kp(e,t,n=!1){if(!dn(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
|
|
379
379
|
|
|
380
|
-
${Un(e,{headless:t,latched:n})}`,{cause:e})}var ZU,Tfe,Efe,QU,xfe,Fy=y(()=>{"use strict";ZU=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],Tfe="pnpm exec playwright install chromium",Efe=4;xfe="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Qs from"node:fs";import Ly from"node:path";import{randomBytes as Afe}from"node:crypto";import{chromium as Cfe}from"playwright";function _fe(){try{return"5.147.1"}catch{}try{let e=Ly.resolve(import.meta.dirname,"../../../package.json"),t=Qs.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var Ife,Ny,tj=y(()=>{"use strict";Fy();H();ue();Ife=_fe(),Ny=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=Cfe.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Kp(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${Ife}`}}loadStorageState(t){let n=jd(t);try{if(!Qs.existsSync(n))return;let r=JSON.parse(Qs.readFileSync(n,"utf8"));return F("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){F("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=jd(t);if(!Qs.existsSync(r))return;let o=await n.storageState(),i=Ly.join(Ly.dirname(r),`.${Ly.basename(r)}.${process.pid}.${Afe(4).toString("hex")}.tmp`);Qs.writeFileSync(i,JSON.stringify(o),{mode:384}),Qs.chmodSync(i,384),Qs.renameSync(i,r),F("[browser/vault] saved session",{profile:t,file:r})}catch(r){F("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as Pfe}from"crypto";function nj(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&Mfe.test(e.label))}function rj(e){return Pfe("sha256").update(e,"utf8").digest("hex").slice(0,8)}function oj(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var Mfe,By=y(()=>{"use strict";Mfe=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as Ofe}from"node:crypto";function Dfe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function $fe(e,t,n){return`el_${Ofe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function Ffe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function ij(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function aj(e,t){let n=e.role??"",r=e.name??"";sj.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])aj(i,t)}async function Lfe(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},lj).catch(()=>[])}async function Nfe(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},lj).catch(()=>[])}function Bfe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Uy(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Bfe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=Lfe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,S=!1;d!==null?(b=[],aj(d,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await Nfe(e)).filter(D=>sj.has(D.role??"")));let w=new Map;for(let P of p){let D=ij(P.name),L=w.get(D);(!L||L.bbox.w===0&&P.bbox.w>0)&&w.set(D,P)}let k=b.map(P=>({ax:P,dom:w.get(ij(P.name??""))})),T=r?k:k.filter(P=>P.dom?P.dom.bbox.w>0||P.dom.bbox.h>0:!0);T.sort((P,D)=>{let L=P.dom?.bbox.y??0,U=D.dom?.bbox.y??0;if(L!==U)return L-U;let G=P.dom?.bbox.x??0,K=D.dom?.bbox.x??0;return G-K}),T.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=T.slice(0,n).map((P,D)=>{let L=P.ax.role??"generic",U=P.ax.name??"",G=$fe(L,U,D),K=P.dom?.bbox??{x:0,y:0,w:0,h:0},W=P.dom?.type??null,q=null;P.ax.value!==void 0&&P.ax.value!==null&&(q=String(P.ax.value)),P.ax.checked!==void 0&&(q=String(P.ax.checked)),nj({role:L,kind:W})&&(q="[redacted]");let M={disabled:P.ax.disabled??!1};P.ax.checked!==void 0&&(M.checked=P.ax.checked===!0||P.ax.checked==="mixed"),P.ax.selected!==void 0&&(M.selected=P.ax.selected),P.ax.expanded!==void 0&&(M.expanded=P.ax.expanded);let $;P.dom?.testId?$=`[data-testid="${P.dom.testId}"]`:P.dom?.id&&($=`#${P.dom.id}`);let j={id:G,role:L,label:Dfe(U),kind:W,value:q,state:M,bbox:K};return $!==void 0&&(j.selector=$),j}),I="idle";try{let P=await e.evaluate(()=>document.readyState);P==="loading"?I="loading":P==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=Ffe(f),x=`obs_${t.observationCounter.toString(36)}`,_=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:C,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:I,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:_}}var sj,lj,cj=y(()=>{"use strict";By();sj=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);lj="a[href], button, input, select, textarea, [role], [tabindex], label"});async function uj(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function wA(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>uj(e,i)))).filter(o=>o!==null)}async function Ufe(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function vA(e,t,n){switch(t.kind){case"element_id":return jfe(e,t,n);case"selector":return Hfe(e,t);case"semantic":return Wfe(e,t)}}async function jfe(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await wA(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Hfe(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await wA(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Wfe(e,t){return t.role!==void 0?Kfe(e,t.text,t.role):Gfe(e,t.text,t)}async function Kfe(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await wA(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function Gfe(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await Ufe(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let S=await uj(b.locator,b.index);if(S!==null){let w=`${S.role}:${S.label}:${h}`,k=0;for(let T=0;T<w.length;T++)k=k*31+w.charCodeAt(T)>>>0;f.push({...S,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var dj=y(()=>{"use strict"});async function kA(e,t,n,r){let o=e.url();if(o===n)return null;let i=Dy(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var pj=y(()=>{"use strict";$y()});import{randomBytes as qfe}from"crypto";import{mkdir as zfe,stat as Vfe,writeFile as Yfe}from"fs/promises";import{join as TA}from"path";import{gzip as Jfe}from"zlib";import{promisify as Xfe}from"util";function Qfe(e){return TA(wn(e),"browser")}function Zfe(e){return TA(Qfe(e),"screenshots")}function ege(){return new Date().toISOString().replace(/[:.]/g,"-")}function tge(){return qfe(3).toString("hex")}async function EA(e,t,n){if(t.length>mj)throw new Error(`writeScreenshotSidecar: buffer exceeds ${mj} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=Zfe(e);await zfe(r,{recursive:!0});let o=`${ege()}-${tge()}-${n}.png`,i=TA(r,o);await Yfe(i,t);let{size:s}=await Vfe(i);return{path:i,bytes:s}}var l8e,mj,fj=y(()=>{"use strict";H();By();l8e=Xfe(Jfe);mj=5*1024*1024});var hj={};lo(hj,{PlaywrightProvider:()=>RA});function gj(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var RA,yj=y(()=>{"use strict";tj();cj();dj();$y();pj();fj();RA=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Ny(t)}async open(t){let n=Dy(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await kA(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Uy(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Uy(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await vA(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${gj(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=await kA(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Uy(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await vA(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${gj(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await EA(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await EA(n,o,r);return i}catch{return null}}}});var ea={};lo(ea,{__resetBrowserRegistryForTests:()=>sge,browserProviderActive:()=>oge,closeBrowserProvider:()=>xA,getBrowserProvider:()=>rge,peekBrowserProvider:()=>ige});function bj(){Promise.resolve(xA()).then(()=>{process.exit(130)})}function Sj(){Promise.resolve(xA()).then(()=>{process.exit(143)})}function wj(){Br=null}function nge(){jy||(process.on("SIGINT",bj),process.on("SIGTERM",Sj),process.on("exit",wj),jy=!0)}function vj(){jy&&(process.removeListener("SIGINT",bj),process.removeListener("SIGTERM",Sj),process.removeListener("exit",wj),jy=!1)}async function rge(e){return Br!==null?Br:(Zs!==null||(Zs=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(yj(),hj)),n=XU(e),r=new t(n);return nge(),Br=r,Zs=null,r})()),Zs)}async function xA(){if(Br===null)return;let e=Br;Br=null,Zs=null,vj(),await e.shutdown()}function oge(){return Br!==null}function ige(){return Br}function sge(){Br=null,Zs=null,vj()}var Br,Zs,jy,ta=y(()=>{"use strict";$y();Br=null,Zs=null,jy=!1});async function kj(e,t){try{return await BU(e,t)}catch(n){return F("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function pge(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(ta(),ea));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function Tj(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??pge,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await Oy(n,e,{headers:dge,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(uge.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(cge.test(p)&&!lge.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await kj(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof lr||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=mA({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Hp(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Hp(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Hp(d.finalUrl,o);let p=await kj(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=mA({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof lr)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var lge,cge,uge,dge,Ej=y(()=>{"use strict";UU();fA();bA();ue();lge=/(text\/html|application\/xhtml\+xml)/i,cge=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,uge=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,dge={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function gge(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(mge,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),fge),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ae(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function Rj(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?gge({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function xj(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
380
|
+
${Un(e,{headless:t,latched:n})}`,{cause:e})}var ZU,Tfe,Efe,QU,xfe,Fy=y(()=>{"use strict";ZU=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],Tfe="pnpm exec playwright install chromium",Efe=4;xfe="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Qs from"node:fs";import Ly from"node:path";import{randomBytes as Afe}from"node:crypto";import{chromium as Cfe}from"playwright";function _fe(){try{return"5.147.2"}catch{}try{let e=Ly.resolve(import.meta.dirname,"../../../package.json"),t=Qs.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var Ife,Ny,tj=y(()=>{"use strict";Fy();H();ue();Ife=_fe(),Ny=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=Cfe.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Kp(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${Ife}`}}loadStorageState(t){let n=jd(t);try{if(!Qs.existsSync(n))return;let r=JSON.parse(Qs.readFileSync(n,"utf8"));return F("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){F("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=jd(t);if(!Qs.existsSync(r))return;let o=await n.storageState(),i=Ly.join(Ly.dirname(r),`.${Ly.basename(r)}.${process.pid}.${Afe(4).toString("hex")}.tmp`);Qs.writeFileSync(i,JSON.stringify(o),{mode:384}),Qs.chmodSync(i,384),Qs.renameSync(i,r),F("[browser/vault] saved session",{profile:t,file:r})}catch(r){F("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as Pfe}from"crypto";function nj(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&Mfe.test(e.label))}function rj(e){return Pfe("sha256").update(e,"utf8").digest("hex").slice(0,8)}function oj(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var Mfe,By=y(()=>{"use strict";Mfe=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as Ofe}from"node:crypto";function Dfe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function $fe(e,t,n){return`el_${Ofe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function Ffe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function ij(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function aj(e,t){let n=e.role??"",r=e.name??"";sj.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])aj(i,t)}async function Lfe(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},lj).catch(()=>[])}async function Nfe(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},lj).catch(()=>[])}function Bfe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Uy(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Bfe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=Lfe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,S=!1;d!==null?(b=[],aj(d,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await Nfe(e)).filter(D=>sj.has(D.role??"")));let w=new Map;for(let P of p){let D=ij(P.name),L=w.get(D);(!L||L.bbox.w===0&&P.bbox.w>0)&&w.set(D,P)}let k=b.map(P=>({ax:P,dom:w.get(ij(P.name??""))})),T=r?k:k.filter(P=>P.dom?P.dom.bbox.w>0||P.dom.bbox.h>0:!0);T.sort((P,D)=>{let L=P.dom?.bbox.y??0,U=D.dom?.bbox.y??0;if(L!==U)return L-U;let G=P.dom?.bbox.x??0,K=D.dom?.bbox.x??0;return G-K}),T.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=T.slice(0,n).map((P,D)=>{let L=P.ax.role??"generic",U=P.ax.name??"",G=$fe(L,U,D),K=P.dom?.bbox??{x:0,y:0,w:0,h:0},W=P.dom?.type??null,q=null;P.ax.value!==void 0&&P.ax.value!==null&&(q=String(P.ax.value)),P.ax.checked!==void 0&&(q=String(P.ax.checked)),nj({role:L,kind:W})&&(q="[redacted]");let M={disabled:P.ax.disabled??!1};P.ax.checked!==void 0&&(M.checked=P.ax.checked===!0||P.ax.checked==="mixed"),P.ax.selected!==void 0&&(M.selected=P.ax.selected),P.ax.expanded!==void 0&&(M.expanded=P.ax.expanded);let $;P.dom?.testId?$=`[data-testid="${P.dom.testId}"]`:P.dom?.id&&($=`#${P.dom.id}`);let j={id:G,role:L,label:Dfe(U),kind:W,value:q,state:M,bbox:K};return $!==void 0&&(j.selector=$),j}),I="idle";try{let P=await e.evaluate(()=>document.readyState);P==="loading"?I="loading":P==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=Ffe(f),x=`obs_${t.observationCounter.toString(36)}`,_=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:C,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:I,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:_}}var sj,lj,cj=y(()=>{"use strict";By();sj=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);lj="a[href], button, input, select, textarea, [role], [tabindex], label"});async function uj(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function wA(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>uj(e,i)))).filter(o=>o!==null)}async function Ufe(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function vA(e,t,n){switch(t.kind){case"element_id":return jfe(e,t,n);case"selector":return Hfe(e,t);case"semantic":return Wfe(e,t)}}async function jfe(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await wA(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Hfe(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await wA(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Wfe(e,t){return t.role!==void 0?Kfe(e,t.text,t.role):Gfe(e,t.text,t)}async function Kfe(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await wA(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function Gfe(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await Ufe(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let S=await uj(b.locator,b.index);if(S!==null){let w=`${S.role}:${S.label}:${h}`,k=0;for(let T=0;T<w.length;T++)k=k*31+w.charCodeAt(T)>>>0;f.push({...S,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var dj=y(()=>{"use strict"});async function kA(e,t,n,r){let o=e.url();if(o===n)return null;let i=Dy(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var pj=y(()=>{"use strict";$y()});import{randomBytes as qfe}from"crypto";import{mkdir as zfe,stat as Vfe,writeFile as Yfe}from"fs/promises";import{join as TA}from"path";import{gzip as Jfe}from"zlib";import{promisify as Xfe}from"util";function Qfe(e){return TA(wn(e),"browser")}function Zfe(e){return TA(Qfe(e),"screenshots")}function ege(){return new Date().toISOString().replace(/[:.]/g,"-")}function tge(){return qfe(3).toString("hex")}async function EA(e,t,n){if(t.length>mj)throw new Error(`writeScreenshotSidecar: buffer exceeds ${mj} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=Zfe(e);await zfe(r,{recursive:!0});let o=`${ege()}-${tge()}-${n}.png`,i=TA(r,o);await Yfe(i,t);let{size:s}=await Vfe(i);return{path:i,bytes:s}}var l8e,mj,fj=y(()=>{"use strict";H();By();l8e=Xfe(Jfe);mj=5*1024*1024});var hj={};lo(hj,{PlaywrightProvider:()=>RA});function gj(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var RA,yj=y(()=>{"use strict";tj();cj();dj();$y();pj();fj();RA=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Ny(t)}async open(t){let n=Dy(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await kA(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Uy(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Uy(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await vA(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${gj(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=await kA(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Uy(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await vA(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${gj(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await EA(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await EA(n,o,r);return i}catch{return null}}}});var ea={};lo(ea,{__resetBrowserRegistryForTests:()=>sge,browserProviderActive:()=>oge,closeBrowserProvider:()=>xA,getBrowserProvider:()=>rge,peekBrowserProvider:()=>ige});function bj(){Promise.resolve(xA()).then(()=>{process.exit(130)})}function Sj(){Promise.resolve(xA()).then(()=>{process.exit(143)})}function wj(){Br=null}function nge(){jy||(process.on("SIGINT",bj),process.on("SIGTERM",Sj),process.on("exit",wj),jy=!0)}function vj(){jy&&(process.removeListener("SIGINT",bj),process.removeListener("SIGTERM",Sj),process.removeListener("exit",wj),jy=!1)}async function rge(e){return Br!==null?Br:(Zs!==null||(Zs=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(yj(),hj)),n=XU(e),r=new t(n);return nge(),Br=r,Zs=null,r})()),Zs)}async function xA(){if(Br===null)return;let e=Br;Br=null,Zs=null,vj(),await e.shutdown()}function oge(){return Br!==null}function ige(){return Br}function sge(){Br=null,Zs=null,vj()}var Br,Zs,jy,ta=y(()=>{"use strict";$y();Br=null,Zs=null,jy=!1});async function kj(e,t){try{return await BU(e,t)}catch(n){return F("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function pge(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(ta(),ea));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function Tj(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??pge,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await Oy(n,e,{headers:dge,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(uge.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(cge.test(p)&&!lge.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await kj(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof lr||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=mA({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Hp(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Hp(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Hp(d.finalUrl,o);let p=await kj(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=mA({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof lr)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var lge,cge,uge,dge,Ej=y(()=>{"use strict";UU();fA();bA();ue();lge=/(text\/html|application\/xhtml\+xml)/i,cge=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,uge=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,dge={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function gge(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(mge,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),fge),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ae(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function Rj(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?gge({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function xj(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
381
381
|
|
|
382
382
|
(no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
383
383
|
`).trimEnd()}var mge,fge,Aj=y(()=>{"use strict";at();mge="https://api.exa.ai/search",fge=10});function Hy(e){if(e instanceof Error&&e.name==="TimeoutError")return"timeout";let t=e instanceof Error?e.message:String(e);return/Timeout\s+\d+\s*ms exceeded/i.test(t)?"timeout":void 0}var na=y(()=>{"use strict";Fy()});function vge(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,i;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};i=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(l.protocol!=="http:"&&l.protocol!=="https:")return{error:`Invalid input: protocol "${l.protocol}" not supported (http/https only)`};o=l.toString()}let s=hge;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};s=Math.min(t.timeout_ms,yge)}let a=bge;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,Sge)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function AA(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:go(e,t),truncated:!0}}function kge(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env,r=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{};return async(o,i)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=vge(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let d=i.reason;return{content:`web_scrape aborted: ${d instanceof Error?d.message:String(d??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(i.reason)},c,u=()=>{let d=a.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(i.addEventListener("abort",l,{once:!0}),c=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.url!==void 0){let p=await yA(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(s.mode==="raw"){let p;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await Oy(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:h instanceof lr?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await p.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=AA(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let p=await Tj(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=AA(jU(p.markdown,p.advisory),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(p instanceof lr)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),g=dn(p)&&!SA(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Wp()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let d=Rj({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let p=await d.search(s.query,{limit:wge,timeoutMs:s.timeoutMs,signal:a.signal}),f=AA(xj(s.query,p),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var hge,yge,bge,Sge,wge,Cj,_j=y(()=>{"use strict";Ej();Aj();bA();di();fA();na();hge=3e4,yge=12e4,bge=1e5,Sge=1e6,wge=10;Cj=kge()});import{existsSync as Pj,mkdirSync as Tge,readFileSync as Ege,renameSync as Rge,unlinkSync as xge,writeFileSync as Age}from"node:fs";import{dirname as Ij,join as Cge}from"node:path";import{randomBytes as _ge}from"node:crypto";function Rn(e){let t=e??mR();if(!Pj(t))return[];try{let n=Ege(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${t}: ${r}`),[]}}function yi(e,t){let n=t??mR();Tge(Ij(n),{recursive:!0});let r=Cge(Ij(n),`.schedules.json.${process.pid}.${_ge(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{Age(r,o,"utf-8"),Rge(r,n)}catch(i){try{Pj(r)&&xge(r)}catch{}throw i}}function Wy(e,t){let n=Rn(t),r=n.map(l=>l.id),o=Ige(e.name),i=Pge(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),yi(n,t),a}function Ky(e,t){let n=Rn(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(yi(o,t),!0)}function Gp(e,t){return Rn(t).find(n=>n.id===e)}function Ige(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function Pge(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Gy(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var qy=y(()=>{"use strict";H()});import{existsSync as Mge,readFileSync as Oge}from"node:fs";import{join as Dge}from"node:path";async function jn(e,t,n){let r,o;try{let i=Dge(Gg("default"),"port");if(!Mge(i))return{synced:!1,detail:"daemon-not-detected (no port file)"};let s=Oge(i,"utf-8").trim(),a=$ge(s);if(!a)return{synced:!1,detail:"daemon-not-detected (invalid port file)"};({host:r,port:o}=a)}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let i=r.includes(":")?`[${r}]`:r,s=await fetch(`http://${i}:${o}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return s.ok?{synced:!0,detail:"synced"}:e==="POST"&&s.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&s.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${s.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function $ge(e){let t=parseInt(e,10);if(String(t)===e&&!Number.isNaN(t))return t<1||t>65535?null:{host:"localhost",port:t};let n=e.lastIndexOf(":");if(n<1)return null;let r=e.slice(0,n),o=e.slice(n+1);if(!/^\d+$/.test(o))return null;let i=parseInt(o,10);return Number.isNaN(i)||i<1||i>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:i}}var bi,CA=y(()=>{"use strict";H();bi="Change saved to schedules.json, but a running daemon (if any) did not pick it up \u2014 it will apply on the next daemon (re)start."});import{existsSync as Fge}from"node:fs";import{readFile as Lge}from"node:fs/promises";var Mj,Oj,Dj,$j,Fj=y(()=>{"use strict";qy();H();CA();Mj=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let i=Wy({name:n.name,command:n.command,cron:n.cron,trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),s=i.enabled?await jn("POST","/tasks",{taskId:i.id,command:i.command,cron:i.cron,trigger:i.trigger,notifyOn:i.notifyOn,...i.notifyChat!==void 0?{notifyChat:i.notifyChat}:{}}):await jn("DELETE",`/tasks/${i.id}`);return{content:JSON.stringify({id:i.id,name:i.name,cron:i.cron,enabled:i.enabled,daemonSynced:s.synced,syncDetail:s.detail,...s.synced?{}:{syncNote:bi}})}},Oj=async(e,t)=>{let n=Rn();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},Dj=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,i=Tr();if(!Fge(i))return{content:JSON.stringify([])};let s;try{let c=await Lge(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
|
|
@@ -1580,26 +1580,26 @@ The instructions below come from this operator's configuration (AFK.md, afk.conf
|
|
|
1580
1580
|
Every turn must end in one externally identifiable terminal state. AFK users need inspectable artifacts, not ceremony. Write each bullet as a single sentence.
|
|
1581
1581
|
|
|
1582
1582
|
**Done**
|
|
1583
|
-
- What was done
|
|
1584
|
-
- Evidence
|
|
1585
|
-
- What changed
|
|
1586
|
-
-
|
|
1583
|
+
- What was done: <one-sentence summary>
|
|
1584
|
+
- Evidence: <durable location \u2014 file path, commit SHA, trace path, test output, or memory key; never transcript-only>
|
|
1585
|
+
- What changed: <world-state delta>
|
|
1586
|
+
- Deferred: <anything still pending, with why; or "none">
|
|
1587
1587
|
- If files were written or edited but no \`git commit\` ran, say so explicitly \u2014 name the uncommitted paths and why (e.g. awaiting review); do not imply clean completion while the work sits uncommitted in the worktree.
|
|
1588
1588
|
|
|
1589
1589
|
**Blocked**
|
|
1590
|
-
- What blocks
|
|
1591
|
-
- What must change to unblock
|
|
1592
|
-
- What has already been done
|
|
1590
|
+
- What blocks: <the blocker>
|
|
1591
|
+
- What must change to unblock: <the unblock condition>
|
|
1592
|
+
- What has already been done: <progress so far>
|
|
1593
1593
|
|
|
1594
1594
|
**Asking**
|
|
1595
|
-
-
|
|
1596
|
-
-
|
|
1597
|
-
-
|
|
1595
|
+
- Question: <one precise question>
|
|
1596
|
+
- Assumption it resolves: <what answering clarifies>
|
|
1597
|
+
- Once answered: <what you will do>
|
|
1598
1598
|
|
|
1599
1599
|
**Interrupted**
|
|
1600
|
-
- What you were doing
|
|
1601
|
-
- Where state was saved
|
|
1602
|
-
- What resumption requires
|
|
1600
|
+
- What you were doing: <the in-progress task>
|
|
1601
|
+
- Where state was saved: <location>
|
|
1602
|
+
- What resumption requires: <prerequisites>
|
|
1603
1603
|
|
|
1604
1604
|
Never end a turn mid-loop without one of these. The terminal-state heading must be the last block of the response, with no trailing prose after it.`,hAe=new Set(["repl","telegram"])});function bAe(){let e=v.AFK_TEXT_MEASURE?.trim();if(e===void 0||e==="")return SP;if(/^(full|off|none|0)$/i.test(e))return null;if(!/^\d+$/.test(e))return SP;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<yAe?SP:t}function $t(e){let t=bAe();return t===null?e:Math.min(e,t)}var SP,yAe,Vi=y(()=>{"use strict";N();SP=100,yAe=20});function rf(e,t){let n=e.trimEnd();if(!n.trim())return"";let r=Math.max(t*4,400),o=n.length>r?n.slice(-r):n,i=/[.!?](?=\s)|\n+/g,s=-1,a;for(;(a=i.exec(o))!==null;)s=a.index+a[0].length;let l=s>=0?o.slice(s):o;return l=l.replace(/\s+/g," ").trim(),l?(l.length>t&&(l=l.slice(0,Math.max(1,t-1))+"\u2026"),l):""}function pv(e,t){if(!(!e||!e.trim())&&!t.isTTY)for(let n of SAe(e))t.out.line(n)}function SAe(e){if(!e)return[];let t=m.dim("\u2502 "),n=" ",r=Math.max(1,$t(te()-n.length-2-2)),o=[];for(let i of e.split(`
|
|
1605
1605
|
`)){let s=le(i,r);for(let a of s.split(`
|
|
@@ -1636,34 +1636,34 @@ Status written to: ${Wd()}
|
|
|
1636
1636
|
`).length;for(let i=0;i<o;i++)n.push({logicalText:r,isHead:i===0})}return n}function Du(e,t,n){let r=Math.max(0,Math.min(n,e.length));if(!t||t.length<e.length)return e.slice(0,r);let o=[],i=0;for(;i<r;){if(!t[i]?.isHead){o.push(e[i]??""),i+=1;continue}let s=i+1;for(;s<e.length&&!t[s]?.isHead;)s+=1;if(s<=r)o.push(t[i].logicalText);else for(let a=i;a<r;a++)o.push(e[a]??"");i=s}return o}function WX(e,t,n){let r=Math.max(0,Math.min(t,n));if(!e||e.length<n)return r;if(r>=n)return n;for(let o=r;o>0;o--)if(e[o]?.isHead)return o;return 0}function $u(e,t,n,r){if(e.length===0)return"";let o=Math.max(1,t),i=Math.max(1,n),s=Math.max(1,i-o+1),a=p=>Math.max(1,Cr(p,r).split(`
|
|
1637
1637
|
`).length),l="",c=[],u=0,d=()=>{if(c.length===0)return;let p=Math.min(u,s);for(let f=0;f<p;f++)l+=`\x1B[${o+f};1H\x1B[2K`;l+=`\x1B[${o};1H`,l+=c.map(f=>`\x1B[2K${f}`).join(`\r
|
|
1638
1638
|
`),l+=`\x1B[${i};1H${`
|
|
1639
|
-
`.repeat(p)}`,c=[],u=0};for(let p of e){let f=a(p);u>0&&u+f>s&&d(),c.push(p),u+=f}return d(),l}function KX(e,t){let n=" \u{1F4A1} Tip: ",r=Math.max(8,t-J(n)-1),o=J(e)>r?ie(e,Math.max(0,r-1),"")+"\u2026":e;return m.dim(n+o)}var nM,Vn=y(()=>{"use strict";B();Ye();ce();nM=2e3});var Jv,GX=y(()=>{"use strict";B();$X();UX();jX();Vn();Jv=class{state=null;interval=null;captureMode;onTick;goblin;workVerb;constructor(t){this.captureMode=t.captureMode,this.onTick=t.onTick,this.goblin=t.goblin??!1,this.workVerb=t.workVerb}pickVerb(){try{let t=this.workVerb?.();if(t)return t}catch{}return this.goblin?DX():OX()}set(t){if(!t.enabled){this.interval&&(clearInterval(this.interval),this.interval=null),this.state&&(this.state=null,this.onTick());return}if(this.captureMode||this.state)return;let n=t.rotateVerbEveryMs??3500,r=Date.now();this.state={frameIndex:0,verb:this.pickVerb(),nextVerbRotateAt:r+n,startedAt:r,tipPool:NX(),currentTip:null},this.interval=setInterval(()=>this.tick(n),80),this.onTick()}dispose(){this.interval&&(clearInterval(this.interval),this.interval=null),this.state=null}renderSpinnerRow(){return this.state?(this.goblin?m.goblin:m.meta)(`${tM[this.state.frameIndex]} ${this.state.verb}...`)+Ba(this.state.startedAt):null}renderTipRow(t){return this.state?.currentTip?KX(this.state.currentTip.text,t):null}tick(t){if(!this.state)return;this.state.frameIndex=(this.state.frameIndex+1)%tM.length;let n=Date.now(),r=(()=>{try{return this.workVerb?.()}catch{return}})(),o=r!==void 0&&r!==this.state.verb;(n>=this.state.nextVerbRotateAt||o)&&(this.state.verb=this.pickVerb(),this.state.nextVerbRotateAt=n+t),this.state.currentTip=BX(this.state.tipPool,{startedAt:this.state.startedAt,now:n}),this.onTick()}}});function qX(e){if(!(!e||!e.trim()))return U_e[fr(e)]}function zX(e,t,n){if(e.type!=="chunk"||!e.chunk)return!1;let r=e.chunk;if(!r.toolUseId)return!1;if(r.type==="tool_use_detail")t.start(r.toolUseId,r.toolName??"");else if(r.type==="tool_result")t.finish(r.toolUseId);else return!1;return n?.setActiveToolName?.(t.current()),!0}var U_e,Xv,Qv=y(()=>{"use strict";da();U_e={read:"Reading",write:"Editing",shell:"Running",subagent:"Delegating",skill:"Orchestrating",dag:"Orchestrating",mcp:"Calling",web:"Fetching",browser:"Browsing",planning:"Planning",schedule:"Scheduling",other:"Working"};Xv=class{inFlight=new Map;start(t,n){this.inFlight.delete(t),this.inFlight.set(t,n)}finish(t){this.inFlight.delete(t)}current(){let t;for(let n of this.inFlight.values())t=n;return t}reset(){this.inFlight.clear()}}});var Zv,VX=y(()=>{"use strict";Zv=class{interval=null;visiblePhase=!0;enabled;captureMode;intervalMs;onTick;constructor(t){this.enabled=t.enabled,this.captureMode=t.captureMode,this.intervalMs=t.intervalMs,this.onTick=t.onTick}get visible(){return this.enabled?this.visiblePhase:!0}start(){!this.enabled||this.captureMode||this.interval||(this.visiblePhase=!0,this.schedule())}resetVisible(){if(!this.enabled||this.captureMode||!this.interval)return!1;let t=!this.visiblePhase;return this.visiblePhase=!0,clearInterval(this.interval),this.schedule(),t}stop(){this.interval&&(clearInterval(this.interval),this.interval=null),this.visiblePhase=!0}schedule(){let t=setInterval(()=>{this.visiblePhase=!this.visiblePhase,this.onTick()},this.intervalMs);t.unref?.(),this.interval=t}}});import{randomBytes as j_e}from"node:crypto";function G_e(e,t){let n=t.match(/\n/g),r=n?n.length:0;return r>0?`[Pasted text #${e} +${r+1} lines]`:`[Pasted text #${e} +${t.length} chars]`}function ek(e,t){return e.pasteRegistry.size===0?t:t.replace(K_e,(n,r)=>e.pasteRegistry.get(r)??n)}function YX(e){return{text:ek(e,e.input.buffer),queued:e.queued}}function JX(e){let t=e.pasteStartCursor,n=e.input.cursor;if(n<=t)return;let o=e.input.buffer.slice(t,n).replace(/\x1b\[200~/g,"").replace(/\x1b\[201~/g,""),i=o.match(/\n/g),s=i?i.length:0,a=o.length;if(s<H_e&&a<W_e)return;let l=j_e(4).toString("hex");e.pasteRegistry.set(l,o);let c=G_e(l,o);e.input=z.replaceRange(e.input,{start:t,end:n},c)}function XX(e,t){if(e.pasteRegistry.size===0)return null;let n=e.input.buffer,r=e.input.cursor;if(t==="backward"){let l=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]$/.exec(n.slice(0,r));if(!l)return null;let c=r-l[0].length,u=l[1],d=z.replaceRange(e.input,{start:c,end:r},"");return e.pasteRegistry.delete(u),d}let o=/^\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/.exec(n.slice(r));if(!o)return null;let i=r+o[0].length,s=o[1],a=z.replaceRange(e.input,{start:r,end:i},"");return e.pasteRegistry.delete(s),a}var H_e,W_e,K_e,rM=y(()=>{"use strict";rn();H_e=5,W_e=1e3,K_e=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/g});function oM(e){let t=new Map;for(let n=0;n<e.length;n++){let r=e[n];if(!r)continue;ZX.lastIndex=0;let o;for(;(o=ZX.exec(r))!==null;){let i=o[1]?.toLowerCase();i!==void 0&&!t.has(i)&&t.set(i,n)}}return t}function
|
|
1640
|
-
`,n=r;continue}return t+=o,t}}var
|
|
1639
|
+
`.repeat(p)}`,c=[],u=0};for(let p of e){let f=a(p);u>0&&u+f>s&&d(),c.push(p),u+=f}return d(),l}function KX(e,t){let n=" \u{1F4A1} Tip: ",r=Math.max(8,t-J(n)-1),o=J(e)>r?ie(e,Math.max(0,r-1),"")+"\u2026":e;return m.dim(n+o)}var nM,Vn=y(()=>{"use strict";B();Ye();ce();nM=2e3});var Jv,GX=y(()=>{"use strict";B();$X();UX();jX();Vn();Jv=class{state=null;interval=null;captureMode;onTick;goblin;workVerb;constructor(t){this.captureMode=t.captureMode,this.onTick=t.onTick,this.goblin=t.goblin??!1,this.workVerb=t.workVerb}pickVerb(){try{let t=this.workVerb?.();if(t)return t}catch{}return this.goblin?DX():OX()}set(t){if(!t.enabled){this.interval&&(clearInterval(this.interval),this.interval=null),this.state&&(this.state=null,this.onTick());return}if(this.captureMode||this.state)return;let n=t.rotateVerbEveryMs??3500,r=Date.now();this.state={frameIndex:0,verb:this.pickVerb(),nextVerbRotateAt:r+n,startedAt:r,tipPool:NX(),currentTip:null},this.interval=setInterval(()=>this.tick(n),80),this.onTick()}dispose(){this.interval&&(clearInterval(this.interval),this.interval=null),this.state=null}renderSpinnerRow(){return this.state?(this.goblin?m.goblin:m.meta)(`${tM[this.state.frameIndex]} ${this.state.verb}...`)+Ba(this.state.startedAt):null}renderTipRow(t){return this.state?.currentTip?KX(this.state.currentTip.text,t):null}tick(t){if(!this.state)return;this.state.frameIndex=(this.state.frameIndex+1)%tM.length;let n=Date.now(),r=(()=>{try{return this.workVerb?.()}catch{return}})(),o=r!==void 0&&r!==this.state.verb;(n>=this.state.nextVerbRotateAt||o)&&(this.state.verb=this.pickVerb(),this.state.nextVerbRotateAt=n+t),this.state.currentTip=BX(this.state.tipPool,{startedAt:this.state.startedAt,now:n}),this.onTick()}}});function qX(e){if(!(!e||!e.trim()))return U_e[fr(e)]}function zX(e,t,n){if(e.type!=="chunk"||!e.chunk)return!1;let r=e.chunk;if(!r.toolUseId)return!1;if(r.type==="tool_use_detail")t.start(r.toolUseId,r.toolName??"");else if(r.type==="tool_result")t.finish(r.toolUseId);else return!1;return n?.setActiveToolName?.(t.current()),!0}var U_e,Xv,Qv=y(()=>{"use strict";da();U_e={read:"Reading",write:"Editing",shell:"Running",subagent:"Delegating",skill:"Orchestrating",dag:"Orchestrating",mcp:"Calling",web:"Fetching",browser:"Browsing",planning:"Planning",schedule:"Scheduling",other:"Working"};Xv=class{inFlight=new Map;start(t,n){this.inFlight.delete(t),this.inFlight.set(t,n)}finish(t){this.inFlight.delete(t)}current(){let t;for(let n of this.inFlight.values())t=n;return t}reset(){this.inFlight.clear()}}});var Zv,VX=y(()=>{"use strict";Zv=class{interval=null;visiblePhase=!0;enabled;captureMode;intervalMs;onTick;constructor(t){this.enabled=t.enabled,this.captureMode=t.captureMode,this.intervalMs=t.intervalMs,this.onTick=t.onTick}get visible(){return this.enabled?this.visiblePhase:!0}start(){!this.enabled||this.captureMode||this.interval||(this.visiblePhase=!0,this.schedule())}resetVisible(){if(!this.enabled||this.captureMode||!this.interval)return!1;let t=!this.visiblePhase;return this.visiblePhase=!0,clearInterval(this.interval),this.schedule(),t}stop(){this.interval&&(clearInterval(this.interval),this.interval=null),this.visiblePhase=!0}schedule(){let t=setInterval(()=>{this.visiblePhase=!this.visiblePhase,this.onTick()},this.intervalMs);t.unref?.(),this.interval=t}}});import{randomBytes as j_e}from"node:crypto";function G_e(e,t){let n=t.match(/\n/g),r=n?n.length:0;return r>0?`[Pasted text #${e} +${r+1} lines]`:`[Pasted text #${e} +${t.length} chars]`}function ek(e,t){return e.pasteRegistry.size===0?t:t.replace(K_e,(n,r)=>e.pasteRegistry.get(r)??n)}function YX(e){return{text:ek(e,e.input.buffer),queued:e.queued}}function JX(e){let t=e.pasteStartCursor,n=e.input.cursor;if(n<=t)return;let o=e.input.buffer.slice(t,n).replace(/\x1b\[200~/g,"").replace(/\x1b\[201~/g,""),i=o.match(/\n/g),s=i?i.length:0,a=o.length;if(s<H_e&&a<W_e)return;let l=j_e(4).toString("hex");e.pasteRegistry.set(l,o);let c=G_e(l,o);e.input=z.replaceRange(e.input,{start:t,end:n},c)}function XX(e,t){if(e.pasteRegistry.size===0)return null;let n=e.input.buffer,r=e.input.cursor;if(t==="backward"){let l=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]$/.exec(n.slice(0,r));if(!l)return null;let c=r-l[0].length,u=l[1],d=z.replaceRange(e.input,{start:c,end:r},"");return e.pasteRegistry.delete(u),d}let o=/^\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/.exec(n.slice(r));if(!o)return null;let i=r+o[0].length,s=o[1],a=z.replaceRange(e.input,{start:r,end:i},"");return e.pasteRegistry.delete(s),a}var H_e,W_e,K_e,rM=y(()=>{"use strict";rn();H_e=5,W_e=1e3,K_e=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/g});function oM(e){let t=new Map;for(let n=0;n<e.length;n++){let r=e[n];if(!r)continue;ZX.lastIndex=0;let o;for(;(o=ZX.exec(r))!==null;){let i=o[1]?.toLowerCase();i!==void 0&&!t.has(i)&&t.set(i,n)}}return t}function e5(e,t){let n=e.startsWith("/")?e.toLowerCase():`/${e.toLowerCase()}`;return t.get(n)??q_e}function iM(e,t,n){let r=e5(e,n),o=e5(t,n);return r!==o?r-o:e.localeCompare(t)}function t5(e,t){let n=oM(t);return e.slice().sort((r,o)=>iM(r,o,n))}var ZX,q_e,sM=y(()=>{"use strict";ZX=/(?:^|\s)(\/[A-Za-z][A-Za-z0-9_:-]*)/g,q_e=Number.POSITIVE_INFINITY});function aM(e,t){if(e.length===0)return!0;let n=0;for(let r=0;r<t.length&&n<e.length;r++)t[r]===e[n]&&(n+=1);return n===e.length}function n5(e,t,n=[]){let r=t.toLowerCase(),o=e.map(u=>({key:u.name.replace(/^\//,"").toLowerCase(),cand:{value:u.name,...u.summary!==void 0?{summary:u.summary}:{},...u.hint!==void 0?{hint:u.hint}:{}}})),i=o.filter(u=>u.key.startsWith(r)),s=new Set(i.map(u=>u.cand.value)),a=r.length===0?[]:o.filter(u=>!s.has(u.cand.value)&&aM(r,u.key)),l=oM(n),c=(u,d)=>iM(u.cand.value,d.cand.value,l);return i.sort(c),a.sort(c),[...i,...a].map(u=>u.cand).slice(0,z_e)}var z_e,r5=y(()=>{"use strict";sM();z_e=20});function tk(e,t){let n=e?.shift===!0||t==="\x1B[13;2u",r=e?.meta===!0;return n||r}function Fu(e){return e.endsWith("\\")}var nk=y(()=>{"use strict"});import{join as o5}from"path";import{homedir as V_e}from"os";function Ua(e,t,n=V_e()){if(e==="~"||e.startsWith("~/")){let l=e==="~"?"":e.slice(2),c=l.lastIndexOf("/"),u=c===-1?"":l.slice(0,c),d=c===-1?l:l.slice(c+1),p=u?o5(n,u):n,f=u?`~/${u}/`:"~/";return{scanDir:p,leafPrefix:d,displayPrefix:f}}if(e.startsWith("/")){let l=e.lastIndexOf("/"),c=e.slice(0,l+1)||"/",u=e.slice(l+1);return{scanDir:c,leafPrefix:u,displayPrefix:c}}let r=e.lastIndexOf("/"),o=r===-1?"":e.slice(0,r),i=r===-1?e:e.slice(r+1),s=o?o5(t,o):t,a=o?`${o}/`:"";return{scanDir:s,leafPrefix:i,displayPrefix:a}}async function s5(e){let t="",n=e.promptFn(),r=e.continuationPrompt??" \u203A ";for(;;){e.rl.setPrompt(n),e.rl.prompt();let o=await new Promise(i=>{e.rl.once("line",s=>i(s))});if(Fu(o)){t+=o.slice(0,-1)+`
|
|
1640
|
+
`,n=r;continue}return t+=o,t}}var i5,rk=y(()=>{"use strict";Ft();nk();i5=50});var l5={};lo(l5,{FILE_SCAN_TTL_MS:()=>lM,__fileScanCacheSize:()=>X_e,buildFileCandidates:()=>bf,buildSlashUniverse:()=>a5,detectTrigger:()=>Nu,filterFileCandidates:()=>pM,filterFileCandidatesAsync:()=>dM,filterFileCandidatesCached:()=>uM,filterFlagCandidates:()=>Bu,filterSlashCandidates:()=>Sf,invalidateFileScanCache:()=>cM});import{readdirSync as Y_e,promises as J_e}from"fs";function Nu(e,t){let n=e.slice(0,t),r=/(?:^|(?<=\s))\/[A-Za-z_-]*$/.exec(n);if(r)return{kind:"slash",query:r[0].slice(1)};let o=n.split(/\s+/),i=o[o.length-1]??"";if(i.startsWith("@")&&/^@[^\s]*$/.test(i))return{kind:"file",query:i.slice(1)};let s=/^\/([A-Za-z][A-Za-z0-9_:-]*)\s+(?:.*\s)?--([a-z0-9-]*)$/.exec(n);if(s){let a=s[1],l=s[2],c=Wv(`/${a}`);if(c?.flags&&c.flags.length>0)return{kind:"flag",command:a,query:l}}return null}function Sf(e,t=[]){return n5(a5(),e,t)}function a5(){let e=br();return[...e.map(t=>({name:t.name,summary:t.summary,...t.hint?{hint:t.hint}:{}})),...Mu().map(t=>{let n=e.find(r=>r.name===t.canonical);return{name:t.alias,summary:t.summary,...n?.hint?{hint:n.hint}:{}}})]}function cM(){Lu.clear()}function X_e(){return Lu.size}function bf(e,t,n=process.cwd(),r){let{leafPrefix:o,displayPrefix:i}=Ua(t,n,r),s=new Map,a=[],l=[];for(let u of e)u.name.startsWith(".")&&!o.startsWith(".")||(s.set(u.name,u.isDirectory()),u.name.startsWith(o)?a.push(u.name):o.length>0&&aM(o.toLowerCase(),u.name.toLowerCase())&&l.push(u.name));return a.sort(),l.sort(),[...a,...l].slice(0,i5).map(u=>({value:"@"+i+u+(s.get(u)?"/":"")}))}function uM(e,t=process.cwd(),n){let{scanDir:r}=Ua(e,t,n),o=Lu.get(r);return!o||Date.now()-o.at>lM?null:bf(o.entries,e,t,n)}async function dM(e,t=process.cwd(),n){let{scanDir:r}=Ua(e,t,n),o=Lu.get(r);if(o&&Date.now()-o.at<=lM)return bf(o.entries,e,t,n);try{let i=await J_e.readdir(r,{withFileTypes:!0});return Lu.set(r,{entries:i,at:Date.now()}),bf(i,e,t,n)}catch{return[]}}function pM(e,t=process.cwd(),n){let{scanDir:r}=Ua(e,t,n);try{let o=Y_e(r,{withFileTypes:!0});return Lu.set(r,{entries:o,at:Date.now()}),bf(o,e,t,n)}catch{return[]}}function Bu(e,t){let n=Wv(`/${e}`);if(!n?.flags||n.flags.length===0)return[];let r=t.startsWith("--")?t.slice(2):t;return n.flags.filter(i=>(i.startsWith("--")?i.slice(2):i).startsWith(r)).map(i=>({value:i})).sort((i,s)=>i.value.localeCompare(s.value)).slice(0,20)}var Lu,lM,wf=y(()=>{"use strict";Ft();r5();rk();Lu=new Map,lM=2e3});function vf(e,t){e.candidates=t,e.dropdownOpen=t.length>0,e.selectedIndex>=e.candidates.length&&(e.selectedIndex=Math.max(0,e.candidates.length-1)),e.viewportStart>e.selectedIndex&&(e.viewportStart=e.selectedIndex),e.selectedIndex>=e.viewportStart+ja&&(e.viewportStart=e.selectedIndex-ja+1)}function kf(e){let t=e.autocompleteState;if(!t)return;t.trigger=Nu(e.input.buffer,e.input.cursor);let n=`${e.input.cursor}:${e.input.buffer}`;t.suppressedSignature!==null&&t.suppressedSignature!==n&&(t.suppressedSignature=null),t.trigger&&t.suppressedSignature===null?t.trigger.kind==="slash"?vf(t,Sf(t.trigger.query,e.history?.getEntries?.()??[]).slice(0,12)):t.trigger.kind==="file"?Q_e(e,t,t.trigger.query):vf(t,Bu(t.trigger.command,t.trigger.query)):vf(t,[])}function Q_e(e,t,n){let r=uM(n);if(r!==null){vf(t,r);return}let o=n;dM(n).then(i=>{let s=t.trigger;s?.kind==="file"&&s.query===o&&t.suppressedSignature===null&&(vf(t,i),e.repaint())}).catch(()=>{})}function c5(e){let t=e.autocompleteState;if(!t?.dropdownOpen||t.candidates.length===0)return!1;let n=t.candidates[t.selectedIndex];if(!n)return!1;let r=e.input.buffer.slice(0,e.input.cursor),o=e.input.buffer.slice(e.input.cursor),i,s;if(t.trigger?.kind==="slash"){let l=/\/[A-Za-z_-]*$/.exec(r);i=l?r.length-l[0].length:e.input.cursor,s=n.value+(o.startsWith(" ")?"":" ")}else if(t.trigger?.kind==="flag"){let l=/--[a-z0-9-]*$/.exec(r);i=l?r.length-l[0].length:e.input.cursor,s=n.value+(o.startsWith(" ")?"":" ")}else{let l=r.search(/[^\s]*$/);i=l>=0?l:e.input.cursor,s=n.value}let a=z.replaceRange(e.input,{start:i,end:e.input.cursor},s);return a===e.input?!1:(e.input=a,cM(),t.dropdownOpen=!1,t.candidates=[],t.viewportStart=0,t.selectedIndex=0,kf(e),e.repaint(),!0)}var ja,Tf=y(()=>{"use strict";rn();wf();ja=6});function ok(e,t){if(e.length===0)return null;let n=t.getDropdownTopCandidate(e);if(n!==null&&n.startsWith(e)&&n.length>e.length)return n;let r=t.getHistory();for(let i of r)if(!(t.lastSubmitted!==void 0&&i===t.lastSubmitted)&&i.startsWith(e)&&i.length>e.length)return i;let o=/\s+\/([A-Za-z][A-Za-z0-9_:-]*)$/.exec(e);if(o){let s="/"+o[1],a=br().map(d=>d.name),l=Mu().map(d=>d.alias),c=[...a,...l],u=t5(c.filter(d=>d.startsWith(s)),t.getHistory())[0];if(u){let d=e.length-s.length;return e.slice(0,d)+u}}return null}var mM=y(()=>{"use strict";Ft();sM()});function ik(e){let t=v.AFK_SUGGEST_MODEL;if(t)return t;let n=oe(e.model);return n==="anthropic-direct"||n==="anthropic"?v.AFK_COMPACT_MODEL??"haiku":e.model}function u5(e=Vw){let t=new Map;return{resolve(n,r){let o=oe(n,r),i=t.get(o);return i===void 0&&(i=e(n,r),t.set(o,i)),i},closeAll(){for(let n of t.values())try{n.close?.()}catch{}t.clear()}}}var fM=y(()=>{"use strict";je();N()});function gM(e){if(e.trim().length===0)return"";let t=/\n\*\*(?:Done|Blocked|Asking|Interrupted)\*\*\s*\n/gi,n,r=null;for(;(n=t.exec(e))!==null;)r=n;return r?e.slice(r.index).trim().slice(0,600):e.length<=600?e.trim():e.slice(-600).trim()}function d5(e){let t=e.getUserArc?.();if(!t||t.length===0)return"";let n=t.slice(-8),r=0,o=[];for(let i=n.length-1;i>=0;i--){let s=n[i],a=s.length>80?s.slice(0,80)+"\u2026":s;if(r+a.length>400)break;o.push(a),r+=a.length}return o.reverse(),o.join(" \u2192 ")}var hM=y(()=>{"use strict"});import{basename as eIe}from"node:path";function oIe(){return`You suggest the single next thing a developer would type at their terminal agent prompt. You are given the session arc (what the user has been doing), their last request, and the outcome (what the agent did). Infer the most natural next step from the outcome \u2014 what would a developer typically say or tell the agent to do in this situation? Reply with ONE short imperative instruction and nothing else. No quotes, no markdown, no preamble, no trailing punctuation. Keep it under ${m5} characters. If nothing useful follows from the context, reply with an empty string.`}function iIe(e){let n=[`cwd: ${eIe(e.cwd)||e.cwd}`],r=d5(e);r.length>0&&n.push(`session so far: ${r}`);let o=e.getLastAssistantResponse?.();if(o!==void 0&&o.length>0){let i=e.getUserArc?.(),s=i?.[i.length-1];if(s){let l=s.length>p5?s.slice(0,p5)+"\u2026":s;n.push(`last request: ${l}`)}let a=gM(o);a.length>0&&n.push(`outcome: ${a}`)}else{let i=e.getRecentCommands().slice(0,nIe),s=e.getTranscriptTail();i.length>0&&n.push(`recent commands: ${i.join(" | ")}`),s.length>0&&n.push(`what just happened: ${s.slice(0,tIe)}`)}return n.push("Suggest the next thing to type:"),_r(n.join(`
|
|
1641
1641
|
`))}function sIe(e){return e.getTranscriptTail().trim().length>0}function aIe(e,t){let n=t.getTranscriptTail();if(n.trim().length===0)return!1;let r=n.split(`
|
|
1642
|
-
`);for(let o=0;o<r.length;o++){let i=r[o];if(i.startsWith("user: "))return i.slice(6).trim().toLowerCase()===e.trim().toLowerCase()}return!1}function lIe(e){if(e.length===0||e!==e.trimStart()||e.trim().length===0||e.length>
|
|
1643
|
-
`))}function gIe(e,t){let n=t.trim();return n.startsWith(e)&&n.length>e.length}function
|
|
1642
|
+
`);for(let o=0;o<r.length;o++){let i=r[o];if(i.startsWith("user: "))return i.slice(6).trim().toLowerCase()===e.trim().toLowerCase()}return!1}function lIe(e){if(e.length===0||e!==e.trimStart()||e.trim().length===0||e.length>m5||/[\r\n\u2028\u2029]/.test(e))return!1;let t=e.trim().toLowerCase();for(let n of rIe)if(t.startsWith(n))return!1;return!0}function cIe(e){let t=e.trim();if(t.length>=2){let n=t[0],r=t[t.length-1];(n==='"'&&r==='"'||n==="'"&&r==="'")&&(t=t.slice(1,-1).trim())}return t.endsWith(".")&&!t.endsWith("..")&&(t=t.slice(0,-1).trimEnd()),lIe(t)?t:null}async function f5(e,t){if(!e.llmEnabled()||e.promptSuggestEnabled?.()!==!0||!sIe(e))return null;let n=new AbortController;t.onController(n);let r=setTimeout(()=>n.abort(),t.timeoutMs),o=new Promise(i=>{n.signal.aborted?i(null):n.signal.addEventListener("abort",()=>i(null),{once:!0})});try{let i=t.resolveComplete(t.model);if(i===null)return null;let s=await Promise.race([i({system:oIe(),user:iIe(e),model:t.model,maxTokens:48,signal:n.signal,apiKey:e.apiKey,baseUrl:e.baseUrl}).then(c=>({ok:!0,raw:c})),o.then(()=>({ok:!1}))]);if(!s.ok)return null;let a=cIe(s.raw);if(a===null||aIe(a,e))return null;let l=t.scrub(a).trim();return l.length>0?l:null}catch(i){return t.onError?.(i),null}finally{clearTimeout(r),t.onController(null)}}var m5,tIe,p5,nIe,rIe,g5=y(()=>{"use strict";Cs();hM();hM();m5=120,tIe=600,p5=200,nIe=5,rIe=["i cannot","i can't","i am unable","i'm unable","sorry","as an ai","there is no","there isn't","no suggestion","none","n/a","unable to"]});function h5(e){let t=null,n=null,r=0;function o(){n!==null&&(n.abort(),n=null)}return{async prime(i){o();let s=++r;t=null;let a=await f5(i,{model:e.pickModel(i),timeoutMs:e.timeoutMs,scrub:e.scrub,...e.onError?{onError:e.onError}:{},onController:l=>{s===r&&(n=l)},resolveComplete:l=>e.resolveComplete(l,i)});s===r&&(t=a)},peek(){return t},clear(){r++,t=null},dispose(){r++,t=null,o()}}}var y5=y(()=>{"use strict";g5()});function Wo(e){return e.replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\u001b\][\s\S]*?(?:\u0007|\u001b\\)/g,"").replace(/\u001b[@-_]/g,"").replace(/[\u0000-\u001f\u007f-\u009f]/g,"").replace(/[\u2028\u2029\u202a-\u202e\u2066-\u2069]/g,"")}var sk=y(()=>{"use strict"});import{basename as uIe}from"node:path";function mIe(){return"Predict the single most likely completion of the user's in-progress REPL input. Return ONLY the completed line \u2014 no explanation, no preamble, no trailing newline."}function fIe(e,t){let n=uIe(t.cwd)||t.cwd,r=t.getRecentCommands().slice(0,5),o=t.getTranscriptTail(),i=[];return i.push(`cwd: ${n}`),r.length>0&&i.push(`recent: ${r.join(" | ")}`),o.length>0&&i.push(`context: ${o.slice(0,200)}`),i.push(`input: ${e}`),_r(i.join(`
|
|
1643
|
+
`))}function gIe(e,t){let n=t.trim();return n.startsWith(e)&&n.length>e.length}function w5(e){let t=null,n=null,r=null,o=new Map;function i(l,c){if(o.size>=pIe&&!o.has(l)){let u=o.keys().next().value;u!==void 0&&o.delete(u)}o.set(l,c)}function s(){if(r!==null&&(r.abort(),r=null),t!==null&&(clearTimeout(t),t=null,n!==null)){let l=n;n=null,l(null)}}async function a(l,c,u,d){let p=new AbortController;r=p;let f=setTimeout(()=>p.abort(),e.timeoutMs),g=new Promise(h=>{p.signal.aborted?h(null):p.signal.addEventListener("abort",()=>h(null),{once:!0})});try{let h=e.pickModel(u),b=e.resolveComplete(h,u);if(b===null){i(c,null),d(null);return}let S=await Promise.race([b({system:mIe(),user:fIe(l,u),model:h,maxTokens:24,signal:p.signal,apiKey:u.apiKey,baseUrl:u.baseUrl}).then(T=>({ok:!0,raw:T})),g.then(()=>({ok:!1}))]);if(!S.ok){d(null);return}let w=Wo(S.raw).trim(),k=gIe(l,w)?w:null;i(c,k),d(k)}catch(h){e.onError?.(h),d(null)}finally{clearTimeout(f),r===p&&(r=null)}}return{async request(l,c){if(l.length<dIe)return null;let u=`${e.pickModel(c)}\0${l}`;return o.has(u)?o.get(u)??null:(s(),new Promise(d=>{n=d,t=setTimeout(()=>{t=null,n=null,a(l,u,c,d)},e.debounceMs)}))},cancel:s}}var dIe,b5,S5,pIe,v5=y(()=>{"use strict";Cs();sk();dIe=3,b5=250,S5=1500,pIe=500});function k5(e={}){let t=e.timeoutMs??S5,n=u5(e.resolveProviderFn);function r(l,c){if(e.completeFn)return e.completeFn;let u=c.baseUrl?{openaiBaseUrl:c.baseUrl}:void 0,d=n.resolve(l,u);return typeof d.complete!="function"?null:d.complete.bind(d)}let o=w5({pickModel:ik,resolveComplete:r,debounceMs:e.debounceMs??b5,timeoutMs:t,...e.onError?{onError:e.onError}:{}}),i=h5({pickModel:ik,resolveComplete:r,timeoutMs:t,scrub:Wo,...e.onError?{onError:e.onError}:{}});async function s(l,c){let u=ok(l,c);return u!==null?u:c.llmEnabled()?o.request(l,c):null}function a(){i.dispose(),o.cancel(),n.closeAll()}return{getDeterministicGhost:ok,getGhost:s,primePromptSuggestion:l=>i.prime(l),peekPromptSuggestion:()=>i.peek(),clearPromptSuggestion:()=>i.clear(),dispose:a}}var ak=y(()=>{"use strict";mM();fM();y5();sk();v5();sk();fM();mM()});function T5(e){let t=e.ghostEngine,n=e.ghostGetContext;!t||!n||e.input.buffer.length>0||(t.clearPromptSuggestion(),t.primePromptSuggestion(n()).then(()=>{e.input.buffer.length===0&&t.peekPromptSuggestion()!==null&&(yM(e),e.repaint())}).catch(()=>{}))}function E5(e){let t=e.ghostEngine;return!t||!((t.peekPromptSuggestion?.()??null)!==null)?!1:(t.clearPromptSuggestion?.(),e.activeGhost!==null&&e.input.buffer.length===0&&(e.activeGhost=null),!0)}function yM(e){if(!e.ghostEngine||!e.ghostGetContext)return;let t=e.input.buffer;e.activeGhost!==null&&!e.activeGhost.startsWith(t)&&(e.activeGhost=null);let n=e.ghostGetContext(),r=e.ghostEngine.getDeterministicGhost(t,n);if(r!==null){e.activeGhost=r;return}if(t.length===0){let s=e.ghostEngine.peekPromptSuggestion?.()??null;if(s!==null){e.activeGhost=s;return}}if(e.activeGhost=null,e.autocompleteState?.dropdownOpen)return;let i=t;e.ghostEngine.getGhost(t,n).then(s=>{s!==null&&e.input.buffer===i&&s.startsWith(i)&&s.length>i.length&&(e.activeGhost=s,e.repaint())}).catch(()=>{})}function R5(e){let t=e.activeGhost;if(t===null||e.autocompleteState?.dropdownOpen||e.input.cursor!==e.input.buffer.length||!t.startsWith(e.input.buffer)||t.length<=e.input.buffer.length)return!1;let r=e.input.buffer+Wo(t.slice(e.input.buffer.length)),o=z.seed(r);return e.input=o,e.activeGhost=null,e.ghostEngine?.clearPromptSuggestion?.(),kf(e),e.repaint(),!0}var x5=y(()=>{"use strict";rn();ak();Tf()});import yIe from"string-width";function A5(e,t){if(t<=0)return"";let n=0;for(let r=0;r<e.length;r++)if(n+=yIe(e[r]),n>t)return e.slice(0,r)+m.dim("\u2026");return e}function lk(e,t,n,r){let o=t?">":" ",i=e.value,s=e.summary?` ${e.summary}`:"",a=`${i}${s}`,l=A5(a,n-4),c=` ${o} ${l}`;return t?` ${m.brand(o)} ${m.bold(l)}`:m.meta(c)}function ck(e,t){if(!e)return null;let n=e.trim();if(n.length===0)return null;let r=A5(n,Math.max(0,t-7));return r.length===0?null:m.dim(` \u21B3 ${r}`)}var bM=y(()=>{"use strict";B()});function C5(e){let t=e.pendingSubmissions.length,n=t>0?" "+m.dim(t===1?"[queued]":`[${t} queued]`):"",r=e.input.buffer.slice(0,e.input.cursor),o=Rs(e.input.buffer,e.input.cursor),i=e.input.cursor>=e.input.buffer.length,s=i?"\u258F":e.input.buffer.slice(e.input.cursor,o),a=e.input.cursor<e.input.buffer.length?e.input.buffer.slice(o):"",l=e.formatInputBuffer?.(r)??r,c=e.formatInputBuffer?.(a)??a,u=e.caretVisible!==!1,d;u?d=i?m.caret(s):m.caret.inverse(s):i?d=" ":d=e.formatInputBuffer?.(s)??s;let p=e.autocompleteState,f="",g=e.activeGhost;if(g!==null&&!n&&e.input.cursor===e.input.buffer.length&&g.startsWith(e.input.buffer)&&g.length>e.input.buffer.length&&!p?.dropdownOpen){let h=Wo(g.slice(e.input.buffer.length)),b=e.stdout.columns??80,S=J(Me(e.promptTextFn())),w=J(Me(r))+1,k=Math.max(0,b-S-w-1),T=ie(h,k,"");T.length>0&&(f=m.dim(T))}return e.promptTextFn()+l+d+c+f+n}function _5(e){let t=e.autocompleteState;if(!t?.dropdownOpen)return[];let n=e.stdout.columns||80;if(n<=40)return[];let r=Math.min(n-4,60),o=Math.min(t.candidates.length-t.viewportStart,ja),i=[];for(let s=0;s<o;s++){let a=t.viewportStart+s,l=t.candidates[a];if(!l)continue;let c=lk(l,a===t.selectedIndex,r,t.trigger?.kind),u=J(Me(c)),d=Math.max(0,Math.ceil(u/n)-1);i.push(c);for(let p=0;p<d;p++)i.push("")}return i.reverse()}function I5(e){let t=e.autocompleteState;if(!t?.dropdownOpen)return null;let n=e.stdout.columns||80;if(n<=40)return null;let r=t.candidates[t.selectedIndex];if(!r)return null;let o=Math.min(n-4,80);return ck(r.hint,o)??""}var P5=y(()=>{"use strict";ce();bM();ak();B();Tf()});function SIe(e,t,n,r){if(e.length===0)return{rows:[],paintedRows:0,meta:[]};let o=Math.max(0,Math.min(t,e.length)),i=e.length-o,s=(c,u)=>{let d=[],p=[];for(let f=c;f<u;f++){let g=e[f]??"",h=r?.[f]?.logicalText??g,b=r?.[f]?.isHead??!0;Cr(g,n).split(`
|
|
1644
1644
|
`).forEach((w,k)=>{d.push(w),p.push({logicalText:h,isHead:k===0&&b})})}return{rows:d,meta:p}},a=s(0,i),l=s(i,e.length);return{rows:[...a.rows,...l.rows],paintedRows:l.rows.length,meta:[...a.meta,...l.meta]}}function uk(e,t){if(e.committedBand.length===0){e.bandReflowCache=null;return}let n=e.bandReflowCache;if(n!==null&&n.band===e.committedBand&&n.paintedRows===e.committedBandPaintedRows&&n.width===t)return;let{rows:r,paintedRows:o,meta:i}=SIe(e.committedBand,e.committedBandPaintedRows,t,e.committedBandMeta);e.committedBand=r,e.committedBandMeta=i,e.committedBandPaintedRows=o,e.bandReflowCache={band:r,paintedRows:o,width:t}}function dk(e,t){let n=()=>{try{e.write(vIe)}catch{}};try{e.write(wIe)}catch{return}try{t()}finally{n()}}var wIe,vIe,Ef=y(()=>{"use strict";Ye();wIe="\x1B[?7l",vIe="\x1B[?7h"});function EIe(e,t){if(J(e)<=t)return e;let n=TIe.exec(e),r=n?.[1]??"",o=n?.[2]??"",i=t-o.length;if(i<kIe)return Cr(e,t);let s=r+e.slice(n?.[0]?.length??0);return le(s,i,{breakLongWords:!0}).split(`
|
|
1645
1645
|
`).map(l=>{let c=o+l;return J(c)>t?Cr(c,t):c}).join(`
|
|
1646
1646
|
`)}function RIe(e,t){if(!Number.isFinite(t)||t<=0)return e;let n=Math.floor(t);return e.replaceAll(`\r
|
|
1647
1647
|
`,`
|
|
1648
1648
|
`).split(`
|
|
1649
1649
|
`).map(r=>EIe(r,n)).join(`
|
|
1650
|
-
`)}function Ko(e,t=process.stdout){return t.isTTY!==!0?e:RIe(e,te())}var kIe,TIe,Rf=y(()=>{"use strict";ce();ye();Ye();kIe=8,TIe=/^((?:\x1B\[[0-9;]*m)*)( *)/});function os(e,t){e.scrollRegion?e.scrollRegion.withFullScrollRegion(t):t()}var xf=y(()=>{"use strict"});function
|
|
1650
|
+
`)}function Ko(e,t=process.stdout){return t.isTTY!==!0?e:RIe(e,te())}var kIe,TIe,Rf=y(()=>{"use strict";ce();ye();Ye();kIe=8,TIe=/^((?:\x1B\[[0-9;]*m)*)( *)/});function os(e,t){e.scrollRegion?e.scrollRegion.withFullScrollRegion(t):t()}var xf=y(()=>{"use strict"});function M5(e,t){let r=(e.endsWith(`
|
|
1651
1651
|
`)?e.slice(0,-1):e).split(`
|
|
1652
1652
|
`),o=!1;for(;r.length>1&&r[r.length-1]==="";)r.pop(),o=!0;let i=r.flatMap(c=>Cr(c,t).split(`
|
|
1653
|
-
`)),s=Math.max(1,i.length),a=HX(r,t);return{logicalLines:r,hasTrailingSeparator:o,contentLines:i,contentMeta:a,contentLineCount:s,separatorMeta:{logicalText:"",isHead:!0}}}var
|
|
1653
|
+
`)),s=Math.max(1,i.length),a=HX(r,t);return{logicalLines:r,hasTrailingSeparator:o,contentLines:i,contentMeta:a,contentLineCount:s,separatorMeta:{logicalText:"",isHead:!0}}}var O5=y(()=>{"use strict";Ye();Vn()});function D5(e,t,n,r){let o=e.scrollRegion?.getExtraRows()??0,i=e.logUpdate?.topRow??0,s=e.bandGeometryStale?0:e.lastMeasuredFrameTop,a=e.committedBand.length>0&&e.committedBandBottomRow>0&&!e.bandGeometryStale?e.committedBandBottomRow+1:0,l=Math.max(i,s,a),c=l>1?l:Math.max(1,n-1-o),u=Math.max(e.anchorRow??1,1),d=l>1&&t<=c-u,p=d&&e.committedBand.length>0&&e.committedBandBottomRow>0?Math.max(c,e.committedBandBottomRow+1):c;return{rows:n,cols:r,extraRows:o,prevTopRow:l,frameTop:c,anchorFloor:u,fitsAboveFrame:d,phase1EffectiveFrameTop:p}}var $5=y(()=>{"use strict"});function F5(e){let{prevTopRow:t,frameTop:n,anchorFloor:r,anchorRow:o,lineCount:i,textLines:s,rows:a,extraRows:l,committedBand:c,committedBandBottomRow:u,committedBandPaintedRows:d,geometryStale:p}=e,f=t>1&&!p&&i<=n-r,g=Math.max(0,n-r),h=Math.max(1,a-1-l),b=Math.max(0,h-r),S=c.length>0&&o<=1&&(p||u===n-1),w=S?[...c,...s]:s,k=S&&c.length>d,T=w.length>g,E=k||!f&&b>0||T&&b>0;return{fitsAboveFrame:f,room:g,overflowTargetBottom:h,maxBandModel:b,overflowPriorContiguous:S,overflowRun:w,overflowHasPending:k,useBandHold:E}}var L5=y(()=>{"use strict"});function N5(e,t,n){let{fitsAboveFrame:r,phase1EffectiveFrameTop:o,anchorFloor:i,prevTopRow:s,frameTop:a,rows:l,extraRows:c}=n,{contentLines:u,contentMeta:d,contentLineCount:p,hasTrailingSeparator:f,separatorMeta:g}=t,h=Math.max(0,o-i),b=f&&r&&p<h,S=b?[...u,""]:u,w=b?[...d,g]:d,k=p+(b?1:0),T=f?[...u,""]:u,E=f?[...d,g]:d,R=T.length,{useBandHold:I,overflowRun:C,overflowPriorContiguous:x,maxBandModel:_}=F5({prevTopRow:s,frameTop:a,anchorFloor:i,anchorRow:e.anchorRow??1,lineCount:R,textLines:T,rows:l,extraRows:c,committedBand:e.committedBand,committedBandBottomRow:e.committedBandBottomRow,committedBandPaintedRows:e.committedBandPaintedRows,geometryStale:e.bandGeometryStale}),P=x?[...e.committedBandMeta,...E]:E,D=Math.max(0,C.length-_),L=WX(P,D,C.length);return{textLines:S,textMeta:w,lineCount:k,useBandHold:I,overflowRun:C,overflowRunMeta:P,archiveCount:L,rawGenuineOverflow:D,maxBandModel:_}}var B5=y(()=>{"use strict";L5();Vn()});function U5(e,t,n){let{fitsAboveFrame:r,anchorFloor:o,rows:i,cols:s}=t,{lineCount:a,textLines:l,useBandHold:c,overflowRun:u,overflowRunMeta:d,archiveCount:p}=n,f=t.phase1EffectiveFrameTop,g=Math.max(0,f-o),h=r?Math.max(0,e.committedBand.length+a-g):a,b=r?h:0;return e.debugLog("commitAbove:phase1",{lineCount:a,fitsAboveFrame:r,bandOverflow:h,rawGenuineOverflow:n.rawGenuineOverflow,archiveCount:p,maxBandModel:n.maxBandModel,overflowRunLen:u.length}),os(e,()=>{if(c){if(p>0){let S=Du(u,d,p),w=$u(S,o,i,s);w.length>0&&e.stdout.write(w)}}else if(r)h>0&&e.stdout.write(`\x1B[${i};1H${`
|
|
1654
1654
|
`.repeat(h)}`);else{let S=l.map(w=>`\x1B[2K${w??""}`).join(`
|
|
1655
1655
|
`);e.stdout.write(`\x1B[${o};1H${S}\x1B[${i};1H${`
|
|
1656
|
-
`.repeat(a)}`)}}),b}var
|
|
1657
|
-
`)});return}let n=Math.max(1,e.stdout.rows??24),r=Math.max(1,e.stdout.columns??80);uk(e,r);let o=
|
|
1658
|
-
`.repeat(t)}`,o=()=>{try{e.stdout.write(r)}catch(i){e.debugLog("evict:error",{msg:i?.message??String(i)})}};e.scrollRegion!==void 0?e.scrollRegion.withFullScrollRegion(o):o()}var
|
|
1656
|
+
`.repeat(a)}`)}}),b}var j5=y(()=>{"use strict";xf();Vn()});function H5(e,t,n,r,o){let{overflowRun:i,overflowRunMeta:s,archiveCount:a}=n,l=i.slice(a),c=s.slice(a),u=Math.min(l.length,o),d=r-u,p="";for(let f=0;f<u;f++){let g=d+f;if(g>=r)break;p+=Mn(g,l[l.length-u+f])}p.length>0&&os(e,()=>{e.stdout.write(p)}),e.committedBand=l,e.committedBandMeta=c,e.committedBandBottomRow=r-1,e.committedBandTopRow=d,e.committedBandPaintedRows=u}function W5(e,t,n){let{rows:r,extraRows:o,anchorFloor:i}=t,{overflowRun:s,overflowRunMeta:a,archiveCount:l}=n,c=s.slice(l),u=a.slice(l),d=Math.max(1,r-1-o);e.committedBand=c,e.committedBandMeta=u,e.committedBandBottomRow=Math.max(0,d-1),e.committedBandTopRow=Math.max(i,d-c.length),e.committedBandPaintedRows=0}var K5=y(()=>{"use strict";Vn();xf()});function G5(e,t,n,r,o,i){let{fitsAboveFrame:s,anchorFloor:a,phase1EffectiveFrameTop:l}=t,{textLines:c,textMeta:u,lineCount:d}=n,p=Math.min(c.length,o);if(p>0){let f=c.slice(c.length-p),g=u.slice(u.length-p),h=p===c.length,b=s&&h&&e.committedBand.length>0&&(e.committedBandBottomRow===r-1||e.committedBandBottomRow===l-1),S=b?[...e.committedBand,...f]:f,w=b?[...e.committedBandMeta,...g]:g,k=S.length>o?S.slice(S.length-o):S,T=S.length>o?w.slice(w.length-o):w,E=r-k.length,R=e.committedBandTopRow,I="";if(s){if(R>0&&R<E){let C=Math.max(i,R);for(let x=C;x<E;x++)I+=Mn(x)}for(let C=0;C<k.length;C++){let x=E+C;if(x>=r)break;I+=Mn(x,k[C])}}else{let C=Math.max(0,r-a),x=Math.max(0,c.length-C);for(let _=x;_<c.length;_++){let P=a+(_-x);if(P>=r)break;I+=Mn(P,c[_])}}I.length>0&&os(e,()=>{e.stdout.write(I)}),e.committedBand=k,e.committedBandMeta=T,e.committedBandBottomRow=r-1,e.committedBandTopRow=E,e.committedBandPaintedRows=k.length}else Uu(e)}var q5=y(()=>{"use strict";Vn();xf();SM()});function z5(e,t){if(e.debugLog("commitAbove:enter",{textLen:t.length,anchorRow:e.anchorRow??null,committing:e.committing,topRow:e.logUpdate?.topRow??null}),!e.armed||!e.logUpdate){let c=Ko(t,e.stdout);os(e,()=>{e.stdout.write(c+`
|
|
1657
|
+
`)});return}let n=Math.max(1,e.stdout.rows??24),r=Math.max(1,e.stdout.columns??80);uk(e,r);let o=M5(t,r),i=D5(e,o.contentLineCount,n,r),s=N5(e,o,i);e.commitInFlight=!0,e.committing=!0;let a=0;try{e.logUpdate.clear(i.extraRows),a=U5(e,i,s)}finally{e.committing=!1,e.debugLog("commitAbove:finally")}a>0&&e.anchorRow!==void 0&&e.anchorRow>1&&(e.anchorRow=Math.max(1,e.anchorRow-a)),e.hasCommitted=!0,e.debugLog("commitAbove:phase2:repaint"),e.repaint(),e.debugLog("commitAbove:phase2:done",{newTopRow:e.logUpdate.topRow??null});let l=e.logUpdate.topRow??0;if(l>1){let c=Math.max(e.anchorRow??1,1),u=Math.max(0,l-c);s.useBandHold?H5(e,i,s,l,u):G5(e,i,s,l,u,c)}else s.useBandHold?W5(e,i,s):Uu(e);e.commitInFlight=!1,e.debugLog("commitAbove:phase3:done")}function Uu(e){e.committedBand=[],e.committedBandMeta=[],e.committedBandTopRow=0,e.committedBandBottomRow=0,e.committedBandPaintedRows=0,e.bandReflowCache=null}function V5(e){e.hasCommitted=!1,Uu(e),e.commitInFlight=!1}var SM=y(()=>{"use strict";Ef();Rf();xf();O5();$5();B5();j5();K5();q5()});function Y5(e){let t=e.pendingResizeErase;if(!t)return;e.pendingResizeErase=null;let n=Math.max(1,e.stdout.rows??24),r=Math.max(1,t.top),o=Math.min(t.bottom,n);if(r>o)return;let i="";for(let s=r;s<=o;s++)i+=Mn(s);try{e.stdout.write(i)}catch{}}function J5(e,t,n,r){if(e.commitInFlight||!e.logUpdate)return;let o=Math.max(e.anchorRow??1,1),i=t-1;if(e.committedBand.length===0){e.bandGeometryStale=!1;return}if(i<o)return;e.bandGeometryStale=!1;let s=i-o+1,a=Math.min(e.committedBand.length,s);if(a<=0)return;let l=i-a+1,c=l!==e.committedBandTopRow||i!==e.committedBandBottomRow,u=n>0&&n<=e.committedBandBottomRow;if(!c&&!u)return;let d=e.committedBand.slice(e.committedBand.length-a),p="\x1B[?25l";for(let f=o;f<l;f++)p+=Mn(f);for(let f=0;f<d.length;f++)p+=Mn(l+f,d[f]);p+=`\x1B[${Math.max(1,r)};1H`,dk(e.stdout,()=>{try{e.stdout.write(p)}catch{}}),e.committedBandTopRow=l,e.committedBandBottomRow=i,e.committedBandPaintedRows=a}var X5=y(()=>{"use strict";Vn();Ef()});var Q5=y(()=>{"use strict";SM();X5()});function CIe(e){if(e<1024)return`${e} B`;let t=e/1024;return t<1024?`${t.toFixed(1)} KiB`:`${(t/1024).toFixed(1)} MiB`}function Af(e){if(e.length===0)return"";let t=e.reduce((a,l)=>a+l.sizeBytes,0),n=CIe(t),r=e.length===1?"image":"images",o=new Set,i=[];for(let a of e){let l=AIe[a.mediaType];o.has(l)||(o.add(l),i.push(l))}let s=i.join(", ");return`[${e.length} ${r} attached \xB7 ${n} \xB7 ${s} \xB7 Ctrl+X to discard]`}function Z5(e,t){if(t.length===0)return e;if(e){let n=t.length===1?"image":"images";return`${e} [+ ${t.length} ${n}]`}return t.length===1?"[image attached]":`[${t.length} images attached]`}function ju(e){return e.length===0?"":e.length===1?"[image attached]":`[${e.length} images attached]`}var AIe,Ha=y(()=>{"use strict";AIe={"image/png":"PNG","image/jpeg":"JPEG","image/gif":"GIF","image/webp":"WEBP"}});function pk(e,t,n){if(t<=0)return;let r=e.committedBand.length,o=Math.max(1,e.stdout.rows??24),i=Math.max(1,e.stdout.columns??80);e.debugLog("evict:logical-archive",{overflow:t,floor:n,bandLen:r});let s="";for(let d=n;d<n+r;d++)s+=Mn(d);let a=Du(e.committedBand,e.committedBandMeta,t),l=$u(a,n,o,i),c=()=>{try{e.stdout.write(s+l)}catch(d){e.debugLog("evict:error",{msg:d?.message??String(d)})}};e.scrollRegion!==void 0?e.scrollRegion.withFullScrollRegion(c):c();let u=e.committedBand.slice(t);if(u.length>0){let d="";for(let p=0;p<u.length;p++)d+=Mn(n+p,u[p]);dk(e.stdout,()=>{try{e.stdout.write(d)}catch{}})}e.committedBand=u,e.committedBandMeta=e.committedBandMeta.slice(t),e.committedBandTopRow=n,e.committedBandBottomRow=n+u.length-1,e.committedBandPaintedRows=u.length}var e6=y(()=>{"use strict";Vn();Ef()});function wM(e,t){let n=e.logUpdate?.topRow??0;if(!(e.anchorRow!==void 0&&e.anchorRow>1)){let p=e.committedBand.length,f=Math.max(0,t-1),g=e.committedBandPaintedRows<p,h=e.overlay.trim().length===0;if(!e.commitInFlight&&g&&p>f&&h&&f>0){let k=p-f;pk(e,k,1);return}if(!(e.hasCommitted&&n>1&&t<n)||p===0)return;let S=Math.max(0,t-1),w=p-S;if(w<=0)return;pk(e,w,1);return}let o=e.committedBand.length,i=Math.max(e.anchorRow??1,1),s=Math.max(0,t-i),a=e.committedBandPaintedRows<o,l=e.overlay.trim().length===0;if(!e.commitInFlight&&a&&o>s&&l&&s>0){let p=o-s;pk(e,p,i);return}let c=e.hasCommitted&&n>1?Math.max(0,n-t):0,u=t<e.anchorRow?e.anchorRow-t:0,d=Math.max(c,u);if(d>0&&(_Ie(e,d),e.anchorRow!==void 0&&e.anchorRow>1&&(e.anchorRow=Math.max(1,e.anchorRow-d)),e.committedBand.length>0)){e.committedBandTopRow-=d,e.committedBandBottomRow-=d;let p=Math.max(e.anchorRow??1,1);if(e.committedBandTopRow<p){let f=p-e.committedBandTopRow;e.committedBand=e.committedBand.slice(f),e.committedBandMeta=e.committedBandMeta.slice(f),e.committedBandTopRow=p}e.committedBand.length===0||e.committedBandBottomRow<p?e.clearCommittedBand():e.committedBandPaintedRows=e.committedBand.length}}function _Ie(e,t){if(t<=0)return;e.debugLog("evict:enter",{rows:t,anchorRow:e.anchorRow??null});let r=`\x1B[${Math.max(1,e.stdout.rows??24)};1H${`
|
|
1658
|
+
`.repeat(t)}`,o=()=>{try{e.stdout.write(r)}catch(i){e.debugLog("evict:error",{msg:i?.message??String(i)})}};e.scrollRegion!==void 0?e.scrollRegion.withFullScrollRegion(o):o()}var t6=y(()=>{"use strict";e6()});function mk(e){if(!e.armed||!e.logUpdate||e.committing||e.suspended)return;if(e.flushResizeGhostErase(),e.lastKnownRows=e.stdout.rows??24,uk(e,e.stdout.columns??80),e.inputMode==="picker"&&e.pickerController){IIe(e);return}let t=e.renderInputLine(),n=e.overlay?e.overlay.split(`
|
|
1659
1659
|
`):[],r=e.spinnerController.renderSpinnerRow(),o=e.spinnerController.renderTipRow(e.stdout.columns??80),i=null;e.attachments.length>0?i=Af(e.attachments):e.clipboardFailureMsg!==null&&(i=m.dim(e.clipboardFailureMsg),e.clipboardFailureMsg=null);let s=e.renderDropdownRows(),a=e.renderHintRow(),l=!!r||!!o||!!i,c=l||n.length>0,u=e.scrollRegion?.getExtraRows()??0,d=Math.max(1,(e.stdout.rows??24)-1-u),p=c?1:0,f=(r?1:0)+(o?1:0)+(i?1:0)+p+s.length+(a!==null?1:0)+1,g=Math.max(0,d-f),h=n.length>g?n.slice(-g):n,b=l||h.length>0,S=[];S.push(...h),r&&S.push(r),o&&S.push(o),i&&S.push(i),b&&S.push(""),S.push(...s),a!==null&&S.push(a),S.push(t);let w=Math.max(1,(e.stdout.rows??24)-1-u),k=S.join(`
|
|
1660
1660
|
`),T=w,E=e.logUpdate.measure?e.logUpdate.measure(k,T).topRow:Math.max(1,T-S.length+1);e.lastMeasuredFrameTop=E,wM(e,E);let R=e.logUpdate.topRow??0;e.logUpdate.render(k,T,e.anchorRow),e.repositionCommittedBand(E,R,T)}function IIe(e){if(!e.logUpdate||!e.pickerController)return;let t=[...e.pickerController.renderRows()],n=e.overlay?e.overlay.split(`
|
|
1661
1661
|
`):[],r=e.spinnerController.renderSpinnerRow(),o=e.spinnerController.renderTipRow(e.stdout.columns??80),i=null;e.attachments.length>0?i=Af(e.attachments):e.clipboardFailureMsg!==null&&(i=m.dim(e.clipboardFailureMsg),e.clipboardFailureMsg=null);let s=!!r||!!o||!!i,a=s||n.length>0,l=e.scrollRegion?.getExtraRows()??0,c=Math.max(1,(e.stdout.rows??24)-1-l),u=a?1:0,d=(r?1:0)+(o?1:0)+(i?1:0)+u+t.length,p=Math.max(0,c-d),f=n.length>p?n.slice(-p):n,g=s||f.length>0,h=[];if(h.push(...f),r&&h.push(r),o&&h.push(o),i&&h.push(i),g&&h.push(""),h.push(...t),h.length===0)return;let b=Math.max(1,(e.stdout.rows??24)-1-l),S=h.join(`
|
|
1662
|
-
`),w=e.logUpdate.measure?e.logUpdate.measure(S,b).topRow:Math.max(1,b-h.length+1);e.lastMeasuredFrameTop=w,wM(e,w);let k=e.logUpdate.topRow??0;e.logUpdate.render(S,b,e.anchorRow),e.repositionCommittedBand(w,k,b)}var
|
|
1662
|
+
`),w=e.logUpdate.measure?e.logUpdate.measure(S,b).topRow:Math.max(1,b-h.length+1);e.lastMeasuredFrameTop=w,wM(e,w);let k=e.logUpdate.topRow??0;e.logUpdate.render(S,b,e.anchorRow),e.repositionCommittedBand(w,k,b)}var n6=y(()=>{"use strict";B();Ha();t6();Ef()});function r6(e,t){for(let n of t.payloads)e.queuedReservations.add(n)}function vM(e,t){for(let n of t.payloads)e.queuedReservations.delete(n)}function o6(e,t){return e.queuedReservations.has(t)}function i6(e){if(e.pendingSubmissions.length===0||e.pendingSubmissions.some(r=>r.attachments.length>0))return;let t=[...e.pendingSubmissions],n=t.map(r=>r.text).join(`
|
|
1663
1663
|
`);if(n.trim().length!==0)return{text:n,preview:t.map(r=>r.displayText??r.text).join(`
|
|
1664
|
-
`),payloads:t}}function
|
|
1665
|
-
`)}function
|
|
1666
|
-
`)}async function Ga(){if(process.platform==="linux")return
|
|
1664
|
+
`),payloads:t}}function s6(e,t){let n=new Set(t.payloads);vM(e,t);let r=e.pendingSubmissions.reduce((o,i)=>o+Number(n.has(i)),0);return r===0?0:(e.pendingSubmissions=e.pendingSubmissions.filter(o=>!n.has(o)),e.queued=e.pendingSubmissions.length>0,e.postEscPayload!==null&&n.has(e.postEscPayload)&&(e.postEscCoalesce=!1,e.postEscPayload=null),e.repaint(),r)}var kM=y(()=>{"use strict"});function a6(e,t){if(e.pickerController)throw new Error("enterPickerMode: a picker is already active; call exitPickerMode first");e.pickerSavedMode=e.inputMode,e.pickerController=t,e.inputMode="picker",e.autocompleteState?.reset(),e.repaint()}function l6(e){e.pickerController&&(e.pickerController=null,e.inputMode=e.pickerSavedMode,e.repaint())}function c6(e){e.pickerController&&e.repaint()}function u6(e,t){let n=e.inputMode;if(e.inputMode=t,n==="idle"&&t==="streaming"){e.canceled=!1,e.backgrounded=!1,e.softStopped=!1,e.postEscPayload===null&&(e.postEscCoalesce=!1),e.autocompleteState?.reset(),e.repaint();return}if(t==="idle"&&e.softStopped&&(e.softStopped=!1),t==="idle"&&e.pendingSubmissions.length>0&&e.onSubmit){let r=e.onSubmit,o=e.pendingSubmissions[0];if(o6(e,o))return;e.pendingSubmissions.shift(),e.queued=e.pendingSubmissions.length>0,o===e.postEscPayload&&(e.postEscCoalesce=!1,e.postEscPayload=null),e.repaint(),r(o);return}n!==t&&e.repaint()}function d6(e){return e.inputMode}var p6=y(()=>{"use strict";kM()});function Hu(e){return e>=" "&&Rs(e,0)===e.length}var TM=y(()=>{"use strict";ce()});import{spawn as g6}from"child_process";import{randomUUID as m6}from"crypto";import{unlink as DIe}from"fs/promises";import{tmpdir as $Ie}from"os";import{join as FIe}from"path";function Ku(e){process.stderr.write(`[afk-clipboard] ${e}
|
|
1665
|
+
`)}function f6(e,t){return new Promise(n=>{let r=g6(e,t,{stdio:["ignore","ignore","ignore"]});r.on("error",o=>{let i=o.code;n(i!=="ENOENT"&&i!=="EACCES")}),r.on("close",()=>n(!0))})}function LIe(e,t){return new Promise(n=>{let r=g6(e,t,{stdio:["ignore","pipe","ignore"]}),o=[];r.stdout?.on("data",i=>{o.push(i)}),r.on("error",()=>n(null)),r.on("close",i=>{if(i!==0){n(null);return}let s=Buffer.concat(o);n(s.length>0?s:null)})})}function NIe(e){return e.length>=8&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71?"image/png":e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255?"image/jpeg":e.length>=4&&e[0]===71&&e[1]===73&&e[2]===70&&e[3]===56?"image/gif":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"image/webp":null}async function h6(){Wu&&Ku("linux: probing clipboard for image data");let e=await f6("wl-paste",["--version"]),t=await f6("xclip",["-version"]);if(!e&&!t)return Wu&&Ku("linux: neither wl-paste nor xclip found, returning null"),null;let n=[];e&&n.push({cmd:"wl-paste",args:["--type","image/png","--no-newline"]}),t&&n.push({cmd:"xclip",args:["-selection","clipboard","-t","image/png","-o"]});for(let{cmd:r,args:o}of n){let i=FIe($Ie(),`afk-clipboard-${m6()}.bin`);try{let s=await LIe(r,o);if(Wu&&Ku(`linux: ${r} returned ${s?.length??0} bytes`),!s||s.length===0)continue;let a=NIe(s);if(Wu&&Ku(`linux: magic-byte detection: ${a??"unrecognized"}`),!a)continue;return Wu&&Ku(`linux: probe success: mediaType=${a} size=${s.byteLength}`),{id:m6(),mediaType:a,bytes:s,sizeBytes:s.byteLength}}catch{}finally{DIe(i).catch(()=>{})}}return Wu&&Ku("linux: probe result: null (no image found on clipboard)"),null}var Wu,y6=y(()=>{"use strict";N();Wu=!!v.AFK_DEBUG_CLIPBOARD});import{spawn as b6}from"child_process";import{randomUUID as EM}from"crypto";import{readFile as S6,unlink as RM}from"fs/promises";import{tmpdir as w6}from"os";import{join as v6}from"path";function Ka(e){process.stderr.write(`[afk-clipboard] ${e}
|
|
1666
|
+
`)}async function Ga(){if(process.platform==="linux")return h6();if(process.platform!=="darwin")return null;Wa&&Ka("probing clipboard for image data");for(let e of["PNGf","TIFF"]){let t=v6(w6(),`afk-clipboard-${EM()}.bin`);try{let{ok:n,exitCode:r,stderr:o}=await jIe(e,t);if(Wa&&Ka(`class=${e} osascript exitCode=${r} stderr=${JSON.stringify(o)} ok=${n}`),!n)continue;let i=await S6(t);if(i.length===0)continue;if(BIe(i)){Wa&&Ka(`class=${e} magic=TIFF detected, transcoding via sips`);let a=await UIe(t);if(!a){Wa&&Ka(`class=${e} sips transcode failed, skipping`);continue}i=a}let s=WIe(i);if(Wa&&Ka(`class=${e} magic-byte detection result: ${s??"unrecognized"}`),!s)continue;return Wa&&Ka(`probe success: mediaType=${s} size=${i.byteLength}`),{id:EM(),mediaType:s,bytes:i,sizeBytes:i.byteLength}}catch{}finally{RM(t).catch(()=>{})}}return Wa&&Ka("probe result: null (no image found on clipboard)"),null}function BIe(e){return e.length<4?!1:e[0]===73&&e[1]===73&&e[2]===42&&e[3]===0||e[0]===77&&e[1]===77&&e[2]===0&&e[3]===42}async function UIe(e){let t=v6(w6(),`afk-clipboard-${EM()}.png`);if(!await new Promise(r=>{let o=b6("sips",["-s","format","png",e,"--out",t],{stdio:["ignore","ignore","ignore"]});o.on("error",()=>r(!1)),o.on("close",i=>r(i===0))}))return RM(t).catch(()=>{}),null;try{let r=await S6(t);return r.length>0?r:null}catch{return null}finally{RM(t).catch(()=>{})}}async function jIe(e,t){let n=`
|
|
1667
1667
|
try
|
|
1668
1668
|
set imgData to the clipboard as \xABclass ${e}\xBB
|
|
1669
1669
|
set fileRef to open for access POSIX file ${HIe(t)} with write permission
|
|
@@ -1677,16 +1677,16 @@ Status written to: ${Wd()}
|
|
|
1677
1677
|
end try
|
|
1678
1678
|
return "no"
|
|
1679
1679
|
end try
|
|
1680
|
-
`;return new Promise(r=>{let o=
|
|
1680
|
+
`;return new Promise(r=>{let o=b6("osascript",["-e",n],{stdio:["ignore","pipe","pipe"]}),i="",s="";o.stdout?.on("data",a=>{i+=a.toString("utf8")}),o.stderr?.on("data",a=>{s+=a.toString("utf8")}),o.on("error",()=>r({ok:!1,exitCode:null,stderr:s})),o.on("close",a=>{r({ok:a===0&&i.trim()==="ok",exitCode:a,stderr:s})})})}function HIe(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function WIe(e){return e.length>=8&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71?"image/png":e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255?"image/jpeg":e.length>=4&&e[0]===71&&e[1]===73&&e[2]===70&&e[3]===56?"image/gif":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"image/webp":null}var Wa,xM=y(()=>{"use strict";N();y6();Wa=!!v.AFK_DEBUG_CLIPBOARD});function k6(e,t){return t===e.input?!1:(e.input=t,e.pasting||(e.updateAutocomplete(),e.updateGhost(),e.scheduleRepaint()),!0)}function T6(e,t,n){if(!e.armed||GIe(e,t,n))return;let r=n?.sequence??"";qIe(e,r)||zIe(e,n)||VIe(e,n)||YIe(e,n)||JIe(e,n)||QIe(e,n,r)||ZIe(e,n)||ePe(e,n)||tPe(e,n)||nPe(e,n)||rPe(e,n)||oPe(e,t,n)}function GIe(e,t,n){return e.inputMode==="picker"&&e.pickerController?(e.pickerController.onKey(t,n),!0):!1}function qIe(e,t){if(t==="\x1B[200~")return e.pasting=!0,e.pasteStartBufferLen=e.input.buffer.length,e.pasteStartCursor=e.input.cursor,!0;if(t==="\x1B[201~"){e.pasting=!1;let n=r=>{e.clipboardInFlight||(e.clipboardInFlight=!0,Ga().then(o=>{o?(e.clipboardFailureMsg=null,e.attachments.push(o),e.repaint()):r==="flag-missing"&&(e.clipboardFailureMsg="[clipboard: no image found]",e.repaint())}).catch(()=>{}).finally(()=>{e.clipboardInFlight=!1}))};return e.input.buffer.length===e.pasteStartBufferLen?n("flag-missing"):(JX(e),e.updateAutocomplete(),e.repaint(),n("silent")),!0}return!1}function zIe(e,t){if(t?.name!=="escape")return!1;let n=e.autocompleteState;if(n?.dropdownOpen&&(n.suppressedSignature=`${e.input.cursor}:${e.input.buffer}`,n.dropdownOpen=!1,n.candidates=[],e.repaint()),e.inputMode==="idle"){if(e.input.buffer.length===0){e.dismissPromptGhost()&&e.repaint();let r=Date.now();e.lastIdleEscAt!==0&&r-e.lastIdleEscAt<=KIe?(e.lastIdleEscAt=0,e.onRewindRequest&&e.onRewindRequest()):e.lastIdleEscAt=r}else e.lastIdleEscAt=0;return!0}return e.softStopped||(e.softStopped=!0,e.postEscCoalesce=!0,e.postEscPayload=null,e.onSoftStop&&e.onSoftStop()),!0}function VIe(e,t){return t?.ctrl&&t?.name==="c"?e.inputMode==="idle"?(e.onCancel&&e.onCancel(),!0):(e.canceled||(e.canceled=!0,e.onCancel&&e.onCancel()),!0):!1}function YIe(e,t){return t?.ctrl&&t?.name==="v"?(e.clipboardInFlight||(e.clipboardInFlight=!0,Ga().then(n=>{n?(e.clipboardFailureMsg=null,e.attachments.push(n)):e.clipboardFailureMsg="[clipboard: no image found]",e.repaint()}).catch(()=>{}).finally(()=>{e.clipboardInFlight=!1})),!0):!1}function JIe(e,t){let n=e.autocompleteState;if(t?.ctrl&&t?.name==="p"||t?.name==="up"){if(n?.dropdownOpen)return n.selectedIndex<n.candidates.length-1&&(n.selectedIndex++,n.selectedIndex>=n.viewportStart+ja&&(n.viewportStart=n.selectedIndex-ja+1),e.repaint()),!0;if(e.pendingSubmissions.length>0&&e.input.buffer.length===0){let r=e.pendingSubmissions.pop();return r===e.postEscPayload&&(e.postEscPayload=null),e.queued=e.pendingSubmissions.length>0,e.attachments=[...r.attachments],e.history?.resetRecall(),e.applyEdit(z.seed(r.text)),!0}if(e.history){let r=e.history.back(e.input.buffer);r!==null&&e.applyEdit(z.seed(r))}return!0}if(t?.ctrl&&t?.name==="n"||t?.name==="down"){if(n?.dropdownOpen)return n.selectedIndex>0&&(n.selectedIndex--,n.selectedIndex<n.viewportStart&&(n.viewportStart=n.selectedIndex),e.repaint()),!0;if(e.history){let r=e.history.forward();r!==null&&e.applyEdit(z.seed(r))}return!0}return!1}function XIe(e){if(e.length===1)return e[0];let t=e.map(i=>i.text).filter(i=>i.length>0).join(`
|
|
1681
1681
|
`),n=e.flatMap(i=>[...i.attachments]);if(!e.some(i=>i.displayText!==void 0))return{text:t,attachments:n};let o=e.map(i=>i.displayText??i.text).filter(i=>i.length>0).join(`
|
|
1682
1682
|
`);return{text:t,displayText:o,attachments:n}}function QIe(e,t,n){if(t?.name!=="return")return!1;if(tk(t,n))return e.history?.resetRecall(),e.applyEdit(z.insert(e.input,`
|
|
1683
1683
|
`)),!0;if(e.pasting)return e.input=z.insert(e.input,`
|
|
1684
1684
|
`),e.queued=e.pendingSubmissions.length>0,!0;let r=e.autocompleteState;if(r?.dropdownOpen){let l=r.trigger?.kind,c=e.applyDropdownSelection();if(l!=="slash"||!c)return!0}if(Fu(e.input.buffer))return e.history?.resetRecall(),e.applyEdit(z.replaceRange(e.input,{start:e.input.buffer.length-1,end:e.input.buffer.length},`
|
|
1685
|
-
`)),!0;if(e.input.buffer.length===0&&e.attachments.length===0)return!0;if(e.inputMode==="idle"&&e.onSubmit){let l=e.input.buffer,c=ek(e,l),u=[...e.attachments],d=e.onSubmit;return e.queued=e.pendingSubmissions.length>0,e.input=z.seed(""),e.attachments=[],e.pasteRegistry.clear(),e.autocompleteState?.reset(),e.repaint(),d(c===l?{text:c,attachments:u}:{text:c,displayText:l,attachments:u}),!0}let o=e.input.buffer,i=ek(e,o),s=[...e.attachments],a=i===o?{text:i,attachments:s}:{text:i,displayText:o,attachments:s};if(e.postEscCoalesce){let l=e.postEscPayload,c=l!==null?e.pendingSubmissions.indexOf(l):-1;if(l!==null&&c>=0){let u=XIe([l,a]);e.pendingSubmissions[c]=u,e.postEscPayload=u}else{if(l!==null&&v.NODE_ENV!=="production")throw new Error("terminal-compositor: post-ESC coalesce reference is dangling (postEscPayload non-null but absent from pendingSubmissions) \u2014 a pendingSubmissions removal site failed to clear the epoch reference.");e.postEscPayload=a,e.pendingSubmissions.push(a)}}else e.pendingSubmissions.push(a);return e.queued=!0,e.input=z.seed(""),e.attachments=[],e.pasteRegistry.clear(),e.history?.resetRecall(),e.autocompleteState?.reset(),e.repaint(),e.paused&&e.onPauseInterrupt&&e.onPauseInterrupt(),!0}function Cf(e,t){return t!==e.input&&(e.history?.resetRecall(),e.applyEdit(t)),!0}function
|
|
1685
|
+
`)),!0;if(e.input.buffer.length===0&&e.attachments.length===0)return!0;if(e.inputMode==="idle"&&e.onSubmit){let l=e.input.buffer,c=ek(e,l),u=[...e.attachments],d=e.onSubmit;return e.queued=e.pendingSubmissions.length>0,e.input=z.seed(""),e.attachments=[],e.pasteRegistry.clear(),e.autocompleteState?.reset(),e.repaint(),d(c===l?{text:c,attachments:u}:{text:c,displayText:l,attachments:u}),!0}let o=e.input.buffer,i=ek(e,o),s=[...e.attachments],a=i===o?{text:i,attachments:s}:{text:i,displayText:o,attachments:s};if(e.postEscCoalesce){let l=e.postEscPayload,c=l!==null?e.pendingSubmissions.indexOf(l):-1;if(l!==null&&c>=0){let u=XIe([l,a]);e.pendingSubmissions[c]=u,e.postEscPayload=u}else{if(l!==null&&v.NODE_ENV!=="production")throw new Error("terminal-compositor: post-ESC coalesce reference is dangling (postEscPayload non-null but absent from pendingSubmissions) \u2014 a pendingSubmissions removal site failed to clear the epoch reference.");e.postEscPayload=a,e.pendingSubmissions.push(a)}}else e.pendingSubmissions.push(a);return e.queued=!0,e.input=z.seed(""),e.attachments=[],e.pasteRegistry.clear(),e.history?.resetRecall(),e.autocompleteState?.reset(),e.repaint(),e.paused&&e.onPauseInterrupt&&e.onPauseInterrupt(),!0}function Cf(e,t){return t!==e.input&&(e.history?.resetRecall(),e.applyEdit(t)),!0}function E6(e,t){let n=XX(e,t);return n?(e.history?.resetRecall(),e.applyEdit(n),!0):!1}function ZIe(e,t){if(t?.name!=="backspace")return!1;if(t?.meta)return Cf(e,z.deleteWordBackward(e.input));if(E6(e,"backward"))return!0;let n=z.backspace(e.input);return n!==e.input?(e.history?.resetRecall(),e.applyEdit(n)):e.attachments.length>0&&(e.attachments.pop(),e.repaint()),!0}function ePe(e,t){return t?.ctrl&&t?.name==="a"?(e.applyEdit(z.moveLineStart(e.input)),!0):t?.ctrl&&t?.name==="e"?(e.applyEdit(z.moveLineEnd(e.input)),!0):(t?.meta||t?.ctrl)&&t?.name==="left"?(e.applyEdit(z.moveWordBackward(e.input)),!0):(t?.meta||t?.ctrl)&&t?.name==="right"?(e.applyEdit(z.moveWordForward(e.input)),!0):t?.meta&&t?.name==="b"?(e.applyEdit(z.moveWordBackward(e.input)),!0):t?.meta&&t?.name==="f"?(e.applyEdit(z.moveWordForward(e.input)),!0):t?.ctrl&&t?.name==="w"?Cf(e,z.deleteWordBackward(e.input)):t?.ctrl&&t?.name==="u"?Cf(e,z.deleteToLineStart(e.input)):t?.ctrl&&t?.name==="k"?Cf(e,z.deleteToLineEnd(e.input)):t?.ctrl&&t?.name==="l"?(e.clearScreen(),!0):t?.ctrl&&t?.name==="d"?(e.input.buffer.length===0?e.onCancel&&e.onCancel():(e.history?.resetRecall(),e.applyEdit(z.deleteForward(e.input))),!0):t?.name==="left"?(e.applyEdit(z.moveLeft(e.input)),!0):t?.name==="right"?(e.input.cursor===e.input.buffer.length&&e.activeGhost!==null&&!e.autocompleteState?.dropdownOpen?e.applyGhostAccept():e.applyEdit(z.moveRight(e.input)),!0):t?.name==="home"?(e.applyEdit(z.moveLineStart(e.input)),!0):t?.name==="end"?(e.applyEdit(z.moveLineEnd(e.input)),!0):t?.name==="delete"?t?.meta?Cf(e,z.deleteWordForward(e.input)):(E6(e,"forward")||(e.history?.resetRecall(),e.applyEdit(z.deleteForward(e.input))),!0):!1}function tPe(e,t){return t?.ctrl&&t?.name==="b"?(e.inputMode==="idle"||e.backgrounded||(e.backgrounded=!0,e.onBackground&&e.onBackground()),!0):!1}function nPe(e,t){return t?.ctrl&&t?.name==="o"?(e.onOpenEditor&&e.onOpenEditor(),!0):!1}function rPe(e,t){return t?.name==="tab"&&t?.shift?(e.onShiftTab&&e.onShiftTab(),!0):t?.name==="tab"?(e.applyDropdownSelection()||e.applyGhostAccept(),!0):!1}function oPe(e,t,n){let r=["tab","pageup","pagedown"];if(n?.name&&r.includes(n.name)||n?.ctrl||n?.meta)return;let o=typeof t=="string"&&Hu(t)?t:typeof n?.sequence=="string"&&Hu(n.sequence)?n.sequence:null;o!==null&&(e.history?.resetRecall(),e.applyEdit(z.insert(e.input,o)))}var KIe,AM=y(()=>{"use strict";rn();TM();nk();xM();Tf();rM();N();KIe=600});import iPe from"wrap-ansi";var x6,A6,_f,CM,sPe,C6,fk,_6=y(()=>{"use strict";N();x6="\x1B[?2026h",A6="\x1B[?2026l",_f=(e,t)=>`\x1B[${e};${t}H`,CM="\x1B[2K",sPe="\x1B[?25l",C6="\x1B[?25h",fk=class e{stream;previousTopRow=0;previousLineCount=0;previousRawLineCount=0;constructor(t){this.stream=t}get topRow(){return this.previousTopRow}static wrapToPhysicalLines(t,n){let r=t.endsWith(`
|
|
1686
1686
|
`)?t:`${t}
|
|
1687
1687
|
`,i=iPe(r,n,{trim:!1,hard:!0,wordWrap:!1}).split(`
|
|
1688
|
-
`);for(;i.length>0&&i[i.length-1]==="";)i.pop();return i}measure(t,n){let r=this.stream.columns??80,o=Math.max(1,e.wrapToPhysicalLines(t,r).length),i=Math.max(1,n);return{topRow:Math.max(1,i-o+1),lineCount:o}}render(t,n,r){let o=Math.max(1,n),i=Math.max(1,r??1),s=this.stream.columns??80,a=this.stream.isTTY===!0,l=e.wrapToPhysicalLines(t,s),c=Math.max(1,l.length),u=this.previousRawLineCount>c?this.previousRawLineCount-c:0,d=Math.max(0,o-c+1-i),p=Math.min(u,d),f=p>0?[...Array(p).fill(""),...l]:l,g=f.length,h=Math.max(1,o-g+1),b="";if(a&&(b+=
|
|
1689
|
-
`)}constructor(t){this.stdout=t.stdout,this.stdin=t.stdin,this.onCancel=t.onCancel,this.onSoftStop=t.onSoftStop,this.onBackground=t.onBackground,this.onPauseInterrupt=t.onPauseInterrupt,this.onShiftTab=t.onShiftTab,this.onOpenEditor=t.onOpenEditor;let n=t.promptText;if(typeof n=="function")this.promptTextFn=n;else if(typeof n=="string")this.promptTextFn=()=>n;else{let r=" "+m.dim("\u23AF")+" ";this.promptTextFn=()=>r}this.history=t.history,this.autocompleteState=t.autocompleteState,this.formatInputBuffer=t.formatInputBuffer,this.scrollRegion=t.scrollRegion,this.spinnerController=new Jv({captureMode:t.captureMode??!1,goblin:t.goblinSpinner??!1,onTick:()=>this.repaint(),workVerb:()=>qX(this.activeToolName)}),this.caretBlinkController=new Zv({enabled:t.caretBlink??!1,captureMode:t.captureMode??!1,intervalMs:t.caretBlinkIntervalMs??530,onTick:()=>this.repaint()}),this.onSubmit=t.onSubmit,this.anchorRow=t.anchorRow,this.declaredAnchorRow=t.anchorRow,this.ghostEngine=t.suggest?.engine,this.ghostGetContext=t.suggest?.getContext}isArmed(){return this.armed}setAnchorRow(t){this.anchorRow=t,this.declaredAnchorRow=t}suspendInput(){P5(this)}resumeInput(){M5(this)}setOnSubmit(t){this.onSubmit=t??void 0}setOnCancel(t){this.onCancel=t??void 0}getOnCancel(){return this.onCancel}setOnRewindRequest(t){this.onRewindRequest=t??void 0}setOnOpenEditor(t){this.onOpenEditor=t??void 0}enterPickerMode(t){a5(this,t)}exitPickerMode(){l5(this)}repaintPicker(){c5(this)}terminalRows(){return Math.max(1,this.stdout.rows??24)}setInputMode(t){this.flushPendingRepaint(),u5(this,t)}getInputMode(){return d5(this)}async arm(){return O5(this)}disarm(){D5(this)}setOverlay(t){t!==this.overlay&&(this.debugLog("setOverlay",{framesLen:t.length,anchorRow:this.anchorRow??null}),this.overlay=t,this.repaint())}setSpinner(t){this.stdout.isTTY&&this.spinnerController.set(t)}setActiveToolName(t){this.activeToolName=t}commitAbove(t){this.flushPendingRepaint(),z6(this,t)}clearCommittedBand(){Uu(this)}flushResizeGhostErase(){Y6(this)}resetCommittedBand(){V6(this)}repositionCommittedBand(t,n,r){J6(this,t,n,r)}getBuffer(){return YX(this)}getPendingCount(){return this.pendingSubmissions.length}peekQueuedText(){return i5(this)}reserveQueued(t){r5(this,t)}releaseQueued(t){vM(this,t)}dropQueued(t){return s5(this,t)}getAttachments(){return[...this.attachments]}get caretVisible(){return this.caretBlinkController.visible}renderInputLine(){return C6(this)}updateAutocomplete(){kf(this)}updateGhost(){yM(this)}primePromptGhost(){T6(this)}dismissPromptGhost(){return E6(this)}renderDropdownRows(){return _6(this)}renderHintRow(){return I6(this)}repaint(){this.repaintCount++,this.pendingTrailingRepaint=!1,mk(this)}scheduleRepaint(){if(this.repaintCount++,!this.burstActive){this.burstActive=!0,this.pendingTrailingRepaint=!1,mk(this),queueMicrotask(()=>{this.burstActive=!1,this.flushPendingRepaint()});return}this.pendingTrailingRepaint=!0}flushPendingRepaint(){this.pendingTrailingRepaint&&(this.pendingTrailingRepaint=!1,this.armed&&mk(this))}clearScreen(){this.logUpdate?.resetGeometry?.(),this.stdout.write("\x1B[H\x1B[2J"),this.repaint()}resetState(){F5(this)}applyEdit(t){return k5(this,t)}prefillInput(t){this.applyEdit(z.seed(t))}applyDropdownSelection(){return c6(this)}applyGhostAccept(){return R6(this)}}});import IM from"chalk";function hPe(e){let t=N5[e];if(t)return t;let n=e.lastIndexOf(":");if(n>=0){let r=e.slice(n+1),o=N5[r];if(o)return o}return null}function Go(e,t){if(IM.level===0)return e;let n=t.version?.(),r=n!==void 0;if(r&&H5===t&&B5===e&&U5===IM.level&&j5===n)return W5;let s=e.replace(mPe,a=>{let l=a.slice(1);return t.has(l)?(hPe(l)??m.brand)(a):m.meta(a)}).replace(fPe,a=>m.fileRef(a)).replace(gPe,a=>m.meta(a));return r&&(H5=t,B5=e,U5=IM.level,j5=n,W5=s),s}var mPe,fPe,gPe,N5,B5,U5,j5,H5,W5,Mf=y(()=>{"use strict";B();mPe=/(?<=\s|^)(\/[A-Za-z][\w:-]*)(?=\s|$)/g,fPe=/(?<=\s|^)(@[~\w./-]*)(?=\s|$)/g,gPe=/\[Pasted text #[0-9a-f]+ \+\d+ (?:lines|chars)\]/g,N5={mint:e=>m.mint(e)};B5=null,U5=null,j5=null,H5=null,W5=""});function yPe(){let e=v.AFK_DIFF_LINES;if(e===void 0)return yk;let t=e.trim();if(!/^\d+$/.test(t))return yk;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:yk}function bPe(){let e=v.AFK_SHOW_DIFFS;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"}function SPe(e){let t=m.diffAdd(`+${e.addedLines}`),n=m.diffRemove(`-${e.removedLines}`),r=e.hunks.length,o=m.dim(`across ${r} hunk${r===1?"":"s"}`);return`${t} ${n} ${o}`}function vPe(e){let t=Me(e.text).replace(wPe,"");return e.kind==="+"?m.diffAdd("+ "+t):e.kind==="-"?m.diffRemove("- "+t):m.dim(" "+t)}function qo(e,t,n){if(bPe())return[];if(e.hunks.length===0)return[];let r=t==="overlay"?K5:yPe(),o=t+"|"+n+"|"+r,i=MM.get(e);if(i!==void 0){let f=i.get(o);if(f!==void 0)return f}let s=[];s.push(n+SPe(e));let a=[];for(let f of e.hunks){let g=`@@ -${f.oldStart},${f.oldLines} +${f.newStart},${f.newLines} @@`;a.push({kind:"header",text:m.diffHunk(g)});for(let h of f.lines)a.push({kind:"body",text:vPe(h)})}if(r===0){for(let f of a)s.push(n+f.text);return PM(e,o,s),s}let l=0;for(let f of a)f.kind==="body"&&l++;if(l<=r){for(let f of a)s.push(n+f.text);return PM(e,o,s),s}let c=0;for(let f of a)f.kind==="header"?s.push(n+f.text):c<r&&(s.push(n+f.text),c++);let u=l-r,d=`line${u===1?"":"s"}`,p=t==="flush"?" (set AFK_DIFF_LINES=0 to expand)":"";return s.push(n+m.dim(`\u2026 +${u} more diff ${d}${p}`)),PM(e,o,s),s}function PM(e,t,n){let r=MM.get(e);r===void 0&&(r=new Map,MM.set(e,r)),r.set(t,n)}var K5,yk,wPe,MM,G5=y(()=>{"use strict";N();B();ce();K5=8,yk=30;wPe=/[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;MM=new WeakMap});function is(e,t){return e?ss(t)?m.warning("\u2298"):m.error("\u2717"):m.success("\u2713")}function ss(e){return e!==void 0&&lu.has(e)}function V5(e){return WJ(e)}function kPe(e,t){return e?e==="grep"||e==="Grep"?t===1?"match":"matches":e==="glob"||e==="Glob"?t===1?"path":"paths":t===1?"line":"lines":t===1?"line":"lines"}function zo(e,t,n=60,r){let o=e.isError?ss(e.failureClass)?m.warning:m.error:m.dim,i=t??v.HOME??"___NOHOME___";if(e.display!==void 0&&!e.isError)return o(e.display);if(e.persistedPath){let a=e.persistedPath.startsWith(i)?"~"+e.persistedPath.slice(i.length):e.persistedPath,l=fv()?gv(a,e.persistedPath):a;return o(`saved \u2192 ${l}`)}if(e.lineCount!==void 0&&e.lineCount>1)return o(`${e.lineCount} ${kPe(r,e.lineCount)}`);let s=e.content.length>n?e.content.slice(0,n-3)+"\u2026":e.content;return o(Pe(s))}function za(e){return!e||typeof e.batchSize!="number"||typeof e.batchIndex!="number"||e.batchSize<=1?"":m.dim(` \u2225${e.batchIndex}/${e.batchSize}`)}var Of,q5,z5,as=y(()=>{"use strict";Zm();N();B();EP();Xr();xa();hv();G5();Of=3,q5=2,z5=3});function Df(e,t){if(e.length<=t)return e;let n=e.length-t,r=e.slice(0,n),o=e.slice(n),i=J5(r);return[{kind:"overflow",count:r.length,text:i},...o]}function TPe(e,t){return t<=1||e.endsWith("s")||/(sh|ch|x|z)$/i.test(e)?e:e+"s"}function J5(e){let t=new Map,n=0;for(let i of e)i.kind==="group"?(t.set(i.toolName,(t.get(i.toolName)??0)+i.entries.length),n+=i.entries.length):(t.set(i.toolName,(t.get(i.toolName)??0)+1),n+=1);if(n===0)return"";if(e.length>0&&e.every(i=>ct.has(i.toolName))&&new Set(e.map(i=>i.toolName)).size===1){let i=[],s=!1;for(let a of e){let c=(a.kind==="group"?a.label:a.toolInput).trim();if(!c.startsWith("(")||!c.endsWith(")")){s=!0;break}let u=c.slice(1,-1),d=Pe(u);if(!d){s=!0;break}let p=d.length>Y5?d.slice(0,Y5-1)+"\u2026":d,f=a.kind==="group"?a.entries.length:1;i.push({display:p,entries:f})}if(!s&&i.length>0){let a=i.slice(0,EPe),l=a.map(({display:p,entries:f})=>f>1?`${p} \xD7${f}`:p),c=a.reduce((p,f)=>p+f.entries,0),u=n-c,d=l.join(", ")+(u>0?` (+${u})`:"");return`\u2026 +${n} more: ${d}`}}let o=[];for(let[i,s]of t)o.push(`${s} ${TPe(i,s)}`);return`\u2026 +${n} (${o.join(", ")})`}var EPe,Y5,X5=y(()=>{"use strict";Xr();as();EPe=5,Y5=60});function bk(e,t=Sr()){return e.map((n,r)=>({sibling:n,connector:r===e.length-1?t.lastConnector:t.midConnector}))}function OM(e,t){return t?[...e,{kind:"resultSummary",summary:t}]:e}function DM(e){if(e.length===0)return[];let t=new Map;for(let o of e){let i=Q5(o),s=t.get(i);s||(s=[],t.set(i,s)),s.push(o)}let n=[],r=new Set;for(let o of e){let i=Q5(o),s=t.get(i);s.length>=APe(o.toolName)?r.has(i)||(n.push({kind:"group",toolName:o.toolName,label:ct.has(o.toolName)?o.toolInput:"",entries:s}),r.add(i)):n.push(o)}return n}function xPe(e){let t=e.result?.content??"",n=Uo(Pe(t));return n?ie(n,RPe):""}function $M(e){let t=e.entries.length,n=e.entries.filter(u=>u.result),r=n.filter(u=>u.result.isError),o=n.length,i=r.filter(u=>ss(u.result.failureClass)),s=r.filter(u=>!ss(u.result.failureClass)),a,l="";if(r.length>0){let u=o-r.length,d=[];u>0&&d.push(m.dim(`${u} ok`)),s.length>0&&d.push(m.error(`${s.length} error${s.length===1?"":"s"}`)),i.length>0&&d.push(m.warning(`${i.length} blocked`)),a=d.join(m.dim(", "));let p=s.length>0?s:i,f=s.length>0?m.error:m.warning,g=xPe(p[p.length-1]);g&&(l=m.dim(" \xB7 last: ")+f(g))}else o===t?a=`${t} done`:o===0?a=`${t} running`:a=`${o}/${t} done`;let c=jo(e.toolName+e.label);return r.length>0?c+m.dim(` \xD7${t} \u2014 `)+a+l:c+m.dim(` \xD7${t} \u2014 ${a}`)}function Q5(e){return ct.has(e.toolName)?e.toolName+"::"+e.toolInput:e.toolName}function APe(e){return ct.has(e)?q5:z5}var RPe,FM=y(()=>{"use strict";B();Xr();ce();as();hv();xa();qu();X5();RPe=40});function Z5(e,t,n,r){return e>0||t?zu([...n,!0],r):zu(n,r)}function e8(e,t){return!ct.has(e.toolName)||e.headerEmitted!==!0?!1:(t.get(e.toolUseId)??[]).every(r=>r.kind==="tool"&&e8(r,t))}function Sk(e,t,n,r=Yn(),o=[],i=Sr(),s){let a=zu(o,i),l=$f(a,i),c=e.filter(h=>h.kind==="text"),u=e.filter(h=>h.kind==="tool").filter(h=>!e8(h,t)),d=DM(u),p=Df(d,Of),f=bk(p,i);for(let{sibling:h,connector:b}of f){let S=m.dim(b),w=b===i.lastConnector;if(h.kind==="overflow")n.push(Ae(l+S+m.dim(h.text),r));else if(h.kind==="group")n.push(Ae(l+S+$M(h),r));else if(h.kind==="resultSummary")n.push(Ae(l+S+h.summary,r));else{let k=h,T=t.get(k.toolUseId);if(ct.has(k.toolName)&&T&&T.length>0){k.headerEmitted?n.push(Ae(l+S,r)):n.push(Ae(l+S+k.prefix,r));let E=s??w;if(Sk(T,t,n,r,[...o,E],i,w),k.thinkingTail){let R=$f(zu([...o,E],i),i);n.push(Ae(R+m.thinking("\u2307 "+Pe(k.thinkingTail)),r))}}else if(!(ct.has(k.toolName)&&k.headerEmitted))if(k.result){if(n.push(Ae(l+S+k.prefix+m.dim(" \u2014 ")+is(k.result.isError,k.result.failureClass)+" "+zo(k.result,void 0,60,k.toolName),r)),k.diff&&!k.result.isError){let E=l+(w?i.spineClosed:m.dim(i.spine))+" ";for(let R of qo(k.diff,"overlay",E))n.push(Ae(R,r))}}else{n.push(Ae(l+S+k.prefix+m.dim(" \u2026")+Ba(k.startedAt),r));let E=l+(w?i.spineClosed:m.dim(i.spine))+" ";k.thinkingTail?n.push(Ae(E+m.thinking("\u2307 "+Pe(k.thinkingTail)),r)):n.push(Ae(E+m.dim(V5(k.toolName)),r))}}}let g=Z5(u.length,!1,o,i);for(let h of c)for(let b of NM(h.text,g,i))n.push(Ae(b,r))}function Ff(e,t,n,r,o=Yn(),i=[],s=Sr(),a){let l=zu(i,s),c=$f(l,s),u=[],d=e.filter(w=>w.kind==="text"),p=e.filter(w=>w.kind==="tool"),f=DM(p),g=Df(f,Of),h=OM(g,r),b=bk(h,s);for(let{sibling:w,connector:k}of b){let T=m.dim(k),E=k===s.lastConnector;if(w.kind==="overflow")u.push(Ae(c+T+m.dim(w.text),o));else if(w.kind==="resultSummary")u.push(Ae(c+T+w.summary,o));else if(w.kind==="group")u.push(Ae(c+T+$M(w),o));else{let R=w,I=t.get(R.toolUseId);if(ct.has(R.toolName)&&I&&I.length>0){if(R.headerEmitted){let x=R.toolInput?`${R.toolName} ${Pe(R.toolInput)}`:R.toolName;u.push(Ae(c+T+m.dim("\u21B3 "+x),o))}else u.push(Ae(c+T+R.prefix,o));let C=a??E;u.push(...Ff(I,t,n,void 0,o,[...i,C],s,E))}else if(R.result){if(u.push(Ae(c+T+R.prefix+m.dim(" \u2014 ")+is(R.result.isError,R.result.failureClass)+" "+zo(R.result,n,60,R.toolName),o)),R.diff&&!R.result.isError){let C=c+(E?s.spineClosed:m.dim(s.spine))+" ";for(let x of qo(R.diff,"flush",C))u.push(Ae(x,o))}}else u.push(Ae(c+T+R.prefix,o))}}let S=Z5(p.length,r!=null,i,s);for(let w of d)for(let k of NM(w.text,S,s))u.push(Ae(k,o));return u}var LM=y(()=>{"use strict";B();Xr();Vn();as();qu();FM()});function t8(e){return e.agentResultSummary?m.dim(e.agentResultSummary)+za(e.result):e.agentResultSummary}function Lf(e,t,n,r,o=[]){let i=Sr(),s=t.filter(b=>b.kind==="tool"),l=s.filter(b=>b.result).reduce((b,S)=>b+(S.result.lineCount??0),0),c=[];s.length>Of&&(c.push(Ki(s.length)),l>0&&c.push(`${l} lines`));let u=m.dim(i.spine.repeat(o.length)),d=o,p=m.dim(i.turnRoot),f=Yn(),g=Ae(c.length>0?u+p+e.prefix+m.dim(" \u2014 "+c.join(" \xB7 ")):u+p+e.prefix,f),h=Ff(t,n,r,t8(e),f,d,i);return[g,...h].join(`
|
|
1688
|
+
`);for(;i.length>0&&i[i.length-1]==="";)i.pop();return i}measure(t,n){let r=this.stream.columns??80,o=Math.max(1,e.wrapToPhysicalLines(t,r).length),i=Math.max(1,n);return{topRow:Math.max(1,i-o+1),lineCount:o}}render(t,n,r){let o=Math.max(1,n),i=Math.max(1,r??1),s=this.stream.columns??80,a=this.stream.isTTY===!0,l=e.wrapToPhysicalLines(t,s),c=Math.max(1,l.length),u=this.previousRawLineCount>c?this.previousRawLineCount-c:0,d=Math.max(0,o-c+1-i),p=Math.min(u,d),f=p>0?[...Array(p).fill(""),...l]:l,g=f.length,h=Math.max(1,o-g+1),b="";if(a&&(b+=x6),this.previousLineCount>0)for(let S=0;S<this.previousLineCount;S++){let w=this.previousTopRow+S;b+=_f(w,1)+CM}for(let S=0;S<g;S++){let w=h+S;b+=_f(w,1)+CM+(f[S]??"")}if(b+=_f(h+g-1,1),a&&(b+=A6),this.stream.isTTY)try{this.stream.write(sPe)}catch{}try{this.stream.write(b)}catch{try{this.stream.isTTY&&this.stream.write(C6)}catch{}}if(v.NODE_ENV!=="production"&&g<c)throw new Error(`CupFrameRenderer invariant violation: lineCount (${g}) < rawLineCount (${c}). previousLineCount must cover at least previousRawLineCount \u2014 padded footprint must be \u2265 raw content size; see PR #557.`);this.previousTopRow=h,this.previousLineCount=g,this.previousRawLineCount=c}resetGeometry(){this.previousTopRow=0,this.previousLineCount=0,this.previousRawLineCount=0}clear(t=0){if(this.previousLineCount===0)return;let n="",r=this.stream.isTTY===!0;r&&(n+=x6);for(let o=0;o<this.previousLineCount;o++){let i=this.previousTopRow+o;n+=_f(i,1)+CM}n+=_f(Math.max(1,(this.stream.rows??24)-1-t),1),r&&(n+=A6);try{this.stream.write(n)}catch{}this.previousTopRow=0,this.previousLineCount=0,this.previousRawLineCount=0}done(){if(this.previousTopRow=0,this.previousLineCount=0,this.previousRawLineCount=0,this.stream.isTTY)try{this.stream.write(C6)}catch{}}}});import{emitKeypressEvents as aPe}from"readline";function qa(e){aPe(e,{escapeCodeTimeout:lPe})}var lPe,gk=y(()=>{"use strict";lPe=50});function Pf(e){if(If!==null)throw new Error(`stdin claim conflict: '${If.name}' already holds the claim, '${e}' cannot acquire it concurrently.`);let t=!1,n={release(){t||(t=!0,If?.handle===n&&(If=null))}};return If={name:e,handle:n},n}async function I6(e,t){let n=Pf(e);try{return await t()}finally{n.release()}}var If,hk=y(()=>{"use strict";If=null});function P6(e){if(!(!e.armed||e.suspended)){if(e.logUpdate)try{e.logUpdate.clear(e.scrollRegion?.getExtraRows()??0),e.logUpdate.done()}catch{}e.handleKeypress&&e.stdin.removeListener("keypress",e.handleKeypress);try{e.stdin.setRawMode(!1)}catch{}e.caretBlinkController.stop(),e.suspended=!0}}function M6(e){if(!(!e.armed||!e.suspended)){try{e.stdin.setRawMode(!0)}catch{}e.handleKeypress&&e.stdin.on("keypress",e.handleKeypress),e.suspended=!1,e.repaint(),e.caretBlinkController.start()}}async function O6(e){if(e.armed)throw new Error("TerminalCompositor: arm() called while already armed");if(!(!e.stdout.isTTY||!e.stdin.isTTY)){e.anchorRow=e.declaredAnchorRow,e.logUpdate||(e.logUpdate=new fk(e.stdout)),e.stdinClaim=Pf("TerminalCompositor.arm"),e.wasRaw=e.stdin.isRaw??!1;try{e.stdin.setRawMode(!0)}catch{e.stdinClaim?.release(),e.stdinClaim=null,e.logUpdate=null,e.wasRaw=!1;return}try{e.stdout.write("\x1B[?2004h\x1B[?1011h")}catch{}e.stdin.resume(),qa(e.stdin),e.handleKeypress=(t,n)=>{let r=e.pasting?!1:e.caretBlinkController.resetVisible(),o=e.repaintCount;T6(e,t,n),r&&e.repaintCount===o&&e.repaint()},e.stdin.on("keypress",e.handleKeypress),e.armed=!0,e.canceled=!1,e.resizeUnsub=Ne.subscribe(()=>{e.armed&&e.repaint()}),e.resizeImmediateUnsub=Ne.subscribeImmediate(()=>{if(!e.armed)return;let t=e.stdout.rows??24;if(e.lastKnownRows>0&&t>e.lastKnownRows){let n=e.scrollRegion?.getExtraRows()??0,r=e.logUpdate?.topRow??0,o=e.committedBand.length>0?e.committedBandTopRow:0,i=[r,o].filter(l=>l>0),s=i.length>0?Math.min(...i):0,a=Math.max(1,e.lastKnownRows-1-n);s>0&&s<=a&&(e.pendingResizeErase={top:s,bottom:a})}else e.pendingResizeErase=null;e.logUpdate?.resetGeometry?.(),e.bandGeometryStale=!0}),e.repaint(),e.caretBlinkController.start()}}function D6(e){if(e.spinnerController.dispose(),e.caretBlinkController.stop(),!e.armed){e.resetState();return}if(e.handleKeypress&&(e.stdin.removeListener("keypress",e.handleKeypress),e.handleKeypress=null),e.resizeUnsub&&(e.resizeUnsub(),e.resizeUnsub=null),e.resizeImmediateUnsub&&(e.resizeImmediateUnsub(),e.resizeImmediateUnsub=null),cPe(e),e.logUpdate)try{e.logUpdate.clear(e.scrollRegion?.getExtraRows()??0),e.logUpdate.done()}catch{}if(e.stdout.isTTY&&e.stdin.isTTY){try{e.stdout.write("\x1B[?2004l\x1B[?1011l")}catch{}try{e.stdin.setRawMode(e.wasRaw)}catch{}}e.stdinClaim&&(e.stdinClaim.release(),e.stdinClaim=null),e.armed=!1,e.resetState(),e.ghostEngine?.dispose()}function cPe(e){let t=e.committedBand.length-e.committedBandPaintedRows;if(t<=0)return;let n=Math.max(1,e.stdout.rows??24),r=Math.max(1,e.stdout.columns??80),o=Math.max(e.anchorRow??1,1),i=Du(e.committedBand,e.committedBandMeta,t),s=$u(i,o,n,r);if(s.length===0)return;let a=()=>{e.stdout.write(s)};try{e.scrollRegion?e.scrollRegion.withFullScrollRegion(a):a()}catch{}}var $6=y(()=>{"use strict";_6();gk();hk();ye();Vn();AM()});function F6(e){e.overlay="",e.input=z.seed(""),e.queued=!1,e.pendingSubmissions=[],e.queuedReservations.clear(),e.canceled=!1,e.backgrounded=!1,e.softStopped=!1,e.postEscCoalesce=!1,e.postEscPayload=null,e.paused=!1,e.pendingTrailingRepaint=!1,e.burstActive=!1,e.activeGhost=null,e.anchorRow=void 0,e.hasCommitted=!1,e.clearCommittedBand(),e.commitInFlight=!1,e.pendingResizeErase=null,e.bandGeometryStale=!1,e.lastKnownRows=0,e.pickerController=null,e.inputMode="streaming",e.attachments=[],e.pasting=!1,e.pasteStartBufferLen=0,e.pasteStartCursor=0,e.pasteRegistry.clear(),e.clipboardFailureMsg=null,e.autocompleteState?.reset(),e.resizeUnsub&&(e.resizeUnsub(),e.resizeUnsub=null),e.resizeImmediateUnsub&&(e.resizeImmediateUnsub(),e.resizeImmediateUnsub=null)}var L6=y(()=>{"use strict";rn()});var Gu,_M=y(()=>{"use strict";N();B();rn();GX();Qv();VX();rM();Tf();x5();P5();Q5();n6();p6();AM();$6();L6();kM();Gu=class{stdout;stdin;onCancel;onSoftStop;softStopped=!1;postEscCoalesce=!1;postEscPayload=null;onBackground;onRewindRequest;lastIdleEscAt=0;onPauseInterrupt;onShiftTab;onOpenEditor;promptTextFn;history;autocompleteState;formatInputBuffer;scrollRegion;anchorRow;declaredAnchorRow;onSubmit;attachments=[];pasting=!1;pasteStartBufferLen=0;pasteStartCursor=0;pasteRegistry=new Map;clipboardInFlight=!1;clipboardFailureMsg=null;inputMode="streaming";pickerController=null;pickerSavedMode="streaming";armed=!1;suspended=!1;canceled=!1;backgrounded=!1;paused=!1;wasRaw=!1;stdinClaim=null;logUpdate=null;overlay="";input=z.seed("");queued=!1;pendingSubmissions=[];queuedReservations=new Set;handleKeypress=null;resizeUnsub=null;resizeImmediateUnsub=null;spinnerController;activeToolName;caretBlinkController;repaintCount=0;pendingTrailingRepaint=!1;burstActive=!1;committing=!1;hasCommitted=!1;committedBand=[];committedBandMeta=[];committedBandTopRow=0;committedBandBottomRow=0;lastMeasuredFrameTop=0;committedBandPaintedRows=0;bandReflowCache=null;lastKnownRows=0;pendingResizeErase=null;bandGeometryStale=!1;commitInFlight=!1;debugCompositor=!!v.AFK_DEBUG_COMPOSITOR;ghostEngine;ghostGetContext;activeGhost=null;debugLog(t,n={}){if(!this.debugCompositor)return;let r=process.hrtime.bigint(),o=Object.entries(n).map(([i,s])=>{let a=typeof s=="string"?JSON.stringify(s.length>60?s.slice(0,57)+"...":s):String(s);return`${i}=${a}`}).join(" ");process.stderr.write(`[compositor] t=${r} ${t}${o?" "+o:""}
|
|
1689
|
+
`)}constructor(t){this.stdout=t.stdout,this.stdin=t.stdin,this.onCancel=t.onCancel,this.onSoftStop=t.onSoftStop,this.onBackground=t.onBackground,this.onPauseInterrupt=t.onPauseInterrupt,this.onShiftTab=t.onShiftTab,this.onOpenEditor=t.onOpenEditor;let n=t.promptText;if(typeof n=="function")this.promptTextFn=n;else if(typeof n=="string")this.promptTextFn=()=>n;else{let r=" "+m.dim("\u23AF")+" ";this.promptTextFn=()=>r}this.history=t.history,this.autocompleteState=t.autocompleteState,this.formatInputBuffer=t.formatInputBuffer,this.scrollRegion=t.scrollRegion,this.spinnerController=new Jv({captureMode:t.captureMode??!1,goblin:t.goblinSpinner??!1,onTick:()=>this.repaint(),workVerb:()=>qX(this.activeToolName)}),this.caretBlinkController=new Zv({enabled:t.caretBlink??!1,captureMode:t.captureMode??!1,intervalMs:t.caretBlinkIntervalMs??530,onTick:()=>this.repaint()}),this.onSubmit=t.onSubmit,this.anchorRow=t.anchorRow,this.declaredAnchorRow=t.anchorRow,this.ghostEngine=t.suggest?.engine,this.ghostGetContext=t.suggest?.getContext}isArmed(){return this.armed}setAnchorRow(t){this.anchorRow=t,this.declaredAnchorRow=t}suspendInput(){P6(this)}resumeInput(){M6(this)}setOnSubmit(t){this.onSubmit=t??void 0}setOnCancel(t){this.onCancel=t??void 0}getOnCancel(){return this.onCancel}setOnRewindRequest(t){this.onRewindRequest=t??void 0}setOnOpenEditor(t){this.onOpenEditor=t??void 0}enterPickerMode(t){a6(this,t)}exitPickerMode(){l6(this)}repaintPicker(){c6(this)}terminalRows(){return Math.max(1,this.stdout.rows??24)}setInputMode(t){this.flushPendingRepaint(),u6(this,t)}getInputMode(){return d6(this)}async arm(){return O6(this)}disarm(){D6(this)}setOverlay(t){t!==this.overlay&&(this.debugLog("setOverlay",{framesLen:t.length,anchorRow:this.anchorRow??null}),this.overlay=t,this.repaint())}setSpinner(t){this.stdout.isTTY&&this.spinnerController.set(t)}setActiveToolName(t){this.activeToolName=t}commitAbove(t){this.flushPendingRepaint(),z5(this,t)}clearCommittedBand(){Uu(this)}flushResizeGhostErase(){Y5(this)}resetCommittedBand(){V5(this)}repositionCommittedBand(t,n,r){J5(this,t,n,r)}getBuffer(){return YX(this)}getPendingCount(){return this.pendingSubmissions.length}peekQueuedText(){return i6(this)}reserveQueued(t){r6(this,t)}releaseQueued(t){vM(this,t)}dropQueued(t){return s6(this,t)}getAttachments(){return[...this.attachments]}get caretVisible(){return this.caretBlinkController.visible}renderInputLine(){return C5(this)}updateAutocomplete(){kf(this)}updateGhost(){yM(this)}primePromptGhost(){T5(this)}dismissPromptGhost(){return E5(this)}renderDropdownRows(){return _5(this)}renderHintRow(){return I5(this)}repaint(){this.repaintCount++,this.pendingTrailingRepaint=!1,mk(this)}scheduleRepaint(){if(this.repaintCount++,!this.burstActive){this.burstActive=!0,this.pendingTrailingRepaint=!1,mk(this),queueMicrotask(()=>{this.burstActive=!1,this.flushPendingRepaint()});return}this.pendingTrailingRepaint=!0}flushPendingRepaint(){this.pendingTrailingRepaint&&(this.pendingTrailingRepaint=!1,this.armed&&mk(this))}clearScreen(){this.logUpdate?.resetGeometry?.(),this.stdout.write("\x1B[H\x1B[2J"),this.repaint()}resetState(){F6(this)}applyEdit(t){return k6(this,t)}prefillInput(t){this.applyEdit(z.seed(t))}applyDropdownSelection(){return c5(this)}applyGhostAccept(){return R5(this)}}});import IM from"chalk";function hPe(e){let t=N6[e];if(t)return t;let n=e.lastIndexOf(":");if(n>=0){let r=e.slice(n+1),o=N6[r];if(o)return o}return null}function Go(e,t){if(IM.level===0)return e;let n=t.version?.(),r=n!==void 0;if(r&&H6===t&&B6===e&&U6===IM.level&&j6===n)return W6;let s=e.replace(mPe,a=>{let l=a.slice(1);return t.has(l)?(hPe(l)??m.brand)(a):m.meta(a)}).replace(fPe,a=>m.fileRef(a)).replace(gPe,a=>m.meta(a));return r&&(H6=t,B6=e,U6=IM.level,j6=n,W6=s),s}var mPe,fPe,gPe,N6,B6,U6,j6,H6,W6,Mf=y(()=>{"use strict";B();mPe=/(?<=\s|^)(\/[A-Za-z][\w:-]*)(?=\s|$)/g,fPe=/(?<=\s|^)(@[~\w./-]*)(?=\s|$)/g,gPe=/\[Pasted text #[0-9a-f]+ \+\d+ (?:lines|chars)\]/g,N6={mint:e=>m.mint(e)};B6=null,U6=null,j6=null,H6=null,W6=""});function yPe(){let e=v.AFK_DIFF_LINES;if(e===void 0)return yk;let t=e.trim();if(!/^\d+$/.test(t))return yk;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:yk}function bPe(){let e=v.AFK_SHOW_DIFFS;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"}function SPe(e){let t=m.diffAdd(`+${e.addedLines}`),n=m.diffRemove(`-${e.removedLines}`),r=e.hunks.length,o=m.dim(`across ${r} hunk${r===1?"":"s"}`);return`${t} ${n} ${o}`}function vPe(e){let t=Me(e.text).replace(wPe,"");return e.kind==="+"?m.diffAdd("+ "+t):e.kind==="-"?m.diffRemove("- "+t):m.dim(" "+t)}function qo(e,t,n){if(bPe())return[];if(e.hunks.length===0)return[];let r=t==="overlay"?K6:yPe(),o=t+"|"+n+"|"+r,i=MM.get(e);if(i!==void 0){let f=i.get(o);if(f!==void 0)return f}let s=[];s.push(n+SPe(e));let a=[];for(let f of e.hunks){let g=`@@ -${f.oldStart},${f.oldLines} +${f.newStart},${f.newLines} @@`;a.push({kind:"header",text:m.diffHunk(g)});for(let h of f.lines)a.push({kind:"body",text:vPe(h)})}if(r===0){for(let f of a)s.push(n+f.text);return PM(e,o,s),s}let l=0;for(let f of a)f.kind==="body"&&l++;if(l<=r){for(let f of a)s.push(n+f.text);return PM(e,o,s),s}let c=0;for(let f of a)f.kind==="header"?s.push(n+f.text):c<r&&(s.push(n+f.text),c++);let u=l-r,d=`line${u===1?"":"s"}`,p=t==="flush"?" (set AFK_DIFF_LINES=0 to expand)":"";return s.push(n+m.dim(`\u2026 +${u} more diff ${d}${p}`)),PM(e,o,s),s}function PM(e,t,n){let r=MM.get(e);r===void 0&&(r=new Map,MM.set(e,r)),r.set(t,n)}var K6,yk,wPe,MM,G6=y(()=>{"use strict";N();B();ce();K6=8,yk=30;wPe=/[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;MM=new WeakMap});function is(e,t){return e?ss(t)?m.warning("\u2298"):m.error("\u2717"):m.success("\u2713")}function ss(e){return e!==void 0&&lu.has(e)}function V6(e){return WJ(e)}function kPe(e,t){return e?e==="grep"||e==="Grep"?t===1?"match":"matches":e==="glob"||e==="Glob"?t===1?"path":"paths":t===1?"line":"lines":t===1?"line":"lines"}function zo(e,t,n=60,r){let o=e.isError?ss(e.failureClass)?m.warning:m.error:m.dim,i=t??v.HOME??"___NOHOME___";if(e.display!==void 0&&!e.isError)return o(e.display);if(e.persistedPath){let a=e.persistedPath.startsWith(i)?"~"+e.persistedPath.slice(i.length):e.persistedPath,l=fv()?gv(a,e.persistedPath):a;return o(`saved \u2192 ${l}`)}if(e.lineCount!==void 0&&e.lineCount>1)return o(`${e.lineCount} ${kPe(r,e.lineCount)}`);let s=e.content.length>n?e.content.slice(0,n-3)+"\u2026":e.content;return o(Pe(s))}function za(e){return!e||typeof e.batchSize!="number"||typeof e.batchIndex!="number"||e.batchSize<=1?"":m.dim(` \u2225${e.batchIndex}/${e.batchSize}`)}var Of,q6,z6,as=y(()=>{"use strict";Zm();N();B();EP();Xr();xa();hv();G6();Of=3,q6=2,z6=3});function Df(e,t){if(e.length<=t)return e;let n=e.length-t,r=e.slice(0,n),o=e.slice(n),i=J6(r);return[{kind:"overflow",count:r.length,text:i},...o]}function TPe(e,t){return t<=1||e.endsWith("s")||/(sh|ch|x|z)$/i.test(e)?e:e+"s"}function J6(e){let t=new Map,n=0;for(let i of e)i.kind==="group"?(t.set(i.toolName,(t.get(i.toolName)??0)+i.entries.length),n+=i.entries.length):(t.set(i.toolName,(t.get(i.toolName)??0)+1),n+=1);if(n===0)return"";if(e.length>0&&e.every(i=>ct.has(i.toolName))&&new Set(e.map(i=>i.toolName)).size===1){let i=[],s=!1;for(let a of e){let c=(a.kind==="group"?a.label:a.toolInput).trim();if(!c.startsWith("(")||!c.endsWith(")")){s=!0;break}let u=c.slice(1,-1),d=Pe(u);if(!d){s=!0;break}let p=d.length>Y6?d.slice(0,Y6-1)+"\u2026":d,f=a.kind==="group"?a.entries.length:1;i.push({display:p,entries:f})}if(!s&&i.length>0){let a=i.slice(0,EPe),l=a.map(({display:p,entries:f})=>f>1?`${p} \xD7${f}`:p),c=a.reduce((p,f)=>p+f.entries,0),u=n-c,d=l.join(", ")+(u>0?` (+${u})`:"");return`\u2026 +${n} more: ${d}`}}let o=[];for(let[i,s]of t)o.push(`${s} ${TPe(i,s)}`);return`\u2026 +${n} (${o.join(", ")})`}var EPe,Y6,X6=y(()=>{"use strict";Xr();as();EPe=5,Y6=60});function bk(e,t=Sr()){return e.map((n,r)=>({sibling:n,connector:r===e.length-1?t.lastConnector:t.midConnector}))}function OM(e,t){return t?[...e,{kind:"resultSummary",summary:t}]:e}function DM(e){if(e.length===0)return[];let t=new Map;for(let o of e){let i=Q6(o),s=t.get(i);s||(s=[],t.set(i,s)),s.push(o)}let n=[],r=new Set;for(let o of e){let i=Q6(o),s=t.get(i);s.length>=APe(o.toolName)?r.has(i)||(n.push({kind:"group",toolName:o.toolName,label:ct.has(o.toolName)?o.toolInput:"",entries:s}),r.add(i)):n.push(o)}return n}function xPe(e){let t=e.result?.content??"",n=Uo(Pe(t));return n?ie(n,RPe):""}function $M(e){let t=e.entries.length,n=e.entries.filter(u=>u.result),r=n.filter(u=>u.result.isError),o=n.length,i=r.filter(u=>ss(u.result.failureClass)),s=r.filter(u=>!ss(u.result.failureClass)),a,l="";if(r.length>0){let u=o-r.length,d=[];u>0&&d.push(m.dim(`${u} ok`)),s.length>0&&d.push(m.error(`${s.length} error${s.length===1?"":"s"}`)),i.length>0&&d.push(m.warning(`${i.length} blocked`)),a=d.join(m.dim(", "));let p=s.length>0?s:i,f=s.length>0?m.error:m.warning,g=xPe(p[p.length-1]);g&&(l=m.dim(" \xB7 last: ")+f(g))}else o===t?a=`${t} done`:o===0?a=`${t} running`:a=`${o}/${t} done`;let c=jo(e.toolName+e.label);return r.length>0?c+m.dim(` \xD7${t} \u2014 `)+a+l:c+m.dim(` \xD7${t} \u2014 ${a}`)}function Q6(e){return ct.has(e.toolName)?e.toolName+"::"+e.toolInput:e.toolName}function APe(e){return ct.has(e)?q6:z6}var RPe,FM=y(()=>{"use strict";B();Xr();ce();as();hv();xa();qu();X6();RPe=40});function Z6(e,t,n,r){return e>0||t?zu([...n,!0],r):zu(n,r)}function e8(e,t){return!ct.has(e.toolName)||e.headerEmitted!==!0?!1:(t.get(e.toolUseId)??[]).every(r=>r.kind==="tool"&&e8(r,t))}function Sk(e,t,n,r=Yn(),o=[],i=Sr(),s){let a=zu(o,i),l=$f(a,i),c=e.filter(h=>h.kind==="text"),u=e.filter(h=>h.kind==="tool").filter(h=>!e8(h,t)),d=DM(u),p=Df(d,Of),f=bk(p,i);for(let{sibling:h,connector:b}of f){let S=m.dim(b),w=b===i.lastConnector;if(h.kind==="overflow")n.push(Ae(l+S+m.dim(h.text),r));else if(h.kind==="group")n.push(Ae(l+S+$M(h),r));else if(h.kind==="resultSummary")n.push(Ae(l+S+h.summary,r));else{let k=h,T=t.get(k.toolUseId);if(ct.has(k.toolName)&&T&&T.length>0){k.headerEmitted?n.push(Ae(l+S,r)):n.push(Ae(l+S+k.prefix,r));let E=s??w;if(Sk(T,t,n,r,[...o,E],i,w),k.thinkingTail){let R=$f(zu([...o,E],i),i);n.push(Ae(R+m.thinking("\u2307 "+Pe(k.thinkingTail)),r))}}else if(!(ct.has(k.toolName)&&k.headerEmitted))if(k.result){if(n.push(Ae(l+S+k.prefix+m.dim(" \u2014 ")+is(k.result.isError,k.result.failureClass)+" "+zo(k.result,void 0,60,k.toolName),r)),k.diff&&!k.result.isError){let E=l+(w?i.spineClosed:m.dim(i.spine))+" ";for(let R of qo(k.diff,"overlay",E))n.push(Ae(R,r))}}else{n.push(Ae(l+S+k.prefix+m.dim(" \u2026")+Ba(k.startedAt),r));let E=l+(w?i.spineClosed:m.dim(i.spine))+" ";k.thinkingTail?n.push(Ae(E+m.thinking("\u2307 "+Pe(k.thinkingTail)),r)):n.push(Ae(E+m.dim(V6(k.toolName)),r))}}}let g=Z6(u.length,!1,o,i);for(let h of c)for(let b of NM(h.text,g,i))n.push(Ae(b,r))}function Ff(e,t,n,r,o=Yn(),i=[],s=Sr(),a){let l=zu(i,s),c=$f(l,s),u=[],d=e.filter(w=>w.kind==="text"),p=e.filter(w=>w.kind==="tool"),f=DM(p),g=Df(f,Of),h=OM(g,r),b=bk(h,s);for(let{sibling:w,connector:k}of b){let T=m.dim(k),E=k===s.lastConnector;if(w.kind==="overflow")u.push(Ae(c+T+m.dim(w.text),o));else if(w.kind==="resultSummary")u.push(Ae(c+T+w.summary,o));else if(w.kind==="group")u.push(Ae(c+T+$M(w),o));else{let R=w,I=t.get(R.toolUseId);if(ct.has(R.toolName)&&I&&I.length>0){if(R.headerEmitted){let x=R.toolInput?`${R.toolName} ${Pe(R.toolInput)}`:R.toolName;u.push(Ae(c+T+m.dim("\u21B3 "+x),o))}else u.push(Ae(c+T+R.prefix,o));let C=a??E;u.push(...Ff(I,t,n,void 0,o,[...i,C],s,E))}else if(R.result){if(u.push(Ae(c+T+R.prefix+m.dim(" \u2014 ")+is(R.result.isError,R.result.failureClass)+" "+zo(R.result,n,60,R.toolName),o)),R.diff&&!R.result.isError){let C=c+(E?s.spineClosed:m.dim(s.spine))+" ";for(let x of qo(R.diff,"flush",C))u.push(Ae(x,o))}}else u.push(Ae(c+T+R.prefix,o))}}let S=Z6(p.length,r!=null,i,s);for(let w of d)for(let k of NM(w.text,S,s))u.push(Ae(k,o));return u}var LM=y(()=>{"use strict";B();Xr();Vn();as();qu();FM()});function t8(e){return e.agentResultSummary?m.dim(e.agentResultSummary)+za(e.result):e.agentResultSummary}function Lf(e,t,n,r,o=[]){let i=Sr(),s=t.filter(b=>b.kind==="tool"),l=s.filter(b=>b.result).reduce((b,S)=>b+(S.result.lineCount??0),0),c=[];s.length>Of&&(c.push(Ki(s.length)),l>0&&c.push(`${l} lines`));let u=m.dim(i.spine.repeat(o.length)),d=o,p=m.dim(i.turnRoot),f=Yn(),g=Ae(c.length>0?u+p+e.prefix+m.dim(" \u2014 "+c.join(" \xB7 ")):u+p+e.prefix,f),h=Ff(t,n,r,t8(e),f,d,i);return[g,...h].join(`
|
|
1690
1690
|
`)}function BM(e,t=[]){let n=Sr(),r=m.dim(n.spine.repeat(t.length)),o=m.dim(n.turnRoot);return Ae(r+o+e.prefix,Yn())}function Nf(e,t,n,r,o=[]){let i=Sr(),s=o;return Ff(t,n,r,t8(e),Yn(),s,i)}var n8=y(()=>{"use strict";B();dt();as();qu();LM()});function CPe(e,t){let n=e.filter(a=>a.result),r=n.filter(a=>a.result.isError),o=r.filter(a=>ss(a.result.failureClass)),i=r.filter(a=>!ss(a.result.failureClass));if(r.length>0){let a=n.length-r.length,c=n.filter(d=>!d.result.isError).map(d=>d.result.lineCount).filter(d=>d!==void 0).reduce((d,p)=>d+p,0),u=[];return c>0&&u.push(`${c} lines`),a>0&&u.push(`${a} ok`),i.length>0&&u.push(m.error(`${i.length} error${i.length>1?"s":""}`)),o.length>0&&u.push(m.warning(`${o.length} blocked`)),m.dim(" \u2014 ")+u.join(m.dim(", "))}let s=n.map(a=>a.result?.lineCount).filter(a=>a!==void 0);if(s.length===n.length&&s.length>0){if(s.every(c=>c===s[0]))return m.dim(` \u2014 ${s[0]} lines each`);let l=s.reduce((c,u)=>c+u,0);return m.dim(` \u2014 ${l} lines total`)}if(n.length>0){let a=n.map(l=>zo(l.result,t,60,l.toolName));return m.dim(" \u2014 ")+a.join(m.dim(", "))}return""}function r8(e,t,n,r){let{color:o,glyph:i}=bu(e),s=" "+o(i+" ")+o.bold(e)+m.dim(` \xD7${t.length}`)+" ",a=CPe(t,r),l=t.map(d=>Uo(Pe(d.toolInput)).trim()).join(", "),c=Math.max(0,n-J(s)-J(a)),u=ie(m.toolArg(l),c);return Ae(s+u+a,n)}function Vu(e,t,n){let r=[],o=Yn();for(let i of t){let s=e.get(i);if(s.length===1){let a=s[0];if(a.result){if(r.push(Ae(" "+a.prefix+m.dim(" \u2014 ")+is(a.result.isError,a.result.failureClass)+" "+zo(a.result,n,60,a.toolName)+za(a.result),o)),a.diff&&!a.result.isError)for(let l of qo(a.diff,"flush"," "))r.push(Ae(l,o))}else r.push(Ae(" "+a.prefix,o))}else{r.push(r8(i,s,o,n));let a=s.filter(c=>c.diff&&c.result&&!c.result.isError),l=a.length>1;for(let c of a){if(l){let u=Pe(c.toolInput),d=Uo(u).trim()||u.trim();r.push(Ae(" "+m.dim(`\u2500\u2500 ${d} \u2500\u2500`),o))}for(let u of qo(c.diff,"flush"," "))r.push(Ae(u,o))}}}return r}var o8=y(()=>{"use strict";ce();B();Xr();as();qu()});function Ae(e,t){return ie(e,t)}function Yn(){return $t(te())}function UM(e,t,n,r,o){let i={kind:"tool",toolUseId:e,toolName:t,toolInput:n,prefix:r,startedAt:Date.now()};return o!==void 0&&(i.agentContext=o),i}function Sr(){let e=v.AGENT_AFK_ASCII;return e&&/^(1|true|yes)$/i.test(e)?_Pe:jM}function zu(e,t){let n="";for(let r of e)n+=r?t.spineClosed:t.spine;return n+=t.spine,n}function $f(e,t){let n="";for(let r=0;r<e.length;r+=2){let o=e.slice(r,r+2);n+=o===t.spine?m.dim(o):o}return n}function NM(e,t,n){if(!e||!e.trim())return[];let r=m.dim(n.textPrefix),o=Math.max(1,Yn()-t.length-2-2),i=$f(t,n),s=[];for(let a of e.split(`
|
|
1691
1691
|
`)){let l=RP(a),c=le(l,o);for(let u of c.split(`
|
|
1692
1692
|
`))s.push(i+r+u)}return s}var jM,_Pe,i_t,s_t,qu=y(()=>{"use strict";N();B();ye();Ye();ce();Vi();as();FM();LM();n8();o8();jM=Object.freeze({spine:"\u2502 ",spineClosed:" ",lead:" ",turnRoot:"\u25C9 ",midConnector:"\u251C\u2500 ",lastConnector:"\u2570\u2500 ",textPrefix:"\u2502 "}),_Pe=Object.freeze({spine:"| ",spineClosed:" ",lead:" ",turnRoot:"o ",midConnector:"+- ",lastConnector:"\\- ",textPrefix:"| "}),i_t=jM.midConnector,s_t=jM.lastConnector});var i8,Bf,wk=y(()=>{"use strict";B();Xr();as();ce();Vn();qu();i8=6,Bf=class{entries=new Map;order=[];agentIdStack=[];lastElapsedSecond=new Map;addStart(t,n,r){let o=Me(r),i=jo(n+o),s=this.agentIdStack.at(-1)??void 0,a=UM(t,n,o,i,s);this.entries.set(t,a),this.order.push(t),Pi.has(n)&&this.agentIdStack.push(t)}addStartWithAgentContext(t,n,r,o,i){let s=Me(r),a=this.entries.get(t);if(a?.kind==="tool"){a.toolInput=s,a.prefix=jo(n+s,i),o!==void 0&&(a.agentContext=o);return}let l=jo(n+s,i),c=UM(t,n,s,l,o);this.entries.set(t,c),this.order.push(t)}mergeAgentLabel(t,n,r){let o=this.entries.get(t);if(o?.kind!=="tool"||!Pi.has(o.toolName)||o.toolName==="Agent")return!1;let s=`(${Me(n)})`;return o.toolName="Agent",o.toolInput=s,o.prefix=jo("Agent"+s,r),!0}setAgentContext(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.agentContext:r.agentContext=n)}setAgentResultSummary(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.agentResultSummary=n)}setThinkingTail(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.thinkingTail:r.thinkingTail=n)}addResult(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.result=n),this.agentIdStack.at(-1)===t&&this.agentIdStack.pop()}addDiff(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.diff=n)}upsertTextChild(t,n,r){let o=this.entries.get(t);if(o?.kind==="text"){o.text=r,o.agentContext=n;return}let i={kind:"text",toolUseId:t,text:r,agentContext:n};this.entries.set(t,i),this.order.push(t)}removeTextChildrenUnder(t){let n=[];for(let[r,o]of this.entries)o.kind==="text"&&o.agentContext===t&&n.push(r);for(let r of n)this.entries.delete(r);if(n.length>0){let r=new Set(n);this.order=this.order.filter(o=>!r.has(o))}}checkElapsedDisplayNeedsUpdate(){let t=Date.now(),n=!1;for(let r of this.lastElapsedSecond.keys()){let o=this.entries.get(r);(!o||o.kind!=="tool"||o.result!==void 0)&&this.lastElapsedSecond.delete(r)}for(let r of this.order){let o=this.entries.get(r);if(!o||o.kind!=="tool"||o.result!==void 0)continue;let i=t-o.startedAt;if(i<nM)continue;let s=Math.floor(i/1e3),a=this.lastElapsedSecond.get(r);(a===void 0||s!==a)&&(this.lastElapsedSecond.set(r,s),n=!0)}return n}hasPending(){return this.entries.size>0}hasEntry(t){return this.entries.get(t)?.kind==="tool"}findLastSkillEntryId(){for(let t=this.order.length-1;t>=0;t--){let n=this.order[t],r=this.entries.get(n);if(r?.kind==="tool"&&Sm.has(r.toolName))return n}}peekTrailingCompletedRootToolName(){for(let t=this.order.length-1;t>=0;t--){let n=this.order[t],r=this.entries.get(n);if(!(!r||r.kind!=="tool")&&!r.agentContext)return r.result===void 0||ct.has(r.toolName)?void 0:r.toolName}}getOverlay(){let t=this.buildChildMap(),n=[],r=Sr(),o=Yn(),i=d=>ie(d,o),s=[];for(let d of this.order){let p=this.entries.get(d);!p||p.kind!=="tool"||p.agentContext||s.push(p)}let a=s,l=0;if(s.length>i8){let d=s.filter(h=>!h.result),p=s.filter(h=>h.result),f=Math.max(0,i8-d.length),g=new Set(p.slice(-f));l=p.length-g.size,a=s.filter(h=>!h.result||g.has(h))}let u=a.some(d=>ct.has(d.toolName))?m.dim(r.turnRoot):" ";for(let d of a){let p=t.get(d.toolUseId);if(ct.has(d.toolName)&&p&&p.length>0)d.headerEmitted?n.push(i(m.dim(r.turnRoot))):n.push(i(m.dim(r.turnRoot)+d.prefix)),Sk(p,t,n,o,void 0,r),d.thinkingTail&&n.push(i(m.dim(r.spine)+m.thinking("\u2307 "+Pe(d.thinkingTail))));else if(!(ct.has(d.toolName)&&d.headerEmitted))if(ct.has(d.toolName))d.result?n.push(i(m.dim(r.turnRoot)+d.prefix+m.dim(" \u2014 ")+is(d.result.isError,d.result.failureClass)+" "+zo(d.result,void 0,60,d.toolName)+za(d.result))):n.push(i(m.dim(r.turnRoot)+d.prefix+m.dim(" \u2026")+Ba(d.startedAt))),d.thinkingTail&&n.push(i(m.dim(r.spine)+m.thinking("\u2307 "+Pe(d.thinkingTail))));else if(d.result){if(n.push(i(u+d.prefix+m.dim(" \u2014 ")+is(d.result.isError,d.result.failureClass)+" "+zo(d.result,void 0,60,d.toolName)+za(d.result))),d.diff&&!d.result.isError)for(let f of qo(d.diff,"overlay"," "))n.push(i(f))}else n.push(i(u+d.prefix+m.dim(" \u2026")+Ba(d.startedAt))),d.thinkingTail&&n.push(i(m.dim(r.spine)+m.thinking("\u2307 "+Pe(d.thinkingTail))))}return l>0&&n.push(i(" "+m.dim(`\u2026 +${l} done`))),n.join(`
|
|
@@ -1909,7 +1909,7 @@ _ended: ${new Date().toISOString()}_
|
|
|
1909
1909
|
`;if(ol!==null&&ol<og-1){let s=await OO(t,DO|$O|cZ|FO,384);try{await s.writeFile(r)}finally{await s.close()}ol++;return}let o=await _Fe(t).catch(()=>null);if(o&&o.size>5*1024*1024){process.stderr.write(`[afk] history file exceeds 5MB cap (${o.size} bytes); skipping write
|
|
1910
1910
|
`);return}let i=[];try{let s=await dZ(t,"utf8");i=kt(s,{guard:pZ})}catch{}if(ol=i.length,i.length<og-1){let s=await OO(t,DO|$O|cZ|FO,384);try{await s.writeFile(r)}finally{await s.close()}ol++}else{let s=i.slice(-(og-1));s.push(n);let a=s.map(c=>JSON.stringify(c)).join(`
|
|
1911
1911
|
`)+`
|
|
1912
|
-
`,l=await OO(t,DO|$O|PFe|FO,384);try{await l.writeFile(a)}finally{await l.close()}ol=og}})}rk();async function fZ(e){if(e.initialBuffer!==void 0&&e.initialBuffer.length>0)return{text:e.initialBuffer,attachments:[]};let t=null;if(e.onSigint){let n=e.onSigint;t=()=>n(),process.on("SIGINT",t)}try{return{text:await
|
|
1912
|
+
`,l=await OO(t,DO|$O|PFe|FO,384);try{await l.writeFile(a)}finally{await l.close()}ol=og}})}rk();async function fZ(e){if(e.initialBuffer!==void 0&&e.initialBuffer.length>0)return{text:e.initialBuffer,attachments:[]};let t=null;if(e.onSigint){let n=e.onSigint;t=()=>n(),process.on("SIGINT",t)}try{return{text:await s5({rl:e.rl,promptFn:e.promptFn}),attachments:[]}}finally{t&&process.removeListener("SIGINT",t)}}gk();Ft();ce();hk();rn();Mf();Ha();La();import*as ud from"ansi-escapes";import NFe from"string-width";var $Fe="\x1B[?2004h",FFe="\x1B[?2004l";function gZ(e,t){let n=e.isRaw;e.setRawMode(!0),e.resume(),t.write($Fe);let r=!1;return{restore(){if(!r){r=!0;try{t.write(FFe)}catch{}try{e.setRawMode(n)}catch{}}}}}function QT(){let e={dropdownOpen:!1,candidates:[],selectedIndex:0,viewportStart:0,suppressedSignature:null,trigger:null,reset(){e.dropdownOpen=!1,e.candidates=[],e.selectedIndex=0,e.viewportStart=0,e.suppressedSignature=null,e.trigger=null}};return e}ye();ce();Mf();Ha();bM();La();wf();import*as il from"ansi-escapes";import hZ from"string-width";function ig(e,t){let{stdout:n,promptText:r,promptVisibleLen:o,slashRegistryView:i,historyGetEntries:s}=t;if((e.prevStatusRows>0||e.prevBufferRows>0)&&n.write(il.cursorUp(e.prevStatusRows+e.prevBufferRows)),n.write("\r"),n.write(il.eraseDown),e.attachments.length>0)n.write(Af(e.attachments)+`
|
|
1913
1913
|
`),e.prevStatusRows=1;else if(e.clipboardFailureMsg!==null){let f=e.clipboardFailureMsg;e.clipboardFailureMsg=null,n.write(f+`
|
|
1914
1914
|
`),e.prevStatusRows=1}else e.prevStatusRows=0;n.write(r+Go(e.input.buffer,i)),e.ac.trigger=Nu(e.input.buffer,e.input.cursor);let a=`${e.input.cursor}:${e.input.buffer}`;e.ac.suppressedSignature!==null&&e.ac.suppressedSignature!==a&&(e.ac.suppressedSignature=null),e.ac.trigger&&e.ac.suppressedSignature===null?(e.ac.trigger.kind==="slash"?e.ac.candidates=Sf(e.ac.trigger.query,s?.()??[]).slice(0,12):e.ac.trigger.kind==="file"?e.ac.candidates=pM(e.ac.trigger.query):e.ac.candidates=Bu(e.ac.trigger.command,e.ac.trigger.query),e.ac.dropdownOpen=e.ac.candidates.length>0):(e.ac.dropdownOpen=!1,e.ac.candidates=[]),e.ac.selectedIndex>=e.ac.candidates.length&&(e.ac.selectedIndex=Math.max(0,e.ac.candidates.length-1)),e.ac.viewportStart>e.ac.selectedIndex&&(e.ac.viewportStart=e.ac.selectedIndex),e.ac.selectedIndex>=e.ac.viewportStart+e.maxDropdownRows&&(e.ac.viewportStart=e.ac.selectedIndex-e.maxDropdownRows+1);let l=n.columns||80;if(e.rowsBelow=0,e.ac.dropdownOpen&&l>40){let f=Math.min(l-4,60),g=Math.min(e.ac.candidates.length-e.ac.viewportStart,e.maxDropdownRows);for(let S=0;S<g;S++){let w=e.ac.viewportStart+S,k=lk(e.ac.candidates[w],w===e.ac.selectedIndex,f,e.ac.trigger?.kind);n.write(`
|
|
1915
1915
|
`+k);let T=hZ(Me(k));e.rowsBelow+=Math.max(1,Math.ceil(T/l))}let h=Math.min(l-4,80),b=ck(e.ac.candidates[e.ac.selectedIndex]?.hint,h);if(b!==null){n.write(`
|
|
@@ -1923,7 +1923,7 @@ _ended: ${new Date().toISOString()}_
|
|
|
1923
1923
|
`),S(),p(E),h.prevBufferRows=0},T=()=>{S(),d({text:"",attachments:[...h.attachments]}),h.prevBufferRows=0};c=(E,R)=>{IZ(E,R,h,{opts:e,stdout:n,repaintCtx:b,callbacks:{onSubmit:w,onAbort:k,onEof:T},pasteWindowMs:g},ig,yZ,bZ)},ig(h,b),u=Ne.subscribe(()=>{h.prevBufferRows=0,h.prevStatusRows=0,h.rowsBelow=0,ig(h,b)}),t.on("keypress",c)})}finally{e.statusLine?.setExtraRows(s),o.restore(),i?.release()}}N();wf();La();async function MZ(e){return!process.stdout.isTTY||!process.stdin.isTTY||Fe()?fZ(e):PZ(e)}_M();Mf();Xi();Ft();La();Ha();Qu();N();var eE=class{history;autocompleteState;rl;statusLine;compositor=null;armedStdout=null;backgroundHandler=null;softStopHandler=null;pauseInterruptHandler=null;pendingReadReject=null;pendingReadResolve=null;slashRegistryView=Pu();constructor(t){this.rl=t.rl,this.history=t.history,this.statusLine=t.statusLine,this.autocompleteState=QT()}async armCompositor(t){if(this.compositor)return;let n=t.stdout??process.stdout,r=t.stdin??process.stdin;if(!n.isTTY||!r.isTTY||Fe())return;let o=new Gu({stdout:n,stdin:r,promptText:t.promptFn,onCancel:t.onCancel,onSoftStop:()=>{this.softStopHandler?.()},onBackground:()=>{this.backgroundHandler?.()},onPauseInterrupt:()=>{this.pauseInterruptHandler?.()},...t.onShiftTab?{onShiftTab:t.onShiftTab}:{},...t.onOpenEditor?{onOpenEditor:t.onOpenEditor}:{},history:this.history,autocompleteState:this.autocompleteState,formatInputBuffer:i=>Go(i,this.slashRegistryView),caretBlink:rX()&&!Bv(),captureMode:Nv(),goblinSpinner:Uv(),...t.scrollRegion?{scrollRegion:t.scrollRegion}:{},...t.anchorRow!==void 0?{anchorRow:t.anchorRow}:{},...t.suggest?{suggest:t.suggest}:{}});await o.arm(),o.setInputMode("idle"),o.setOnRewindRequest(()=>{this.requestRewind()}),this.compositor=o,this.armedStdout=n}async dispose(){if(this.compositor){if(this.pendingReadReject){this.compositor.setOnSubmit(null);let t=this.pendingReadReject;this.pendingReadReject=null,this.pendingReadResolve=null,t(new Error("InputSurface disposed while readLine was in progress"))}try{this.compositor.disarm()}catch{}this.compositor=null,this.armedStdout=null,this.backgroundHandler=null,this.softStopHandler=null,this.pauseInterruptHandler=null}}getCompositor(){return this.compositor}setBackgroundHandler(t){this.backgroundHandler=t}setSoftStopHandler(t){this.softStopHandler=t}setPauseInterruptHandler(t){this.pauseInterruptHandler=t}setPausedState(t){this.compositor&&(this.compositor.paused=t)}suspendForElicitation(){this.compositor?.suspendInput()}resumeAfterElicitation(){this.compositor?.resumeInput()}async readLine(t){if(this.compositor&&this.compositor.isArmed()){let n=this.compositor;return new Promise((r,o)=>{this.pendingReadReject=o,this.pendingReadResolve=r,t.primePromptSuggestion===!0&&n.primePromptGhost();let i=s=>{n.setOnSubmit(null),this.pendingReadReject=null,this.pendingReadResolve=null;let a=this.armedStdout??process.stdout,l=s.displayText??s.text,c=Fa({buffer:Go(l,this.slashRegistryView),promptText:t.promptFn(),isTTY:!!a.isTTY,attachmentSummary:ju([...s.attachments])});gn(n,c.split(`
|
|
1924
1924
|
`)),r({text:s.text,attachments:[...s.attachments]})};n.setOnSubmit(i),t.initialBuffer!==void 0&&t.initialBuffer.length>0&&n.prefillInput(t.initialBuffer),n.setInputMode("idle"),n.repaint()})}return MZ({rl:this.rl,promptFn:t.promptFn,...t.initialBuffer!==void 0?{initialBuffer:t.initialBuffer}:{},...t.onSigint?{onSigint:t.onSigint}:{},...t.onShiftTab?{onShiftTab:t.onShiftTab}:{},...t.compositor?{compositor:t.compositor}:{},history:this.history,autocompleteState:this.autocompleteState,...this.statusLine?{statusLine:this.statusLine}:{}})}isAwaitingInput(){return this.pendingReadResolve!==null}bufferIsEmpty(){let t=this.compositor?.getBuffer();return t?t.text.length===0&&!t.queued:!0}abortPendingRead(){if(!this.pendingReadResolve)return;this.compositor?.setOnSubmit(null);let t=this.pendingReadResolve;this.pendingReadReject=null,this.pendingReadResolve=null,t({text:"",attachments:[]})}requestRewind(){if(!this.pendingReadResolve)return!1;this.compositor?.setOnSubmit(null);let t=this.pendingReadResolve;return this.pendingReadReject=null,this.pendingReadResolve=null,t({text:"/rewind",attachments:[]}),!0}toRunTurnRefs(t){return{history:this.history,autocompleteState:this.autocompleteState,promptText:t}}};N();ak();jr();cs();dO();ue();K0();B();var jO=["default","plan","bypassPermissions"];function BFe(e,t){switch(t){case"plan":e.out.success(m.warning("\u25CF plan mode ON")+m.dim(" \u2014 writes refused; read-only bash runs, mutating bash blocked."));return;case"bypassPermissions":e.out.line(m.bypass("\u26A1 bypass ON")+m.dim(" \u2014 path-approval prompts + containment OFF; read/write any path. (Does not affect ask_question.)"));return;case"default":e.out.success(m.success("\u25CB default")+m.dim(" \u2014 path containment + approval prompts restored."));return}}async function tE(e){let t=e.stats.permissionMode;if(t==="autonomous"){await Jf(e,!1);return}let n=jO.indexOf(t),r=jO[(n+1)%jO.length]??"default";try{await e.session.current.setPermissionMode(r),e.stats.permissionMode=r,e.ui.repaintStatusLine(),BFe(e,r)}catch(o){e.out.error(`Could not switch permission mode: ${o instanceof Error?o.message:String(o)}`)}}nO();B();em();to();B();function dd(e){let t=m.brand("afk"),n=e==="plan"?m.warning(" \u25CF"):e==="autonomous"?m.info(" \u25D0"):e==="bypassPermissions"?m.bypass(" \u26A1 bp"):"";return t+n+m.brand(" \u203A ")}function OZ(e){let t,n=e.history;if(n&&typeof n.push=="function"){let r=n.push.bind(n);n.push=o=>{let i=n.getEntries?.()?.[0];r(o);let s=n.getEntries?.()?.[0];s!==i&&(t=s)}}return{getLastSubmitted:()=>t}}N();function DZ(e){if(!e.enabled)return{};let{engine:t,surface:n,stats:r,historyTracker:o}=e;return{suggest:{engine:t,getContext:()=>({model:r.model,apiKey:e.apiKey,baseUrl:e.baseUrl,cwd:r.cwd??process.cwd(),getHistory:()=>{let i=n.history;return i.getEntries?[...i.getEntries()]:[]},get lastSubmitted(){return o.getLastSubmitted()},getDropdownTopCandidate:i=>{let a=n.autocompleteState.candidates[0];return a&&a.value.startsWith(i)&&a.value.length>i.length?a.value:null},getTranscriptTail:()=>{let i=r.turns;return i.length===0?"":i.slice(-2).reverse().map(s=>`user: ${s.user}
|
|
1925
1925
|
assistant: ${s.assistant}`).join(`
|
|
1926
|
-
`)},getUserArc:()=>r.turns.map(i=>i.user),getLastAssistantResponse:()=>r.turns[r.turns.length-1]?.assistant??"",getRecentCommands:()=>{let i=n.history;return i.getEntries?[...i.getEntries()]:[]},llmEnabled:()=>/^(1|true|yes|on)$/i.test(v.AFK_SUGGEST_ENABLED??""),promptSuggestEnabled:()=>/^(1|true|yes|on)$/i.test(v.AFK_SUGGEST_PROMPT??"")})}}}async function $Z(e,t,n,r,o,i,s){let a=
|
|
1926
|
+
`)},getUserArc:()=>r.turns.map(i=>i.user),getLastAssistantResponse:()=>r.turns[r.turns.length-1]?.assistant??"",getRecentCommands:()=>{let i=n.history;return i.getEntries?[...i.getEntries()]:[]},llmEnabled:()=>/^(1|true|yes|on)$/i.test(v.AFK_SUGGEST_ENABLED??""),promptSuggestEnabled:()=>/^(1|true|yes|on)$/i.test(v.AFK_SUGGEST_PROMPT??"")})}}}async function $Z(e,t,n,r,o,i,s){let a=k5({onError:g=>F("[afk suggest] Tier-2 completion failed:",g)}),l=OZ(t);await t.armCompositor({promptFn:()=>dd(e.stats.permissionMode),onCancel:o,onShiftTab:()=>{tE(e.slashCtx).catch(()=>{}),e.statusLine.rearm()},onOpenEditor:()=>{let g=t.getCompositor();xT({compositor:g,notify:(h,b)=>{let S=h==="error"?m.error(b):h==="warn"?m.warning(b):m.dim(b);g?.commitAbove(S)},suspendFooter:()=>e.slashCtx.suspendFooter?.(),resumeFooter:()=>e.slashCtx.resumeFooter?.()}).catch(()=>{})},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{},...DZ({enabled:i,engine:a,surface:t,stats:e.stats,apiKey:e.suggestApiKey,baseUrl:e.suggestBaseUrl,historyTracker:l})});let c=t.getCompositor(),u=zf({readLine:g=>t.readLine({promptFn:()=>g}).then(h=>h.text),writer:{line:(g="")=>{let h=t.getCompositor();h?h.commitAbove(g):process.stdout.write(g+`
|
|
1927
1927
|
`)}},pendingCount:()=>Je.pendingCount(),...c?{pickFromList:g=>hn(c,g),readTextOverlay:g=>PT(c,g)}:{}});Je.install(u),e.replRenderer.setCompositor(t.getCompositor()),e.slashCtx.getCompositor=()=>t.getCompositor();let d=t.getCompositor();if(d){let g=h=>d.commitAbove(h);e.completionWriter.fn=g,e.completionWriter.idleFn=g}let p=g=>{t.setSoftStopHandler(g),n.requestSoftStop=g};e.slashCtx.setSoftStopHandler=p,e.slashCtx.onStageChange=(g,h)=>{s.getLoopStageBar()?.repaint(g),s.getMascotBar()?.onStage(g,h)};let f=(()=>{let g=parseInt(e.options.maxTurns,10);return g>0?g:void 0})();return e.slashCtx.onContextProgress=async()=>{await e.contextSampler.refresh(),await e.gitStatusSampler.refresh(),e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,f))},e.slashCtx.transcript=r,e.slashCtx.stdinElicitationHandler=u,e.slashCtx.swapElicitationHandler=g=>Je.install(g??u),e.inputSurfaceRef&&(e.inputSurfaceRef.current=t),e.gitStatusSampler.setOnUpdate(()=>{e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,f))}),e.gitStatusSampler.refresh(),SH(()=>{e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,f))}),{installSoftStop:p}}G0();ye();function FZ(e={}){let t=e.load??ST,n=e.onResize??(s=>Ne.subscribe(s)),r="",o,i=n(()=>{r=""});return{renderIfChanged(s){let a=s??"unbound",l=t(a),c=H9(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:wT(l))},invalidate(){r=""},dispose(){try{i()}catch{}}}}B();ce();ye();N();var HO={done:{glyph:"\u2713",color:e=>m.success(e),label:"done"},blocked:{glyph:"\u2298",color:e=>m.error(e),label:"blocked"},asking:{glyph:"?",color:e=>m.warning(e),label:"asking"},interrupted:{glyph:"\u23F8",color:e=>m.meta(e),label:"interrupted"}};function LZ(e={}){let t=Math.max(2,e.capacity??8),n=[],r=null,o=()=>0,i=!1,s=0,a,l=null;function c(){let g=r?.rows;return typeof g=="number"&&g>0?g:24}function u(g){let h=o();return Math.max(1,g-1-h)}function d(){if(!i||!r?.isTTY)return;let g=f(),h=c(),b=g!==null&&h>1?1:0;if(b!==s&&(s>0&&p(),s=b,a?.(s)),b===0)return;let S=u(h);r.write("\x1B[s"),r.write(`\x1B[${S};1H`),r.write("\x1B[2K"),r.write(g),r.write("\x1B[u")}function p(){if(!r?.isTTY)return;let g=c(),h=u(g);r.write("\x1B[s"),r.write(`\x1B[${h};1H`),r.write("\x1B[2K"),r.write("\x1B[u")}function f(){if(n.length===0)return null;let g=m.dim(" ledger "),h=m.dim(" \xB7 "),b=n.map(E=>{let R=HO[E];return R.color(`${R.glyph} ${R.label}`)}),S=m.dim(` (${n.length} turn${n.length===1?"":"s"})`),w=g+b.join(h)+S,k=Math.max(20,te()-2);if(J(w)<=k)return w;let T=g+n.map(E=>HO[E].color(HO[E].glyph)).join(m.dim(" "))+S;return ie(T,k)}return{push(g){n.push(g.kind),n.length>t&&(n=n.slice(n.length-t)),d()},reset(){n=[],i&&s>0&&(p(),s=0,a?.(0))},entries(){return n},render(){return f()},setRowCountChangeHandler(g){a=g},start(g){i||Fe()||(i=!0,r=g.stream??process.stdout,o=g.getAdjacentRows??(()=>0),s=0,l=Ne.subscribe(()=>d()),d())},stop(){i&&(i=!1,l!==null&&(l(),l=null),s>0&&(p(),s=0,a?.(0)),r=null)},repaint(){d()}}}ce();B();dt();ye();N();var NZ=["\u25D0","\u25D1","\u25D2","\u25D3"],nE=class{stream;registry;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;resizeImmediateUnsub=null;registryStartedHandler=null;registrySettledHandler=null;rowCount=0;lastPaintStartRow=0;preResizeStartRow=null;preResizeRowCount=null;onRowCountChange;getAdjacentRows;constructor(t,n={}){this.registry=t,this.stream=n.stream??process.stdout,this.throttleMs=n.throttleMs??200,this.getAdjacentRows=n.getAdjacentRows??(()=>0)}setRowCountChangeHandler(t){this.onRowCountChange=t}start(){this.started||Fe()||(this.started=!0,this.registry&&(this.registryStartedHandler=t=>{this.scheduleRepaint()},this.registrySettledHandler=t=>{this.scheduleRepaint()},this.registry.on("started",this.registryStartedHandler),this.registry.on("settled",this.registrySettledHandler)),this.resizeUnsub=Ne.subscribe(()=>this.repaint()),this.resizeImmediateUnsub=Ne.subscribeImmediate(()=>this.resetGeometry()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%NZ.length,this.rowCount>0&&this.repaint()},Math.max(this.throttleMs,50)))}stop(){this.started&&(this.started=!1,this.registry&&(this.registryStartedHandler&&(this.registry.off("started",this.registryStartedHandler),this.registryStartedHandler=null),this.registrySettledHandler&&(this.registry.off("settled",this.registrySettledHandler),this.registrySettledHandler=null)),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.resizeImmediateUnsub&&(this.resizeImmediateUnsub(),this.resizeImmediateUnsub=null),this.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.rowCount>0&&(this.clearRows(),this.rowCount=0,this.onRowCountChange?.(0)))}resetGeometry(){this.rowCount>0&&(this.preResizeStartRow=this.lastPaintStartRow,this.preResizeRowCount=this.rowCount),this.rowCount=0,this.lastRepaint=0}scheduleRepaint(){Date.now()-this.lastRepaint<this.throttleMs||this.repaint()}redraw(){this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=(this.registry?.list()??[]).filter(s=>s.status==="running").map(s=>({kind:"subagent",job:s})),n=this.stream.rows??24,r=this.getAdjacentRows(),o=Math.max(0,Math.min(t.length,n-1-r));if(this.clearPreResizeRows(),o!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=o,this.onRowCountChange?.(o)),o===0)return;let i=Math.max(1,n-o-r);this.lastPaintStartRow=i,this.stream.write("\x1B[s");for(let s=0;s<o;s++){let a=t[s],l=i+s;this.stream.write(`\x1B[${l};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatItemLine(a))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=this.getAdjacentRows(),r=Math.min(this.rowCount,t-1-n),o=Math.max(1,t-r-n);this.stream.write("\x1B[s");for(let i=0;i<r;i++)this.stream.write(`\x1B[${o+i};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}clearPreResizeRows(){let t=this.preResizeStartRow,n=this.preResizeRowCount;if(this.preResizeStartRow=null,this.preResizeRowCount=null,t===null||n===null||!this.stream.isTTY)return;let r=this.stream.rows??24,o=[];for(let i=0;i<n;i++){let s=t+i;s<=r&&o.push(s)}if(o.length!==0){this.stream.write("\x1B[s");for(let i of o)this.stream.write(`\x1B[${i};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}}formatItemLine(t){return this.formatJobLine(t.job)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=m.brand(NZ[this.spinnerIndex]),o=m.dim(t.jobId),i=m.bold(t.label||t.jobId),s=[r,o,i],a=Date.now()-t.startedAt;return s.push(m.dim(ve(a))),ie(" "+s.join(" "),n)}};Ik();ye();N();lh();lh();var BZ=13,UZ=3,UFe=[".....BBB.....","...BBBBBBB...","..KYYYYYYYK..","DDKMMMMMMMKDD"];function sl(e,t){return[...UFe,e,t]}var WO=".DKMYMMMYMKD.",jFe=".DKM.MMM.MKD.",HFe=".DKMLMMMLMKD.",WFe="DDKMRMMMRMKDD",KFe="DDKM.MMM.MKDD",KO="..KMMKKKMMK..",GO="..KMKKKKKMK..",GFe="..KKKKKKKKK..",jZ={idle:[sl(WO,KO)],working:[sl(WO,KO),sl(jFe,GO),sl(HFe,KO),sl(WO,GO)],alert:[sl(WFe,GFe),sl(KFe,GO)]};function HZ(e){return jZ[e].length}function WZ(e="idle",t=0){if(Il())return[];let n=jZ[e],r=(t%n.length+n.length)%n.length;return MR(n[r]??n[0])}Xi();var KZ=UZ,qFe=8,GZ=" ",zFe=1500,VFe=220,rE=class{stream;getAdjacentRows;frameMs;started=!1;state="idle";frame=0;rowCount=0;lastStartRow=0;lastRowCount=0;timer=null;stageState="idle";alertTimer=null;resizeUnsub=null;onRowCountChange;constructor(t){this.stream=t.stream??process.stdout,this.getAdjacentRows=t.getAdjacentRows,this.frameMs=t.frameMs??VFe}setRowCountChangeHandler(t){this.onRowCountChange=t}stop(){this.started&&(this.started=!1,this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.stopTimer(),this.clearAlertTimer(),this.clearBand(),this.rowCount=0,this.state="idle",this.stageState="idle",this.onRowCountChange?.(0))}start(){this.started||oX()&&(Fe()||Il()||this.stream.isTTY&&(this.started=!0,this.resizeUnsub=Ne.subscribe(()=>this.repaint())))}setState(t){!this.started||t===this.state||(this.state=t,this.frame=0,t==="idle"?this.stopTimer():this.startTimer(),this.repaint())}onStage(t,n){if(this.started){if(this.stageState=t==="acting"?"working":"idle",n?.toolErrored){this.flashAlert();return}this.alertTimer||this.setState(this.stageState)}}redraw(){this.repaint()}getRowCount(){return this.rowCount}clearBand(){if(!this.stream.isTTY||this.lastRowCount<=0)return;let t=this.stream.rows??24;this.stream.write("\x1B[s");for(let n=0;n<this.lastRowCount;n++){let r=this.lastStartRow+n;r<1||r>t||(this.stream.write(`\x1B[${r};1H`),this.stream.write("\x1B[2K"))}this.stream.write("\x1B[u"),this.lastRowCount=0,this.lastStartRow=0}repaint(){if(!this.started||!this.stream.isTTY)return;let t=this.state==="idle"?[]:WZ(this.state,this.frame),n=t.length>0?this.visibleRows():0,r=this.stream.rows??24,o=this.getAdjacentRows(),i=Math.max(1,r-n-o);if(this.lastRowCount>0&&(n!==this.lastRowCount||i!==this.lastStartRow)&&this.clearBand(),n!==this.rowCount&&(this.rowCount=n,this.onRowCountChange?.(n)),n!==0){this.stream.write("\x1B[s");for(let s=0;s<n;s++){let a=i+s;a<1||a>r||(this.stream.write(`\x1B[${a};1H`),this.stream.write("\x1B[2K"),this.stream.write(GZ+(t[s]??"")))}this.stream.write("\x1B[u"),this.lastStartRow=i,this.lastRowCount=n}}visibleRows(){let t=this.stream.rows??24;return(this.stream.columns??80)<BZ+GZ.length+1?0:t-1-this.getAdjacentRows()-1-qFe>=KZ?KZ:0}clearAlertTimer(){this.alertTimer&&(clearTimeout(this.alertTimer),this.alertTimer=null)}flashAlert(){this.clearAlertTimer(),this.setState("alert"),this.alertTimer=setTimeout(()=>{this.alertTimer=null,this.setState(this.stageState)},zFe),this.alertTimer.unref?.()}stopTimer(){this.timer&&(clearInterval(this.timer),this.timer=null)}startTimer(){this.timer||HZ(this.state)<=1||(this.timer=setInterval(()=>{this.frame+=1,this.repaint()},this.frameMs),this.timer.unref?.())}};B();ce();function YFe(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m${t%60}s`;let r=Math.floor(n/60);return r<24?`${r}h${n%60}m`:`${Math.floor(r/24)}d${r%24}h`}function qZ(e,t){let{totalTurns:n,elapsedMs:r,toolCalls:o,activeSubs:i,contextRatio:s}=e,a=m.dim(" \xB7 "),l=m.brand(`T${n}`),c=m.dim(YFe(r)),u=m.chrome(`${o} calls`),d=i>0?m.info(`${i} subs`):m.dim("0 subs"),p=Math.round(Math.max(0,Math.min(1,s))*100),f=s>.8?m.error:s>.5?m.warning:m.chrome,g=m.dim("ctx ")+f(`${p}%`),h=[l,c,u,d,g].join(a);return ie(" "+h,t)}ye();N();Wf();var oE=class{stream;registry;getExtraRows;started=!1;snapshot=null;onRowCountChange;resizeUnsub=null;tickInterval=null;constructor(t){this.stream=t.stream??process.stdout,this.registry=t.backgroundRegistry,this.getExtraRows=t.getExtraRows}setRowCountChangeHandler(t){this.onRowCountChange=t}start(){this.started||Fe()||(this.started=!0,this.onRowCountChange?.(1),this.resizeUnsub=Ne.subscribe(()=>this.repaint()),this.tickInterval=setInterval(()=>this.repaint(),1e3),this.repaint())}stop(){this.started&&(this.started=!1,this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.tickInterval!==null&&(clearInterval(this.tickInterval),this.tickInterval=null),this.clearRow(),this.onRowCountChange?.(0))}update(t,n){let r=this.registry?this.registry.list().filter(s=>s.status==="running").length:0,o=t.turns.reduce((s,a)=>s+(a.toolEvents?.length??0),0),i;if(n!==void 0)i=n;else{let s=t.turnTokens[t.turnTokens.length-1];i=s!==void 0?(s.footprint??s.input+s.output+s.cache)/tt(t.model):0}this.snapshot={totalTurns:t.totalTurns,sessionStartTime:t.sessionStartTime,toolCalls:o,activeSubs:r,contextRatio:Math.max(0,Math.min(1,i))},this.started&&this.repaint()}redraw(){this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;let t=this.stream.rows??24,n=this.getExtraRows(),r=Math.max(1,t-n+1),o=Math.max(4,(this.stream.columns??80)-2),i=this.snapshot,s=i?{totalTurns:i.totalTurns,elapsedMs:Date.now()-i.sessionStartTime,toolCalls:i.toolCalls,activeSubs:i.activeSubs,contextRatio:i.contextRatio}:{totalTurns:0,elapsedMs:0,toolCalls:0,activeSubs:0,contextRatio:0};this.stream.write("\x1B[s"),this.stream.write(`\x1B[${r};1H`),this.stream.write("\x1B[2K"),this.stream.write(qZ(s,o)),this.stream.write("\x1B[u")}clearRow(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=this.getExtraRows(),r=Math.max(1,t-n+1);this.stream.write("\x1B[s"),this.stream.write(`\x1B[${r};1H`),this.stream.write("\x1B[2K"),this.stream.write("\x1B[u")}};import{EventEmitter as tLe}from"node:events";ly();import{spawn as JFe}from"node:child_process";var XFe=/\x1b(?:\[[0-9;]*[a-zA-Z]|[\]P^_X][^\x07\x1b]*(?:\x07|\x1b\\)|[@-OQ-WYZ\\])/g;function QFe(){let e="";return{strip(t){let r=(e+t).replace(XFe,""),o=r.match(/\x1b(?:[\]P^_X][^\x07\x1b]*|\[[0-9;]*)?$/);return o?(e=o[0],r.slice(0,r.length-e.length)):(e="",r)},flush(){return e="",""}}}function zZ(e,t){if(e.length<=t)return e;let n=t;for(;n>0&&(e[n]&192)===128;)n--;return e.subarray(0,n)}var ZFe=12e4,eLe=1e5;function VZ(e){let t=Date.now(),n=e.timeoutMs??ZFe,r=e.maxBytes??eLe,o=QFe(),i;try{i=JFe(e.command,{shell:!0,detached:!0,stdio:["ignore","pipe","pipe"],...e.cwd!==void 0?{cwd:e.cwd}:{},...e.env!==void 0?{env:{...process.env,...e.env}}:{}})}catch(E){let R=E instanceof Error?E.message:String(E);return{pid:void 0,kill:()=>{},promise:Promise.resolve({exitCode:null,durationMs:Date.now()-t,displayCaptured:"",modelCaptured:"",truncated:!1,errorReason:"spawn-failed",errorMessage:`Failed to spawn shell: ${R}`})}}i.unref();let s,a=!1,l=new Promise(E=>{s=R=>{a||(a=!0,E(R))}}),c="",u="",d=0,p=0,f=!1,g=!1,h=!1;function b(E){let R=r-d;if(R>0){let I=E.length<=R?E:zZ(E,R);d+=I.length,c+=I.toString("utf8"),E.length>R&&(f=!0)}else E.length>0&&(f=!0);if(p<r){let I=o.strip(E.toString("utf8")),C=Buffer.byteLength(I,"utf8"),x=r-p;if(C<=x)u+=I,p+=C;else{let _=Buffer.from(I,"utf8");u+=zZ(_,x).toString("utf8"),p=r,f=!0}}}function S(){i.pid!==void 0&&i.pid!==0&&!i.killed&&fi(i.pid)}let w=setTimeout(()=>{S(),e.abort.removeEventListener("abort",k),s({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"timeout",errorMessage:`Command timed out after ${n}ms`})},n),k=()=>{S(),clearTimeout(w),s({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:h?"Command killed":"Command aborted"})};e.abort.addEventListener("abort",k);function T(){g||a||d<r&&p<r||(g=!0,S(),clearTimeout(w),e.abort.removeEventListener("abort",k),s({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:!0,errorReason:"overflow",errorMessage:`Output exceeded ${r} bytes`}))}return i.stdout?.on("data",E=>{b(E);try{e.onChunk?.(E,"stdout")}catch{}T()}),i.stderr?.on("data",E=>{b(E);try{e.onChunk?.(E,"stderr")}catch{}T()}),i.on("error",E=>{clearTimeout(w),e.abort.removeEventListener("abort",k),s({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"spawn-failed",errorMessage:`Shell process error: ${E.message}`})}),i.on("close",(E,R)=>{if(clearTimeout(w),e.abort.removeEventListener("abort",k),!(g||a)){if(o.flush(),h){s({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:"Command killed"});return}if(E!==null&&E!==0){s({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"nonzero-exit",errorMessage:`Command exited with code ${E}`});return}if(E===null){s({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"signal-killed",errorMessage:R?`Command killed by signal ${R}`:"Command killed by signal"});return}s({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f})}}),{pid:i.pid,promise:l,kill:(E="SIGKILL")=>{i.pid===void 0||i.pid===0||i.killed||(h=!0,fi(i.pid,E))}}}var YZ=200,sg=class extends tLe{jobs=new Map;handles=new Map;aborts=new Map;counter=0;start(t){let n=`sh-${++this.counter}`,r=new AbortController,o=VZ({command:t.command,...t.cwd!==void 0?{cwd:t.cwd}:{},abort:r.signal,...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{},...t.maxBytes!==void 0?{maxBytes:t.maxBytes}:{},...t.env!==void 0?{env:t.env}:{},...t.onChunk!==void 0?{onChunk:t.onChunk}:{}}),i={id:n,command:t.command,pid:o.pid,startedAt:Date.now(),mode:t.mode,status:"running"};return this.jobs.set(n,i),this.handles.set(n,o),this.aborts.set(n,r),o.promise.then(s=>{i.result=s,i.status=nLe(s),this.aborts.delete(n),this.handles.delete(n);try{this.emit("complete",i)}catch(a){console.warn(`[shell-jobs] listener for 'complete' threw on ${n}: ${a instanceof Error?a.message:String(a)}`)}this.pruneHistory()}),{job:i,handle:o}}get(t){return this.jobs.get(t)}list(){return[...this.jobs.values()].sort((t,n)=>t.startedAt-n.startedAt)}running(){return this.list().filter(t=>t.status==="running")}kill(t){let n=this.jobs.get(t);if(!n||n.status!=="running")return!1;let r=this.aborts.get(t);if(r)return r.abort(),!0;let o=this.handles.get(t);return o?(o.kill(),!0):!1}killAll(){let t=this.running();for(let n of t)this.kill(n.id);return t}runningCount(){let t=0;for(let n of this.jobs.values())n.status==="running"&&t++;return t}pruneHistory(){if(!(this.jobs.size<=YZ))for(let[t,n]of this.jobs){if(this.jobs.size<=YZ)break;n.status!=="running"&&this.jobs.delete(t)}}};function nLe(e){return e.errorReason===void 0?"completed":e.errorReason==="abort"?"killed":"failed"}B();dt();function rLe(e){if(!e.startsWith("!"))return null;if(e.startsWith("!&")){let n=e.slice(2).trim();return n.length===0?null:{mode:"background",command:n}}let t=e.slice(1).trim();return t.length===0?null:{mode:"foreground",command:t}}function oLe(e,t){let n=ve(t.durationMs);return t.errorReason==="abort"?m.dim(` [${e.id} \xB7 killed \xB7 ${n}]`):t.errorReason==="timeout"?m.dim(` [${e.id} \xB7 timed out \xB7 ${n}]`):t.errorReason==="overflow"?m.dim(` [${e.id} \xB7 output overflow \xB7 ${n}]`):t.errorReason==="spawn-failed"?m.warning(` [${e.id} \xB7 spawn failed \xB7 ${n}]`):t.errorReason==="nonzero-exit"?m.warning(` [${e.id} \xB7 exit ${t.exitCode} \xB7 ${n}]`):t.errorReason==="signal-killed"?m.warning(` [${e.id} \xB7 killed by signal \xB7 ${n}]`):m.dim(` [${e.id} \xB7 exit ${t.exitCode??0} \xB7 ${n}]`)}function JZ(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function iLe(e,t,n){let r=[],o=[`mode="${t}"`];return n.exitCode!==null&&o.push(`exit="${n.exitCode}"`),n.errorReason!==void 0&&o.push(`reason="${n.errorReason}"`),o.push(`duration="${ve(n.durationMs)}"`),n.truncated&&o.push('truncated="true"'),r.push(`<bash-passthrough ${o.join(" ")}>`),r.push(`<command>${JZ(e)}</command>`),r.push("<output>"),r.push(JZ(n.modelCaptured)),r.push("</output>"),r.push("</bash-passthrough>"),r.join(`
|
|
1928
1928
|
`)}var iE=class e{constructor(t){this.opts=t;this.registry.on("complete",n=>{if(n.mode!=="background")return;let r=n.result;r&&(this.queueInjection({command:n.command,mode:"background",result:r}),this.pendingNotifications.push({job:n,result:r}),this.pendingNotifications.length>e.MAX_PENDING_NOTIFICATIONS&&this.pendingNotifications.shift())})}opts;registry=new sg;pendingInjections=[];pendingNotifications=[];activeFgJobId=null;static MAX_PENDING_INJECTIONS=25;static MAX_PENDING_NOTIFICATIONS=50;async dispatch(t){let n=rLe(t);return n===null?t==="!"||t==="!&"||t.startsWith("! ")||t.startsWith("!& ")?(this.opts.writeLine(m.dim(" usage: !<cmd> (foreground) !&<cmd> (background)")),!0):!1:(n.mode==="foreground"?await this.runForeground(n.command):this.startBackground(n.command),!0)}drainInjections(){if(this.pendingInjections.length===0)return"";let t=this.pendingInjections.map(n=>iLe(n.command,n.mode,n.result));return this.pendingInjections=[],t.join(`
|
|
1929
1929
|
`)+`
|
|
@@ -1937,19 +1937,20 @@ ${t.partialOutput}`:"";return`Subagent failed \u2014 ${r}${o}`}let n=t.message?.
|
|
|
1937
1937
|
`)+`
|
|
1938
1938
|
`}drainNotifications(){if(this.pendingNotifications.length===0)return[];let t=this.pendingNotifications;return this.pendingNotifications=[],t}reset(){this.pendingInjections=[],this.pendingNotifications=[]}dispose(){this.registry.off("settled",this.onSettled)}};J0();function QZ(e,t){let n=FZ(),r=LZ();e.clearVerdictLedger=()=>r.reset();let o=0,i=0,s=0,a=0,l=1,c=()=>e.statusLine.setExtraRows(a+l+s+o+i),u,d,p,f;r.setRowCountChangeHandler(b=>{i=b,c(),u?.redraw(),p?.redraw(),d?.redraw(),f?.redraw()}),u=new nE(e.backgroundRegistry,{getAdjacentRows:()=>i}),u.setRowCountChangeHandler(b=>{o=b,c(),p?.redraw(),d?.redraw(),f?.redraw()}),p=new rE({getAdjacentRows:()=>i+o}),p.setRowCountChangeHandler(b=>{s=b,c(),d?.redraw(),f?.redraw()}),d=new _k({getExtraRows:()=>e.statusLine.getExtraRows()}),d.setRowCountChangeHandler(b=>{c()}),f=new oE({backgroundRegistry:e.backgroundRegistry,getExtraRows:()=>e.statusLine.getExtraRows()}),f.setRowCountChangeHandler(b=>{a=b,c(),d?.redraw()}),e.statusLine.setAfterScrollRestore(()=>{r.repaint(),u?.redraw(),p?.redraw(),d?.redraw(),f?.redraw()}),u.start(),p.start(),d.start(),f.start(),r.start({stream:process.stdout});let g=new iE({writeLine:b=>e.replRenderer.writeLine(b),getCwd:()=>e.stats.cwd});gQ(g),t.tryAbortShellForeground=()=>g.abortActiveForeground();let h=new sE(e.backgroundRegistry);return e.clearBgResultBuffer=()=>h.reset(),{contextPane:n,bgStatusBar:u,loopStageBar:d,mascotBar:p,healthRail:f,verdictLedger:r,shellPassthrough:g,bgResultNotifier:h}}La();Ha();Ft();zk();$0();ue();at();N();B();ce();Xi();Yk();to();Le();dp();Ha();Tu();B();ue();St();cs();r0();oT();Xi();Co();function aE(e){if(!e)return null;let t=e.split(`
|
|
1939
1939
|
`),n=t.slice(Math.max(0,t.length-40)),r=-1,o=null;for(let l=n.length-1;l>=0;l--){let c=n[l]??"",u=dLe(c);if(u){r=l,o=u;break}}if(o===null||r<0)return null;let i=n.slice(r+1).map(l=>l.trim());for(;i.length>0&&i[0]==="";)i.shift();for(;i.length>0&&i[i.length-1]==="";)i.pop();let s=pLe(i),a=i.join(`
|
|
1940
|
-
`).trim();return{kind:o,rawBody:a,...mLe(o,s)}}function dLe(e){let t=e.trim().replace(/^#{1,6}\s+/,"").replace(/^[-•▶▸]\s+/,"").replace(/^\*\s+/,"").replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^\*(.+?)\*$/,"$1").replace(/^_(.+?)_$/,"$1").replace(/[.:!?\s]+$/,"").trim();if(t.length===0||t.length>24)return null;let n=t.toLowerCase();return n==="done"?"done":n==="blocked"?"blocked":n==="asking"?"asking":n==="interrupted"?"interrupted":null}function pLe(e){let t=[];for(let n of e){let r=n.trim();if(r==="")continue;let o=/^(?:[-*•▶▸]|\d+[.)])\s+(.*)$/.exec(r),i=o?(o[1]??"").trim():r;if(!o&&t.length>0&&r.length>0){let a=t[t.length-1];a.value=`${a.value} ${r}`.trim();continue}let s=i.indexOf(":");if(s>0&&s<60){let a=i.slice(0,s).trim().replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^(?:\*\*|__)\s*/,"").toLowerCase(),l=i.slice(s+1).trim().replace(/^(?:\*\*|__)\s/,"");t.push({label:a,value:l})}else t.push({label:"",value:i})}return t}function mLe(e,t){let n=(...r)=>{for(let o of t)if(o.label!==""){for(let i of r)if(o.label.includes(i))return o.value}};switch(e){case"done":{let r={},o=n("what was done","what i did","completed","done");o!==void 0&&(r.whatWasDone=o);let i=n("evidence","what changed","
|
|
1940
|
+
`).trim();return{kind:o,rawBody:a,...mLe(o,s)}}function dLe(e){let t=e.trim().replace(/^#{1,6}\s+/,"").replace(/^[-•▶▸]\s+/,"").replace(/^\*\s+/,"").replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^\*(.+?)\*$/,"$1").replace(/^_(.+?)_$/,"$1").replace(/[.:!?\s]+$/,"").trim();if(t.length===0||t.length>24)return null;let n=t.toLowerCase();return n==="done"?"done":n==="blocked"?"blocked":n==="asking"?"asking":n==="interrupted"?"interrupted":null}function pLe(e){let t=[];for(let n of e){let r=n.trim();if(r==="")continue;let o=/^(?:[-*•▶▸]|\d+[.)])\s+(.*)$/.exec(r),i=o?(o[1]??"").trim():r;if(!o&&t.length>0&&r.length>0){let a=t[t.length-1];a.value=`${a.value} ${r}`.trim();continue}let s=i.indexOf(":");if(s>0&&s<60){let a=i.slice(0,s).trim().replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^(?:\*\*|__)\s*/,"").toLowerCase(),l=i.slice(s+1).trim().replace(/^(?:\*\*|__)\s/,"");t.push({label:a,value:l})}else t.push({label:"",value:i})}return t}function mLe(e,t){let n=(...r)=>{for(let o of t)if(o.label!==""){for(let i of r)if(o.label.includes(i))return o.value}};switch(e){case"done":{let r={},o=n("what was done","what i did","completed","done");o!==void 0&&(r.whatWasDone=o);let i=n("evidence","artifact","output");i!==void 0&&(r.evidence=i);let s=n("what changed","world-state","world state","change");s!==void 0&&(r.whatChanged=s);let a=n("pending","deferred","follow-up","followup","next");return a!==void 0&&(r.deferred=a),r}case"blocked":{let r={},o=n("what blocks","blocker","blocked by");o!==void 0&&(r.whatBlocks=o);let i=n("unblock","must change","to unblock","condition");i!==void 0&&(r.unblockCondition=i);let s=n("has already","been done","already done","what has been done","progress");return s!==void 0&&(r.alreadyDone=s),r}case"asking":{let r={},o=n("question","asking");o!==void 0&&(r.question=o);let i=n("assumption","resolves");i!==void 0&&(r.assumption=i);let s=n("once answered","follow-up","next","will do","after");return s!==void 0&&(r.followup=s),r}case"interrupted":{let r={},o=n("what you were doing","in progress","doing","task");o!==void 0&&(r.whatWasInProgress=o);let i=n("state was saved","state","saved","where");i!==void 0&&(r.stateLocation=i);let s=n("resumption","resume","requires");return s!==void 0&&(r.resumeRequires=s),r}}}function ZZ(e,t){return e.length===0||t.length===0||/\s$/.test(e)||/^\s/.test(t)?e+t:e+`
|
|
1941
1941
|
|
|
1942
|
-
`+t}B();ce();ye();ii();Ye();var fLe={done:{color:e=>m.success(e),chip:"\u2713 Done",affordance:"Objective satisfied - review evidence and close."},blocked:{color:e=>m.error(e),chip:"\u2298 Blocked",affordance:"External dependency - unblock above to resume."},asking:{color:e=>m.warning(e),chip:"? Asking",affordance:"Waiting on you - answer above to continue."},interrupted:{color:e=>m.meta(e),chip:"\u23F8 Interrupted",affordance:"Halted with state preserved - resume when ready."}};function eee(e){let t=fLe[e.kind],n=Math.max(34,Math.min(te()-6,100)),r=n+4,o=t.color("\u256D\u2500")+t.color.call(null,` ${t.chip} `)+t.color("\u2500".repeat(Math.max(0,r-1-J(` ${t.chip} `)))+"\u256E"),i=t.color("\u2570"+"\u2500".repeat(r)+"\u256F"),s=t.color("\u2502"),a=s+" ".repeat(n+4)+s,l=gLe(e),c=l.reduce((f,g)=>Math.max(f,J(g.label)),0),u=Math.max(8,n-c-2),d=[o,a];if(l.length===0){let
|
|
1943
|
-
`).
|
|
1944
|
-
`)
|
|
1942
|
+
`+t}B();ce();ye();ii();Ye();var fLe={done:{color:e=>m.success(e),chip:"\u2713 Done",affordance:"Objective satisfied - review evidence and close."},blocked:{color:e=>m.error(e),chip:"\u2298 Blocked",affordance:"External dependency - unblock above to resume."},asking:{color:e=>m.warning(e),chip:"? Asking",affordance:"Waiting on you - answer above to continue."},interrupted:{color:e=>m.meta(e),chip:"\u23F8 Interrupted",affordance:"Halted with state preserved - resume when ready."}};function eee(e){let t=fLe[e.kind],n=Math.max(34,Math.min(te()-6,100)),r=n+4,o=t.color("\u256D\u2500")+t.color.call(null,` ${t.chip} `)+t.color("\u2500".repeat(Math.max(0,r-1-J(` ${t.chip} `)))+"\u256E"),i=t.color("\u2570"+"\u2500".repeat(r)+"\u256F"),s=t.color("\u2502"),a=s+" ".repeat(n+4)+s,l=gLe(e),c=l.reduce((f,g)=>Math.max(f,J(g.label)),0),u=Math.max(8,n-c-2),d=[o,a];if(l.length===0){let g=e.rawBody.split(`
|
|
1943
|
+
`).map(S=>S.trim()).filter(S=>S.length>0).slice(0,5),h=g.length>0?g.join(`
|
|
1944
|
+
`):`${e.kind} (no structured fields)`,b=le(ri(h),n).split(`
|
|
1945
|
+
`);for(let S of b)d.push(s+" "+st(S,n)+" "+s)}else for(let f of l){let g=m.dim(st(f.label,c)),h=le(ri(f.value),u).split(`
|
|
1945
1946
|
`),b=h[0]??"";d.push(s+" "+g+" "+st(b,u)+" "+s);for(let S of h.slice(1))d.push(s+" "+" ".repeat(c)+" "+st(S,u)+" "+s)}d.push(a);let p=m.dim(ie(t.affordance,n));return d.push(s+" "+st(p,n)+" "+s),d.push(i),d.join(`
|
|
1946
|
-
`)}function gLe(e){let t=[],n=(r,o)=>{o&&o.trim().length>0&&t.push({label:r,value:o.trim()})};switch(e.kind){case"done":n("done",e.whatWasDone),n("evidence",e.evidence),e.deferred?.trim()!==e.whatWasDone?.trim()&&n("deferred",e.deferred);break;case"blocked":n("blocks",e.whatBlocks),n("unblock",e.unblockCondition),n("progress",e.alreadyDone);break;case"asking":n("question",e.question),n("resolves",e.assumption),n("after",e.followup);break;case"interrupted":n("was doing",e.whatWasInProgress),n("saved at",e.stateLocation),n("resume",e.resumeRequires);break}return t}yT();Rt();B();dt();Wf();em();Kf();Kf();var hLe=.8,yLe=.95,bLe=1;function tee(e){return e>=bLe?"over":e>=yLe?"near":e>=hLe?"caution":"quiet"}function SLe(e){let t=[];return e.fiveHour!==void 0&&t.push({label:"5h",state:e.fiveHour}),e.sevenDay!==void 0&&t.push({label:"7d",state:e.sevenDay}),t}var wLe=7200*1e3;function vLe(e,t,n){return n?e.resetsAt!==void 0&&e.resetsAt.getTime()-t.getTime()>wLe?"turns stop at the cap \u2014 the reset is too far out to wait":"AFK pauses and auto-resumes at the cap":"turns stop at the cap \u2014 auto-resume is off"}function kLe(e,t){if(e.resetsAt===void 0)return;let n=e.resetsAt.getTime()-t.getTime();if(!(n<=0))return`resets in ${S0(n)}`}function nee(e,t=new Date,n={}){if(e===void 0)return{tier:"quiet",text:null};let r=SLe(e),o=r.reduce((p,f)=>p===void 0||f.state.utilization>p.state.utilization?f:p,void 0);if(o===void 0)return{tier:"quiet",text:null};let i=tee(o.state.utilization);if(i==="quiet")return{tier:i,text:null};let s=Math.round(o.state.utilization*100),a=kLe(o.state,t),l=r.filter(p=>p!==o&&tee(p.state.utilization)!=="quiet").map(p=>`${p.label} ${Math.round(p.state.utilization*100)}%`),c=l.length>0?` (also ${l.join(", ")})`:"",u=vLe(o.state,t,n.autoResume??!0);if(i==="over"){let p=` ${o.label} quota exhausted`;return{tier:i,text:`${p}${a===void 0?"":` \u2014 ${a}`} \u2014 ${u}${c}`}}if(i==="near"){let p=` ${o.label} quota ${s}% used`;return{tier:i,text:`${p}${a===void 0?"":` \u2014 ${a}`} \u2014 ${u}${c}`}}let d=` ${o.label} quota ${s}% used`;return{tier:i,text:`${d}${a===void 0?"":` \u2014 ${a}`}${c}`}}to();Rt();function ree(e,t){let n=Math.round(e*100),r=ge(t);if(e>=1){let o=Math.round((e-1)*t);return{tier:"over",text:` context OVER ${Math.round(t/1e3)}k tokens by ~${ge(o)} tokens \u2014 model output may be silently truncated`}}return e>=.95?{tier:"near",text:` context ${n}% used of ${r} \u2014 near limit; output may soon truncate (consider /clear or a fresh session)`}:e>=.8?{tier:"caution",text:` context ${n}% used of ${r} \u2014 approaching limit`}:e>.5?{tier:"normal",text:` context ${n}% used of ${r}`}:{tier:"quiet",text:null}}function zO(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(ve(e.durationMs)),e.totalCostUsd!==void 0&&r.push(gt(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),i=Number(e.usage?.output_tokens??0);o+i>0&&r.push(ge(o+i)+" tokens"),r.length>0&&n(m.dim(" \u25E6 "+r.join(" \xB7 ")));let s=w0(t),a=tt(t.model),l=ree(s,a);if(l.text!==null){let u=l.tier==="over"||l.tier==="near"?m.error:l.tier==="caution"?m.warning:m.dim;n(u(l.text))}let c=nee(Jk($b()),new Date,{autoResume:_U()});if(c.text!==null){let u=c.tier==="over"||c.tier==="near"?m.error:c.tier==="caution"?m.warning:m.dim;n(u(c.text))}n("")}jc();Am();async function oee(e,t,n,r,o){let i=[];return n&&n.trim().length>0&&i.push({type:"text",text:n}),r&&r.length>0&&i.push(...r),e&&i.push({type:"text",text:e}),t.length>0&&o!==void 0?await GS(i,o,t):Ni(i,t),i}rk();qs();$r();import{readFileSync as TLe,statSync as ELe}from"fs";import{extname as RLe,join as VO}from"path";import{homedir as xLe}from"os";var ALe=100*1024,CLe=400*1024,_Le=/(?<=\s|^)@([~\w./-]+)(?=\s|$)/g,ILe=/(^|\/)\.(ssh|aws|gnupg|kube|docker)(\/|$)|(^|\/)[^/]*\.env(\.[^/]+)?$|(^|\/)\.(netrc|npmrc|pypirc)$|(^|\/)id_(rsa|ed25519|ecdsa|dsa)(\.pub)?$|\.(pem|key|p12|pfx)$|(^|\/)credentials$|(^|\/)\.git\/config$|(^|\/)\.git-credentials$|(^|\/)\.(bash|zsh|fish|sh)_history$/i,PLe=[".afk/config",".afk/state",".config/gcloud",".config/gh"];function MLe(e){let t=0,n=e.match(/`+/g);if(n)for(let r of n)r.length>t&&(t=r.length);return"`".repeat(Math.max(3,t+1))}function OLe(e,t,n){if(n.includes(e))return ln(e).denied;if(ILe.test(e))return!0;for(let r of t)if(e===r||e.startsWith(r+"/"))return!0;return!1}var DLe={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"jsx",".mjs":"javascript",".cjs":"javascript",".json":"json",".md":"markdown",".py":"python",".sh":"bash",".bash":"bash",".zsh":"bash",".yaml":"yaml",".yml":"yaml",".toml":"toml",".rs":"rust",".go":"go",".rb":"ruby",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cs":"csharp",".html":"html",".css":"css",".scss":"scss",".sql":"sql",".xml":"xml",".txt":""};function $Le(e){return DLe[e.toLowerCase()]??""}function FLe(e=process.env){return e.AFK_AT_FILE_INJECT!=="0"}function iee(e,t={}){let n={fileBlocks:[],warnings:[]};if(!FLe(t.env))return n;let r=[];for(let p of e.matchAll(_Le)){let f=p[1];f&&r.push(f)}if(r.length===0)return n;let o=t.rootDir??process.cwd(),i=t.homeDir??xLe(),s=PLe.map(p=>pt(VO(i,p))),a=So.map(p=>pt(VO(i,p))),l=[],c=[],u=new Set,d=0;for(let p of r){let{scanDir:f,leafPrefix:g}=Ua(p,o,i),h=g?VO(f,g):f,b=pt(h);if(u.has(b))continue;if(u.add(b),OLe(b,s,a)){c.push(`@${p}: sensitive path, not injected`);continue}let S;try{S=ELe(b)}catch{c.push(`@${p}: not found, left as text`);continue}if(S.isDirectory()){c.push(`@${p}: is a directory, skipped`);continue}if(!S.isFile()){c.push(`@${p}: not a regular file, skipped`);continue}if(S.size>ALe){c.push(`@${p}: too large (${Math.round(S.size/1024)} KB > 100 KB), skipped`);continue}if(d+S.size>CLe){c.push(`@${p}: 400 KB total injection budget exceeded, skipped`);continue}let w;try{w=TLe(b)}catch{c.push(`@${p}: could not read, skipped`);continue}if(w.includes(0)){c.push(`@${p}: binary file, skipped`);continue}d+=S.size;let k=$Le(RLe(b)),T=w.toString("utf8"),E=MLe(T);l.push({type:"text",text:`Contents of ${p}:
|
|
1947
|
+
`)}function gLe(e){let t=[],n=(r,o)=>{o&&o.trim().length>0&&t.push({label:r,value:o.trim()})};switch(e.kind){case"done":n("done",e.whatWasDone),n("evidence",e.evidence),n("changed",e.whatChanged),e.deferred?.trim()!==e.whatWasDone?.trim()&&n("deferred",e.deferred);break;case"blocked":n("blocks",e.whatBlocks),n("unblock",e.unblockCondition),n("progress",e.alreadyDone);break;case"asking":n("question",e.question),n("resolves",e.assumption),n("after",e.followup);break;case"interrupted":n("was doing",e.whatWasInProgress),n("saved at",e.stateLocation),n("resume",e.resumeRequires);break}return t}yT();Rt();B();dt();Wf();em();Kf();Kf();var hLe=.8,yLe=.95,bLe=1;function tee(e){return e>=bLe?"over":e>=yLe?"near":e>=hLe?"caution":"quiet"}function SLe(e){let t=[];return e.fiveHour!==void 0&&t.push({label:"5h",state:e.fiveHour}),e.sevenDay!==void 0&&t.push({label:"7d",state:e.sevenDay}),t}var wLe=7200*1e3;function vLe(e,t,n){return n?e.resetsAt!==void 0&&e.resetsAt.getTime()-t.getTime()>wLe?"turns stop at the cap \u2014 the reset is too far out to wait":"AFK pauses and auto-resumes at the cap":"turns stop at the cap \u2014 auto-resume is off"}function kLe(e,t){if(e.resetsAt===void 0)return;let n=e.resetsAt.getTime()-t.getTime();if(!(n<=0))return`resets in ${S0(n)}`}function nee(e,t=new Date,n={}){if(e===void 0)return{tier:"quiet",text:null};let r=SLe(e),o=r.reduce((p,f)=>p===void 0||f.state.utilization>p.state.utilization?f:p,void 0);if(o===void 0)return{tier:"quiet",text:null};let i=tee(o.state.utilization);if(i==="quiet")return{tier:i,text:null};let s=Math.round(o.state.utilization*100),a=kLe(o.state,t),l=r.filter(p=>p!==o&&tee(p.state.utilization)!=="quiet").map(p=>`${p.label} ${Math.round(p.state.utilization*100)}%`),c=l.length>0?` (also ${l.join(", ")})`:"",u=vLe(o.state,t,n.autoResume??!0);if(i==="over"){let p=` ${o.label} quota exhausted`;return{tier:i,text:`${p}${a===void 0?"":` \u2014 ${a}`} \u2014 ${u}${c}`}}if(i==="near"){let p=` ${o.label} quota ${s}% used`;return{tier:i,text:`${p}${a===void 0?"":` \u2014 ${a}`} \u2014 ${u}${c}`}}let d=` ${o.label} quota ${s}% used`;return{tier:i,text:`${d}${a===void 0?"":` \u2014 ${a}`}${c}`}}to();Rt();function ree(e,t){let n=Math.round(e*100),r=ge(t);if(e>=1){let o=Math.round((e-1)*t);return{tier:"over",text:` context OVER ${Math.round(t/1e3)}k tokens by ~${ge(o)} tokens \u2014 model output may be silently truncated`}}return e>=.95?{tier:"near",text:` context ${n}% used of ${r} \u2014 near limit; output may soon truncate (consider /clear or a fresh session)`}:e>=.8?{tier:"caution",text:` context ${n}% used of ${r} \u2014 approaching limit`}:e>.5?{tier:"normal",text:` context ${n}% used of ${r}`}:{tier:"quiet",text:null}}function zO(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(ve(e.durationMs)),e.totalCostUsd!==void 0&&r.push(gt(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),i=Number(e.usage?.output_tokens??0);o+i>0&&r.push(ge(o+i)+" tokens"),r.length>0&&n(m.dim(" \u25E6 "+r.join(" \xB7 ")));let s=w0(t),a=tt(t.model),l=ree(s,a);if(l.text!==null){let u=l.tier==="over"||l.tier==="near"?m.error:l.tier==="caution"?m.warning:m.dim;n(u(l.text))}let c=nee(Jk($b()),new Date,{autoResume:_U()});if(c.text!==null){let u=c.tier==="over"||c.tier==="near"?m.error:c.tier==="caution"?m.warning:m.dim;n(u(c.text))}n("")}jc();Am();async function oee(e,t,n,r,o){let i=[];return n&&n.trim().length>0&&i.push({type:"text",text:n}),r&&r.length>0&&i.push(...r),e&&i.push({type:"text",text:e}),t.length>0&&o!==void 0?await GS(i,o,t):Ni(i,t),i}rk();qs();$r();import{readFileSync as TLe,statSync as ELe}from"fs";import{extname as RLe,join as VO}from"path";import{homedir as xLe}from"os";var ALe=100*1024,CLe=400*1024,_Le=/(?<=\s|^)@([~\w./-]+)(?=\s|$)/g,ILe=/(^|\/)\.(ssh|aws|gnupg|kube|docker)(\/|$)|(^|\/)[^/]*\.env(\.[^/]+)?$|(^|\/)\.(netrc|npmrc|pypirc)$|(^|\/)id_(rsa|ed25519|ecdsa|dsa)(\.pub)?$|\.(pem|key|p12|pfx)$|(^|\/)credentials$|(^|\/)\.git\/config$|(^|\/)\.git-credentials$|(^|\/)\.(bash|zsh|fish|sh)_history$/i,PLe=[".afk/config",".afk/state",".config/gcloud",".config/gh"];function MLe(e){let t=0,n=e.match(/`+/g);if(n)for(let r of n)r.length>t&&(t=r.length);return"`".repeat(Math.max(3,t+1))}function OLe(e,t,n){if(n.includes(e))return ln(e).denied;if(ILe.test(e))return!0;for(let r of t)if(e===r||e.startsWith(r+"/"))return!0;return!1}var DLe={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"jsx",".mjs":"javascript",".cjs":"javascript",".json":"json",".md":"markdown",".py":"python",".sh":"bash",".bash":"bash",".zsh":"bash",".yaml":"yaml",".yml":"yaml",".toml":"toml",".rs":"rust",".go":"go",".rb":"ruby",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cs":"csharp",".html":"html",".css":"css",".scss":"scss",".sql":"sql",".xml":"xml",".txt":""};function $Le(e){return DLe[e.toLowerCase()]??""}function FLe(e=process.env){return e.AFK_AT_FILE_INJECT!=="0"}function iee(e,t={}){let n={fileBlocks:[],warnings:[]};if(!FLe(t.env))return n;let r=[];for(let p of e.matchAll(_Le)){let f=p[1];f&&r.push(f)}if(r.length===0)return n;let o=t.rootDir??process.cwd(),i=t.homeDir??xLe(),s=PLe.map(p=>pt(VO(i,p))),a=So.map(p=>pt(VO(i,p))),l=[],c=[],u=new Set,d=0;for(let p of r){let{scanDir:f,leafPrefix:g}=Ua(p,o,i),h=g?VO(f,g):f,b=pt(h);if(u.has(b))continue;if(u.add(b),OLe(b,s,a)){c.push(`@${p}: sensitive path, not injected`);continue}let S;try{S=ELe(b)}catch{c.push(`@${p}: not found, left as text`);continue}if(S.isDirectory()){c.push(`@${p}: is a directory, skipped`);continue}if(!S.isFile()){c.push(`@${p}: not a regular file, skipped`);continue}if(S.size>ALe){c.push(`@${p}: too large (${Math.round(S.size/1024)} KB > 100 KB), skipped`);continue}if(d+S.size>CLe){c.push(`@${p}: 400 KB total injection budget exceeded, skipped`);continue}let w;try{w=TLe(b)}catch{c.push(`@${p}: could not read, skipped`);continue}if(w.includes(0)){c.push(`@${p}: binary file, skipped`);continue}d+=S.size;let k=$Le(RLe(b)),T=w.toString("utf8"),E=MLe(T);l.push({type:"text",text:`Contents of ${p}:
|
|
1947
1948
|
${E}${k}
|
|
1948
1949
|
${T}
|
|
1949
|
-
${E}`})}return{fileBlocks:l,warnings:c}}function see(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function aee(e,t,n){let r=t?.peekQueuedText(),o=r!==void 0?{text:r.text,claimed:!1}:void 0;r!==void 0&&t?.reserveQueued?.(r);let i;try{i=await e.promoteActiveForeground(o)}catch(s){throw r!==void 0&&t?.releaseQueued?.(r),s}if(o?.claimed===!0&&t!==null&&r!==void 0){try{await n?.(o.text)}catch{}return t.dropQueued(r),{jobs:i,flushedText:o.text,flushedPreview:r.preview}}return r!==void 0&&t?.releaseQueued?.(r),{jobs:i}}N();B();N();dt();B();xa();function lee(){return{toolStartTimes:new Map,subagentStartTimes:new Map,subagentLabels:new Map}}function cee(e,t){Fe()&&(t.pending||e.toolStartTimes.has(t.toolUseId)||e.toolStartTimes.set(t.toolUseId,Date.now()))}function uee(e,t,n,r){if(!Fe())return;let o=e.toolStartTimes.get(t.toolUseId),i=o!==void 0?Date.now()-o:void 0;e.toolStartTimes.delete(t.toolUseId);let s=Pe(n??"tool"),a=t.isError?m.error("err"):m.success("ok"),l=i!==void 0?` \xB7 ${ve(i)}`:"";r.fn(m.dim(` \u25E6 ${s}${l} \xB7 `)+a)}function dee(e,t,n,r){if(!Fe())return;let{subagentId:o,agentType:i}=n,s=Pe(i??o);if(e.subagentStartTimes.has(o)||(e.subagentStartTimes.set(o,Date.now()),e.subagentLabels.set(o,s),r.fn(m.dim(` \u25E6 worker ${s} started`))),t.type==="done"||t.type==="error"){let l=e.subagentStartTimes.get(o),c=l!==void 0?Date.now()-l:void 0;e.subagentStartTimes.delete(o),e.subagentLabels.delete(o);let u=c!==void 0?` \xB7 ${ve(c)}`:"",d=t.type==="error"?m.error("failed"):m.success("done");r.fn(m.dim(` \u25E6 worker ${s}${u} \xB7 `)+d)}}var lE=class{state;writer;ttfb;constructor(t,n){this.state=lee(),this.writer=t,this.ttfb=n}onToolStart(t){cee(this.state,t)}onToolResult(t,n){uee(this.state,t,n,this.writer)}onSubagentEvent(t,n){dee(this.state,t,n,this.writer)}onFirstContent(t){this.ttfb.waitingLineEmitted&&(this.ttfb.waitingLineEmitted=!1,t.write("\r\x1B[2K"))}};function pee(e){return{startedAt:e,received:!1,waitingLineEmitted:!1}}function mee(e){return e.received?{}:{turnStartedAt:e.startedAt}}function fee(e,t,n){let r=t.type==="chunk"&&t.chunk.type==="content"&&!n;return r&&(e.received=!0),r}function gee(e,t=process.stdout,n){if(!Fe()||!t.isTTY)return;(e?.fn??console.log)(m.dim(" \u25E6 waiting for response\u2026")),n&&(n.waitingLineEmitted=!0,e&&(n.plainHooks=new lE(e,n)))}ue();B();var LLe=3e3;async function hee(e,t){if(!e)return t;let n=Date.now();if(n-t<LLe)return t;try{let r=e();r instanceof Promise&&await r}catch(r){We()&&console.error(" "+m.error("onContextProgress (status refresh) failed:"),r)}return n}wk();async function yee(e,t,n,r,o="summary",i,s){let a=Z6(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0);let l=Date.now(),c=pee(l);gee(i,process.stdout,c),_u(process.stdout,ff(process.cwd(),!0));let u="",d=0,p=!1,f=!1,g=!1,h=!1,b=!1,S,w=!1,k=!1,T={abort:null},E=0,R=[],I=new Map,C=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,x=()=>{let G=r.subagentControl;G?.hasPromotableForeground()&&aee(G,_,r.onQueuedUserMessage).then(({jobs:K,flushedText:W,flushedPreview:q})=>{let M=(i??{fn:console.log}).fn;for(let $ of K)M(m.dim(` \u2192 subagent backgrounded as ${$.jobId}: ${$.label}`));W!==void 0&&M(m.dim(` \u2192 queued message sent to this turn: ${see(q??W)}`))}).catch(()=>{})},_=r.getCompositor?r.getCompositor():null,P=()=>new td({out:nd(i),thinkingMode:o,...C?{activeSkillName:C}:{},onCancel:()=>{t.interrupt().catch(G=>{We()&&console.error(" "+m.error("session.interrupt() failed:"),G)})},...r.subagentControl?{onBackground:x}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},..._?{compositor:_}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{},...mee(c)}),D=P(),L=async()=>{if(!h){h=!0;try{await D.dispose()}catch{}}},U=async()=>{await D.arm();let G=D.getCompositor();if(i&&G){let K=G;i.fn=W=>K.commitAbove(W),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(G),r.setInterruptNotifier?.(K=>D.setInterrupting(K)),r.rearmStatus?.()};try{_?_.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{w=!0,D.setSoftStopping(!0),t.interrupt().catch(j=>{We()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),j)});let $=r.subagentControl;$?.hasActiveForeground()&&$.cancelActiveForeground().catch(j=>{We()&&console.error(" "+m.error("soft-stop cancelActiveForeground() failed:"),j)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{k=!0,t.interrupt().catch($=>{We()&&console.error(" "+m.error("pause-interrupt session.interrupt() failed:"),$)})}),await U(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(x);let{fileBlocks:G,warnings:K}=iee(e.text,{rootDir:process.cwd()});for(let $ of K)(i??{fn:console.log}).fn(m.dim(` @-file: ${$}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let W=G.length>0||e.attachments.length>0?await oee(e.text,e.attachments,void 0,G,t.sessionId):e.text,q=t.sendMessageStream(W);if(await Sc(($,j)=>{D.process($,j),j&&c.plainHooks?.onSubagentEvent($,j)},async()=>{for await(let $ of q){if(w||k)break;let j=fee(c,$,f);if($.type==="chunk"&&$.chunk.type==="content"?(u=p?ZZ(u,$.chunk.content):u+$.chunk.content,p=!1,f=!0):$.type==="message"&&!f&&(u=$.message.content),$.type==="stream_retry"&&(u=u.slice(0,d),p=u.length>0),$.type==="chunk"&&$.chunk.type==="tool_use_detail"){let X=$.chunk,ee={toolName:X.toolName,toolUseId:X.toolUseId,input:X.toolInput,...X.toolInputRaw!==void 0&&{inputRaw:X.toolInputRaw}};I.set(X.toolUseId,ee),R.push(ee),c.plainHooks?.onToolStart(X)}else if($.type==="chunk"&&$.chunk.type==="tool_result"){let X=$.chunk;d=u.length,p=!0;let ee=I.get(X.toolUseId);ee&&(ee.result=X.content,ee.isError=X.isError,I.delete(X.toolUseId)),c.plainHooks?.onToolResult(X,ee?.toolName),E=await hee(r.onContextProgress,E)}if($.type==="paused"){if(r.setPausedState?.(!0),await L(),_&&$.autoResume===!0){let X=new AbortController;T.abort=X;let ee=$.resetsAt?$.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,Ie=ee?`Keep waiting \u2014 auto-resumes at ${ee}`:"Keep waiting \u2014 auto-resume in progress",re="Switch model / provider (type /model after)",Se="Stop waiting",$e=[m.warning(" \u23F3 Usage limit reached.")+(ee?m.dim(` Auto-resumes at ${ee}.`):""),m.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];hn(_,{header:$e,options:[Ie,re,Se],signal:X.signal,initialIndex:0}).then(Sn=>{if(T.abort=null,!Sn)return;let Ve=Sn[0];Ve===void 0||Ve===Ie||(k=!0,Ve===re&&(i??{fn:console.log}).fn(m.dim(" Hint: type /model <name> to switch, then send your message again.")),t.interrupt().catch(Xt=>{We()&&console.error(" "+m.error("picker pause-interrupt session.interrupt() failed:"),Xt)}))}).catch(Sn=>{We()&&console.error(" "+m.error("picker promise rejected:"),Sn)})}else(i??{fn:console.log}).fn(wF({reason:$.reason,...$.resetsAt!==void 0?{resetsAt:$.resetsAt}:{},...$.accountId!==void 0?{accountId:$.accountId}:{},...$.autoResume!==void 0?{autoResume:$.autoResume}:{}}));continue}if($.type==="resumed"){r.setPausedState?.(!1),T.abort?.abort(),T.abort=null;let X=$.hotSwapped&&$.accountId?`\u25B6 Resumed on ${$.accountId}`:"\u25B6 Resumed";u="",d=0,p=!1,f=!1,R.length=0,I.clear(),b=!1,S=void 0,g=!1,D=P(),h=!1,await U(),(i??{fn:console.log}).fn(m.success(X));continue}if($.type==="error"){await L(),Ol(xl($.error)),g=!0;continue}D.process($),j&&(c.plainHooks?.onFirstContent(process.stdout),D.notifyFirstContent()),$.type==="done"&&(b=!0,S=$.metadata)}}),await L(),w){let $=i?i.fn:console.log,j=_?_.getPendingCount():0,X=j>0?` \xB7 ${j} queued`:"";$(m.warning(`\u23F8 Stopped${X} \u2014 work so far kept.`)+m.dim(" Send a message to continue.")),$("")}if(k){let $=i?i.fn:console.log;$(m.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),$("")}if(b&&!w&&!k){Pa(n,a,u,S,R),r.onTurnComplete&&await r.onTurnComplete(a,u).catch(()=>{}),Cu(process.stdout),sX(process.stdout,"afk: turn complete");let $=X=>{i?i.fn(X):console.log(X)},j=aE(u);if(j){$(eee(j)),$("");let X=h9(R);if(r.onTerminalState)try{r.onTerminalState(j,{doneHasCorroboratingEvidence:X})}catch{}if(n.permissionMode==="autonomous"){let ee=j.kind==="done"&&Up().verifyDone===!0&&!X;b9(j,void 0,{unverified:ee})}}if(zO(S,n,$),r.onAfterTurn){let X=r.onAfterTurn();X instanceof Promise&&await X.catch(()=>{})}}}catch(G){await L(),g||Ol(xl(G))}finally{await L(),_u(process.stdout,ff(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),T.abort?.abort(),T.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}Ji();var NLe=5e3,BLe=3,ULe="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function jLe(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function bee(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,healthRail:d,verdictLedger:p,shellPassthrough:f,bgResultNotifier:g}=s,h=null,b=[];e.session.current.waitForInitialization().then(async _=>{We()&&(h=gT(_)),await Hf(e.session.current),We()&&(b=g0())}).catch(()=>{});let S=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,w,k=!1,T=!1,E,R,I,C=(()=>{let _=parseInt(e.options.maxTurns,10);return _>0?_:void 0})(),x=0;for(g.onInjectable=()=>{x>=BLe||!o.isAwaitingInput()||!o.bufferIsEmpty()||(x++,Cu(process.stdout),S={text:ULe,attachments:[]},o.abortPendingRead())};;){if(h&&(e.replRenderer.writeLine(h),e.replRenderer.writeLine(""),h=null),b.length>0){for(let M of b)e.replRenderer.writeLine(M);e.replRenderer.writeLine(""),b=[]}let _=f.drainNotifications();for(let{job:M,result:$}of _){let j=$.errorReason===void 0?"\u2713":"\u2717",X=$.errorReason==="abort"?"killed":$.errorReason==="timeout"?"timed out":$.errorReason==="signal-killed"?"killed by signal":`exit ${$.exitCode??0}`,ee=Math.max(0,Math.round($.durationMs/100)/10);e.replRenderer.writeLine(m.dim(` ${j} [${M.id}] ${X} \xB7 ${ee}s \xB7 `)+M.command)}let P=g.drainNotifications();for(let{job:M}of P){let $=M.status==="completed"?"\u2713":M.status==="failed"?"\u2717":"\u2298",j=M.endedAt!==void 0?Math.max(0,Math.round((M.endedAt-M.startedAt)/100)/10):0,X=ie(M.label,60);e.replRenderer.writeLine(m.dim(` ${$} [${M.jobId}] subagent ${M.status} \xB7 ${j}s \xB7 `)+X)}let D=l.renderIfChanged(e.stats.sessionId);if(D.length>0){for(let M of D)e.replRenderer.writeLine(M);e.replRenderer.writeLine("")}let L,U;if(S===void 0){let M=await e.session.current.takePendingPlanExitSeed();M!==void 0&&(e.stats.permissionMode=M.mode,S={text:M.message,attachments:[]})}if(S!==void 0){let M=S;S=void 0;let $=dd(e.stats.permissionMode),j=Fa({buffer:M.text,promptText:$,isTTY:!!process.stdout.isTTY,attachmentSummary:ju([...M.attachments])});e.replRenderer.writeLine(j),L=M.text.trim(),U=M.attachments}else{let M=w;w=void 0;let $=await o.readLine({promptFn:()=>dd(e.stats.permissionMode),...M!==void 0?{initialBuffer:M}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{tE(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});L=$.text.trim(),U=$.attachments}if(!L&&U.length===0)continue;if(L.startsWith("!")){let M=/^(0|false|off|no)$/i.test(v.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!M&&(k||(k=!0,e.replRenderer.writeLine(m.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch(L))){e.statusLine.rearm();continue}}let G=!1;if(L.startsWith("/")){let M=await cX(L,e.slashCtx,U);if(M.handled){if(M.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((L==="/clear"||L.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset(),E=void 0),M.result!==null&&typeof M.result=="object"&&"kind"in M.result&&M.result.kind==="submit"){S={text:M.result.message,attachments:U??[]},e.statusLine.rearm();continue}if(M.result!==null&&typeof M.result=="object"&&"kind"in M.result&&M.result.kind==="prefill"){w=M.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}G=!0}a.push(L),await jLe(e,L);let K=L;if(G){let M=WP(L);if(M){let $=M.name.replace(/^\//,"").split(":").pop()??"";if($&&u0($)){let j={skillName:$,rawArgs:M.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},X=e.session.current.sessionId,ee=Ja(X),Ie=Date.now();F(`[afk trace] preflight.start commandName=${$}`);let re=!1,Se=await Ya(j,{cwd:e.stats.cwd??process.cwd(),artifactDir:ee},$e=>{We()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${$}) failed: `)+($e instanceof Error?$e.message:String($e)))});re=Se!==null,F(`[afk trace] preflight.end commandName=${$} durationMs=${Date.now()-Ie} success=${re}`),K=m0(Se?.manifestBlock,L)}}}let W=f.drainInjections();W.length>0&&(K=W+K);let q=g.drainInjections();if(q.length>0&&(K=q+K),E!==void 0&&(K=E+`
|
|
1950
|
+
${E}`})}return{fileBlocks:l,warnings:c}}function see(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function aee(e,t,n){let r=t?.peekQueuedText(),o=r!==void 0?{text:r.text,claimed:!1}:void 0;r!==void 0&&t?.reserveQueued?.(r);let i;try{i=await e.promoteActiveForeground(o)}catch(s){throw r!==void 0&&t?.releaseQueued?.(r),s}if(o?.claimed===!0&&t!==null&&r!==void 0){try{await n?.(o.text)}catch{}return t.dropQueued(r),{jobs:i,flushedText:o.text,flushedPreview:r.preview}}return r!==void 0&&t?.releaseQueued?.(r),{jobs:i}}N();B();N();dt();B();xa();function lee(){return{toolStartTimes:new Map,subagentStartTimes:new Map,subagentLabels:new Map}}function cee(e,t){Fe()&&(t.pending||e.toolStartTimes.has(t.toolUseId)||e.toolStartTimes.set(t.toolUseId,Date.now()))}function uee(e,t,n,r){if(!Fe())return;let o=e.toolStartTimes.get(t.toolUseId),i=o!==void 0?Date.now()-o:void 0;e.toolStartTimes.delete(t.toolUseId);let s=Pe(n??"tool"),a=t.isError?m.error("err"):m.success("ok"),l=i!==void 0?` \xB7 ${ve(i)}`:"";r.fn(m.dim(` \u25E6 ${s}${l} \xB7 `)+a)}function dee(e,t,n,r){if(!Fe())return;let{subagentId:o,agentType:i}=n,s=Pe(i??o);if(e.subagentStartTimes.has(o)||(e.subagentStartTimes.set(o,Date.now()),e.subagentLabels.set(o,s),r.fn(m.dim(` \u25E6 worker ${s} started`))),t.type==="done"||t.type==="error"){let l=e.subagentStartTimes.get(o),c=l!==void 0?Date.now()-l:void 0;e.subagentStartTimes.delete(o),e.subagentLabels.delete(o);let u=c!==void 0?` \xB7 ${ve(c)}`:"",d=t.type==="error"?m.error("failed"):m.success("done");r.fn(m.dim(` \u25E6 worker ${s}${u} \xB7 `)+d)}}var lE=class{state;writer;ttfb;constructor(t,n){this.state=lee(),this.writer=t,this.ttfb=n}onToolStart(t){cee(this.state,t)}onToolResult(t,n){uee(this.state,t,n,this.writer)}onSubagentEvent(t,n){dee(this.state,t,n,this.writer)}onFirstContent(t){this.ttfb.waitingLineEmitted&&(this.ttfb.waitingLineEmitted=!1,t.write("\r\x1B[2K"))}};function pee(e){return{startedAt:e,received:!1,waitingLineEmitted:!1}}function mee(e){return e.received?{}:{turnStartedAt:e.startedAt}}function fee(e,t,n){let r=t.type==="chunk"&&t.chunk.type==="content"&&!n;return r&&(e.received=!0),r}function gee(e,t=process.stdout,n){if(!Fe()||!t.isTTY)return;(e?.fn??console.log)(m.dim(" \u25E6 waiting for response\u2026")),n&&(n.waitingLineEmitted=!0,e&&(n.plainHooks=new lE(e,n)))}ue();B();var LLe=3e3;async function hee(e,t){if(!e)return t;let n=Date.now();if(n-t<LLe)return t;try{let r=e();r instanceof Promise&&await r}catch(r){We()&&console.error(" "+m.error("onContextProgress (status refresh) failed:"),r)}return n}wk();async function yee(e,t,n,r,o="summary",i,s){let a=Z5(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0);let l=Date.now(),c=pee(l);gee(i,process.stdout,c),_u(process.stdout,ff(process.cwd(),!0));let u="",d=0,p=!1,f=!1,g=!1,h=!1,b=!1,S,w=!1,k=!1,T={abort:null},E=0,R=[],I=new Map,C=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,x=()=>{let G=r.subagentControl;G?.hasPromotableForeground()&&aee(G,_,r.onQueuedUserMessage).then(({jobs:K,flushedText:W,flushedPreview:q})=>{let M=(i??{fn:console.log}).fn;for(let $ of K)M(m.dim(` \u2192 subagent backgrounded as ${$.jobId}: ${$.label}`));W!==void 0&&M(m.dim(` \u2192 queued message sent to this turn: ${see(q??W)}`))}).catch(()=>{})},_=r.getCompositor?r.getCompositor():null,P=()=>new td({out:nd(i),thinkingMode:o,...C?{activeSkillName:C}:{},onCancel:()=>{t.interrupt().catch(G=>{We()&&console.error(" "+m.error("session.interrupt() failed:"),G)})},...r.subagentControl?{onBackground:x}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},..._?{compositor:_}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{},...mee(c)}),D=P(),L=async()=>{if(!h){h=!0;try{await D.dispose()}catch{}}},U=async()=>{await D.arm();let G=D.getCompositor();if(i&&G){let K=G;i.fn=W=>K.commitAbove(W),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(G),r.setInterruptNotifier?.(K=>D.setInterrupting(K)),r.rearmStatus?.()};try{_?_.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{w=!0,D.setSoftStopping(!0),t.interrupt().catch(j=>{We()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),j)});let $=r.subagentControl;$?.hasActiveForeground()&&$.cancelActiveForeground().catch(j=>{We()&&console.error(" "+m.error("soft-stop cancelActiveForeground() failed:"),j)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{k=!0,t.interrupt().catch($=>{We()&&console.error(" "+m.error("pause-interrupt session.interrupt() failed:"),$)})}),await U(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(x);let{fileBlocks:G,warnings:K}=iee(e.text,{rootDir:process.cwd()});for(let $ of K)(i??{fn:console.log}).fn(m.dim(` @-file: ${$}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let W=G.length>0||e.attachments.length>0?await oee(e.text,e.attachments,void 0,G,t.sessionId):e.text,q=t.sendMessageStream(W);if(await Sc(($,j)=>{D.process($,j),j&&c.plainHooks?.onSubagentEvent($,j)},async()=>{for await(let $ of q){if(w||k)break;let j=fee(c,$,f);if($.type==="chunk"&&$.chunk.type==="content"?(u=p?ZZ(u,$.chunk.content):u+$.chunk.content,p=!1,f=!0):$.type==="message"&&!f&&(u=$.message.content),$.type==="stream_retry"&&(u=u.slice(0,d),p=u.length>0),$.type==="chunk"&&$.chunk.type==="tool_use_detail"){let X=$.chunk,ee={toolName:X.toolName,toolUseId:X.toolUseId,input:X.toolInput,...X.toolInputRaw!==void 0&&{inputRaw:X.toolInputRaw}};I.set(X.toolUseId,ee),R.push(ee),c.plainHooks?.onToolStart(X)}else if($.type==="chunk"&&$.chunk.type==="tool_result"){let X=$.chunk;d=u.length,p=!0;let ee=I.get(X.toolUseId);ee&&(ee.result=X.content,ee.isError=X.isError,I.delete(X.toolUseId)),c.plainHooks?.onToolResult(X,ee?.toolName),E=await hee(r.onContextProgress,E)}if($.type==="paused"){if(r.setPausedState?.(!0),await L(),_&&$.autoResume===!0){let X=new AbortController;T.abort=X;let ee=$.resetsAt?$.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,Ie=ee?`Keep waiting \u2014 auto-resumes at ${ee}`:"Keep waiting \u2014 auto-resume in progress",re="Switch model / provider (type /model after)",Se="Stop waiting",$e=[m.warning(" \u23F3 Usage limit reached.")+(ee?m.dim(` Auto-resumes at ${ee}.`):""),m.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];hn(_,{header:$e,options:[Ie,re,Se],signal:X.signal,initialIndex:0}).then(Sn=>{if(T.abort=null,!Sn)return;let Ve=Sn[0];Ve===void 0||Ve===Ie||(k=!0,Ve===re&&(i??{fn:console.log}).fn(m.dim(" Hint: type /model <name> to switch, then send your message again.")),t.interrupt().catch(Xt=>{We()&&console.error(" "+m.error("picker pause-interrupt session.interrupt() failed:"),Xt)}))}).catch(Sn=>{We()&&console.error(" "+m.error("picker promise rejected:"),Sn)})}else(i??{fn:console.log}).fn(wF({reason:$.reason,...$.resetsAt!==void 0?{resetsAt:$.resetsAt}:{},...$.accountId!==void 0?{accountId:$.accountId}:{},...$.autoResume!==void 0?{autoResume:$.autoResume}:{}}));continue}if($.type==="resumed"){r.setPausedState?.(!1),T.abort?.abort(),T.abort=null;let X=$.hotSwapped&&$.accountId?`\u25B6 Resumed on ${$.accountId}`:"\u25B6 Resumed";u="",d=0,p=!1,f=!1,R.length=0,I.clear(),b=!1,S=void 0,g=!1,D=P(),h=!1,await U(),(i??{fn:console.log}).fn(m.success(X));continue}if($.type==="error"){await L(),Ol(xl($.error)),g=!0;continue}D.process($),j&&(c.plainHooks?.onFirstContent(process.stdout),D.notifyFirstContent()),$.type==="done"&&(b=!0,S=$.metadata)}}),await L(),w){let $=i?i.fn:console.log,j=_?_.getPendingCount():0,X=j>0?` \xB7 ${j} queued`:"";$(m.warning(`\u23F8 Stopped${X} \u2014 work so far kept.`)+m.dim(" Send a message to continue.")),$("")}if(k){let $=i?i.fn:console.log;$(m.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),$("")}if(b&&!w&&!k){Pa(n,a,u,S,R),r.onTurnComplete&&await r.onTurnComplete(a,u).catch(()=>{}),Cu(process.stdout),sX(process.stdout,"afk: turn complete");let $=X=>{i?i.fn(X):console.log(X)},j=aE(u);if(j){$(eee(j)),$("");let X=h9(R);if(r.onTerminalState)try{r.onTerminalState(j,{doneHasCorroboratingEvidence:X})}catch{}if(n.permissionMode==="autonomous"){let ee=j.kind==="done"&&Up().verifyDone===!0&&!X;b9(j,void 0,{unverified:ee})}}if(zO(S,n,$),r.onAfterTurn){let X=r.onAfterTurn();X instanceof Promise&&await X.catch(()=>{})}}}catch(G){await L(),g||Ol(xl(G))}finally{await L(),_u(process.stdout,ff(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),T.abort?.abort(),T.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}Ji();var NLe=5e3,BLe=3,ULe="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function jLe(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function bee(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,healthRail:d,verdictLedger:p,shellPassthrough:f,bgResultNotifier:g}=s,h=null,b=[];e.session.current.waitForInitialization().then(async _=>{We()&&(h=gT(_)),await Hf(e.session.current),We()&&(b=g0())}).catch(()=>{});let S=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,w,k=!1,T=!1,E,R,I,C=(()=>{let _=parseInt(e.options.maxTurns,10);return _>0?_:void 0})(),x=0;for(g.onInjectable=()=>{x>=BLe||!o.isAwaitingInput()||!o.bufferIsEmpty()||(x++,Cu(process.stdout),S={text:ULe,attachments:[]},o.abortPendingRead())};;){if(h&&(e.replRenderer.writeLine(h),e.replRenderer.writeLine(""),h=null),b.length>0){for(let M of b)e.replRenderer.writeLine(M);e.replRenderer.writeLine(""),b=[]}let _=f.drainNotifications();for(let{job:M,result:$}of _){let j=$.errorReason===void 0?"\u2713":"\u2717",X=$.errorReason==="abort"?"killed":$.errorReason==="timeout"?"timed out":$.errorReason==="signal-killed"?"killed by signal":`exit ${$.exitCode??0}`,ee=Math.max(0,Math.round($.durationMs/100)/10);e.replRenderer.writeLine(m.dim(` ${j} [${M.id}] ${X} \xB7 ${ee}s \xB7 `)+M.command)}let P=g.drainNotifications();for(let{job:M}of P){let $=M.status==="completed"?"\u2713":M.status==="failed"?"\u2717":"\u2298",j=M.endedAt!==void 0?Math.max(0,Math.round((M.endedAt-M.startedAt)/100)/10):0,X=ie(M.label,60);e.replRenderer.writeLine(m.dim(` ${$} [${M.jobId}] subagent ${M.status} \xB7 ${j}s \xB7 `)+X)}let D=l.renderIfChanged(e.stats.sessionId);if(D.length>0){for(let M of D)e.replRenderer.writeLine(M);e.replRenderer.writeLine("")}let L,U;if(S===void 0){let M=await e.session.current.takePendingPlanExitSeed();M!==void 0&&(e.stats.permissionMode=M.mode,S={text:M.message,attachments:[]})}if(S!==void 0){let M=S;S=void 0;let $=dd(e.stats.permissionMode),j=Fa({buffer:M.text,promptText:$,isTTY:!!process.stdout.isTTY,attachmentSummary:ju([...M.attachments])});e.replRenderer.writeLine(j),L=M.text.trim(),U=M.attachments}else{let M=w;w=void 0;let $=await o.readLine({promptFn:()=>dd(e.stats.permissionMode),...M!==void 0?{initialBuffer:M}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{tE(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});L=$.text.trim(),U=$.attachments}if(!L&&U.length===0)continue;if(L.startsWith("!")){let M=/^(0|false|off|no)$/i.test(v.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!M&&(k||(k=!0,e.replRenderer.writeLine(m.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch(L))){e.statusLine.rearm();continue}}let G=!1;if(L.startsWith("/")){let M=await cX(L,e.slashCtx,U);if(M.handled){if(M.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((L==="/clear"||L.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset(),E=void 0),M.result!==null&&typeof M.result=="object"&&"kind"in M.result&&M.result.kind==="submit"){S={text:M.result.message,attachments:U??[]},e.statusLine.rearm();continue}if(M.result!==null&&typeof M.result=="object"&&"kind"in M.result&&M.result.kind==="prefill"){w=M.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}G=!0}a.push(L),await jLe(e,L);let K=L;if(G){let M=WP(L);if(M){let $=M.name.replace(/^\//,"").split(":").pop()??"";if($&&u0($)){let j={skillName:$,rawArgs:M.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},X=e.session.current.sessionId,ee=Ja(X),Ie=Date.now();F(`[afk trace] preflight.start commandName=${$}`);let re=!1,Se=await Ya(j,{cwd:e.stats.cwd??process.cwd(),artifactDir:ee},$e=>{We()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${$}) failed: `)+($e instanceof Error?$e.message:String($e)))});re=Se!==null,F(`[afk trace] preflight.end commandName=${$} durationMs=${Date.now()-Ie} success=${re}`),K=m0(Se?.manifestBlock,L)}}}let W=f.drainInjections();W.length>0&&(K=W+K);let q=g.drainInjections();if(q.length>0&&(K=q+K),E!==void 0&&(K=E+`
|
|
1950
1951
|
|
|
1951
1952
|
`+K,E=void 0),e.hookRegistry)try{let M={event:"UserPromptSubmit",prompt:K,sessionId:e.stats.sessionId},$=await e.hookRegistry.dispatch(M);$.injectContext&&(K=$.injectContext+K)}catch(M){if(M instanceof xe){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+(M.reason?m.dim(`: ${ae(M.reason)}`):"")),e.statusLine.rearm();continue}if(M instanceof Pr){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+m.dim(`: handler timed out after ${M.timeoutMs}ms`)),e.statusLine.rearm();continue}throw M}if(R=void 0,I=void 0,await yee({text:K,attachments:U},e.session.current,e.stats,{setInFlight(M){n.turnInFlight=M},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(M){await t.appendUser(M)},async onQueuedUserMessage(M){await t.appendQueuedUser(M)},async onTurnComplete(M,$){if(await t.appendTurn(M,$),e.stats.sessionId)try{Yi(e.stats)}catch(j){T||(T=!0,e.replRenderer.writeLine(m.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(j instanceof Error?j.message:String(j))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,C)),e.statusLine.rearm(),c?.repaint("observing"),d?.update(e.stats)},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(M,$)=>{p?.push(M),R=M.kind,I=$?.doneHasCorroboratingEvidence},setActiveCompositor:M=>{n.activeCompositor=M,M===null&&n.interruptPickerAbort&&(n.interruptPickerAbort.abort(),n.interruptPickerAbort=null)},setInterruptNotifier:M=>{n.notifyInterrupting=M},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:M=>o.setBackgroundHandler(M),setSoftStopHandler:i,setPausedState:M=>o.setPausedState(M),setPauseInterruptHandler:M=>o.setPauseInterruptHandler(M),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,C)),d?.update(e.stats,e.contextSampler.getRatio())},...c?{onStageChange:(M,$)=>{c.repaint(M),u?.onStage(M,$)}}:{}},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(dd(e.stats.permissionMode))),e.hookRegistry)try{let M=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...R!==void 0?{terminalState:R}:{},...I!==void 0?{doneHasCorroboratingEvidence:I}:{}},void 0,NLe);M.injectContext&&M.injectContext.trim().length>0&&(E=M.injectContext)}catch(M){if(M instanceof _t)throw M;M instanceof Pr?(F("[stop hook] handler timed out"),e.completionWriter.fn(m.dim(" [stop hook] timed out"))):M instanceof xe?e.completionWriter.fn(m.dim(` [stop hook] blocked: ${ae(M.reason??"no reason given")}`)):F("[stop hook] unexpected error: "+String(M))}}}function HLe(e,t){if(e!==void 0){let n=e.toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}return typeof t=="boolean"?t:!0}async function See(e,t,n,r){let o=await mZ(),i=new eE({rl:e.rl,history:o,statusLine:e.statusLine}),s=HLe(v.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await $Z(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar,getMascotBar:()=>a?.mascotBar});a=QZ(e,n);let c=a;e.slashCtx.suspendFooter=()=>{c.bgStatusBar.stop(),c.mascotBar.stop(),c.healthRail.stop(),e.statusLine.stop()},e.slashCtx.resumeFooter=()=>{e.statusLine.start(),c.healthRail.start(),c.mascotBar.start(),c.bgStatusBar.start(),c.bgStatusBar.redraw()},await bee(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.healthRail.stop(),a?.loopStageBar.stop(),a?.mascotBar.stop(),a?.bgStatusBar.stop(),a?.verdictLedger.stop(),a?.contextPane.dispose();let l=c=>console.log(c);e.completionWriter.fn=l,e.completionWriter.idleFn=l,await i.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}Mp();lc();import{execFile as WLe}from"node:child_process";import{dirname as KLe,isAbsolute as GLe,resolve as qLe}from"node:path";import{promisify as zLe}from"node:util";var wee=zLe(WLe),VLe=3e3,YLe=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function JLe(){let t=(await wee("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=GLe(t)?t:qLe(process.cwd(),t);return KLe(n)}async function vee(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await JLe()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),VLe)});try{let o=Wn({execFile:wee,repoRoot:t,dryRun:!1,scope:"interactive",bypassSoftLaunch:!0}),i=await Promise.race([o,r]);if(i==="timeout")return{ran:!1,removedCount:0,skippedReason:"timeout"};let s=i;return s.warnings.some(c=>c.toLowerCase().includes("contested"))?{ran:!1,removedCount:0,skippedReason:"lock-contested"}:{ran:!0,removedCount:s.candidates.filter(c=>YLe.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}bh();Mp();import{promises as XLe}from"node:fs";import{dirname as QLe,join as Eee}from"node:path";import{randomBytes as ZLe}from"node:crypto";var eNe=["Generate a 2-4 word kebab-case slug describing this work request.","Rules:","- ASCII lowercase letters and digits only, separated by single hyphens","- 2 to 4 hyphen-separated words","- Maximum 30 characters total","- No prefix, no quotes, no punctuation other than hyphens","- Output ONLY the slug \u2014 no explanation, no preamble","Examples: fix-cleanup-race, add-telegram-allowlist, refactor-prompt-loader, debug-flaky-test"].join(`
|
|
1952
|
-
`),kee=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,YO=30,tNe=1024,nNe=8e3,rNe="haiku";async function oNe(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=lNe(n,tNe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??nNe),s=t.signal?cNe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Nl({token:t.token,model:t.model??rNe,system:eNe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=iNe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=QLe(t.worktreePath);return await sNe(l,c)}function iNe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(kee.test(t)&&t.length<=YO)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>YO)break;o=s}return kee.test(o)?o:null}async function sNe(e,t){if(!await aNe(Eee(t,e)))return e;let n=ZLe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,YO-5)}-${n}`}async function aNe(e){try{return await XLe.access(e),!0}catch{return!1}}function lNe(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function cNe(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function Ree(e){let t,n,r=Eee(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await oNe(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Ry(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return Tee(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return Tee(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function Tee(e,t){e&&e.setCwd(t),uNe(t)}function uNe(e){try{process.chdir(e)}catch{}}ht();Rt();El();to();H();import{spawn as Aee}from"child_process";import{existsSync as Cee,mkdirSync as gNe,readFileSync as _ee,unlinkSync as xee,writeFileSync as Iee}from"fs";import{get as hNe}from"https";import{join as Pee}from"path";import{readFileSync as dNe}from"fs";import{dirname as pNe,join as mNe}from"path";import{fileURLToPath as fNe}from"url";function oo(){try{return"5.147.
|
|
1953
|
+
`),kee=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,YO=30,tNe=1024,nNe=8e3,rNe="haiku";async function oNe(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=lNe(n,tNe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??nNe),s=t.signal?cNe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Nl({token:t.token,model:t.model??rNe,system:eNe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=iNe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=QLe(t.worktreePath);return await sNe(l,c)}function iNe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(kee.test(t)&&t.length<=YO)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>YO)break;o=s}return kee.test(o)?o:null}async function sNe(e,t){if(!await aNe(Eee(t,e)))return e;let n=ZLe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,YO-5)}-${n}`}async function aNe(e){try{return await XLe.access(e),!0}catch{return!1}}function lNe(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function cNe(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function Ree(e){let t,n,r=Eee(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await oNe(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Ry(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return Tee(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return Tee(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function Tee(e,t){e&&e.setCwd(t),uNe(t)}function uNe(e){try{process.chdir(e)}catch{}}ht();Rt();El();to();H();import{spawn as Aee}from"child_process";import{existsSync as Cee,mkdirSync as gNe,readFileSync as _ee,unlinkSync as xee,writeFileSync as Iee}from"fs";import{get as hNe}from"https";import{join as Pee}from"path";import{readFileSync as dNe}from"fs";import{dirname as pNe,join as mNe}from"path";import{fileURLToPath as fNe}from"url";function oo(){try{return"5.147.2"}catch{}try{let e=pNe(fNe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(dNe(mNe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}B();N();var yNe=64*1024,bNe=10800*1e3,SNe=800,wNe=3600*1e3,vNe="update-check.json",kNe="pending-update.json";function JO(){return Pee(vl(),vNe)}function ag(){return Pee(vl(),kNe)}function XO(){let e=vl();Cee(e)||gNe(e,{recursive:!0})}function Mee(e,t){let n=a=>a.split(/[-+]/,1)[0]??a,r=a=>a.includes("-"),o=n(e).split(".").map(Number),i=n(t).split(".").map(Number),s=Math.max(o.length,i.length);for(let a=0;a<s;a++){let l=o[a]??0,c=i[a]??0;if(c>l)return!0;if(c<l)return!1}return r(e)&&!r(t)}function Oee(){try{let e=_ee(JO(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function Dee(){try{XO();let e=`
|
|
1953
1954
|
const https = require('https');
|
|
1954
1955
|
const fs = require('fs');
|
|
1955
1956
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|
|
@@ -1999,7 +2000,7 @@ Run \`afk i\` then \`/resume\` to list saved sessions.
|
|
|
1999
2000
|
`)}var dBe=7777,pBe="127.0.0.1";async function Rte(e={}){let t=new gE({...e.sessionConfig!==void 0?{sessionConfig:e.sessionConfig}:{},...e.telemetryPath!==void 0?{telemetryPath:e.telemetryPath}:{},...e.sessionFactory!==void 0?{sessionFactory:e.sessionFactory}:{},...e.cooldownMs!==void 0?{cooldownMs:e.cooldownMs}:{},...e.now!==void 0?{now:e.now}:{},...e.onTaskComplete!==void 0?{onTaskComplete:e.onTaskComplete}:{},...e.doneUnverifiedProbe!==void 0?{doneUnverifiedProbe:e.doneUnverifiedProbe}:{},...e.pullPollIntervalMs!==void 0?{pullPollIntervalMs:e.pullPollIntervalMs}:{},...e.queueDir!==void 0?{queueDir:e.queueDir}:{}});e.pullPollIntervalMs!==void 0&&e.pullPollIntervalMs>0&&t.startPullLoop();for(let a of e.tasks??[])t.register(a);let n=e.writePortFile!==!1,r=uBe(Gg("default"),"port"),o=oBe((a,l)=>fBe(a,l,t)),{port:i,address:s}=await Tte(o,e.port??dBe,e.host??pBe);if(n)try{aBe(cBe(r),{recursive:!0}),iBe(r,`${s}:${i}`,"utf-8")}catch{}return{port:i,host:s,scheduler:t,registerTask(a){t.register(a)},unregisterTask(a){t.unregister(a)},tickOnce(a){return t.tick(a)},fireOnStart(){return t.fireOnStart()},async stop(){if(await t.stop(),n)try{lBe(r,"utf-8").trim()===`${s}:${i}`&&sBe(r)}catch{}await Ete(o)}}}function mBe(e){return new Promise((t,n)=>{let r=[];e.on("data",o=>r.push(o)),e.on("end",()=>t(Buffer.concat(r).toString("utf-8"))),e.on("error",n)})}function fBe(e,t,n){gBe(e,t,n).catch(r=>{let o=r instanceof Error?r.message:String(r);t.headersSent||t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:o}))})}async function gBe(e,t,n){let r=e.url??"/";if(e.method==="GET"&&r==="/health"){let o=JSON.stringify({status:"ok",tasks:n.list().length});t.writeHead(200,{"Content-Type":"application/json"}),t.end(o);return}if(e.method==="GET"&&r==="/tasks"){t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(n.list()));return}if(e.method==="POST"&&r==="/tasks"){let o=await mBe(e),i;try{i=JSON.parse(o)}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"invalid JSON body"}));return}if(!i||typeof i!="object"){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"body must be an object"}));return}let s=i,a=s.cron??s.cronExpression;if(typeof s.taskId!="string"||typeof s.command!="string"||typeof a!="string"){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"taskId, command, and cron (or cronExpression) are required strings"}));return}let l=s.notifyChat,c={taskId:s.taskId,command:s.command,trigger:s.trigger??"cron",cronExpression:a,...s.notifyOn!==void 0?{notifyOn:s.notifyOn}:{},...typeof l=="number"||typeof l=="string"?{notifyChat:l}:{}};try{n.register(c)}catch(u){let d=u instanceof Error?u.message:String(u),p=d.includes("already registered")?409:400;t.writeHead(p,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:d}));return}t.writeHead(201,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}if(e.method==="DELETE"&&r.startsWith("/tasks/")){let o=r.slice(7);if(!o){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"taskId required in URL"}));return}if(!n.list().some(s=>s.taskId===o)){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"not found"}));return}n.unregister(o),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"not found"}))}H();To();jp();fy();yT();function xte(e,t){let n=e??t;if(n===void 0||n==="")return;let r=Number(n);if(!Number.isFinite(r)||!Number.isInteger(r)||r<=0)throw new Error(`Invalid timeout-ms: '${n}' \u2014 must be a positive integer (milliseconds).`);return r}function Ate(e,t){let n=e??t;if(n===void 0||n==="")return;let r=Number(n);if(!Number.isFinite(r)||!Number.isInteger(r)||r<0)throw new Error(`Invalid sessionstart-cooldown-ms: '${n}' \u2014 must be a non-negative integer (milliseconds).`);return r}function Cte(e,t){if(e!==void 0&&e!==""){if(e==="cron"||e==="sessionstart"||e==="both"||e==="pull")return e;throw new Error(`Invalid trigger: '${e}' \u2014 must be one of cron | sessionstart | both | pull.`)}return t!==void 0&&t!==""?"cron":"sessionstart"}var hBe="",oD="default";function gs(e){if(e!==void 0&&e.trim()!=="")return e}function _te(e,t,n){return gs(e)??gs(t)??gs(n)??hBe}function Ite(e,t,n){return gs(e)??gs(t)??gs(n)??oD}var yBe="127.0.0.1";function Pte(e,t){return gs(e)??gs(t)??yBe}function Mte(e){let t=e.trim().toLowerCase();return t==="127.0.0.1"||t==="localhost"||t==="::1"}Rt();ht();qy();Kc();tn();ci();dr();zn();Sa();Tn();Wt();sp();function wBe(e){let t;return(n,r)=>{let o=new AbortController,i=ga(o.signal);t??=new Mt;let s=v.AFK_WORKSPACE_DISABLED==="1"?void 0:new fo,{rootManager:a,subagentExecutor:l,skillExecutor:c,composeExecutor:u}=Su({surface:"daemon",parentSession:i,apiKey:e.apiKey,model:e.model,managerParentModel:e.model,defaultSubagentModel:du(e.model),resolveApiKeyForModel:Jt,...e.baseUrl!==void 0?{baseUrl:e.baseUrl}:{},...e.openaiBaseUrl!==void 0?{openaiBaseUrl:e.openaiBaseUrl}:{},...e.cwd!==void 0?{cwd:e.cwd,nestedCwd:e.cwd}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter,skillTraceWriter:n.traceWriter}:{},workspaceStore:s}),d=n.mcpManager,p=d?.getMcpToolWireNames()??[],f=Ra(void 0,{subagentExecutor:l,skillExecutor:c,composeExecutor:u,memoryStore:t,workspaceStore:s,model:String(e.model),...e.openaiBaseUrl!==void 0?{openaiBaseUrl:e.openaiBaseUrl}:{},...d!==void 0?{mcpManager:d}:{}})??new rt({permissions:{allowedTools:[...sn,...Ws,...Tt,...Ns,"agent","skill","compose",...p]},subagentExecutor:l,skillExecutor:c,composeExecutor:u,memoryStore:t,workspaceStore:s,surface:"daemon",...d!==void 0?{mcpManager:d}:{}}),g=n.maxToolUseIterations??hu(),h=new Dt(No(xo({...n,provider:f,isNonInteractive:!0,drainSubagents:b=>a.abortAllAndDrain("session_end","user_signal",void 0,b==="reset"),surface:"daemon",...g!==void 0?{maxToolUseIterations:g}:{}})),r);return a.setOnSubagentSucceeded((b,S)=>{h.recordSubagentCompletion(b,S)}),u.setOnSubagentSucceeded((b,S)=>{h.recordSubagentCompletion(b,S)}),h}}var vBe="\u26A0\uFE0F Unverified: no file write/edit or successful command recorded this turn \u2014 confirm before relying on this.";function kBe(e,t){if(e===void 0)return;let n=Py(e,My());if(!n.ok){console.error(`[daemon] task ${t}: ignoring notifyChat \u2014 ${n.message} Falling back to default routing.`);return}let r=nc(v.AFK_TELEGRAM_ALLOWED_CHAT_IDS);if(!my(n.id,r)){console.error(`[daemon] task ${t}: ignoring notifyChat ${n.id} \u2014 not in AFK_TELEGRAM_ALLOWED_CHAT_IDS. Falling back to default routing.`);return}return n.id}function TBe(e,t={},n=!1){let r=n===!0&&t.doneUnverified===!0,o=e.status==="success"?"\u2705":e.status==="skipped"?"\u23ED\uFE0F":"\u274C",i=(e.durationMs/1e3).toFixed(1),a=[r?`\u26A0\uFE0F Done (unverified) \u2014 daemon task: ${e.taskId} (${e.status})`:`${o} daemon task: ${e.taskId} (${e.status})`,`trigger=${e.trigger} duration=${i}s`];e.skipReason&&a.push(`skipReason=${e.skipReason}`),e.errorMessage&&a.push(`error: ${e.errorMessage.slice(0,400)}`);let l=t.responseText??e.responseExcerpt;return l&&a.push("",l),r&&a.push("",vBe),a.join(`
|
|
2000
2001
|
`)}function Ote(e){e.command("daemon").description("Run agent-afk as a daemon that fires scheduled tasks (e.g. /forge-friction --auto)").option("-p, --port <number>","Control HTTP port","7777").option("--host <address>","Bind address for the control HTTP surface. Overrides AFK_DAEMON_HOST. Defaults to 127.0.0.1 (loopback only). The control surface is UNAUTHENTICATED \u2014 bind a non-loopback address (e.g. 0.0.0.0) only on a trusted or firewalled network.").option("-t, --task <command>","Command to fire on each tick. Required for the cron and both triggers; optional otherwise.").option("-c, --cron <expression>",'Cron expression (e.g. "0 */6 * * *"). Required when --trigger includes cron.').option("-i, --task-id <id>",`Task identifier (default: ${oD})`).option("--once","Fire one tick and exit (for testing)",!1).option("--timeout-ms <ms>","Per-tick session timeout in ms. Overrides AFK_TIMEOUT_MS. Defaults to the session default (120000).").option("--thinking <mode>","Thinking mode: 'adaptive' | 'disabled' | 'max' | 'enabled:<N>'").option("--effort <level>","Effort level: low|medium|high|xhigh|max").option("--trigger <mode>","Trigger mode: cron | sessionstart | both | pull. Defaults to 'cron' when --cron is set, else 'sessionstart'.").option("--sessionstart-cooldown-ms <ms>","Cooldown between Phase 6 sessionstart fires. Overrides AFK_SESSIONSTART_COOLDOWN_MS. Defaults to 6h.").option("--dump-prompt [path]",'Dump resolved SDK prompt+options+provenance to file (default: ~/.afk/logs/prompt-dump-<ISO>.json) or "stderr"').action(async t=>{let n=parseInt(t.port,10);(Number.isNaN(n)||n<=0)&&V(new Error(`Invalid port: ${t.port}`));let r=lt(),o=_te(t.task,v.AFK_DAEMON_TASK,r.daemon?.task),i=Ite(t.taskId,v.AFK_DAEMON_TASK_ID,r.daemon?.taskId),s=Pte(t.host,v.AFK_DAEMON_HOST),a,l,c;try{a=xte(t.timeoutMs,v.AFK_TIMEOUT_MS),l=Ate(t.sessionstartCooldownMs,v.AFK_SESSIONSTART_COOLDOWN_MS),c=Cte(t.trigger,t.cron)}catch(_){V(_)}(c==="cron"||c==="both")&&!t.cron&&V(new Error(`--cron is required when --trigger is '${c}'.`)),(c==="cron"||c==="both")&&o.trim()===""&&V(new Error("A daemon task is required for the cron and both triggers. Provide one via --task, the AFK_DAEMON_TASK env var, or daemon.task in afk.config.json."));let u,d;try{u=qi(t.thinking)??pu(),d=zi(t.effort)??mu()}catch(_){V(_)}let p=r.daemon?.worktreePrune,f=v.AFK_WORKTREE_PRUNE_DISABLE==="1",g=p?.cron??"0 4 * * *",h={taskId:"worktree-prune",command:"__BUILTIN_WORKTREE_PRUNE__",trigger:"cron",cronExpression:g},b=c==="pull"||o.trim()===""?[]:[{taskId:i,command:o,trigger:c,...t.cron!==void 0?{cronExpression:t.cron}:{}}];!f&&p?.enabled!==!1&&b.push(h);let S=Rn();for(let _ of S)_.enabled&&b.push(Gy(_));if(t.dumpPrompt!==void 0&&t.dumpPrompt!==!1){let _=t.dumpPrompt===!0?bBe.join(SBe.homedir(),".afk","logs",`prompt-dump-${new Date().toISOString().replace(/[:.]/g,"-")}.json`):t.dumpPrompt;process.env.AFK_DUMP_PROMPT=_}let w=0,k=6e4,T=(_,P)=>{let D=Date.now();if(D-w<k)return;w=D;let L=P instanceof Error?`${P.name}: ${P.message}`:String(P);Bn(`\u{1F6D1} agent-afk daemon ${_}
|
|
2001
2002
|
${L.slice(0,500)}`).catch(U=>{console.error("[daemon] crash notification push failed:",U instanceof Error?U.message:String(U))})};process.on("uncaughtException",_=>{T("uncaughtException",_),process.exit(1)}),process.on("unhandledRejection",_=>{T("unhandledRejection",_),process.exit(1)});let E=v.AFK_DAEMON_CWD,R=ot(),I=Gi(),C=E!==void 0&&E.length>0?E:void 0;await Yc();let x=wBe({model:R,...I!==void 0?{apiKey:I}:{},...r.baseUrl!==void 0?{baseUrl:r.baseUrl}:{},...r.openaiBaseUrl!==void 0?{openaiBaseUrl:r.openaiBaseUrl}:{},...C!==void 0?{cwd:C}:{}});try{let _=await Rte({port:n,host:s,...t.once?{writePortFile:!1}:{},sessionConfig:{model:R,...I!==void 0?{apiKey:I}:{},...r.baseUrl!==void 0?{baseUrl:r.baseUrl}:{},...a!==void 0?{timeoutMs:a}:{},...u!==void 0?{thinking:u}:{},...d!==void 0?{effort:d}:{},...C!==void 0?{cwd:C}:{}},sessionFactory:x,...l!==void 0?{cooldownMs:l}:{},...c==="pull"?{pullPollIntervalMs:3e4,queueDir:jt()}:{},tasks:b,doneUnverifiedProbe:({responseText:D,successfulToolNames:L})=>{let U=aE(D);return U===null||U.kind!=="done"?!1:!L.some(K=>j0.has(K))},onTaskComplete:(D,L)=>{let U=kBe(L?.notifyChat,D.taskId);Bn(TBe(D,L,r.daemon?.verifyDone===!0),{markdown:!0,...U!==void 0?{target:U}:{}}).catch(()=>{})}});if(t.once){console.log(m.info(`\u25B6 Firing task '${i}' once...`));let D=await _.tickOnce(i);console.log(JSON.stringify(D,null,2)),await _.stop(),process.exit(D.status==="success"?0:1)}if(c==="sessionstart"||c==="both"){let D=await _.fireOnStart();for(let L of D){let U=L.status==="success"?"\u2714":L.status==="skipped"?"\u23ED":"\u2717";console.log(m.info(`${U} sessionstart: ${JSON.stringify(L)}`))}}console.log(m.success(`\u2714 Daemon listening on http://${_.host}:${_.port}`)),Mte(_.host)||console.log(m.warning(`\u26A0 Control surface bound to ${_.host} (non-loopback) and is UNAUTHENTICATED \u2014 anyone who can reach this port can schedule commands the daemon will run. Ensure the port is firewalled / on a trusted network.`)),c==="pull"?(console.log(m.success("\u2714 Daemon in pull mode")),console.log(m.dim(` polling queue: ${jt()} every 30s`))):console.log(m.dim(` task='${i}' command='${o}' trigger='${c}'${t.cron?` cron='${t.cron}'`:""}`)),b.length>1&&console.log(m.meta(` + built-in: worktree-prune (cron: ${g})`)),console.log(m.dim(" Press Ctrl+C to stop."));let P=async()=>{console.log(m.dim(`
|
|
2002
|
-
\xB7 Shutting down daemon...`)),await _.stop(),process.exit(0)};process.on("SIGINT",P),process.on("SIGTERM",P)}catch(_){V(_)}})}B();import{execFile as EBe}from"node:child_process";function yE(e){let{bin:t,args:n}=process.platform==="darwin"?{bin:"open",args:[e]}:process.platform==="win32"?{bin:"cmd",args:["/c","start","",e]}:{bin:"xdg-open",args:[e]};try{EBe(t,n,()=>{}).unref()}catch{}}import{createServer as YBe}from"node:http";import{randomBytes as RBe,timingSafeEqual as xBe}from"node:crypto";var ABe=32;function ug(){return RBe(ABe).toString("hex")}function dg(e,t){if(typeof t!="string"||t.length===0)return!1;let n=Buffer.from(e,"utf8"),r=Buffer.from(t,"utf8");return n.length!==r.length?!1:xBe(n,r)}function Dte(e){return e&&/^Bearer\s+(.+)$/i.exec(e.trim())?.[1]?.trim()||void 0}function $te(e){return Lte(e,"token")}function Fte(e){return Lte(e,"k")}function Lte(e,t){let n=e.indexOf("?");return n===-1?void 0:new URLSearchParams(e.slice(n+1)).get(t)??void 0}var iD="afk_web_doc";function Nte(e){if(e)for(let t of e.split(";")){let n=t.indexOf("=");if(n===-1||t.slice(0,n).trim()!==iD)continue;let r=t.slice(n+1).trim();try{return decodeURIComponent(r)||void 0}catch{return r||void 0}}}function Bte(e,t,n){return e===void 0||e===""?!0:CBe(t,n).includes(e)}function CBe(e,t){return(Ute(e)||_Be(e)?["127.0.0.1","localhost","[::1]"]:[e]).map(r=>`http://${r}:${t}`)}function Ute(e){return e==="127.0.0.1"||e==="localhost"||e==="::1"||e==="[::1]"}function _Be(e){return e==="0.0.0.0"||e==="::"||e==="[::]"}function jte(e,t){return Ute(e)?{ok:!0}:t?{ok:!0}:{ok:!1,reason:`refusing to bind non-loopback host "${e}" without an explicit token. Pass --token <value> or set AFK_WEB_TOKEN. This surface can run tools and edit files.`}}H();import{readFile as IBe}from"node:fs/promises";import{join as PBe,normalize as MBe}from"node:path";var Jo=Object.freeze({"content-security-policy":"default-src 'none'; script-src 'self'; style-src 'self'; connect-src 'self'; img-src 'self' data:","x-content-type-options":"nosniff","x-frame-options":"DENY","referrer-policy":"no-referrer"}),OBe="__AFK_WEB_TOKEN__";function DBe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}async function Hte(e,t,n,r,o){let i=n==="/"||n==="/index.html",s=dg(o.token,$te(r)),a=!s&&i&&o.nonces.redeem(Fte(r)),l=s||a;if(!(l||dg(o.docKey,Nte(e.headers.cookie)))){t.writeHead(401,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Missing or invalid token. Use the URL printed by `afk web`.");return}let u=i?{"set-cookie":$Be(o.docKey)}:{},d=i?"index.html":n.replace(/^\/+/,""),p=MBe(d);if(p.startsWith("..")||p.startsWith("/")){t.writeHead(403,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Forbidden");return}let f=PBe(x$(),p);try{let g=await IBe(f),h=i?Buffer.from(g.toString("utf8").split(OBe).join(l?DBe(o.token):"")):g;t.writeHead(200,{...Jo,"content-type":FBe(p),"content-length":h.byteLength,"cache-control":"no-store",...u}),t.end(h)}catch{if(i){t.writeHead(503,{...Jo,...u,"content-type":"text/plain; charset=utf-8"}),t.end("Web UI bundle not built. Run `pnpm build:web-ui` and retry.");return}t.writeHead(404,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Not found")}}function $Be(e){return`${iD}=${encodeURIComponent(e)}; Path=/; HttpOnly; SameSite=Strict`}function FBe(e){return e.endsWith(".html")?"text/html; charset=utf-8":e.endsWith(".js")?"text/javascript; charset=utf-8":e.endsWith(".css")?"text/css; charset=utf-8":e.endsWith(".svg")?"image/svg+xml":"application/octet-stream"}var LBe=6e4,bE=class{constructor(t=Date.now){this.now=t}now;issued=new Map;mint(){let t=ug();return this.issued.set(t,this.now()+LBe),t}redeem(t){if(this.sweep(),t===void 0||t==="")return!1;let n=this.issued.get(t);return n===void 0?!1:(this.issued.delete(t),n>this.now())}sweep(){let t=this.now();for(let[n,r]of this.issued)r<=t&&this.issued.delete(n)}};jr();var SE=class{waiters=new Map;listeners=new Set;counter=0;installed=!1;install(){this.installed||(this.installed=!0,Je.install((t,n)=>this.enqueue(t,n)))}uninstall(){if(this.installed){this.installed=!1,Je.uninstall();for(let t of[...this.waiters.keys()])this.settle(t,{action:"decline"})}}list(){return[...this.waiters.values()].map(t=>t.pending)}onChange(t){return this.listeners.add(t),()=>this.listeners.delete(t)}resolve(t,n){return this.waiters.get(t)?(this.settle(t,NBe(n)),!0):!1}enqueue(t,n){this.counter+=1;let r=`el_${this.counter}`,o=n;return o.onActive?.(),new Promise(i=>{let s={id:r,request:t,createdAt:new Date().toISOString(),...o.sessionId!==void 0?{sessionId:o.sessionId}:{}};this.waiters.set(r,{resolve:i,pending:s}),this.emit();let a=()=>{this.settle(r,{action:"cancel"})};n.signal.aborted?a():n.signal.addEventListener("abort",a,{once:!0})})}settle(t,n){let r=this.waiters.get(t);r&&(this.waiters.delete(t),r.resolve(n),this.emit())}emit(){let t=this.list();for(let n of this.listeners)try{n(t)}catch{}}};function NBe(e){if(typeof e!="object"||e===null)return{action:"decline"};let t=e,n=t.action;if(n==="accept"||n==="decline"||n==="cancel"||n==="skip"){let r=t.content;return typeof r=="object"&&r!==null?{action:n,content:r}:{action:n}}return{action:"decline"}}H();H();oa();Ks();import*as wE from"node:fs/promises";var Wte=80,BBe=20;function UBe(e){let t=e.trim().replace(/\s+/g," ");return t.length>Wte?`${t.slice(0,Wte)}\u2026`:t}async function jBe(e){let t={};try{let n=0;for await(let r of wi(e))if(n+=1,r.kind==="meta"?(r.cwd!==void 0&&(t.cwd=r.cwd),r.surface!==void 0&&(t.surface=r.surface)):r.kind==="user"&&t.title===void 0&&(t.title=UBe(r.text)),t.title!==void 0&&(t.cwd!==void 0||t.surface!==void 0)||n>=BBe)break}catch{}return t}async function HBe(){let e=new Map,t;try{t=await wE.readdir(et(),{withFileTypes:!0})}catch{return e}for(let n of t)if(!(!n.isDirectory()||!uo(n.name)))try{let r=await wE.stat(Tl(n.name));r.isFile()&&e.set(n.name,r.mtime)}catch{}return e}async function WBe(){try{let e=await Tx();return new Set(e.map(t=>t.sessionId))}catch{return null}}function KBe(e,t){return e.updatedAt===void 0&&t.updatedAt===void 0?0:e.updatedAt===void 0?1:t.updatedAt===void 0||e.updatedAt>t.updatedAt?-1:e.updatedAt<t.updatedAt?1:0}var GBe=100;async function Kte(e,t=GBe){let[n,r]=await Promise.all([HBe(),WBe()]),o=[...e],i=[...n.keys()].filter(l=>!e.has(l)).sort((l,c)=>{let u=n.get(l)?.getTime()??0;return(n.get(c)?.getTime()??0)-u}).slice(0,Math.max(0,t)),s=new Set([...o,...i]),a=await Promise.all([...s].map(async l=>{let c=e.has(l)?"live":"readonly",u=await jBe(l),d=n.get(l),p={id:l,mode:c};return u.cwd!==void 0&&(p.cwd=u.cwd),u.surface!==void 0&&(p.surface=u.surface),u.title!==void 0&&(p.title=u.title),d!==void 0&&(p.updatedAt=d.toISOString()),c==="readonly"&&r!==null&&(p.alive=r.has(l)),p}));return a.sort(KBe),a}function ze(e,t,n){let r=JSON.stringify(n,Au);e.writeHead(t,{...Jo,"content-type":"application/json; charset=utf-8","content-length":Buffer.byteLength(r),"cache-control":"no-store"}),e.end(r)}function pg(e,t){return uo(t)?!0:(ze(e,400,{error:"bad_session_id",message:"session id must be 1-128 chars of [A-Za-z0-9_-]"}),!1)}function lD(e,t,n){return e.owned.has(n)?!0:(ze(t,409,{error:"session_not_owned",message:`session ${n} is attached read-only (it runs in another process). Prompts and approvals can only be sent to sessions started by this server.`}),!1)}async function Gte(e,t){let n=await Kte(e.owned);ze(t,200,{sessions:n})}var sD=null,aD=null,qBe=async()=>{let[{registerAll:e},{buildSlashUniverse:t}]=await Promise.all([Promise.resolve().then(()=>(_O(),eZ)),Promise.resolve().then(()=>(wf(),
|
|
2003
|
+
\xB7 Shutting down daemon...`)),await _.stop(),process.exit(0)};process.on("SIGINT",P),process.on("SIGTERM",P)}catch(_){V(_)}})}B();import{execFile as EBe}from"node:child_process";function yE(e){let{bin:t,args:n}=process.platform==="darwin"?{bin:"open",args:[e]}:process.platform==="win32"?{bin:"cmd",args:["/c","start","",e]}:{bin:"xdg-open",args:[e]};try{EBe(t,n,()=>{}).unref()}catch{}}import{createServer as YBe}from"node:http";import{randomBytes as RBe,timingSafeEqual as xBe}from"node:crypto";var ABe=32;function ug(){return RBe(ABe).toString("hex")}function dg(e,t){if(typeof t!="string"||t.length===0)return!1;let n=Buffer.from(e,"utf8"),r=Buffer.from(t,"utf8");return n.length!==r.length?!1:xBe(n,r)}function Dte(e){return e&&/^Bearer\s+(.+)$/i.exec(e.trim())?.[1]?.trim()||void 0}function $te(e){return Lte(e,"token")}function Fte(e){return Lte(e,"k")}function Lte(e,t){let n=e.indexOf("?");return n===-1?void 0:new URLSearchParams(e.slice(n+1)).get(t)??void 0}var iD="afk_web_doc";function Nte(e){if(e)for(let t of e.split(";")){let n=t.indexOf("=");if(n===-1||t.slice(0,n).trim()!==iD)continue;let r=t.slice(n+1).trim();try{return decodeURIComponent(r)||void 0}catch{return r||void 0}}}function Bte(e,t,n){return e===void 0||e===""?!0:CBe(t,n).includes(e)}function CBe(e,t){return(Ute(e)||_Be(e)?["127.0.0.1","localhost","[::1]"]:[e]).map(r=>`http://${r}:${t}`)}function Ute(e){return e==="127.0.0.1"||e==="localhost"||e==="::1"||e==="[::1]"}function _Be(e){return e==="0.0.0.0"||e==="::"||e==="[::]"}function jte(e,t){return Ute(e)?{ok:!0}:t?{ok:!0}:{ok:!1,reason:`refusing to bind non-loopback host "${e}" without an explicit token. Pass --token <value> or set AFK_WEB_TOKEN. This surface can run tools and edit files.`}}H();import{readFile as IBe}from"node:fs/promises";import{join as PBe,normalize as MBe}from"node:path";var Jo=Object.freeze({"content-security-policy":"default-src 'none'; script-src 'self'; style-src 'self'; connect-src 'self'; img-src 'self' data:","x-content-type-options":"nosniff","x-frame-options":"DENY","referrer-policy":"no-referrer"}),OBe="__AFK_WEB_TOKEN__";function DBe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}async function Hte(e,t,n,r,o){let i=n==="/"||n==="/index.html",s=dg(o.token,$te(r)),a=!s&&i&&o.nonces.redeem(Fte(r)),l=s||a;if(!(l||dg(o.docKey,Nte(e.headers.cookie)))){t.writeHead(401,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Missing or invalid token. Use the URL printed by `afk web`.");return}let u=i?{"set-cookie":$Be(o.docKey)}:{},d=i?"index.html":n.replace(/^\/+/,""),p=MBe(d);if(p.startsWith("..")||p.startsWith("/")){t.writeHead(403,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Forbidden");return}let f=PBe(x$(),p);try{let g=await IBe(f),h=i?Buffer.from(g.toString("utf8").split(OBe).join(l?DBe(o.token):"")):g;t.writeHead(200,{...Jo,"content-type":FBe(p),"content-length":h.byteLength,"cache-control":"no-store",...u}),t.end(h)}catch{if(i){t.writeHead(503,{...Jo,...u,"content-type":"text/plain; charset=utf-8"}),t.end("Web UI bundle not built. Run `pnpm build:web-ui` and retry.");return}t.writeHead(404,{...Jo,"content-type":"text/plain; charset=utf-8"}),t.end("Not found")}}function $Be(e){return`${iD}=${encodeURIComponent(e)}; Path=/; HttpOnly; SameSite=Strict`}function FBe(e){return e.endsWith(".html")?"text/html; charset=utf-8":e.endsWith(".js")?"text/javascript; charset=utf-8":e.endsWith(".css")?"text/css; charset=utf-8":e.endsWith(".svg")?"image/svg+xml":"application/octet-stream"}var LBe=6e4,bE=class{constructor(t=Date.now){this.now=t}now;issued=new Map;mint(){let t=ug();return this.issued.set(t,this.now()+LBe),t}redeem(t){if(this.sweep(),t===void 0||t==="")return!1;let n=this.issued.get(t);return n===void 0?!1:(this.issued.delete(t),n>this.now())}sweep(){let t=this.now();for(let[n,r]of this.issued)r<=t&&this.issued.delete(n)}};jr();var SE=class{waiters=new Map;listeners=new Set;counter=0;installed=!1;install(){this.installed||(this.installed=!0,Je.install((t,n)=>this.enqueue(t,n)))}uninstall(){if(this.installed){this.installed=!1,Je.uninstall();for(let t of[...this.waiters.keys()])this.settle(t,{action:"decline"})}}list(){return[...this.waiters.values()].map(t=>t.pending)}onChange(t){return this.listeners.add(t),()=>this.listeners.delete(t)}resolve(t,n){return this.waiters.get(t)?(this.settle(t,NBe(n)),!0):!1}enqueue(t,n){this.counter+=1;let r=`el_${this.counter}`,o=n;return o.onActive?.(),new Promise(i=>{let s={id:r,request:t,createdAt:new Date().toISOString(),...o.sessionId!==void 0?{sessionId:o.sessionId}:{}};this.waiters.set(r,{resolve:i,pending:s}),this.emit();let a=()=>{this.settle(r,{action:"cancel"})};n.signal.aborted?a():n.signal.addEventListener("abort",a,{once:!0})})}settle(t,n){let r=this.waiters.get(t);r&&(this.waiters.delete(t),r.resolve(n),this.emit())}emit(){let t=this.list();for(let n of this.listeners)try{n(t)}catch{}}};function NBe(e){if(typeof e!="object"||e===null)return{action:"decline"};let t=e,n=t.action;if(n==="accept"||n==="decline"||n==="cancel"||n==="skip"){let r=t.content;return typeof r=="object"&&r!==null?{action:n,content:r}:{action:n}}return{action:"decline"}}H();H();oa();Ks();import*as wE from"node:fs/promises";var Wte=80,BBe=20;function UBe(e){let t=e.trim().replace(/\s+/g," ");return t.length>Wte?`${t.slice(0,Wte)}\u2026`:t}async function jBe(e){let t={};try{let n=0;for await(let r of wi(e))if(n+=1,r.kind==="meta"?(r.cwd!==void 0&&(t.cwd=r.cwd),r.surface!==void 0&&(t.surface=r.surface)):r.kind==="user"&&t.title===void 0&&(t.title=UBe(r.text)),t.title!==void 0&&(t.cwd!==void 0||t.surface!==void 0)||n>=BBe)break}catch{}return t}async function HBe(){let e=new Map,t;try{t=await wE.readdir(et(),{withFileTypes:!0})}catch{return e}for(let n of t)if(!(!n.isDirectory()||!uo(n.name)))try{let r=await wE.stat(Tl(n.name));r.isFile()&&e.set(n.name,r.mtime)}catch{}return e}async function WBe(){try{let e=await Tx();return new Set(e.map(t=>t.sessionId))}catch{return null}}function KBe(e,t){return e.updatedAt===void 0&&t.updatedAt===void 0?0:e.updatedAt===void 0?1:t.updatedAt===void 0||e.updatedAt>t.updatedAt?-1:e.updatedAt<t.updatedAt?1:0}var GBe=100;async function Kte(e,t=GBe){let[n,r]=await Promise.all([HBe(),WBe()]),o=[...e],i=[...n.keys()].filter(l=>!e.has(l)).sort((l,c)=>{let u=n.get(l)?.getTime()??0;return(n.get(c)?.getTime()??0)-u}).slice(0,Math.max(0,t)),s=new Set([...o,...i]),a=await Promise.all([...s].map(async l=>{let c=e.has(l)?"live":"readonly",u=await jBe(l),d=n.get(l),p={id:l,mode:c};return u.cwd!==void 0&&(p.cwd=u.cwd),u.surface!==void 0&&(p.surface=u.surface),u.title!==void 0&&(p.title=u.title),d!==void 0&&(p.updatedAt=d.toISOString()),c==="readonly"&&r!==null&&(p.alive=r.has(l)),p}));return a.sort(KBe),a}function ze(e,t,n){let r=JSON.stringify(n,Au);e.writeHead(t,{...Jo,"content-type":"application/json; charset=utf-8","content-length":Buffer.byteLength(r),"cache-control":"no-store"}),e.end(r)}function pg(e,t){return uo(t)?!0:(ze(e,400,{error:"bad_session_id",message:"session id must be 1-128 chars of [A-Za-z0-9_-]"}),!1)}function lD(e,t,n){return e.owned.has(n)?!0:(ze(t,409,{error:"session_not_owned",message:`session ${n} is attached read-only (it runs in another process). Prompts and approvals can only be sent to sessions started by this server.`}),!1)}async function Gte(e,t){let n=await Kte(e.owned);ze(t,200,{sessions:n})}var sD=null,aD=null,qBe=async()=>{let[{registerAll:e},{buildSlashUniverse:t}]=await Promise.all([Promise.resolve().then(()=>(_O(),eZ)),Promise.resolve().then(()=>(wf(),l5))]);return e(),t()},zBe=qBe;async function qte(e){if(sD===null){aD??=zBe().then(t=>(sD=t,t)).finally(()=>{aD=null});try{await aD}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[web] failed to initialize slash-command universe: ${n}`),ze(e,503,{error:"command_universe_unavailable",message:"Slash-command autocomplete is temporarily unavailable. Retry the request."});return}}ze(e,200,{commands:sD})}async function zte(e,t,n,r){if(!pg(t,n)||!lD(e,t,n))return;if(e.isBusy(n)){ze(t,409,{error:"session_busy",message:`session ${n} already has a turn in flight. Wait for it to finish, or interrupt it, before sending another prompt.`});return}let o=vE(r,"text");if(o===void 0){ze(t,400,{error:"bad_request",message:"body must be { text: string }"});return}await e.submitPrompt(n,o),ze(t,202,{ok:!0})}function Vte(e,t,n,r){pg(t,n)&&lD(e,t,n)&&Jte(e,t,r)}function Yte(e,t,n){Jte(e,t,n)}function Jte(e,t,n){let r=vE(n,"requestId");if(r===void 0){ze(t,400,{error:"bad_request",message:"body must include requestId"});return}let o=Xte(n)?n.response:void 0;if(!e.bridge.resolve(r,o)){ze(t,404,{error:"unknown_request",message:`no pending elicitation with id ${r}`});return}ze(t,200,{ok:!0})}function mg(e,t){let n=e.headers[t];return Array.isArray(n)?n[0]:n}function Xte(e){return typeof e=="object"&&e!==null}function vE(e,t){if(!Xte(e))return;let n=e[t];return typeof n=="string"?n:void 0}async function Qte(e,t,n){if(!e.createSession){ze(t,501,{error:"sessions_not_supported",message:"this server is attach-only and cannot start sessions. Run `afk web` (which wires a session owner) rather than embedding startWebServer without one."});return}let r={},o=vE(n,"cwd"),i=vE(n,"model");o!==void 0&&(r.cwd=o),i!==void 0&&(r.model=i);try{let s=await e.createSession(r);ze(t,201,{session:s})}catch(s){ze(t,500,{error:"session_start_failed",message:s instanceof Error?s.message:String(s)})}}async function Zte(e,t,n){if(pg(t,n)&&lD(e,t,n)){if(!e.interrupt){ze(t,501,{error:"interrupt_not_supported",message:"no interrupt handler wired"});return}try{await e.interrupt(n),ze(t,200,{ok:!0})}catch(r){ze(t,500,{error:"interrupt_failed",message:r instanceof Error?r.message:String(r)})}}}oa();function fg(e){let t=[];return e.id!==void 0&&t.push(`id: ${e.id}`),t.push(`data: ${JSON.stringify(e.data,Au)}`),t.join(`
|
|
2003
2004
|
`)+`
|
|
2004
2005
|
|
|
2005
2006
|
`}var ene=Object.freeze({end:!0,reason:"session_closed"});var VBe=15e3;async function tne(e,t,n,r){if(!pg(t,n))return;t.writeHead(200,{...Jo,"content-type":"text/event-stream; charset=utf-8","cache-control":"no-store",connection:"keep-alive","x-accel-buffering":"no"});let o=mg(e,"last-event-id"),i=Number.parseInt(o??"0",10);(!Number.isFinite(i)||i<0)&&(i=0);let s=i,a=new AbortController;r?.add(a);let l=!1,c=setInterval(()=>{l||t.write(`: ping
|
|
@@ -2112,7 +2113,7 @@ complete -c afk -l model -s m -x -a '${e}' -d 'Model to use'
|
|
|
2112
2113
|
complete -c afk -l format -s f -x -a '${t}' -d 'Output format'
|
|
2113
2114
|
complete -c afk -l trigger -x -a '${n}' -d 'Trigger type'`}function Ane(e){e.command("completion <shell>").description("Emit shell completion script (zsh|bash|fish)").action(t=>{let n=["zsh","bash","fish"];if(!n.includes(t)){e.error(`unknown shell: ${t}. Choose from: ${n.join(", ")}`);return}let r="";switch(t){case"zsh":r=PUe();break;case"bash":r=MUe();break;case"fish":r=OUe();break}console.log(r)})}import{spawn as zUe}from"child_process";import{existsSync as VUe,readFileSync as YUe}from"fs";H();import{execFileSync as DUe,spawn as $Ue}from"child_process";import{existsSync as gd,mkdirSync as Cne,readFileSync as RE,statSync as FUe,unlinkSync as xE,writeFileSync as LUe,openSync as _ne}from"fs";import{join as fd,dirname as bD}from"path";import{fileURLToPath as NUe}from"url";var BUe=bD(NUe(import.meta.url));function wD(){let e=fd(fe(),"telegram");return{pidFile:fd(e,"bot.pid"),logFile:fd(ei(),"telegram.log")}}function gg(e){if(!gd(e))return null;let t=RE(e,"utf-8").trim(),n=Number.parseInt(t,10);if(!Number.isFinite(n)||n<=0)return xE(e),null;try{return process.kill(n,0),n}catch{return xE(e),null}}function vD(e=BUe,t=gd){let n=[fd(e,"telegram.mjs"),fd(e,"..","telegram.js"),fd(e,"..","telegram.ts")];for(let r of n)if(t(r))return r;throw new Error(`Telegram entrypoint not found. Searched: ${n.join(", ")}`)}async function kD(){let{pidFile:e,logFile:t}=wD(),n=gg(e);if(n!==null)return{kind:"already-running",pid:n,message:`Bot already running (PID ${n}). Use 'afk telegram stop' first.`};Cne(bD(e),{recursive:!0}),Cne(bD(t),{recursive:!0});let r=vD(),o=_ne(t,"a"),i=_ne(t,"a"),s;try{s=$Ue(process.execPath,[r],{detached:!0,stdio:["ignore",o,i],env:process.env})}catch(a){return{kind:"spawn-failed",message:`Failed to spawn bot: ${a.message}`}}return s.pid===void 0?{kind:"spawn-failed",message:"Spawned child has no PID"}:(LUe(e,String(s.pid),{mode:420}),s.unref(),await new Promise(a=>setTimeout(a,1500)),gg(e)===null?{kind:"exited-immediately",logTail:SD(t,20),message:"Bot exited immediately after launch. Check the log for details."}:{kind:"started",pid:s.pid,logFile:t})}async function TD(){let{pidFile:e}=wD(),t=gg(e);if(t===null)return{kind:"not-running"};try{process.kill(t,"SIGTERM")}catch{return gd(e)&&xE(e),{kind:"stopped",pid:t}}for(let n=0;n<50;n++)if(await new Promise(r=>setTimeout(r,100)),gg(e)===null)return{kind:"stopped",pid:t};try{process.kill(t,"SIGKILL")}catch{}return gd(e)&&xE(e),{kind:"force-killed",pid:t}}function ED(){let{pidFile:e,logFile:t}=wD(),n=gg(e),r={running:n!==null,pidFile:e,logFile:t};if(n===null)return{...r,logTail:SD(t,10)};let o=UUe(n);return{...r,pid:n,...o,logTail:SD(t,10)}}function SD(e,t){if(!gd(e))return[];try{let r=RE(e,"utf-8").split(`
|
|
2114
2115
|
`);return r.length>0&&r[r.length-1]===""&&r.pop(),r.slice(-t)}catch{return[]}}function UUe(e){try{if(process.platform==="linux"){let t=`/proc/${e}/stat`;if(!gd(t))return{};let r=RE(t,"utf-8").split(" "),o=Number.parseInt(r[21]??"0",10),l=FUe("/proc/1").mtimeMs/1e3+o/100,c=Math.floor(Date.now()/1e3-l),d=RE(`/proc/${e}/status`,"utf-8").match(/VmRSS:\s+(\d+)\s+kB/),p=d?Math.round(Number.parseInt(d[1]??"0",10)/1024):void 0;return{uptimeSec:c,memoryMb:p}}if(process.platform==="darwin"){let t=DUe("ps",["-p",String(e),"-o","etime=,rss="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim(),[n,r]=t.split(/\s+/);return{uptimeSec:jUe(n??""),memoryMb:r?Math.round(Number.parseInt(r,10)/1024):void 0}}}catch{}return{}}function jUe(e){if(!e)return;let t=e.split("-"),n=0,r=e;t.length===2&&(n=Number.parseInt(t[0]??"0",10),r=t[1]??"");let o=r.split(":").map(l=>Number.parseInt(l,10));if(o.some(l=>!Number.isFinite(l)))return;let i=0,s=0,a=0;if(o.length===3)[i,s,a]=o;else if(o.length===2)[s,a]=o;else if(o.length===1)[a]=o;else return;return n*86400+i*3600+s*60+a}Ur();H();N();hk();import{existsSync as HUe,readFileSync as WUe}from"fs";import{createInterface as KUe}from"readline";B();var Pne="https://api.telegram.org";function Mne(e,t){if(!HUe(e))return;let n=WUe(e,"utf-8");for(let r of n.split(`
|
|
2115
|
-
`)){let o=r.trim();if(!o||o.startsWith("#"))continue;let i=o.indexOf("=");if(i===-1||o.slice(0,i).trim()!==t)continue;let a=o.slice(i+1).trim();return(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),a}}async function One(e){let t=Mne(e,"TELEGRAM_BOT_TOKEN");if(!t)return{set:!1,valid:!1,reason:"unset"};let n=await RD(t);return n?{set:!0,valid:!0,botId:n.id,...n.username!==void 0?{username:n.username}:{}}:{set:!0,valid:!1,reason:"unauthorized"}}async function Dne(e,t={}){let n=Mne(e,"TELEGRAM_BOT_TOKEN");if(!n)return{found:!1,chats:[],reason:"unset"};let r=t.timeoutSec??60,o=2e3,i=Math.max(1,Math.ceil(r*1e3/o)),s=await $ne(n,{maxAttempts:i,intervalMs:o});return s.length===0?{found:!1,chats:[],reason:"timeout"}:{found:!0,chats:s}}async function RD(e){try{let t=await fetch(`${Pne}/bot${e}/getMe`);if(!t.ok)return null;let n=await t.json();return!n.ok||!n.result?.id||!n.result?.first_name?null:{id:n.result.id,...n.result.username!==void 0?{username:n.result.username}:{},firstName:n.result.first_name}}catch{return null}}function GUe(e){let t=new Map;for(let n of e){let o=(n.message??n.edited_message)?.chat;!o||typeof o.id!="number"||t.set(o.id,{chatId:o.id,type:o.type??"unknown",...o.username!==void 0?{username:o.username}:{},...o.first_name!==void 0?{firstName:o.first_name}:{}})}return[...t.values()].reverse()}async function qUe(e){try{let t=await fetch(`${Pne}/bot${e}/getUpdates`);if(!t.ok)return[];let n=await t.json();return!n.ok||!Array.isArray(n.result)?[]:n.result}catch{return[]}}async function $ne(e,t={}){let n=t.maxAttempts??30,r=t.intervalMs??2e3;for(let o=0;o<n;o++){let i=await qUe(e),s=GUe(i);if(s.length>0)return s;o<n-1&&await new Promise(a=>setTimeout(a,r))}return[]}function Ine(e){let t=KUe({input:process.stdin,output:process.stdout});return
|
|
2116
|
+
`)){let o=r.trim();if(!o||o.startsWith("#"))continue;let i=o.indexOf("=");if(i===-1||o.slice(0,i).trim()!==t)continue;let a=o.slice(i+1).trim();return(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),a}}async function One(e){let t=Mne(e,"TELEGRAM_BOT_TOKEN");if(!t)return{set:!1,valid:!1,reason:"unset"};let n=await RD(t);return n?{set:!0,valid:!0,botId:n.id,...n.username!==void 0?{username:n.username}:{}}:{set:!0,valid:!1,reason:"unauthorized"}}async function Dne(e,t={}){let n=Mne(e,"TELEGRAM_BOT_TOKEN");if(!n)return{found:!1,chats:[],reason:"unset"};let r=t.timeoutSec??60,o=2e3,i=Math.max(1,Math.ceil(r*1e3/o)),s=await $ne(n,{maxAttempts:i,intervalMs:o});return s.length===0?{found:!1,chats:[],reason:"timeout"}:{found:!0,chats:s}}async function RD(e){try{let t=await fetch(`${Pne}/bot${e}/getMe`);if(!t.ok)return null;let n=await t.json();return!n.ok||!n.result?.id||!n.result?.first_name?null:{id:n.result.id,...n.result.username!==void 0?{username:n.result.username}:{},firstName:n.result.first_name}}catch{return null}}function GUe(e){let t=new Map;for(let n of e){let o=(n.message??n.edited_message)?.chat;!o||typeof o.id!="number"||t.set(o.id,{chatId:o.id,type:o.type??"unknown",...o.username!==void 0?{username:o.username}:{},...o.first_name!==void 0?{firstName:o.first_name}:{}})}return[...t.values()].reverse()}async function qUe(e){try{let t=await fetch(`${Pne}/bot${e}/getUpdates`);if(!t.ok)return[];let n=await t.json();return!n.ok||!Array.isArray(n.result)?[]:n.result}catch{return[]}}async function $ne(e,t={}){let n=t.maxAttempts??30,r=t.intervalMs??2e3;for(let o=0;o<n;o++){let i=await qUe(e),s=GUe(i);if(s.length>0)return s;o<n-1&&await new Promise(a=>setTimeout(a,r))}return[]}function Ine(e){let t=KUe({input:process.stdin,output:process.stdout});return I6("telegram.setup-wizard",()=>new Promise(n=>{t.question(e,r=>{t.close(),n(r.trim())})}))}async function Fne(){let e=Qt();console.log(""),console.log(m.heading("\u{1F916} Telegram bot setup")),console.log(""),console.log(m.meta(`Config will be written to ${e}`)),console.log("");let t=v.TELEGRAM_BOT_TOKEN?.trim()??"",n=null;for(t&&(console.log(m.meta("Validating existing TELEGRAM_BOT_TOKEN...")),n=await RD(t),n?console.log(m.success(`\u2713 Token valid for @${n.username??n.firstName} (id ${n.id})`)):(console.log(m.warning("\u26A0 Existing TELEGRAM_BOT_TOKEN is invalid; prompting for a new one")),t=""));!n;)t=await pd("Paste your bot token (from @BotFather): "),t||(console.error(m.error("No token provided. Aborting.")),process.exit(1)),n=await RD(t),n||console.log(m.error("\u2717 Token rejected by getMe. Try again or Ctrl-C to abort."));cr(e,"TELEGRAM_BOT_TOKEN",t),console.log(m.success(`\u2713 Saved TELEGRAM_BOT_TOKEN \u2192 ${e}`)),console.log(""),console.log(m.heading("Now DM your bot to authorize your account."));let r=n.username?`@${n.username}`:`"${n.firstName}"`;console.log(` 1. Open Telegram and find ${m.brand(r)}`),console.log(' 2. Send any message (e.g. "hi")'),console.log(""),console.log(m.meta("Polling for your chat ID (up to 60s)..."));let o=await $ne(t);if(o.length===0){console.error(m.error("\u2717 No chats found after 60s.")),console.error(m.meta(" Send a message to the bot and run `afk telegram setup` again,")),console.error(m.meta(" or paste your chat ID manually:"));let s=await Ine("Chat ID: "),a=Number.parseInt(s,10);return Number.isFinite(a)||(console.error(m.error("Invalid chat ID. Aborting.")),process.exit(1)),cr(e,"AFK_TELEGRAM_ALLOWED_CHAT_IDS",String(a)),console.log(m.success(`\u2713 Saved AFK_TELEGRAM_ALLOWED_CHAT_IDS=${a}`)),{envPath:e,bot:n,chatId:a}}let i=o[0];if(o.length>1){console.log(m.heading(`
|
|
2116
2117
|
Multiple chats found:`)),o.forEach((l,c)=>{let u=l.username?`@${l.username}`:l.firstName??l.type;console.log(` [${c+1}] ${u} (id ${l.chatId}, ${l.type})`)});let s=await Ine("Which chat should be allowed? [1]: "),a=Number.parseInt(s||"1",10)-1;Number.isFinite(a)&&a>=0&&a<o.length&&(i=o[a])}else{let s=i.username?`@${i.username}`:i.firstName??i.type;console.log(m.success(`\u2713 Found chat with ${s} (id ${i.chatId})`))}return cr(e,"AFK_TELEGRAM_ALLOWED_CHAT_IDS",String(i.chatId)),console.log(m.success(`\u2713 Saved AFK_TELEGRAM_ALLOWED_CHAT_IDS=${i.chatId} \u2192 ${e}`)),console.log(""),console.log(m.heading("Setup complete. Start the bot with:")),console.log(m.brand(" afk telegram start")),console.log(""),{envPath:e,bot:n,chatId:i.chatId}}H();B();function Lne(e){let t=e.command("telegram").description("Manage the Agent AFK Telegram bot (setup, start, stop, status)");t.command("setup").description("Interactive setup: validate bot token, discover chat ID, persist to ~/.afk/config/afk.env").action(async()=>{try{await Fne()}catch(n){console.error(m.error(`Setup failed: ${n.message}`)),process.exit(1)}}),t.command("check-token").description("Validate TELEGRAM_BOT_TOKEN via getMe; emit JSON {set, valid, username?, botId?, reason?}").action(async()=>{let n=await One(Qt());process.stdout.write(JSON.stringify(n)+`
|
|
2117
2118
|
`)}),t.command("discover-chat").description("Poll getUpdates for chats that have DM'd the bot; emit JSON {found, chats, reason?}").option("--timeout-sec <n>","How long to poll before giving up","60").action(async n=>{let r=Number.parseInt(n.timeoutSec??"60",10);(!Number.isFinite(r)||r<1)&&(console.error(m.error("--timeout-sec must be a positive integer")),process.exit(2));let o=await Dne(Qt(),{timeoutSec:r});process.stdout.write(JSON.stringify(o)+`
|
|
2118
2119
|
`)}),t.command("set-allowed-chat <chatId>").description("Persist AFK_TELEGRAM_ALLOWED_CHAT_IDS=<chatId> to ~/.afk/config/afk.env; emit JSON {ok, path}").action(n=>{let r=Number.parseInt(n,10);Number.isFinite(r)||(process.stdout.write(JSON.stringify({ok:!1,reason:"invalid-chat-id"})+`
|
|
@@ -2169,7 +2170,7 @@ of everything agents did across sessions.`);t.command("read [session]").descript
|
|
|
2169
2170
|
`)){let r=n.indexOf("=");if(r<0)continue;let o=n.slice(0,r).trim(),i=n.slice(r+1).trim();switch(o){case"MainPID":{let s=Number.parseInt(i,10);Number.isFinite(s)&&s>0&&(t.pid=s);break}case"ExecMainStatus":{let s=Number.parseInt(i,10);Number.isFinite(s)&&(t.lastExitStatus=s);break}case"ActiveState":i&&(t.activeState=i);break;case"LoadState":i&&(t.loadState=i);break;default:break}}return t}function Dre(e){let t=vr(e),n={name:e,label:kg(e),installed:$1e(t),configPath:t,logFile:wd(e)};if(!n.installed)return n;try{let r=D1e("systemctl",["--user","show",bn(e),"--property=MainPID,ExecMainStatus,ActiveState,LoadState"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:vd}),o=F1e(r);o.pid!==void 0&&(n.pid=o.pid),o.lastExitStatus!==void 0&&(n.lastExitStatus=o.lastExitStatus)}catch{}return n}var Fre={backend:"systemd",configKind:"systemd user unit",install(e,t={}){return Pre(e,t)},uninstall(e){return Mre(e)},status(e){return Dre(e)},restart(e){if(!$re(vr(e)))return{kind:"not-installed",configPath:vr(e)};try{return L1e("systemctl",["--user","restart",bn(e)],{stdio:["ignore","pipe","pipe"],timeout:vd}),{kind:"restarted",label:kg(e)}}catch(t){let n=t.stderr;return{kind:"failed",reason:n&&n.toString().trim()||t.message}}},isInstalled(e){return $re(vr(e))},configPath(e){return vr(e)},logPath(e){return wd(e)},label(e){return kg(e)},readConfigFile(e){return Ore(e)}};var Ed=["telegram","daemon"];function Lre(e=process.platform){switch(e){case"darwin":return Ere;case"linux":return Fre;default:return null}}var Nre="macOS (launchd) and Linux (systemd --user)";function Tg(){let e=Lre();if(!e)throw new Error(`'afk service' is not supported on ${process.platform}. Supported: ${Nre}.`);return e}function BE(e){let t=e.toLowerCase();if(Ed.includes(t))return t;throw new Error(`Unknown service '${e}'. Supported: ${Ed.join(", ")}.`)}function Ure(e){let t=e.command("service").description("Manage AFK background services (launchd on macOS, systemd --user on Linux) \u2014 always-on, auto-restart");t.command("install <name>").description(`Install <${Ed.join("|")}> as an OS service that starts on login and relaunches on crash`).option("--no-watch","Disable auto-restart-on-rebuild (launchd WatchPaths / systemd .path unit)").option("--dry-run","Write the config file but do not register with the supervisor",!1).action((n,r)=>{try{let o=Tg(),i=BE(n),s=o.install(i,{noWatch:r.watch===!1,dryRun:!!r.dryRun});s.kind==="already-installed"&&(console.log(m.warning(`\u26A0 ${s.label} already installed at ${s.configPath}`)),console.log(m.meta(` Run 'afk service uninstall ${i}' first to reinstall.`)),process.exit(1)),s.kind==="failed"&&(console.error(m.error(`\u2717 Install failed: ${s.reason}`)),process.exit(1)),console.log(m.success(`\u2713 Installed ${s.label}`)),console.log(m.meta(` Config: ${s.configPath} (${o.configKind})`)),console.log(m.meta(` Log: ${o.logPath(i)}`)),s.autoRestartOnRebuild?console.log(m.meta(" Auto-restart on rebuild: on")):console.log(m.meta(` Auto-restart on rebuild: off \u2014 run 'afk service restart ${i}' after updates.`));for(let a of s.notes??[])console.log(m.info(` ${a}`));r.dryRun||console.log(m.meta(` Status: afk service status ${i}`))}catch(o){V(o)}}),t.command("uninstall <name>").description("Stop the service and remove its config (LaunchAgent plist / systemd unit)").action(n=>{try{let r=Tg(),o=BE(n),i=r.uninstall(o);if(i.kind==="not-installed"){console.log(m.warning(`\u26A0 ${r.label(o)} is not installed (no config at ${i.configPath})`));return}i.kind==="failed"&&(console.error(m.error(`\u2717 Uninstall failed: ${i.reason}`)),process.exit(1)),console.log(m.success(`\u2713 Uninstalled ${r.label(o)}`)),console.log(m.meta(` Removed: ${i.configPath}`))}catch(r){V(r)}}),t.command("status [name]").description("Show running PID, last exit status, and log file for one or all services").action(n=>{try{let r=Tg();if(n){Bre(r.status(BE(n)),r.configKind);return}for(let o of Ed)Bre(r.status(o),r.configKind),console.log("")}catch(r){V(r)}}),t.command("list").description("List recognised service names and whether each is installed").action(()=>{try{let n=Tg();console.log(m.heading(`AFK services (${n.backend}):`));for(let r of Ed){let o=n.isInstalled(r),i=o?m.success("\u25CF"):m.dim("\u25CB"),s=o?m.meta("installed"):m.meta("not installed");console.log(` ${i} ${r.padEnd(10)} ${s} ${m.meta(n.configPath(r))}`)}}catch(n){V(n)}}),t.command("restart <name>").description("Restart the service (launchctl kickstart -k / systemctl --user restart)").action(n=>{try{let r=Tg(),o=BE(n),i=r.restart(o);i.kind==="not-installed"&&(console.error(m.error(`\u2717 ${r.label(o)} is not installed. Run 'afk service install ${o}' first.`)),process.exit(1)),i.kind==="failed"&&(console.error(m.error(`\u2717 Restart failed: ${i.reason}`)),process.exit(1)),console.log(m.success(`\u2713 Restarted ${i.label}`))}catch(r){V(r)}})}function Bre(e,t){if(console.log(m.heading(`${e.label}`)),!e.installed){console.log(` ${m.dim("\u25CB")} Not installed`),console.log(m.meta(` Config: ${e.configPath} (${t})`)),console.log(m.meta(` Install: afk service install ${e.name}`));return}e.pid!==void 0?console.log(` ${m.success("\u25CF")} Running (PID ${e.pid})`):(console.log(` ${m.warning("\u25CF")} Installed but not running`),e.lastExitStatus!==void 0&&e.lastExitStatus!==0&&console.log(m.meta(` Last exit status: ${e.lastExitStatus}`))),console.log(m.meta(` Config: ${e.configPath} (${t})`)),console.log(m.meta(` Log: ${e.logFile}`))}B();import{execFileSync as N1e}from"child_process";import{chmodSync as B1e,existsSync as Eg,mkdirSync as Wre,readdirSync as U1e,readFileSync as j1e,renameSync as Kre,writeFileSync as Gre}from"fs";import{basename as H1e,dirname as LD,join as ND}from"path";import{randomBytes as qre}from"crypto";import{createInterface as W1e}from"node:readline";Fy();H();function K1e(e){let t=W1e({input:process.stdin,output:process.stdout});return new Promise(n=>{t.question(e,()=>{t.close(),n()})})}var bs="chrome-devtools",FD=["stable","beta","canary","dev"];function G1e(e="stable"){let t=["chrome-devtools-mcp@latest","--autoConnect"];return e!=="stable"&&t.push("--channel",e),{command:"npx",args:t}}function jre(e){if(!Eg(e))return{mcpServers:{}};let t;try{t=j1e(e,"utf-8")}catch(o){throw new Error(`Failed to read MCP config at ${e}: ${o.message}`)}let n;try{n=JSON.parse(t)}catch{throw new Error(`MCP config at ${e} is not valid JSON. Fix or remove it, then retry.`)}if(typeof n!="object"||n===null||Array.isArray(n))throw new Error(`MCP config at ${e} must be a JSON object.`);let r=n;if(Array.isArray(r.mcpServers))throw new Error(`MCP config at ${e} has an invalid "mcpServers" (must be a JSON object, not an array).`);return(r.mcpServers===void 0||typeof r.mcpServers!="object"||r.mcpServers===null)&&(r.mcpServers={}),r}function Hre(e,t){Wre(LD(e),{recursive:!0});let n=ND(LD(e),`.mcp.json.${process.pid}.${qre(4).toString("hex")}.tmp`);Gre(n,`${JSON.stringify(t,null,2)}
|
|
2170
2171
|
`,"utf-8"),Kre(n,e)}function q1e(){let e=process.platform==="darwin"?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta","/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"]:["google-chrome","google-chrome-stable","chromium","chromium-browser"];for(let t of e)try{let r=N1e(t,["--version"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:5e3}).match(/(\d+)\.\d+\.\d+/);if(r!==null&&r[1]!==void 0)return parseInt(r[1],10)}catch{}return null}function z1e(){let e=q1e();console.log(""),console.log(m.heading("Drive your real Chrome \u2014 one-time setup:")),e===null?console.log(m.meta(" \u2022 Chrome not detected. autoConnect requires Chrome \u2265 144.")):e<144?console.log(m.warning(` \u2022 Detected Chrome ${e} \u2014 autoConnect requires \u2265 144. Please update Chrome.`)):console.log(m.meta(` \u2022 Detected Chrome ${e} \u2713 (autoConnect needs \u2265 144)`)),console.log(m.meta(" 1. In Chrome, open chrome://inspect/#remote-debugging and enable it (one time).")),console.log(m.meta(' 2. The first time the agent drives Chrome, click "Allow" on the prompt.')),console.log(m.meta(' 3. Chrome shows a "being controlled by automated test software" banner while active.')),console.log(""),console.log(m.meta("The agent gains mcp__chrome-devtools__* tools (navigate, click, fill, take_snapshot, \u2026)")),console.log(m.meta("driving your REAL, logged-in profile. Run `/mcp` in the REPL to confirm it connected.")),console.log(m.meta("Undo anytime with `afk browser disconnect`."))}function zre(e){let t=e.command("browser").description("Give the agent web hands: connect your real Chrome, or save a login it reuses");t.command("connect").description("Wire chrome-devtools-mcp (--autoConnect) so the agent can drive your real, logged-in Chrome").option("--channel <channel>",`Chrome channel autoConnect targets (${FD.join("|")})`,"stable").action(n=>{try{let r=(n.channel??"stable").toLowerCase();if(!FD.includes(r))throw new Error(`--channel must be one of ${FD.join(", ")} (got "${n.channel}")`);let o=Oa(),i=jre(o);i.mcpServers===void 0&&(i.mcpServers={});let s=G1e(r),a=i.mcpServers[bs];if(a!==void 0&&JSON.stringify(a)===JSON.stringify(s))console.log(m.success(`\u2713 "${bs}" already configured`)),console.log(m.meta(` Config: ${o}`));else{i.mcpServers[bs]=s,Hre(o,i);let l=a===void 0?"Added":"Updated";console.log(m.success(`\u2713 ${l} "${bs}" MCP server`)),console.log(m.meta(` Config: ${o}`)),console.log(m.meta(` Runs: npx ${s.args?.join(" ")??""}`))}z1e()}catch(r){V(r)}}),t.command("disconnect").description("Remove the chrome-devtools server from your MCP config").action(()=>{try{let n=Oa();if(!Eg(n)){console.log(m.warning(`\u26A0 No MCP config at ${n} \u2014 nothing to remove.`));return}let r=jre(n);if(r.mcpServers===void 0||r.mcpServers[bs]===void 0){console.log(m.warning(`\u26A0 "${bs}" is not configured \u2014 nothing to remove.`));return}delete r.mcpServers[bs],Hre(n,r),console.log(m.success(`\u2713 Removed "${bs}" from ${n}`))}catch(n){V(n)}}),t.command("login <url>").description("Open a headed browser, log in manually, and save the session to a vault profile the agent's native browser tools reuse").option("--profile <name>","Vault profile name to save the session under","default").action(async(n,r)=>{try{let o=(r.profile??"default").trim();Ud(o);let i;try{i=new URL(n)}catch{throw new Error(`Invalid URL: ${n}`)}if(i.protocol!=="http:"&&i.protocol!=="https:")throw new Error(`login URL must be http(s), got: ${i.protocol}`);let s=jd(o),{chromium:a}=await import("playwright");console.log(m.meta(`Launching a browser for profile "${o}"\u2026`));let l=await a.launch({headless:!1}).catch(f=>{throw Kp(f,!1)}),c=await l.newContext(Eg(s)?{storageState:s}:{});await(await c.newPage()).goto(n,{waitUntil:"load"}).catch(()=>{}),console.log(""),console.log(m.heading("Log in to the site in the opened browser window.")),console.log(m.meta("When fully logged in, return here and press Enter to save the session.")),console.log(m.meta("(Do NOT close the browser window yourself \u2014 this command closes it for you.)")),await K1e("Press Enter to save the session\u2026 ");let d=await c.storageState();Wre(TR(o),{recursive:!0});let p=ND(LD(s),`.${H1e(s)}.${process.pid}.${qre(4).toString("hex")}.tmp`);Gre(p,JSON.stringify(d),{mode:384}),B1e(p,384),Kre(p,s),await l.close().catch(()=>{}),console.log(m.success(`\u2713 Saved session for profile "${o}"`)),console.log(m.meta(` Vault: ${s} (0600 \u2014 treat as a credential)`)),console.log(m.meta(" Point the agent at it:")),console.log(m.meta(` export AFK_BROWSER_DEFAULT_PROFILE=${o}`))}catch(o){V(o)}}),t.command("profiles").description("List saved browser session-vault profiles").action(()=>{try{let n=kR(),r=Eg(n)?U1e(n,{withFileTypes:!0}).filter(o=>o.isDirectory()):[];if(r.length===0){console.log(m.meta("No saved profiles. Create one with `afk browser login <url> --profile <name>`."));return}console.log(m.heading("Saved browser profiles:"));for(let o of r){let i=Eg(ND(n,o.name,"storageState.json")),s=i?m.success("\u25CF"):m.meta("\u25CB"),a=i?"":m.meta(" (no saved session)");console.log(` ${s} ${o.name}${a}`)}console.log(""),console.log(m.meta("Use one: export AFK_BROWSER_DEFAULT_PROFILE=<name>"))}catch(n){V(n)}})}import{readFileSync as V1e,readdirSync as Y1e,statSync as J1e}from"fs";import{join as HD}from"path";H();H();import{join as Ct}from"path";function UE(){return Ct(Ut(),"improve")}function Ss(){return Ct(UE(),"failure-cards")}function Vre(){return Ct(Ss(),".index.jsonl")}function Rg(e){return Ct(Ss(),`${e}.json`)}function jE(e){return Ct(Ss(),`${e}.md`)}function dl(){return Ct(UE(),"proposals")}function Yre(){return Ct(dl(),".index.jsonl")}function BD(e){return Ct(dl(),`${e}.json`)}function Jre(e){return Ct(dl(),`${e}.md`)}function ws(){return Ct(UE(),"eval-cases")}function Xre(){return Ct(ws(),".index.jsonl")}function UD(e){return Ct(ws(),`${e}.json`)}function jD(e){return Ct(ws(),`${e}.fixture.jsonl`)}function Qre(e){return Ct(ws(),`${e}.md`)}function Rd(){return Ct(UE(),"eval-runs")}function Zre(){return Ct(Rd(),".index.jsonl")}function eoe(e){return Ct(Rd(),`${e}.json`)}function toe(e){return Ct(Rd(),`${e}.md`)}N();function noe(e){let t=e.trim(),n=/^(\d+)\s*([smhd])$/i.exec(t);if(!n)return;let r=Number.parseInt(n[1]??"0",10),o=(n[2]??"").toLowerCase();if(!(!Number.isFinite(r)||r<=0))switch(o){case"s":return r*1e3;case"m":return r*60*1e3;case"h":return r*60*60*1e3;case"d":return r*24*60*60*1e3;default:return}}function roe(e={}){let t=e.witnessRoot??nr(),n=e.afkHome??v.AFK_HOME??X1e(),r=e.sinceMs,o={sessionsScanned:0,sessionsSkippedOld:0,sessionsSkippedEmpty:0,invalidLineCount:0,sessions:[]},i;try{i=Y1e(t)}catch{return o}for(let s of i){if(s.startsWith("."))continue;let a=HD(t,s),l;try{l=J1e(a)}catch{continue}if(!l.isDirectory())continue;if(r!==void 0&&l.mtimeMs<r){o.sessionsSkippedOld+=1;continue}let c=HD(a,"trace.jsonl"),u;try{u=V1e(c,"utf-8")}catch{o.sessionsSkippedEmpty+=1;continue}let d=Q1e(c,n),p=xd({sessionId:s,tracePath:c,relativeTracePath:d,content:u,sessionMtimeMs:l.mtimeMs});o.sessions.push(p),o.sessionsScanned+=1,o.invalidLineCount+=p.invalidLineCount}return o}function xd(e){let{sessionId:t,tracePath:n,relativeTracePath:r,content:o,sessionMtimeMs:i}=e,s=[],a=0,l=o.split(`
|
|
2171
2172
|
`);for(let c=0;c<l.length;c+=1){let u=l[c]??"";if(u.trim()==="")continue;let d;try{d=JSON.parse(u)}catch{a+=1;continue}let p=Sv.safeParse(d);if(!p.success){a+=1;continue}s.push({sessionId:t,tracePath:n,relativeTracePath:r,lineNumber:c+1,rawLine:u,event:p.data})}return{sessionId:t,tracePath:n,relativeTracePath:r,sessionMtimeMs:i,events:s,invalidLineCount:a}}function X1e(){let e=v.AFK_HOME;return e&&e.length>0?e:HD(v.HOME??"",".afk")}function Q1e(e,t){if(!t)return e;if(e.startsWith(t)){let n=e.slice(t.length);return n.startsWith("/")&&(n=n.slice(1)),n}return e}import{createHash as ooe}from"crypto";var Zo=4,Z1e=8;function HE(e,t={}){let n=t.minRepeats??Zo;if(n<2)throw new Error(`minRepeats must be >= 2 (got ${n})`);let r=[];for(let o of e){let i=eHe(o,n);r.push(...i)}return r}function eHe(e,t){let n=tHe(e.events),r=nHe(n),o=[];for(let[i,s]of r.entries()){let a=rHe(s,t);for(let l of a)o.push(iHe(e,l,i))}return o}function tHe(e){let t=new Map,n=[];for(let r of e){let o=r.event;if(o.kind!=="tool_call")continue;if(o.payload.phase==="started"){t.set(o.payload.toolUseId,{seq:o.seq,name:o.payload.name,inputBytes:o.payload.inputBytes,argsFingerprint:o.payload.argsFingerprint,subagentId:o.payload.subagentId});continue}let i=t.get(o.payload.toolUseId);if(!i)continue;t.delete(o.payload.toolUseId);let s=i.argsFingerprint,a=s?ooe("sha256").update(`${i.name}|${s}`).digest("hex"):oHe({name:o.payload.name,inputBytes:i.inputBytes,resultBytes:o.payload.resultBytes,isError:o.payload.isError,subagentId:i.subagentId});n.push({toolUseId:o.payload.toolUseId,startedSeq:i.seq,completedSeq:o.seq,completedLineNumber:r.lineNumber,name:o.payload.name,inputBytes:i.inputBytes,resultBytes:o.payload.resultBytes,isError:o.payload.isError,subagentId:i.subagentId,rawLine:r.rawLine,fingerprint:a,usedArgsHash:s!==void 0})}return n}function nHe(e){let t=new Map;for(let n of e){let r=n.subagentId??"root",o=t.get(r);o?o.push(n):t.set(r,[n])}return t}function rHe(e,t){let n=[],r=0;for(;r<e.length;){let o=e[r];if(!o){r+=1;continue}let i=r+1;for(;i<e.length;){let a=e[i];if(!a||a.fingerprint!==o.fingerprint)break;i+=1}i-r>=t&&n.push(e.slice(r,i)),r=i>r?i:r+1}return n}function oHe(e){let t=[e.name,String(e.inputBytes),String(e.resultBytes),e.isError?"1":"0",e.subagentId??""].join("|");return ooe("sha256").update(t).digest("hex")}function iHe(e,t,n){let r=t[0];if(!r)throw new Error("repeated-tool-use: empty run");let o=uHe(r.name,r.fingerprint),i=new Date().toISOString(),s=t.slice(0,Z1e),a=[{sessionId:e.sessionId,tracePath:e.relativeTracePath,eventIndices:s.map(l=>l.completedSeq),excerpt:sHe(s),annotation:aHe(t,n)}];return{slug:o,title:lHe(r.name,t.length),pattern:"repeated-tool-use",severity:cHe(t.length),observedAt:i,evidence:a,detail:{detector:"repeated-tool-use@v1",fingerprintAlgorithm:r.usedArgsHash?"v2-args-hash":"v1-bytes-tuple",fingerprint:r.fingerprint,toolName:r.name,runLength:t.length,agentContext:n,inputBytes:r.inputBytes,resultBytes:r.resultBytes,isError:r.isError,toolUseIds:t.map(l=>l.toolUseId),completedSeqs:t.map(l=>l.completedSeq)}}}function sHe(e){let t=e.map(n=>n.rawLine).join(`
|
|
2172
|
-
`);return t.length<=2e3?t:t.slice(0,1997)+"..."}function aHe(e,t){let n=e[0],r=e[e.length-1];return!n||!r?"":[`${e.length}\xD7 consecutive '${n.name}' calls in ${t} context`,`(seq ${n.completedSeq}\u2026${r.completedSeq},`,`inputBytes=${n.inputBytes}, resultBytes=${n.resultBytes},`,`isError=${n.isError})`].join(" ")}function lHe(e,t){return`'${e}' tool repeated ${t}\xD7 with identical fingerprint`}function cHe(e){return e>=10?"high":e>=4?"medium":"low"}function uHe(e,t){let n=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),r=t.slice(0,12);return`repeated-tool-${n.length>0?n:"tool"}-${r}`}var dHe=new Set(["budget_exceeded","timeout","hook_blocked","abort","iteration_cap","max_turns_exceeded"]);function WE(e,t={}){let n=t.minOccurrences??1;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="closure")continue;let l=a.payload.reason;if(!dHe.has(l))continue;let c={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:l,finalCostUsd:a.payload.finalCostUsd,finalTurnCount:a.payload.finalTurnCount},u=r.get(l);u?u.push(c):r.set(l,[c])}let o=[];for(let[i,s]of r.entries()){let a=pHe(s);a.length<n||o.push(fHe(i,a,s))}return o}function pHe(e){return[...new Set(e.map(t=>t.sessionId))]}var mHe=8;function fHe(e,t,n){let r=hHe(e),o=new Date().toISOString(),i=n.slice(0,mHe),s=i.map(c=>({sessionId:c.sessionId,tracePath:c.relativeTracePath,eventIndices:[c.seq],excerpt:yHe(c.rawLine),annotation:`closure.reason='${c.reason}' \xB7 cost=${bHe(c.finalCostUsd)} \xB7 turns=${c.finalTurnCount}`})),a=n.reduce((c,u)=>c+u.finalCostUsd,0),l=n.reduce((c,u)=>c+u.finalTurnCount,0)/n.length;return{slug:r,title:`Session closure reason '${e}' across ${t.length} session${t.length===1?"":"s"}`,pattern:"closure-anomaly",severity:gHe(e,t.length),observedAt:o,evidence:s,detail:{detector:"closure-anomaly@v2",closureReason:e,affectedSessions:t.length,closureEventCount:n.length,totalCostUsd:ioe(a),avgTurnCount:SHe(l),maxCostUsd:ioe(Math.max(...n.map(c=>c.finalCostUsd))),sessionIds:t,seqs:i.map(c=>c.seq)}}}function gHe(e,t){switch(e){case"budget_exceeded":case"timeout":return"high";case"hook_blocked":case"iteration_cap":case"max_turns_exceeded":return t>=3?"high":"medium";case"abort":return t>=3?"medium":"low";default:return"low"}}function hHe(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return`closure-anomaly-${t.length>0?t:"unknown"}`}function yHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}function bHe(e){return`$${e.toFixed(4)}`}function ioe(e){return Math.round(e*1e4)/1e4}function SHe(e){return Math.round(e*100)/100}import{createHash as wHe}from"crypto";var pl=2,vHe="v1-hook-reason-tuple",kHe=8;function soe(e,t={}){let n=t.minOccurrences??pl;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="hook_decision"||a.payload.hookEvent!=="SubagentStart"||a.payload.decision!=="block")continue;let l=a.payload.reason??"",c=a.payload.blockedTool,u=THe({hookEvent:a.payload.hookEvent,reason:l,blockedTool:c}),d={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:l,blockedTool:c,injectedContextBytes:a.payload.injectedContextBytes},p=r.get(u);p?p.push(d):r.set(u,[d])}let o=[];for(let[i,s]of r.entries())s.length<n||o.push(RHe(i,s));return o}function THe(e){let t=[e.hookEvent,e.reason,e.blockedTool??""].join("|");return wHe("sha256").update(t).digest("hex")}function EHe(e){return`subagent-block-${e.slice(0,12)}`}function RHe(e,t){let n=t[0];if(!n)throw new Error("subagent-block: empty sighting bucket");let r=EHe(e),o=new Date().toISOString(),s=t.slice(0,kHe).map(l=>({sessionId:l.sessionId,tracePath:l.relativeTracePath,eventIndices:[l.seq],excerpt:_He(l.rawLine),annotation:CHe(l)})),a=new Set(t.map(l=>l.sessionId)).size;return{slug:r,title:AHe(n.reason,t.length,a),pattern:"subagent-block",severity:xHe(t.length,a),observedAt:o,evidence:s,detail:{detector:"subagent-block@v1",fingerprintAlgorithm:vHe,fingerprint:e,hookEvent:"SubagentStart",reason:n.reason,blockedTool:n.blockedTool??null,blockCount:t.length,distinctSessions:a,sessionIds:t.map(l=>l.sessionId),seqs:t.map(l=>l.seq)}}}function xHe(e,t){return e>=6||t>=3?"high":e>=3?"medium":"low"}function AHe(e,t,n){let r=e.length>80?e.slice(0,77)+"...":e,o=r.length>0?`: "${r}"`:"";return`SubagentStart hook blocked ${t}\xD7 across ${n} session${n===1?"":"s"}${o}`}function CHe(e){let t=[`seq ${e.seq}`];return e.reason&&t.push(`reason="${e.reason.slice(0,200)}"`),e.blockedTool&&t.push(`blockedTool=${e.blockedTool}`),typeof e.injectedContextBytes=="number"&&t.push(`injectedContextBytes=${e.injectedContextBytes}`),t.join(" \xB7 ")}function _He(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}$r();import{createHash as IHe}from"crypto";var ml=2,PHe="v1-pretooluse-read-normreason",MHe=8,OHe=new Set(["read_file","grep","glob","list_directory","Read","Grep","Glob","LS","NotebookRead"]);function DHe(e){return e.includes(mi)||e.includes(Zl)?"credential-floor":e.includes("Sub-agent path access denied:")||e.includes("Sub-agents cannot access paths outside the session's granted roots")?"read-root-containment":"unclassified"}function $He(e){return e.replace(/~?\/[\w.\-/]+/g,"<path>")}function aoe(e,t={}){let n=t.minOccurrences??ml;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="hook_decision"||a.payload.hookEvent!=="PreToolUse"||a.payload.decision!=="block")continue;let l=a.payload.blockedTool;if(l===void 0||!OHe.has(l))continue;let c=a.payload.reason??"",u=DHe(c);if(u==="credential-floor")continue;let d=$He(c),p=FHe({hookEvent:a.payload.hookEvent,normalizedReason:d}),f={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:c,normalizedReason:d,blockedTool:l,mechanism:u},g=r.get(p);g?g.push(f):r.set(p,[f])}let o=[];for(let[i,s]of r.entries())s.length<n||o.push(NHe(i,s));return o}function FHe(e){let t=[e.hookEvent,e.normalizedReason].join("|");return IHe("sha256").update(t).digest("hex")}function LHe(e){return`subagent-read-denial-${e.slice(0,12)}`}function NHe(e,t){let n=t[0];if(!n)throw new Error("subagent-read-denial: empty sighting bucket");let r=LHe(e),o=new Date().toISOString(),s=t.slice(0,MHe).map(c=>({sessionId:c.sessionId,tracePath:c.relativeTracePath,eventIndices:[c.seq],excerpt:HHe(c.rawLine),annotation:jHe(c)})),a=new Set(t.map(c=>c.sessionId)).size,l=[...new Set(t.map(c=>c.blockedTool))].sort();return{slug:r,title:UHe(t.length,a),pattern:"subagent-read-denial",severity:BHe(t.length,a),observedAt:o,evidence:s,detail:{detector:"subagent-read-denial@v2",fingerprintAlgorithm:PHe,fingerprint:e,hookEvent:"PreToolUse",denialMechanism:n.mechanism,normalizedReason:n.normalizedReason,reason:n.reason,blockedTools:l,denialCount:t.length,distinctSessions:a,sessionIds:[...new Set(t.map(c=>c.sessionId))],seqs:t.map(c=>c.seq)}}}function BHe(e,t){return e>=6||t>=3?"high":e>=3?"medium":"low"}function UHe(e,t){return`Forked sub-agent read auto-denied ${e}\xD7 across ${t} session${t===1?"":"s"} (path outside granted read roots)`}function jHe(e){let t=[`seq ${e.seq}`,`blockedTool=${e.blockedTool}`];return e.reason&&t.push(`reason="${e.reason.slice(0,200)}"`),t.join(" \xB7 ")}function HHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}Zm();var WHe=lu,fl=3,gl=.25,KHe=8;function Ad(e,t={}){let n=t.minFailures??fl,r=t.minFailureRate??gl;if(n<1)throw new Error(`minFailures must be >= 1 (got ${n})`);if(r<=0||r>1)throw new Error(`minFailureRate must be in (0, 1] (got ${r})`);let o=new Map;for(let s of e)for(let a of s.events){let l=a.event;if(l.kind!=="tool_call"||l.payload.phase!=="completed"||l.payload.circuitBreaker===!0)continue;let c=GHe(o,l.payload.name),u=l.payload.failureClass;if(u!==void 0&&WHe.has(u)){c.excludedByClass.set(u,(c.excludedByClass.get(u)??0)+1);continue}c.totalCalls+=1,l.payload.isError&&(c.failures.push({sessionId:s.sessionId,relativeTracePath:s.relativeTracePath,seq:l.seq,rawLine:a.rawLine,resultBytes:l.payload.resultBytes,durationMs:l.payload.durationMs,truncated:l.payload.truncated,...u!==void 0?{failureClass:u}:{}}),c.affectedSessions.add(s.sessionId),l.payload.truncated&&(c.truncatedFailureCount+=1))}let i=[];for(let s of o.values()){if(s.failures.length<n)continue;let a=s.failures.length/s.totalCalls;a<r||i.push(qHe(s,a))}return i.sort((s,a)=>s.slug.localeCompare(a.slug)),i}function GHe(e,t){let n=e.get(t);return n||(n={toolName:t,totalCalls:0,failures:[],affectedSessions:new Set,truncatedFailureCount:0,excludedByClass:new Map},e.set(t,n)),n}function qHe(e,t){let n=YHe(e.toolName),r=new Date().toISOString(),i=e.failures.slice(0,KHe).map(u=>({sessionId:u.sessionId,tracePath:u.relativeTracePath,eventIndices:[u.seq],excerpt:JHe(u.rawLine),annotation:`isError=true${u.failureClass?` \xB7 class=${u.failureClass}`:""} \xB7 resultBytes=${u.resultBytes} \xB7 durationMs=${u.durationMs}${u.truncated?" \xB7 truncated":""}`})),a=e.failures.reduce((u,d)=>u+d.durationMs,0)/e.failures.length,l={};for(let u of e.failures){let d=u.failureClass??"unclassified";l[d]=(l[d]??0)+1}let c={};for(let[u,d]of e.excludedByClass)c[u]=d;return{slug:n,title:VHe(e.toolName,e.failures.length,e.totalCalls,t),pattern:"tool-failure-density",severity:zHe(e.failures.length,t),observedAt:r,evidence:i,detail:{detector:"tool-failure-density@v2",toolName:e.toolName,totalCalls:e.totalCalls,failureCount:e.failures.length,failureRate:XHe(t),affectedSessionCount:e.affectedSessions.size,truncatedFailureCount:e.truncatedFailureCount,avgFailureDurationMs:QHe(a),failureClassBreakdown:l,excludedByClass:c,sessionIds:Array.from(e.affectedSessions),seqs:e.failures.map(u=>u.seq)}}}function zHe(e,t){return t>=1||t>=.5?"high":t>=.25?e>=10?"high":"medium":e>=10?"medium":"low"}function VHe(e,t,n,r){let o=(r*100).toFixed(1);return`'${e}' tool failed ${t}/${n} calls (${o}%)`}function YHe(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return`tool-failure-${t.length>0?t:"unknown"}`}function JHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}function XHe(e){return Math.round(e*1e4)/1e4}function QHe(e){return Math.round(e*100)/100}var KE=Object.freeze([{name:"repeated-tool-use",description:`Tool fired \u2265N consecutive times with identical fingerprint (default ${Zo})`,run:(e,t)=>HE(e,{minRepeats:t.minRepeats??Zo})},{name:"closure-anomaly",description:`Session closure reason \u2208 {budget_exceeded,timeout,hook_blocked,abort,iteration_cap,max_turns_exceeded} (default \u2265${1})`,enabledByDefault:!0,run:(e,t)=>WE(e,{minOccurrences:t.closureAnomalyMinOccurrences??1})},{name:"subagent-block",description:`Same SubagentStart hook block reason recurring across \u2265N events (default ${pl})`,enabledByDefault:!1,run:(e,t)=>soe(e,{minOccurrences:t.subagentBlockMinOccurrences??pl})},{name:"tool-failure-density",description:`Tool with \u2265N failures (isError: true) AND failure rate \u2265R (defaults: ${fl} failures, ${gl} rate)`,enabledByDefault:!0,run:(e,t)=>Ad(e,{minFailures:t.toolFailureMinFailures??fl,minFailureRate:t.toolFailureMinRate??gl})},{name:"subagent-read-denial",description:`Forked sub-agent read auto-denied (PreToolUse block, path outside granted read roots) recurring across \u2265N events (default ${ml})`,enabledByDefault:!1,run:(e,t)=>aoe(e,{minOccurrences:t.subagentReadDenialMinOccurrences??ml})}]);function loe(e,t,n,r){let o=[];for(let i of KE){if(n!==void 0){if(!n.has(i.name))continue}else if(r!==!0&&i.enabledByDefault===!1)continue;let s=i.run(e,t);o.push(...s)}return o}function GE(){return KE.map(e=>e.name)}function coe(){return KE.filter(e=>e.enabledByDefault!==!1).map(e=>e.name)}function Cd(){return KE.filter(e=>e.enabledByDefault===!1).map(e=>e.name)}import{existsSync as Cg,mkdirSync as woe,readFileSync as yWe,readdirSync as voe,writeFileSync as bWe}from"fs";import{join as koe}from"path";import{z as O}from"zod";var vs=O.enum(["repeated-tool-use","subagent-block","closure-anomaly","tool-failure-density","subagent-read-denial"]),qE=O.enum(["low","medium","high"]),ZHe=O.enum(["open","deferred","resolved"]),uoe=O.object({sessionId:O.string().min(1),tracePath:O.string().min(1),eventIndices:O.array(O.number().int().nonnegative()).min(1),excerpt:O.string().max(2e3),annotation:O.string().optional()}),zE=O.object({at:O.string().datetime(),text:O.string()}),Ag=O.object({schemaVersion:O.literal(1),slug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"slug must be lowercase alphanumeric with hyphens"),title:O.string().min(1).max(200),pattern:vs,severity:qE,status:ZHe,firstSeen:O.string().datetime(),lastSeen:O.string().datetime(),occurrenceCount:O.number().int().nonnegative(),evidence:O.array(uoe).min(1),detail:O.record(O.string(),O.unknown()),notes:O.array(zE).default([])}),a6t=O.object({slug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),title:O.string().min(1).max(200),pattern:vs,severity:qE,observedAt:O.string().datetime(),evidence:O.array(uoe).min(1),detail:O.record(O.string(),O.unknown())}),doe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","updated","merged-noop"]),slug:O.string(),pattern:vs,occurrenceCount:O.number().int().nonnegative(),evidenceAdded:O.number().int().nonnegative()}),eWe=O.enum(["prompt-defect","schema-too-strict","schema-too-loose","tool-output-shape","hook-overreach","retry-policy","timeout-too-low","cost-control","dispatcher-bug","detector-needs-tuning","unknown"]),tWe=O.enum(["safe","moderate","high","forbidden"]),nWe=O.enum(["low","medium","high"]),rWe=O.object({cardSlug:O.string(),eventIndices:O.array(O.number().int().nonnegative()).min(1),annotation:O.string().optional()}),oWe=O.object({path:O.string().min(1),rationale:O.string(),riskTier:tWe,confidence:nWe}),iWe=O.object({unitTests:O.array(O.string()),evalCases:O.array(O.string()),smokeChecks:O.array(O.string()),manualChecks:O.array(O.string())}),sWe=O.object({forbiddenPaths:O.array(O.string()),requiresExplicitApproval:O.boolean()}),aWe=O.enum(["draft","approved","rejected","superseded"]),WD=O.object({schemaVersion:O.literal(1),proposalId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),cardSlug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),title:O.string().min(1).max(200),hypothesis:O.string().min(1),rootCauseClass:eWe,evidenceRefs:O.array(rWe).min(1),fixSketch:O.string().min(1),likelyFiles:O.array(oWe),riskLevel:qE,validationPlan:iWe,scopeFreeze:sWe,generatedBy:O.enum(["template","llm"]),createdAt:O.string().datetime(),status:aWe,notes:O.array(zE).default([])}),poe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","triaged","superseded"]),proposalId:O.string(),cardSlug:O.string(),generatedBy:O.enum(["template","llm"]),riskLevel:qE}),lWe=O.object({sourceSessionId:O.string().min(1),sourceTracePath:O.string().min(1),fixturePath:O.string().min(1),evidenceRowIndex:O.number().int().nonnegative(),evidenceEventIndices:O.array(O.number().int().nonnegative()).min(1),sliceLineRange:O.object({startLine:O.number().int().positive(),endLine:O.number().int().positive()}),sliceLineCount:O.number().int().positive(),sliceSha256:O.string().regex(/^[0-9a-f]{64}$/,"sliceSha256 must be 64 lowercase hex chars")}),cWe=O.object({kind:O.literal("pattern-absent"),patternId:vs,detectorVersion:O.string().min(1),rationale:O.string().min(1)}),uWe=O.object({detectorAtGeneration:O.string().min(1),fingerprintAtGeneration:O.string().nullable(),cardOccurrenceCountAtGeneration:O.number().int().nonnegative(),cardLastSeenAtGeneration:O.string().datetime(),generatedBy:O.literal("replay-fixture")}),dWe=O.enum(["draft","approved","rejected","superseded"]),VE=O.object({schemaVersion:O.literal(1),evalCaseId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"evalCaseId must be lowercase alphanumeric with hyphens"),cardSlug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),proposalId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/).nullable(),title:O.string().min(1).max(200),createdAt:O.string().datetime(),kind:O.literal("replay"),replay:lWe,assertion:cWe,provenance:uWe,status:dWe,notes:O.array(zE).default([])}),moe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","triaged","superseded"]),evalCaseId:O.string(),cardSlug:O.string(),proposalId:O.string().nullable(),kind:O.literal("replay")}),pWe=O.enum(["pass","fail","skipped"]),mWe=O.object({name:O.string().min(1),description:O.string().min(1),status:pWe,expected:O.string(),actual:O.string()}),fWe=O.enum(["config-value","observed-behavior","source-symbol","fixture"]),gWe=O.object({kind:fWe,ref:O.string().min(1),detail:O.string()}),foe=O.enum(["pass","fail","unsupported","error"]),KD=O.object({schemaVersion:O.literal(1),evalRunId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"evalRunId must be lowercase alphanumeric with hyphens"),evalCaseId:O.string().min(1),cardSlug:O.string().min(1),patternId:vs,contract:O.string().min(1).nullable(),status:foe,createdAt:O.string().datetime(),durationMs:O.number().int().nonnegative(),checks:O.array(mWe),evidence:O.array(gWe),runner:O.object({version:O.string().min(1),mode:O.literal("deterministic")}),notes:O.array(zE).default([])}),goe=O.object({timestamp:O.string().datetime(),event:O.literal("created"),evalRunId:O.string(),evalCaseId:O.string(),cardSlug:O.string(),patternId:vs,contract:O.string().nullable(),status:foe}),hoe=Object.freeze(["**/auth/**","**/billing/**","**/secrets/**","**/credentials*",".env",".env.*","pnpm-lock.yaml","package-lock.json","yarn.lock",".github/workflows/**","dist/**","build/**","node_modules/**",".git/**","**/.afk/config/**","**/.afk/state/**"]);var yoe={low:0,medium:1,high:2};function hWe(e,t){return yoe[e]>=yoe[t]?e:t}function boe(e){let t=e?.detector;return typeof t=="string"&&t.length>0?t:void 0}function Soe(e,t){let n=boe(e.detail),r=boe(t.detail);return n!==void 0&&r!==void 0&&n!==r?t.severity:hWe(e.severity,t.severity)}Ur();function Toe(e){let t=Ss();Cg(t)||woe(t,{recursive:!0});let n=Rg(e.slug),r=jE(e.slug),o=_d(n),i=SWe(o,e),s=o===void 0,a=i.evidence.length-(o?.evidence.length??0),l=s?"created":a>0?"updated":"merged-noop",c=Ag.parse(i);return mt(n,JSON.stringify(c,null,2),438),mt(r,_g(c),438),vWe({timestamp:kWe(),event:l,slug:c.slug,pattern:c.pattern,occurrenceCount:c.occurrenceCount,evidenceAdded:Math.max(0,a)}),{slug:c.slug,event:l,occurrenceCount:c.occurrenceCount,evidenceAdded:Math.max(0,a),jsonPath:n,markdownPath:r}}function _d(e){if(Cg(e))try{let t=yWe(e,"utf-8"),n=JSON.parse(t),r=Ag.safeParse(n);return r.success?r.data:void 0}catch{return}}function SWe(e,t){if(!e)return{schemaVersion:1,slug:t.slug,title:t.title,pattern:t.pattern,severity:t.severity,status:"open",firstSeen:t.observedAt,lastSeen:t.observedAt,occurrenceCount:t.evidence.length,evidence:t.evidence,detail:t.detail,notes:[]};if(e.slug!==t.slug)throw new Error(`card-writer: slug mismatch on merge (existing='${e.slug}', detection='${t.slug}')`);let n=wWe(e.evidence,t.evidence),r=TWe(e.firstSeen,t.observedAt),o=EWe(e.lastSeen,t.observedAt),i=Soe(e,t);return{schemaVersion:1,slug:e.slug,title:t.title,pattern:e.pattern,severity:i,status:e.status,firstSeen:r,lastSeen:o,occurrenceCount:n.length,evidence:n,detail:t.detail,notes:e.notes}}function wWe(e,t){let n=i=>`${i.sessionId}::${i.eventIndices[0]??"NA"}`,r=new Set(e.map(n)),o=[...e];for(let i of t){let s=n(i);r.has(s)||(r.add(s),o.push(i))}return o}function _g(e){let t=[];t.push(`# ${e.slug} \u2014 \`${e.severity}\` \u2014 \`${e.status}\``),t.push(""),t.push(e.title),t.push(""),t.push(`**Pattern:** \`${e.pattern}\` \xB7 **Occurrences:** ${e.occurrenceCount} \xB7 **First seen:** ${e.firstSeen} \xB7 **Last seen:** ${e.lastSeen}`),t.push(""),t.push("## Evidence"),t.push("");for(let n of e.evidence)t.push(`### Session \`${n.sessionId}\``),t.push(""),t.push(`- Trace: \`${n.tracePath}\``),t.push(`- Event seqs: ${n.eventIndices.join(", ")}`),n.annotation&&t.push(`- Note: ${n.annotation}`),t.push(""),t.push("```jsonl"),t.push(n.excerpt),t.push("```"),t.push("");if(t.push("## Detail"),t.push(""),t.push("```json"),t.push(JSON.stringify(e.detail,null,2)),t.push("```"),t.push(""),t.push("## Triage notes"),t.push(""),e.notes.length>0){for(let n of e.notes)t.push(`- _${n.at}_ \u2014 ${n.text}`);t.push("")}else t.push('_(none \u2014 add one with `afk improve cards triage <slug> --note "\u2026"`)_'),t.push("");return t.join(`
|
|
2173
|
+
`);return t.length<=2e3?t:t.slice(0,1997)+"..."}function aHe(e,t){let n=e[0],r=e[e.length-1];return!n||!r?"":[`${e.length}\xD7 consecutive '${n.name}' calls in ${t} context`,`(seq ${n.completedSeq}\u2026${r.completedSeq},`,`inputBytes=${n.inputBytes}, resultBytes=${n.resultBytes},`,`isError=${n.isError})`].join(" ")}function lHe(e,t){return`'${e}' tool repeated ${t}\xD7 with identical fingerprint`}function cHe(e){return e>=10?"high":e>=4?"medium":"low"}function uHe(e,t){let n=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),r=t.slice(0,12);return`repeated-tool-${n.length>0?n:"tool"}-${r}`}var dHe=new Set(["budget_exceeded","timeout","hook_blocked","abort","iteration_cap","max_turns_exceeded"]);function WE(e,t={}){let n=t.minOccurrences??1;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="closure")continue;let l=a.payload.reason;if(!dHe.has(l))continue;let c={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:l,finalCostUsd:a.payload.finalCostUsd,finalTurnCount:a.payload.finalTurnCount},u=r.get(l);u?u.push(c):r.set(l,[c])}let o=[];for(let[i,s]of r.entries()){let a=pHe(s);a.length<n||o.push(fHe(i,a,s))}return o}function pHe(e){return[...new Set(e.map(t=>t.sessionId))]}var mHe=8;function fHe(e,t,n){let r=hHe(e),o=new Date().toISOString(),i=n.slice(0,mHe),s=i.map(c=>({sessionId:c.sessionId,tracePath:c.relativeTracePath,eventIndices:[c.seq],excerpt:yHe(c.rawLine),annotation:`closure.reason='${c.reason}' \xB7 cost=${bHe(c.finalCostUsd)} \xB7 turns=${c.finalTurnCount}`})),a=n.reduce((c,u)=>c+u.finalCostUsd,0),l=n.reduce((c,u)=>c+u.finalTurnCount,0)/n.length;return{slug:r,title:`Session closure reason '${e}' across ${t.length} session${t.length===1?"":"s"}`,pattern:"closure-anomaly",severity:gHe(e,t.length),observedAt:o,evidence:s,detail:{detector:"closure-anomaly@v2",closureReason:e,affectedSessions:t.length,closureEventCount:n.length,totalCostUsd:ioe(a),avgTurnCount:SHe(l),maxCostUsd:ioe(Math.max(...n.map(c=>c.finalCostUsd))),sessionIds:t,seqs:i.map(c=>c.seq)}}}function gHe(e,t){switch(e){case"budget_exceeded":case"timeout":return"high";case"hook_blocked":case"iteration_cap":case"max_turns_exceeded":return t>=3?"high":"medium";case"abort":return t>=3?"medium":"low";default:return"low"}}function hHe(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return`closure-anomaly-${t.length>0?t:"unknown"}`}function yHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}function bHe(e){return`$${e.toFixed(4)}`}function ioe(e){return Math.round(e*1e4)/1e4}function SHe(e){return Math.round(e*100)/100}import{createHash as wHe}from"crypto";var pl=2,vHe="v1-hook-reason-tuple",kHe=8;function soe(e,t={}){let n=t.minOccurrences??pl;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="hook_decision"||a.payload.hookEvent!=="SubagentStart"||a.payload.decision!=="block")continue;let l=a.payload.reason??"",c=a.payload.blockedTool,u=THe({hookEvent:a.payload.hookEvent,reason:l,blockedTool:c}),d={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:l,blockedTool:c,injectedContextBytes:a.payload.injectedContextBytes},p=r.get(u);p?p.push(d):r.set(u,[d])}let o=[];for(let[i,s]of r.entries())s.length<n||o.push(RHe(i,s));return o}function THe(e){let t=[e.hookEvent,e.reason,e.blockedTool??""].join("|");return wHe("sha256").update(t).digest("hex")}function EHe(e){return`subagent-block-${e.slice(0,12)}`}function RHe(e,t){let n=t[0];if(!n)throw new Error("subagent-block: empty sighting bucket");let r=EHe(e),o=new Date().toISOString(),s=t.slice(0,kHe).map(l=>({sessionId:l.sessionId,tracePath:l.relativeTracePath,eventIndices:[l.seq],excerpt:_He(l.rawLine),annotation:CHe(l)})),a=new Set(t.map(l=>l.sessionId)).size;return{slug:r,title:AHe(n.reason,t.length,a),pattern:"subagent-block",severity:xHe(t.length,a),observedAt:o,evidence:s,detail:{detector:"subagent-block@v1",fingerprintAlgorithm:vHe,fingerprint:e,hookEvent:"SubagentStart",reason:n.reason,blockedTool:n.blockedTool??null,blockCount:t.length,distinctSessions:a,sessionIds:t.map(l=>l.sessionId),seqs:t.map(l=>l.seq)}}}function xHe(e,t){return e>=6||t>=3?"high":e>=3?"medium":"low"}function AHe(e,t,n){let r=e.length>80?e.slice(0,77)+"...":e,o=r.length>0?`: "${r}"`:"";return`SubagentStart hook blocked ${t}\xD7 across ${n} session${n===1?"":"s"}${o}`}function CHe(e){let t=[`seq ${e.seq}`];return e.reason&&t.push(`reason="${e.reason.slice(0,200)}"`),e.blockedTool&&t.push(`blockedTool=${e.blockedTool}`),typeof e.injectedContextBytes=="number"&&t.push(`injectedContextBytes=${e.injectedContextBytes}`),t.join(" \xB7 ")}function _He(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}$r();import{createHash as IHe}from"crypto";var ml=2,PHe="v1-pretooluse-read-normreason",MHe=8,OHe=new Set(["read_file","grep","glob","list_directory","Read","Grep","Glob","LS","NotebookRead"]);function DHe(e){return e.includes(mi)||e.includes(Zl)?"credential-floor":e.includes("Sub-agent path access denied:")||e.includes("Sub-agents cannot access paths outside the session's granted roots")?"read-root-containment":"unclassified"}function $He(e){return e.replace(/~?\/[\w.\-/]+/g,"<path>")}function aoe(e,t={}){let n=t.minOccurrences??ml;if(n<1)throw new Error(`minOccurrences must be >= 1 (got ${n})`);let r=new Map;for(let i of e)for(let s of i.events){let a=s.event;if(a.kind!=="hook_decision"||a.payload.hookEvent!=="PreToolUse"||a.payload.decision!=="block")continue;let l=a.payload.blockedTool;if(l===void 0||!OHe.has(l))continue;let c=a.payload.reason??"",u=DHe(c);if(u==="credential-floor")continue;let d=$He(c),p=FHe({hookEvent:a.payload.hookEvent,normalizedReason:d}),f={sessionId:i.sessionId,relativeTracePath:i.relativeTracePath,seq:a.seq,rawLine:s.rawLine,reason:c,normalizedReason:d,blockedTool:l,mechanism:u},g=r.get(p);g?g.push(f):r.set(p,[f])}let o=[];for(let[i,s]of r.entries())s.length<n||o.push(NHe(i,s));return o}function FHe(e){let t=[e.hookEvent,e.normalizedReason].join("|");return IHe("sha256").update(t).digest("hex")}function LHe(e){return`subagent-read-denial-${e.slice(0,12)}`}function NHe(e,t){let n=t[0];if(!n)throw new Error("subagent-read-denial: empty sighting bucket");let r=LHe(e),o=new Date().toISOString(),s=t.slice(0,MHe).map(c=>({sessionId:c.sessionId,tracePath:c.relativeTracePath,eventIndices:[c.seq],excerpt:HHe(c.rawLine),annotation:jHe(c)})),a=new Set(t.map(c=>c.sessionId)).size,l=[...new Set(t.map(c=>c.blockedTool))].sort();return{slug:r,title:UHe(t.length,a),pattern:"subagent-read-denial",severity:BHe(t.length,a),observedAt:o,evidence:s,detail:{detector:"subagent-read-denial@v2",fingerprintAlgorithm:PHe,fingerprint:e,hookEvent:"PreToolUse",denialMechanism:n.mechanism,normalizedReason:n.normalizedReason,reason:n.reason,blockedTools:l,denialCount:t.length,distinctSessions:a,sessionIds:[...new Set(t.map(c=>c.sessionId))],seqs:t.map(c=>c.seq)}}}function BHe(e,t){return e>=6||t>=3?"high":e>=3?"medium":"low"}function UHe(e,t){return`Forked sub-agent read auto-denied ${e}\xD7 across ${t} session${t===1?"":"s"} (path outside granted read roots)`}function jHe(e){let t=[`seq ${e.seq}`,`blockedTool=${e.blockedTool}`];return e.reason&&t.push(`reason="${e.reason.slice(0,200)}"`),t.join(" \xB7 ")}function HHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}Zm();var WHe=lu,fl=3,gl=.25,KHe=8;function Ad(e,t={}){let n=t.minFailures??fl,r=t.minFailureRate??gl;if(n<1)throw new Error(`minFailures must be >= 1 (got ${n})`);if(r<=0||r>1)throw new Error(`minFailureRate must be in (0, 1] (got ${r})`);let o=new Map;for(let s of e)for(let a of s.events){let l=a.event;if(l.kind!=="tool_call"||l.payload.phase!=="completed"||l.payload.circuitBreaker===!0)continue;let c=GHe(o,l.payload.name),u=l.payload.failureClass;if(u!==void 0&&WHe.has(u)){c.excludedByClass.set(u,(c.excludedByClass.get(u)??0)+1);continue}c.totalCalls+=1,l.payload.isError&&(c.failures.push({sessionId:s.sessionId,relativeTracePath:s.relativeTracePath,seq:l.seq,rawLine:a.rawLine,resultBytes:l.payload.resultBytes,durationMs:l.payload.durationMs,truncated:l.payload.truncated,...u!==void 0?{failureClass:u}:{}}),c.affectedSessions.add(s.sessionId),l.payload.truncated&&(c.truncatedFailureCount+=1))}let i=[];for(let s of o.values()){if(s.failures.length<n)continue;let a=s.failures.length/s.totalCalls;a<r||i.push(qHe(s,a))}return i.sort((s,a)=>s.slug.localeCompare(a.slug)),i}function GHe(e,t){let n=e.get(t);return n||(n={toolName:t,totalCalls:0,failures:[],affectedSessions:new Set,truncatedFailureCount:0,excludedByClass:new Map},e.set(t,n)),n}function qHe(e,t){let n=YHe(e.toolName),r=new Date().toISOString(),i=e.failures.slice(0,KHe).map(u=>({sessionId:u.sessionId,tracePath:u.relativeTracePath,eventIndices:[u.seq],excerpt:JHe(u.rawLine),annotation:`isError=true${u.failureClass?` \xB7 class=${u.failureClass}`:""} \xB7 resultBytes=${u.resultBytes} \xB7 durationMs=${u.durationMs}${u.truncated?" \xB7 truncated":""}`})),a=e.failures.reduce((u,d)=>u+d.durationMs,0)/e.failures.length,l={};for(let u of e.failures){let d=u.failureClass??"unclassified";l[d]=(l[d]??0)+1}let c={};for(let[u,d]of e.excludedByClass)c[u]=d;return{slug:n,title:VHe(e.toolName,e.failures.length,e.totalCalls,t),pattern:"tool-failure-density",severity:zHe(e.failures.length,t),observedAt:r,evidence:i,detail:{detector:"tool-failure-density@v2",toolName:e.toolName,totalCalls:e.totalCalls,failureCount:e.failures.length,failureRate:XHe(t),affectedSessionCount:e.affectedSessions.size,truncatedFailureCount:e.truncatedFailureCount,avgFailureDurationMs:QHe(a),failureClassBreakdown:l,excludedByClass:c,sessionIds:Array.from(e.affectedSessions),seqs:e.failures.map(u=>u.seq)}}}function zHe(e,t){return t>=1||t>=.5?"high":t>=.25?e>=10?"high":"medium":e>=10?"medium":"low"}function VHe(e,t,n,r){let o=(r*100).toFixed(1);return`'${e}' tool failed ${t}/${n} calls (${o}%)`}function YHe(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return`tool-failure-${t.length>0?t:"unknown"}`}function JHe(e){return e.length<=2e3?e:e.slice(0,1997)+"..."}function XHe(e){return Math.round(e*1e4)/1e4}function QHe(e){return Math.round(e*100)/100}var KE=Object.freeze([{name:"repeated-tool-use",description:`Tool fired \u2265N consecutive times with identical fingerprint (default ${Zo})`,run:(e,t)=>HE(e,{minRepeats:t.minRepeats??Zo})},{name:"closure-anomaly",description:`Session closure reason \u2208 {budget_exceeded,timeout,hook_blocked,abort,iteration_cap,max_turns_exceeded} (default \u2265${1})`,enabledByDefault:!0,run:(e,t)=>WE(e,{minOccurrences:t.closureAnomalyMinOccurrences??1})},{name:"subagent-block",description:`Same SubagentStart hook block reason recurring across \u2265N events (default ${pl})`,enabledByDefault:!1,run:(e,t)=>soe(e,{minOccurrences:t.subagentBlockMinOccurrences??pl})},{name:"tool-failure-density",description:`Tool with \u2265N failures (isError: true) AND failure rate \u2265R (defaults: ${fl} failures, ${gl} rate)`,enabledByDefault:!0,run:(e,t)=>Ad(e,{minFailures:t.toolFailureMinFailures??fl,minFailureRate:t.toolFailureMinRate??gl})},{name:"subagent-read-denial",description:`Forked sub-agent read auto-denied (PreToolUse block, path outside granted read roots) recurring across \u2265N events (default ${ml})`,enabledByDefault:!1,run:(e,t)=>aoe(e,{minOccurrences:t.subagentReadDenialMinOccurrences??ml})}]);function loe(e,t,n,r){let o=[];for(let i of KE){if(n!==void 0){if(!n.has(i.name))continue}else if(r!==!0&&i.enabledByDefault===!1)continue;let s=i.run(e,t);o.push(...s)}return o}function GE(){return KE.map(e=>e.name)}function coe(){return KE.filter(e=>e.enabledByDefault!==!1).map(e=>e.name)}function Cd(){return KE.filter(e=>e.enabledByDefault===!1).map(e=>e.name)}import{existsSync as Cg,mkdirSync as woe,readFileSync as yWe,readdirSync as voe,writeFileSync as bWe}from"fs";import{join as koe}from"path";import{z as O}from"zod";var vs=O.enum(["repeated-tool-use","subagent-block","closure-anomaly","tool-failure-density","subagent-read-denial"]),qE=O.enum(["low","medium","high"]),ZHe=O.enum(["open","deferred","resolved"]),uoe=O.object({sessionId:O.string().min(1),tracePath:O.string().min(1),eventIndices:O.array(O.number().int().nonnegative()).min(1),excerpt:O.string().max(2e3),annotation:O.string().optional()}),zE=O.object({at:O.string().datetime(),text:O.string()}),Ag=O.object({schemaVersion:O.literal(1),slug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"slug must be lowercase alphanumeric with hyphens"),title:O.string().min(1).max(200),pattern:vs,severity:qE,status:ZHe,firstSeen:O.string().datetime(),lastSeen:O.string().datetime(),occurrenceCount:O.number().int().nonnegative(),evidence:O.array(uoe).min(1),detail:O.record(O.string(),O.unknown()),notes:O.array(zE).default([])}),a5t=O.object({slug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),title:O.string().min(1).max(200),pattern:vs,severity:qE,observedAt:O.string().datetime(),evidence:O.array(uoe).min(1),detail:O.record(O.string(),O.unknown())}),doe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","updated","merged-noop"]),slug:O.string(),pattern:vs,occurrenceCount:O.number().int().nonnegative(),evidenceAdded:O.number().int().nonnegative()}),eWe=O.enum(["prompt-defect","schema-too-strict","schema-too-loose","tool-output-shape","hook-overreach","retry-policy","timeout-too-low","cost-control","dispatcher-bug","detector-needs-tuning","unknown"]),tWe=O.enum(["safe","moderate","high","forbidden"]),nWe=O.enum(["low","medium","high"]),rWe=O.object({cardSlug:O.string(),eventIndices:O.array(O.number().int().nonnegative()).min(1),annotation:O.string().optional()}),oWe=O.object({path:O.string().min(1),rationale:O.string(),riskTier:tWe,confidence:nWe}),iWe=O.object({unitTests:O.array(O.string()),evalCases:O.array(O.string()),smokeChecks:O.array(O.string()),manualChecks:O.array(O.string())}),sWe=O.object({forbiddenPaths:O.array(O.string()),requiresExplicitApproval:O.boolean()}),aWe=O.enum(["draft","approved","rejected","superseded"]),WD=O.object({schemaVersion:O.literal(1),proposalId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),cardSlug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),title:O.string().min(1).max(200),hypothesis:O.string().min(1),rootCauseClass:eWe,evidenceRefs:O.array(rWe).min(1),fixSketch:O.string().min(1),likelyFiles:O.array(oWe),riskLevel:qE,validationPlan:iWe,scopeFreeze:sWe,generatedBy:O.enum(["template","llm"]),createdAt:O.string().datetime(),status:aWe,notes:O.array(zE).default([])}),poe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","triaged","superseded"]),proposalId:O.string(),cardSlug:O.string(),generatedBy:O.enum(["template","llm"]),riskLevel:qE}),lWe=O.object({sourceSessionId:O.string().min(1),sourceTracePath:O.string().min(1),fixturePath:O.string().min(1),evidenceRowIndex:O.number().int().nonnegative(),evidenceEventIndices:O.array(O.number().int().nonnegative()).min(1),sliceLineRange:O.object({startLine:O.number().int().positive(),endLine:O.number().int().positive()}),sliceLineCount:O.number().int().positive(),sliceSha256:O.string().regex(/^[0-9a-f]{64}$/,"sliceSha256 must be 64 lowercase hex chars")}),cWe=O.object({kind:O.literal("pattern-absent"),patternId:vs,detectorVersion:O.string().min(1),rationale:O.string().min(1)}),uWe=O.object({detectorAtGeneration:O.string().min(1),fingerprintAtGeneration:O.string().nullable(),cardOccurrenceCountAtGeneration:O.number().int().nonnegative(),cardLastSeenAtGeneration:O.string().datetime(),generatedBy:O.literal("replay-fixture")}),dWe=O.enum(["draft","approved","rejected","superseded"]),VE=O.object({schemaVersion:O.literal(1),evalCaseId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"evalCaseId must be lowercase alphanumeric with hyphens"),cardSlug:O.string().regex(/^[a-z0-9][a-z0-9-]*$/),proposalId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/).nullable(),title:O.string().min(1).max(200),createdAt:O.string().datetime(),kind:O.literal("replay"),replay:lWe,assertion:cWe,provenance:uWe,status:dWe,notes:O.array(zE).default([])}),moe=O.object({timestamp:O.string().datetime(),event:O.enum(["created","triaged","superseded"]),evalCaseId:O.string(),cardSlug:O.string(),proposalId:O.string().nullable(),kind:O.literal("replay")}),pWe=O.enum(["pass","fail","skipped"]),mWe=O.object({name:O.string().min(1),description:O.string().min(1),status:pWe,expected:O.string(),actual:O.string()}),fWe=O.enum(["config-value","observed-behavior","source-symbol","fixture"]),gWe=O.object({kind:fWe,ref:O.string().min(1),detail:O.string()}),foe=O.enum(["pass","fail","unsupported","error"]),KD=O.object({schemaVersion:O.literal(1),evalRunId:O.string().regex(/^[a-z0-9][a-z0-9-]*$/,"evalRunId must be lowercase alphanumeric with hyphens"),evalCaseId:O.string().min(1),cardSlug:O.string().min(1),patternId:vs,contract:O.string().min(1).nullable(),status:foe,createdAt:O.string().datetime(),durationMs:O.number().int().nonnegative(),checks:O.array(mWe),evidence:O.array(gWe),runner:O.object({version:O.string().min(1),mode:O.literal("deterministic")}),notes:O.array(zE).default([])}),goe=O.object({timestamp:O.string().datetime(),event:O.literal("created"),evalRunId:O.string(),evalCaseId:O.string(),cardSlug:O.string(),patternId:vs,contract:O.string().nullable(),status:foe}),hoe=Object.freeze(["**/auth/**","**/billing/**","**/secrets/**","**/credentials*",".env",".env.*","pnpm-lock.yaml","package-lock.json","yarn.lock",".github/workflows/**","dist/**","build/**","node_modules/**",".git/**","**/.afk/config/**","**/.afk/state/**"]);var yoe={low:0,medium:1,high:2};function hWe(e,t){return yoe[e]>=yoe[t]?e:t}function boe(e){let t=e?.detector;return typeof t=="string"&&t.length>0?t:void 0}function Soe(e,t){let n=boe(e.detail),r=boe(t.detail);return n!==void 0&&r!==void 0&&n!==r?t.severity:hWe(e.severity,t.severity)}Ur();function Toe(e){let t=Ss();Cg(t)||woe(t,{recursive:!0});let n=Rg(e.slug),r=jE(e.slug),o=_d(n),i=SWe(o,e),s=o===void 0,a=i.evidence.length-(o?.evidence.length??0),l=s?"created":a>0?"updated":"merged-noop",c=Ag.parse(i);return mt(n,JSON.stringify(c,null,2),438),mt(r,_g(c),438),vWe({timestamp:kWe(),event:l,slug:c.slug,pattern:c.pattern,occurrenceCount:c.occurrenceCount,evidenceAdded:Math.max(0,a)}),{slug:c.slug,event:l,occurrenceCount:c.occurrenceCount,evidenceAdded:Math.max(0,a),jsonPath:n,markdownPath:r}}function _d(e){if(Cg(e))try{let t=yWe(e,"utf-8"),n=JSON.parse(t),r=Ag.safeParse(n);return r.success?r.data:void 0}catch{return}}function SWe(e,t){if(!e)return{schemaVersion:1,slug:t.slug,title:t.title,pattern:t.pattern,severity:t.severity,status:"open",firstSeen:t.observedAt,lastSeen:t.observedAt,occurrenceCount:t.evidence.length,evidence:t.evidence,detail:t.detail,notes:[]};if(e.slug!==t.slug)throw new Error(`card-writer: slug mismatch on merge (existing='${e.slug}', detection='${t.slug}')`);let n=wWe(e.evidence,t.evidence),r=TWe(e.firstSeen,t.observedAt),o=EWe(e.lastSeen,t.observedAt),i=Soe(e,t);return{schemaVersion:1,slug:e.slug,title:t.title,pattern:e.pattern,severity:i,status:e.status,firstSeen:r,lastSeen:o,occurrenceCount:n.length,evidence:n,detail:t.detail,notes:e.notes}}function wWe(e,t){let n=i=>`${i.sessionId}::${i.eventIndices[0]??"NA"}`,r=new Set(e.map(n)),o=[...e];for(let i of t){let s=n(i);r.has(s)||(r.add(s),o.push(i))}return o}function _g(e){let t=[];t.push(`# ${e.slug} \u2014 \`${e.severity}\` \u2014 \`${e.status}\``),t.push(""),t.push(e.title),t.push(""),t.push(`**Pattern:** \`${e.pattern}\` \xB7 **Occurrences:** ${e.occurrenceCount} \xB7 **First seen:** ${e.firstSeen} \xB7 **Last seen:** ${e.lastSeen}`),t.push(""),t.push("## Evidence"),t.push("");for(let n of e.evidence)t.push(`### Session \`${n.sessionId}\``),t.push(""),t.push(`- Trace: \`${n.tracePath}\``),t.push(`- Event seqs: ${n.eventIndices.join(", ")}`),n.annotation&&t.push(`- Note: ${n.annotation}`),t.push(""),t.push("```jsonl"),t.push(n.excerpt),t.push("```"),t.push("");if(t.push("## Detail"),t.push(""),t.push("```json"),t.push(JSON.stringify(e.detail,null,2)),t.push("```"),t.push(""),t.push("## Triage notes"),t.push(""),e.notes.length>0){for(let n of e.notes)t.push(`- _${n.at}_ \u2014 ${n.text}`);t.push("")}else t.push('_(none \u2014 add one with `afk improve cards triage <slug> --note "\u2026"`)_'),t.push("");return t.join(`
|
|
2173
2174
|
`)}function vWe(e){let t=doe.parse(e),n=Vre(),r=Ss();Cg(r)||woe(r,{recursive:!0});try{bWe(n,JSON.stringify(t)+`
|
|
2174
2175
|
`,{flag:"a"})}catch{}}function kWe(){return new Date().toISOString()}function TWe(e,t){return e<=t?e:t}function EWe(e,t){return e>=t?e:t}function Eoe(){let e=Ss();if(!Cg(e))return[];let t=[];for(let n of voe(e)){if(!n.endsWith(".json")||n.startsWith("."))continue;let r=_d(koe(e,n));r&&t.push({slug:r.slug,title:r.title,pattern:r.pattern,severity:r.severity,status:r.status,occurrenceCount:r.occurrenceCount,firstSeen:r.firstSeen,lastSeen:r.lastSeen})}return t.sort((n,r)=>n.lastSeen!==r.lastSeen?n.lastSeen<r.lastSeen?1:-1:n.slug<r.slug?-1:1),t}function Id(e){return _d(Rg(e))}function Roe(e){let t;for(let n of e.notes)(t===void 0||Date.parse(n.at)>Date.parse(t))&&(t=n.at);return t}function RWe(e){if(e.status!=="resolved"&&e.status!=="deferred")return!1;let t=Roe(e);if(t===void 0)return!1;let n=Date.parse(e.lastSeen),r=Date.parse(t);return Number.isNaN(n)||Number.isNaN(r)?!1:n>r}function xWe(e){let t=[];for(let n of e){if(!RWe(n))continue;let r=Roe(n);r!==void 0&&t.push({slug:n.slug,pattern:n.pattern,severity:n.severity,status:n.status,occurrenceCount:n.occurrenceCount,lastSeen:n.lastSeen,latestNoteAt:r})}return t.sort((n,r)=>n.lastSeen!==r.lastSeen?n.lastSeen<r.lastSeen?1:-1:n.slug<r.slug?-1:1),t}function xoe(){let e=Ss();if(!Cg(e))return[];let t=[];for(let n of voe(e)){if(!n.endsWith(".json")||n.startsWith("."))continue;let r=_d(koe(e,n));r&&t.push(r)}return xWe(t)}function Aoe(e){e.command("scan").description(`Run registered detectors against witness traces. Dry-run by default.
|
|
2175
2176
|
Some detectors are disabled by default (pass --include-disabled to enable): ${Cd().join(", ")}.`).option("--since <duration>","Only scan sessions newer than this (e.g. 7d, 24h, all)","7d").option("--write","Persist failure cards to disk. Without this flag, scan is dry-run.",!1).option("--min-repeats <n>",`repeated-tool-use threshold (default ${Zo})`,String(Zo)).option("--closure-min-occurrences <n>",`closure-anomaly threshold (default ${1})`,String(1)).option("--block-min-occurrences <n>",`subagent-block threshold (default ${pl})`,String(pl)).option("--read-denial-min-occurrences <n>",`subagent-read-denial threshold (default ${ml})`,String(ml)).option("--tool-failure-min-failures <n>",`tool-failure-density absolute count threshold (default ${fl})`,String(fl)).option("--tool-failure-min-rate <rate>",`tool-failure-density rate threshold, 0\u20131 (default ${gl})`,String(gl)).option("--only <names>",`Comma-separated detector names to run (any of: ${GE().join(", ")})`).option("--include-disabled",`Run detectors marked disabled-by-default (currently: ${Cd().join(", ")})`,!1).action(t=>{try{let n=Ig(t.minRepeats,"min-repeats",2),r=Ig(t.closureMinOccurrences,"closure-min-occurrences",1),o=Ig(t.blockMinOccurrences,"block-min-occurrences",1),i=Ig(t.readDenialMinOccurrences,"read-denial-min-occurrences",1),s=Ig(t.toolFailureMinFailures,"tool-failure-min-failures",1),a=AWe(t.toolFailureMinRate,"tool-failure-min-rate"),l;if(t.only){let w=t.only.split(",").map(E=>E.trim()).filter(E=>E.length>0),k=new Set(GE()),T=w.filter(E=>!k.has(E));T.length>0&&(console.error(`Unknown detector(s): ${T.join(", ")}. Known: ${GE().join(", ")}`),process.exit(2)),l=new Set(w)}let c;if(t.since&&t.since!=="all"){let w=noe(t.since);w===void 0&&(console.error(`Invalid --since: '${t.since}'. Use forms like '7d', '24h', '30m', '3600s', or 'all'.`),process.exit(2)),c=Date.now()-w}let u=roe({sinceMs:c}),d={minRepeats:n,closureAnomalyMinOccurrences:r,subagentBlockMinOccurrences:o,subagentReadDenialMinOccurrences:i,toolFailureMinFailures:s,toolFailureMinRate:a},p=loe(u.sessions,d,l,t.includeDisabled);console.log(`Scanned ${u.sessionsScanned} sessions`),u.sessionsSkippedOld>0&&console.log(` \u21B3 skipped ${u.sessionsSkippedOld} older than --since`),u.sessionsSkippedEmpty>0&&console.log(` \u21B3 skipped ${u.sessionsSkippedEmpty} with missing/unreadable trace.jsonl`),u.invalidLineCount>0&&console.log(` \u26A0 ${u.invalidLineCount} invalid JSONL lines skipped`);let f=Cd();!t.only&&!t.includeDisabled&&f.length>0&&console.log(`Skipped ${f.length} detectors (disabled by default \u2014 pass --only or --include-disabled): ${f.join(", ")}`);let g=new Map;for(let w of p)g.set(w.pattern,(g.get(w.pattern)??0)+1);console.log(`Detections: ${p.length}`);for(let[w,k]of g.entries())console.log(` \u21B3 ${w}: ${k}`);if(p.length===0){t.write&&console.log("No cards written.");return}for(let w of p)console.log(` \u2022 ${w.slug} [${w.severity}] ${w.pattern} evidence=${w.evidence.length}`);if(!t.write){console.log(""),console.log("(dry-run \u2014 pass --write to persist cards)");return}let h=0,b=0,S=0;for(let w of p){let k=Toe(w);k.event==="created"?h+=1:k.event==="updated"?b+=1:S+=1}console.log(""),console.log(`Wrote cards: ${h} created, ${b} updated, ${S} no-op merges.`)}catch(n){V(n)}})}function Ig(e,t,n){let r=Number.parseInt(e,10);return(!Number.isFinite(r)||r<n)&&(console.error(`Invalid --${t}: '${e}' (must be integer >= ${n})`),process.exit(2)),r}function AWe(e,t){let n=Number.parseFloat(e);return(!Number.isFinite(n)||n<=0||n>1)&&(console.error(`Invalid --${t}: '${e}' (must be number in (0, 1])`),process.exit(2)),n}import{existsSync as CWe,mkdirSync as _We}from"fs";import{dirname as IWe}from"path";Ur();var hl=class extends Error{constructor(n,r){super(r);this.code=n;this.name="TriageError"}code};function Coe(e,t){let n=Rg(e),r=jE(e),o=_d(n);if(!o)throw new hl("card-not-found",`No failure card found for slug '${e}'`);if(t.note!==void 0&&t.note.trim().length===0)throw new hl("invalid-note","triage note must be non-empty after trim");let i=t.note?.trim(),s=i!==void 0&&i.length>0,a=t.status!==void 0&&t.status!==o.status;if(!s&&!a)throw new hl("no-change","triage requires at least --note or --status to differ from current");let l=(t.now??(()=>new Date))().toISOString(),c=s?[...o.notes,{at:l,text:i}]:o.notes,u=a?t.status:o.status,d={...o,status:u,notes:c},p=Ag.parse(d);return PWe(n),mt(n,JSON.stringify(p,null,2),438),mt(r,_g(p),438),{slug:e,card:p,noteAdded:s,statusChanged:a?{from:o.status,to:u}:void 0,jsonPath:n,markdownPath:r}}function PWe(e){let t=IWe(e);CWe(t)||_We(t,{recursive:!0})}var GD=["open","deferred","resolved"];function MWe(e){let t=xoe();if(e.pattern&&(t=t.filter(o=>o.pattern===e.pattern)),e.severity&&(t=t.filter(o=>o.severity===e.severity)),e.status&&(t=t.filter(o=>o.status===e.status)),e.json){console.log(JSON.stringify(t,null,2));return}if(t.length===0){console.log("No regressed cards found (no resolved/deferred card has fired since its latest triage note).");return}let n="SLUG | PATTERN | SEV | STATUS | N | LAST SEEN | LATEST NOTE",r="-".repeat(n.length);console.log(`${t.length} regressed card(s): triaged, then fired again afterwards.`),console.log(n),console.log(r);for(let o of t)console.log([o.slug.padEnd(50).slice(0,50),o.pattern.padEnd(20),o.severity.padEnd(6),o.status.padEnd(9),String(o.occurrenceCount).padEnd(4),o.lastSeen.padEnd(24),o.latestNoteAt].join(" | "))}function _oe(e){let t=e.command("cards").description("Inspect and triage failure cards written by `afk improve scan`");t.command("list").description("List all failure cards, newest first").option("--pattern <name>","Filter by pattern name").option("--severity <level>","Filter by severity: low | medium | high").option("--status <state>","Filter by status: open | deferred | resolved").option("--regressed","Only show resolved/deferred cards that fired again after their latest triage note",!1).option("--json","Emit JSON instead of a table",!1).action(n=>{try{if(n.regressed){MWe(n);return}let r=Eoe();if(n.pattern&&(r=r.filter(s=>s.pattern===n.pattern)),n.severity&&(r=r.filter(s=>s.severity===n.severity)),n.status&&(r=r.filter(s=>s.status===n.status)),n.json){console.log(JSON.stringify(r,null,2));return}if(r.length===0){console.log("No failure cards found.");return}let o="SLUG | PATTERN | SEV | STATUS | N | LAST SEEN",i="-".repeat(o.length);console.log(o),console.log(i);for(let s of r)console.log([s.slug.padEnd(50).slice(0,50),s.pattern.padEnd(20),s.severity.padEnd(6),s.status.padEnd(9),String(s.occurrenceCount).padEnd(4),s.lastSeen].join(" | "))}catch(r){V(r)}}),t.command("show <slug>").description("Print a failure card by slug").option("--json","Emit raw JSON instead of rendered markdown",!1).action((n,r)=>{try{let o=Id(n);if(o||(console.error(`Card not found: ${n}`),process.exit(1)),r.json){console.log(JSON.stringify(o,null,2));return}console.log(_g(o))}catch(o){V(o)}}),t.command("triage <slug>").description("Append a human note and/or change status on a failure card").option("--note <text>","Note text to append (non-empty)").option("--status <state>",`New status (one of: ${GD.join(", ")})`).option("--json","Emit the resulting card as JSON",!1).action((n,r)=>{try{let o;r.status!==void 0&&(GD.includes(r.status)||(console.error(`Invalid --status: '${r.status}'. Must be one of: ${GD.join(", ")}`),process.exit(2)),o=r.status);let i=Coe(n,{...r.note!==void 0?{note:r.note}:{},...o!==void 0?{status:o}:{}});if(r.json){console.log(JSON.stringify(i.card,null,2));return}let s=[];i.noteAdded&&s.push("note appended"),i.statusChanged&&s.push(`status: ${i.statusChanged.from} \u2192 ${i.statusChanged.to}`),console.log(`Triaged ${n}: ${s.join(" \xB7 ")}`),console.log(` json: ${i.jsonPath}`),console.log(` md: ${i.markdownPath}`)}catch(o){o instanceof hl&&(console.error(`triage failed [${o.code}]: ${o.message}`),process.exit(o.code==="card-not-found"?1:2)),V(o)}})}var OWe={"repeated-tool-use":{rootCauseClass:"dispatcher-bug",hypothesis:e=>{let t=typeof e.detail.toolName=="string"?e.detail.toolName:"<unknown>",n=typeof e.detail.runLength=="number"?e.detail.runLength:"?";return`The '${t}' tool was dispatched ${n} times in a row with an identical input/output byte fingerprint. This is either (a) the model is stuck retrying the same call without responding to its result, (b) the tool's result shape is too uninformative for the model to make progress, or (c) a productive recursion that happens to share byte counts (rare; the fingerprint caveat is documented on the detector).`},fixSketch:e=>["## Candidate fixes (human picks)","",`**Option A \u2014 make the loop visible.** Surface a clear "no-progress" signal to the model when '${typeof e.detail.toolName=="string"?e.detail.toolName:"<the tool>"}' returns the same result N times in a row. Today the dispatcher just executes the call.`,"",`**Option B \u2014 improve the tool's result shape.** If the model can't distinguish "no results" from "same results," its result is information-poor. Inspect the tool's response and verify it carries enough signal for the model to change its query.`,"","**Option C \u2014 confirm productive recursion.** Open the source trace at the seq values listed in the evidence and inspect the model's reasoning between repeats. If each call's args genuinely differ (and the byte-count collision is the issue), no code change is needed; tune the detector instead.","","_Option C first \u2014 the byte-fingerprint detector has a documented collision caveat. Confirm there is a real loop before changing dispatcher behavior._"].join(`
|
|
@@ -2188,7 +2189,7 @@ Re-run with --force to add another, --no-write to preview, or inspect with 'afk
|
|
|
2188
2189
|
`)}function QD(){let e=ws();if(!rR(e))return[];let t=[];for(let n of gKe(e)){if(!n.endsWith(".json")||n.startsWith(".")||n.endsWith(".fixture.jsonl"))continue;let r=oie(eie(e,n));r&&t.push({evalCaseId:r.evalCaseId,cardSlug:r.cardSlug,proposalId:r.proposalId,title:r.title,kind:r.kind,status:r.status,patternId:r.assertion.patternId,createdAt:r.createdAt,sliceSha256:r.replay.sliceSha256})}return t.sort((n,r)=>n.createdAt!==r.createdAt?n.createdAt<r.createdAt?1:-1:n.evalCaseId<r.evalCaseId?-1:1),t}function Og(e){return oie(UD(e))}function iR(e){return QD().filter(t=>t.cardSlug===e).map(t=>Og(t.evalCaseId)).filter(t=>t!==void 0)}function oie(e){if(rR(e))try{let t=Qoe(e,"utf-8"),n=JSON.parse(t),r=VE.safeParse(n);return r.success?r.data:void 0}catch{return}}function kKe(e){let t=moe.parse(e),n=Xre(),r=ws();rR(r)||Xoe(r,{recursive:!0});try{Zoe(n,JSON.stringify(t)+`
|
|
2189
2190
|
`,{flag:"a"})}catch{}}function TKe(e,t){let n=`${e}.tmp-${process.pid}-${Date.now()}`;Zoe(n,t),hKe(n,e)}var Dg=vs.options;function EKe(e,t){return e.find(n=>n.replay.evidenceRowIndex===t)}var ZD=["draft","approved","rejected","superseded"];function iie(e){e.command("eval-gen <cardSlug>").description("Generate a replay-mode eval-case from a failure card. Slices a byte-identical fixture from the source witness trace.").option("--proposal <id>","Back-reference to a proposal (validated to exist). Sprint 3 does NOT mutate the proposal artifact.").option("--evidence-row <index>","0-based index into the card's evidence array. Default: the most recent row (length - 1).").option("--id <override>","Override the auto-generated eval-case id").option("--json","Emit the eval-case JSON to stdout (still writes to disk)",!1).option("--no-write","Render the eval-case without persisting to disk (preview mode). Still reads the source trace.").option("--force","Write even if this card already has an eval-case (default: refuse)",!1).action((t,n)=>{try{let r=Id(t);if(r||(console.error(`Card not found: ${t}`),process.exit(1)),n.proposal!==void 0){let c=Pg(n.proposal);c||(console.error(`Proposal not found: ${n.proposal}`),process.exit(1)),c.cardSlug!==t&&(console.error(`Proposal ${n.proposal} targets card '${c.cardSlug}', not '${t}'.`),process.exit(2))}let o=r.evidence.length-1;if(n.evidenceRow!==void 0){let c=Number.parseInt(n.evidenceRow,10);(!Number.isFinite(c)||c<0)&&(console.error(`Invalid --evidence-row: '${n.evidenceRow}' (must be non-negative integer)`),process.exit(2)),o=c}if(n.write!==!1&&!n.force){let c=EKe(iR(t),o);c&&(console.error(`Card '${t}' already has an eval-case for evidence row ${o}:
|
|
2190
2191
|
${c.evalCaseId}
|
|
2191
|
-
Re-run with --force to regenerate that row, target a different row with --evidence-row <n>, or --no-write to preview. Run the existing one: 'afk improve eval-run ${c.evalCaseId}'.`),process.exit(1))}let i=n.id??tie(t),{evalCase:s,sliceBytes:a}=nie(r,{evalCaseId:i,evidenceRowIndex:o,proposalId:n.proposal??null});if(n.write===!1){n.json?console.log(JSON.stringify(s,null,2)):(console.log("(preview \u2014 not persisted; remove --no-write to save)"),console.log(""),console.log(oR(s)),console.log(""),console.log(`Fixture would be ${a.length} bytes, ${s.replay.sliceLineCount} lines.`));return}let l=rie(s,a);if(n.json){console.log(JSON.stringify({...s,_paths:l},null,2));return}console.log(`Wrote eval-case: ${l.evalCaseId}`),console.log(` json: ${l.jsonPath}`),console.log(` fixture: ${l.fixturePath}`),console.log(` md: ${l.markdownPath}`),console.log(` pattern: ${s.assertion.patternId} \xB7 slice: lines ${s.replay.sliceLineRange.startLine}\u2013${s.replay.sliceLineRange.endLine} (${s.replay.sliceLineCount} lines) \xB7 sha256 ${s.replay.sliceSha256.slice(0,12)}\u2026`),s.proposalId&&console.log(` proposal: ${s.proposalId} (back-reference only \u2014 Sprint 3 does not back-fill validationPlan.evalCases)`)}catch(r){if(r instanceof Qn){console.error(`eval-gen failed [${r.code}]: ${r.message}`);let o=r.code==="evidence-row-out-of-range"||r.code==="unsupported-window"?2:1;process.exit(o)}V(r)}})}function sie(e){let t=e.command("eval-cases").description("Inspect replay-mode eval-cases on disk");t.command("list").description("List all eval-cases, newest first").option("--card <slug>","Filter by card slug").option("--pattern <name>",`Filter by pattern (one of: ${Dg.join(", ")})`).option("--status <state>",`Filter by status (one of: ${ZD.join(", ")})`).option("--json","Emit JSON instead of a table",!1).action(n=>{try{n.pattern&&!Dg.includes(n.pattern)&&(console.error(`Invalid --pattern: '${n.pattern}'. Must be one of: ${Dg.join(", ")}`),process.exit(2)),n.status&&!ZD.includes(n.status)&&(console.error(`Invalid --status: '${n.status}'. Must be one of: ${ZD.join(", ")}`),process.exit(2));let r=QD();if(n.card&&(r=r.filter(s=>s.cardSlug===n.card)),n.pattern&&(r=r.filter(s=>s.patternId===n.pattern)),n.status&&(r=r.filter(s=>s.status===n.status)),n.json){console.log(JSON.stringify(r,null,2));return}if(r.length===0){console.log("No eval-cases found.");return}let o="EVAL CASE ID | CARD | PATTERN | STATUS | CREATED",i="-".repeat(o.length);console.log(o),console.log(i);for(let s of r)console.log([s.evalCaseId.padEnd(70).slice(0,70),s.cardSlug.padEnd(44).slice(0,44),s.patternId.padEnd(20),s.status.padEnd(9),s.createdAt].join(" | "))}catch(r){V(r)}}),t.command("show <id>").description("Print an eval-case by id").option("--json","Emit raw JSON instead of rendered markdown",!1).action((n,r)=>{try{let o=Og(n);if(o||(console.error(`Eval-case not found: ${n}`),process.exit(1)),r.json){console.log(JSON.stringify(o,null,2));return}console.log(oR(o))}catch(o){V(o)}})}import{randomBytes as AKe}from"crypto";import{existsSync as t$,mkdirSync as lie,readFileSync as CKe,readdirSync as
|
|
2192
|
+
Re-run with --force to regenerate that row, target a different row with --evidence-row <n>, or --no-write to preview. Run the existing one: 'afk improve eval-run ${c.evalCaseId}'.`),process.exit(1))}let i=n.id??tie(t),{evalCase:s,sliceBytes:a}=nie(r,{evalCaseId:i,evidenceRowIndex:o,proposalId:n.proposal??null});if(n.write===!1){n.json?console.log(JSON.stringify(s,null,2)):(console.log("(preview \u2014 not persisted; remove --no-write to save)"),console.log(""),console.log(oR(s)),console.log(""),console.log(`Fixture would be ${a.length} bytes, ${s.replay.sliceLineCount} lines.`));return}let l=rie(s,a);if(n.json){console.log(JSON.stringify({...s,_paths:l},null,2));return}console.log(`Wrote eval-case: ${l.evalCaseId}`),console.log(` json: ${l.jsonPath}`),console.log(` fixture: ${l.fixturePath}`),console.log(` md: ${l.markdownPath}`),console.log(` pattern: ${s.assertion.patternId} \xB7 slice: lines ${s.replay.sliceLineRange.startLine}\u2013${s.replay.sliceLineRange.endLine} (${s.replay.sliceLineCount} lines) \xB7 sha256 ${s.replay.sliceSha256.slice(0,12)}\u2026`),s.proposalId&&console.log(` proposal: ${s.proposalId} (back-reference only \u2014 Sprint 3 does not back-fill validationPlan.evalCases)`)}catch(r){if(r instanceof Qn){console.error(`eval-gen failed [${r.code}]: ${r.message}`);let o=r.code==="evidence-row-out-of-range"||r.code==="unsupported-window"?2:1;process.exit(o)}V(r)}})}function sie(e){let t=e.command("eval-cases").description("Inspect replay-mode eval-cases on disk");t.command("list").description("List all eval-cases, newest first").option("--card <slug>","Filter by card slug").option("--pattern <name>",`Filter by pattern (one of: ${Dg.join(", ")})`).option("--status <state>",`Filter by status (one of: ${ZD.join(", ")})`).option("--json","Emit JSON instead of a table",!1).action(n=>{try{n.pattern&&!Dg.includes(n.pattern)&&(console.error(`Invalid --pattern: '${n.pattern}'. Must be one of: ${Dg.join(", ")}`),process.exit(2)),n.status&&!ZD.includes(n.status)&&(console.error(`Invalid --status: '${n.status}'. Must be one of: ${ZD.join(", ")}`),process.exit(2));let r=QD();if(n.card&&(r=r.filter(s=>s.cardSlug===n.card)),n.pattern&&(r=r.filter(s=>s.patternId===n.pattern)),n.status&&(r=r.filter(s=>s.status===n.status)),n.json){console.log(JSON.stringify(r,null,2));return}if(r.length===0){console.log("No eval-cases found.");return}let o="EVAL CASE ID | CARD | PATTERN | STATUS | CREATED",i="-".repeat(o.length);console.log(o),console.log(i);for(let s of r)console.log([s.evalCaseId.padEnd(70).slice(0,70),s.cardSlug.padEnd(44).slice(0,44),s.patternId.padEnd(20),s.status.padEnd(9),s.createdAt].join(" | "))}catch(r){V(r)}}),t.command("show <id>").description("Print an eval-case by id").option("--json","Emit raw JSON instead of rendered markdown",!1).action((n,r)=>{try{let o=Og(n);if(o||(console.error(`Eval-case not found: ${n}`),process.exit(1)),r.json){console.log(JSON.stringify(o,null,2));return}console.log(oR(o))}catch(o){V(o)}})}import{randomBytes as AKe}from"crypto";import{existsSync as t$,mkdirSync as lie,readFileSync as CKe,readdirSync as j6t,writeFileSync as _Ke}from"fs";import{join as IKe}from"path";H();Ur();var RKe={"repeated-tool-use":"repeated-tool-use@v1","closure-anomaly":"closure-anomaly@v2","subagent-block":"subagent-block@v1","tool-failure-density":"tool-failure-density@v2","subagent-read-denial":"subagent-read-denial@v2"},xKe="detector-version-current";function aie(e,t){let n=e.assertion.patternId,r=RKe[n];if(r===void 0)return null;let o=e.assertion.detectorVersion,i=o===r,s=Ce({name:xKe,description:"The detector version the eval-case was generated under matches the live detector version",pass:i,expected:r,actual:o}),a=i?null:{at:t,text:`Eval-case is stale: generated under detector '${o}' but the live detector is now '${r}'. Re-run \`afk improve eval-gen\` against this card to produce a fresh eval-case before trusting this eval-run's verdict.`};return{check:s,note:a}}var PKe="eval-run@v1";function cie(e,t={}){let n=(t.now??(()=>new Date))(),r=MKe(n),o=t.randomSuffix!==void 0?t.randomSuffix():AKe(3).toString("hex");if(!/^[0-9a-f]{6}$/.test(o))throw new Error(`generateEvalRunId: randomSuffix must be 6 lowercase hex chars (got '${o}')`);return`${e}-run-${r}-${o}`}function MKe(e){let t=e.getUTCFullYear(),n=String(e.getUTCMonth()+1).padStart(2,"0"),r=String(e.getUTCDate()).padStart(2,"0");return`${t}${n}${r}`}async function uie(e,t){let r=(t.now??(()=>new Date))().toISOString(),o=t.clockMs??(()=>Date.now()),i=o(),s=[],a=[],l=[],c=DKe(e,t);s.push(c.check),c.evidence&&a.push(c.evidence);let u=aie(e,r);u!==null&&(s.push(u.check),u.note!==null&&l.push(u.note));let d=ZE(e.assertion.patternId),p=null,f=!1;if(!d)l.push({at:r,text:`No deterministic validation contract is registered for pattern '${e.assertion.patternId}'. Supported: ${Woe().join(", ")}.`});else{p=d.id;try{let E=await d.run();s.push(...E.checks),a.push(...E.evidence)}catch(E){f=!0;let R=E instanceof Error?E.message:String(E);l.push({at:r,text:`Contract '${d.id}' threw during execution: ${On(R)}`})}}let g=nR(e.assertion.patternId),h=!1;if(g&&c.bytes!==void 0&&c.check.status==="pass")try{let E=await g.run(e,c.bytes,{...t.driveLoop?{driveLoop:t.driveLoop}:{}});s.push(...E.checks),a.push(...E.evidence),h=!0}catch(E){f=!0;let R=E instanceof Error?E.message:String(E);l.push({at:r,text:`Fixture-replay for '${e.assertion.patternId}' threw during execution: ${On(R)}`})}let b=s.some(E=>JD(E.name)),S=g!==void 0&&c.check.status==="pass"&&h&&!b,w=OKe({hasContract:d!==void 0||h,contractThrew:f,checks:s,replayInconclusive:S}),k=Math.max(0,Math.round(o()-i)),T={schemaVersion:1,evalRunId:t.evalRunId,evalCaseId:e.evalCaseId,cardSlug:e.cardSlug,patternId:e.assertion.patternId,contract:p,status:w,createdAt:r,durationMs:k,checks:s,evidence:a,runner:{version:PKe,mode:"deterministic"},notes:l};return KD.parse(T),T}function OKe(e){return e.contractThrew?"error":e.checks.some(t=>t.status==="fail")?"fail":!e.hasContract||e.replayInconclusive===!0?"unsupported":"pass"}function DKe(e,t){let r=(t.resolveFixtureAbsPath??(u=>IKe(ke(),u)))(e.replay.fixturePath),o=e.replay.sliceSha256,i="fixture-integrity",s="Committed replay fixture exists and matches the eval-case's recorded sha256";if(!t$(r))return{check:Ce({name:i,description:s,pass:!1,expected:`fixture present at ${e.replay.fixturePath}`,actual:"fixture file not found on disk"})};let a;try{a=CKe(r)}catch(u){let d=u instanceof Error?u.message:String(u);return{check:Ce({name:i,description:s,pass:!1,expected:`readable fixture (${o})`,actual:`read error: ${On(d)}`})}}let l=XE(a),c=l===o;return{check:Ce({name:i,description:s,pass:c,expected:o,actual:l}),evidence:{kind:"fixture",ref:e.replay.fixturePath,detail:`sha256 ${c?"match":"MISMATCH"} (${e.replay.sliceLineCount} lines)`},bytes:a}}function die(e){let t=KD.parse(e),n=Rd();t$(n)||lie(n,{recursive:!0});let r=eoe(t.evalRunId),o=toe(t.evalRunId);return mt(r,JSON.stringify(t,null,2),438),mt(o,n$(t),438),LKe({timestamp:new Date().toISOString(),event:"created",evalRunId:t.evalRunId,evalCaseId:t.evalCaseId,cardSlug:t.cardSlug,patternId:t.patternId,contract:t.contract,status:t.status}),{evalRunId:t.evalRunId,jsonPath:r,markdownPath:o}}var $Ke={pass:"\u2713 PASS",fail:"\u2717 FAIL",unsupported:"\u2013 UNSUPPORTED",error:"\u26A0 ERROR"},FKe={pass:"\u2713",fail:"\u2717",skipped:"\u2013"};function n$(e){let t=e.checks.filter(s=>s.status==="pass").length,n=e.checks.filter(s=>s.status==="fail").length,r=e.checks.filter(s=>s.status==="skipped").length,o=[];if(o.push(`# ${e.evalRunId} \u2014 \`eval-run\` \u2014 \`${e.status}\``),o.push(""),o.push(`Deterministic guardrail validation of eval-case \`${e.evalCaseId}\`.`),o.push(""),o.push(`**Eval-case:** \`${e.evalCaseId}\` \xB7 **Card:** \`${e.cardSlug}\` \xB7 **Pattern:** \`${e.patternId}\` \xB7 **Contract:** ${e.contract?`\`${e.contract}\``:"_(none)_"} \xB7 **Created:** ${e.createdAt} \xB7 **Duration:** ${e.durationMs}ms`),o.push(""),e.checks.some(s=>JD(s.name))?(o.push("> **What this is.** A deterministic validation of pattern"),o.push(`> \`${e.patternId}\`. It re-drove the failure recorded in the committed`),o.push("> fixture through the LIVE guardrail and asserts the recorded failure is"),o.push("> neutralised at the recorded magnitude \u2014 proving the behaviour is fixed,"),o.push("> not merely that a guardrail exists. It re-drives the recorded failure"),o.push("> conditions; it does NOT re-execute the original tool/LLM.")):(o.push("> **What this is.** A narrow, deterministic check that the guardrail"),o.push(`> mapped to pattern \`${e.patternId}\` is present and behaving. It`),o.push("> validates the guardrail the pattern maps to; the eval-case's own"),o.push("> `pattern-absent` assertion remains the full contract.")),o.push(""),o.push(`## Result: ${$Ke[e.status]} (${t}/${e.checks.length} checks passed${n?`, ${n} failed`:""}${r?`, ${r} skipped`:""})`),o.push(""),o.push("## Checks"),o.push(""),e.checks.length===0)o.push("_(none)_");else{o.push("| Check | Status | Expected | Actual |"),o.push("|---|---|---|---|");for(let s of e.checks)o.push(`| ${e$(s.name)} | ${FKe[s.status]} ${s.status} | ${e$(s.expected)} | ${e$(s.actual)} |`)}if(o.push(""),o.push("## Evidence"),o.push(""),e.evidence.length===0)o.push("_(none)_");else for(let s of e.evidence)o.push(`- **[${s.kind}]** \`${s.ref}\` \u2014 ${s.detail}`);if(o.push(""),o.push("## Runner"),o.push(""),o.push(`- **Version:** \`${e.runner.version}\` \xB7 **Mode:** \`${e.runner.mode}\``),o.push(""),o.push("## Notes"),o.push(""),e.notes.length===0)o.push("_(none)_");else for(let s of e.notes)o.push(`- _${s.at}_ \u2014 ${s.text}`);return o.push(""),o.join(`
|
|
2192
2193
|
`)}function e$(e){return e.replace(/\|/g,"\\|").replace(/\n/g," ")}function LKe(e){let t=goe.parse(e),n=Rd();t$(n)||lie(n,{recursive:!0});try{_Ke(Zre(),JSON.stringify(t)+`
|
|
2193
2194
|
`,{flag:"a"})}catch{}}function pie(e){e.command("eval-run <evalCaseIdOrCardSlug>").description(`Run the smallest deterministic validation contract for an eval-case's pattern.
|
|
2194
2195
|
Validates guardrails (no LLM, no patch/apply). Known contracts: ${Koe().join(", ")}.`).option("--id <override>","Override the auto-generated eval-run id").option("--json","Emit the eval-run JSON to stdout (still writes to disk)",!1).option("--no-write","Run and render without persisting to disk (preview mode)").action(async(t,n)=>{try{let r=Og(t);r||(r=iR(t)[0]),r||(console.error(`No eval-case found for '${t}'. Pass an eval-case id (see 'afk improve eval-cases list') or a card slug with at least one generated eval-case ('afk improve eval-gen <slug>').`),process.exit(1));let o=n.id??cie(r.cardSlug),i=await uie(r,{evalRunId:o});if(n.write===!1){n.json?console.log(JSON.stringify(i,null,2)):(console.log("(preview \u2014 not persisted; remove --no-write to save)"),console.log(""),console.log(n$(i))),sR(i.status);return}let s=die(i);if(n.json){console.log(JSON.stringify({...i,_paths:s},null,2)),sR(i.status);return}NKe(i,s.jsonPath,s.markdownPath),sR(i.status)}catch(r){V(r)}})}function NKe(e,t,n){let r=e.checks.filter(s=>s.status==="pass").length,o=e.checks.filter(s=>s.status==="fail").length,i=e.checks.filter(s=>s.status==="skipped").length;console.log(`Ran eval-run: ${e.evalRunId} [${e.status.toUpperCase()}]`),console.log(` json: ${t}`),console.log(` md: ${n}`),console.log(` eval-case: ${e.evalCaseId} \xB7 card: ${e.cardSlug} \xB7 pattern: ${e.patternId} \xB7 contract: ${e.contract??"(none)"}`),console.log(` checks: ${r} passed${o?`, ${o} failed`:""}${i?`, ${i} skipped`:""} (${e.checks.length} total)`);for(let s of e.checks){let a=s.status==="pass"?"\u2713":s.status==="fail"?"\u2717":"\u2013";console.log(` ${a} ${s.name}`)}for(let s of e.notes)console.log(` note: ${s.text}`)}function sR(e){e==="fail"||e==="error"?process.exitCode=1:e==="unsupported"&&(process.exitCode=3)}function mie(e){let t=e.command("improve").description("Self-improvement pipeline: scan traces, triage cards, draft proposals, generate replay eval-cases.");Aoe(t),_oe(t),Loe(t),Noe(t),iie(t),sie(t),pie(t)}Zx();H();ue();import BKe from"better-sqlite3";import{chmodSync as UKe,existsSync as jKe,mkdirSync as HKe,readdirSync as WKe,readFileSync as KKe}from"fs";import{join as aR,basename as GKe}from"path";var fie="index.db",qKe="transcripts-index",r$=1,zKe=`
|