agent-afk 3.41.1 → 3.41.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.
- package/dist/cli.mjs +9 -10
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -2031,6 +2031,7 @@ ${u}`}function ed(e,t){let n=Vb[t.status];e.out.line(` ${n} ${p.bold(t.jobId)}
|
|
|
2031
2031
|
`);if(n!==-1&&!this.isInOpenCodeFence(t.slice(0,n)))return n+2;let r=t.match(/\n[ \t]*(?:```|~~~)[ \t]*\n/);return r&&r.index!==void 0?r.index+r[0].length:-1}applyIndent(t){return t.split(`
|
|
2032
2032
|
`).map(n=>n?this.indent+n:"").join(`
|
|
2033
2033
|
`)}isInOpenCodeFence(t){let n=(t.match(/^```[^\n]*$/gm)??[]).length,r=(t.match(/^~~~[^\n]*$/gm)??[]).length;return n%2===1||r%2===1}commitBlock(t){if(!t.trim())return;let n=this.hasMarkdownContent(t),r=this.indent.length,o=Math.max(1,Y()-2),s=Math.max(1,o-r),i;n?i=ct(t,{maxWidth:s}):i=ie(t,s);let a=ie(i,s),c=this.applyIndent(a).replace(/\n+$/,"");this.compositor&&this.compositor.commitAbove(c+`
|
|
2034
|
+
|
|
2034
2035
|
`),this.committed?this.committed+=`
|
|
2035
2036
|
|
|
2036
2037
|
`+c:this.committed+=c}scheduleRepaint(){this.isTTY&&(this.flushing||(this.throttleTimer&&clearTimeout(this.throttleTimer),this.throttleTimer=setTimeout(()=>{this.throttleTimer=null,this.repaint()},this.throttleMs)))}async repaint(){if(this.flushing||!this.isTTY||!this.buffer.trim())return;let t,n=this.indent.length,r=Math.max(1,Y()-2),o=Math.max(1,r-n);this.isInOpenCodeFence(this.buffer)?t=`
|
|
@@ -2039,17 +2040,17 @@ ${u}`}function ed(e,t){let n=Vb[t.status];e.out.line(` ${n} ${p.bold(t.jobId)}
|
|
|
2039
2040
|
`)):this.committed&&this.out.write(this.committed+`
|
|
2040
2041
|
`))}getCommittedOutput(){return this.committed}hasEmitted(){return this.buffer.length>0||this.committed.length>0}getPendingBuffer(){return this.buffer}commitPending(){this.buffer.trim()&&(this.commitBlock(this.buffer),this.buffer="",this.compositor&&this.compositor.setOverlay(""))}dispose(){this.throttleTimer&&(clearTimeout(this.throttleTimer),this.throttleTimer=null),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.logUpdate&&(this.logUpdate.clear(),this.logUpdate=null),this.buffer="",this.committed=""}};var vO=["observing","modeling","choosing","acting","updating"],TO={observing:"observe",modeling:"model",choosing:"choose",acting:"act",updating:"update"};function Hw(){return{stage:"observing",pendingTools:new Set}}function Kw(e,t){let n=e.stage;switch(t.type){case"chunk":{let r=t.chunk;r.type==="tool_use_detail"?(e.pendingTools.add(r.toolUseId),e.stage="acting"):r.type==="tool_result"?(e.pendingTools.delete(r.toolUseId),e.stage=e.pendingTools.size>0?"acting":"updating"):r.type==="thinking"?e.pendingTools.size===0&&(e.stage="modeling"):r.type==="content"&&e.pendingTools.size===0&&(e.stage="choosing");break}case"done":e.pendingTools.clear();break;default:break}return e.stage!==n}function Gw(e,t){return vO.map(r=>{let o=r===e,s=o?"\u25C6":"\u25C7",i=TO[r],a=`${s} ${i}`;return o?t.accent(t.bold(a)):t.dim(a)}).join(t.dim(" \xB7 "))}import EO from"wrap-ansi";var xO="\u25C6 thinking",ja=" ",RO=5,AO=16;function qw(e,t){let n=e.replace(/\s+/g," ").trim();if(!n)return"";let r=t.maxLines??RO,o=Math.max(AO,t.cols-ja.length),i=EO(n,o,{hard:!1,trim:!0,wordWrap:!0}).split(`
|
|
2041
2042
|
`),a=i,l=0;i.length>r&&(l=i.slice(0,i.length-r).reduce((d,m,f)=>d+m.length+(f>0?1:0),0),a=i.slice(-r));let c=[];c.push(ja+p.thinking(xO));for(let u of a)c.push(ja+p.thinking(u));return l>0&&c.push(ja+p.dim(`\u22EF +${l} chars earlier`)),c.join(`
|
|
2042
|
-
`)}function zw(e,t,n,r){switch(n.stageTracker&&Kw(n.stageTracker,e),e.type){case"progress":r.set(e.progress.taskId,e.progress),n.isTTY&&Rn(n,r);return;case"chunk":{let o=e.chunk;if(o.type==="tool_use_detail")n.thinkingLane.markEnded(),n.streamingMarkdown.current?.commitPending(),n.isTTY&&Ba(n),n.toolLane.addStartWithAgentContext(o.toolUseId,o.toolName,o.toolInput,void 0),t.stats.toolUses+=1,n.isTTY&&n.compositor&&n.compositor.setSpinner({enabled:!0,rotateVerbEveryMs:3500}),n.isTTY&&Rn(n,r);else if(o.type==="tool_result")n.streamingMarkdown.current?.commitPending(),n.toolLane.addResult(o.toolUseId,o),n.isTTY&&Rn(n,r);else if(o.type==="tool_diff")n.toolLane.addDiff(o.toolUseId,o.diff),n.isTTY&&Rn(n,r);else if(o.type==="content"){n.thinkingLane.markEnded();let s=od(o.content);if(n.activeSkillName&&!n.skillBadgeEmitted){let i=sd(s,n.activeSkillName);if(s=i.text,i.found){n.skillBadgeEmitted=!0;let{color:a,glyph:l}=Bu("skill"),c=" "+a(l+" ")+a.bold(n.activeSkillName);n.isTTY&&n.compositor?n.compositor.commitAbove(c):n.out.line(c)}}else n.activeSkillName&&(s=sd(s,n.activeSkillName).text);if(!s)return;t.contentBuffer+=s,n.isTTY&&(n.compositor&&n.compositor.setSpinner({enabled:!1}),Ba(n
|
|
2043
|
-
`);if(n.isTTY&&n.compositor)for(let s of o)n.compositor.commitAbove(s);else for(let s of o)n.out.line(s)}function _O(e,t){if(!t.streamingMarkdown.current&&e.contentBuffer.trim()&&Jw(e.contentBuffer,t.out),e.contentBuffer="",t.coordinator){if(t.thinkingMode!=="off"){let n=t.thinkingLane.collapse();if(n){let r=n,o=t.compositor,s=t.isTTY,i=t.out;t.coordinator.schedule({anchor:"before-content",commits:[()=>{s&&o?o.commitAbove(r):i.line(r)}]})}}if(t.toolLane.hasPending()){let n=t.toolLane.flush(),r=t.compositor,o=t.isTTY,s=t.out;t.coordinator.schedule({anchor:"before-content",commits:[()=>{if(o&&r){
|
|
2043
|
+
`)}function zw(e,t,n,r){switch(n.stageTracker&&Kw(n.stageTracker,e),e.type){case"progress":r.set(e.progress.taskId,e.progress),n.isTTY&&Rn(n,r);return;case"chunk":{let o=e.chunk;if(o.type==="tool_use_detail")n.thinkingLane.markEnded(),n.streamingMarkdown.current?.commitPending(),n.isTTY&&Ba(n),n.toolLane.addStartWithAgentContext(o.toolUseId,o.toolName,o.toolInput,void 0),t.stats.toolUses+=1,n.isTTY&&n.compositor&&n.compositor.setSpinner({enabled:!0,rotateVerbEveryMs:3500}),n.isTTY&&Rn(n,r);else if(o.type==="tool_result")n.streamingMarkdown.current?.commitPending(),n.toolLane.addResult(o.toolUseId,o),n.isTTY&&Rn(n,r);else if(o.type==="tool_diff")n.toolLane.addDiff(o.toolUseId,o.diff),n.isTTY&&Rn(n,r);else if(o.type==="content"){n.thinkingLane.markEnded();let s=od(o.content);if(n.activeSkillName&&!n.skillBadgeEmitted){let i=sd(s,n.activeSkillName);if(s=i.text,i.found){n.skillBadgeEmitted=!0;let{color:a,glyph:l}=Bu("skill"),c=" "+a(l+" ")+a.bold(n.activeSkillName);n.isTTY&&n.compositor?n.compositor.commitAbove(c):n.out.line(c)}}else n.activeSkillName&&(s=sd(s,n.activeSkillName).text);if(!s)return;t.contentBuffer+=s,n.isTTY&&(n.compositor&&n.compositor.setSpinner({enabled:!1}),Ba(n),n.streamingMarkdown.current||(n.streamingMarkdown.current=new Ua({...n.compositor?{compositor:n.compositor}:{}})),n.streamingMarkdown.current.push(s))}else if(o.type==="thinking"){if(n.thinkingMode==="off")return;n.thinkingLane.push(o.content),n.isTTY&&Rn(n,r)}return}case"message":t.contentBuffer||(t.contentBuffer=od(e.message.content));return;case"error":t.errored=!0,IO(e.error,n.out);return;case"done":t.done=!0,e.metadata&&(t.responseMetadata=e.metadata),_O(t,n);return;case"suggestion":return;case"panel":CO(e.spec,t,n);return}}function CO(e,t,n){n.streamingMarkdown.current?n.streamingMarkdown.current.commitPending():t.contentBuffer.trim()&&(Jw(t.contentBuffer,n.out),t.contentBuffer=""),Ba(n);let o=nn(e).split(`
|
|
2044
|
+
`);if(n.isTTY&&n.compositor)for(let s of o)n.compositor.commitAbove(s);else for(let s of o)n.out.line(s)}function _O(e,t){if(!t.streamingMarkdown.current&&e.contentBuffer.trim()&&Jw(e.contentBuffer,t.out),e.contentBuffer="",t.coordinator){if(t.thinkingMode!=="off"){let n=t.thinkingLane.collapse();if(n){let r=n,o=t.compositor,s=t.isTTY,i=t.out;t.coordinator.schedule({anchor:"before-content",commits:[()=>{s&&o?o.commitAbove(r):i.line(r)}]})}}if(t.toolLane.hasPending()){let n=t.toolLane.flush(),r=t.compositor,o=t.isTTY,s=t.out;t.coordinator.schedule({anchor:"before-content",commits:[()=>{if(o&&r){for(let i of n)r.commitAbove(i);r.commitAbove(""),r.setOverlay("")}else{for(let i of n)s.line(i);s.line("")}}]})}}else{if(t.thinkingMode!=="off"){let n=t.thinkingLane.collapse();n&&(t.isTTY&&t.compositor?t.compositor.commitAbove(n):t.out.line(n))}Ba(t)}}function Jw(e,t){let n=ct(e);for(let r of n.split(`
|
|
2044
2045
|
`))t.line(r)}function IO(e,t){let n=ti(e.message,e.stack);for(let r of n.split(`
|
|
2045
|
-
`))t.line(r)}function Ba(e
|
|
2046
|
+
`))t.line(r)}function Ba(e){if(!e.toolLane.hasPending())return;let t=e.toolLane.flushCompletedRoots();if(e.isTTY&&e.compositor){if(t.length>0){for(let n of t)e.compositor.commitAbove(n);e.compositor.commitAbove("")}e.compositor.setOverlay(e.toolLane.getOverlay())}else if(t.length>0){for(let n of t)e.out.line(n);e.out.line("")}}function Rn(e,t){if(!e.compositor)return;let n=[];if(e.stageTracker&&n.push(" "+Gw(e.stageTracker.stage,{dim:p.dim,accent:p.brand,bold:p.bold})),e.thinkingMode==="live"&&e.thinkingLane.hasBufferedContent()){let o=qw(e.thinkingLane.peek(),{cols:Y()});o&&n.push(o)}e.toolLane.hasPending()&&n.push(e.toolLane.getOverlay());let r=[];for(let o of t.values())r.push(...Fy(o));r.length>0&&n.push(r.join(`
|
|
2046
2047
|
`)),e.compositor.setOverlay(n.join(`
|
|
2047
2048
|
`))}var Wa=class{beforeContent=[];afterSubagent=new Map;afterContent=[];schedule(t){let{anchor:n}=t;if(n==="before-content")this.beforeContent.push(t);else if(n==="after-content")this.afterContent.push(t);else{let r=n.slice(15),o=this.afterSubagent.get(r);o||(o=[],this.afterSubagent.set(r,o)),o.push(t)}}drainSubagent(t){for(let r of this.beforeContent.splice(0))for(let o of r.commits)o();let n=this.afterSubagent.get(t);if(n){this.afterSubagent.delete(t);for(let r of n)for(let o of r.commits)o()}}async flushAll(t){for(let n of this.beforeContent.splice(0))for(let r of n.commits)r();if(t)try{await t()}catch{}for(let[n,r]of Array.from(this.afterSubagent)){this.afterSubagent.delete(n);for(let o of r)for(let s of o.commits)s()}for(let n of this.afterContent.splice(0))for(let r of n.commits)r()}};var Ha=new Map,to=new Map;function Vw(e,t){let n=e.trimEnd();if(!n.trim())return"";let r=Math.max(t*4,400),o=n.length>r?n.slice(-r):n,s=/[.!?](?=\s)|\n+/g,i=-1,a;for(;(a=s.exec(o))!==null;)i=a.index+a[0].length;let l=i>=0?o.slice(i):o;return l=l.replace(/\s+/g," ").trim(),l?(l.length>t&&(l=l.slice(0,Math.max(1,t-1))+"\u2026"),l):""}function kd(e,t){if(!(!e||!e.trim())&&!t.isTTY)for(let n of PO(e))t.out.line(n)}function PO(e){if(!e)return[];let t=p.dim("\u2502 "),n=" ",r=Math.max(1,Y()-n.length-2-2),o=[];for(let s of e.split(`
|
|
2048
2049
|
`)){let i=ie(s,r);for(let a of i.split(`
|
|
2049
2050
|
`))o.push(n+t+a)}return o}function Yw(e,t,n,r){if(t.syntheticAgentToolUseId)return;let o=t.agentType?.trim()||"agent",s=process.stdout.columns??100,i=Math.max(20,s-14);if(r!==void 0&&n.toolLane.mergeAgentLabel(r,o,i)){t.syntheticAgentToolUseId=r;return}let a=`__synth_agent_${e}`;n.toolLane.addStartWithAgentContext(a,"Agent",`(${o})`,r,i),t.syntheticAgentToolUseId=a}function Xw(e,t,n,r){let o=n.syntheticAgentToolUseId;if(o)switch(e.type){case"progress":e.progress.totalTokens&&(n.stats.tokens=e.progress.totalTokens),e.progress.toolUses!==void 0&&(n.stats.progressReportedToolUses=e.progress.toolUses);return;case"chunk":{let s=e.chunk;if(s.type==="tool_use_detail"){n.thinkingLane?.markEnded(),n.currentTextEntryId=void 0;let i=r.streamingMarkdown.get(t);i&&i.commitPending(),r.toolLane.setThinkingTail(o,void 0);let a=process.stdout.columns??100,l=Math.max(20,a-14);r.toolLane.addStartWithAgentContext(s.toolUseId,s.toolName,s.toolInput,o,l),n.stats.toolUses+=1,r.isTTY&&r.compositor&&r.compositor.setOverlay(r.toolLane.getOverlay())}else if(s.type==="tool_result"){let i=r.streamingMarkdown.get(t);i&&i.commitPending(),r.toolLane.addResult(s.toolUseId,s),r.isTTY&&r.compositor&&r.compositor.setOverlay(r.toolLane.getOverlay())}else if(s.type==="tool_diff")r.toolLane.addDiff(s.toolUseId,s.diff),r.isTTY&&r.compositor&&r.compositor.setOverlay(r.toolLane.getOverlay());else if(s.type==="content")if(n.thinkingLane?.markEnded(),n.currentTextEntryId||(n.currentTextEntryId="__in_text_block__"),n.contentBuffer+=s.content,r.isTTY&&r.compositor){if(s.content.trim()){let i=process.stdout.columns??100,a=Math.max(20,i-14),l=Vw(n.contentBuffer,a),c=Date.now(),u=Ha.get(o)??0,d=l?/[.!?…]$/.test(l):!1;l&&(c-u>=1500||d)&&(Ha.set(o,c),r.toolLane.setThinkingTail(o,l))}{let i=Date.now(),a=to.get(o)??0;i-a>=1500&&(to.set(o,i),r.compositor.setOverlay(r.toolLane.getOverlay()))}}else{let i=n.contentBuffer.lastIndexOf(`
|
|
2050
2051
|
`);if(i!==-1){let a=n.contentBuffer.slice(0,i);n.contentBuffer=n.contentBuffer.slice(i+1),kd(a,r)}}else if(s.type==="thinking"){if(r.thinkingMode==="off")return;if(n.thinkingLane||(n.thinkingLane=new eo),n.thinkingLane.push(s.content),r.thinkingMode==="live"&&r.isTTY&&r.compositor){let i=process.stdout.columns??100,a=Math.max(20,i-14),l=Vw(n.thinkingLane.peek(),a);l&&r.toolLane.setThinkingTail(o,l);{let c=Date.now(),u=to.get(o)??0;c-u>=1500&&(to.set(o,c),r.compositor.setOverlay(r.toolLane.getOverlay()))}}}return}case"message":return;case"error":n.errored=!0,r.toolLane.setThinkingTail(o,void 0),Ha.delete(o),to.delete(o);{let s=`error \u2014 ${e.error.message}`;r.toolLane.setAgentResultSummary(o,s),r.toolLane.addResult(o,ms(s,!0))}r.isTTY&&r.compositor&&r.compositor.setOverlay(r.toolLane.getOverlay());return;case"done":n.done=!0,e.metadata&&(n.responseMetadata=e.metadata),$O(t,n,r);return;case"suggestion":return;case"panel":MO(e.spec,t,n,r);return}}function MO(e,t,n,r){if(r.isTTY){let s=n.syntheticAgentToolUseId;s&&r.toolLane.setThinkingTail(s,void 0),n.contentBuffer=""}else n.contentBuffer.trim()&&(kd(n.contentBuffer,r),n.contentBuffer="");let o=nn(e);for(let s of o.split(`
|
|
2051
|
-
`))r.isTTY&&r.compositor?r.compositor.commitAbove(s):r.out.line(s)}function $O(e,t,n){let r=t.syntheticAgentToolUseId;if(!r||t.errored)return;if(!n.isTTY&&t.contentBuffer&&kd(t.contentBuffer,n),t.contentBuffer="",!n.isTTY&&t.thinkingLane?.hasBufferedContent()){let s=t.thinkingLane.collapse();s&&n.out.line(s)}n.toolLane.setThinkingTail(r,void 0),Ha.delete(r),to.delete(r);let o=Ww(t);n.toolLane.setAgentResultSummary(r,o),n.toolLane.addResult(r,ms(o,!1)),n.isTTY&&n.compositor&&n.compositor.setOverlay(n.toolLane.getOverlay())}function Qw(e=process.env){return e.AFK_DEMO_CLEAN==="1"||typeof e.SCRIPT=="string"&&e.SCRIPT.length>0||e.ASCIINEMA_REC==="1"}function Zw(e,t=2){if(t<1||!Number.isInteger(t))throw new RangeError(`makeDedupingLineWriter: maxRepeat must be a positive integer, got ${t}`);let n=null,r=0,o=()=>{if(n!==null&&r>t){let s=r-t;e.line(` \u2026 (line repeated ${s} more time${s===1?"":"s"})`)}};return{line(s){let i=s??"";i===n?(r++,r<=t&&e.line(i)):(o(),n=i,r=1,e.line(i))},raw(s){o(),n=null,r=0,e.raw(s)},success(s){o(),n=null,r=0,e.success(s)},info(s){o(),n=null,r=0,e.info(s)},warn(s){o(),n=null,r=0,e.warn(s)},error(s){o(),n=null,r=0,e.error(s)},flush(){o(),n=null,r=0}}}var OO=3e4,DO=" \xB7 waiting ",LO=375,no=class{out;thinkingMode;isTTY;captureMode;onCancel;onBackground;activeSkillName;history;autocompleteState;promptText;scrollRegion;ownsCompositor=!0;borrowedCompositor=null;priorOnCancel=void 0;coordinator=new Wa;compositor=null;streamingMarkdownRef={current:null};toolLane=new ps;thinkingLane=new eo;stageTracker=Hw();sources=new Map;subagentMarkdown=new Map;lastProgressByTask=new Map;disposed=!1;pauseTickInterval=null;resizeUnsub=null;sink;constructor(t){this.captureMode=t.captureMode??Qw(),this.out=this.captureMode?Zw(t.out,2):t.out;let n=t.thinkingMode??(t.verbose===!0?"live":"summary");this.thinkingMode=this.captureMode&&n==="live"?"summary":n,this.onCancel=t.onCancel,this.onBackground=t.onBackground,this.isTTY=!(t.forceNonTty??!1)&&!!process.stdout.isTTY&&!!process.stdin.isTTY,this.activeSkillName=t.activeSkillName,this.history=t.history,this.autocompleteState=t.autocompleteState,this.promptText=t.promptText,this.scrollRegion=t.scrollRegion,t.compositor&&(this.borrowedCompositor=t.compositor,this.ownsCompositor=!1),this.sink=(r,o)=>this.process(r,o)}async arm(){if(this.disposed||!this.isTTY||this.compositor)return;let t;if(this.borrowedCompositor)t=this.borrowedCompositor,t.setInputMode("streaming"),this.priorOnCancel=t.getOnCancel(),this.onCancel&&t.setOnCancel(this.onCancel);else{let n={has:r=>Ge().some(o=>o.name===`/${r}`)};t=new Qr({stdout:process.stdout,stdin:process.stdin,...this.onCancel?{onCancel:this.onCancel}:{},...this.onBackground?{onBackground:this.onBackground}:{},...this.history?{history:this.history}:{},...this.autocompleteState?{autocompleteState:this.autocompleteState}:{},...this.promptText!==void 0?{promptText:this.promptText}:{},formatInputBuffer:r=>Tn(r,n),...this.scrollRegion?{scrollRegion:this.scrollRegion}:{},captureMode:this.captureMode}),await t.arm()}this.compositor=t,t.setSpinner({enabled:!0,rotateVerbEveryMs:3500}),this.pauseTickInterval=setInterval(()=>this.checkPauseAnnotations(),80),this.resizeUnsub=je.subscribe(()=>{this.disposed||!this.compositor||Rn(this.makeOrchestratorCtx(),this.lastProgressByTask)})}makeOrchestratorCtx(){return{out:this.out,isTTY:this.isTTY,compositor:this.compositor,toolLane:this.toolLane,thinkingLane:this.thinkingLane,thinkingMode:this.thinkingMode,streamingMarkdown:this.streamingMarkdownRef,coordinator:this.coordinator,...this.isTTY?{stageTracker:this.stageTracker}:{},...this.activeSkillName?{activeSkillName:this.activeSkillName}:{}}}getCompositor(){return this.compositor}makeSubagentCtx(){return{isTTY:this.isTTY,compositor:this.compositor,toolLane:this.toolLane,out:this.out,streamingMarkdown:this.subagentMarkdown,thinkingMode:this.thinkingMode}}process(t,n){if(this.disposed)return;let r=n?.subagentId??wd,o=r===wd,s=this.sources.get(r);if(!s&&(s=Bw(n?.agentType),this.sources.set(r,s),!o)){let i;if(n?.parentId!==void 0){let a=this.sources.get(n.parentId);a!==void 0?i=a.syntheticAgentToolUseId:this.toolLane.hasEntry(n.parentId)?i=n.parentId:Be()&&process.stderr.write(`[stream-renderer] parentId_fallback_unresolved ${JSON.stringify({parentId:n.parentId,sourceId:r})}
|
|
2052
|
-
`)}Yw(r,s,this.makeSubagentCtx(),i)}if(o)zw(t,s,this.makeOrchestratorCtx(),this.lastProgressByTask);else{if(Xw(t,r,s,this.makeSubagentCtx()),s.lastEventAt=Date.now(),s.pauseAnnotation!==void 0&&s.syntheticAgentToolUseId){s.pauseAnnotation=void 0,s.stalledTicks=0;let a=s.agentType??r;this.toolLane.addStartWithAgentContext(s.syntheticAgentToolUseId,"Agent",`(${a})`,void 0)}if((t.type==="done"||t.type==="error")&&this.isTTY){let a=s.syntheticAgentToolUseId;if(a&&this.toolLane.hasEntry(a)){let c=this.toolLane.flushSource(a),u=this.compositor,d=this.toolLane,m=this.out;this.coordinator.schedule({anchor:`after-subagent:${r}`,commits:[()=>{if(u){for(let f of c)u.commitAbove(f);u.commitAbove(""),u.setOverlay(d.getOverlay())}else{for(let f of c)m.line(f);m.line("")}}]});try{this.streamingMarkdownRef.current&&this.streamingMarkdownRef.current.commitPending()}finally{this.coordinator.drainSubagent(r)}}let l=this.makeOrchestratorCtx();Rn(l,this.lastProgressByTask)}}}async dispose(){if(this.disposed)return;this.disposed=!0,this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null);let t=this.streamingMarkdownRef.current?()=>this.streamingMarkdownRef.current.flush():void 0;await this.coordinator.flushAll(t),this.streamingMarkdownRef.current&&(this.streamingMarkdownRef.current.dispose(),this.streamingMarkdownRef.current=null);for(let r of this.subagentMarkdown.values()){try{await r.flush()}catch{}r.dispose()}if(this.subagentMarkdown.clear(),this.toolLane.hasPending()){let r=this.toolLane.flush();if(this.isTTY&&this.compositor){for(let o of r)this.compositor.commitAbove(o);this.compositor.setOverlay(this.toolLane.getOverlay())}else
|
|
2052
|
+
`))r.isTTY&&r.compositor?r.compositor.commitAbove(s):r.out.line(s);r.isTTY&&r.compositor?r.compositor.commitAbove(""):r.out.line("")}function $O(e,t,n){let r=t.syntheticAgentToolUseId;if(!r||t.errored)return;if(!n.isTTY&&t.contentBuffer&&kd(t.contentBuffer,n),t.contentBuffer="",!n.isTTY&&t.thinkingLane?.hasBufferedContent()){let s=t.thinkingLane.collapse();s&&(n.out.line(s),n.out.line(""))}n.toolLane.setThinkingTail(r,void 0),Ha.delete(r),to.delete(r);let o=Ww(t);n.toolLane.setAgentResultSummary(r,o),n.toolLane.addResult(r,ms(o,!1)),n.isTTY&&n.compositor&&n.compositor.setOverlay(n.toolLane.getOverlay())}function Qw(e=process.env){return e.AFK_DEMO_CLEAN==="1"||typeof e.SCRIPT=="string"&&e.SCRIPT.length>0||e.ASCIINEMA_REC==="1"}function Zw(e,t=2){if(t<1||!Number.isInteger(t))throw new RangeError(`makeDedupingLineWriter: maxRepeat must be a positive integer, got ${t}`);let n=null,r=0,o=()=>{if(n!==null&&r>t){let s=r-t;e.line(` \u2026 (line repeated ${s} more time${s===1?"":"s"})`)}};return{line(s){let i=s??"";i===n?(r++,r<=t&&e.line(i)):(o(),n=i,r=1,e.line(i))},raw(s){o(),n=null,r=0,e.raw(s)},success(s){o(),n=null,r=0,e.success(s)},info(s){o(),n=null,r=0,e.info(s)},warn(s){o(),n=null,r=0,e.warn(s)},error(s){o(),n=null,r=0,e.error(s)},flush(){o(),n=null,r=0}}}var OO=3e4,DO=" \xB7 waiting ",LO=375,no=class{out;thinkingMode;isTTY;captureMode;onCancel;onBackground;activeSkillName;history;autocompleteState;promptText;scrollRegion;ownsCompositor=!0;borrowedCompositor=null;priorOnCancel=void 0;coordinator=new Wa;compositor=null;streamingMarkdownRef={current:null};toolLane=new ps;thinkingLane=new eo;stageTracker=Hw();sources=new Map;subagentMarkdown=new Map;lastProgressByTask=new Map;disposed=!1;pauseTickInterval=null;resizeUnsub=null;sink;constructor(t){this.captureMode=t.captureMode??Qw(),this.out=this.captureMode?Zw(t.out,2):t.out;let n=t.thinkingMode??(t.verbose===!0?"live":"summary");this.thinkingMode=this.captureMode&&n==="live"?"summary":n,this.onCancel=t.onCancel,this.onBackground=t.onBackground,this.isTTY=!(t.forceNonTty??!1)&&!!process.stdout.isTTY&&!!process.stdin.isTTY,this.activeSkillName=t.activeSkillName,this.history=t.history,this.autocompleteState=t.autocompleteState,this.promptText=t.promptText,this.scrollRegion=t.scrollRegion,t.compositor&&(this.borrowedCompositor=t.compositor,this.ownsCompositor=!1),this.sink=(r,o)=>this.process(r,o)}async arm(){if(this.disposed||!this.isTTY||this.compositor)return;let t;if(this.borrowedCompositor)t=this.borrowedCompositor,t.setInputMode("streaming"),this.priorOnCancel=t.getOnCancel(),this.onCancel&&t.setOnCancel(this.onCancel);else{let n={has:r=>Ge().some(o=>o.name===`/${r}`)};t=new Qr({stdout:process.stdout,stdin:process.stdin,...this.onCancel?{onCancel:this.onCancel}:{},...this.onBackground?{onBackground:this.onBackground}:{},...this.history?{history:this.history}:{},...this.autocompleteState?{autocompleteState:this.autocompleteState}:{},...this.promptText!==void 0?{promptText:this.promptText}:{},formatInputBuffer:r=>Tn(r,n),...this.scrollRegion?{scrollRegion:this.scrollRegion}:{},captureMode:this.captureMode}),await t.arm()}this.compositor=t,t.setSpinner({enabled:!0,rotateVerbEveryMs:3500}),this.pauseTickInterval=setInterval(()=>this.checkPauseAnnotations(),80),this.resizeUnsub=je.subscribe(()=>{this.disposed||!this.compositor||Rn(this.makeOrchestratorCtx(),this.lastProgressByTask)})}makeOrchestratorCtx(){return{out:this.out,isTTY:this.isTTY,compositor:this.compositor,toolLane:this.toolLane,thinkingLane:this.thinkingLane,thinkingMode:this.thinkingMode,streamingMarkdown:this.streamingMarkdownRef,coordinator:this.coordinator,...this.isTTY?{stageTracker:this.stageTracker}:{},...this.activeSkillName?{activeSkillName:this.activeSkillName}:{}}}getCompositor(){return this.compositor}makeSubagentCtx(){return{isTTY:this.isTTY,compositor:this.compositor,toolLane:this.toolLane,out:this.out,streamingMarkdown:this.subagentMarkdown,thinkingMode:this.thinkingMode}}process(t,n){if(this.disposed)return;let r=n?.subagentId??wd,o=r===wd,s=this.sources.get(r);if(!s&&(s=Bw(n?.agentType),this.sources.set(r,s),!o)){let i;if(n?.parentId!==void 0){let a=this.sources.get(n.parentId);a!==void 0?i=a.syntheticAgentToolUseId:this.toolLane.hasEntry(n.parentId)?i=n.parentId:Be()&&process.stderr.write(`[stream-renderer] parentId_fallback_unresolved ${JSON.stringify({parentId:n.parentId,sourceId:r})}
|
|
2053
|
+
`)}Yw(r,s,this.makeSubagentCtx(),i)}if(o)zw(t,s,this.makeOrchestratorCtx(),this.lastProgressByTask);else{if(Xw(t,r,s,this.makeSubagentCtx()),s.lastEventAt=Date.now(),s.pauseAnnotation!==void 0&&s.syntheticAgentToolUseId){s.pauseAnnotation=void 0,s.stalledTicks=0;let a=s.agentType??r;this.toolLane.addStartWithAgentContext(s.syntheticAgentToolUseId,"Agent",`(${a})`,void 0)}if((t.type==="done"||t.type==="error")&&this.isTTY){let a=s.syntheticAgentToolUseId;if(a&&this.toolLane.hasEntry(a)){let c=this.toolLane.flushSource(a),u=this.compositor,d=this.toolLane,m=this.out;this.coordinator.schedule({anchor:`after-subagent:${r}`,commits:[()=>{if(u){for(let f of c)u.commitAbove(f);u.commitAbove(""),u.setOverlay(d.getOverlay())}else{for(let f of c)m.line(f);m.line("")}}]});try{this.streamingMarkdownRef.current&&this.streamingMarkdownRef.current.commitPending()}finally{this.coordinator.drainSubagent(r)}}let l=this.makeOrchestratorCtx();Rn(l,this.lastProgressByTask)}}}async dispose(){if(this.disposed)return;this.disposed=!0,this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null);let t=this.streamingMarkdownRef.current?()=>this.streamingMarkdownRef.current.flush():void 0;await this.coordinator.flushAll(t),this.streamingMarkdownRef.current&&(this.streamingMarkdownRef.current.dispose(),this.streamingMarkdownRef.current=null);for(let r of this.subagentMarkdown.values()){try{await r.flush()}catch{}r.dispose()}if(this.subagentMarkdown.clear(),this.toolLane.hasPending()){let r=this.toolLane.flush();if(this.isTTY&&this.compositor){for(let o of r)this.compositor.commitAbove(o);this.compositor.commitAbove(""),this.compositor.setOverlay(this.toolLane.getOverlay())}else{for(let o of r)this.out.line(o);this.out.line("")}}if(this.pauseTickInterval&&(clearInterval(this.pauseTickInterval),this.pauseTickInterval=null),this.compositor){if(this.ownsCompositor)try{this.compositor.disarm()}catch{}else{try{this.compositor.setSpinner({enabled:!1})}catch(r){G("[stream-renderer] borrow-dispose setSpinner: "+String(r))}try{this.compositor.setOverlay("")}catch(r){G("[stream-renderer] borrow-dispose setOverlay: "+String(r))}try{this.compositor.setInputMode("idle")}catch(r){G("[stream-renderer] borrow-dispose setInputMode: "+String(r))}try{this.compositor.setOnCancel(this.priorOnCancel??null)}catch(r){G("[stream-renderer] borrow-dispose setOnCancel: "+String(r))}this.priorOnCancel=void 0}this.compositor=null,this.borrowedCompositor=null}let n=this.out;if(typeof n.flush=="function")try{n.flush()}catch{}}checkPauseAnnotations(){if(this.disposed)return;let t=!1,n=Date.now();for(let[r,o]of this.sources){if(o.done||o.errored||!o.syntheticAgentToolUseId)continue;let s=n-o.lastEventAt;if(s>OO)if(o.stalledTicks+=1,o.stalledTicks>=LO*2)Be()&&process.stderr.write(`[stream-renderer] auto_settle_timeout ${JSON.stringify({sourceId:r,elapsedMs:s,syntheticAgentToolUseId:o.syntheticAgentToolUseId})}
|
|
2053
2054
|
`),this.toolLane.addResult(o.syntheticAgentToolUseId,ms("[no-result \u2014 timed out]",!1)),o.done=!0,t=!0;else{let i=o.agentType??r,a=DO+re(s);o.pauseAnnotation!==a&&(o.pauseAnnotation=a,this.toolLane.addStartWithAgentContext(o.syntheticAgentToolUseId,"Agent",`(${i})${a}`,void 0),t=!0)}}t&&this.isTTY&&this.compositor&&this.compositor.setOverlay(this.toolLane.getOverlay())}};function Ka(e,t){let n=t.verbose??E.AFK_SKILL_STREAM_VERBOSE==="1",r=t.out??e.out,o=e.getCompositor?.()??null;return new no({out:r,verbose:n,activeSkillName:t.skillName,onCancel:t.onCancel??(()=>{}),...o?{compositor:o}:{}})}function ro(e){let t=e!==void 0?r=>{e.fn(r)}:r=>{console.log(r)},n=e!==void 0&&e.rawFn!==void 0?r=>{e.rawFn(r)}:r=>{process.stdout.write(r)};return{line(r=""){t(r)},raw(r){n(r)},success(r){t(p.success("\u2713 ")+r)},info(r){t(p.info("\u2139 ")+r)},warn(r){t(p.warning("\u26A0 ")+r)},error(r){t(p.error("\u2717 ")+r)}}}var FO="You are initializing this project for use with AFK (an AI agent CLI).\n\nYour job: scan this project and generate an `AFK.md` file in the project root. AFK.md is a plain markdown file (no YAML frontmatter) that serves as the system prompt for all AFK sessions in this project.\n\n## Steps\n\n1. **Discover project metadata** \u2014 read these files if they exist:\n - `package.json`, `tsconfig.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `Makefile`, `CMakeLists.txt`\n - `.github/workflows/` (CI config)\n - `docker-compose.yml`, `Dockerfile`\n - `README.md` or `README`\n - Any existing `CLAUDE.md` or `AGENTS.md` (borrow relevant context)\n\n2. **Scan directory structure** \u2014 list top-level directories and key subdirectories to understand the project layout.\n\n3. **Generate AFK.md** with these sections:\n - **What This Is** \u2014 one-paragraph description of the project (language, framework, purpose)\n - **Commands** \u2014 build, test, lint, dev commands (extracted from package.json scripts, Makefile targets, etc.)\n - **Architecture** \u2014 key directories and their purpose, entry points, major subsystems\n - **Conventions** \u2014 coding style, naming patterns, anything notable from config files (strictness levels, linting rules)\n - Only include sections where you found real content. Skip empty sections.\n\n4. **Write the file** \u2014 write AFK.md to the project root. Keep it concise \u2014 under 150 lines. This file is loaded into every session, so brevity matters.\n\n## Format rules\n- Plain markdown, no YAML frontmatter\n- Use code blocks for commands\n- Use tables for directory layouts\n- Don't include boilerplate or filler \u2014 every line should earn its place",nk={name:"/init",summary:"Scan project and generate AFK.md",hint:"When you're in a fresh repo and want the model to bootstrap an AFK.md system prompt that captures conventions, commands, and architecture.",async handler(e,t){let n=tk(process.cwd(),"AFK.md"),r=tk(process.cwd(),"CLAUDE.md"),o=[];o.push({type:"text",text:Aa("init",t)});let s=FO;if(ek(n)&&!t.includes("--force")&&(s+=`
|
|
2054
2055
|
|
|
2055
2056
|
## Existing AFK.md detected
|
|
@@ -2141,11 +2142,10 @@ _ended: ${new Date().toISOString()}_
|
|
|
2141
2142
|
`).find(b=>b.trim().length>0)?.trim()??"",g=f.length>0?f:`${e.kind} (no structured fields)`,h=ie(tn(g),n).split(`
|
|
2142
2143
|
`);for(let b of h)d.push(i+" "+xe(b,n)+" "+i)}else for(let f of l){let g=p.dim(xe(f.label,c)),h=ie(tn(f.value),u).split(`
|
|
2143
2144
|
`),b=h[0]??"";d.push(i+" "+g+" "+xe(b,u)+" "+i);for(let y of h.slice(1))d.push(i+" "+" ".repeat(c)+" "+xe(y,u)+" "+i)}d.push(a);let m=p.dim(le(t.affordance,n));return d.push(i+" "+xe(m,n)+" "+i),d.push(s),d.join(`
|
|
2144
|
-
`)}function dN(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 LS(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),Va(r,t),r}async function FS(e,t,n,r,o="summary",s,i,a){let l=ww(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 no({out:ro(s),thinkingMode:o,...v?{activeSkillName:v}:{},onCancel:()=>{t.interrupt().catch(D=>{Be()&&console.error(" "+p.error("session.interrupt() failed:"),D)})},...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}:{}}),T=S(),A=async()=>{if(!m){m=!0;try{await T.dispose()}catch{}}},I=async()=>{await T.arm();let D=T.getCompositor();if(s&&D){let C=D;s.fn=L=>C.commitAbove(L)}r.setActiveCompositor?.(D),r.rearmStatus?.()};try{x?x.commitAbove(""):console.log(),await I(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0}),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0});let D=e.attachments.length===0?e.text:LS(e.text,e.attachments),C=t.sendMessageStream(D);if(await Tr((R,P)=>{T.process(R,P)},async()=>{for await(let R of C){if(b){t.interrupt().catch(P=>{Be()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),P)});break}if(h&&i){let P=v??e.text.slice(0,40),M=i.register(P),N=ba(M,i);wa(C,c,l,M,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${M.id}: ${M.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 P=R.chunk,M={toolName:P.toolName,toolUseId:P.toolUseId,input:P.toolInput};w.set(P.toolUseId,M),y.push(M)}else if(R.type==="chunk"&&R.chunk.type==="tool_result"){let P=R.chunk,M=w.get(P.toolUseId);M&&(M.result=P.content,M.isError=P.isError,w.delete(P.toolUseId))}if(R.type==="paused"){await A(),(s??{fn:console.log}).fn(Om({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 P=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,T=S(),m=!1,await I(),(s??{fn:console.log}).fn(p.success(P));continue}if(R.type==="error"){await A(),kr(br(R.error)),d=!0;continue}T.process(R),R.type==="done"&&(f=!0,g=R.metadata)}}),await A(),b&&!f){let R=s?s.fn:console.log;R(
|
|
2145
|
-
`);let P=OS(c);if(P&&(R(DS(P)),R(""),r.onTerminalState))try{r.onTerminalState(P)}catch{}if(pN(g,n,R),r.onAfterTurn){let M=r.onAfterTurn();M instanceof Promise&&await M.catch(()=>{})}}}catch(D){await A(),d||kr(br(D))}finally{await A(),s&&(s.fn=D=>console.log(D)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function pN(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(re(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=Ku(t),a=et(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 NS(e={}){let t=e.load??ga,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Ob(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:ha(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var ep={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 US(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=ep[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(H(a)<=l)return a;let c=r+n.map(u=>ep[u].color(ep[u].glyph)).join(p.dim(" "))+i;return le(c,l)}}}var tp=["\u25D0","\u25D1","\u25D2","\u25D3"],Cl=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)%tp.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(tp[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(re(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(tp[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(re(a))),le(" "+i.join(" "),n)}};function _l(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function jS(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async m=>{Be()&&(o=da(m)),await Qa(e.session.current),Be()&&(s=Pk())}).catch(()=>{});let i=await CS(),a=new xl({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>_l(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}:{}}),xr.install($S({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+`
|
|
2145
|
+
`)}function dN(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 LS(e,t,n){let r=[];return n&&n.trim().length>0&&r.push({type:"text",text:n}),e&&r.push({type:"text",text:e}),Va(r,t),r}async function FS(e,t,n,r,o="summary",s,i,a){let l=ww(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 no({out:ro(s),thinkingMode:o,...v?{activeSkillName:v}:{},onCancel:()=>{t.interrupt().catch(D=>{Be()&&console.error(" "+p.error("session.interrupt() failed:"),D)})},...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}:{}}),T=S(),A=async()=>{if(!m){m=!0;try{await T.dispose()}catch{}}},I=async()=>{await T.arm();let D=T.getCompositor();if(s&&D){let C=D;s.fn=L=>C.commitAbove(L)}r.setActiveCompositor?.(D),r.rearmStatus?.()};try{x?x.commitAbove(""):console.log(),await I(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{h=!0}),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{b=!0});let D=e.attachments.length===0?e.text:LS(e.text,e.attachments),C=t.sendMessageStream(D);if(await Tr((R,P)=>{T.process(R,P)},async()=>{for await(let R of C){if(b){t.interrupt().catch(P=>{Be()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),P)});break}if(h&&i){let P=v??e.text.slice(0,40),M=i.register(P),N=ba(M,i);wa(C,c,l,M,i,N,n,r.onTurnComplete,t.abortSignal),await A(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${M.id}: ${M.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 P=R.chunk,M={toolName:P.toolName,toolUseId:P.toolUseId,input:P.toolInput};w.set(P.toolUseId,M),y.push(M)}else if(R.type==="chunk"&&R.chunk.type==="tool_result"){let P=R.chunk,M=w.get(P.toolUseId);M&&(M.result=P.content,M.isError=P.isError,w.delete(P.toolUseId))}if(R.type==="paused"){await A(),(s??{fn:console.log}).fn(Om({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 P=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,T=S(),m=!1,await I(),(s??{fn:console.log}).fn(p.success(P));continue}if(R.type==="error"){await A(),kr(br(R.error)),d=!0;continue}T.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){Jn(n,l,c,g,y),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{});let R=M=>{s?s.fn(M):console.log(M)},P=OS(c);if(P&&(R(DS(P)),R(""),r.onTerminalState))try{r.onTerminalState(P)}catch{}if(pN(g,n,R),r.onAfterTurn){let M=r.onAfterTurn();M instanceof Promise&&await M.catch(()=>{})}}}catch(D){await A(),d||kr(br(D))}finally{await A(),s&&(s.fn=D=>console.log(D)),r.setActiveCompositor?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function pN(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(re(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=Ku(t),a=et(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 NS(e={}){let t=e.load??ga,n=e.onResize??(i=>je.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=Ob(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:ha(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var ep={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 US(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=ep[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(H(a)<=l)return a;let c=r+n.map(u=>ep[u].color(ep[u].glyph)).join(p.dim(" "))+i;return le(c,l)}}}var tp=["\u25D0","\u25D1","\u25D2","\u25D3"],Cl=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)%tp.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(tp[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(re(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(tp[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(re(a))),le(" "+i.join(" "),n)}};function _l(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function jS(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async m=>{Be()&&(o=da(m)),await Qa(e.session.current),Be()&&(s=Pk())}).catch(()=>{});let i=await CS(),a=new xl({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d;try{await a.armCompositor({promptFn:()=>_l(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}:{}}),xr.install($S({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+`
|
|
2146
2146
|
`)}},pendingCount:()=>xr.pendingCount()})),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor(),c=NS();let m=US();e.clearVerdictLedger=()=>m.reset(),u=new ya,Gb(u),Xb(u),ew(u),Qb(e.backgroundRegistry),d=new Cl(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 T of s)e.replRenderer.writeLine(T);e.replRenderer.writeLine(""),s=[]}for(;g.length>0;){let T=g.shift(),A=T.status==="succeeded"?"\u2713":"\u2717",I=[];if(T.resultText){let C=T.resultText.trim().split(`
|
|
2147
2147
|
`)[0]?.slice(0,80)??"";C&&I.push(C)}T.error&&I.push(T.error.message);let D=[T.stats.toolUses>0?`${T.stats.toolUses} tools`:"",T.stats.tokens>0?`${Math.round(T.stats.tokens/1e3)}k tok`:"",T.stats.durationMs>0?`${Math.round(T.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");D&&I.push(D),e.replRenderer.writeLine(nn({kind:T.status==="succeeded"?"checkpoint":"diagnosis",title:`${A} ${T.id} ${T.label}`,body:I})),e.replRenderer.writeLine("")}let h=c.renderIfChanged(e.stats.sessionId);if(h.length>0){for(let T of h)e.replRenderer.writeLine(T);e.replRenderer.writeLine("")}let b=m.render();b&&e.replRenderer.writeLine(b);let y,w;if(l!==void 0){let T=l;l=void 0;let A=_l(e.stats.model,e.stats.planMode),I=Xn({buffer:T.text,promptText:A,isTTY:!!process.stdout.isTTY,attachmentSummary:Xr([...T.attachments])});e.replRenderer.writeLine(I),y=T.text.trim(),w=T.attachments}else{let T=await a.readLine({promptFn:()=>_l(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=T.text.trim(),w=T.attachments}if(!y&&w.length===0)continue;let v=!1;if(y.startsWith("/")){let T=await mb(y,e.slashCtx,w);if(T.handled){if(T.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()),T.result!==null&&typeof T.result=="object"&&"kind"in T.result&&T.result.kind==="submit"){l={text:T.result.message,attachments:w??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}v=!0}i.push(y);let x=y;if(v){let T=Hu(y);if(T){let A=T.name.replace(/^\//,"").split(":").pop()??"";if(A&&Ad(A)){let I={skillName:A,rawArgs:T.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},D=e.session.current.sessionId,C=gs(D),L=Date.now();G(`[afk trace] preflight.start commandName=${A}`);let R=!1,P=await fs(I,{cwd:e.stats.cwd??process.cwd(),artifactDir:C},M=>{Be()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${A}) failed: `)+(M instanceof Error?M.message:String(M)))});R=P!==null,G(`[afk trace] preflight.end commandName=${A} durationMs=${Date.now()-L} success=${R}`),x=Id(P?.manifestBlock,y)}}}let S;if(e.firstTurnHook&&e.stats.totalTurns===0){let T=e.firstTurnHook;e.firstTurnHook=void 0,S=Promise.resolve().then(()=>T(y)).catch(A=>{e.completionWriter.fn(p.warning("\u26A0 ")+"first-turn hook failed: "+(A instanceof Error?A.message:String(A)))})}await FS({text:x,attachments:w},e.session.current,e.stats,{setInFlight(T){n.turnInFlight=T},async onTurnComplete(T,A){await t.appendTurn(T,A)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await xb(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:T=>m.push(T),setActiveCompositor:T=>{n.activeCompositor=T},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:T=>a.setBackgroundHandler(T),setSoftStopHandler:T=>a.setSoftStopHandler(T)},e.options.thinkingUi,e.completionWriter,u,a.toRunTurnRefs(_l(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 mN}from"node:child_process";import{dirname as fN,isAbsolute as gN,resolve as hN}from"node:path";import{promisify as yN}from"node:util";var BS=yN(mN),bN=3e3,wN=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function kN(){let t=(await BS("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=gN(t)?t:hN(process.cwd(),t);return fN(n)}async function WS(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await kN()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),bN)});try{let o=Dt({execFile:BS,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=>wN.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}import{promises as SN}from"node:fs";import{dirname as vN,join as TN}from"node:path";import{randomBytes as EN}from"node:crypto";var xN=["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(`
|
|
2148
|
-
`),HS=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,np=30,RN=1024,AN=8e3,CN="haiku";async function _N(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=$N(n,RN),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??AN),i=t.signal?ON([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await gl({token:t.token,model:t.model??CN,system:xN,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=IN(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=vN(t.worktreePath);return await PN(l,c)}function IN(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(HS.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 HS.test(o)?o:null}async function PN(e,t){if(!await MN(TN(t,e)))return e;let n=EN(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,np-5)}-${n}`}async function MN(e){try{return await SN.access(e),!0}catch{return!1}}function $N(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 ON(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 GS(e){let t,n,r=await _N(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??vh)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),KS(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),KS(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function KS(e){try{process.chdir(e)}catch{}}U();import{spawn as qS}from"child_process";import{existsSync as UN,mkdirSync as jN,readFileSync as zS,unlinkSync as BN,writeFileSync as WN}from"fs";import{get as HN}from"https";import{join as JS}from"path";import{readFileSync as DN}from"fs";import{dirname as LN,join as FN}from"path";import{fileURLToPath as NN}from"url";function Jt(){try{return"3.41.
|
|
2148
|
+
`),HS=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,np=30,RN=1024,AN=8e3,CN="haiku";async function _N(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=$N(n,RN),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??AN),i=t.signal?ON([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await gl({token:t.token,model:t.model??CN,system:xN,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=IN(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=vN(t.worktreePath);return await PN(l,c)}function IN(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(HS.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 HS.test(o)?o:null}async function PN(e,t){if(!await MN(TN(t,e)))return e;let n=EN(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,np-5)}-${n}`}async function MN(e){try{return await SN.access(e),!0}catch{return!1}}function $N(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 ON(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 GS(e){let t,n,r=await _N(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??vh)(e.handle,r,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return s.ok?(e.session&&e.session.setCwd(s.newPath),KS(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),KS(e.handle.path)),{status:"failed",reason:s.reason,...s.partial!==void 0?{partial:s.partial}:{}})}function KS(e){try{process.chdir(e)}catch{}}U();import{spawn as qS}from"child_process";import{existsSync as UN,mkdirSync as jN,readFileSync as zS,unlinkSync as BN,writeFileSync as WN}from"fs";import{get as HN}from"https";import{join as JS}from"path";import{readFileSync as DN}from"fs";import{dirname as LN,join as FN}from"path";import{fileURLToPath as NN}from"url";function Jt(){try{return"3.41.2"}catch{}try{let e=LN(NN(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(DN(FN(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}q();var KN=64*1024,GN=1440*60*1e3,qN="update-check.json",zN="pending-update.json";function VS(){return JS(Gs(),qN)}function rp(){return JS(Gs(),zN)}function YS(){let e=Gs();UN(e)||jN(e,{recursive:!0})}function JN(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 VN(){try{let e=zS(VS(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function YN(){try{YS();let e=`
|
|
2149
2149
|
const https = require('https');
|
|
2150
2150
|
const fs = require('fs');
|
|
2151
2151
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|
|
@@ -2171,8 +2171,7 @@ ${r}Run \`npm install -g agent-afk\` to update${o}
|
|
|
2171
2171
|
`)}}catch{}}var Pl=null;function ev(e,t){Pl={updateInfo:e,pendingMessage:t}}function ZN(e){if(e==="summary"||e==="live"||e==="off")return e;throw new Error(`Invalid --thinking-ui value: ${e}. Expected summary|live|off`)}function eU(e,t){switch(e){case"empty-message":case"slash-command":return;case"slug-generator-error":return t?`slug generation failed: ${t}`:"slug generation failed";case"invalid-slug-output":return t?`model returned invalid slug: ${JSON.stringify(t)}`:"model returned invalid slug";default:return"unknown reason"}}function tU(e,t){if(e.worktreeAutoname===!1)return!1;let n=E.AFK_WORKTREE_AUTONAME;if(n!==void 0){let r=n.toLowerCase();return!(r==="0"||r==="false"||r==="off"||r==="no")}return typeof t.interactive?.worktreeAutoname=="boolean"?t.interactive.worktreeAutoname:!0}function tv(e){e.command("interactive",{isDefault:!0}).description("Start interactive chat session").option("-m, --model <model>","Model to use. Short aliases: opus|opus_1m|sonnet|sonnet_1m|haiku. Any other value (e.g. `auto` for cursor-api-proxy, or a full `claude-*` ID) passes through to the SDK/proxy untouched.",Ke()).option("--max-turns <number>","Maximum conversation turns","100").option("--thinking <mode>","Thinking mode: 'adaptive' | 'disabled' | 'enabled:<N>'","enabled:max").option("--thinking-ui <mode>","Thinking display mode: summary|live|off",ZN,"live").option("--effort <level>","Effort level: low|medium|high|xhigh|max").option("--max-output-tokens <n|max>","Per-response output cap ('max' = model ceiling). Env: AFK_MAX_OUTPUT_TOKENS").option("--resume <id>","Resume a persisted SDK session by id").option("--continue","Continue the most recent persisted session in cwd").option("--debug","Show SDK init metadata on startup; enables /debug command",!1).option("-w, --worktree [branch]","Create a git worktree for an isolated session. Optional value sets the branch name; otherwise auto-named. On clean exit (no uncommitted changes) the worktree and branch are auto-removed; on dirty exit the worktree is preserved.").option("--no-worktree-autoname","Disable mid-session rename of auto-named worktrees from the first user message via haiku. Default on. Also: AFK_WORKTREE_AUTONAME=0, or interactive.worktreeAutoname:false in afk.config.json.").option("--provider <name>","Provider to use: anthropic|anthropic-direct|openai|openai-compatible. Default: auto-selected by model").option("--dump-prompt [path]",'Dump resolved SDK prompt+options+provenance to file (default: ~/.afk/logs/prompt-dump-<ISO>.json) or "stderr"').option("--mcp-config <path>","Path to an additional MCP config file (highest priority \u2014 merges over ~/.afk/config/mcp.json, project-local .mcp.json, and plugin-contributed configs). File format identical to mcp.json.").action(async t=>{if(t.debug&&(process.env.AFK_DEBUG="1"),t.dumpPrompt!==void 0){let R=t.dumpPrompt===!0?lr.join(ZS.homedir(),".afk","logs",`prompt-dump-${new Date().toISOString().replace(/[:.]/g,"-")}.json`):String(t.dumpPrompt);process.env.AFK_DUMP_PROMPT=R,t.provider!==void 0&&t.provider!=="anthropic"&&t.provider!=="anthropic-direct"&&console.error(`[--dump-prompt] WARNING: active provider (${t.provider}) does not support prompt dumping. No file will be written.`)}let n=XN({text:"Initializing interactive session...",...ua}).start(),r=Ye(),o=E.AFK_WORKTREE_BRANCH_PREFIX??r.interactive?.worktreeBranchPrefix,s=E.AFK_WORKTREE_BOOT_PRUNE==="0",i=await WS({disabled:s}),a,l;if(t.worktree!==void 0)try{l=await Ui(t.worktree,o!==void 0?{branchPrefix:o}:void 0),a=l.path,n.text=`Worktree ready at ${l.path} (branch: ${l.branch})`}catch(R){n.fail("Worktree setup failed"),j(R)}let c=i.ran&&i.removedCount>0?`Pruned ${i.removedCount} stale worktree(s). Run /worktree list for details.`:void 0,u;try{u=await SS(t,a!==void 0?{cwd:a}:void 0)}catch(R){n.fail("Invalid options"),j(R)}let d=tU(t,r),m=ae();if(l!==void 0&&t.worktree===!0&&d&&m!==void 0){let R=l;u.firstTurnHook=async P=>{let M=await GS({handle:R,message:P,token:m,session:u.session.current,...o!==void 0?{branchPrefix:o}:{}});if(M.status==="renamed")console.log(p.dim("\u21AA ")+`Renamed \u2192 ${lr.relative(process.cwd(),M.newPath)||M.newPath} `+p.dim(`(branch: ${M.newBranch})`));else if(M.status==="failed"){let N=M.partial==="branch"?" (worktree dir moved, branch rename failed)":"";console.warn(p.warning("\u26A0 ")+`Worktree auto-rename failed${N}: ${M.reason}. `+p.dim("Continuing with the original name."))}else{let N=eU(M.reason,M.detail);N!==void 0&&console.log(p.dim("\u21AA ")+`Worktree auto-rename skipped (${N}). `+p.dim("Keeping timestamp name."))}}}Vn(async()=>{u.teardownTrustedSkillEvents?.(),xr.uninstall(),u.bgSummarizer?.stop(),await u.backgroundRegistry.cancelAll().catch(()=>{}),await u.session.current.close(),u.mcpManager&&await u.mcpManager.disconnectAll(),u.memoryStore.close(),l!==void 0&&await l.cleanup()}),n.succeed("Session ready"),l!==void 0&&console.log(p.dim(" \u21AA worktree: ")+p.dim(aa(l.path,{maxWidth:60}))+p.dim(` (branch: ${l.branch})`));let f=await ES(()=>u.stats.model);console.log(p.dim(` transcript: ${f.path()}`)),Vn(async()=>{await f.appendEnded()});let g=!1,h=()=>{if(u.stats.totalTurns===0)return;let R=qr(u.stats);return g=!0,R};Vn(async()=>{if(!g)try{h()}catch{}});let b={turnInFlight:!1,lastSigintAt:0};u.getInFlight=()=>b.turnInFlight;let y=1500,w=()=>{let R=Date.now();if(b.turnInFlight){u.session.current.interrupt().catch(()=>{}),b.lastSigintAt=R;let P=`
|
|
2172
2172
|
`+p.warning("\u26A0 Interrupted. Press Ctrl+C again to exit."),M=b.activeCompositor;if(M&&M.isArmed())try{M.commitAbove(P)}catch{console.log(P)}else console.log(P);return}if(R-b.lastSigintAt<y){u.session.current?.abort("sigint"),u.rl.close();return}b.lastSigintAt=R,console.log(`
|
|
2173
2173
|
`+p.info("\u2139 ")+"Press Ctrl+C again (or /exit) to quit.")};process.on("SIGINT",w),Vn(async()=>{process.removeListener("SIGINT",w)});let v=!1,x=()=>{if(v)return;v=!0,u.session.current?.abort("sigterm");try{u.rl.close()}catch{}setTimeout(()=>{ia().finally(()=>process.exit(0))},2e3).unref()};process.on("SIGTERM",x),Vn(async()=>{process.removeListener("SIGTERM",x)});let S=!1,T=()=>{if(S)return;S=!0,u.session.current?.abort("sighup");try{u.rl.close()}catch{}setTimeout(()=>{ia().finally(()=>process.exit(0))},2e3).unref()};process.on("SIGHUP",T),Vn(async()=>{process.removeListener("SIGHUP",T)}),process.stdout.write("\x1B[3J\x1B[2J\x1B[H");let A=1,I=process.stdout.write.bind(process.stdout),D=process.stderr.write.bind(process.stderr),C=R=>(typeof R=="string"?R:R instanceof Uint8Array?Buffer.from(R).toString("utf8"):String(R)).match(/\n/g)?.length??0,L=R=>((P,...M)=>(A+=C(P),R(P,...M)));process.stdout.write=L(I),process.stderr.write=L(D);try{if(Pl!==null){let{updateInfo:P,pendingMessage:M}=Pl;Pl=null,M!==null&&process.stderr.write(M),P!==null&&Il(P)}let R=u.resumeTarget?`Resuming ${u.resumeTarget.id} \xB7 ${u.stats.totalTurns} prior turn${u.stats.totalTurns===1?"":"s"}`:void 0;console.log(`
|
|
2174
|
-
`+Pm({mode:"Interactive Mode",model:u.stats.model,version:Jt(),...l!==void 0?{worktree:l.branch}:{},cwd:a??process.cwd(),...R!==void 0?{metaLine:R}:{},hintLine:"/help \xB7 /model \xB7 /resume \xB7 Esc to interrupt \xB7 /exit to quit"})),c!==void 0&&console.log(p.dim(` ${c}`)),console.log()}finally{process.stdout.write=I,process.stderr.write=D}u.preArmAnchorRow=A,u.statusLine.start(),u.slashCtx.ui.repaintStatusLine(),u.rl.on("close",async()=>{u.statusLine.stop(),nU(u,l,h),console.log(p.info("\u2139 ")+"Goodbye!"),await ia(),process.exit(0)}),await jS(u,f,b,w)})}function nU(e,t,n){if(e.stats.totalTurns===0)return;console.log(`
|
|
2175
|
-
`+me("Session Summary"));let r=[`${e.stats.totalTurns} turn${e.stats.totalTurns===1?"":"s"}`,re(Date.now()-e.stats.sessionStartTime)];e.stats.totalCostUsd>0&&r.push(Oe(e.stats.totalCostUsd)),e.stats.totalTokens>0&&r.push(ee(e.stats.totalTokens)+" tokens"),console.log(p.dim(" "+r.join(" \xB7 ")));let o=t?lr.basename(t.path):"none";console.log(p.dim(` model: ${e.stats.model} \xB7 worktree: ${o}`));try{let i=e.stats.cwd??process.cwd(),l=QN("git",["diff","--shortstat","HEAD"],{cwd:i,encoding:"utf8",timeout:2e3}).trim();console.log(p.dim(` edits: ${l||"no files changed"}`))}catch{}let s=e.stats.sessionId;try{let i=n();!s&&i&&(s=lr.basename(i,".json"))}catch{}s&&console.log(p.dim(" Continue with: ")+p.brand(Vr(s,e.stats.model))),console.log()}q();import rU from"ora";function nv(e){e.command("status").description("Check agent connection status").option("-f, --format <format>","Output format (text|json)","text").action(async t=>{let n=rU("Checking status...").start();try{let r=Ke(),o=Re(r),s=Ch(r),i=o==="openai-compatible"||o==="openai-codex";if(await new nt({model:i?"gpt-4o-mini":"haiku",...s!==void 0?{apiKey:s}:{},maxTurns:1}).close(),n.succeed(`${o} provider reachable`),t.format==="json"){let l=ae(),c=Xo(),u=l?E.ANTHROPIC_API_KEY?"ANTHROPIC_API_KEY":"CLAUDE_CODE_OAUTH_TOKEN":null,d=c?E.OPENAI_API_KEY?"OPENAI_API_KEY":"CODEX_API_KEY":null;console.log(JSON.stringify({providers:{anthropic:{ok:!!l,source:u},codex:{ok:!!c,source:d}},model:String(r),bypass:!0},null,2))}else console.log(`
|
|
2174
|
+
`+Pm({mode:"Interactive Mode",model:u.stats.model,version:Jt(),...l!==void 0?{worktree:l.branch}:{},cwd:a??process.cwd(),...R!==void 0?{metaLine:R}:{},hintLine:"/help \xB7 /model \xB7 /resume \xB7 Esc to interrupt \xB7 /exit to quit"})),c!==void 0&&console.log(p.dim(` ${c}`)),console.log()}finally{process.stdout.write=I,process.stderr.write=D}u.preArmAnchorRow=A,u.statusLine.start(),u.slashCtx.ui.repaintStatusLine(),u.rl.on("close",async()=>{u.statusLine.stop(),nU(u,l,h),console.log(p.info("\u2139 ")+"Goodbye!"),await ia(),process.exit(0)}),await jS(u,f,b,w)})}function nU(e,t,n){if(e.stats.totalTurns===0)return;console.log(me("Session Summary"));let r=[`${e.stats.totalTurns} turn${e.stats.totalTurns===1?"":"s"}`,re(Date.now()-e.stats.sessionStartTime)];e.stats.totalCostUsd>0&&r.push(Oe(e.stats.totalCostUsd)),e.stats.totalTokens>0&&r.push(ee(e.stats.totalTokens)+" tokens"),console.log(p.dim(" "+r.join(" \xB7 ")));let o=t?lr.basename(t.path):"none";console.log(p.dim(` model: ${e.stats.model} \xB7 worktree: ${o}`));try{let i=e.stats.cwd??process.cwd(),l=QN("git",["diff","--shortstat","HEAD"],{cwd:i,encoding:"utf8",timeout:2e3}).trim();console.log(p.dim(` edits: ${l||"no files changed"}`))}catch{}let s=e.stats.sessionId;try{let i=n();!s&&i&&(s=lr.basename(i,".json"))}catch{}s&&console.log(p.dim(" Continue with: ")+p.brand(Vr(s,e.stats.model))),console.log()}q();import rU from"ora";function nv(e){e.command("status").description("Check agent connection status").option("-f, --format <format>","Output format (text|json)","text").action(async t=>{let n=rU("Checking status...").start();try{let r=Ke(),o=Re(r),s=Ch(r),i=o==="openai-compatible"||o==="openai-codex";if(await new nt({model:i?"gpt-4o-mini":"haiku",...s!==void 0?{apiKey:s}:{},maxTurns:1}).close(),n.succeed(`${o} provider reachable`),t.format==="json"){let l=ae(),c=Xo(),u=l?E.ANTHROPIC_API_KEY?"ANTHROPIC_API_KEY":"CLAUDE_CODE_OAUTH_TOKEN":null,d=c?E.OPENAI_API_KEY?"OPENAI_API_KEY":"CODEX_API_KEY":null;console.log(JSON.stringify({providers:{anthropic:{ok:!!l,source:u},codex:{ok:!!c,source:d}},model:String(r),bypass:!0},null,2))}else console.log(`
|
|
2176
2175
|
`+Rm("Agent AFK \xB7 Status",[{label:"Provider",value:o,kind:"info"},{label:"Auth",value:i?s?"Found (OPENAI_API_KEY / CODEX_API_KEY)":"Reading ~/.codex/auth.json (run `afk provider auth diagnose`)":s?"Found (ANTHROPIC_API_KEY)":"Falling back to Claude OAuth",kind:s?"ok":"warn"},{label:"Model",value:String(r),kind:"info"},{label:"Bypass",value:"Permissions disabled",kind:"warn"}])+`
|
|
2177
2176
|
`)}catch(r){n.fail("Connection failed"),j(r)}})}q();function rv(e){e.command("config").description("View current configuration").option("-f, --format <format>","Output format (text|json)","text").action(t=>{let n=E.AFK_MODEL??E.CLAUDE_MODEL,r=n??"sonnet",o=Re(n),s=E.ANTHROPIC_API_KEY||E.CLAUDE_CODE_OAUTH_TOKEN,i=E.OPENAI_API_KEY||E.CODEX_API_KEY,a=o==="anthropic"?s:i,l=s?E.ANTHROPIC_API_KEY?"ANTHROPIC_API_KEY":"CLAUDE_CODE_OAUTH_TOKEN":null,c=i?E.OPENAI_API_KEY?"OPENAI_API_KEY":"CODEX_API_KEY":null;if(t.format==="json")console.log(JSON.stringify({model:r,provider:o,apiKey:{present:!!a,source:o==="anthropic"?l:c},thinking:E.AFK_THINKING||null,effort:E.AFK_EFFORT||null,bypass:!0,raw_env:{AFK_MODEL:E.AFK_MODEL??null,AFK_THINKING:E.AFK_THINKING??null,AFK_EFFORT:E.AFK_EFFORT??null,ANTHROPIC_API_KEY:E.ANTHROPIC_API_KEY?"set":"unset",CLAUDE_CODE_OAUTH_TOKEN:E.CLAUDE_CODE_OAUTH_TOKEN?"set":"unset",OPENAI_API_KEY:E.OPENAI_API_KEY?"set":"unset",CODEX_API_KEY:E.CODEX_API_KEY?"set":"unset"}},null,2));else{console.log(p.info(`\u{1F4CB} Current Configuration:
|
|
2178
2177
|
`)),console.log(` Model: ${p.info(n?r:r+" (default)")}`),console.log(` Provider: ${p.plan(o)}`),console.log(o==="anthropic"?` API Key: ${a?p.success("\u2713 Set (ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN)"):p.warning("\u26A0 Not set \u2014 subprocess will fall back to OAuth / keychain")}`:` API Key: ${a?p.success("\u2713 Set (OPENAI_API_KEY / CODEX_API_KEY)"):p.warning("\u26A0 Not set \u2014 falling back to `codex login` state")}`);let u=E.AFK_THINKING||"(unset \u2014 SDK default)";console.log(` Thinking: ${p.info(u)}`);let d=E.AFK_EFFORT||"(unset \u2014 SDK default)";console.log(` Effort: ${p.info(d)}`),console.log(` Bypass Permissions: ${p.warning("true (enabled)")}`),console.log(p.meta(`
|