agent-afk 3.42.1 → 3.42.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 +2 -2
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -2174,10 +2174,10 @@ _ended: ${new Date().toISOString()}_
2174
2174
  `).find(b=>b.trim().length>0)?.trim()??"",g=f.length>0?f:`${e.kind} (no structured fields)`,h=ie(rn(g),n).split(`
2175
2175
  `);for(let b of h)d.push(i+" "+Re(b,n)+" "+i)}else for(let f of l){let g=p.dim(Re(f.label,c)),h=ie(rn(f.value),u).split(`
2176
2176
  `),b=h[0]??"";d.push(i+" "+g+" "+Re(b,u)+" "+i);for(let y of h.slice(1))d.push(i+" "+" ".repeat(c)+" "+Re(y,u)+" "+i)}d.push(a);let m=p.dim(le(t.affordance,n));return d.push(i+" "+Re(m,n)+" "+i),d.push(s),d.join(`
2177
- `)}function EN(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("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}function qS(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),el(r,t),r}async function JS(e,t,n,r,o="summary",s,i,a){let l=Iw(e.text,e.attachments);r.setInFlight(!0);let c="",u=!1,d=!1,m=!1,f=!1,g,h=!1,b=!1,y=[],w=new Map,v=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,x=r.getCompositor?r.getCompositor():null,S=()=>new so({out:io(s),thinkingMode:o,...v?{activeSkillName:v}:{},onCancel:()=>{t.interrupt().catch(I=>{Be()&&console.error(" "+p.error("session.interrupt() failed:"),I)})},...i?{onBackground:()=>{h=!0}}:{},...a?.history?{history:a.history}:{},...a?.autocompleteState?{autocompleteState:a.autocompleteState}:{},...a?.promptText!==void 0?{promptText:a.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...x?{compositor:x}:{}}),E=S(),A=async()=>{if(!m){m=!0;try{await E.dispose()}catch{}}},$=async()=>{await E.arm();let I=E.getCompositor();if(s&&I){let _=I;s.fn=L=>_.commitAbove(L)}r.setActiveCompositor?.(I),r.rearmStatus?.()};try{x?x.commitAbove(""):console.log(),await $(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0}),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0});let I=e.attachments.length===0?e.text:qS(e.text,e.attachments),_=t.sendMessageStream(I);if(await xr((R,M)=>{E.process(R,M)},async()=>{for await(let R of _){if(b){t.interrupt().catch(M=>{Be()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),M)});break}if(h&&i){let M=v??e.text.slice(0,40),P=i.register(M),N=Ta(P,i);Ea(_,c,l,P,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${P.id}: ${P.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(R.type==="chunk"&&R.chunk.type==="content"?(c+=R.chunk.content,u=!0):R.type==="message"&&!u&&(c=R.message.content),R.type==="chunk"&&R.chunk.type==="tool_use_detail"){let M=R.chunk,P={toolName:M.toolName,toolUseId:M.toolUseId,input:M.toolInput};w.set(M.toolUseId,P),y.push(P)}else if(R.type==="chunk"&&R.chunk.type==="tool_result"){let M=R.chunk,P=w.get(M.toolUseId);P&&(P.result=M.content,P.isError=M.isError,w.delete(M.toolUseId))}if(R.type==="paused"){await A(),(s??{fn:console.log}).fn(Km({reason:R.reason,...R.resetsAt!==void 0?{resetsAt:R.resetsAt}:{},...R.accountId!==void 0?{accountId:R.accountId}:{},...R.autoResume!==void 0?{autoResume:R.autoResume}:{}}));continue}if(R.type==="resumed"){let M=R.hotSwapped&&R.accountId?`\u25B6 Resumed on ${R.accountId}`:"\u25B6 Resumed";c="",u=!1,y.length=0,w.clear(),f=!1,g=void 0,d=!1,h=!1,E=S(),m=!1,await $(),(s??{fn:console.log}).fn(p.success(M));continue}if(R.type==="error"){await A(),vr(kr(R.error)),d=!0;continue}E.process(R),R.type==="done"&&(f=!0,g=R.metadata)}}),await A(),b&&!f){let R=s?s.fn:console.log;R(p.warning("\u23F8 Stopped \u2014 work so far kept.")+p.dim(" Use /resume or --resume to continue.")),R("")}if(f){Yn(n,l,c,g,y),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let R=P=>{s?s.fn(P):console.log(P)},M=GS(c);if(M&&(R(zS(M)),R(""),r.onTerminalState))try{r.onTerminalState(M)}catch{}if(xN(g,n,R),r.onAfterTurn){let P=r.onAfterTurn();P instanceof Promise&&await P.catch(()=>{})}}}catch(I){await A(),d||vr(kr(I))}finally{await A(),s&&(s.fn=I=>console.log(I)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function xN(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push(Oe(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),s=Number(e.usage?.output_tokens??0);o+s>0&&r.push(ee(o+s)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let i=ed(t),a=tt(t.model);if(i>=1){let l=Math.round((i-1)*a),c=Math.round(a/1e3);console.log(p.error(` context OVER ${c}k tok by ~${ee(l)} tok \u2014 model output may be silently truncated`))}else if(i>.5){let l=i>.8?p.error:p.warning;n(l(` context ${Math.round(i*100)}% used of ${ee(a)}`))}n("")}function VS(e={}){let t=e.load??ka,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Gb(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:Sa(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var up={done:{glyph:"\u2713",color:p.success,label:"done"},blocked:{glyph:"\u2298",color:p.error,label:"blocked"},asking:{glyph:"?",color:p.warning,label:"asking"},interrupted:{glyph:"\u23F8",color:p.meta,label:"interrupted"}};function YS(e={}){let t=Math.max(2,e.capacity??8),n=[];return{push(r){n.push(r.kind),n.length>t&&(n=n.slice(n.length-t))},reset(){n=[]},entries(){return n},render(){if(n.length===0)return null;let r=p.dim(" ledger "),o=p.dim(" \xB7 "),s=n.map(u=>{let d=up[u];return d.color(`${d.glyph} ${d.label}`)}),i=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,Y()-2);if(G(a)<=l)return a;let c=r+n.map(u=>up[u].color(up[u].glyph)).join(p.dim(" "))+i;return le(c,l)}}}var dp=["\u25D0","\u25D1","\u25D2","\u25D3"],$l=class{stream;manager;registry;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;registryStartedHandler=null;registrySettledHandler=null;rowCount=0;onRowCountChange;constructor(t,n,r={}){this.manager=t,this.registry=n,this.stream=r.stream??process.stdout,this.throttleMs=r.throttleMs??200}setRowCountChangeHandler(t){this.onRowCountChange=t}start(){this.started||(this.started=!0,this.updateHandler=()=>this.scheduleRepaint(),this.manager.on("update",this.updateHandler),this.manager.on("complete",this.updateHandler),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=je.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%dp.length,this.rowCount>0&&this.repaint()},Math.max(this.throttleMs,50)))}stop(){this.started&&(this.started=!1,this.updateHandler&&(this.manager.removeListener("update",this.updateHandler),this.manager.removeListener("complete",this.updateHandler),this.updateHandler=null),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.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.rowCount>0&&(this.clearRows(),this.rowCount=0,this.onRowCountChange?.(0)))}scheduleRepaint(){Date.now()-this.lastRepaint<this.throttleMs||this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=[...this.manager.running().map(s=>({kind:"turn",task:s})),...(this.registry?.list()??[]).filter(s=>s.status==="running").map(s=>({kind:"subagent",job:s}))],n=this.stream.rows??24,r=Math.max(0,Math.min(t.length,n-1));if(r!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=r,this.onRowCountChange?.(r)),r===0)return;let o=Math.max(1,n-r);this.stream.write("\x1B[s");for(let s=0;s<r;s++){let i=t[s],a=o+s;this.stream.write(`\x1B[${a};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatItemLine(i))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=Math.min(this.rowCount,t-1),r=Math.max(1,t-n);this.stream.write("\x1B[s");for(let o=0;o<n;o++)this.stream.write(`\x1B[${r+o};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}formatItemLine(t){return t.kind==="turn"?this.formatTaskLine(t.task):this.formatJobLine(t.job)}formatTaskLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(dp[this.spinnerIndex]),o=p.dim(t.id),s=p.bold(t.label),i=[r,o,s];t.progressDescription&&i.push(p.dim(t.progressDescription));let a=[];t.stats.toolUses>0&&a.push(`${t.stats.toolUses} tool${t.stats.toolUses===1?"":"s"}`),t.stats.tokens>0&&a.push(`${ee(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(oe(l)),a.length>0&&i.push(p.dim(a.join(" \xB7 "))),le(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(dp[this.spinnerIndex]),o=p.dim(t.jobId),s=p.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(p.dim(oe(a))),le(" "+i.join(" "),n)}};function Ol(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function XS(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async m=>{Be()&&(o=ha(m)),await rl(e.session.current),Be()&&(s=Wk())}).catch(()=>{});let i=await US(),a=new Il({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>Ol(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let h=e.slashCtx;h.stats.planMode&&h.stats.pendingPlanExit?(h.stats.pendingPlanExit=!1,Tt(h,!1,{closureSummarySkipped:!0}).catch(()=>{})):Tt(h).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{}}),Cr.install(KS({readLine:h=>a.readLine({promptFn:()=>h}).then(b=>b.text),writer:{line:(h="")=>{let b=a.getCompositor();b?b.commitAbove(h):process.stdout.write(h+`
2177
+ `)}function EN(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("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}function qS(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),el(r,t),r}async function JS(e,t,n,r,o="summary",s,i,a){let l=Iw(e.text,e.attachments);r.setInFlight(!0);let c="",u=!1,d=!1,m=!1,f=!1,g,h=!1,b=!1,y=[],w=new Map,v=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,x=r.getCompositor?r.getCompositor():null,S=()=>new so({out:io(s),thinkingMode:o,...v?{activeSkillName:v}:{},onCancel:()=>{t.interrupt().catch(I=>{Be()&&console.error(" "+p.error("session.interrupt() failed:"),I)})},...i?{onBackground:()=>{h=!0}}:{},...a?.history?{history:a.history}:{},...a?.autocompleteState?{autocompleteState:a.autocompleteState}:{},...a?.promptText!==void 0?{promptText:a.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...x?{compositor:x}:{}}),E=S(),A=async()=>{if(!m){m=!0;try{await E.dispose()}catch{}}},$=async()=>{await E.arm();let I=E.getCompositor();if(s&&I){let _=I;s.fn=L=>_.commitAbove(L)}r.setActiveCompositor?.(I),r.rearmStatus?.()};try{x?x.commitAbove(""):console.log(),await $(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0}),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0});let I=e.attachments.length===0?e.text:qS(e.text,e.attachments),_=t.sendMessageStream(I);if(await xr((R,M)=>{E.process(R,M)},async()=>{for await(let R of _){if(b){t.interrupt().catch(M=>{Be()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),M)});break}if(h&&i){let M=v??e.text.slice(0,40),P=i.register(M),N=Ta(P,i);Ea(_,c,l,P,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${P.id}: ${P.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(R.type==="chunk"&&R.chunk.type==="content"?(c+=R.chunk.content,u=!0):R.type==="message"&&!u&&(c=R.message.content),R.type==="chunk"&&R.chunk.type==="tool_use_detail"){let M=R.chunk,P={toolName:M.toolName,toolUseId:M.toolUseId,input:M.toolInput};w.set(M.toolUseId,P),y.push(P)}else if(R.type==="chunk"&&R.chunk.type==="tool_result"){let M=R.chunk,P=w.get(M.toolUseId);P&&(P.result=M.content,P.isError=M.isError,w.delete(M.toolUseId))}if(R.type==="paused"){await A(),(s??{fn:console.log}).fn(Km({reason:R.reason,...R.resetsAt!==void 0?{resetsAt:R.resetsAt}:{},...R.accountId!==void 0?{accountId:R.accountId}:{},...R.autoResume!==void 0?{autoResume:R.autoResume}:{}}));continue}if(R.type==="resumed"){let M=R.hotSwapped&&R.accountId?`\u25B6 Resumed on ${R.accountId}`:"\u25B6 Resumed";c="",u=!1,y.length=0,w.clear(),f=!1,g=void 0,d=!1,h=!1,E=S(),m=!1,await $(),(s??{fn:console.log}).fn(p.success(M));continue}if(R.type==="error"){await A(),vr(kr(R.error)),d=!0;continue}E.process(R),R.type==="done"&&(f=!0,g=R.metadata)}}),await A(),b){let R=s?s.fn:console.log;R(p.warning("\u23F8 Stopped \u2014 work so far kept.")+p.dim(" Use /resume or --resume to continue.")),R("")}if(f&&!b){Yn(n,l,c,g,y),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let R=P=>{s?s.fn(P):console.log(P)},M=GS(c);if(M&&(R(zS(M)),R(""),r.onTerminalState))try{r.onTerminalState(M)}catch{}if(xN(g,n,R),r.onAfterTurn){let P=r.onAfterTurn();P instanceof Promise&&await P.catch(()=>{})}}}catch(I){await A(),d||vr(kr(I))}finally{await A(),s&&(s.fn=I=>console.log(I)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function xN(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push(Oe(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),s=Number(e.usage?.output_tokens??0);o+s>0&&r.push(ee(o+s)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let i=ed(t),a=tt(t.model);if(i>=1){let l=Math.round((i-1)*a),c=Math.round(a/1e3);console.log(p.error(` context OVER ${c}k tok by ~${ee(l)} tok \u2014 model output may be silently truncated`))}else if(i>.5){let l=i>.8?p.error:p.warning;n(l(` context ${Math.round(i*100)}% used of ${ee(a)}`))}n("")}function VS(e={}){let t=e.load??ka,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Gb(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:Sa(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var up={done:{glyph:"\u2713",color:p.success,label:"done"},blocked:{glyph:"\u2298",color:p.error,label:"blocked"},asking:{glyph:"?",color:p.warning,label:"asking"},interrupted:{glyph:"\u23F8",color:p.meta,label:"interrupted"}};function YS(e={}){let t=Math.max(2,e.capacity??8),n=[];return{push(r){n.push(r.kind),n.length>t&&(n=n.slice(n.length-t))},reset(){n=[]},entries(){return n},render(){if(n.length===0)return null;let r=p.dim(" ledger "),o=p.dim(" \xB7 "),s=n.map(u=>{let d=up[u];return d.color(`${d.glyph} ${d.label}`)}),i=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,Y()-2);if(G(a)<=l)return a;let c=r+n.map(u=>up[u].color(up[u].glyph)).join(p.dim(" "))+i;return le(c,l)}}}var dp=["\u25D0","\u25D1","\u25D2","\u25D3"],$l=class{stream;manager;registry;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;registryStartedHandler=null;registrySettledHandler=null;rowCount=0;onRowCountChange;constructor(t,n,r={}){this.manager=t,this.registry=n,this.stream=r.stream??process.stdout,this.throttleMs=r.throttleMs??200}setRowCountChangeHandler(t){this.onRowCountChange=t}start(){this.started||(this.started=!0,this.updateHandler=()=>this.scheduleRepaint(),this.manager.on("update",this.updateHandler),this.manager.on("complete",this.updateHandler),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=je.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%dp.length,this.rowCount>0&&this.repaint()},Math.max(this.throttleMs,50)))}stop(){this.started&&(this.started=!1,this.updateHandler&&(this.manager.removeListener("update",this.updateHandler),this.manager.removeListener("complete",this.updateHandler),this.updateHandler=null),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.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.rowCount>0&&(this.clearRows(),this.rowCount=0,this.onRowCountChange?.(0)))}scheduleRepaint(){Date.now()-this.lastRepaint<this.throttleMs||this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=[...this.manager.running().map(s=>({kind:"turn",task:s})),...(this.registry?.list()??[]).filter(s=>s.status==="running").map(s=>({kind:"subagent",job:s}))],n=this.stream.rows??24,r=Math.max(0,Math.min(t.length,n-1));if(r!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=r,this.onRowCountChange?.(r)),r===0)return;let o=Math.max(1,n-r);this.stream.write("\x1B[s");for(let s=0;s<r;s++){let i=t[s],a=o+s;this.stream.write(`\x1B[${a};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatItemLine(i))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=Math.min(this.rowCount,t-1),r=Math.max(1,t-n);this.stream.write("\x1B[s");for(let o=0;o<n;o++)this.stream.write(`\x1B[${r+o};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}formatItemLine(t){return t.kind==="turn"?this.formatTaskLine(t.task):this.formatJobLine(t.job)}formatTaskLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(dp[this.spinnerIndex]),o=p.dim(t.id),s=p.bold(t.label),i=[r,o,s];t.progressDescription&&i.push(p.dim(t.progressDescription));let a=[];t.stats.toolUses>0&&a.push(`${t.stats.toolUses} tool${t.stats.toolUses===1?"":"s"}`),t.stats.tokens>0&&a.push(`${ee(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(oe(l)),a.length>0&&i.push(p.dim(a.join(" \xB7 "))),le(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(dp[this.spinnerIndex]),o=p.dim(t.jobId),s=p.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(p.dim(oe(a))),le(" "+i.join(" "),n)}};function Ol(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function XS(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async m=>{Be()&&(o=ha(m)),await rl(e.session.current),Be()&&(s=Wk())}).catch(()=>{});let i=await US(),a=new Il({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>Ol(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let h=e.slashCtx;h.stats.planMode&&h.stats.pendingPlanExit?(h.stats.pendingPlanExit=!1,Tt(h,!1,{closureSummarySkipped:!0}).catch(()=>{})):Tt(h).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{}}),Cr.install(KS({readLine:h=>a.readLine({promptFn:()=>h}).then(b=>b.text),writer:{line:(h="")=>{let b=a.getCompositor();b?b.commitAbove(h):process.stdout.write(h+`
2178
2178
  `)}},pendingCount:()=>Cr.pendingCount()})),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor(),c=VS();let m=YS();e.clearVerdictLedger=()=>m.reset(),u=new va,nw(u),lw(u),dw(u),cw(e.backgroundRegistry),d=new $l(u,e.backgroundRegistry),d.setRowCountChangeHandler(h=>{e.statusLine.setExtraRows(h)}),d.start();let f=50,g=[];for(u.on("complete",h=>{g.length>=f&&g.shift(),g.push(h)});;){if(o&&(e.replRenderer.writeLine(o),e.replRenderer.writeLine(""),o=null),s.length>0){for(let E of s)e.replRenderer.writeLine(E);e.replRenderer.writeLine(""),s=[]}for(;g.length>0;){let E=g.shift(),A=E.status==="succeeded"?"\u2713":"\u2717",$=[];if(E.resultText){let _=E.resultText.trim().split(`
2179
2179
  `)[0]?.slice(0,80)??"";_&&$.push(_)}E.error&&$.push(E.error.message);let I=[E.stats.toolUses>0?`${E.stats.toolUses} tools`:"",E.stats.tokens>0?`${Math.round(E.stats.tokens/1e3)}k tok`:"",E.stats.durationMs>0?`${Math.round(E.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");I&&$.push(I),e.replRenderer.writeLine(on({kind:E.status==="succeeded"?"checkpoint":"diagnosis",title:`${A} ${E.id} ${E.label}`,body:$})),e.replRenderer.writeLine("")}let h=c.renderIfChanged(e.stats.sessionId);if(h.length>0){for(let E of h)e.replRenderer.writeLine(E);e.replRenderer.writeLine("")}let b=m.render();b&&e.replRenderer.writeLine(b);let y,w;if(l!==void 0){let E=l;l=void 0;let A=Ol(e.stats.model,e.stats.planMode),$=Zn({buffer:E.text,promptText:A,isTTY:!!process.stdout.isTTY,attachmentSummary:eo([...E.attachments])});e.replRenderer.writeLine($),y=E.text.trim(),w=E.attachments}else{let E=await a.readLine({promptFn:()=>Ol(e.stats.model,e.stats.planMode),onSigint:r,onShiftTab:()=>{let A=e.slashCtx;A.stats.planMode&&A.stats.pendingPlanExit?(A.stats.pendingPlanExit=!1,Tt(A,!1,{closureSummarySkipped:!0}).catch(()=>{})):Tt(A).catch(()=>{}),e.statusLine.rearm()}});y=E.text.trim(),w=E.attachments}if(!y&&w.length===0)continue;let v=!1;if(y.startsWith("/")){let E=await Eb(y,e.slashCtx,w);if(E.handled){if(E.result==="exit"){e.rl.close();return}if((y==="/clear"||y.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),m.reset()),E.result!==null&&typeof E.result=="object"&&"kind"in E.result&&E.result.kind==="submit"){l={text:E.result.message,attachments:w??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}v=!0}i.push(y);let x=y;if(v){let E=Zu(y);if(E){let A=E.name.replace(/^\//,"").split(":").pop()??"";if(A&&Fd(A)){let $={skillName:A,rawArgs:E.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},I=e.session.current.sessionId,_=ws(I),L=Date.now();z(`[afk trace] preflight.start commandName=${A}`);let R=!1,M=await bs($,{cwd:e.stats.cwd??process.cwd(),artifactDir:_},P=>{Be()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${A}) failed: `)+(P instanceof Error?P.message:String(P)))});R=M!==null,z(`[afk trace] preflight.end commandName=${A} durationMs=${Date.now()-L} success=${R}`),x=jd(M?.manifestBlock,y)}}}let S;if(e.firstTurnHook&&e.stats.totalTurns===0){let E=e.firstTurnHook;e.firstTurnHook=void 0,S=Promise.resolve().then(()=>E(y)).catch(A=>{e.completionWriter.fn(p.warning("\u26A0 ")+"first-turn hook failed: "+(A instanceof Error?A.message:String(A)))})}await JS({text:x,attachments:w},e.session.current,e.stats,{setInFlight(E){n.turnInFlight=E},async onTurnComplete(E,A){await t.appendTurn(E,A)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await Lb(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:E=>m.push(E),setActiveCompositor:E=>{n.activeCompositor=E},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:E=>a.setBackgroundHandler(E),setSoftStopHandler:E=>a.setSoftStopHandler(E)},e.options.thinkingUi,e.completionWriter,u,a.toRunTurnRefs(Ol(e.stats.model,e.stats.planMode))),S!==void 0&&await S}}finally{if(u!==void 0)for(let m of u.running())u.cancel(m.id);d?.stop(),c?.dispose(),await a.dispose()}}import{execFile as RN}from"node:child_process";import{dirname as AN,isAbsolute as CN,resolve as _N}from"node:path";import{promisify as IN}from"node:util";var QS=IN(RN),PN=3e3,MN=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function $N(){let t=(await QS("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=CN(t)?t:_N(process.cwd(),t);return AN(n)}async function ZS(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await $N()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),PN)});try{let o=Dt({execFile:QS,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=>MN.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}import{promises as ON}from"node:fs";import{dirname as DN,join as LN}from"node:path";import{randomBytes as FN}from"node:crypto";var NN=["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(`
2180
- `),ev=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,pp=30,UN=1024,jN=8e3,BN="haiku";async function WN(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=zN(n,UN),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??jN),i=t.signal?qN([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await kl({token:t.token,model:t.model??BN,system:NN,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=HN(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=DN(t.worktreePath);return await KN(l,c)}function HN(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(ev.test(t)&&t.length<=pp)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>pp)break;o=i}return ev.test(o)?o:null}async function KN(e,t){if(!await GN(LN(t,e)))return e;let n=FN(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,pp-5)}-${n}`}async function GN(e){try{return await ON.access(e),!0}catch{return!1}}function zN(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 qN(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 nv(e){let t,n,r=await WN(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??Dh)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),tv(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),tv(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function tv(e){try{process.chdir(e)}catch{}}U();import{spawn as rv}from"child_process";import{existsSync as QN,mkdirSync as ZN,readFileSync as ov,unlinkSync as eU,writeFileSync as tU}from"fs";import{get as nU}from"https";import{join as sv}from"path";import{readFileSync as JN}from"fs";import{dirname as VN,join as YN}from"path";import{fileURLToPath as XN}from"url";function Yt(){try{return"3.42.1"}catch{}try{let e=VN(XN(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(JN(YN(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}q();var rU=64*1024,oU=1440*60*1e3,sU="update-check.json",iU="pending-update.json";function iv(){return sv(Vs(),sU)}function mp(){return sv(Vs(),iU)}function av(){let e=Vs();QN(e)||ZN(e,{recursive:!0})}function aU(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 lU(){try{let e=ov(iv(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function cU(){try{av();let e=`
2180
+ `),ev=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,pp=30,UN=1024,jN=8e3,BN="haiku";async function WN(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=zN(n,UN),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??jN),i=t.signal?qN([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await kl({token:t.token,model:t.model??BN,system:NN,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=HN(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=DN(t.worktreePath);return await KN(l,c)}function HN(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(ev.test(t)&&t.length<=pp)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>pp)break;o=i}return ev.test(o)?o:null}async function KN(e,t){if(!await GN(LN(t,e)))return e;let n=FN(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,pp-5)}-${n}`}async function GN(e){try{return await ON.access(e),!0}catch{return!1}}function zN(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 qN(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 nv(e){let t,n,r=await WN(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??Dh)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),tv(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),tv(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function tv(e){try{process.chdir(e)}catch{}}U();import{spawn as rv}from"child_process";import{existsSync as QN,mkdirSync as ZN,readFileSync as ov,unlinkSync as eU,writeFileSync as tU}from"fs";import{get as nU}from"https";import{join as sv}from"path";import{readFileSync as JN}from"fs";import{dirname as VN,join as YN}from"path";import{fileURLToPath as XN}from"url";function Yt(){try{return"3.42.2"}catch{}try{let e=VN(XN(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(JN(YN(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}q();var rU=64*1024,oU=1440*60*1e3,sU="update-check.json",iU="pending-update.json";function iv(){return sv(Vs(),sU)}function mp(){return sv(Vs(),iU)}function av(){let e=Vs();QN(e)||ZN(e,{recursive:!0})}function aU(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 lU(){try{let e=ov(iv(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function cU(){try{av();let e=`
2181
2181
  const https = require('https');
2182
2182
  const fs = require('fs');
2183
2183
  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.42.1",
3
+ "version": "3.42.2",
4
4
  "description": "CLI tool for interacting with AI agents via multiple interfaces",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",