agent-afk 3.60.1 → 3.60.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.
Files changed (2) hide show
  1. package/dist/cli.mjs +1 -1
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -2215,7 +2215,7 @@ _ended: ${new Date().toISOString()}_
2215
2215
  `))!==-1;){let u=n.slice(0,c);n=n.slice(c+1),this.opts.writeLine(u)}},s={command:t,mode:"foreground",onChunk:c=>{r||(n+=c.toString("utf8"),o())}},i=this.opts.getCwd();i!==void 0&&(s.cwd=i);let{job:a,handle:l}=this.registry.start(s);this.activeFgJobId=a.id;try{let c=await l.promise;r=!0,n.length>0&&(this.opts.writeLine(n),n=""),this.opts.writeLine(G1(a,c)),this.queueInjection({command:t,mode:"foreground",result:c})}finally{this.activeFgJobId=null}}startBackground(t){let n={command:t,mode:"background"},r=this.opts.getCwd();r!==void 0&&(n.cwd=r);let{job:o}=this.registry.start(n);this.opts.writeLine(p.dim(` [${o.id}] background: `)+t)}queueInjection(t){this.pendingInjections.push(t),this.pendingInjections.length>e.MAX_PENDING_INJECTIONS&&this.pendingInjections.shift()}};function wc(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function mE(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async g=>{je()&&(o=el(g)),await Gl(e.session.current),je()&&(s=iT())}).catch(()=>{});let i=await VT(),a=new hc({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d,m,f=!1;try{await a.armCompositor({promptFn:()=>wc(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let S=e.slashCtx;S.stats.planMode&&S.stats.pendingPlanExit?(S.stats.pendingPlanExit=!1,At(S,!1,{closureSummarySkipped:!0}).catch(()=>{})):At(S).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{}});let g=a.getCompositor();Ft.install(Va({readLine:S=>a.readLine({promptFn:()=>S}).then(x=>x.text),writer:{line:(S="")=>{let x=a.getCompositor();x?x.commitAbove(S):process.stdout.write(S+`
2216
2216
  `)}},pendingCount:()=>Ft.pendingCount(),...g?{pickFromList:S=>eE(g,S),readTextOverlay:S=>tE(g,S)}:{}})),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor();let h=a.getCompositor();if(h){let S=x=>h.commitAbove(x);e.completionWriter.fn=S,e.completionWriter.idleFn=S}e.slashCtx.setSoftStopHandler=S=>a.setSoftStopHandler(S),e.inputSurfaceRef&&(e.inputSurfaceRef.current=a),c=iE();let b=aE();e.clearVerdictLedger=()=>b.reset(),u=new il,ZS(u),ak(u),uk(u),lk(e.backgroundRegistry),d=new yc(u,e.backgroundRegistry),d.setRowCountChangeHandler(S=>{e.statusLine.setExtraRows(S)}),d.start();let y=50,w=[];for(u.on("complete",S=>{w.length>=y&&w.shift(),w.push(S)}),m=new bc({writeLine:S=>e.replRenderer.writeLine(S),getCwd:()=>e.stats.cwd}),sk(m),n.tryAbortShellForeground=()=>m.abortActiveForeground();;){if(o&&(e.replRenderer.writeLine(o),e.replRenderer.writeLine(""),o=null),s.length>0){for(let T of s)e.replRenderer.writeLine(T);e.replRenderer.writeLine(""),s=[]}for(;w.length>0;){let T=w.shift(),_=T.status==="succeeded"?"\u2713":"\u2717",R=[];if(T.resultText){let j=T.resultText.trim().split(`
2217
2217
  `)[0]?.slice(0,80)??"";j&&R.push(j)}T.error&&R.push(T.error.message);let D=[T.stats.toolUses>0?`${T.stats.toolUses} tools`:"",T.stats.tokens>0?`${Math.round(T.stats.tokens/1e3)}k tok`:"",T.stats.durationMs>0?`${Math.round(T.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");D&&R.push(D),e.replRenderer.writeLine(Tn({kind:T.status==="succeeded"?"checkpoint":"diagnosis",title:`${_} ${T.id} ${T.label}`,body:R})),e.replRenderer.writeLine("")}let S=m.drainNotifications();for(let{job:T,result:_}of S){let R=_.errorReason===void 0?"\u2713":"\u2717",D=_.errorReason==="abort"?"killed":_.errorReason==="timeout"?"timed out":_.errorReason==="signal-killed"?"killed by signal":`exit ${_.exitCode??0}`,j=Math.max(0,Math.round(_.durationMs/100)/10);e.replRenderer.writeLine(p.dim(` ${R} [${T.id}] ${D} \xB7 ${j}s \xB7 `)+T.command)}let x=c.renderIfChanged(e.stats.sessionId);if(x.length>0){for(let T of x)e.replRenderer.writeLine(T);e.replRenderer.writeLine("")}let v=b.render();v&&e.replRenderer.writeLine(v);let A,P;if(l!==void 0){let T=l;l=void 0;let _=wc(e.stats.model,e.stats.planMode),R=mr({buffer:T.text,promptText:_,isTTY:!!process.stdout.isTTY,attachmentSummary:Ao([...T.attachments])});e.replRenderer.writeLine(R),A=T.text.trim(),P=T.attachments}else{let T=await a.readLine({promptFn:()=>wc(e.stats.model,e.stats.planMode),onSigint:r,onShiftTab:()=>{let _=e.slashCtx;_.stats.planMode&&_.stats.pendingPlanExit?(_.stats.pendingPlanExit=!1,At(_,!1,{closureSummarySkipped:!0}).catch(()=>{})):At(_).catch(()=>{}),e.statusLine.rearm()}});A=T.text.trim(),P=T.attachments}if(!A&&P.length===0)continue;if(A.startsWith("!")){let T=/^(0|false|off|no)$/i.test(E.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!T&&(f||(f=!0,e.replRenderer.writeLine(p.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await m.dispatch(A))){e.statusLine.rearm();continue}}let L=!1;if(A.startsWith("/")){let T=await bS(A,e.slashCtx,P);if(T.handled){if(T.result==="exit"){e.rl.close();return}if((A==="/clear"||A.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),b.reset()),T.result!==null&&typeof T.result=="object"&&"kind"in T.result&&T.result.kind==="submit"){l={text:T.result.message,attachments:P??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}L=!0}i.push(A);let I=A;if(L){let T=Qd(A);if(T){let _=T.name.replace(/^\//,"").split(":").pop()??"";if(_&&Xp(_)){let R={skillName:_,rawArgs:T.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},D=e.session.current.sessionId,j=vr(D),G=Date.now();J(`[afk trace] preflight.start commandName=${_}`);let $=!1,N=await kr(R,{cwd:e.stats.cwd??process.cwd(),artifactDir:j},B=>{je()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${_}) failed: `)+(B instanceof Error?B.message:String(B)))});$=N!==null,J(`[afk trace] preflight.end commandName=${_} durationMs=${Date.now()-G} success=${$}`),I=em(N?.manifestBlock,A)}}}let M=m.drainInjections();M.length>0&&(I=M+I);let C;if(e.firstTurnHook&&e.stats.totalTurns===0){let T=e.firstTurnHook;e.firstTurnHook=void 0,C=Promise.resolve().then(()=>T(A)).catch(_=>{e.completionWriter.fn(p.warning("\u26A0 ")+"first-turn hook failed: "+(_ instanceof Error?_.message:String(_)))})}await sE({text:I,attachments:P},e.session.current,e.stats,{setInFlight(T){n.turnInFlight=T},async onTurnComplete(T,_){await t.appendTurn(T,_)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await MS(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:T=>b.push(T),setActiveCompositor:T=>{n.activeCompositor=T},setInterruptNotifier:T=>{n.notifyInterrupting=T},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:T=>a.setBackgroundHandler(T),setSoftStopHandler:T=>a.setSoftStopHandler(T),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(pr(e.stats,e.contextSampler))}},e.options.thinkingUi,e.completionWriter,u,a.toRunTurnRefs(wc(e.stats.model,e.stats.planMode))),C!==void 0&&await C}}finally{if(u!==void 0)for(let h of u.running())u.cancel(h.id);n.tryAbortShellForeground=null,m?.drainOnExit(),d?.stop(),c?.dispose();let g=h=>console.log(h);e.completionWriter.fn=g,e.completionWriter.idleFn=g,await a.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}import{execFile as z1}from"node:child_process";import{dirname as J1,isAbsolute as V1,resolve as Y1}from"node:path";import{promisify as X1}from"node:util";var fE=X1(z1),Z1=3e3,Q1=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function eW(){let t=(await fE("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=V1(t)?t:Y1(process.cwd(),t);return J1(n)}async function gE(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await eW()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),Z1)});try{let o=Gt({execFile:fE,repoRoot:t,dryRun:!1,scope:"interactive",bypassSoftLaunch:!0}),s=await Promise.race([o,r]);if(s==="timeout")return{ran:!1,removedCount:0,skippedReason:"timeout"};let i=s;return i.warnings.some(c=>c.toLowerCase().includes("contested"))?{ran:!1,removedCount:0,skippedReason:"lock-contested"}:{ran:!0,removedCount:i.candidates.filter(c=>Q1.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}import{promises as tW}from"node:fs";import{dirname as nW,join as rW}from"node:path";import{randomBytes as oW}from"node:crypto";var sW=["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(`
2218
- `),hE=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Em=30,iW=1024,aW=8e3,lW="haiku";async function cW(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=mW(n,iW),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??aW),i=t.signal?fW([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await ic({token:t.token,model:t.model??lW,system:sW,user:r,maxTokens:32,signal:i})}catch(d){let m=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(s)}let l=uW(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=nW(t.worktreePath);return await dW(l,c)}function uW(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(hE.test(t)&&t.length<=Em)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(s=>s.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let s=1;s<r.length;s++){let i=`${o}-${r[s]}`;if(i.length>Em)break;o=i}return hE.test(o)?o:null}async function dW(e,t){if(!await pW(rW(t,e)))return e;let n=oW(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Em-5)}-${n}`}async function pW(e){try{return await tW.access(e),!0}catch{return!1}}function mW(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 fW(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 bE(e){let t,n,r=await cW(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:e.handle.path,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(i,a)=>{t=i,n=a}});if(r===null)return{status:"skipped",reason:t??"unknown",...n!==void 0?{detail:n}:{}};let s=await(e.renameFn??xb)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),yE(s.newPath),{status:"renamed",oldPath:s.oldPath,newPath:s.newPath,oldBranch:s.oldBranch,newBranch:s.newBranch}):(s.partial==="branch"&&(e.session&&e.session.setCwd(e.handle.path),yE(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function yE(e){try{process.chdir(e)}catch{}}W();import{spawn as wE}from"child_process";import{existsSync as wW,mkdirSync as SW,readFileSync as SE,unlinkSync as kW,writeFileSync as vW}from"fs";import{get as TW}from"https";import{join as kE}from"path";import{readFileSync as gW}from"fs";import{dirname as hW,join as yW}from"path";import{fileURLToPath as bW}from"url";function gn(){try{return"3.60.1"}catch{}try{let e=hW(bW(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(gW(yW(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}K();var EW=64*1024,xW=1440*60*1e3,RW="update-check.json",AW="pending-update.json";function vE(){return kE(Ri(),RW)}function xm(){return kE(Ri(),AW)}function TE(){let e=Ri();wW(e)||SW(e,{recursive:!0})}function _W(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number),o=Math.max(n.length,r.length);for(let s=0;s<o;s++){let i=n[s]??0,a=r[s]??0;if(a>i)return!0;if(a<i)return!1}return!1}function CW(){try{let e=SE(vE(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function IW(){try{TE();let e=`
2218
+ `),hE=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Em=30,iW=1024,aW=8e3,lW="haiku";async function cW(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=mW(n,iW),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??aW),i=t.signal?fW([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await ic({token:t.token,model:t.model??lW,system:sW,user:r,maxTokens:32,signal:i})}catch(d){let m=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(s)}let l=uW(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=nW(t.worktreePath);return await dW(l,c)}function uW(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(hE.test(t)&&t.length<=Em)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(s=>s.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let s=1;s<r.length;s++){let i=`${o}-${r[s]}`;if(i.length>Em)break;o=i}return hE.test(o)?o:null}async function dW(e,t){if(!await pW(rW(t,e)))return e;let n=oW(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Em-5)}-${n}`}async function pW(e){try{return await tW.access(e),!0}catch{return!1}}function mW(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 fW(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 bE(e){let t,n,r=await cW(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:e.handle.path,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(i,a)=>{t=i,n=a}});if(r===null)return{status:"skipped",reason:t??"unknown",...n!==void 0?{detail:n}:{}};let s=await(e.renameFn??xb)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),yE(s.newPath),{status:"renamed",oldPath:s.oldPath,newPath:s.newPath,oldBranch:s.oldBranch,newBranch:s.newBranch}):(s.partial==="branch"&&(e.session&&e.session.setCwd(e.handle.path),yE(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function yE(e){try{process.chdir(e)}catch{}}W();import{spawn as wE}from"child_process";import{existsSync as wW,mkdirSync as SW,readFileSync as SE,unlinkSync as kW,writeFileSync as vW}from"fs";import{get as TW}from"https";import{join as kE}from"path";import{readFileSync as gW}from"fs";import{dirname as hW,join as yW}from"path";import{fileURLToPath as bW}from"url";function gn(){try{return"3.60.2"}catch{}try{let e=hW(bW(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(gW(yW(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}K();var EW=64*1024,xW=1440*60*1e3,RW="update-check.json",AW="pending-update.json";function vE(){return kE(Ri(),RW)}function xm(){return kE(Ri(),AW)}function TE(){let e=Ri();wW(e)||SW(e,{recursive:!0})}function _W(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number),o=Math.max(n.length,r.length);for(let s=0;s<o;s++){let i=n[s]??0,a=r[s]??0;if(a>i)return!0;if(a<i)return!1}return!1}function CW(){try{let e=SE(vE(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function IW(){try{TE();let e=`
2219
2219
  const https = require('https');
2220
2220
  const fs = require('fs');
2221
2221
  const url = 'https://registry.npmjs.org/agent-afk/latest';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-afk",
3
- "version": "3.60.1",
3
+ "version": "3.60.2",
4
4
  "description": "CLI tool for interacting with AI agents via multiple interfaces",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",