agent-afk 3.21.0 → 3.21.1

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
@@ -1992,7 +1992,7 @@ ${d}`}function Cd(e,t){let n=gb[t.status];e.out.line(` ${n} ${m.bold(t.jobId)}
1992
1992
  end try
1993
1993
  `;return new Promise(r=>{let o=Nb("osascript",["-e",n],{stdio:["ignore","pipe","pipe"]}),s="",i="";o.stdout?.on("data",a=>{s+=a.toString("utf8")}),o.stderr?.on("data",a=>{i+=a.toString("utf8")}),o.on("error",()=>r({ok:!1,exitCode:null,stderr:i})),o.on("close",a=>{r({ok:a===0&&s.trim()==="ok",exitCode:a,stderr:i})})})}function X0(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function Q0(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 Wb=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],t$=5e3;function n$(e){let t=Date.now()-e;if(t<t$)return"";let n=Math.floor(t/1e3);if(n<60)return m.dim(` ${n}s`);let r=Math.floor(n/60),o=n%60;return m.dim(` ${r}m${o.toString().padStart(2,"0")}s`)}function r$(e,t){let n=" \u{1F4A1} ",r=Math.max(8,t-n.length-1),o=e.length>r?e.slice(0,r-1)+"\u2026":e;return m.dim(n+o)}var Hr=class e{stdout;stdin;onCancel;onBackground;onShiftTab;promptTextFn;history;autocompleteState;formatInputBuffer;scrollRegion;onSubmit;attachments=[];pasting=!1;pasteStartBufferLen=0;clipboardInFlight=!1;clipboardFailureMsg=null;inputMode="streaming";armed=!1;canceled=!1;backgrounded=!1;wasRaw=!1;logUpdate=null;overlay="";input=K.seed("");queued=!1;handleKeypress=null;resizeUnsub=null;spinner=null;spinnerInterval=null;committing=!1;static MAX_DROPDOWN_ROWS=6;constructor(t){this.stdout=t.stdout,this.stdin=t.stdin,this.onCancel=t.onCancel,this.onBackground=t.onBackground,this.onShiftTab=t.onShiftTab;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.onSubmit=t.onSubmit}isArmed(){return this.armed}setOnSubmit(t){this.onSubmit=t??void 0}setOnCancel(t){this.onCancel=t??void 0}getOnCancel(){return this.onCancel}setOnBackground(t){this.onBackground=t??void 0}setOnShiftTab(t){this.onShiftTab=t??void 0}setInputMode(t){let n=this.inputMode;if(this.inputMode=t,n==="idle"&&t==="streaming"){this.canceled=!1,this.backgrounded=!1,this.autocompleteState?.reset(),this.repaint();return}if(t==="idle"&&this.queued&&this.onSubmit){let r=this.input.buffer,o=[...this.attachments],s=this.onSubmit;this.queued=!1,this.input=K.seed(""),this.attachments=[],this.repaint(),s({text:r,attachments:o});return}n!==t&&this.repaint()}getInputMode(){return this.inputMode}async arm(){if(this.armed)throw new Error("TerminalCompositor: arm() called while already armed");if(!(!this.stdout.isTTY||!this.stdin.isTTY)){this.logUpdate||(this.logUpdate=e$(this.stdout)),this.wasRaw=this.stdin.isRaw??!1;try{this.stdin.setRawMode(!0)}catch{this.logUpdate=null,this.wasRaw=!1;return}try{this.stdout.write("\x1B[?2004h")}catch{}if(this.stdin.resume(),Z0(this.stdin),this.handleKeypress=(t,n)=>this.dispatchKey(t,n),this.stdin.on("keypress",this.handleKeypress),this.resizeUnsub=st.subscribe(()=>{this.repaint()}),this.armed=!0,this.canceled=!1,this.stdout.isTTY){let t=this.stdout.rows??24,n=Math.max(1,t-1);this.stdout.write(`\x1B[${n};1H`)}this.repaint()}}disarm(){if(this.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.spinner=null,!this.armed){this.resetState();return}if(this.handleKeypress&&(this.stdin.removeListener("keypress",this.handleKeypress),this.handleKeypress=null),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.logUpdate)try{this.logUpdate.clear(),this.logUpdate.done()}catch{}if(this.stdout.isTTY&&this.stdin.isTTY){try{this.stdout.write("\x1B[?2004l")}catch{}try{this.stdin.setRawMode(this.wasRaw)}catch{}}this.armed=!1,this.resetState()}setOverlay(t){t!==this.overlay&&(this.overlay=t,this.repaint())}setSpinner(t){if(!this.stdout.isTTY)return;if(!t.enabled){this.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.spinner&&(this.spinner=null,this.repaint());return}if(this.spinner)return;let n=t.rotateVerbEveryMs??3500,r=Date.now();this.spinner={frameIndex:0,verb:Od(),nextVerbRotateAt:r+n,startedAt:r,tipPool:Ib(),currentTip:null},this.spinnerInterval=setInterval(()=>this.tickSpinner(n),80),this.repaint()}tickSpinner(t){if(!this.spinner)return;this.spinner.frameIndex=(this.spinner.frameIndex+1)%Wb.length;let n=Date.now();n>=this.spinner.nextVerbRotateAt&&(this.spinner.verb=Od(),this.spinner.nextVerbRotateAt=n+t),this.spinner.currentTip=Pb(this.spinner.tipPool,{startedAt:this.spinner.startedAt,now:n}),this.repaint()}commitAbove(t){let n=r=>{this.scrollRegion?this.scrollRegion.withFullScrollRegion(r):r()};if(!this.armed||!this.logUpdate){n(()=>{this.stdout.write(t+`
1994
1994
  `)});return}this.committing=!0;try{this.logUpdate.clear(),n(()=>{this.stdout.write(t+`
1995
- `)})}finally{this.committing=!1}this.repaint()}getBuffer(){return{text:this.input.buffer,queued:this.queued}}getAttachments(){return[...this.attachments]}renderInputLine(){let n=this.input.buffer.slice(0,this.input.cursor),r=bo(this.input.buffer,this.input.cursor),o=this.input.cursor<this.input.buffer.length?this.input.buffer.slice(this.input.cursor,r):" ",s=this.input.cursor<this.input.buffer.length?this.input.buffer.slice(r):"",i=this.formatInputBuffer?.(n)??n,a=this.formatInputBuffer?.(s)??s,l=m.user.inverse(o);return this.promptTextFn()+i+l+a+""}updateAutocomplete(){let t=this.autocompleteState;if(!t)return;t.trigger=Zo(this.input.buffer,this.input.cursor);let n=`${this.input.cursor}:${this.input.buffer}`;t.suppressedSignature!==null&&t.suppressedSignature!==n&&(t.suppressedSignature=null),t.trigger&&t.suppressedSignature===null?(t.trigger.kind==="slash"?t.candidates=ha(t.trigger.query).slice(0,12):t.trigger.kind==="file"?t.candidates=ya(t.trigger.query).slice(0,12):t.candidates=es(t.trigger.command,t.trigger.query),t.dropdownOpen=t.candidates.length>0):(t.dropdownOpen=!1,t.candidates=[]),t.selectedIndex>=t.candidates.length&&(t.selectedIndex=Math.max(0,t.candidates.length-1)),t.viewportStart>t.selectedIndex&&(t.viewportStart=t.selectedIndex),t.selectedIndex>=t.viewportStart+e.MAX_DROPDOWN_ROWS&&(t.viewportStart=t.selectedIndex-e.MAX_DROPDOWN_ROWS+1)}renderDropdownRows(){let t=this.autocompleteState;if(!t?.dropdownOpen)return[];let n=this.stdout.columns||80;if(n<=40)return[];let r=Math.min(n-4,60),o=Math.min(t.candidates.length-t.viewportStart,e.MAX_DROPDOWN_ROWS),s=[];for(let i=0;i<o;i++){let a=t.viewportStart+i,l=t.candidates[a];if(!l)continue;let c=ga(l,a===t.selectedIndex,r,t.trigger?.kind),d=Ye(c).length,u=Math.max(0,Math.ceil(d/n)-1);s.push(c);for(let p=0;p<u;p++)s.push("")}return s}repaint(){if(!this.armed||!this.logUpdate||this.committing)return;let t=this.renderInputLine(),n=this.overlay?this.overlay.split(`
1995
+ `)})}finally{this.committing=!1}this.repaint()}getBuffer(){return{text:this.input.buffer,queued:this.queued}}getAttachments(){return[...this.attachments]}renderInputLine(){let t=this.queued?" "+m.dim("[queued]"):"",n=this.input.buffer.slice(0,this.input.cursor),r=bo(this.input.buffer,this.input.cursor),o=this.input.cursor<this.input.buffer.length?this.input.buffer.slice(this.input.cursor,r):" ",s=this.input.cursor<this.input.buffer.length?this.input.buffer.slice(r):"",i=this.formatInputBuffer?.(n)??n,a=this.formatInputBuffer?.(s)??s,l=m.user.inverse(o);return this.promptTextFn()+i+l+a+t}updateAutocomplete(){let t=this.autocompleteState;if(!t)return;t.trigger=Zo(this.input.buffer,this.input.cursor);let n=`${this.input.cursor}:${this.input.buffer}`;t.suppressedSignature!==null&&t.suppressedSignature!==n&&(t.suppressedSignature=null),t.trigger&&t.suppressedSignature===null?(t.trigger.kind==="slash"?t.candidates=ha(t.trigger.query).slice(0,12):t.trigger.kind==="file"?t.candidates=ya(t.trigger.query).slice(0,12):t.candidates=es(t.trigger.command,t.trigger.query),t.dropdownOpen=t.candidates.length>0):(t.dropdownOpen=!1,t.candidates=[]),t.selectedIndex>=t.candidates.length&&(t.selectedIndex=Math.max(0,t.candidates.length-1)),t.viewportStart>t.selectedIndex&&(t.viewportStart=t.selectedIndex),t.selectedIndex>=t.viewportStart+e.MAX_DROPDOWN_ROWS&&(t.viewportStart=t.selectedIndex-e.MAX_DROPDOWN_ROWS+1)}renderDropdownRows(){let t=this.autocompleteState;if(!t?.dropdownOpen)return[];let n=this.stdout.columns||80;if(n<=40)return[];let r=Math.min(n-4,60),o=Math.min(t.candidates.length-t.viewportStart,e.MAX_DROPDOWN_ROWS),s=[];for(let i=0;i<o;i++){let a=t.viewportStart+i,l=t.candidates[a];if(!l)continue;let c=ga(l,a===t.selectedIndex,r,t.trigger?.kind),d=Ye(c).length,u=Math.max(0,Math.ceil(d/n)-1);s.push(c);for(let p=0;p<u;p++)s.push("")}return s}repaint(){if(!this.armed||!this.logUpdate||this.committing)return;let t=this.renderInputLine(),n=this.overlay?this.overlay.split(`
1996
1996
  `):[],r=this.spinner?m.meta(`${Wb[this.spinner.frameIndex]} ${this.spinner.verb}...`)+n$(this.spinner.startedAt):null,o=this.spinner?.currentTip?r$(this.spinner.currentTip.text,this.stdout.columns??80):null,s=null;this.attachments.length>0?s=ba(this.attachments):this.clipboardFailureMsg!==null&&(s=m.dim(this.clipboardFailureMsg),this.clipboardFailureMsg=null);let i=this.renderDropdownRows(),a=Math.max(1,(this.stdout.rows??24)-1),l=(r?1:0)+(o?1:0)+(s?1:0)+1+i.length,c=Math.max(0,a-l),d=n.length>c?n.slice(-c):n,u=[];u.push(...d),r&&u.push(r),o&&u.push(o),s&&u.push(s),u.push(t),u.push(...i),this.logUpdate(u.join(`
1997
1997
  `))}resetState(){this.overlay="",this.input=K.seed(""),this.queued=!1,this.canceled=!1,this.backgrounded=!1,this.attachments=[],this.pasting=!1,this.pasteStartBufferLen=0,this.clipboardFailureMsg=null,this.autocompleteState?.reset(),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null)}applyEdit(t){return t===this.input?!1:(this.input=t,this.queued=!1,this.updateAutocomplete(),this.pasting||this.repaint(),!0)}applyDropdownSelection(){let t=this.autocompleteState;if(!t?.dropdownOpen||t.candidates.length===0)return!1;let n=t.candidates[t.selectedIndex];if(!n)return!1;let r=this.input.buffer.slice(0,this.input.cursor),o=this.input.buffer.slice(this.input.cursor),s,i;if(t.trigger?.kind==="slash"){let l=/\/[A-Za-z_-]*$/.exec(r);s=l?r.length-l[0].length:this.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else if(t.trigger?.kind==="flag"){let l=/--[a-z0-9-]*$/.exec(r);s=l?r.length-l[0].length:this.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else{let l=r.search(/[^\s]*$/);s=l>=0?l:this.input.cursor,i=n.value}let a=K.replaceRange(this.input,{start:s,end:this.input.cursor},i);return a===this.input?!1:(this.input=a,t.dropdownOpen=!1,t.candidates=[],t.viewportStart=0,t.selectedIndex=0,this.queued=!1,this.updateAutocomplete(),this.repaint(),!0)}dispatchKey(t,n){if(!this.armed)return;let r=this.autocompleteState,o=n?.sequence??"";if(o==="\x1B[200~"){this.pasting=!0,this.pasteStartBufferLen=this.input.buffer.length;return}if(o==="\x1B[201~"){this.pasting=!1;let a=l=>{this.clipboardInFlight||(this.clipboardInFlight=!0,Jn().then(c=>{c?(this.clipboardFailureMsg=null,this.attachments.push(c),this.repaint()):l==="flag-missing"&&(this.clipboardFailureMsg="[clipboard: no image found]",this.repaint())}).catch(()=>{}).finally(()=>{this.clipboardInFlight=!1}))};this.input.buffer.length===this.pasteStartBufferLen?a("flag-missing"):(this.repaint(),a("silent"));return}if(n?.name==="escape"){if(r?.dropdownOpen){r.suppressedSignature=`${this.input.cursor}:${this.input.buffer}`,r.dropdownOpen=!1,r.candidates=[],this.repaint();return}if(this.inputMode==="idle"||this.canceled)return;this.canceled=!0,this.input.buffer.length>0&&!this.queued&&(this.queued=!0,this.repaint()),this.onCancel&&this.onCancel();return}if(n?.ctrl&&n?.name==="c"){if(this.inputMode==="idle"){this.onCancel&&this.onCancel();return}if(this.canceled)return;this.canceled=!0,this.input.buffer.length>0&&!this.queued&&(this.queued=!0,this.repaint()),this.onCancel&&this.onCancel();return}if(n?.ctrl&&n?.name==="v"){this.clipboardInFlight||(this.clipboardInFlight=!0,Jn().then(a=>{a?(this.clipboardFailureMsg=null,this.attachments.push(a)):this.clipboardFailureMsg="[clipboard: no image found]",this.repaint()}).catch(()=>{}).finally(()=>{this.clipboardInFlight=!1}));return}if(n?.ctrl&&n?.name==="p"||n?.name==="up"){if(r?.dropdownOpen){r.selectedIndex>0&&(r.selectedIndex--,r.selectedIndex<r.viewportStart&&(r.viewportStart=r.selectedIndex),this.repaint());return}if(this.history){let a=this.history.back(this.input.buffer);a!==null&&this.applyEdit(K.seed(a))}return}if(n?.ctrl&&n?.name==="n"||n?.name==="down"){if(r?.dropdownOpen){r.selectedIndex<r.candidates.length-1&&(r.selectedIndex++,r.selectedIndex>=r.viewportStart+e.MAX_DROPDOWN_ROWS&&(r.viewportStart=r.selectedIndex-e.MAX_DROPDOWN_ROWS+1),this.repaint());return}if(this.history){let a=this.history.forward();a!==null&&this.applyEdit(K.seed(a))}return}if(n?.name==="return"){let a=n?.shift===!0||o==="\x1B[13;2u",l=n?.meta===!0;if(a||l){this.history?.resetRecall(),this.applyEdit(K.insert(this.input,`
1998
1998
  `));return}if(this.pasting){this.input=K.insert(this.input,`
@@ -2110,7 +2110,7 @@ _ended: ${new Date().toISOString()}_
2110
2110
  `)}function tF(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 qw(e,t,n){let r=[];n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e});for(let o of t)r.push({type:"image",source:{type:"base64",media_type:o.mediaType,data:o.bytes.toString("base64")}});return r}async function Jw(e,t,n,r,o="summary",s,i,a){let l=Fb(e.text,e.attachments);r.setInFlight(!0);let c="",d=!1,u=!1,p=!1,f=!1,g,h=!1,b=[],y=new Map,w=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,T=r.getCompositor?r.getCompositor():null,x=()=>new zr({out:Jr(s),thinkingMode:o,...w?{activeSkillName:w}:{},onCancel:()=>{t.interrupt().catch(C=>{Ke()&&console.error(" "+m.error("session.interrupt() failed:"),C)})},...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}:{},...T?{compositor:T}:{}}),S=x(),v=async()=>{if(!p){p=!0;try{await S.dispose()}catch{}}},A=async()=>{await S.arm();let C=S.getCompositor();if(s&&C){let D=C;s.fn=R=>D.commitAbove(R)}r.setActiveCompositor?.(C),r.rearmStatus?.()};try{T?T.commitAbove(""):console.log(),await A(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0});let C=e.attachments.length===0?e.text:qw(e.text,e.attachments),D=t.sendMessageStream(C);if(await nn(($,I)=>{S.process($,I)},async()=>{for await(let $ of D){if(h&&i){let I=w??e.text.slice(0,40),O=i.register(I),U=sa(O,i);ia(D,c,l,O,i,U,n,r.onTurnComplete,t.abortSignal),await v(),(s??{fn:console.log}).fn(m.dim(` \u2192 backgrounded as ${O.id}: ${O.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if($.type==="chunk"&&$.chunk.type==="content"?(c+=$.chunk.content,d=!0):$.type==="message"&&!d&&(c=$.message.content),$.type==="chunk"&&$.chunk.type==="tool_use_detail"){let I=$.chunk,O={toolName:I.toolName,toolUseId:I.toolUseId,input:I.toolInput};y.set(I.toolUseId,O),b.push(O)}else if($.type==="chunk"&&$.chunk.type==="tool_result"){let I=$.chunk,O=y.get(I.toolUseId);O&&(O.result=I.content,O.isError=I.isError,y.delete(I.toolUseId))}if($.type==="paused"){await v(),(s??{fn:console.log}).fn(cm({reason:$.reason,...$.resetsAt!==void 0?{resetsAt:$.resetsAt}:{},...$.accountId!==void 0?{accountId:$.accountId}:{},...$.autoResume!==void 0?{autoResume:$.autoResume}:{}}));continue}if($.type==="resumed"){let I=$.hotSwapped&&$.accountId?`\u25B6 Resumed on ${$.accountId}`:"\u25B6 Resumed";c="",d=!1,b.length=0,y.clear(),f=!1,g=void 0,u=!1,h=!1,S=x(),p=!1,await A(),(s??{fn:console.log}).fn(m.success(I));continue}if($.type==="error"){await v(),mr(pr($.error)),u=!0;continue}S.process($),$.type==="done"&&(f=!0,g=$.metadata)}}),await v(),f){Wn(n,l,c,g,b),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let $=O=>{s?s.fn(O):console.log(O)};(d||b.length>0)&&$(`
2111
2111
  `);let I=Gw(c);if(I&&($(zw(I)),$(""),r.onTerminalState))try{r.onTerminalState(I)}catch{}if(nF(g,n,$),r.onAfterTurn){let O=r.onAfterTurn();O instanceof Promise&&await O.catch(()=>{})}}}catch(C){await v(),u||mr(pr(C))}finally{await v(),s&&(s.fn=C=>console.log(C)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function nF(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(se(e.durationMs)),e.totalCostUsd!==void 0&&r.push(je(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),s=Number(e.usage?.output_tokens??0);o+s>0&&r.push(Z(o+s)+" tok"),r.length>0&&n(m.dim(" \u25E6 "+r.join(" \xB7 ")));let i=yd(t),a=Ze(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 ~${Z(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 ${Z(a)}`))}n("")}function Vw(e={}){let t=e.load??na,n=e.onResize??(i=>st.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=eb(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:ra(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var vu={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 Yw(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(d=>{let u=vu[d];return u.color(`${u.glyph} ${u.label}`)}),i=m.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,te()-2);if(z(a)<=l)return a;let c=r+n.map(d=>vu[d].color(vu[d].glyph)).join(m.dim(" "))+i;return ce(c,l)}}}var Tu=["\u25D0","\u25D1","\u25D2","\u25D3"],il=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=st.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%Tu.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(Tu[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(`${Z(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(se(l)),a.length>0&&i.push(m.dim(a.join(" \xB7 "))),ce(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=m.brand(Tu[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(se(a))),ce(" "+i.join(" "),n)}};function al(e,t){let n=m.brand("afk")+m.dim(` (${e})`),r=t?m.warning(" \u25CF plan"):"";return n+r+m.dim(" \u203A ")}async function Xw(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async p=>{Ke()&&(o=Qi(p)),await Ma(e.session.current),Ke()&&(s=Hk())}).catch(()=>{});let i=await Uw(),a=new sl({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,d,u;try{await a.armCompositor({promptFn:()=>al(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{let h=e.slashCtx;h.stats.planMode&&h.stats.pendingPlanExit?(h.stats.pendingPlanExit=!1,yt(h,!1,{closureSummarySkipped:!0}).catch(()=>{})):yt(h).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine}),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor(),c=Vw();let p=Yw();e.clearVerdictLedger=()=>p.reset(),d=new oa,ub(d),yb(d),wb(d),bb(e.backgroundRegistry),u=new il(d,e.backgroundRegistry),u.setRowCountChangeHandler(h=>{e.statusLine.setExtraRows(h)}),u.start();let f=50,g=[];for(d.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 v of s)e.replRenderer.writeLine(v);e.replRenderer.writeLine(""),s=[]}for(;g.length>0;){let v=g.shift(),A=v.status==="succeeded"?"\u2713":"\u2717",C=[];if(v.resultText){let R=v.resultText.trim().split(`
2112
2112
  `)[0]?.slice(0,80)??"";R&&C.push(R)}v.error&&C.push(v.error.message);let D=[v.stats.toolUses>0?`${v.stats.toolUses} tools`:"",v.stats.tokens>0?`${Math.round(v.stats.tokens/1e3)}k tok`:"",v.stats.durationMs>0?`${Math.round(v.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");D&&C.push(D),e.replRenderer.writeLine(Qt({kind:v.status==="succeeded"?"checkpoint":"diagnosis",title:`${A} ${v.id} ${v.label}`,body:C})),e.replRenderer.writeLine("")}let h=c.renderIfChanged(e.stats.sessionId);if(h.length>0){for(let v of h)e.replRenderer.writeLine(v);e.replRenderer.writeLine("")}let b=p.render();b&&e.replRenderer.writeLine(b);let y,w;if(l!==void 0){let v=l;l=void 0;let A=al(e.stats.model,e.stats.planMode),C=Kn({buffer:v.text,promptText:A,isTTY:!!process.stdout.isTTY,attachmentSummary:Wr([...v.attachments])});e.replRenderer.writeLine(C),y=v.text.trim(),w=v.attachments}else{let v=await a.readLine({promptFn:()=>al(e.stats.model,e.stats.planMode),onSigint:r,onShiftTab:()=>{let A=e.slashCtx;A.stats.planMode&&A.stats.pendingPlanExit?(A.stats.pendingPlanExit=!1,yt(A,!1,{closureSummarySkipped:!0}).catch(()=>{})):yt(A).catch(()=>{}),e.statusLine.rearm()}});y=v.text.trim(),w=v.attachments}if(!y&&w.length===0)continue;let T=!1;if(y.startsWith("/")){let v=await $y(y,e.slashCtx,w);if(v.handled){if(v.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()),v.result!==null&&typeof v.result=="object"&&"kind"in v.result&&v.result.kind==="submit"){l={text:v.result.message,attachments:w??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}T=!0}i.push(y);let x=y;if(T){let v=hd(y);if(v){let A=v.name.replace(/^\//,"").split(":").pop()??"";if(A&&Qd(A)){let C={skillName:A,rawArgs:v.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},D=e.session.current.sessionId,R=ss(D),$=Date.now();H(`[afk trace] preflight.start commandName=${A}`);let I=!1,O=await os(C,{cwd:e.stats.cwd??process.cwd(),artifactDir:R},U=>{Ke()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${A}) failed: `)+(U instanceof Error?U.message:String(U)))});I=O!==null,H(`[afk trace] preflight.end commandName=${A} durationMs=${Date.now()-$} success=${I}`),x=tu(O?.manifestBlock,y)}}}let S;if(e.firstTurnHook&&e.stats.totalTurns===0){let v=e.firstTurnHook;e.firstTurnHook=void 0,S=Promise.resolve().then(()=>v(y)).catch(A=>{e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(A instanceof Error?A.message:String(A)))})}await Jw({text:x,attachments:w},e.session.current,e.stats,{setInFlight(v){n.turnInFlight=v},async onTurnComplete(v,A){await t.appendTurn(v,A)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await Gy(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:v=>p.push(v),setActiveCompositor:v=>{n.activeCompositor=v},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:v=>a.setBackgroundHandler(v)},e.options.thinkingUi,e.completionWriter,d,a.toRunTurnRefs(al(e.stats.model,e.stats.planMode))),S!==void 0&&await S}}finally{if(d!==void 0)for(let p of d.running())d.cancel(p.id);u?.stop(),c?.dispose(),await a.dispose()}}import{execFile as rF}from"node:child_process";import{dirname as oF,isAbsolute as sF,resolve as iF}from"node:path";import{promisify as aF}from"node:util";var Qw=aF(rF),lF=3e3,cF=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function dF(){let t=(await Qw("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=sF(t)?t:iF(process.cwd(),t);return oF(n)}async function Zw(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await dF()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),lF)});try{let o=It({execFile:Qw,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=>cF.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}import{promises as uF}from"node:fs";import{dirname as pF,join as mF}from"node:path";import{randomBytes as fF}from"node:crypto";var gF=["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(`
2113
- `),eS=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Eu=30,hF=1024,yF=8e3,bF="haiku";async function kF(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=TF(n,hF),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??yF),i=t.signal?EF([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Va({token:t.token,model:t.model??bF,system:gF,user:r,maxTokens:32,signal:i})}catch{return null}finally{clearTimeout(s)}let l=wF(a);if(l===null)return null;let c=pF(t.worktreePath);return await SF(l,c)}function wF(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(eS.test(t)&&t.length<=Eu)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>Eu)break;o=i}return eS.test(o)?o:null}async function SF(e,t){if(!await vF(mF(t,e)))return e;let n=fF(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Eu-5)}-${n}`}async function vF(e){try{return await uF.access(e),!0}catch{return!1}}function TF(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 EF(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 tS(e){let t=await kF(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}:{}});if(t===null)return{status:"skipped",reason:"slug generation returned null"};let r=await(e.renameFn??Rg)(e.handle,t,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return r.ok?(e.session&&e.session.setCwd(r.newPath),{status:"renamed",oldPath:r.oldPath,newPath:r.newPath,oldBranch:r.oldBranch,newBranch:r.newBranch}):(r.partial==="branch"&&e.session&&e.session.setCwd(e.handle.path),{status:"failed",reason:r.reason,...r.partial!==void 0?{partial:r.partial}:{}})}N();import{spawn as nS}from"child_process";import{existsSync as _F,mkdirSync as IF,readFileSync as rS,unlinkSync as PF,writeFileSync as MF}from"fs";import{get as $F}from"https";import{join as oS}from"path";import{readFileSync as xF}from"fs";import{dirname as AF,join as CF}from"path";import{fileURLToPath as RF}from"url";function Kt(){try{return"3.21.0"}catch{}try{let e=AF(RF(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(xF(CF(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var OF=64*1024,DF=1440*60*1e3,LF="update-check.json",FF="pending-update.json";function sS(){return oS($s(),LF)}function xu(){return oS($s(),FF)}function iS(){let e=$s();_F(e)||IF(e,{recursive:!0})}function NF(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 jF(){try{let e=rS(sS(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function UF(){try{iS();let e=`
2113
+ `),eS=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Eu=30,hF=1024,yF=8e3,bF="haiku";async function kF(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=TF(n,hF),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??yF),i=t.signal?EF([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Va({token:t.token,model:t.model??bF,system:gF,user:r,maxTokens:32,signal:i})}catch{return null}finally{clearTimeout(s)}let l=wF(a);if(l===null)return null;let c=pF(t.worktreePath);return await SF(l,c)}function wF(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(eS.test(t)&&t.length<=Eu)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>Eu)break;o=i}return eS.test(o)?o:null}async function SF(e,t){if(!await vF(mF(t,e)))return e;let n=fF(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Eu-5)}-${n}`}async function vF(e){try{return await uF.access(e),!0}catch{return!1}}function TF(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 EF(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 tS(e){let t=await kF(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}:{}});if(t===null)return{status:"skipped",reason:"slug generation returned null"};let r=await(e.renameFn??Rg)(e.handle,t,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return r.ok?(e.session&&e.session.setCwd(r.newPath),{status:"renamed",oldPath:r.oldPath,newPath:r.newPath,oldBranch:r.oldBranch,newBranch:r.newBranch}):(r.partial==="branch"&&e.session&&e.session.setCwd(e.handle.path),{status:"failed",reason:r.reason,...r.partial!==void 0?{partial:r.partial}:{}})}N();import{spawn as nS}from"child_process";import{existsSync as _F,mkdirSync as IF,readFileSync as rS,unlinkSync as PF,writeFileSync as MF}from"fs";import{get as $F}from"https";import{join as oS}from"path";import{readFileSync as xF}from"fs";import{dirname as AF,join as CF}from"path";import{fileURLToPath as RF}from"url";function Kt(){try{return"3.21.1"}catch{}try{let e=AF(RF(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(xF(CF(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var OF=64*1024,DF=1440*60*1e3,LF="update-check.json",FF="pending-update.json";function sS(){return oS($s(),LF)}function xu(){return oS($s(),FF)}function iS(){let e=$s();_F(e)||IF(e,{recursive:!0})}function NF(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 jF(){try{let e=rS(sS(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function UF(){try{iS();let e=`
2114
2114
  const https = require('https');
2115
2115
  const fs = require('fs');
2116
2116
  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.21.0",
3
+ "version": "3.21.1",
4
4
  "description": "CLI tool for interacting with AI agents via multiple interfaces",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",