agent-afk 3.45.1 → 3.45.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
@@ -2179,10 +2179,10 @@ _ended: ${new Date().toISOString()}_
2179
2179
  `).find(b=>b.trim().length>0)?.trim()??"",g=f.length>0?f:`${e.kind} (no structured fields)`,h=ie(un(g),n).split(`
2180
2180
  `);for(let b of h)d.push(i+" "+Re(b,n)+" "+i)}else for(let f of l){let g=m.dim(Re(f.label,c)),h=ie(un(f.value),u).split(`
2181
2181
  `),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 p=m.dim(le(t.affordance,n));return d.push(i+" "+Re(p,n)+" "+i),d.push(s),d.join(`
2182
- `)}function n1(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 Xv(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),gl(r,t),r}async function Zv(e,t,n,r,o="summary",s,i,a){let l=$S(e.text,e.attachments);r.setInFlight(!0);let c="",u=!1,d=!1,p=!1,f=!1,g,h=!1,b=!1,y=[],S=new Map,T=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,R=r.getCompositor?r.getCompositor():null,k=()=>new ho({out:yo(s),thinkingMode:o,...T?{activeSkillName:T}:{},onCancel:()=>{t.interrupt().catch(O=>{Be()&&console.error(" "+m.error("session.interrupt() failed:"),O)})},...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}:{},...R?{compositor:R}:{}}),x=k(),A=async()=>{if(!p){p=!0;try{await x.dispose()}catch{}}},D=async()=>{await x.arm();let O=x.getCompositor();if(s&&O){let P=O;s.fn=M=>P.commitAbove(M)}r.setActiveCompositor?.(O),r.rearmStatus?.()};try{R?R.commitAbove(""):console.log(),await D(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0}),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0});let O=e.attachments.length===0?e.text:Xv(e.text,e.attachments),P=t.sendMessageStream(O);if(await Or((E,_)=>{x.process(E,_)},async()=>{for await(let E of P){if(b){t.interrupt().catch(_=>{Be()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),_)});break}if(h&&i){let _=T??e.text.slice(0,40),I=i.register(_),N=Na(I,i);Ua(P,c,l,I,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(m.dim(` \u2192 backgrounded as ${I.id}: ${I.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(E.type==="chunk"&&E.chunk.type==="content"?(c+=E.chunk.content,u=!0):E.type==="message"&&!u&&(c=E.message.content),E.type==="chunk"&&E.chunk.type==="tool_use_detail"){let _=E.chunk,I={toolName:_.toolName,toolUseId:_.toolUseId,input:_.toolInput};S.set(_.toolUseId,I),y.push(I)}else if(E.type==="chunk"&&E.chunk.type==="tool_result"){let _=E.chunk,I=S.get(_.toolUseId);I&&(I.result=_.content,I.isError=_.isError,S.delete(_.toolUseId))}if(E.type==="paused"){await A(),(s??{fn:console.log}).fn(gf({reason:E.reason,...E.resetsAt!==void 0?{resetsAt:E.resetsAt}:{},...E.accountId!==void 0?{accountId:E.accountId}:{},...E.autoResume!==void 0?{autoResume:E.autoResume}:{}}));continue}if(E.type==="resumed"){let _=E.hotSwapped&&E.accountId?`\u25B6 Resumed on ${E.accountId}`:"\u25B6 Resumed";c="",u=!1,y.length=0,S.clear(),f=!1,g=void 0,d=!1,h=!1,x=k(),p=!1,await D(),(s??{fn:console.log}).fn(m.success(_));continue}if(E.type==="error"){await A(),Ir(_r(E.error)),d=!0;continue}x.process(E),E.type==="done"&&(f=!0,g=E.metadata)}}),await A(),b){let E=s?s.fn:console.log;E(m.warning("\u23F8 Stopped \u2014 work so far kept.")+m.dim(" Use /resume or --resume to continue.")),E("")}if(f&&!b){nr(n,l,c,g,y),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let E=I=>{s?s.fn(I):console.log(I)},_=Vv(c);if(_&&(E(Yv(_)),E(""),r.onTerminalState))try{r.onTerminalState(_)}catch{}if(r1(g,n,E),r.onAfterTurn){let I=r.onAfterTurn();I instanceof Promise&&await I.catch(()=>{})}}}catch(O){await A(),d||Ir(_r(O))}finally{await A(),s&&(s.fn=O=>console.log(O)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function r1(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push($e(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(m.dim(" \u25E6 "+r.join(" \xB7 ")));let i=Rd(t),a=nt(t.model);if(i>=1){let l=Math.round((i-1)*a),c=Math.round(a/1e3);console.log(m.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?m.error:m.warning;n(l(` context ${Math.round(i*100)}% used of ${ee(a)}`))}n("")}function Qv(e={}){let t=e.load??Da,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Vw(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:La(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var Lp={done:{glyph:"\u2713",color:m.success,label:"done"},blocked:{glyph:"\u2298",color:m.error,label:"blocked"},asking:{glyph:"?",color:m.warning,label:"asking"},interrupted:{glyph:"\u23F8",color:m.meta,label:"interrupted"}};function eT(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=m.dim(" ledger "),o=m.dim(" \xB7 "),s=n.map(u=>{let d=Lp[u];return d.color(`${d.glyph} ${d.label}`)}),i=m.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,X()-2);if(z(a)<=l)return a;let c=r+n.map(u=>Lp[u].color(Lp[u].glyph)).join(m.dim(" "))+i;return le(c,l)}}}var Fp=["\u25D0","\u25D1","\u25D2","\u25D3"],Jl=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)%Fp.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=m.brand(Fp[this.spinnerIndex]),o=m.dim(t.id),s=m.bold(t.label),i=[r,o,s];t.progressDescription&&i.push(m.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(m.dim(a.join(" \xB7 "))),le(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=m.brand(Fp[this.spinnerIndex]),o=m.dim(t.jobId),s=m.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(m.dim(oe(a))),le(" "+i.join(" "),n)}};function Vl(e,t){let n=m.brand("afk")+m.dim(` (${e})`),r=t?m.warning(" \u25CF plan"):"";return n+r+m.dim(" \u203A ")}async function tT(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async p=>{Be()&&(o=Pa(p)),await Sl(e.session.current),Be()&&(s=ev())}).catch(()=>{});let i=await Hv(),a=new Gl({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>Vl(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let h=e.slashCtx;h.stats.planMode&&h.stats.pendingPlanExit?(h.stats.pendingPlanExit=!1,Et(h,!1,{closureSummarySkipped:!0}).catch(()=>{})):Et(h).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{}}),Fr.install(Jv({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+`
2182
+ `)}function n1(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 Xv(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),gl(r,t),r}async function Zv(e,t,n,r,o="summary",s,i,a){let l=$S(e.text,e.attachments);r.setInFlight(!0);let c="",u=!1,d=!1,p=!1,f=!1,g,h=!1,b=!1,y=[],S=new Map,T=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,R=r.getCompositor?r.getCompositor():null,k=()=>new ho({out:yo(s),thinkingMode:o,...T?{activeSkillName:T}:{},onCancel:()=>{t.interrupt().catch(O=>{Be()&&console.error(" "+m.error("session.interrupt() failed:"),O)})},...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}:{},...R?{compositor:R}:{}}),x=k(),A=async()=>{if(!p){p=!0;try{await x.dispose()}catch{}}},D=async()=>{await x.arm();let O=x.getCompositor();if(s&&O){let P=O;s.fn=M=>P.commitAbove(M)}r.setActiveCompositor?.(O),r.rearmStatus?.()};try{R?R.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0}),await D(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0});let O=e.attachments.length===0?e.text:Xv(e.text,e.attachments),P=t.sendMessageStream(O);if(await Or((E,_)=>{x.process(E,_)},async()=>{for await(let E of P){if(b){t.interrupt().catch(_=>{Be()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),_)});break}if(h&&i){let _=T??e.text.slice(0,40),I=i.register(_),N=Na(I,i);Ua(P,c,l,I,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(m.dim(` \u2192 backgrounded as ${I.id}: ${I.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(E.type==="chunk"&&E.chunk.type==="content"?(c+=E.chunk.content,u=!0):E.type==="message"&&!u&&(c=E.message.content),E.type==="chunk"&&E.chunk.type==="tool_use_detail"){let _=E.chunk,I={toolName:_.toolName,toolUseId:_.toolUseId,input:_.toolInput};S.set(_.toolUseId,I),y.push(I)}else if(E.type==="chunk"&&E.chunk.type==="tool_result"){let _=E.chunk,I=S.get(_.toolUseId);I&&(I.result=_.content,I.isError=_.isError,S.delete(_.toolUseId))}if(E.type==="paused"){await A(),(s??{fn:console.log}).fn(gf({reason:E.reason,...E.resetsAt!==void 0?{resetsAt:E.resetsAt}:{},...E.accountId!==void 0?{accountId:E.accountId}:{},...E.autoResume!==void 0?{autoResume:E.autoResume}:{}}));continue}if(E.type==="resumed"){let _=E.hotSwapped&&E.accountId?`\u25B6 Resumed on ${E.accountId}`:"\u25B6 Resumed";c="",u=!1,y.length=0,S.clear(),f=!1,g=void 0,d=!1,h=!1,x=k(),p=!1,await D(),(s??{fn:console.log}).fn(m.success(_));continue}if(E.type==="error"){await A(),Ir(_r(E.error)),d=!0;continue}x.process(E),E.type==="done"&&(f=!0,g=E.metadata)}}),await A(),b){let E=s?s.fn:console.log;E(m.warning("\u23F8 Stopped \u2014 work so far kept.")+m.dim(" Use /resume or --resume to continue.")),E("")}if(f&&!b){nr(n,l,c,g,y),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let E=I=>{s?s.fn(I):console.log(I)},_=Vv(c);if(_&&(E(Yv(_)),E(""),r.onTerminalState))try{r.onTerminalState(_)}catch{}if(r1(g,n,E),r.onAfterTurn){let I=r.onAfterTurn();I instanceof Promise&&await I.catch(()=>{})}}}catch(O){await A(),d||Ir(_r(O))}finally{await A(),s&&(s.fn=O=>console.log(O)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function r1(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push($e(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(m.dim(" \u25E6 "+r.join(" \xB7 ")));let i=Rd(t),a=nt(t.model);if(i>=1){let l=Math.round((i-1)*a),c=Math.round(a/1e3);console.log(m.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?m.error:m.warning;n(l(` context ${Math.round(i*100)}% used of ${ee(a)}`))}n("")}function Qv(e={}){let t=e.load??Da,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Vw(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:La(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var Lp={done:{glyph:"\u2713",color:m.success,label:"done"},blocked:{glyph:"\u2298",color:m.error,label:"blocked"},asking:{glyph:"?",color:m.warning,label:"asking"},interrupted:{glyph:"\u23F8",color:m.meta,label:"interrupted"}};function eT(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=m.dim(" ledger "),o=m.dim(" \xB7 "),s=n.map(u=>{let d=Lp[u];return d.color(`${d.glyph} ${d.label}`)}),i=m.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,X()-2);if(z(a)<=l)return a;let c=r+n.map(u=>Lp[u].color(Lp[u].glyph)).join(m.dim(" "))+i;return le(c,l)}}}var Fp=["\u25D0","\u25D1","\u25D2","\u25D3"],Jl=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)%Fp.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=m.brand(Fp[this.spinnerIndex]),o=m.dim(t.id),s=m.bold(t.label),i=[r,o,s];t.progressDescription&&i.push(m.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(m.dim(a.join(" \xB7 "))),le(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=m.brand(Fp[this.spinnerIndex]),o=m.dim(t.jobId),s=m.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(m.dim(oe(a))),le(" "+i.join(" "),n)}};function Vl(e,t){let n=m.brand("afk")+m.dim(` (${e})`),r=t?m.warning(" \u25CF plan"):"";return n+r+m.dim(" \u203A ")}async function tT(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async p=>{Be()&&(o=Pa(p)),await Sl(e.session.current),Be()&&(s=ev())}).catch(()=>{});let i=await Hv(),a=new Gl({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>Vl(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let h=e.slashCtx;h.stats.planMode&&h.stats.pendingPlanExit?(h.stats.pendingPlanExit=!1,Et(h,!1,{closureSummarySkipped:!0}).catch(()=>{})):Et(h).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{}}),Fr.install(Jv({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+`
2183
2183
  `)}},pendingCount:()=>Fr.pendingCount()})),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor(),e.slashCtx.setSoftStopHandler=h=>a.setSoftStopHandler(h),c=Qv();let p=eT();e.clearVerdictLedger=()=>p.reset(),u=new Fa,iS(u),pS(u),gS(u),mS(e.backgroundRegistry),d=new Jl(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 x of s)e.replRenderer.writeLine(x);e.replRenderer.writeLine(""),s=[]}for(;g.length>0;){let x=g.shift(),A=x.status==="succeeded"?"\u2713":"\u2717",D=[];if(x.resultText){let P=x.resultText.trim().split(`
2184
2184
  `)[0]?.slice(0,80)??"";P&&D.push(P)}x.error&&D.push(x.error.message);let O=[x.stats.toolUses>0?`${x.stats.toolUses} tools`:"",x.stats.tokens>0?`${Math.round(x.stats.tokens/1e3)}k tok`:"",x.stats.durationMs>0?`${Math.round(x.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");O&&D.push(O),e.replRenderer.writeLine(dn({kind:x.status==="succeeded"?"checkpoint":"diagnosis",title:`${A} ${x.id} ${x.label}`,body:D})),e.replRenderer.writeLine("")}let h=c.renderIfChanged(e.stats.sessionId);if(h.length>0){for(let x of h)e.replRenderer.writeLine(x);e.replRenderer.writeLine("")}let b=p.render();b&&e.replRenderer.writeLine(b);let y,S;if(l!==void 0){let x=l;l=void 0;let A=Vl(e.stats.model,e.stats.planMode),D=sr({buffer:x.text,promptText:A,isTTY:!!process.stdout.isTTY,attachmentSummary:uo([...x.attachments])});e.replRenderer.writeLine(D),y=x.text.trim(),S=x.attachments}else{let x=await a.readLine({promptFn:()=>Vl(e.stats.model,e.stats.planMode),onSigint:r,onShiftTab:()=>{let A=e.slashCtx;A.stats.planMode&&A.stats.pendingPlanExit?(A.stats.pendingPlanExit=!1,Et(A,!1,{closureSummarySkipped:!0}).catch(()=>{})):Et(A).catch(()=>{}),e.statusLine.rearm()}});y=x.text.trim(),S=x.attachments}if(!y&&S.length===0)continue;let T=!1;if(y.startsWith("/")){let x=await _w(y,e.slashCtx,S);if(x.handled){if(x.result==="exit"){e.rl.close();return}if((y==="/clear"||y.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset()),x.result!==null&&typeof x.result=="object"&&"kind"in x.result&&x.result.kind==="submit"){l={text:x.result.message,attachments:S??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}T=!0}i.push(y);let R=y;if(T){let x=xd(y);if(x){let A=x.name.replace(/^\//,"").split(":").pop()??"";if(A&&cp(A)){let D={skillName:A,rawArgs:x.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},O=e.session.current.sessionId,P=fr(O),M=Date.now();J(`[afk trace] preflight.start commandName=${A}`);let E=!1,_=await mr(D,{cwd:e.stats.cwd??process.cwd(),artifactDir:P},I=>{Be()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${A}) failed: `)+(I instanceof Error?I.message:String(I)))});E=_!==null,J(`[afk trace] preflight.end commandName=${A} durationMs=${Date.now()-M} success=${E}`),R=pp(_?.manifestBlock,y)}}}let k;if(e.firstTurnHook&&e.stats.totalTurns===0){let x=e.firstTurnHook;e.firstTurnHook=void 0,k=Promise.resolve().then(()=>x(y)).catch(A=>{e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(A instanceof Error?A.message:String(A)))})}await Zv({text:R,attachments:S},e.session.current,e.stats,{setInFlight(x){n.turnInFlight=x},async onTurnComplete(x,A){await t.appendTurn(x,A)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await jw(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:x=>p.push(x),setActiveCompositor:x=>{n.activeCompositor=x},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:x=>a.setBackgroundHandler(x),setSoftStopHandler:x=>a.setSoftStopHandler(x)},e.options.thinkingUi,e.completionWriter,u,a.toRunTurnRefs(Vl(e.stats.model,e.stats.planMode))),k!==void 0&&await k}}finally{if(u!==void 0)for(let p of u.running())u.cancel(p.id);d?.stop(),c?.dispose(),await a.dispose()}}import{execFile as o1}from"node:child_process";import{dirname as s1,isAbsolute as i1,resolve as a1}from"node:path";import{promisify as l1}from"node:util";var nT=l1(o1),c1=3e3,u1=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function d1(){let t=(await nT("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=i1(t)?t:a1(process.cwd(),t);return s1(n)}async function rT(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await d1()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),c1)});try{let o=Nt({execFile:nT,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=>u1.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}import{promises as p1}from"node:fs";import{dirname as m1,join as f1}from"node:path";import{randomBytes as g1}from"node:crypto";var h1=["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(`
2185
- `),oT=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Np=30,y1=1024,b1=8e3,w1="haiku";async function S1(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=E1(n,y1),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??b1),i=t.signal?x1([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Dl({token:t.token,model:t.model??w1,system:h1,user:r,maxTokens:32,signal:i})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(s)}let l=k1(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=m1(t.worktreePath);return await v1(l,c)}function k1(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(oT.test(t)&&t.length<=Np)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>Np)break;o=i}return oT.test(o)?o:null}async function v1(e,t){if(!await T1(f1(t,e)))return e;let n=g1(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Np-5)}-${n}`}async function T1(e){try{return await p1.access(e),!0}catch{return!1}}function E1(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 x1(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 iT(e){let t,n,r=await S1(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??Ny)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),sT(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),sT(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function sT(e){try{process.chdir(e)}catch{}}U();import{spawn as aT}from"child_process";import{existsSync as I1,mkdirSync as P1,readFileSync as lT,unlinkSync as M1,writeFileSync as O1}from"fs";import{get as $1}from"https";import{join as cT}from"path";import{readFileSync as R1}from"fs";import{dirname as A1,join as _1}from"path";import{fileURLToPath as C1}from"url";function nn(){try{return"3.45.1"}catch{}try{let e=A1(C1(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(R1(_1(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}W();var D1=64*1024,L1=1440*60*1e3,F1="update-check.json",N1="pending-update.json";function uT(){return cT(si(),F1)}function Up(){return cT(si(),N1)}function dT(){let e=si();I1(e)||P1(e,{recursive:!0})}function U1(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 j1(){try{let e=lT(uT(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function B1(){try{dT();let e=`
2185
+ `),oT=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Np=30,y1=1024,b1=8e3,w1="haiku";async function S1(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=E1(n,y1),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??b1),i=t.signal?x1([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Dl({token:t.token,model:t.model??w1,system:h1,user:r,maxTokens:32,signal:i})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(s)}let l=k1(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=m1(t.worktreePath);return await v1(l,c)}function k1(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(oT.test(t)&&t.length<=Np)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>Np)break;o=i}return oT.test(o)?o:null}async function v1(e,t){if(!await T1(f1(t,e)))return e;let n=g1(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Np-5)}-${n}`}async function T1(e){try{return await p1.access(e),!0}catch{return!1}}function E1(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 x1(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 iT(e){let t,n,r=await S1(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??Ny)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),sT(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),sT(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function sT(e){try{process.chdir(e)}catch{}}U();import{spawn as aT}from"child_process";import{existsSync as I1,mkdirSync as P1,readFileSync as lT,unlinkSync as M1,writeFileSync as O1}from"fs";import{get as $1}from"https";import{join as cT}from"path";import{readFileSync as R1}from"fs";import{dirname as A1,join as _1}from"path";import{fileURLToPath as C1}from"url";function nn(){try{return"3.45.2"}catch{}try{let e=A1(C1(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(R1(_1(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}W();var D1=64*1024,L1=1440*60*1e3,F1="update-check.json",N1="pending-update.json";function uT(){return cT(si(),F1)}function Up(){return cT(si(),N1)}function dT(){let e=si();I1(e)||P1(e,{recursive:!0})}function U1(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 j1(){try{let e=lT(uT(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function B1(){try{dT();let e=`
2186
2186
  const https = require('https');
2187
2187
  const fs = require('fs');
2188
2188
  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.45.1",
3
+ "version": "3.45.2",
4
4
  "description": "CLI tool for interacting with AI agents via multiple interfaces",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",