agent-afk 2.19.0 → 2.19.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.
- package/dist/cli.mjs +1 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -1956,7 +1956,7 @@ _ended: ${new Date().toISOString()}_
|
|
|
1956
1956
|
`)}function pC(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 mC(e,t){let n=[];e&&n.push({type:"text",text:e});for(let r of t)n.push({type:"image",source:{type:"base64",media_type:r.mediaType,data:r.bytes.toString("base64")}});return n}async function zf(e,t,n,r,o="summary",s,a){let i=Af(e.text,e.attachments);r.setInFlight(!0);let l="",c=!1,d,u=!1,m=!1,f=!1,g,y=!1,S=[],h=new Map,b=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,k=new Ut({out:Nn(),thinkingMode:o,...b?{activeSkillName:b}:{},onCancel:()=>{t.interrupt().catch(v=>{Pe()&&console.error(" "+p.error("session.interrupt() failed:"),v)})},...a?{onBackground:()=>{y=!0}}:{}}),P=async()=>{if(!m){m=!0;try{await k.dispose()}catch{}}};try{console.log(),await k.arm();let v=k.getCompositor();if(s&&v){let T=v;s.fn=C=>T.commitAbove(C)}r.setActiveCompositor?.(v),r.rearmStatus?.();let A=e.attachments.length===0?e.text:mC(e.text,e.attachments),E=t.sendMessageStream(A);if(await wn(k.sink,async()=>{for await(let T of E){if(y&&a){let C=b??e.text.slice(0,40),I=a.register(C),R=ns(I,a);rs(E,l,i,I,a,R,n,r.onTurnComplete,t.abortSignal),await P(),console.log(p.dim(` \u2192 backgrounded as ${I.id}: ${I.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(T.type==="chunk"&&T.chunk.type==="content"?(l+=T.chunk.content,c=!0):T.type==="message"&&!c&&(l=T.message.content),T.type==="chunk"&&T.chunk.type==="tool_use_detail"){let C=T.chunk,I={toolName:C.toolName,toolUseId:C.toolUseId,input:C.toolInput};h.set(C.toolUseId,I),S.push(I)}else if(T.type==="chunk"&&T.chunk.type==="tool_result"){let C=T.chunk,I=h.get(C.toolUseId);I&&(I.result=C.content,I.isError=C.isError,h.delete(C.toolUseId))}if(T.type==="paused"){await P(),console.log(ql({reason:T.reason,...T.resetsAt!==void 0?{resetsAt:T.resetsAt}:{},...T.accountId!==void 0?{accountId:T.accountId}:{}}));continue}if(T.type==="resumed"){let C=T.hotSwapped&&T.accountId?`\u25B6 Resumed on ${T.accountId}`:"\u25B6 Resumed";console.log(p.success(C));continue}if(T.type==="error"){await P(),bn(yn(T.error)),u=!0;continue}k.process(T),T.type==="done"&&(f=!0,g=T.metadata)}}),!m){let T=k.getCompositor();if(T)try{let{text:C,queued:I}=T.getBuffer();I&&C.length>0&&(d=C)}catch{}}if(await P(),f){Jo(n,i,l,g,S),r.onTurnComplete&&await r.onTurnComplete(i,l).catch(()=>{}),c&&console.log(`
|
|
1957
1957
|
`);let T=Kf(l);if(T&&(console.log(Gf(T)),console.log(),r.onTerminalState))try{r.onTerminalState(T)}catch{}if(fC(g,n),r.onAfterTurn){let C=r.onAfterTurn();C instanceof Promise&&await C.catch(()=>{})}}}catch(v){await P(),u||bn(yn(v))}finally{await P(),s&&(s.fn=v=>console.log(v)),r.setActiveCompositor?.(null),r.setInFlight(!1),r.rearmStatus?.()}return d}function fC(e,t){if(!e)return;let n=[];e.durationMs&&n.push(me(e.durationMs)),e.totalCostUsd!==void 0&&n.push(Ie(e.totalCostUsd));let r=Number(e.usage?.input_tokens??0),o=Number(e.usage?.output_tokens??0);r+o>0&&n.push(G(r+o)+" tok"),n.length>0&&console.log(p.dim(" \u25E6 "+n.join(" \xB7 ")));let s=sa(t);if(s>.5){let a=s>.8?p.error:p.warning;console.log(a(` context ${Math.round(s*100)}% used of ${G(tt(t.model))}`))}console.log()}function qf(e={}){let t=e.load??Qo,n=e.onResize??(a=>vt.subscribe(a)),r="",o,s=n(()=>{r=""});return{renderIfChanged(a){let i=a??"unbound",l=t(i),c=Np(l);return i===o&&c===r?[]:(o=i,r=c,c===""?[]:es(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var Ua={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.info,label:"interrupted"}};function Yf(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(d=>{let u=Ua[d];return u.color(`${u.glyph} ${u.label}`)}),a=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),i=r+s.join(o)+a,l=Math.max(20,Q()-2);if(B(i)<=l)return i;let c=r+n.map(d=>Ua[d].color(Ua[d].glyph)).join(p.dim(" "))+a;return pe(c,l)}}}var Vf=["\u25D0","\u25D1","\u25D2","\u25D3"],Ms=class{stream;manager;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;rowCount=0;onRowCountChange;constructor(t,n={}){this.manager=t,this.stream=n.stream??process.stdout,this.throttleMs=n.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.resizeUnsub=vt.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%Vf.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.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(),n=t.length;if(n!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=n,this.onRowCountChange?.(n)),n===0)return;let o=(this.stream.rows??24)-n;this.stream.write("\x1B[s");for(let s=0;s<t.length;s++){let a=t[s],i=o+s;this.stream.write(`\x1B[${i};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatTaskLine(a))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let n=(this.stream.rows??24)-this.rowCount;this.stream.write("\x1B[s");for(let r=0;r<this.rowCount;r++)this.stream.write(`\x1B[${n+r};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}formatTaskLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(Vf[this.spinnerIndex]),o=p.dim(t.id),s=p.bold(t.label),a=[r,o,s];t.progressDescription&&a.push(p.dim(t.progressDescription));let i=[];t.stats.toolUses>0&&i.push(`${t.stats.toolUses} tool${t.stats.toolUses===1?"":"s"}`),t.stats.tokens>0&&i.push(`${G(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return i.push(me(l)),i.length>0&&a.push(p.dim(i.join(" \xB7 "))),pe(" "+a.join(" "),n)}};function Jf(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function Xf(e,t,n,r){let o=null,s=[];e.session.waitForInitialization().then(async g=>{Pe()&&(o=Zo(g)),await qm(e.session),Pe()&&(s=zm())}).catch(()=>{});let a=await Hf(),i,l=qf(),c=Yf(),d=new ts;Vp(d),Zp(d),em(d);let u=new Ms(d);u.setRowCountChangeHandler(g=>{e.statusLine.setExtraRows(g)}),u.start();let m=50,f=[];d.on("complete",g=>{f.length>=m&&f.shift(),f.push(g)});try{for(;;){if(o&&(e.replRenderer.writeLine(o),e.replRenderer.writeLine(""),o=null),s.length>0){for(let k of s)e.replRenderer.writeLine(k);e.replRenderer.writeLine(""),s=[]}for(;f.length>0;){let k=f.shift(),P=k.status==="succeeded"?"\u2713":"\u2717",v=[];if(k.resultText){let E=k.resultText.trim().split(`
|
|
1958
1958
|
`)[0]?.slice(0,80)??"";E&&v.push(E)}k.error&&v.push(k.error.message);let A=[k.stats.toolUses>0?`${k.stats.toolUses} tools`:"",k.stats.tokens>0?`${Math.round(k.stats.tokens/1e3)}k tok`:"",k.stats.durationMs>0?`${Math.round(k.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");A&&v.push(A),e.replRenderer.writeLine(Tt({kind:k.status==="succeeded"?"checkpoint":"diagnosis",title:`${P} ${k.id} ${k.label}`,body:v})),e.replRenderer.writeLine("")}let g=l.renderIfChanged(e.stats.sessionId);if(g.length>0){for(let k of g)e.replRenderer.writeLine(k);e.replRenderer.writeLine("")}let y=c.render();y&&e.replRenderer.writeLine(y);let S,h;if(i!==void 0){let k=i;i=void 0;let P=Jf(e.stats.model,e.stats.planMode),v=Tr({buffer:k,promptText:P,isTTY:!!process.stdout.isTTY});e.replRenderer.writeLine(v),S=k.trim(),h=[]}else{let k=await Uf({rl:e.rl,promptFn:()=>Jf(e.stats.model,e.stats.planMode),onSigint:r,statusLine:e.statusLine,compositor:n.activeCompositor??void 0,history:a,onShiftTab:()=>{let P=e.slashCtx;P.stats.planMode&&P.stats.pendingPlanExit?(P.stats.pendingPlanExit=!1,ft(P,!1,{closureSummarySkipped:!0}).catch(()=>{})):ft(P).catch(()=>{}),e.statusLine.rearm()}});S=k.text.trim(),h=k.attachments}if(!S&&h.length===0)continue;if(S.startsWith("/")){let k=await Tp(S,e.slashCtx);if(k.handled){if(k.result==="exit"){e.rl.close();return}if((S==="/clear"||S.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),c.reset()),k.result!==null&&typeof k.result=="object"&&"kind"in k.result&&k.result.kind==="submit"){i=k.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}}a.push(S);let b;if(e.firstTurnHook&&e.stats.totalTurns===0){let k=e.firstTurnHook;e.firstTurnHook=void 0,b=Promise.resolve().then(()=>k(S)).catch(P=>{console.warn(p.warning("\u26A0 ")+"first-turn hook failed: "+(P instanceof Error?P.message:String(P)))})}i=await zf({text:S,attachments:h},e.session,e.stats,{setInFlight(k){n.turnInFlight=k},async onTurnComplete(k,P){await t.appendTurn(k,P)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await _p(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:k=>c.push(k),setActiveCompositor:k=>{n.activeCompositor=k,e.replRenderer.setCompositor(k)}},e.options.thinkingUi,e.completionWriter,d),b!==void 0&&await b}}finally{u.stop(),l.dispose()}}import{promises as hC}from"node:fs";import{dirname as yC,join as bC}from"node:path";import{randomBytes as kC}from"node:crypto";import gC from"@anthropic-ai/sdk";import{randomUUID as Zf}from"node:crypto";async function Qf(e){let{token:t,model:n,system:r,user:o,maxTokens:s=64,signal:a,clientFactory:i}=e;if(!t)throw new Error("oneShotCompletion: token required");let l=Vr(t),c=Jn(t,l),d=i?i(c):new gC(c),u=Zf(),m=Zf(),f=Jt(l,u,m),g={};Object.keys(f).length>0&&(g.headers=f),a&&(g.signal=a);let y=await d.messages.create({model:n,max_tokens:s,system:r,messages:[{role:"user",content:o}]},Object.keys(g).length>0?g:void 0),S=[];for(let b of y.content)b.type==="text"&&S.push(b.text);let h=S.join("").trim();return h.length===0&&console.warn("oneShotCompletion: response contained no text blocks \u2014 returning empty string"),h}var wC=["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(`
|
|
1959
|
-
`),eg=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,ja=30,SC=1024,vC=8e3,TC="haiku";async function xC(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=AC(n,SC),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??vC),a=t.signal?_C([t.signal,o.signal]):o.signal,i;try{t.slugGenerator?i=await t.slugGenerator(r,a):i=await Qf({token:t.token,model:t.model??TC,system:wC,user:r,maxTokens:32,signal:a})}catch{return null}finally{clearTimeout(s)}let l=EC(i);if(l===null)return null;let c=yC(t.worktreePath);return await CC(l,c)}function EC(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(eg.test(t)&&t.length<=ja)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 a=`${o}-${r[s]}`;if(a.length>ja)break;o=a}return eg.test(o)?o:null}async function CC(e,t){if(!await PC(bC(t,e)))return e;let n=kC(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,ja-5)}-${n}`}async function PC(e){try{return await hC.access(e),!0}catch{return!1}}function AC(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 _C(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 tg(e){let t=await xC(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??lp)(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}:{}})}import{spawn as ng}from"child_process";import{existsSync as OC,mkdirSync as DC,readFileSync as rg,unlinkSync as FC,writeFileSync as LC}from"fs";import{get as NC}from"https";import{join as og}from"path";import{readFileSync as RC}from"fs";import{dirname as IC,join as MC}from"path";import{fileURLToPath as $C}from"url";function pn(){try{return"2.19.
|
|
1959
|
+
`),eg=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,ja=30,SC=1024,vC=8e3,TC="haiku";async function xC(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=AC(n,SC),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??vC),a=t.signal?_C([t.signal,o.signal]):o.signal,i;try{t.slugGenerator?i=await t.slugGenerator(r,a):i=await Qf({token:t.token,model:t.model??TC,system:wC,user:r,maxTokens:32,signal:a})}catch{return null}finally{clearTimeout(s)}let l=EC(i);if(l===null)return null;let c=yC(t.worktreePath);return await CC(l,c)}function EC(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(eg.test(t)&&t.length<=ja)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 a=`${o}-${r[s]}`;if(a.length>ja)break;o=a}return eg.test(o)?o:null}async function CC(e,t){if(!await PC(bC(t,e)))return e;let n=kC(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,ja-5)}-${n}`}async function PC(e){try{return await hC.access(e),!0}catch{return!1}}function AC(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 _C(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 tg(e){let t=await xC(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??lp)(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}:{}})}import{spawn as ng}from"child_process";import{existsSync as OC,mkdirSync as DC,readFileSync as rg,unlinkSync as FC,writeFileSync as LC}from"fs";import{get as NC}from"https";import{join as og}from"path";import{readFileSync as RC}from"fs";import{dirname as IC,join as MC}from"path";import{fileURLToPath as $C}from"url";function pn(){try{return"2.19.1"}catch{}try{let e=IC($C(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(RC(MC(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}var UC=64*1024,jC=1440*60*1e3,BC="update-check.json",WC="pending-update.json";function sg(){return og(Ur(),BC)}function Ba(){return og(Ur(),WC)}function ig(){let e=Ur();OC(e)||DC(e,{recursive:!0})}function HC(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 a=n[s]??0,i=r[s]??0;if(i>a)return!0;if(i<a)return!1}return!1}function KC(){try{let e=rg(sg(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function GC(){try{ig();let e=`
|
|
1960
1960
|
const https = require('https');
|
|
1961
1961
|
const fs = require('fs');
|
|
1962
1962
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|