agent-afk 3.96.0 → 3.96.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 +22 -22
- package/dist/index.mjs +1 -1
- package/dist/telegram.mjs +1 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -1054,7 +1054,7 @@ ${o}`;return s.includes("already checked out")||s.includes("is already used by w
|
|
|
1054
1054
|
Effective base URL: ${r}`)),r}return t}function pF(){if(dm!==void 0)return dm;if(!Nw){let o=[Kl(process.cwd(),".env"),ut(),Fy()];for(let s of o)pm(s)&&uF({path:s,override:!1});Nw=!0}let e={},t=v.AFK_MODEL??v.CLAUDE_MODEL;if(t){let o=t.toLowerCase();e.model=Cp(o)?o:t}if(ne(t)==="anthropic-direct"){let o=mm();o!==void 0&&(e.apiKey=o)}let r=v.AFK_LOCAL_BASE_URL;if(r&&r.length>0&&(e.baseUrl=r,e.apiKey=v.AFK_LOCAL_API_KEY||"local"),v.AFK_MAX_TOKENS&&(e.maxTokens=parseInt(v.AFK_MAX_TOKENS,10)),v.AFK_TEMPERATURE&&(e.temperature=parseFloat(v.AFK_TEMPERATURE)),v.AFK_SYSTEM_PROMPT&&(e.systemPrompt=v.AFK_SYSTEM_PROMPT),v.AFK_AUTO_ROUTING){let o=v.AFK_AUTO_ROUTING.toLowerCase()==="true";e.autoRouting={interactive:o,chat:o,telegram:o,daemon:o}}return v.AFK_OPENAI_BASE_URL&&(e.openaiBaseUrl=dF(v.AFK_OPENAI_BASE_URL)),dm=e,e}function jw(){if(Vo!==void 0)return Vo;let e=[Kl(process.cwd(),"afk.config.json"),Oo(),Ny()];for(let t of e)if(pm(t))try{let n=Uw(t,"utf-8"),r=JSON.parse(n),o={},s=Sb(r.models);if(typeof r.model=="string"&&r.model.length>0){let i=r.model.toLowerCase();o.model=Cp(i)?i:r.model}if(typeof r.maxTokens=="number"&&(o.maxTokens=r.maxTokens),typeof r.temperature=="number"&&(o.temperature=r.temperature),r.systemPrompt&&(o.systemPrompt=r.systemPrompt),r.autoRouting&&typeof r.autoRouting=="object"){let i={};typeof r.autoRouting.interactive=="boolean"&&(i.interactive=r.autoRouting.interactive),typeof r.autoRouting.chat=="boolean"&&(i.chat=r.autoRouting.chat),typeof r.autoRouting.telegram=="boolean"&&(i.telegram=r.autoRouting.telegram),typeof r.autoRouting.daemon=="boolean"&&(i.daemon=r.autoRouting.daemon),o.autoRouting=i}if(r.daemon&&typeof r.daemon=="object"){let i={};typeof r.daemon.task=="string"&&(i.task=r.daemon.task),typeof r.daemon.taskId=="string"&&(i.taskId=r.daemon.taskId);let a=r.daemon.worktreePrune;a&&typeof a=="object"&&(i.worktreePrune={enabled:typeof a.enabled=="boolean"?a.enabled:!0,cron:typeof a.cron=="string"?a.cron:"0 4 * * *",maxAgeDaysClean:typeof a.maxAgeDaysClean=="number"?a.maxAgeDaysClean:14,maxAgeDaysDirty:typeof a.maxAgeDaysDirty=="number"?a.maxAgeDaysDirty:30,scope:typeof a.scope=="string"?a.scope:"all"}),o.daemon=i}if(r.telegram&&typeof r.telegram=="object"){let i={},a=r.telegram.notify;if(a&&typeof a=="object"){let l={};if((a.mode==="primary"||a.mode==="broadcast"||a.mode==="custom")&&(l.mode=a.mode),typeof a.primaryChatId=="number"&&Number.isFinite(a.primaryChatId)&&(l.primaryChatId=a.primaryChatId),Array.isArray(a.targets)){let c=a.targets.filter(u=>typeof u=="number"&&Number.isFinite(u));c.length>0&&(l.targets=c)}i.notify=l}o.telegram=i}if(r.updatePolicy&&["notify","auto","off"].includes(r.updatePolicy)&&(o.updatePolicy=r.updatePolicy),typeof r.autoResumeOnUsageLimit=="boolean"&&(o.autoResumeOnUsageLimit=r.autoResumeOnUsageLimit),typeof r.bgSummaries=="boolean"&&(o.bgSummaries=r.bgSummaries),typeof r.maxSummaryCallsPerSession=="number"&&(o.maxSummaryCallsPerSession=Math.min(500,Math.max(1,r.maxSummaryCallsPerSession))),r.hooks!==null&&typeof r.hooks=="object"&&!Array.isArray(r.hooks)&&(o.hooks=r.hooks),typeof r.enableShellHooks=="boolean"&&(o.enableShellHooks=r.enableShellHooks),r.interactive&&typeof r.interactive=="object"){let i={};typeof r.interactive.worktreeAutoname=="boolean"&&(i.worktreeAutoname=r.interactive.worktreeAutoname),typeof r.interactive.worktreeBranchPrefix=="string"&&(i.worktreeBranchPrefix=cm(r.interactive.worktreeBranchPrefix,`${t}#/interactive/worktreeBranchPrefix`)),typeof r.interactive.worktreeBase=="string"&&r.interactive.worktreeBase.trim().length>0&&(um(r.interactive.worktreeBase,`${t}#/interactive/worktreeBase`),i.worktreeBase=r.interactive.worktreeBase),typeof r.interactive.suggestGhost=="boolean"&&(i.suggestGhost=r.interactive.suggestGhost),Object.keys(i).length>0&&(o.interactive=i)}return Vo={config:o,sourcePath:t,modelsPartial:s},Vo}catch(n){console.error(`Warning: Failed to parse ${t}:`,n)}return Vo={config:{},sourcePath:void 0,modelsPartial:{}},Vo}function mF(){if(Xo!==void 0)return Xo.value;let e=[Kl(process.cwd(),"AFK.md"),Kl(Ce(),"AFK.md")];for(let t of e)if(pm(t))try{let n=Uw(t,"utf-8").trim();if(n.length>0)return Xo={value:{content:n,path:t}},Xo.value}catch{}return Xo={value:null},Xo.value}function Hw(){return jw().config.telegram??{}}function ct(e){let t=pF(),{config:n,sourcePath:r,modelsPartial:o}=jw(),s={...Ci,...t,...n,...e},i;if(t.systemPrompt!==void 0)i="env:AFK_SYSTEM_PROMPT";else if(n.systemPrompt!==void 0&&r!==void 0)i=`file:${r}`;else if(s.systemPrompt===void 0){let c=mF();c!==null&&(s.systemPrompt=c.content,i=`afk-md:${c.path}`)}let a={model:s.model??Ci.model,maxTokens:s.maxTokens??Ci.maxTokens,temperature:s.temperature??Ci.temperature,updatePolicy:s.updatePolicy??Ci.updatePolicy,...s.apiKey!==void 0?{apiKey:s.apiKey}:{},...s.baseUrl!==void 0?{baseUrl:s.baseUrl}:{},...s.openaiBaseUrl!==void 0?{openaiBaseUrl:s.openaiBaseUrl}:{},...s.systemPrompt!==void 0?{systemPrompt:s.systemPrompt}:{},...i!==void 0?{systemPromptSource:i}:{},...s.autoRouting!==void 0?{autoRouting:s.autoRouting}:{},...s.daemon!==void 0?{daemon:s.daemon}:{},...s.telegram!==void 0?{telegram:s.telegram}:{},...s.bgSummaries!==void 0?{bgSummaries:s.bgSummaries}:{},...s.maxSummaryCallsPerSession!==void 0?{maxSummaryCallsPerSession:s.maxSummaryCallsPerSession}:{},...s.interactive!==void 0?{interactive:s.interactive}:{},...s.hooks!==void 0?{hooks:s.hooks}:{},...s.enableShellHooks!==void 0?{enableShellHooks:s.enableShellHooks}:{}},l=e?.models??Rp(o);if(yl(l),a.models=l,typeof a.model=="string"&&a.model.toLowerCase().startsWith("local-")&&(a.baseUrl===void 0||a.baseUrl.length===0))throw new Error(`Model '${a.model}' requires AFK_LOCAL_BASE_URL to be set (e.g. AFK_LOCAL_BASE_URL=http://127.0.0.1:8080). Point it at your local Anthropic-Messages-compatible server.`);return a}var Ci,Nw,dm,Bw,Vo,Xo,_n=_(()=>{"use strict";Vn();Yn();Ke();K();Yo();_i();z();Ci={model:"sonnet",maxTokens:4096,temperature:1,updatePolicy:"notify"},Nw=!1;Bw=new Set});function fF(e,t){return t!==void 0&&Number.isFinite(t)&&t!==0?t:e.find(r=>r>0)??e[0]}function gF(e,t={}){let n=[...e],r=t.mode??"primary";if(r==="broadcast")return n;if(r==="custom"){let s=(t.targets??[]).filter(i=>typeof i=="number"&&Number.isFinite(i)&&i!==0);if(s.length>0)return[...new Set(s)]}let o=fF(n,t.primaryChatId);return o!==void 0?[o]:[]}function hF(e){if(!e)return;let t=e.trim();if(!/^-?\d+$/.test(t))return;let n=Number(t);return Number.isFinite(n)&&n!==0?n:void 0}function yF(e){if(!e)return;let t=e.trim().toLowerCase();return t==="primary"||t==="broadcast"||t==="custom"?t:void 0}function bF(){let e=Hw().notify??{},t=e.mode??yF(v.AFK_TELEGRAM_NOTIFY_MODE),n=e.primaryChatId??hF(v.AFK_TELEGRAM_PRIMARY_CHAT_ID);return{...t!==void 0?{mode:t}:{},...n!==void 0?{primaryChatId:n}:{},...e.targets!==void 0?{targets:e.targets}:{}}}function Gl(){let e=xw(v.AFK_TELEGRAM_ALLOWED_CHAT_IDS);return gF(e,bF())}var fm=_(()=>{"use strict";Rw();_n();z()});function Ww(e,t=4096){if(e.length<=t)return[e];let n=[],r=e;for(;r.length>0;){if(r.length<=t){n.push(r);break}let o=t,s=r.lastIndexOf(`
|
|
1055
1055
|
`,t);if(s>t-500&&s>0)o=s+1;else{let i=r.slice(0,t).match(/[.!?]\s+(?=[A-Z])/g);if(i&&i.length>0){let a=i[i.length-1];if(a){let l=r.lastIndexOf(a,t);l>t-200&&l>0&&(o=l+2)}}else{let a=r.lastIndexOf(" ",t);a>t-100&&a>0&&(o=a+1)}}n.push(r.slice(0,o).trim()),r=r.slice(o).trim()}return n}var Kw=_(()=>{"use strict"});var gm={};Xa(gm,{push:()=>zl,pushIfConfigured:()=>Zo});async function zl(e){if(!e.token)throw new Error("push: token is required");if(e.chatId===""||e.chatId==null||e.chatId===0)throw new Error("push: chatId is required");let t=e.fetchImpl??fetch,r=`${e.apiBase??wF}/bot${e.token}/sendMessage`,o={chat_id:e.chatId,text:e.text.slice(0,4096)};e.parseMode&&(o.parse_mode=e.parseMode),e.replyMarkup&&(o.reply_markup=e.replyMarkup);let s=new AbortController,i=setTimeout(()=>s.abort(),1e4);try{let a=await t(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:s.signal});if(a.ok)return{ok:!0,status:a.status};let l;try{l=(await a.json()).description}catch{l=`HTTP ${a.status}`}return{ok:!1,status:a.status,...l!==void 0?{errorMessage:l}:{}}}catch(a){return{ok:!1,status:0,errorMessage:a instanceof Error?a.message:String(a)}}finally{clearTimeout(i)}}async function Zo(e,t={}){let n=v.TELEGRAM_BOT_TOKEN;if(!n)return null;let r=Gl();if(r.length===0)return null;let o=Ww(e),s=[];for(let i of r)for(let a=0;a<o.length;a++)s.push(await zl({token:n,chatId:i,text:o[a]??"",...t.parseMode!==void 0?{parseMode:t.parseMode}:{},...t.replyMarkup!==void 0&&a===0?{replyMarkup:t.replyMarkup}:{},...t.fetchImpl!==void 0?{fetchImpl:t.fetchImpl}:{}}));return s}var wF,Qo=_(()=>{"use strict";fm();Kw();z();wF="https://api.telegram.org"});function SF(e=zl){return async(t,n)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected an object",isError:!0};let o=t.message;if(typeof o!="string")return{content:"Invalid input: message must be a string",isError:!0};if(o.length===0)return{content:"Invalid input: message must be non-empty",isError:!0};if(o.length>Gw)return{content:`Invalid input: message exceeds Telegram's ${Gw}-character limit (got ${o.length}). Split into multiple sends or trim before calling.`,isError:!0};let s=v.TELEGRAM_BOT_TOKEN;if(!s)return{content:"Telegram is not configured: TELEGRAM_BOT_TOKEN is not set. Run the bot setup wizard or export the env var before using send_telegram.",isError:!0};let i=Gl();if(i.length===0)return{content:"Telegram is not configured: AFK_TELEGRAM_ALLOWED_CHAT_IDS is empty or unset. Add the operator chat ID(s) before using send_telegram.",isError:!0};let a=[];for(let l of i){let c=await e({token:s,chatId:l,text:o});c.ok||a.push(`chat ${l}: ${c.errorMessage??`HTTP ${c.status}`}`)}return a.length===i.length?{content:`Failed to send Telegram message to any chat. ${a.join("; ")}`,isError:!0}:a.length>0?{content:`Sent Telegram message to ${i.length-a.length}/${i.length} chat(s); ${a.length} failed: ${a.join("; ")}`}:{content:i.length===1?`Sent Telegram message to chat ${i[0]}.`:`Sent Telegram message to ${i.length} chats.`}}}var Gw,zw,qw=_(()=>{"use strict";z();Qo();fm();Gw=4096;zw=SF()});import{JSDOM as vF}from"jsdom";import{Readability as kF}from"@mozilla/readability";import EF from"turndown";function Jw(e){return e.replace(/\n{3,}/g,`
|
|
1056
1056
|
|
|
1057
|
-
`).trim()}function TF(e){return(e?.textContent??"").replace(/\s+/g," ").trim().length}function Vw(e,t){let r=new vF(e,{url:t}).window.document,o=(r.title??"").trim(),s=null;try{let c=r.cloneNode(!0);s=new kF(c).parse()}catch{s=null}if(s&&typeof s.content=="string"&&s.content.trim().length>0){let c=Jw(hm.turndown(s.content)),u=(s.title??"").trim()||o,d=typeof s.length=="number"&&s.length>0?s.length:(s.textContent??"").replace(/\s+/g," ").trim().length;return{title:u,markdown:c,textLength:d,usedFallback:!1}}let i=r.body,a=i?.innerHTML??"",l=Jw(hm.turndown(a));return{title:o,markdown:l,textLength:TF(i),usedFallback:!0}}var Yw,hm,Xw=_(()=>{"use strict";Yw=200,hm=new EF({headingStyle:"atx",codeBlockStyle:"fenced",bulletListMarker:"-"});hm.remove(["script","style","noscript","iframe"])});import{readFileSync as xF}from"node:fs";import{join as RF}from"path";function AF(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function Zw(e,t){return AF(t).test(e)}function IF(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(_F.has(t))return!0;if(CF.has(t))return!1}return!1}function Qw(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function PF(e){if(e===void 0||e===""||e==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${e}`)}function MF(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function OF(e){try{return xF(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function $F(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright")n.backend="playwright";else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(t.backend)}`);return n}function eS(e){let t=e?.env??v,n=e?.readFileSync??OF,r=e?.surface??t.AGENT_SURFACE,o=IF(t.AFK_BROWSER_HEADLESS,r),s=Qw(t.AFK_BROWSER_ALLOWED_DOMAINS),i=Qw(t.AFK_BROWSER_BLOCKED_DOMAINS),a=MF(t.AFK_BROWSER_DOM_SNAPSHOTS),l=PF(t.AFK_BROWSER_BACKEND),c={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:l,configPath:null},u=t.AFK_BROWSER_CONFIG,d=u!==void 0&&u.trim()!==""?u.trim():RF(zt(),"browser.json"),m=n(d);if(m===void 0)return c;let f;try{f=JSON.parse(m)}catch(h){throw new Error(`Failed to parse browser config at ${d}: ${String(h)}`)}if(typeof f!="object"||f===null||Array.isArray(f))throw new Error(`Browser config at ${d} must be a JSON object`);let g=$F(c,f);return g.configPath=d,g}function ym(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(Zw(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>Zw(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var _F,CF,bm=_(()=>{"use strict";z();K();_F=new Set(["daemon","subagent","telegram"]),CF=new Set(["repl","interactive","cli"])});import DF from"node:fs";import LF from"node:path";import{chromium as FF}from"playwright";function NF(){try{return"3.96.0"}catch{}try{let e=LF.resolve(import.meta.dirname,"../../../package.json"),t=DF.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var BF,ql,tS=_(()=>{"use strict";BF=NF(),ql=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(t){this.config=t}async ensureBrowser(){return this.browser!==void 0&&this.browser.isConnected()?this.browser:(this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=FF.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,t)).catch(t=>{throw this.launchPromise=void 0,t}),this.launchPromise))}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s={context:o,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),o}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let i=await o.newPage(),a=await i.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),l=await i.content(),c=i.url(),u=a!==null?a.status():null;return{html:l,finalUrl:c,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${BF}`}}}});import{createHash as UF}from"crypto";function wm(e){if(e.length===0)return e;let t=e;for(let{regex:n,name:r}of jF)r==="form-password"?t=t.replace(n,"password=[redacted]"):t=t.replace(n,"[redacted]");return t}function nS(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&HF.test(e.label))}function rS(e){return UF("sha256").update(e,"utf8").digest("hex").slice(0,8)}function oS(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var jF,HF,Ii=_(()=>{"use strict";jF=[{name:"aws-access-key",regex:/AKIA[0-9A-Z]{16}/g},{name:"github-pat",regex:/ghp_[a-zA-Z0-9]{36}/g},{name:"openai-bearer",regex:/sk-[a-zA-Z0-9_-]{20,}/g},{name:"slack-token",regex:/xox[abp]-[a-zA-Z0-9-]{10,}/g},{name:"jwt",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g},{name:"form-password",regex:/password=[^&\s]+/gi}];HF=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as WF}from"node:crypto";function KF(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function GF(e,t,n){return`el_${WF("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function zF(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function sS(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function aS(e,t){let n=e.role??"",r=e.name??"";iS.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let s of e.children??[])aS(s,t)}async function qF(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let u=window.getComputedStyle(i);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},lS).catch(()=>[])}async function JF(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",l=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[i]??"");if(i==="input"){let h=s.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in s?s.value:void 0,d=u!==void 0?String(u):void 0,m=s.disabled??!1,f=i==="input"?s.checked:void 0,g={role:c,name:l,disabled:m};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},lS).catch(()=>[])}function YF(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Jl(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],s=YF(e),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=qF(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,m,f,g,h]=await Promise.all([i,a,l,c,u]),b,y=!1;d!==null?(b=[],aS(d,b)):(o.push("observation skipped accessibility tree (returned null)"),y=!0,b=(await JF(e)).filter(O=>iS.has(O.role??"")));let w=new Map;for(let C of m){let O=sS(C.name),F=w.get(O);(!F||F.bbox.w===0&&C.bbox.w>0)&&w.set(O,C)}let S=b.map(C=>({ax:C,dom:w.get(sS(C.name??""))})),x=r?S:S.filter(C=>C.dom?C.dom.bbox.w>0||C.dom.bbox.h>0:!0);x.sort((C,O)=>{let F=C.dom?.bbox.y??0,H=O.dom?.bbox.y??0;if(F!==H)return F-H;let U=C.dom?.bbox.x??0,G=O.dom?.bbox.x??0;return U-G}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=x.slice(0,n).map((C,O)=>{let F=C.ax.role??"generic",H=C.ax.name??"",U=GF(F,H,O),G=C.dom?.bbox??{x:0,y:0,w:0,h:0},L=C.dom?.type??null,$=null;C.ax.value!==void 0&&C.ax.value!==null&&($=String(C.ax.value)),C.ax.checked!==void 0&&($=String(C.ax.checked)),nS({role:F,kind:L})&&($="[redacted]");let D={disabled:C.ax.disabled??!1};C.ax.checked!==void 0&&(D.checked=C.ax.checked===!0||C.ax.checked==="mixed"),C.ax.selected!==void 0&&(D.selected=C.ax.selected),C.ax.expanded!==void 0&&(D.expanded=C.ax.expanded);let I;C.dom?.testId?I=`[data-testid="${C.dom.testId}"]`:C.dom?.id&&(I=`#${C.dom.id}`);let V={id:U,role:F,label:KF(H),kind:L,value:$,state:D,bbox:G};return I!==void 0&&(V.selector=I),V}),T="idle";try{let C=await e.evaluate(()=>document.readyState);C==="loading"?T="loading":C==="interactive"?T="navigating":T="idle"}catch{T="navigating"}T!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),y&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let R=zF(f),M=`obs_${t.observationCounter.toString(36)}`,N=new Date().toISOString();return{observationId:M,url:g,title:h,textSummary:R,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:T,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:N}}var iS,lS,cS=_(()=>{"use strict";Ii();iS=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);lS="a[href], button, input, select, textarea, [role], [tabindex], label"});async function uS(e,t){try{let n=await e.nth(t).evaluate(i=>{let a=i,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function Sm(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,s)=>uS(e,s)))).filter(o=>o!==null)}async function VF(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(i)||(t.add(i),n.push({key:i,locator:r,index:s}))}return n}async function vm(e,t,n){switch(t.kind){case"element_id":return XF(e,t,n);case"selector":return ZF(e,t);case"semantic":return QF(e,t)}}async function XF(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:t};if(s===1)return{outcome:"resolved",locator:o};let i=await Sm(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function ZF(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await Sm(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function QF(e,t){return t.role!==void 0?eN(e,t.text,t.role):tN(e,t.text,t)}async function eN(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await Sm(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:s}}async function tN(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),s=e.getByLabel(t,{exact:!1}),[i,a,l]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+l===0)return{outcome:"not_found",query:n};let u=[];i>0&&u.push({loc:r,count:i}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:s,count:l});let d=await VF(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=d.slice(0,5),f=[];for(let h=0;h<m.length;h++){let b=m[h];if(b===void 0)continue;let y=await uS(b.locator,b.index);if(y!==null){let w=`${y.role}:${y.label}:${h}`,S=0;for(let x=0;x<w.length;x++)S=S*31+w.charCodeAt(x)>>>0;f.push({...y,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var dS=_(()=>{"use strict"});import{randomBytes as nN}from"crypto";import{mkdir as rN,stat as oN,writeFile as sN}from"fs/promises";import{join as km}from"path";import{gzip as iN}from"zlib";import{promisify as aN}from"util";function lN(e){return km(Mo(e),"browser")}function cN(e){return km(lN(e),"screenshots")}function uN(){return new Date().toISOString().replace(/[:.]/g,"-")}function dN(){return nN(3).toString("hex")}async function Em(e,t,n){if(t.length>pS)throw new Error(`writeScreenshotSidecar: buffer exceeds ${pS} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=cN(e);await rN(r,{recursive:!0});let o=`${uN()}-${dN()}-${n}.png`,s=km(r,o);await sN(s,t);let{size:i}=await oN(s);return{path:s,bytes:i}}var Bte,pS,mS=_(()=>{"use strict";K();Ii();Bte=aN(iN);pS=5*1024*1024});var gS={};Xa(gS,{PlaywrightProvider:()=>Tm});function fS(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Tm,hS=_(()=>{"use strict";tS();cS();dS();bm();Ii();mS();Tm=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new ql(t)}async open(t){let n=ym(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(c){a=c}(t.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let l=await Jl(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,l.interactive,l.url,l.title,"browser_open"),a!==null)throw a;return l}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;t.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await Jl(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=t.timeoutMs??3e4,a=await vm(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${fS(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:i});break;case"fill":{let h=wm(t.value??"");await l.fill(t.value??"");break}case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:i});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await l.waitFor({timeout:i,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=r.url();if(d!==s){let h=ym(d,this.config);if(!h.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:d,reason:h.reason}}let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Jl(r,{observationCounter:o.observationCounter,screenshotPath:m,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(t.target!==void 0){let u=await vm(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${fS(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await u.locator.screenshot()}else s=await r.screenshot({fullPage:t.fullPage??!1});let{path:i,bytes:a}=await Em(n,s,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:i,bytes:a,width:l,height:c}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,s){t.knownElements=new Map(n.map(i=>[i.id,i])),t.currentUrl=r,t.currentTitle=o,t.lastAction=s,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:s}=await Em(n,o,r);return s}catch{return null}}}});var Hr={};Xa(Hr,{__resetBrowserRegistryForTests:()=>hN,browserProviderActive:()=>fN,closeBrowserProvider:()=>xm,getBrowserProvider:()=>mN,peekBrowserProvider:()=>gN});function yS(){Promise.resolve(xm()).then(()=>{process.exit(130)})}function bS(){Promise.resolve(xm()).then(()=>{process.exit(143)})}function wS(){Xt=null}function pN(){Yl||(process.on("SIGINT",yS),process.on("SIGTERM",bS),process.on("exit",wS),Yl=!0)}function SS(){Yl&&(process.removeListener("SIGINT",yS),process.removeListener("SIGTERM",bS),process.removeListener("exit",wS),Yl=!1)}async function mN(e){return Xt!==null?Xt:(jr!==null||(jr=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(hS(),gS)),n=eS(e),r=new t(n);return pN(),Xt=r,jr=null,r})()),jr)}async function xm(){if(Xt===null)return;let e=Xt;Xt=null,jr=null,SS(),await e.shutdown()}function fN(){return Xt!==null}function gN(){return Xt}function hN(){Xt=null,jr=null,SS()}var Xt,jr,Yl,Wr=_(()=>{"use strict";bm();Xt=null,jr=null,Yl=!1});function vS(e,t){try{return Vw(e,t)}catch{return{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function vN(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Wr(),Hr));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal})}async function kS(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??vN,o=null,s=e,i=null,a=null;try{let c=await n(e,{headers:SN,redirect:"follow",signal:t.signal});i=c.status,s=c.url||e;let u=c.headers.get("content-type")??"";if(c.ok){if(wN.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let d=await c.text();if(bN.test(u)&&!yN.test(u))return{title:"",markdown:d.trim(),finalUrl:s,usedRender:!1};o=vS(d,s)}}catch(c){if(t.signal.aborted||c instanceof Error&&c.message.startsWith("web_scrape markdown mode received binary"))throw c;a=c}if(!(o===null||o.textLength<Yw)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};try{let c=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal}),u=vS(c.html,c.finalUrl);if(o===null||u.textLength>=o.textLength)return{title:u.title,markdown:u.markdown,finalUrl:c.finalUrl,usedRender:!0}}catch(c){if(t.signal.aborted)throw c;if(o===null){let u=c instanceof Error?c.message:String(c),d=a instanceof Error?a.message:`HTTP ${i??"error"}`,m=new Error(`web_scrape could not retrieve ${e}: fetch failed (${d}) and render failed (${u}).`);throw m.cause=c,m}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${i??"error"}).`)}var yN,bN,wN,SN,ES=_(()=>{"use strict";Xw();yN=/(text\/html|application\/xhtml\+xml)/i,bN=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,wN=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,SN={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function TS(e){return e.replace(/<[^>]*>/g,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/\s+/g," ").trim()}function TN(e){let t=e.fetchFn??globalThis.fetch;return{name:"brave",async search(n,{limit:r,signal:o}){let s=new URL(kN);s.searchParams.set("q",n),s.searchParams.set("count",String(Math.min(Math.max(r,1),EN)));let i=await t(s.toString(),{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip","X-Subscription-Token":e.apiKey,"User-Agent":"agent-afk/web_scrape"},signal:o});if(!i.ok){let c="";try{let d=await i.text(),m=Ll(d);m&&(c=`: ${m.length>200?m.slice(0,200)+"\u2026":m}`)}catch{}let u=i.statusText?` ${i.statusText}`:"";throw new Error(`Brave Search HTTP ${i.status}${u}${c}`)}let a;try{a=await i.json()}catch(c){throw new Error(`Brave Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(a.web?.results??[]).slice(0,r).map(c=>({title:TS(c.title??"")||"(untitled)",url:c.url??"",description:TS(c.description??"")})).filter(c=>c.url.length>0)}}}function xS(e){return e.braveApiKey!==void 0&&e.braveApiKey.trim()!==""?TN({apiKey:e.braveApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set BRAVE_SEARCH_API_KEY (free tier at https://brave.com/search/api/) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function RS(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
1057
|
+
`).trim()}function TF(e){return(e?.textContent??"").replace(/\s+/g," ").trim().length}function Vw(e,t){let r=new vF(e,{url:t}).window.document,o=(r.title??"").trim(),s=null;try{let c=r.cloneNode(!0);s=new kF(c).parse()}catch{s=null}if(s&&typeof s.content=="string"&&s.content.trim().length>0){let c=Jw(hm.turndown(s.content)),u=(s.title??"").trim()||o,d=typeof s.length=="number"&&s.length>0?s.length:(s.textContent??"").replace(/\s+/g," ").trim().length;return{title:u,markdown:c,textLength:d,usedFallback:!1}}let i=r.body,a=i?.innerHTML??"",l=Jw(hm.turndown(a));return{title:o,markdown:l,textLength:TF(i),usedFallback:!0}}var Yw,hm,Xw=_(()=>{"use strict";Yw=200,hm=new EF({headingStyle:"atx",codeBlockStyle:"fenced",bulletListMarker:"-"});hm.remove(["script","style","noscript","iframe"])});import{readFileSync as xF}from"node:fs";import{join as RF}from"path";function AF(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function Zw(e,t){return AF(t).test(e)}function IF(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(_F.has(t))return!0;if(CF.has(t))return!1}return!1}function Qw(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function PF(e){if(e===void 0||e===""||e==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${e}`)}function MF(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function OF(e){try{return xF(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function $F(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright")n.backend="playwright";else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(t.backend)}`);return n}function eS(e){let t=e?.env??v,n=e?.readFileSync??OF,r=e?.surface??t.AGENT_SURFACE,o=IF(t.AFK_BROWSER_HEADLESS,r),s=Qw(t.AFK_BROWSER_ALLOWED_DOMAINS),i=Qw(t.AFK_BROWSER_BLOCKED_DOMAINS),a=MF(t.AFK_BROWSER_DOM_SNAPSHOTS),l=PF(t.AFK_BROWSER_BACKEND),c={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:l,configPath:null},u=t.AFK_BROWSER_CONFIG,d=u!==void 0&&u.trim()!==""?u.trim():RF(zt(),"browser.json"),m=n(d);if(m===void 0)return c;let f;try{f=JSON.parse(m)}catch(h){throw new Error(`Failed to parse browser config at ${d}: ${String(h)}`)}if(typeof f!="object"||f===null||Array.isArray(f))throw new Error(`Browser config at ${d} must be a JSON object`);let g=$F(c,f);return g.configPath=d,g}function ym(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(Zw(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>Zw(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var _F,CF,bm=_(()=>{"use strict";z();K();_F=new Set(["daemon","subagent","telegram"]),CF=new Set(["repl","interactive","cli"])});import DF from"node:fs";import LF from"node:path";import{chromium as FF}from"playwright";function NF(){try{return"3.96.1"}catch{}try{let e=LF.resolve(import.meta.dirname,"../../../package.json"),t=DF.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var BF,ql,tS=_(()=>{"use strict";BF=NF(),ql=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(t){this.config=t}async ensureBrowser(){return this.browser!==void 0&&this.browser.isConnected()?this.browser:(this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=FF.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,t)).catch(t=>{throw this.launchPromise=void 0,t}),this.launchPromise))}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s={context:o,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),o}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let i=await o.newPage(),a=await i.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),l=await i.content(),c=i.url(),u=a!==null?a.status():null;return{html:l,finalUrl:c,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${BF}`}}}});import{createHash as UF}from"crypto";function wm(e){if(e.length===0)return e;let t=e;for(let{regex:n,name:r}of jF)r==="form-password"?t=t.replace(n,"password=[redacted]"):t=t.replace(n,"[redacted]");return t}function nS(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&HF.test(e.label))}function rS(e){return UF("sha256").update(e,"utf8").digest("hex").slice(0,8)}function oS(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var jF,HF,Ii=_(()=>{"use strict";jF=[{name:"aws-access-key",regex:/AKIA[0-9A-Z]{16}/g},{name:"github-pat",regex:/ghp_[a-zA-Z0-9]{36}/g},{name:"openai-bearer",regex:/sk-[a-zA-Z0-9_-]{20,}/g},{name:"slack-token",regex:/xox[abp]-[a-zA-Z0-9-]{10,}/g},{name:"jwt",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g},{name:"form-password",regex:/password=[^&\s]+/gi}];HF=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as WF}from"node:crypto";function KF(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function GF(e,t,n){return`el_${WF("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function zF(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function sS(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function aS(e,t){let n=e.role??"",r=e.name??"";iS.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let s of e.children??[])aS(s,t)}async function qF(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let u=window.getComputedStyle(i);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},lS).catch(()=>[])}async function JF(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",l=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[i]??"");if(i==="input"){let h=s.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in s?s.value:void 0,d=u!==void 0?String(u):void 0,m=s.disabled??!1,f=i==="input"?s.checked:void 0,g={role:c,name:l,disabled:m};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},lS).catch(()=>[])}function YF(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Jl(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],s=YF(e),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=qF(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,m,f,g,h]=await Promise.all([i,a,l,c,u]),b,y=!1;d!==null?(b=[],aS(d,b)):(o.push("observation skipped accessibility tree (returned null)"),y=!0,b=(await JF(e)).filter(O=>iS.has(O.role??"")));let w=new Map;for(let C of m){let O=sS(C.name),F=w.get(O);(!F||F.bbox.w===0&&C.bbox.w>0)&&w.set(O,C)}let S=b.map(C=>({ax:C,dom:w.get(sS(C.name??""))})),x=r?S:S.filter(C=>C.dom?C.dom.bbox.w>0||C.dom.bbox.h>0:!0);x.sort((C,O)=>{let F=C.dom?.bbox.y??0,H=O.dom?.bbox.y??0;if(F!==H)return F-H;let U=C.dom?.bbox.x??0,G=O.dom?.bbox.x??0;return U-G}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=x.slice(0,n).map((C,O)=>{let F=C.ax.role??"generic",H=C.ax.name??"",U=GF(F,H,O),G=C.dom?.bbox??{x:0,y:0,w:0,h:0},L=C.dom?.type??null,$=null;C.ax.value!==void 0&&C.ax.value!==null&&($=String(C.ax.value)),C.ax.checked!==void 0&&($=String(C.ax.checked)),nS({role:F,kind:L})&&($="[redacted]");let D={disabled:C.ax.disabled??!1};C.ax.checked!==void 0&&(D.checked=C.ax.checked===!0||C.ax.checked==="mixed"),C.ax.selected!==void 0&&(D.selected=C.ax.selected),C.ax.expanded!==void 0&&(D.expanded=C.ax.expanded);let I;C.dom?.testId?I=`[data-testid="${C.dom.testId}"]`:C.dom?.id&&(I=`#${C.dom.id}`);let V={id:U,role:F,label:KF(H),kind:L,value:$,state:D,bbox:G};return I!==void 0&&(V.selector=I),V}),T="idle";try{let C=await e.evaluate(()=>document.readyState);C==="loading"?T="loading":C==="interactive"?T="navigating":T="idle"}catch{T="navigating"}T!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),y&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let R=zF(f),M=`obs_${t.observationCounter.toString(36)}`,N=new Date().toISOString();return{observationId:M,url:g,title:h,textSummary:R,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:T,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:N}}var iS,lS,cS=_(()=>{"use strict";Ii();iS=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);lS="a[href], button, input, select, textarea, [role], [tabindex], label"});async function uS(e,t){try{let n=await e.nth(t).evaluate(i=>{let a=i,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function Sm(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,s)=>uS(e,s)))).filter(o=>o!==null)}async function VF(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(i)||(t.add(i),n.push({key:i,locator:r,index:s}))}return n}async function vm(e,t,n){switch(t.kind){case"element_id":return XF(e,t,n);case"selector":return ZF(e,t);case"semantic":return QF(e,t)}}async function XF(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:t};if(s===1)return{outcome:"resolved",locator:o};let i=await Sm(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function ZF(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await Sm(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function QF(e,t){return t.role!==void 0?eN(e,t.text,t.role):tN(e,t.text,t)}async function eN(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await Sm(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:s}}async function tN(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),s=e.getByLabel(t,{exact:!1}),[i,a,l]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+l===0)return{outcome:"not_found",query:n};let u=[];i>0&&u.push({loc:r,count:i}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:s,count:l});let d=await VF(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=d.slice(0,5),f=[];for(let h=0;h<m.length;h++){let b=m[h];if(b===void 0)continue;let y=await uS(b.locator,b.index);if(y!==null){let w=`${y.role}:${y.label}:${h}`,S=0;for(let x=0;x<w.length;x++)S=S*31+w.charCodeAt(x)>>>0;f.push({...y,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var dS=_(()=>{"use strict"});import{randomBytes as nN}from"crypto";import{mkdir as rN,stat as oN,writeFile as sN}from"fs/promises";import{join as km}from"path";import{gzip as iN}from"zlib";import{promisify as aN}from"util";function lN(e){return km(Mo(e),"browser")}function cN(e){return km(lN(e),"screenshots")}function uN(){return new Date().toISOString().replace(/[:.]/g,"-")}function dN(){return nN(3).toString("hex")}async function Em(e,t,n){if(t.length>pS)throw new Error(`writeScreenshotSidecar: buffer exceeds ${pS} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=cN(e);await rN(r,{recursive:!0});let o=`${uN()}-${dN()}-${n}.png`,s=km(r,o);await sN(s,t);let{size:i}=await oN(s);return{path:s,bytes:i}}var Bte,pS,mS=_(()=>{"use strict";K();Ii();Bte=aN(iN);pS=5*1024*1024});var gS={};Xa(gS,{PlaywrightProvider:()=>Tm});function fS(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Tm,hS=_(()=>{"use strict";tS();cS();dS();bm();Ii();mS();Tm=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new ql(t)}async open(t){let n=ym(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(c){a=c}(t.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let l=await Jl(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,l.interactive,l.url,l.title,"browser_open"),a!==null)throw a;return l}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;t.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await Jl(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=t.timeoutMs??3e4,a=await vm(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${fS(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:i});break;case"fill":{let h=wm(t.value??"");await l.fill(t.value??"");break}case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:i});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await l.waitFor({timeout:i,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=r.url();if(d!==s){let h=ym(d,this.config);if(!h.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:d,reason:h.reason}}let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Jl(r,{observationCounter:o.observationCounter,screenshotPath:m,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(t.target!==void 0){let u=await vm(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${fS(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await u.locator.screenshot()}else s=await r.screenshot({fullPage:t.fullPage??!1});let{path:i,bytes:a}=await Em(n,s,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:i,bytes:a,width:l,height:c}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,s){t.knownElements=new Map(n.map(i=>[i.id,i])),t.currentUrl=r,t.currentTitle=o,t.lastAction=s,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:s}=await Em(n,o,r);return s}catch{return null}}}});var Hr={};Xa(Hr,{__resetBrowserRegistryForTests:()=>hN,browserProviderActive:()=>fN,closeBrowserProvider:()=>xm,getBrowserProvider:()=>mN,peekBrowserProvider:()=>gN});function yS(){Promise.resolve(xm()).then(()=>{process.exit(130)})}function bS(){Promise.resolve(xm()).then(()=>{process.exit(143)})}function wS(){Xt=null}function pN(){Yl||(process.on("SIGINT",yS),process.on("SIGTERM",bS),process.on("exit",wS),Yl=!0)}function SS(){Yl&&(process.removeListener("SIGINT",yS),process.removeListener("SIGTERM",bS),process.removeListener("exit",wS),Yl=!1)}async function mN(e){return Xt!==null?Xt:(jr!==null||(jr=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(hS(),gS)),n=eS(e),r=new t(n);return pN(),Xt=r,jr=null,r})()),jr)}async function xm(){if(Xt===null)return;let e=Xt;Xt=null,jr=null,SS(),await e.shutdown()}function fN(){return Xt!==null}function gN(){return Xt}function hN(){Xt=null,jr=null,SS()}var Xt,jr,Yl,Wr=_(()=>{"use strict";bm();Xt=null,jr=null,Yl=!1});function vS(e,t){try{return Vw(e,t)}catch{return{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function vN(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Wr(),Hr));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal})}async function kS(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??vN,o=null,s=e,i=null,a=null;try{let c=await n(e,{headers:SN,redirect:"follow",signal:t.signal});i=c.status,s=c.url||e;let u=c.headers.get("content-type")??"";if(c.ok){if(wN.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let d=await c.text();if(bN.test(u)&&!yN.test(u))return{title:"",markdown:d.trim(),finalUrl:s,usedRender:!1};o=vS(d,s)}}catch(c){if(t.signal.aborted||c instanceof Error&&c.message.startsWith("web_scrape markdown mode received binary"))throw c;a=c}if(!(o===null||o.textLength<Yw)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};try{let c=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal}),u=vS(c.html,c.finalUrl);if(o===null||u.textLength>=o.textLength)return{title:u.title,markdown:u.markdown,finalUrl:c.finalUrl,usedRender:!0}}catch(c){if(t.signal.aborted)throw c;if(o===null){let u=c instanceof Error?c.message:String(c),d=a instanceof Error?a.message:`HTTP ${i??"error"}`,m=new Error(`web_scrape could not retrieve ${e}: fetch failed (${d}) and render failed (${u}).`);throw m.cause=c,m}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${i??"error"}).`)}var yN,bN,wN,SN,ES=_(()=>{"use strict";Xw();yN=/(text\/html|application\/xhtml\+xml)/i,bN=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,wN=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,SN={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function TS(e){return e.replace(/<[^>]*>/g,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/\s+/g," ").trim()}function TN(e){let t=e.fetchFn??globalThis.fetch;return{name:"brave",async search(n,{limit:r,signal:o}){let s=new URL(kN);s.searchParams.set("q",n),s.searchParams.set("count",String(Math.min(Math.max(r,1),EN)));let i=await t(s.toString(),{method:"GET",headers:{Accept:"application/json","Accept-Encoding":"gzip","X-Subscription-Token":e.apiKey,"User-Agent":"agent-afk/web_scrape"},signal:o});if(!i.ok){let c="";try{let d=await i.text(),m=Ll(d);m&&(c=`: ${m.length>200?m.slice(0,200)+"\u2026":m}`)}catch{}let u=i.statusText?` ${i.statusText}`:"";throw new Error(`Brave Search HTTP ${i.status}${u}${c}`)}let a;try{a=await i.json()}catch(c){throw new Error(`Brave Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(a.web?.results??[]).slice(0,r).map(c=>({title:TS(c.title??"")||"(untitled)",url:c.url??"",description:TS(c.description??"")})).filter(c=>c.url.length>0)}}}function xS(e){return e.braveApiKey!==void 0&&e.braveApiKey.trim()!==""?TN({apiKey:e.braveApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set BRAVE_SEARCH_API_KEY (free tier at https://brave.com/search/api/) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function RS(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
1058
1058
|
|
|
1059
1059
|
(no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
1060
1060
|
`).trimEnd()}var kN,EN,AS=_(()=>{"use strict";qo();kN="https://api.search.brave.com/res/v1/web/search",EN=20});function MN(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,s;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(l.protocol!=="http:"&&l.protocol!=="https:")return{error:`Invalid input: protocol "${l.protocol}" not supported (http/https only)`};o=l.toString()}let i=xN;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(t.timeout_ms,RN)}let a=AN;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,_N)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function Rm(e,t){let n=Buffer.from(e,"utf8");return n.byteLength<=t?e:n.subarray(0,t).toString("utf8")+CN}function ON(e){let t=[],n=e;for(let o=0;o<4&&n instanceof Error;o++)t.push(n.message),n=n.cause;let r=t.join(" | ");return PN.some(o=>r.includes(o))}function $N(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env;return async(r,o)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=MN(r);if("error"in s)return{content:s.error,isError:!0};if(o.aborted){let u=o.reason;return{content:`web_scrape aborted: ${u instanceof Error?u.message:String(u??"aborted")}`,isError:!0}}let i=new AbortController,a=()=>{i.abort(o.reason)},l,c=()=>{let u=i.signal.reason;return u instanceof Error?u.message:String(u??"aborted")};try{if(o.addEventListener("abort",a,{once:!0}),l=setTimeout(()=>{i.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.mode==="raw"){let d;try{d=await t(s.url,{method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:i.signal})}catch(f){return i.signal.aborted?{content:`web_scrape aborted: ${c()}`,isError:!0}:{content:`web_scrape network error: ${f instanceof Error?f.message:String(f)}`,isError:!0}}if(!d.ok)return{content:`web_scrape HTTP ${d.status} ${d.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let m;try{m=await d.text()}catch(f){return{content:`web_scrape read error: ${f instanceof Error?f.message:String(f)}`,isError:!0}}return{content:Rm(m,s.maxBytes)}}if(s.mode==="markdown")try{let d=await kS(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:i.signal});return d.markdown.trim().length===0?{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0}:{content:Rm(d.markdown,s.maxBytes)}}catch(d){if(i.signal.aborted)return{content:`web_scrape aborted: ${c()}`,isError:!0};let m=d instanceof Error?d.message:String(d),f=ON(d)?" (the render fallback needs the optional Playwright browser \u2014 run `pnpm exec playwright install chromium`)":"";return{content:`web_scrape markdown error: ${m}${f}`,isError:!0}}let u=xS({braveApiKey:n.BRAVE_SEARCH_API_KEY,fetchFn:t});if("error"in u)return{content:u.error,isError:!0};try{let d=await u.search(s.query,{limit:IN,timeoutMs:s.timeoutMs,signal:i.signal});return{content:Rm(RS(s.query,d),s.maxBytes)}}catch(d){return i.signal.aborted?{content:`web_scrape aborted: ${c()}`,isError:!0}:{content:`web_scrape search error (${u.name}): ${d instanceof Error?d.message:String(d)}`,isError:!0}}}finally{l!==void 0&&clearTimeout(l),o.removeEventListener("abort",a)}}}var xN,RN,AN,_N,CN,IN,PN,_S,CS=_(()=>{"use strict";ES();AS();xN=3e4,RN=12e4,AN=1e6,_N=1e7,CN=`
|
|
@@ -1546,7 +1546,7 @@ ${n}`;XW(this.serverName,n);let o=!1;try{let{pushIfConfigured:s}=await Promise.r
|
|
|
1546
1546
|
Open this URL to authorize:
|
|
1547
1547
|
${n}
|
|
1548
1548
|
Status written to: ${fi()}
|
|
1549
|
-
`)}_readSlot(){let t=this.backend.read();if(!t)return{};try{return JSON.parse(t).mcpOAuth?.[this.serverName]??{}}catch{return{}}}_updateSlot(t){let n=this.backend.read(),r={};if(n)try{r=JSON.parse(n)}catch{}let o=r.mcpOAuth??{},s=o[this.serverName]??{};o[this.serverName]=t(s),r.mcpOAuth=o,this.backend.write(JSON.stringify(r))}}});K();al();import{config as xy}from"dotenv";import{Command as LX}from"commander";z();import lp from"chalk";function qy(){let e=v.FORCE_COLOR;if(e&&e.length>0)return;let t=v.NO_COLOR;if(t&&t.length>0){lp.level=0;return}let n=v.CI;if(n&&n.length>0){lp.level=0;return}process.stdout.isTTY||(lp.level=0)}import ix from"chalk";import wW from"ora";St();function Jy(e){let t=e instanceof Error?e.message:String(e);return t.toLowerCase().includes("rate limit")||t.toLowerCase().includes("too many requests")}function Yy(e){let t=e instanceof Error?e.message:String(e);return t.toLowerCase().includes("network")||t.toLowerCase().includes("connect")||t.toLowerCase().includes("timeout")}function $o(e){if(e instanceof Gn)return{kind:"budget_exceeded",userMessage:`Session stopped: cost ceiling reached ($${e.runningCostUsd.toFixed(4)} of $${e.maxBudgetUsd.toFixed(4)} limit).`,exitCode:1,raw:e};if(e instanceof ll)return{kind:"unsupported_config",userMessage:`The "${e.provider}" provider does not support this configuration option.`,hint:`Option "${e.field}" is not available for provider "${e.provider}". Switch to a compatible provider or remove the option.`,exitCode:1,raw:e};if(e instanceof Re)return{kind:"hook_blocked",userMessage:`A hook blocked the operation (event: ${e.event}).`,...e.reason!==void 0?{hint:e.reason}:{},exitCode:1,raw:e};if(e instanceof wt){let s=Math.round(e.timeoutMs/1e3);return{kind:"timeout",userMessage:`The operation timed out after ${s} second${s!==1?"s":""}.`,hint:`Timeout: ${e.timeoutMs}ms (${s}s). Increase the timeout or retry.`,exitCode:124,raw:e}}let t=e,n=e instanceof Error?e.message:String(e),r=n.toLowerCase();return t.status===401||e instanceof Error&&e.name==="AuthenticationError"?{kind:"auth",userMessage:"Authentication failed. Check that your API key is valid and has not expired.",hint:"Verify the ANTHROPIC_API_KEY environment variable or run `afk login`.",exitCode:1,raw:e}:t.status===429||Jy(e)?{kind:"rate_limit",userMessage:"Anthropic rate limit reached. The request was rejected (HTTP 429).",hint:"Wait a moment and retry, or reduce the request frequency.",exitCode:1,raw:e}:t.status===529||t.status===503?{kind:"overloaded",userMessage:`Anthropic API is temporarily overloaded (HTTP ${t.status}). All retry attempts were exhausted.`,hint:"Wait a minute and try again, or switch to a less loaded model (e.g. sonnet).",exitCode:1,raw:e}:n==="Not in a git repository."||r.includes("not in a git repository")?{kind:"not_git_repo",userMessage:"This command must be run from inside a git repository.",hint:"Run `git init` to initialise a repository, or change to a directory that is already a git repo.",exitCode:1,raw:e}:Yy(e)||r.includes("econnrefused")||r.includes("etimedout")?{kind:"network",userMessage:"Network error: unable to reach the API endpoint.",hint:"Check your internet connection and try again.",exitCode:1,raw:e}:{kind:"unknown",userMessage:(e instanceof Error?e.message:String(e))||"An unexpected error occurred.",exitCode:1,raw:e}}import Q0 from"string-width";var cp=/\x1B(?:\[[0-?]*[ -/]*[@-~]|\][^\x07\x1B]*(?:\x07|\x1B\\)|[P^_X][^\x1B]*\x1B\\|[@-OQ-WYZ\\\-])/g,Vy=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function Ie(e){return e.replace(cp,"")}function q(e){return Q0(e)}function cl(e){return e.length===0?[]:Vy?Array.from(Vy.segment(e),t=>t.segment):Array.from(e)}function eO(e){let t=[],n=0,r;for(cp.lastIndex=0;(r=cp.exec(e))!==null;){if(r.index>n)for(let o of cl(e.slice(n,r.index)))t.push({type:"text",value:o});t.push({type:"ansi",value:r[0]}),n=r.index+r[0].length}if(n<e.length)for(let o of cl(e.slice(n)))t.push({type:"text",value:o});return t}function We(e,t){let n=Math.max(0,t-q(e));return e+" ".repeat(n)}function tO(e,t){let n=Math.max(0,t-q(e));return" ".repeat(n)+e}function up(e,t,n="left"){let r=Math.max(0,t-q(e));if(r===0)return e;if(n==="right")return tO(e,t);if(n==="center"){let o=Math.floor(r/2);return" ".repeat(o)+e+" ".repeat(r-o)}return We(e,t)}var nO=/^\x1b\]8;[^;\x07\x1b]*;(.*?)(?:\x07|\x1b\\)$/s,rO="\x1B]8;;\x1B\\";function
|
|
1549
|
+
`)}_readSlot(){let t=this.backend.read();if(!t)return{};try{return JSON.parse(t).mcpOAuth?.[this.serverName]??{}}catch{return{}}}_updateSlot(t){let n=this.backend.read(),r={};if(n)try{r=JSON.parse(n)}catch{}let o=r.mcpOAuth??{},s=o[this.serverName]??{};o[this.serverName]=t(s),r.mcpOAuth=o,this.backend.write(JSON.stringify(r))}}});K();al();import{config as xy}from"dotenv";import{Command as LX}from"commander";z();import lp from"chalk";function qy(){let e=v.FORCE_COLOR;if(e&&e.length>0)return;let t=v.NO_COLOR;if(t&&t.length>0){lp.level=0;return}let n=v.CI;if(n&&n.length>0){lp.level=0;return}process.stdout.isTTY||(lp.level=0)}import ix from"chalk";import wW from"ora";St();function Jy(e){let t=e instanceof Error?e.message:String(e);return t.toLowerCase().includes("rate limit")||t.toLowerCase().includes("too many requests")}function Yy(e){let t=e instanceof Error?e.message:String(e);return t.toLowerCase().includes("network")||t.toLowerCase().includes("connect")||t.toLowerCase().includes("timeout")}function $o(e){if(e instanceof Gn)return{kind:"budget_exceeded",userMessage:`Session stopped: cost ceiling reached ($${e.runningCostUsd.toFixed(4)} of $${e.maxBudgetUsd.toFixed(4)} limit).`,exitCode:1,raw:e};if(e instanceof ll)return{kind:"unsupported_config",userMessage:`The "${e.provider}" provider does not support this configuration option.`,hint:`Option "${e.field}" is not available for provider "${e.provider}". Switch to a compatible provider or remove the option.`,exitCode:1,raw:e};if(e instanceof Re)return{kind:"hook_blocked",userMessage:`A hook blocked the operation (event: ${e.event}).`,...e.reason!==void 0?{hint:e.reason}:{},exitCode:1,raw:e};if(e instanceof wt){let s=Math.round(e.timeoutMs/1e3);return{kind:"timeout",userMessage:`The operation timed out after ${s} second${s!==1?"s":""}.`,hint:`Timeout: ${e.timeoutMs}ms (${s}s). Increase the timeout or retry.`,exitCode:124,raw:e}}let t=e,n=e instanceof Error?e.message:String(e),r=n.toLowerCase();return t.status===401||e instanceof Error&&e.name==="AuthenticationError"?{kind:"auth",userMessage:"Authentication failed. Check that your API key is valid and has not expired.",hint:"Verify the ANTHROPIC_API_KEY environment variable or run `afk login`.",exitCode:1,raw:e}:t.status===429||Jy(e)?{kind:"rate_limit",userMessage:"Anthropic rate limit reached. The request was rejected (HTTP 429).",hint:"Wait a moment and retry, or reduce the request frequency.",exitCode:1,raw:e}:t.status===529||t.status===503?{kind:"overloaded",userMessage:`Anthropic API is temporarily overloaded (HTTP ${t.status}). All retry attempts were exhausted.`,hint:"Wait a minute and try again, or switch to a less loaded model (e.g. sonnet).",exitCode:1,raw:e}:n==="Not in a git repository."||r.includes("not in a git repository")?{kind:"not_git_repo",userMessage:"This command must be run from inside a git repository.",hint:"Run `git init` to initialise a repository, or change to a directory that is already a git repo.",exitCode:1,raw:e}:Yy(e)||r.includes("econnrefused")||r.includes("etimedout")?{kind:"network",userMessage:"Network error: unable to reach the API endpoint.",hint:"Check your internet connection and try again.",exitCode:1,raw:e}:{kind:"unknown",userMessage:(e instanceof Error?e.message:String(e))||"An unexpected error occurred.",exitCode:1,raw:e}}import Q0 from"string-width";var cp=/\x1B(?:\[[0-?]*[ -/]*[@-~]|\][^\x07\x1B]*(?:\x07|\x1B\\)|[P^_X][^\x1B]*\x1B\\|[@-OQ-WYZ\\\-])/g,Vy=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function Ie(e){return e.replace(cp,"")}function q(e){return Q0(e)}function cl(e){return e.length===0?[]:Vy?Array.from(Vy.segment(e),t=>t.segment):Array.from(e)}function eO(e){let t=[],n=0,r;for(cp.lastIndex=0;(r=cp.exec(e))!==null;){if(r.index>n)for(let o of cl(e.slice(n,r.index)))t.push({type:"text",value:o});t.push({type:"ansi",value:r[0]}),n=r.index+r[0].length}if(n<e.length)for(let o of cl(e.slice(n)))t.push({type:"text",value:o});return t}function We(e,t){let n=Math.max(0,t-q(e));return e+" ".repeat(n)}function tO(e,t){let n=Math.max(0,t-q(e));return" ".repeat(n)+e}function up(e,t,n="left"){let r=Math.max(0,t-q(e));if(r===0)return e;if(n==="right")return tO(e,t);if(n==="center"){let o=Math.floor(r/2);return" ".repeat(o)+e+" ".repeat(r-o)}return We(e,t)}var nO=/^\x1b\]8;[^;\x07\x1b]*;(.*?)(?:\x07|\x1b\\)$/s,rO="\x1B]8;;\x1B\\";function ie(e,t,n="\u2026"){if(t<=0)return"";if(q(e)<=t)return e;let r=q(n),o=Math.max(0,t-r),s=0,i="",a=!1,l=!1;for(let c of eO(e)){if(c.type==="ansi"){i+=c.value,a=!0;let d=nO.exec(c.value);d&&(l=(d[1]??"").length>0);continue}let u=s+q(c.value);if(u>o)break;i+=c.value,s=u}return i+n+(l?rO:"")+(a?"\x1B[0m":"")}function Xy(e,t){return Number.isFinite(e)?Math.max(0,Math.min(t,Math.trunc(e))):0}function dp(e,t){let n=Xy(t,e.length);if(n===0||e.length===0)return 0;let r=0;for(let o of cl(e)){let s=r+o.length;if(s>=n)return r;r=s}return r}function Pr(e,t){let n=Xy(t,e.length);if(n>=e.length||e.length===0)return e.length;let r=0;for(let o of cl(e)){let s=r+o.length;if(r>=n||n>r&&n<s)return s;r=s}return e.length}function Z(){let e=process.stdout.columns;return typeof e=="number"&&e>0?e:80}var ul=new Set,dl=new Set,Do=!1,Mr=null;function oO(){for(let e of ul)try{e()}catch{}}function sO(){for(let e of dl)try{e()}catch{}}function iO(){Mr!==null&&clearTimeout(Mr),Mr=setTimeout(()=>{Mr=null,oO()},150)}function pp(){sO(),iO()}function aO(e){return ul.add(e),Do||(process.stdout.on("resize",pp),Do=!0),()=>{ul.delete(e),Zy()}}function lO(e){return dl.add(e),Do||(process.stdout.on("resize",pp),Do=!0),()=>{dl.delete(e),Zy()}}function Zy(){ul.size===0&&dl.size===0&&(Do&&(process.stdout.off("resize",pp),Do=!1),Mr!==null&&(clearTimeout(Mr),Mr=null))}var Ne={subscribe:aO,subscribeImmediate:lO};import cO from"wrap-ansi";function ue(e,t){if(!Number.isFinite(t)||t<=0||t===Number.POSITIVE_INFINITY)return e;let n=Math.floor(t);return cO(e,n,{hard:!1,trim:!1,wordWrap:!0})}import Te from"chalk";var p={brand:Te.hex("#E67E4C"),mint:Te.hex("#5FE3A1"),goblin:Te.hex("#9CB04A"),user:Te.cyan,tool:Te.hex("#DCDCAA"),chrome:Te.hex("#B0B8C2"),syntaxString:Te.italic.hex("#8AB07A"),toolArg:Te.dim.white,thinking:Te.italic.hex("#9B8FB5"),success:Te.green,error:Te.red,warning:Te.yellow,plan:Te.hex("#9F7CE0"),meta:Te.blackBright,info:Te.hex("#5BA8FF"),fileRef:Te.hex("#56B5A8"),heading:Te.bold.white,label:Te.dim,dim:Te.dim,bold:Te.bold,italic:Te.italic,diffAdd:Te.green,diffRemove:Te.red,diffHunk:Te.blackBright};function vt(){return Math.max(22,Z()-6)}function gi(e,t){return ie(e,t)}var uO={ok:p.success("\u25CF"),warn:p.warning("\u25CF"),error:p.error("\u25CF"),info:p.info("\u25C6")};function Qy(e,t){let o=t.reduce((S,x)=>Math.max(S,q(x.label)),0),s=t.reduce((S,x)=>Math.max(S,q(x.value)),0),i=o+4+2+s,a=Math.min(Z()-4,100),l=Math.max(44,q(e),i,a);l=Math.min(l,vt());let c=l+4,u=p.dim,d=u("\u256D"+"\u2500".repeat(c)+"\u256E"),m=u("\u251C"+"\u2500".repeat(c)+"\u2524"),f=u("\u2570"+"\u2500".repeat(c)+"\u256F"),g=u("\u2502"),b=ue(e,l).split(`
|
|
1550
1550
|
`).map(S=>g+" "+We(S,l)+" "+g),y=Math.max(1,l-o-4-2),w=t.map(S=>{let x=S.kind?uO[S.kind]+" ":" ",E=p.dim(We(gi(S.label,o),o)),A=" ".repeat(4),T=gi(S.value,y),R=We(T,y),M=E+A+x+R;return g+" "+M+" "+g});return[d,...b,m,...w,f].join(`
|
|
1551
1551
|
`)}import{sep as gp}from"node:path";z();z();import mp from"chalk";var eb={".":null,D:[74,92,36],M:[139,166,63],L:[178,197,88],Y:[245,213,71],K:[13,18,9],W:[238,238,222],X:[42,42,26]},pl=[".......KKKKK.......","......WKKLKKW......",".....KKWMLMWKK.....","..DDKKWLMMMLWKKDD..","DDD..KMMMMMMMK..DDD","..DDKMMMMMMMMMKDD..","...KKMMKKKKKMMKK...","...KMMKKKKKKKMMK...","...KMMMYMDMYMMMK...","...KMMMMMMMMMMMK...","...KKMMXXXXXMMKK...","....KKMMWXXMMKK....",".....KKMWMMMKK.....",".....KKMMMMMKK.....","......KKMMMKK......",".......KKKKK......."],fp=19,hi=8;function dO(e,t){if(e.length!==t.length)throw new Error(`pixel row width mismatch: top=${e.length}, bot=${t.length}`);let n="";for(let r=0;r<e.length;r++){let o=eb[e[r]??"."]??null,s=eb[t[r]??"."]??null;!o&&!s?n+=" ":o&&!s?n+=mp.rgb(o[0],o[1],o[2])("\u2580"):!o&&s?n+=mp.rgb(s[0],s[1],s[2])("\u2584"):o&&s&&(n+=mp.bgRgb(s[0],s[1],s[2]).rgb(o[0],o[1],o[2])("\u2580"))}return n}function pO(){if(pl.length!==hi*2)throw new Error(`GOBLIN_GRID has ${pl.length} pixel rows but MASCOT_HEIGHT*2 = ${hi*2}`);let e=[];for(let t=0;t<hi;t++){let n=pl[t*2]??"",r=pl[t*2+1]??"";e.push(dO(n,r))}return e}function tb(e="idle"){return v.AFK_BANNER_PLAIN==="1"?[]:pO()}function nb(){return v.AFK_BANNER_PLAIN==="1"}function ob(e){let t=e.model!==void 0||e.worktree!==void 0||e.cwd!==void 0||e.version!==void 0;return t&&!nb()?fO(e):rb(t?mO(e):e)}function mO(e){let t=e.mode;e.model!==void 0&&e.model.length>0&&(t=`${e.model} \xB7 ${t}`),e.version!==void 0&&e.version.length>0&&(t=`${t} \xB7 ${sb(e.version)}`);let n=[];e.worktree!==void 0&&e.worktree.length>0&&n.push(`branch ${e.worktree}`),e.cwd!==void 0&&e.cwd.length>0&&n.push(ib(e.cwd));let r=n.join(" \xB7 "),o=e.metaLine!==void 0?e.metaLine:r.length>0?r:void 0,s={mode:t};return o!==void 0&&(s.metaLine=o),e.hintLine!==void 0&&(s.hintLine=e.hintLine),s}function rb(e){let t="Agent AFK",n=" \xB7 ",r=p.bold(t)+p.dim(n)+e.mode,o=t+n+e.mode,s=Math.min(Z()-4,120),i=Math.max(54,q(o)+4,s);i=Math.min(i,vt());let a=i+4,l=p.dim,c=l("\u256D"+"\u2500".repeat(a)+"\u256E"),d=ue(r,i).split(`
|
|
1552
1552
|
`).map(g=>l("\u2502")+" "+We(g,i)+" "+l("\u2502")),m=l("\u2570"+"\u2500".repeat(a)+"\u256F"),f=[c,...d,m];return e.metaLine!==void 0&&f.push(...ue(p.dim(" "+e.metaLine),Z()).split(`
|
|
@@ -1555,8 +1555,8 @@ Status written to: ${fi()}
|
|
|
1555
1555
|
`)}function fO(e){let t=Z(),n=t>=42?" ":" ",r=t>=42?" ":" ",o=Math.max(1,t-r.length-fp-n.length),s=[],i=f=>{s.push(gi(f,o))},a=p.bold(p.brand("Agent AFK")),l=e.version!==void 0?p.dim(" "+sb(e.version)):"";i(a+l);let c=[];if(e.model!==void 0&&c.push(p.heading(e.model)),e.mode.length>0&&c.push(p.dim(e.mode)),c.length>0&&i(c.join(p.dim(" \xB7 "))),e.worktree!==void 0&&i(p.dim("branch ")+p.goblin(e.worktree)),e.cwd!==void 0){let f=ib(e.cwd);i(p.dim(hO(f,o)))}e.metaLine!==void 0&&i(p.dim(e.metaLine));let u=tb("idle"),d=Math.max(u.length,s.length),m=[];for(let f=0;f<d;f++){let g=u[f]??" ".repeat(fp),h=s[f]??"";m.push(r+g+n+h)}return e.hintLine!==void 0&&m.push(...ue(p.dim(r+gO(e.hintLine)),t).split(`
|
|
1556
1556
|
`)),m.join(`
|
|
1557
1557
|
`)}function sb(e){return e.startsWith("v")?e:`v${e}`}function gO(e){return e.replace(/\s+·\s+/g," \xB7 ")}function ib(e){let t=v.HOME;if(t===void 0||t.length===0)return e;if(e===t)return"~";let n=t.endsWith(gp)?t:t+gp;return e.startsWith(n)?"~"+gp+e.slice(n.length):e}function hO(e,t){if(q(e)<=t)return e;let n="\u2026",r=Math.max(2,t-1),o=Math.ceil(r*.6),s=Math.max(1,r-o);return e.slice(0,s)+n+e.slice(e.length-o)}var hp="\u256D",yp="\u256E",yO="\u2570",bO="\u256F",yi="\u2500",wO="\u2502";function Lo(e,t={}){let n=t.border??p.dim,r=Math.max(0,Math.trunc(t.padding??1)),o=t.title,s=Array.isArray(e)?e:e.split(`
|
|
1558
|
-
`),i=vt(),a=o!==void 0?q(` ${o} `):0,l=s.reduce((b,y)=>Math.max(b,q(y)),0),c=t.width!==void 0?Math.max(1,Math.trunc(t.width)):Math.max(1,l,a+1);c=Math.min(c,i),c=Math.max(c,Math.min(a+1,i));let u=" ".repeat(r),d=c+r*2,m;if(o!==void 0){let b=d-1,y=` ${o} `;q(y)>b&&(y=
|
|
1559
|
-
`)){let w=We(
|
|
1558
|
+
`),i=vt(),a=o!==void 0?q(` ${o} `):0,l=s.reduce((b,y)=>Math.max(b,q(y)),0),c=t.width!==void 0?Math.max(1,Math.trunc(t.width)):Math.max(1,l,a+1);c=Math.min(c,i),c=Math.max(c,Math.min(a+1,i));let u=" ".repeat(r),d=c+r*2,m;if(o!==void 0){let b=d-1,y=` ${o} `;q(y)>b&&(y=ie(y,b));let w=q(y);if(w>0&&w<=b){let S=d-1-w;m=n(hp+yi)+n.bold(y)+n(yi.repeat(S)+yp)}else m=n(hp+yi.repeat(d)+yp)}else m=n(hp+yi.repeat(d)+yp);let f=n(wO),g=[];for(let b of s)for(let y of ue(b,c).split(`
|
|
1559
|
+
`)){let w=We(ie(y,c),c);g.push(f+u+w+u+f)}let h=n(yO+yi.repeat(d)+bO);return[m,...g,h].join(`
|
|
1560
1560
|
`)}function ml(e,t){let n=Math.max(40,q(e),q(t??""))+4,r=Math.min(n,Math.min(Z()-4,100));r=Math.min(r,vt());let o=t!==void 0?[e,p.dim(t)]:[e];return Lo(o,{border:p.error,title:"Error",width:r,padding:2})}function ab(e){let{resetsAt:t,reason:n,accountId:r,hotSwapped:o}=e,s=e.autoResume??!0,i=[];if(n==="usage-limit"){if(i.push("You've hit your Claude subscription limit for now."),t!==void 0){let d=Date.now(),m=t.getTime()-d,f=Math.max(0,Math.ceil(m/6e4)),g=t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0});i.push(""),i.push(`Resets at ${g} (in ~${f} min).`)}i.push(""),s?(i.push("I'll auto-resume when the limit resets \u2014 no need to retype."),i.push(""),i.push("Other options:"),i.push(" \u2022 Switch to API-key billing: export ANTHROPIC_API_KEY=..."),i.push(" \u2022 Log into another account in any terminal: claude login")):(i.push("Options:"),i.push(" \u2022 Wait, then send the message again."),i.push(" \u2022 Switch to API-key billing: export ANTHROPIC_API_KEY=..."),i.push(" \u2022 Log into another account in any terminal: claude login"))}else i.push("Your Anthropic API credit balance is empty."),i.push(""),i.push("Top up at: https://console.anthropic.com/settings/billing"),i.push(""),i.push("Or switch to your Claude subscription on the server.");o===!0&&r!==void 0&&(i.push(""),i.push(`Resumed on ${r}.`));let a=" Usage paused ",l=i.reduce((d,m)=>Math.max(d,q(m)),0),c=Math.max(40,q(a),l)+4,u=Math.min(c,Math.min(Z()-4,100));return u=Math.min(u,vt()),Lo(i,{border:p.warning,title:"Usage paused",width:u,padding:2})}z();import fl from"chalk";import{Lexer as db}from"marked";import SO from"chalk";import{createEmphasize as vO,common as kO}from"emphasize";var lb={keyword:p.brand,built_in:p.brand,literal:p.brand,tag:p.brand,string:p.syntaxString,regexp:p.syntaxString,attr:p.syntaxString,comment:p.meta,meta:p.meta,quote:p.meta,number:p.warning,function:p.tool,title:p.tool,class:p.tool,"selector-tag":p.tool};var cb=vO(kO),EO=2048,TO=512,xO=32,hn=new Map;function RO(e){let t=hn.get(e);if(t!==void 0)return hn.delete(e),hn.set(e,t),t}function AO(e,t){if(hn.has(e)&&hn.delete(e),hn.set(e,t),hn.size>xO){let n=hn.keys().next().value;n!==void 0&&hn.delete(n)}}function ub(e,t){if(SO.level===0||e.length>EO)return e;let n=e.length<TO,r=n?`${t} ${e}`:"";if(n){let s=RO(r);if(s!==void 0)return s}let o;try{if(!t||!cb.registered(t))o=e;else{let s=cb.highlight(t,e,lb);o=typeof s?.value=="string"?s.value:e}}catch{o=e}return n&&AO(r,o),o}function bp(e){return q(e)}function _O(e,t,n){return up(e,t,n??"left")}var pb=/^\/[A-Za-z][\w:-]*$/,CO=/(?<=\s|^)(\/[A-Za-z][\w:-]*)(?=\s|[,.:;!?]?$|[,.:;!?]\s)/g;function zn(e){return e?e.map(t=>{switch(t.type){case"codespan":{let n=t.text;return pb.test(n)?p.brand(n):p.user(n)}case"strong":{let n=t;return p.bold(n.tokens?zn(n.tokens):n.text)}case"em":{let n=t;return p.italic(n.tokens?zn(n.tokens):n.text)}case"text":return t.text.replace(CO,n=>p.brand(n));case"link":{let n=t,r=n.tokens?zn(n.tokens):n.text;return r===n.href?r:r+p.dim(` (${n.href})`)}case"escape":return t.text;default:return t.raw}}).join(""):""}var IO=new Set(["code","table","blockquote","hr","html"]);function qn(e){let t=e.replace(/^(?:\*\*|__)\s/,""),n=db.lex(t);return n.some(o=>IO.has(o.type))?t:n.map(o=>{switch(o.type){case"heading":{let s=o;return p.bold(zn(s.tokens))}case"list":return o.items.map(i=>{let l=i.tokens[0]?.tokens??[];return"\u2022 "+zn(l)}).join(", ");case"paragraph":return zn(o.tokens);case"text":{let s=o;return s.tokens?zn(s.tokens):s.text}case"space":return"";default:return o.raw}}).join("")}function Pt(e,t={}){let n=db.lex(e),r=Number.isFinite(t.maxWidth)?Math.floor(t.maxWidth??0):void 0;function o(i){return zn(i)}function s(i){return i.map(a=>{switch(a.type){case"heading":{let l=a,c=l.tokens?o(l.tokens):l.text;return l.depth===1?p.brand.bold(`
|
|
1561
1561
|
`+c+`
|
|
1562
1562
|
`):l.depth===2?p.heading(`
|
|
@@ -1583,15 +1583,15 @@ Status written to: ${fi()}
|
|
|
1583
1583
|
`))f.push(b?u+b:"")}return f.join(`
|
|
1584
1584
|
`)+`
|
|
1585
1585
|
`}case"table":{let l=a,c=R=>R.tokens?o(R.tokens):R.text,u=l.header.map(c),d=l.rows.map(R=>R.map(c)),m=u.length,f=new Array(m).fill(0);for(let R=0;R<m;R++){let M=bp(u[R]??"");for(let N of d)M=Math.max(M,bp(N[R]??""));f[R]=M}let g=r??Number.POSITIVE_INFINITY,h=3*m+1,b=g>=h+m?1:0,y=Math.max(m*b,g-h),w=f.reduce((R,M)=>R+M,0);if(Number.isFinite(g)&&w>y){let R=f.slice(),M=R.reduce((N,C)=>N+Math.max(0,C-b),0);if(M>0){let N=w-y,C=Math.min(1,N/M);for(let O=0;O<R.length;O++){let F=Math.max(0,R[O]-b);R[O]=Math.max(b,R[O]-Math.round(F*C))}}for(let N=0;N<R.length;N++)f[N]=R[N]??f[N]??0}let S=l.align,x=(R,M,N)=>p.dim(R+f.map(C=>"\u2500".repeat(C+2)).join(M)+N),E=(R,M)=>M<=0?[""]:ue(R,M).split(`
|
|
1586
|
-
`).map(C=>
|
|
1586
|
+
`).map(C=>ie(C,M)),A=(R,M=!1)=>{let N=R.map((F,H)=>E(M?p.bold(F):F,f[H]??0)),C=Math.max(1,...N.map(F=>F.length)),O=[];for(let F=0;F<C;F++)O.push(p.dim("\u2502")+N.map((H,U)=>" "+_O(H[F]??"",f[U]??0,S[U]??null)+" ").join(p.dim("\u2502"))+p.dim("\u2502"));return O},T=[x("\u250C","\u252C","\u2510")];T.push(...A(u,!0)),T.push(x("\u251C","\u253C","\u2524"));for(let R=0;R<d.length;R++)T.push(...A(d[R])),R<d.length-1&&T.push(x("\u251C","\u253C","\u2524"));return T.push(x("\u2514","\u2534","\u2518")),T.join(`
|
|
1587
1587
|
`)+`
|
|
1588
1588
|
`}default:return a.raw}}).join("")}return s(n)}var wp=class{useColors;constructor(t=!0){this.useColors=t&&!!fl.level}formatMarkdown(t){return this.useColors?Pt(t):t}formatError(t,n){let r=p.error("\u2717 Error: ")+t;return n&&n.message&&(r+=`
|
|
1589
1589
|
`+p.error(n.message)),n&&n.stack&&v.DEBUG&&(r+=`
|
|
1590
1590
|
`+p.dim(n.stack)),r}formatSuccess(t){return p.success("\u2713 ")+t}formatInfo(t){return p.info("\u2139 ")+t}formatWarning(t){return p.warning("\u26A0 ")+t}formatCommand(t){return p.dim(t)}formatPrompt(t){return p.bold(p.plan(`afk (${t})`))+p.dim(" \u203A ")}formatModelInfo(t,n,r){return p.dim(`Model: ${fl.white(t)} | Max tokens: ${fl.white(n)} | Temperature: ${fl.white(r)}`)}separator(t="\u2500",n=50){return p.dim(t.repeat(n))}formatHelp(t){let n=[];for(let r of t){n.push(p.heading(`
|
|
1591
1591
|
${r.title}`)),n.push(this.separator());for(let o of r.items)n.push(` ${o}`)}return n.join(`
|
|
1592
1592
|
`)}formatStreaming(t){return this.useColors,t}},w7=new wp;z();var mb=(()=>{let e=v.AFK_USER_CARD_MAX_ROWS,t=e?Number.parseInt(e,10):NaN;return Number.isFinite(t)&&t>0?t:24})(),PO={plan:p.plan,status:p.info,checkpoint:p.success,diagnosis:p.warning},MO={plan:"PLAN",status:"STATUS",checkpoint:"\u2705 CHECKPOINT",diagnosis:"DIAGNOSIS"};function Jn(e){let t=Array.isArray(e.body)?e.body:e.body.split(`
|
|
1593
|
-
`);if(e.kind==="user")return OO(t);let n=e.title??MO[e.kind];return $O(e.kind,n,t)}function OO(e){let t=Z(),n=Math.max(20,t-4),r=[];for(let
|
|
1594
|
-
`));let o=r;if(r.length>mb){let
|
|
1593
|
+
`);if(e.kind==="user")return OO(t);let n=e.title??MO[e.kind];return $O(e.kind,n,t)}function OO(e){let t=Z(),n=Math.max(20,t-4),r=[];for(let a of e)r.push(...ue(qn(a),n).split(`
|
|
1594
|
+
`));let o=r;if(r.length>mb){let a=mb-1,l=r.length-a;o=[...r.slice(0,a),p.dim(`\u2026(${l} lines collapsed)`)]}let s=p.user("\u2502"),i=t-1;return o.map(a=>{let l=q(a)+2>i?ie(a,Math.max(0,i-2)):a,c=q(l),u=Math.max(0,i-c-2);return" ".repeat(u)+l+" "+s}).join(`
|
|
1595
1595
|
`)}function $O(e,t,n){let r=PO[e],o=n.map(qn),s=Math.max(q(t)+4,...o.map(l=>q(l))),i=Math.max(40,s)+4,a=Math.min(i,Math.min(Z()-4,100));return a=Math.min(a,vt()),Lo(o,{border:r,title:t,width:a,padding:2})}function de(e){let t=Math.min(Z(),120);if(e===void 0)return p.dim("\u2500".repeat(t));let n=p.dim("\u2500\u2500")+" "+p.bold(e)+" ",r="\u2500\u2500 "+e+" ",o=Math.max(0,t-q(r));return n+p.dim("\u2500".repeat(o))}Oe();function Fo(e,t){let n=t?.isTTY??process.stdout.isTTY??!1,r=t?.write??(o=>{process.stderr.write(o)});if(n)r(ml(e.userMessage,e.hint)+`
|
|
1596
1596
|
`);else{let o=e.hint?` (${e.hint})`:"";r(`afk: error: ${e.userMessage}${o}
|
|
1597
1597
|
`)}Je()&&e.raw instanceof Error&&e.raw.stack&&r(e.raw.stack+`
|
|
@@ -1657,7 +1657,7 @@ Every turn must end in one externally identifiable terminal state. AFK users nee
|
|
|
1657
1657
|
|
|
1658
1658
|
Never end a turn mid-loop without one of these. The terminal-state heading must be the last block of the response, with no trailing prose after it.`,FH=new Set(["repl","telegram"]);function $c(e,t,n="one-shot"){if(!e)return e;let r=[e];return t&&r.push(DH),FH.has(n)&&r.push(LH),r.join(`
|
|
1659
1659
|
|
|
1660
|
-
`)}import $n from"chalk";rc();var NH={read:$n.hex("#C9B584"),write:$n.hex("#E8A33D"),shell:$n.hex("#A8E060"),subagent:p.plan,skill:$n.hex("#F08AC4"),dag:$n.hex("#4EC9B0"),mcp:$n.hex("#5FE0C0"),web:$n.hex("#A0C4C0"),browser:$n.hex("#FF8A65"),planning:p.meta,schedule:$n.hex("#D4A84B"),other:p.meta},BH={read:"\u25CF",write:"\u270E",shell:"$",subagent:"\u2192",skill:"\u25C6",dag:"\u2B21",mcp:"\u22A1",web:"\u2316",browser:"\u25C9",planning:"\u25B1",schedule:"\u23F2",other:"\u25CF"};function Nf(e){return{color:NH[e],glyph:BH[e]}}function Ts(e){return Nf(sr(e))}function Dc(e,t){let n=t??process.stdout.columns??80;return!Number.isFinite(n)||n<=0?e:ae(e,n)}function Lc(e,t){let{description:n,summary:r,lastToolName:o,totalTokens:s,toolUses:i,durationMs:a}=e,l=[];if(o){let{color:u,glyph:d}=Ts(o);l.push(`via ${u(`${d} ${o}`)}`)}i&&l.push(`${i} tool${i===1?"":"s"}`),s&&l.push(`${se(s)} tok`),a&&l.push(oe(a)),l.push("esc to interrupt \xB7 ctrl+b background");let c=l.length>0?` (${l.join(" \xB7 ")})`:"";return r?[Dc(p.dim(` \u25E6 ${n}`),t),Dc(p.dim(` ${r}${c}`),t)]:[Dc(p.dim(` \u25E6 ${n}${c}`),t)]}function Fc(e,t){let n=e.status==="succeeded"?"\u2713":e.status==="failed"?"\u2717":"\u2298",r=e.agentType??e.subagentId,o=[n,r];return e.durationMs!==void 0&&o.push(`\xB7 ${oe(e.durationMs)}`),Dc(p.dim(` ${o.join(" ")}`),t)}Ue();Wi();Ki();ar();Jr();kn();Ft();xn();z();K();import{randomUUID as pW}from"node:crypto";import{createHash as lW}from"crypto";import{mkdir as cW,open as uW,writeFile as dW}from"fs/promises";import{join as XT}from"path";import{z as k}from"zod";var UH=k.object({phase:k.literal("started"),toolUseId:k.string(),name:k.string(),inputBytes:k.number().int().nonnegative(),subagentId:k.string().optional()}),jH=k.object({phase:k.literal("completed"),toolUseId:k.string(),name:k.string(),resultBytes:k.number().int().nonnegative(),isError:k.boolean(),truncated:k.boolean(),durationMs:k.number().nonnegative(),circuitBreaker:k.boolean().optional(),subagentId:k.string().optional()}),NT=k.discriminatedUnion("phase",[UH,jH]),HH=k.enum(["PreToolUse","PostToolUse","SessionStart","SessionEnd","SubagentStart","SubagentStop"]),BT=k.object({hookEvent:HH,decision:k.union([k.literal("block"),k.literal("approve"),k.undefined()]),reason:k.string().optional(),blockedTool:k.string().optional(),injectedContextBytes:k.number().int().nonnegative().optional()}),WH=k.object({transition:k.literal("started"),subagentId:k.string(),parentId:k.string(),model:k.string(),allowedTools:k.array(k.string()).readonly().optional(),systemPromptHash:k.string().optional()}),KH=k.object({transition:k.literal("succeeded"),subagentId:k.string(),durationMs:k.number().nonnegative(),turnCount:k.number().int().nonnegative(),totalCostUsd:k.number().nonnegative().optional(),outputBytes:k.number().int().nonnegative()}),GH=k.object({transition:k.literal("failed"),subagentId:k.string(),errorClass:k.string(),errorMessage:k.string(),partialOutputBytes:k.number().int().nonnegative()}),zH=k.object({transition:k.literal("cancelled"),subagentId:k.string(),source:k.enum(["cascade","explicit"])}),UT=k.discriminatedUnion("transition",[WH,KH,GH,zH]),qH=k.object({transition:k.literal("started"),jobId:k.string(),subagentId:k.string(),label:k.string(),model:k.string()}),JH=k.object({transition:k.literal("completed"),jobId:k.string(),subagentId:k.string(),durationMs:k.number().nonnegative(),outputBytes:k.number().int().nonnegative()}),YH=k.object({transition:k.literal("failed"),jobId:k.string(),subagentId:k.string(),durationMs:k.number().nonnegative(),errorClass:k.string(),errorMessage:k.string()}),VH=k.object({transition:k.literal("cancelled"),jobId:k.string(),subagentId:k.string(),source:k.enum(["explicit","cascade"])}),XH=k.object({transition:k.literal("joined"),jobId:k.string(),subagentId:k.string(),jobStatus:k.enum(["completed","failed","cancelled"])}),jT=k.discriminatedUnion("transition",[qH,JH,YH,VH,XH]),HT=k.object({kind:k.literal("monetary"),runningCostUsd:k.number().nonnegative(),maxBudgetUsd:k.number().nonnegative(),lastTurnCostUsd:k.number().nonnegative()}),ZH=k.enum(["user_signal","cascade","timeout","budget","hook_block"]),WT=k.object({origin:ZH,cascadedTo:k.array(k.string()).readonly(),reason:k.string().optional()}),KT=k.enum(["manual","token_threshold","turn_count"]),QH=k.object({path:k.string(),sizeBytes:k.number().int().nonnegative(),sha256:k.string().regex(/^[0-9a-f]{64}$/)}),eW=k.object({trigger:KT,preCompactionMessages:k.array(k.unknown()),summary:k.string(),keptTailCount:k.number().int().nonnegative(),keepLastNConfig:k.number().int().nonnegative(),messagesBefore:k.number().int().nonnegative(),messagesAfter:k.number().int().nonnegative(),tokensSavedEstimate:k.number().nonnegative().optional(),summarizationTokens:k.object({input:k.number().int().nonnegative(),output:k.number().int().nonnegative()}).optional()}),tW=k.object({trigger:KT,preCompactionMessagesRef:QH,summary:k.string(),keptTailCount:k.number().int().nonnegative(),keepLastNConfig:k.number().int().nonnegative(),messagesBefore:k.number().int().nonnegative(),messagesAfter:k.number().int().nonnegative(),tokensSavedEstimate:k.number().nonnegative().optional(),summarizationTokens:k.object({input:k.number().int().nonnegative(),output:k.number().int().nonnegative()}).optional()}),nW=k.enum(["model_end_turn","truncated","iteration_cap","abort","timeout","budget_exceeded","hook_blocked","max_turns_exceeded"]),GT=k.object({reason:nW,finalTurnCount:k.number().int().nonnegative(),finalCostUsd:k.number().nonnegative(),finalTokens:k.object({input:k.number().int().nonnegative().optional(),output:k.number().int().nonnegative().optional(),cacheRead:k.number().int().nonnegative().optional(),cacheCreation:k.number().int().nonnegative().optional()}),lastStopReason:k.string().optional()}),zT=k.object({source:k.string(),assertion:k.string(),evidence:k.array(k.string()).readonly(),confidence:k.number().min(0).max(1),dissent:k.string().optional()}),rW=k.enum(["browser_open","browser_observe","browser_act","browser_screenshot","browser_extract","browser_close"]),oW=k.enum(["click","fill","press","select","hover","scroll_to","wait_for"]),sW=k.object({kind:k.enum(["semantic","element_id","selector"]),text:k.string().max(80).optional(),role:k.string().optional(),elementId:k.string().optional(),selectorHash:k.string().regex(/^[0-9a-f]{8}$/).optional()}),qT=k.object({tool:rW,action:oW.optional(),toolUseId:k.string(),target:sW.optional(),urlBefore:k.string().nullable(),urlAfter:k.string().nullable(),status:k.enum(["ok","error","ambiguous_target","blocked_by_policy"]),screenshotPath:k.string().optional(),observationSummary:k.string().max(500).optional(),error:k.object({reason:k.string(),recoverable:k.boolean()}).optional(),durationMs:k.number().nonnegative()}),iW=k.enum(["bootstrap_start","bootstrap_done","session_init_start","session_init_done","mcp_connect_start","mcp_connect_done","mcp_server_start","mcp_server_done","loop_start","loop_end","model_ttfb"]),JT=k.object({phase:iW,durationMs:k.number().nonnegative().optional(),metadata:k.record(k.string(),k.union([k.string(),k.number(),k.boolean()])).optional()}),aW=k.object({status:k.enum(["succeeded","failed","cancelled"]),finalCostUsd:k.number().nonnegative(),finalTurnCount:k.number().int().nonnegative(),closedAt:k.string().datetime(),subagentCount:k.number().int().nonnegative().optional(),subagentTokens:k.object({input:k.number().int().nonnegative().optional(),output:k.number().int().nonnegative().optional(),cacheRead:k.number().int().nonnegative().optional(),cacheCreation:k.number().int().nonnegative().optional()}).optional(),subagentCostUsd:k.number().nonnegative().optional()}),YT=k.discriminatedUnion("kind",[k.object({kind:k.literal("tool_call"),payload:NT}),k.object({kind:k.literal("hook_decision"),payload:BT}),k.object({kind:k.literal("subagent_lifecycle"),payload:UT}),k.object({kind:k.literal("background_agent"),payload:jT}),k.object({kind:k.literal("budget"),payload:HT}),k.object({kind:k.literal("abort"),payload:WT}),k.object({kind:k.literal("compaction"),payload:eW}),k.object({kind:k.literal("closure"),payload:GT}),k.object({kind:k.literal("claim"),payload:zT}),k.object({kind:k.literal("browser_event"),payload:qT}),k.object({kind:k.literal("session_phase"),payload:JT})]),VT=k.discriminatedUnion("kind",[k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("tool_call"),payload:NT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("hook_decision"),payload:BT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("subagent_lifecycle"),payload:UT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("background_agent"),payload:jT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("budget"),payload:HT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("abort"),payload:WT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("compaction"),payload:tW}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("closure"),payload:GT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("claim"),payload:zT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("browser_event"),payload:qT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("session_phase"),payload:JT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("session_sealed"),payload:aW})]);var Nc=class{traceDir;tracePath;seq=0;sealed=!1;fh=null;writeQueue=Promise.resolve();constructor(t){this.traceDir=t.traceDir,this.tracePath=XT(this.traceDir,"trace.jsonl")}getTracePath(){return this.tracePath}async write(t){if(this.sealed)throw new Error("NdjsonTraceWriter: trace is sealed; write() rejected");return YT.parse(t),this.enqueue(async()=>{await this.ensureOpen();let n=await this.materializePersistedEvent(t);await this.appendLine(n)})}async seal(t){this.sealed||(this.sealed=!0,await this.enqueue(async()=>{await this.ensureOpen();let n={ts:new Date().toISOString(),seq:this.seq++,kind:"session_sealed",payload:t};await this.appendLine(n),this.fh&&await this.fh.sync()}),await this.closeHandle())}async close(){await this.enqueue(async()=>{}),await this.closeHandle()}enqueue(t){let n=this.writeQueue.then(t,t);return this.writeQueue=n.then(()=>{},()=>{}),n}async ensureOpen(){this.fh||(await cW(this.traceDir,{recursive:!0}),this.fh=await uW(this.tracePath,"a"))}async closeHandle(){if(!this.fh)return;let t=this.fh;this.fh=null,await t.close()}async appendLine(t){if(!this.fh)throw new Error("NdjsonTraceWriter: file handle missing");await this.fh.appendFile(`${JSON.stringify(t)}
|
|
1660
|
+
`)}import $n from"chalk";rc();var NH={read:$n.hex("#C9B584"),write:$n.hex("#E8A33D"),shell:$n.hex("#A8E060"),subagent:p.plan,skill:$n.hex("#F08AC4"),dag:$n.hex("#4EC9B0"),mcp:$n.hex("#5FE0C0"),web:$n.hex("#A0C4C0"),browser:$n.hex("#FF8A65"),planning:p.meta,schedule:$n.hex("#D4A84B"),other:p.meta},BH={read:"\u25CF",write:"\u270E",shell:"$",subagent:"\u2192",skill:"\u25C6",dag:"\u2B21",mcp:"\u22A1",web:"\u2316",browser:"\u25C9",planning:"\u25B1",schedule:"\u23F2",other:"\u25CF"};function Nf(e){return{color:NH[e],glyph:BH[e]}}function Ts(e){return Nf(sr(e))}function Dc(e,t){let n=t??process.stdout.columns??80;return!Number.isFinite(n)||n<=0?e:ie(e,n)}function Lc(e,t){let{description:n,summary:r,lastToolName:o,totalTokens:s,toolUses:i,durationMs:a}=e,l=[];if(o){let{color:u,glyph:d}=Ts(o);l.push(`via ${u(`${d} ${o}`)}`)}i&&l.push(`${i} tool${i===1?"":"s"}`),s&&l.push(`${se(s)} tok`),a&&l.push(oe(a)),l.push("esc to interrupt \xB7 ctrl+b background");let c=l.length>0?` (${l.join(" \xB7 ")})`:"";return r?[Dc(p.dim(` \u25E6 ${n}`),t),Dc(p.dim(` ${r}${c}`),t)]:[Dc(p.dim(` \u25E6 ${n}${c}`),t)]}function Fc(e,t){let n=e.status==="succeeded"?"\u2713":e.status==="failed"?"\u2717":"\u2298",r=e.agentType??e.subagentId,o=[n,r];return e.durationMs!==void 0&&o.push(`\xB7 ${oe(e.durationMs)}`),Dc(p.dim(` ${o.join(" ")}`),t)}Ue();Wi();Ki();ar();Jr();kn();Ft();xn();z();K();import{randomUUID as pW}from"node:crypto";import{createHash as lW}from"crypto";import{mkdir as cW,open as uW,writeFile as dW}from"fs/promises";import{join as XT}from"path";import{z as k}from"zod";var UH=k.object({phase:k.literal("started"),toolUseId:k.string(),name:k.string(),inputBytes:k.number().int().nonnegative(),subagentId:k.string().optional()}),jH=k.object({phase:k.literal("completed"),toolUseId:k.string(),name:k.string(),resultBytes:k.number().int().nonnegative(),isError:k.boolean(),truncated:k.boolean(),durationMs:k.number().nonnegative(),circuitBreaker:k.boolean().optional(),subagentId:k.string().optional()}),NT=k.discriminatedUnion("phase",[UH,jH]),HH=k.enum(["PreToolUse","PostToolUse","SessionStart","SessionEnd","SubagentStart","SubagentStop"]),BT=k.object({hookEvent:HH,decision:k.union([k.literal("block"),k.literal("approve"),k.undefined()]),reason:k.string().optional(),blockedTool:k.string().optional(),injectedContextBytes:k.number().int().nonnegative().optional()}),WH=k.object({transition:k.literal("started"),subagentId:k.string(),parentId:k.string(),model:k.string(),allowedTools:k.array(k.string()).readonly().optional(),systemPromptHash:k.string().optional()}),KH=k.object({transition:k.literal("succeeded"),subagentId:k.string(),durationMs:k.number().nonnegative(),turnCount:k.number().int().nonnegative(),totalCostUsd:k.number().nonnegative().optional(),outputBytes:k.number().int().nonnegative()}),GH=k.object({transition:k.literal("failed"),subagentId:k.string(),errorClass:k.string(),errorMessage:k.string(),partialOutputBytes:k.number().int().nonnegative()}),zH=k.object({transition:k.literal("cancelled"),subagentId:k.string(),source:k.enum(["cascade","explicit"])}),UT=k.discriminatedUnion("transition",[WH,KH,GH,zH]),qH=k.object({transition:k.literal("started"),jobId:k.string(),subagentId:k.string(),label:k.string(),model:k.string()}),JH=k.object({transition:k.literal("completed"),jobId:k.string(),subagentId:k.string(),durationMs:k.number().nonnegative(),outputBytes:k.number().int().nonnegative()}),YH=k.object({transition:k.literal("failed"),jobId:k.string(),subagentId:k.string(),durationMs:k.number().nonnegative(),errorClass:k.string(),errorMessage:k.string()}),VH=k.object({transition:k.literal("cancelled"),jobId:k.string(),subagentId:k.string(),source:k.enum(["explicit","cascade"])}),XH=k.object({transition:k.literal("joined"),jobId:k.string(),subagentId:k.string(),jobStatus:k.enum(["completed","failed","cancelled"])}),jT=k.discriminatedUnion("transition",[qH,JH,YH,VH,XH]),HT=k.object({kind:k.literal("monetary"),runningCostUsd:k.number().nonnegative(),maxBudgetUsd:k.number().nonnegative(),lastTurnCostUsd:k.number().nonnegative()}),ZH=k.enum(["user_signal","cascade","timeout","budget","hook_block"]),WT=k.object({origin:ZH,cascadedTo:k.array(k.string()).readonly(),reason:k.string().optional()}),KT=k.enum(["manual","token_threshold","turn_count"]),QH=k.object({path:k.string(),sizeBytes:k.number().int().nonnegative(),sha256:k.string().regex(/^[0-9a-f]{64}$/)}),eW=k.object({trigger:KT,preCompactionMessages:k.array(k.unknown()),summary:k.string(),keptTailCount:k.number().int().nonnegative(),keepLastNConfig:k.number().int().nonnegative(),messagesBefore:k.number().int().nonnegative(),messagesAfter:k.number().int().nonnegative(),tokensSavedEstimate:k.number().nonnegative().optional(),summarizationTokens:k.object({input:k.number().int().nonnegative(),output:k.number().int().nonnegative()}).optional()}),tW=k.object({trigger:KT,preCompactionMessagesRef:QH,summary:k.string(),keptTailCount:k.number().int().nonnegative(),keepLastNConfig:k.number().int().nonnegative(),messagesBefore:k.number().int().nonnegative(),messagesAfter:k.number().int().nonnegative(),tokensSavedEstimate:k.number().nonnegative().optional(),summarizationTokens:k.object({input:k.number().int().nonnegative(),output:k.number().int().nonnegative()}).optional()}),nW=k.enum(["model_end_turn","truncated","iteration_cap","abort","timeout","budget_exceeded","hook_blocked","max_turns_exceeded"]),GT=k.object({reason:nW,finalTurnCount:k.number().int().nonnegative(),finalCostUsd:k.number().nonnegative(),finalTokens:k.object({input:k.number().int().nonnegative().optional(),output:k.number().int().nonnegative().optional(),cacheRead:k.number().int().nonnegative().optional(),cacheCreation:k.number().int().nonnegative().optional()}),lastStopReason:k.string().optional()}),zT=k.object({source:k.string(),assertion:k.string(),evidence:k.array(k.string()).readonly(),confidence:k.number().min(0).max(1),dissent:k.string().optional()}),rW=k.enum(["browser_open","browser_observe","browser_act","browser_screenshot","browser_extract","browser_close"]),oW=k.enum(["click","fill","press","select","hover","scroll_to","wait_for"]),sW=k.object({kind:k.enum(["semantic","element_id","selector"]),text:k.string().max(80).optional(),role:k.string().optional(),elementId:k.string().optional(),selectorHash:k.string().regex(/^[0-9a-f]{8}$/).optional()}),qT=k.object({tool:rW,action:oW.optional(),toolUseId:k.string(),target:sW.optional(),urlBefore:k.string().nullable(),urlAfter:k.string().nullable(),status:k.enum(["ok","error","ambiguous_target","blocked_by_policy"]),screenshotPath:k.string().optional(),observationSummary:k.string().max(500).optional(),error:k.object({reason:k.string(),recoverable:k.boolean()}).optional(),durationMs:k.number().nonnegative()}),iW=k.enum(["bootstrap_start","bootstrap_done","session_init_start","session_init_done","mcp_connect_start","mcp_connect_done","mcp_server_start","mcp_server_done","loop_start","loop_end","model_ttfb"]),JT=k.object({phase:iW,durationMs:k.number().nonnegative().optional(),metadata:k.record(k.string(),k.union([k.string(),k.number(),k.boolean()])).optional()}),aW=k.object({status:k.enum(["succeeded","failed","cancelled"]),finalCostUsd:k.number().nonnegative(),finalTurnCount:k.number().int().nonnegative(),closedAt:k.string().datetime(),subagentCount:k.number().int().nonnegative().optional(),subagentTokens:k.object({input:k.number().int().nonnegative().optional(),output:k.number().int().nonnegative().optional(),cacheRead:k.number().int().nonnegative().optional(),cacheCreation:k.number().int().nonnegative().optional()}).optional(),subagentCostUsd:k.number().nonnegative().optional()}),YT=k.discriminatedUnion("kind",[k.object({kind:k.literal("tool_call"),payload:NT}),k.object({kind:k.literal("hook_decision"),payload:BT}),k.object({kind:k.literal("subagent_lifecycle"),payload:UT}),k.object({kind:k.literal("background_agent"),payload:jT}),k.object({kind:k.literal("budget"),payload:HT}),k.object({kind:k.literal("abort"),payload:WT}),k.object({kind:k.literal("compaction"),payload:eW}),k.object({kind:k.literal("closure"),payload:GT}),k.object({kind:k.literal("claim"),payload:zT}),k.object({kind:k.literal("browser_event"),payload:qT}),k.object({kind:k.literal("session_phase"),payload:JT})]),VT=k.discriminatedUnion("kind",[k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("tool_call"),payload:NT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("hook_decision"),payload:BT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("subagent_lifecycle"),payload:UT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("background_agent"),payload:jT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("budget"),payload:HT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("abort"),payload:WT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("compaction"),payload:tW}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("closure"),payload:GT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("claim"),payload:zT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("browser_event"),payload:qT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("session_phase"),payload:JT}),k.object({ts:k.string().datetime(),seq:k.number().int().nonnegative(),kind:k.literal("session_sealed"),payload:aW})]);var Nc=class{traceDir;tracePath;seq=0;sealed=!1;fh=null;writeQueue=Promise.resolve();constructor(t){this.traceDir=t.traceDir,this.tracePath=XT(this.traceDir,"trace.jsonl")}getTracePath(){return this.tracePath}async write(t){if(this.sealed)throw new Error("NdjsonTraceWriter: trace is sealed; write() rejected");return YT.parse(t),this.enqueue(async()=>{await this.ensureOpen();let n=await this.materializePersistedEvent(t);await this.appendLine(n)})}async seal(t){this.sealed||(this.sealed=!0,await this.enqueue(async()=>{await this.ensureOpen();let n={ts:new Date().toISOString(),seq:this.seq++,kind:"session_sealed",payload:t};await this.appendLine(n),this.fh&&await this.fh.sync()}),await this.closeHandle())}async close(){await this.enqueue(async()=>{}),await this.closeHandle()}enqueue(t){let n=this.writeQueue.then(t,t);return this.writeQueue=n.then(()=>{},()=>{}),n}async ensureOpen(){this.fh||(await cW(this.traceDir,{recursive:!0}),this.fh=await uW(this.tracePath,"a"))}async closeHandle(){if(!this.fh)return;let t=this.fh;this.fh=null,await t.close()}async appendLine(t){if(!this.fh)throw new Error("NdjsonTraceWriter: file handle missing");await this.fh.appendFile(`${JSON.stringify(t)}
|
|
1661
1661
|
`)}async materializePersistedEvent(t){let n=new Date().toISOString(),r=this.seq++;if(t.kind==="compaction"){let o=await this.persistCompactionSidecar(t.payload,r,n);return{ts:n,seq:r,kind:"compaction",payload:o}}return{ts:n,seq:r,kind:t.kind,payload:t.payload}}async persistCompactionSidecar(t,n,r){let o=r.replace(/[:.]/g,"-"),s=XT(this.traceDir,`${String(n).padStart(6,"0")}-${o}-pre-compaction.json`),i=JSON.stringify(t.preCompactionMessages),a=Buffer.byteLength(i,"utf8"),l=lW("sha256").update(i).digest("hex");await dW(s,i,{encoding:"utf8",flag:"w"});let c={path:s,sizeBytes:a,sha256:l};return{trigger:t.trigger,preCompactionMessagesRef:c,summary:t.summary,keptTailCount:t.keptTailCount,keepLastNConfig:t.keepLastNConfig,messagesBefore:t.messagesBefore,messagesAfter:t.messagesAfter,...t.tokensSavedEstimate!==void 0?{tokensSavedEstimate:t.tokensSavedEstimate}:{},...t.summarizationTokens!==void 0?{summarizationTokens:t.summarizationTokens}:{}}}};function xs(e={}){if(v.AFK_TRACE_DISABLED==="1")return null;let t=e.sessionLabel??pW(),n=Mo(t),r=new Nc({traceDir:n});return{writer:r,tracePath:r.getTracePath(),sessionLabel:t}}_i();K();import{readFileSync as mW,writeFileSync as ex,existsSync as Zi,mkdirSync as tx,readdirSync as fW,statSync as gW,realpathSync as ZT}from"fs";import{join as nx,basename as rx,resolve as QT,sep as hW}from"path";import{randomUUID as yW}from"node:crypto";function As(){return Uy(),gn()}function bW(e){return nx(As(),`${e}.json`)}function Bc(e,{write:t=!1}={}){let n=e.includes("/")?e:bW(e),r,o;if(!t&&Zi(n)?(r=ZT(n),o=ZT(As())):(r=QT(n),o=QT(As())),!r.startsWith(o+hW)&&r!==o)throw new Error(`Session path escapes sessions directory: ${e}`);return r}function sn(e,t){let n=As();Zi(n)||tx(n,{recursive:!0});let r=t??e.sessionId??`session-${Date.now()}`,o={sessionId:e.sessionId,...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.telegramChatId!==void 0?{telegramChatId:e.telegramChatId}:{},model:e.model,startedAt:e.sessionStartTime,savedAt:Date.now(),totalTurns:e.totalTurns,totalCostUsd:e.totalCostUsd,totalTokens:e.totalTokens,totalDurationMs:e.totalDurationMs,turns:e.turns},s=Bc(r,{write:!0});return ex(s,JSON.stringify(o,null,2)),s}function ox(e,t={}){let n=As();Zi(n)||tx(n,{recursive:!0});let r=t.newId??yW(),o={sessionId:r,model:e.model,startedAt:e.sessionStartTime,savedAt:Date.now(),totalTurns:e.totalTurns,totalCostUsd:e.totalCostUsd,totalTokens:e.totalTokens,totalDurationMs:e.totalDurationMs,turns:[...e.turns],...e.sessionId?{forkedFrom:e.sessionId}:{},forkedAt:Date.now()},s=Bc(r,{write:!0});return ex(s,JSON.stringify(o,null,2)),{id:r,path:s}}function Rs(e){let t;try{t=Bc(e)}catch{return}if(Zi(t))try{let n=mW(t,"utf-8");return JSON.parse(n)}catch{return}}function _s(e){let t;try{t=Bc(e)}catch{return}let n=Rs(t);if(n)return{path:t,id:rx(t,".json"),data:n};let r=Qi();for(let s of r){if(s.id!==e&&s.sessionId!==e&&s.name!==e)continue;let i=Rs(s.path);if(i)return{path:s.path,id:s.id,data:i}}if(e.length>=3){let s=r.filter(i=>i.name!==void 0&&i.name.startsWith(e));if(s.length===1){let i=s[0];if(i){let a=Rs(i.path);if(a)return{path:i.path,id:i.id,data:a}}}}}function Qi(){let e=As();if(!Zi(e))return[];let t=[];for(let n of fW(e)){if(!n.endsWith(".json"))continue;let r=nx(e,n);try{if(!gW(r).isFile())continue;let s=Rs(r);if(!s||typeof s.savedAt!="number"||typeof s.model!="string")continue;t.push({path:r,id:rx(n,".json"),sessionId:s.sessionId,name:s.name,source:s.source,model:s.model,startedAt:s.startedAt,savedAt:s.savedAt,totalTurns:s.totalTurns,totalCostUsd:s.totalCostUsd})}catch{}}return t.sort((n,r)=>r.savedAt-n.savedAt),t}function Cs(e){if(e.resume&&e.continue)throw new Error("Use either --resume <id> or --continue, not both.");if(e.resume){let t=_s(e.resume);return t?{id:t.id,resumeId:t.data.sessionId??t.id,stored:t.data}:{id:e.resume,resumeId:e.resume}}if(e.continue){let t=Qi()[0];if(!t)throw new Error("No saved sessions found for --continue. Run a session first or use /save.");let n=Rs(t.path);if(!n)throw new Error(`Could not load latest saved session: ${t.id}`);return{id:t.id,resumeId:n.sessionId??t.id,stored:n}}}function Is(e){return e?{resume:e.resumeId,sessionId:e.resumeId,...e.stored?{resumeHistory:e.stored.turns.map(t=>({user:t.user,assistant:t.assistant}))}:{}}:{}}function Ps(e){let t=e.toLowerCase().replace(/[`*_~]/g," ").replace(/[^\w\s-]/g," ").replace(/[\s_]+/g," ").trim();return t?t.split(" ").filter(Boolean).slice(0,6).join("-").slice(0,48).replace(/-+$/g,""):""}function Uc(e){return{totalTurns:0,totalCostUsd:0,totalTokens:0,totalDurationMs:0,sessionStartTime:Date.now(),turnCosts:[],turnTokens:[],turns:[],model:e,planMode:!1}}function sx(e){e.totalTurns=0,e.totalCostUsd=0,e.totalTokens=0,e.totalDurationMs=0,e.sessionStartTime=Date.now(),e.turnCosts.length=0,e.turnTokens.length=0,e.turns.length=0,delete e.sessionId,delete e.name}function Dn(e,t,n,r,o){let s=r?.totalCostUsd??0,i=r?.durationMs??0,a=Number(r?.usage?.input_tokens??0),l=Number(r?.usage?.output_tokens??0),c=a,u=l,d=Number(r?.usage?.cache_read_input_tokens??0)+Number(r?.usage?.cache_creation_input_tokens??0),m=r?.usage?.iterations;if(Array.isArray(m)&&m.length>0){let y=m[m.length-1];if(y&&typeof y=="object"){let w=y;c=Number(w.input_tokens??0),u=Number(w.output_tokens??0),d=Number(w.cache_read_input_tokens??0)+Number(w.cache_creation_input_tokens??0)}}e.totalTurns+=1,e.totalCostUsd+=s,e.totalDurationMs+=i,e.totalTokens+=a+l,e.turnCosts.push(s);let f=Number(r?.usage?.context_window_tokens??NaN),g=Array.isArray(m)&&m.length>0,h=Number.isFinite(f)?f:g?c+u+d:void 0;if(e.turnTokens.push({input:c,output:u,cache:d,...h!==void 0?{footprint:h}:{}}),r?.sessionId&&!e.sessionId&&(e.sessionId=String(r.sessionId)),!e.name){let y=Ps(t);y&&(e.name=y)}let b={user:t,assistant:n,timestamp:Date.now(),costUsd:s,durationMs:i,inputTokens:a,outputTokens:l,...o&&o.length>0?{toolEvents:o}:{}};return e.turns.push(b),b}function SW(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}var ax=10*1024*1024;function lx(){return new Promise((e,t)=>{let n=[],r=0;if(process.stdin.readableEnded){e("");return}let o=s=>{if(r+=s.length,r>ax){process.stdin.destroy(new Error(`stdin exceeds ${ax}-byte limit`));return}n.push(s)};process.stdin.on("data",o),process.stdin.once("end",()=>{process.stdin.removeListener("data",o),e(Buffer.concat(n).toString("utf-8").replace(/\n+$/,""))}),process.stdin.once("error",s=>{process.stdin.removeListener("data",o),t(s)}),process.stdin.resume()})}function cx(e,t){return new Promise((n,r)=>{let o=e.write(t,s=>{s?r(s):o&&n()});if(!o){let s=()=>{e.removeListener("error",i),n()},i=a=>{e.removeListener("drain",s),r(a)};e.once("drain",s),e.once("error",i)}})}function px(e){e.command("chat").description("Send a message to the agent").argument("[message]","Message to send; use `-` or omit to read from stdin").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.",ot()).option("-s, --stream","[no-op] reserved; use --format stream-json for headless streaming",!1).option("-f, --format <format>","Output format (text|json|stream-json)","text").option("--max-turns <number>","Maximum conversation turns","10").option("--thinking <mode>","Thinking mode: 'adaptive' | 'disabled' | 'enabled:<N>'","enabled:max").option("--effort <level>","Effort level: low|medium|high|xhigh|max").option("--max-budget-usd <usd>","Hard session cost ceiling in USD. Env: AFK_MAX_BUDGET_USD").option("--task-budget <tokens>","Soft per-task token budget. Env: AFK_TASK_BUDGET").option("--max-output-tokens <n|max>","Per-response output cap ('max' = model ceiling). Env: AFK_MAX_OUTPUT_TOKENS").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("-w, --worktree [branch]","Create a git worktree for an isolated one-shot. 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. Mirrors `afk interactive -w`.").option("--worktree-base <ref>","Base git ref for the worktree created by --worktree. Default: the remote's default branch (origin/main), fetched fresh. Pass HEAD to base on your local checkout instead. Also: AFK_WORKTREE_BASE.").option("--resume <id>","Resume a persisted session by id").option("--continue","Continue the most recent persisted session in cwd").option("--session-id <uuid>","Assign a specific UUID to this session (creates new; errors if already exists)").action(async(t,n)=>{if(n.resume&&n.continue){process.stderr.write(`Error: --resume and --continue are mutually exclusive
|
|
1662
1662
|
`),process.exitCode=1;return}if(n.sessionId!==void 0&&(n.resume||n.continue)){process.stderr.write(`Error: --session-id is mutually exclusive with --resume and --continue
|
|
1663
1663
|
`),process.exitCode=1;return}if(n.sessionId!==void 0&&!SW(n.sessionId)){process.stderr.write(`Error: --session-id must be a UUID (got: ${n.sessionId})
|
|
@@ -1671,7 +1671,7 @@ Run \`afk i\` then \`/resume\` to list saved sessions.
|
|
|
1671
1671
|
`),ve.type==="chunk"&&ve.chunk.type==="content"&&(B+=ve.chunk.content),ve.type==="done"&&(Dn(m,r,B,ve.metadata),ve.metadata?.sessionId&&!m.sessionId&&(m.sessionId=String(ve.metadata.sessionId))),ve.type==="error"){process.exitCode=1;break}return}let J=await i.sendMessage(r,{stream:n.stream});s.succeed("Response received");let X=i.getLastResponseMetadata();if(Dn(m,r,J.content,X??void 0),X?.sessionId&&!m.sessionId&&(m.sessionId=String(X.sessionId)),n.format==="json"){let te=X?Number(X.usage?.input_tokens??0):0,B=X?Number(X.usage?.output_tokens??0):0;console.log(JSON.stringify({success:!0,model:O,message:J.content,timestamp:J.timestamp,...X?.totalCostUsd!==void 0?{costUsd:X.totalCostUsd}:{},...X?.durationMs!==void 0?{durationMs:X.durationMs}:{},...te>0?{inputTokens:te}:{},...B>0?{outputTokens:B}:{}},null,2))}else{if(console.log(ix.cyan(`
|
|
1672
1672
|
\u{1F916} Claude:`)),console.log(Pt(J.content)),X){let te=[];X.durationMs&&te.push(oe(X.durationMs)),X.totalCostUsd!==void 0&&te.push(ze(X.totalCostUsd));let B=Number(X.usage?.input_tokens??0),Se=Number(X.usage?.output_tokens??0);B+Se>0&&te.push(se(B+Se)+" tokens"),te.length>0&&console.log(ix.dim(" \xB7 "+te.join(" \xB7 ")))}console.log("")}}catch(g){if(f=!0,n.format==="stream-json"){let h=g instanceof Error?g:new Error(String(g));try{await cx(process.stdout,JSON.stringify({type:"error",error:{message:h.message,name:h.name}})+`
|
|
1673
1673
|
`)}catch{}process.exitCode=1}s.fail("Failed to send message"),W(g)}finally{if(u&&m.totalTurns>0&&!f)try{let h=sn(m,d).replace(/\.json$/,"").split("/").pop()??d??m.sessionId??"unknown";process.stderr.write(`Continue with: afk chat <msg> --resume ${h}
|
|
1674
|
-
`)}catch{}i&&await i.close(),a?.close(),l!==void 0&&await l.cleanup()}})}z();import MI from"ora";import*as OI from"node:os";import*as bo from"node:path";import{execFileSync as rV}from"node:child_process";var jc=new Set;function Vr(e){return jc.add(e),()=>{jc.delete(e)}}async function Hc(){await Promise.all([...jc].map(e=>e())),jc.clear()}Le();var vW=/^[A-Za-z0-9_@%+=:,./-]+$/;function ea(e){return vW.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function an(e,t){let n=["afk","interactive"];return typeof t=="string"&&t.length>0&&n.push("--model",ea(t)),n.push("--resume",ea(e)),n.join(" ")}import{homedir as kW}from"node:os";import{sep as ln}from"node:path";function ta(e,t={}){if(!e)return"";let n=t.homedir??kW(),r=EW(e,n),o=t.maxWidth;if(o===void 0||o<=0||q(r)<=o)return r;let s=r.split(ln).filter(d=>d.length>0);if(s.length<=1)return
|
|
1674
|
+
`)}catch{}i&&await i.close(),a?.close(),l!==void 0&&await l.cleanup()}})}z();import MI from"ora";import*as OI from"node:os";import*as bo from"node:path";import{execFileSync as rV}from"node:child_process";var jc=new Set;function Vr(e){return jc.add(e),()=>{jc.delete(e)}}async function Hc(){await Promise.all([...jc].map(e=>e())),jc.clear()}Le();var vW=/^[A-Za-z0-9_@%+=:,./-]+$/;function ea(e){return vW.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function an(e,t){let n=["afk","interactive"];return typeof t=="string"&&t.length>0&&n.push("--model",ea(t)),n.push("--resume",ea(e)),n.join(" ")}import{homedir as kW}from"node:os";import{sep as ln}from"node:path";function ta(e,t={}){if(!e)return"";let n=t.homedir??kW(),r=EW(e,n),o=t.maxWidth;if(o===void 0||o<=0||q(r)<=o)return r;let s=r.split(ln).filter(d=>d.length>0);if(s.length<=1)return ie(r,o);let a=r.startsWith("~")?"~":s[0],l=1,c=s[s.length-1],u=[];for(let d=s.length-2;d>=l;d--){let m=s.slice(l,d+1),f=m.length>0?m.join(ln)+ln:"";u.push(`${a}${ln}${f}\u2026${ln}${c}`)}u.push(`${a}${ln}\u2026${ln}${c}`);for(let d of u)if(q(d)<=o)return d;return ie(u[u.length-1],o)}function EW(e,t){if(!t)return e;if(e===t)return"~";let n=t.endsWith(ln)?t:t+ln;return e.startsWith(n)?"~"+ln+e.slice(n.length):e}Mi();import*as KC from"node:readline";import{emitKeypressEvents as TW}from"readline";var xW=50;function Xr(e){TW(e,{escapeCodeTimeout:xW})}var RW=/\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)|\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])|\x9B[0-?]*[ -/]*[@-~]|[\x80-\x9F]/g;function fe(e,t=128){let n=e.replace(RW,"");return n.length>t?n.slice(0,t)+"\u2026":n}function mx(e=process.env){return e.AFK_DEMO_CLEAN==="1"||typeof e.SCRIPT=="string"&&e.SCRIPT.length>0||e.ASCIINEMA_REC==="1"}function AW(e=process.env){return e.AFK_BELL==="1"}function fx(e=process.env){return e.AFK_REDUCED_MOTION==="1"}function Wc(e,t=process.env){AW(t)&&e.isTTY&&e.write("\x07")}var Uf=64,Bf=256,Kc=20,jf=new Set(["__proto__","constructor","prototype"]);async function _W(e,t){if(!process.stdout.isTTY||!process.stdin.isTTY||e.length===0)return null;let n=10,r=0,o=0;function s(){let u=o,d=Math.min(u+n,e.length);return{start:u,end:d}}function i(){let{start:u,end:d}=s(),m=[];for(let f=u;f<d;f++){let g=fe(e[f],80);f===r?m.push(` ${p.bold("\u25B6 "+g)}`):m.push(` ${p.dim(g)}`)}if(e.length>n){let{end:f}=s();m.push(p.dim(` (${o+1}\u2013${f} of ${e.length} \u2191/\u2193 to scroll)`))}else m.push(p.dim(" \u2191/\u2193 navigate Enter select Esc cancel"));return m}let a=i();process.stdout.write(a.join(`
|
|
1675
1675
|
`)+`
|
|
1676
1676
|
`);let l=a.length;function c(){let u=i();process.stdout.write(`\x1B[${l}A\x1B[0J`+u.join(`
|
|
1677
1677
|
`)+`
|
|
@@ -1679,7 +1679,7 @@ Run \`afk i\` then \`/resume\` to list saved sessions.
|
|
|
1679
1679
|
`)+`
|
|
1680
1680
|
`);let c=l.length;function u(){let d=a();process.stdout.write(`\x1B[${c}A\x1B[0J`+d.join(`
|
|
1681
1681
|
`)+`
|
|
1682
|
-
`),c=d.length}return new Promise(d=>{process.stdin.setRawMode(!0),Xr(process.stdin);let m=(g,h)=>{if(h)if(h.name==="up"||h.sequence==="\x1B[A")r>0&&(r--,r<o&&(o=r),u());else if(h.name==="down"||h.sequence==="\x1B[B"){if(r<e.length-1){r++;let{end:b}=i();r>=b&&o++,u()}}else h.name==="space"?(s.has(r)?s.delete(r):s.add(r),u()):h.name==="return"||h.name==="enter"?(f(),d([...s].sort((b,y)=>b-y))):(h.name==="escape"||h.ctrl&&h.name==="c")&&(f(),d(":cancel"))};function f(){process.stdin.removeListener("keypress",m);try{process.stdin.setRawMode(!1)}catch{}}process.stdin.on("keypress",m)})}var Ms={action:"decline"},le={action:"cancel"},IW={action:"accept"};function PW(e){let t=e.properties,n={},r=0,o=!1;if(typeof t=="object"&&t!==null){let a=0;for(let[l,c]of Object.entries(t))if(!jf.has(l)){if(r+=1,a>=Uf){o=!0;continue}n[l]=c,a+=1}}let s=e.required,i=new Set(Array.isArray(s)?s.slice(0,Uf*2).filter(a=>typeof a=="string").filter(a=>!jf.has(a)):[]);return{properties:n,required:i,fieldsTruncated:o,originalFieldCount:r}}function MW(e,t){e.line(),e.line(p.warning("\u26A0 MCP form elicitation")),e.line(p.dim(" server: ")+p.bold(fe(t.serverName,64))),e.line(p.dim(" message: ")+fe(t.message,256)),t.elicitationId&&e.line(p.dim(" id: ")+fe(t.elicitationId,64)),e.line(p.dim(" Type :decline or :cancel at any prompt to exit.")),e.line()}async function OW(e,t,n,r,o,s){if(s.aborted)return{tag:"cancel"};let i=fe(t.description??t.title??e),a=fe(t.type??"string",32),l=fe(e,64),c;if(t.enum!==void 0){let d=t.enum.slice(0,Kc).map(f=>fe(String(f),32)).join("|"),m=t.enum.length>Kc?"|\u2026":"";c=` (enum: ${d}${m})`}else a==="boolean"?c=" (boolean: y/n)":a==="number"||a==="integer"?c=` (${a})`:a==="string"?c=" (string)":(c=` (${a} \u2014 treated as string)`,o.line(p.warning(` \u26A0 Unknown field type '${a}' for '${l}' \u2014 collecting as string.`)));let u=n?"":p.dim(" [optional, enter to skip]");for(o.line(p.dim(` [${l}]`)+p.dim(` ${i}`)+p.dim(c)+u),t.enum!==void 0&&t.enum.length>Bf&&o.line(p.warning(` \u26A0 Field '${l}' has ${t.enum.length} enum values; only the first ${Bf} are valid for input.`));;){let d;try{d=await r(p.dim(" > "))}catch{return{tag:"cancel"}}if(s.aborted)return{tag:"cancel"};let m=d.trim();if(m===":cancel")return{tag:"cancel"};if(m===":decline")return{tag:"decline"};if(m===""){if(n){o.line(p.warning(" (required \u2014 cannot be skipped)"));continue}return{tag:"value",value:t.default}}let f;if(a==="boolean"){let g=m.toLowerCase();if(g==="y"||g==="yes"||g==="true"||g==="1")f=!0;else if(g==="n"||g==="no"||g==="false"||g==="0")f=!1;else{o.line(p.warning(" Invalid boolean \u2014 enter y/yes/true/1 or n/no/false/0."));continue}}else if(a==="number"){let g=Number(m);if(!isFinite(g)){o.line(p.warning(" Invalid number \u2014 enter a numeric value."));continue}f=g}else if(a==="integer"){let g=parseInt(m,10);if(!isFinite(g)||String(g)!==m.replace(/\.0+$/,"")){o.line(p.warning(" Invalid integer \u2014 enter a whole number."));continue}f=g}else f=m;if(t.enum!==void 0){let g=t.enum.slice(0,Bf),h=!1;for(let b of g)if(String(b)===String(f)){h=!0;break}if(!h){let b=fe(String(f),64),y=g.slice(0,Kc).map(S=>fe(String(S),32)).join(", "),w=g.length>Kc?", \u2026":"";o.line(p.warning(` '${b}' is not a valid choice. Valid: ${y}${w}`));continue}}return{tag:"value",value:f}}}function $W(e,t){e.line(),e.line(p.warning("\u26A0 MCP elicitation")),e.line(p.dim(" server: ")+p.bold(fe(t.serverName,64))),e.line(p.dim(" message: ")+fe(t.message,256)),t.url&&e.line(p.dim(" url: ")+p.brand(fe(t.url,512))),t.elicitationId&&e.line(p.dim(" id: ")+fe(t.elicitationId,64)),e.line()}var Zr={action:"skip"};function Hf(e){let t=[];return t.push(p.warning(" \u{1F4AC} Agent question")),t.push(p.bold(" ? "+fe(e.message,512))),e.context&&t.push(p.dim(" "+fe(e.context,512))),t.push(""),t}async function DW(e,t,n,r){let o=Hf(t),s=t.allowSkip===!0;if(e==="number"){let u=t.min,d=t.max,f=`enter to submit \xB7 esc to cancel${u!==void 0&&d!==void 0?` [${u}\u2013${d}]`:u!==void 0?` [\u2265${u}]`:d!==void 0?` [\u2264${d}]`:""}`,h=await n({header:o,help:f,validate:y=>{let w=y.trim();if(w==="")return s?null:"Please enter a number (or esc to cancel).";let S=Number(w);return Number.isFinite(S)?u!==void 0&&S<u?`Value must be \u2265 ${u}.`:d!==void 0&&S>d?`Value must be \u2264 ${d}.`:null:"Please enter a valid number."},signal:r});if(h===null)return null;let b=h.trim();return b===""&&s?{tag:"skip"}:{tag:"number",value:Number(b)}}let i=t.minLength,a=t.maxLength,c=await n({header:o,validate:u=>u===""?s?null:"Please enter a response (or esc to cancel).":i!==void 0&&u.length<i?`Response must be at least ${i} characters.`:a!==void 0&&u.length>a?`Response must be at most ${a} characters.`:null,signal:r});return c===null?null:c===""&&s?{tag:"skip"}:{tag:"text",value:c}}async function LW(e,t,n){if(n.aborted)return Ms;let{readLine:r,writer:o,pendingCount:s,pickFromList:i,readTextOverlay:a}=t,l=e.type??"text",c=s();if(c>1&&o.line(p.dim(` [${c} questions queued]`)),(l==="choice"||l==="multi_choice")&&i&&(e.choices?.length??0)>0){let m=(e.choices??[]).map(h=>fe(h,128)),f;try{f=await i({header:Hf(e),options:m,multi:l==="multi_choice",signal:n})}catch{return le}if(n.aborted||f===null)return le;if(f.length===0)return e.allowSkip?Zr:le;let g=f.length===1?fe(f[0]??"",128):f.map(h=>fe(h,128)).join(", ");return o.line(p.dim(" \u2713 ")+p.brand(g)),l==="choice"?{action:"accept",content:{value:f[0]}}:{action:"accept",content:{value:[...f]}}}if(l==="confirm"&&i){let f=e.questionDefault!==!1?["Yes","No"]:["No","Yes"],g;try{g=await i({header:Hf(e),options:f,multi:!1,signal:n})}catch{return le}if(n.aborted||g===null)return le;let h=g[0];if(h===void 0)return le;let b=h==="Yes";return o.line(p.dim(" \u2713 ")+(b?p.success("Yes"):p.error("No"))),{action:"accept",content:{value:b}}}if((l==="text"||l==="number")&&a){let m=await DW(l,e,a,n);if(m===null)return le;if(m.tag==="skip")return Zr;let f=m.tag==="text"?fe(m.value,256):String(m.value);return o.line(p.dim(" \u2713 ")+p.brand(f)),{action:"accept",content:{value:(m.tag==="text",m.value)}}}if(o.line(),o.line(p.warning("\u{1F4AC} Agent question")),e.context&&o.line(p.dim(" context: ")+fe(e.context,512)),o.line(p.bold(" "+fe(e.message,512))),o.line(p.dim(" Type :cancel to skip this question.")),o.line(),l==="confirm"){o.line("\x07");let m=e.questionDefault===!0?"Y/n":"y/N";for(;;){if(n.aborted)return le;let f;try{f=(await r(p.dim(` Continue? [${m}] `))).trim().toLowerCase()}catch{return le}if(n.aborted||f===":cancel")return le;if(f==="")return{action:"accept",content:{value:e.questionDefault===!0}};if(f==="y"||f==="yes")return{action:"accept",content:{value:!0}};if(f==="n"||f==="no")return{action:"accept",content:{value:!1}};o.line(p.warning(" Please enter y or n."))}}if(l==="choice"){o.line("\x07");let m=e.choices??[],f=await _W(m,n);if(f!==null){if(f===":cancel")return le;let g=m[f];return g!==void 0?(o.line(p.dim(` Selected: ${fe(g,128)}`)),{action:"accept",content:{value:g}}):le}for(m.forEach((g,h)=>{o.line(` ${h+1}. ${fe(g,128)}`)});;){if(n.aborted)return le;let g;try{g=(await r(p.dim(" Enter number: "))).trim()}catch{return le}if(n.aborted||g===":cancel")return le;if(g===""&&e.allowSkip)return Zr;let h=parseInt(g,10);if(!isFinite(h)||String(h)!==g||h<1||h>m.length){o.line(p.warning(` Please enter a number between 1 and ${m.length}.`));continue}return{action:"accept",content:{value:m[h-1]}}}}if(l==="multi_choice"){let m=e.choices??[],f=await CW(m,n);if(f!==null){if(f===":cancel")return le;if(f.length===0&&e.allowSkip)return Zr;if(f.length>0){let g=f.map(h=>m[h]);return o.line(p.dim(` Selected: ${g.map(h=>fe(h,64)).join(", ")}`)),{action:"accept",content:{value:g}}}}for(m.forEach((g,h)=>{o.line(` ${h+1}. ${fe(g,128)}`)});;){if(n.aborted)return le;let g;try{g=(await r(p.dim(" Enter numbers (comma-separated): "))).trim()}catch{return le}if(n.aborted||g===":cancel")return le;if(g===""&&e.allowSkip)return Zr;if(g===""){o.line(p.warning(" Please enter at least one selection."));continue}let h=g.split(",").map(w=>w.trim()),b=[],y=!0;for(let w of h){let S=parseInt(w,10);if(!isFinite(S)||String(S)!==w||S<1||S>m.length){o.line(p.warning(` Invalid selection "${fe(w,32)}". Enter numbers between 1 and ${m.length}.`)),y=!1;break}b.push(m[S-1])}if(y)return{action:"accept",content:{value:b}}}}if(l==="number"){let m=e.min,f=e.max,g=m!==void 0&&f!==void 0?` [${m}\u2013${f}]`:m!==void 0?` [\u2265${m}]`:f!==void 0?` [\u2264${f}]`:"";for(;;){if(n.aborted)return le;let h;try{h=(await r(p.dim(` Enter a number${g}: `))).trim()}catch{return le}if(n.aborted||h===":cancel")return le;if(h===""&&e.allowSkip)return Zr;if(h===""&&!e.allowSkip){o.line(p.warning(" Please enter a number (or :cancel to skip)."));continue}let b=Number(h);if(!isFinite(b)){o.line(p.warning(" Please enter a valid number."));continue}if(m!==void 0&&b<m){o.line(p.warning(` Value must be \u2265 ${m}.`));continue}if(f!==void 0&&b>f){o.line(p.warning(` Value must be \u2264 ${f}.`));continue}return{action:"accept",content:{value:b}}}}let u=e.minLength,d=e.maxLength;for(;;){if(n.aborted)return le;let m;try{m=(await r(p.dim(" > "))).trim()}catch{return le}if(n.aborted||m===":cancel")return le;if(m===""&&e.allowSkip)return Zr;if(m===""){o.line(p.warning(" Please enter a response (or type :cancel to skip)."));continue}if(u!==void 0&&m.length<u){o.line(p.warning(` Response must be at least ${u} characters.`));continue}if(d!==void 0&&m.length>d){o.line(p.warning(` Response must be at most ${d} characters.`));continue}return{action:"accept",content:{value:m}}}}function Gc(e){return async(t,{signal:n})=>{if(n.aborted)return Ms;Wc(process.stdout),e.suspendInput?.();try{if(t.origin==="agent")return await LW(t,e,n);if(t.mode==="form"){let o=t.requestedSchema,{properties:s,required:i,fieldsTruncated:a,originalFieldCount:l}=typeof o=="object"&&o!==null?PW(o):{properties:{},required:new Set,fieldsTruncated:!1,originalFieldCount:0};MW(e.writer,t),a&&e.writer.line(p.warning(` \u26A0 Schema has ${l} fields; only the first ${Uf} will be prompted (server may be malformed or compromised).`));let c=Object.create(null);if(Object.keys(s).length===0)return e.writer.line(p.warning(" \u26A0 Form schema has no usable fields \u2014 declining.")),Ms;for(let u of i)if(!(u in s))return e.writer.line(p.warning(` \u26A0 Required field '${fe(u,64)}' has no schema entry \u2014 declining.`)),Ms;for(let[u,d]of Object.entries(s)){if(n.aborted)return le;let m=await OW(u,d,i.has(u),e.readLine,e.writer,n);if(m.tag==="cancel")return le;if(m.tag==="decline")return Ms;m.value!==void 0&&!jf.has(u)&&(c[u]=m.value)}return{action:"accept",content:{...c}}}$W(e.writer,t);let r=(await e.readLine(p.dim("Continue? [y/N] "))).trim().toLowerCase();return r===""?le:r==="y"||r==="yes"?IW:Ms}finally{e.resumeInput?.()}}}us();Ft();Le();_n();function gx(e){let t=Math.max(0,Math.min(1,e.ratio)),n=t>.8?p.error:t>.5?p.warning:p.meta,r=20,o=Math.round(t*r),s=r-o,i="["+"\u2588".repeat(o)+"\u2591".repeat(s)+"]",a=Math.round(t*100)+"%",l="";e.used!==void 0&&e.limit!==void 0&&(l=se(e.used)+"/"+se(e.limit));let c=l?`${i} ${a} ${l}`:`${i} ${a}`,u=`${i} ${a}`,d=`ctx ${a}`,m=e.sparkline?p.meta(e.sparkline)+" ":"",f=e.sparkline?q(e.sparkline)+1:0,g=Math.max(0,e.width-f);if(q(c)<=g&&g>90)return m+n(c);if(q(u)<=g&&g>32)return m+n(u);if(q(d)<=g)return m+n(d);if(e.width>0){let h=m+n(d);return ae(h,e.width)}return n(a)}var zc=class{stream;force;throttleMs;started=!1;lastRepaint=0;lastFields=null;resizeUnsub=null;lastPaintedRow=null;extraRows=0;afterScrollRestore=null;constructor(t={}){this.stream=t.stream??process.stdout,this.force=t.force??!1,this.throttleMs=t.throttleMs??100}get enabled(){return this.force||!!this.stream.isTTY}start(){if(this.started||!this.enabled)return;this.started=!0,this.lastRepaint=0;let t=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.resizeUnsub===null&&(this.resizeUnsub=Ne.subscribe(()=>{this.onResize()}))}onResize(){if(!this.started||!this.enabled)return;let t=this.currentRows();this.stream.write("\x1B[s"),this.lastPaintedRow!==null&&this.lastPaintedRow!==this.paintRow(t)&&(this.stream.write(`\x1B[${this.lastPaintedRow};1H`),this.stream.write("\x1B[2K")),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.flush()}repaint(t){if(!this.enabled||!this.started){this.lastFields=t;return}let n=Date.now();if(n-this.lastRepaint<this.throttleMs){this.lastFields=t;return}this.lastRepaint=n,this.lastFields=t;let r=this.currentRows();this.stream.write("\x1B[s"),this.stream.write(`\x1B[${this.paintRow(r)};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatLine(t)),this.stream.write("\x1B[u"),this.lastPaintedRow=this.paintRow(r)}flush(){this.lastRepaint=0,this.lastFields&&this.repaint(this.lastFields)}setExtraRows(t){if(this.extraRows=t,this.started&&this.enabled){let n=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(n),this.stream.write("\x1B[u"),this.flush()}}getExtraRows(){return this.extraRows}setAfterScrollRestore(t){this.afterScrollRestore=t}rearm(){if(!this.started||!this.enabled)return;let t=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.flush()}withFullScrollRegion(t){if(!this.started||!this.enabled)return t();this.stream.write("\x1B[s"),this.stream.write("\x1B[r"),this.stream.write("\x1B[u");try{return t()}finally{let n=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(n),this.stream.write("\x1B[u"),this.flush(),this.afterScrollRestore?.()}}stop(){if(this.resizeUnsub!==null&&(this.resizeUnsub(),this.resizeUnsub=null),!this.started||!this.enabled){this.started=!1;return}let t=this.currentRows();this.stream.write("\x1B[s"),this.stream.write(`\x1B[${this.lastPaintedRow??this.paintRow(t)};1H`),this.stream.write("\x1B[2K"),this.stream.write("\x1B[r"),this.stream.write("\x1B[u"),this.started=!1,this.lastRepaint=0,this.lastPaintedRow=null}formatLine(t){let n=[],r=Math.max(4,(this.stream.columns??80)-2);if(t.cwd){let a=Math.max(8,Math.floor(r*.4)),l=ta(t.cwd,{maxWidth:a});l&&n.push({text:p.dim(l)})}if(n.push({text:p.brand(t.model)}),t.planMode&&n.push({text:p.warning("\u25CF plan")}),t.contextPct!==void 0){let a=gx({ratio:t.contextPct,used:t.contextUsedTokens,limit:t.contextLimit,sparkline:t.contextSparkline,width:r});n.push({text:a,droppablePriority:1})}t.cost!==void 0&&n.push({text:p.meta(`$${t.cost.toFixed(2)}`),droppablePriority:2}),t.tokens!==void 0&&n.push({text:p.meta(`${FW(t.tokens)} tok`),droppablePriority:3});let o=p.dim(" \xB7 "),s=n.map(a=>a.text).join(o);if(q(s)<=r)return s;let i=n.filter(a=>a.droppablePriority!==void 0);for(;i.length>0&&q(s)>r;){let a=Math.max(...i.map(l=>l.droppablePriority));n=n.filter(l=>l.droppablePriority===void 0||l.droppablePriority!==a),s=n.map(l=>l.text).join(o),i=n.filter(l=>l.droppablePriority!==void 0)}return ae(s,r)}currentRows(){let t=this.stream.rows;return typeof t=="number"&&t>0?t:24}paintRow(t){return t>1?t:1}writeScrollRegion(t){let n=1+this.extraRows;if(t>n){this.stream.write(`\x1B[1;${t-n}r`);return}this.stream.write("\x1B[r")}};function FW(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}var gt=new Map,Qr=new Map;function pe(e){if(gt.has(e.name))throw new Error(`Slash command already registered: ${e.name}`);gt.set(e.name,e);for(let t of e.aliases??[]){if(Qr.has(t)||gt.has(t))throw new Error(`Slash alias collides: ${t}`);Qr.set(t,e.name)}}function fr(e){if(gt.has(e.name)){for(let[t,n]of Qr.entries())n===e.name&&Qr.delete(t);gt.delete(e.name)}pe(e)}function hx(e){gt.has(e.name)||pe(e)}function yx(){gt.clear(),Qr.clear()}function st(){return[...gt.values()].sort((e,t)=>e.name.localeCompare(t.name))}function bx(){let e=[];for(let[t,n]of Qr.entries()){let r=gt.get(n);r&&e.push({alias:t,canonical:n,summary:r.summary})}return e.sort((t,n)=>t.alias.localeCompare(n.alias))}function NW(e){if(gt.has(e))return gt.get(e);let t=Qr.get(e);return t?gt.get(t):void 0}function BW(e,t){let n=Array.from({length:e.length+1},()=>new Array(t.length+1).fill(0));for(let r=0;r<=e.length;r++)n[r][0]=r;for(let r=0;r<=t.length;r++)n[0][r]=r;for(let r=1;r<=e.length;r++)for(let o=1;o<=t.length;o++){let s=e[r-1]===t[o-1]?0:1;n[r][o]=Math.min(n[r-1][o]+1,n[r][o-1]+1,n[r-1][o-1]+s)}return n[e.length][t.length]}function UW(e,t=3){let n;for(let r of gt.keys()){let o=BW(e,r);o<=t&&(n===void 0||o<n.dist)&&(n={name:r,dist:o})}return n?.name}function Wf(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.indexOf(" ");return n===-1?{name:t,args:""}:{name:t.slice(0,n),args:t.slice(n+1).trim()}}async function wx(e,t,n){let r=Wf(e);if(r===null)return{handled:!1};let o=NW(r.name);if(!o){let a=UW(r.name);return a?t.out.warn(`Unknown command: ${r.name} (did you mean ${a}?)`):t.out.warn(`Unknown command: ${r.name} (type /help for commands)`),{handled:!0,result:"continue"}}let s=n??[];s.length>0&&o.acceptsAttachments!==!0&&t.out.warn(`\u26A0 Image attachments are ignored by ${r.name} (images only reach the model on skill commands like /forge, /mint).`);let i=await o.handler(t,r.args,o.acceptsAttachments===!0?s:void 0);return i==="forward"?{handled:!1}:{handled:!0,result:i}}import KW from"ora";$i();function Sx(e,t=5){if(e.length===0)return"";let n=e.slice(-t),r=["\u2581","\u2582","\u2583","\u2584","\u2585","\u2586","\u2587","\u2588"];return n.map(o=>{let s=Math.max(0,Math.min(1,o)),i=Math.min(7,Math.floor(s*8));return r[i]}).join("")}function qc(e,t,n){e.totalTurns=t.totalTurns,e.totalCostUsd=t.totalCostUsd,e.totalTokens=t.totalTokens,e.totalDurationMs=t.totalDurationMs,e.turns=[...t.turns],e.sessionId=t.sessionId??n,e.name=t.name,e.model=t.model,e.sessionStartTime=t.startedAt??Date.now()}function Jc(e,t){let n=e.turns;if(n.length===0)return;let r=n[n.length-1];if(!r)return;let o=kx(vx(r.user),80),s=kx(WW(vx(r.assistant)),120);o.length>0&&t.fn(p.dim(` Last: ${o}`)),s.length>0&&t.fn(p.dim(` \u21B3 ${s}`)),t.fn(p.dim(" \u21AA /history for full review"))}function vx(e){return e.replace(HW,"").replace(/\s+/g," ").trim()}var HW=/\u001B\][\s\S]*?(?:\u0007|\u001B\\|\u009C)|\u001B[PX^_][\s\S]*?(?:\u0007|\u001B\\|\u009C)|\u001B[@-OQ-WY-Z\\`6-9=]|[\u001B\u009B][[\]()#;?]*(?:\d{1,4}(?:[;:]\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]/g;function WW(e){let t=e.match(/^.*?(?<![A-Za-z]\.[A-Za-z])[.!?](?=\s|$)/);return t?t[0]:e}function kx(e,t){let n=[...e];return n.length<=t?e:n.slice(0,t-1).join("")+"\u2026"}var na={stream:process.stdout,hideCursor:!1,discardStdin:!1};function Kf(e,t){if(t?.getRatio()!==void 0)return t.getRatio();let n=e.turnTokens[e.turnTokens.length-1];return n?(n.footprint??n.input+n.output+n.cache)/mt(e.model):0}function gr(e,t){let n=Kf(e,t),r=mt(e.model),o,s=t?.getDetail();if(s!==void 0)o=s.used;else{let a=e.turnTokens[e.turnTokens.length-1];a&&(o=a.footprint??a.input+a.output+a.cache)}let i;if(e.turnTokens.length>=2){let a=e.turnTokens.map(c=>(c.footprint??c.input+c.output+c.cache)/r),l=Sx(a,5);l.length>0&&(i=l)}return{model:e.model,cost:e.totalCostUsd,tokens:e.totalTokens,contextPct:n,contextLimit:r,contextUsedTokens:o,contextSparkline:i,planMode:e.planMode,...e.cwd!==void 0?{cwd:e.cwd}:{}}}var GW={name:"/exit",aliases:["/quit"],summary:"Exit the session",hint:"When you want to tear down the REPL \u2014 Ctrl+D on an empty prompt does the same.",async handler(){return"exit"}},zW={name:"/clear",summary:"Clear conversation history",hint:"When the current thread has drifted off-topic or you want a clean slate without restarting the session.",async handler(e){try{await e.session.current.reset(),e.ui.clearScreen(),sx(e.stats),e.ledger?.clear(),e.out.success("Conversation history cleared.")}catch(t){e.out.error(t instanceof Error?t.message:"Unknown error")}return"continue"}},qW={name:"/compact",summary:"Compact history (summarize older messages)",hint:"When context is filling up but you want to keep the thread \u2014 summarizes old turns and keeps the recent ones intact.",async handler(e){let t=KW({text:p.meta("Summarizing earlier turns..."),...na}).start();try{let n=await e.session.current.compact();if(t.stop(),n.compacted){let r=n.tokensSavedEstimate?` (~${n.tokensSavedEstimate} input tokens saved)`:"";e.out.success(`Compacted ${n.messagesBefore} \u2192 ${n.messagesAfter} messages${r}.`)}else{let r=n.reason??"unknown";r==="aborted"?e.out.info("Compaction cancelled."):r.startsWith("summarization-failed")?e.out.error(`Compaction failed: ${r}. History unchanged.`):r==="nothing-to-summarize"?e.out.info("Nothing to compact \u2014 all history is within the keep window."):r==="not-supported"?e.out.warn("Compaction is not supported for this model or provider \u2014 use a Claude model to enable /compact."):e.out.info(`Nothing to compact (${r}).`)}}catch(n){t.stop(),e.out.error(n instanceof Error?n.message:"Unknown error")}return"continue"}},JW={name:"/help",summary:"Show this help",hint:"When you want the full command list with usage strings \u2014 broader than this inline dropdown.",async handler(e){let t=st(),n=t.reduce((r,o)=>Math.max(r,o.name.length),0)+2;e.out.line(),e.out.line(p.bold(p.brand("Commands"))),e.out.line(de());for(let r of t){let o=r.usage??r.name,s=" ".repeat(Math.max(0,n-o.length));e.out.line(` ${p.warning(o)}${s} ${p.dim(r.summary)}`)}return e.out.line(),e.out.line(p.dim(" Tip: Ctrl+C interrupts a running turn; a second press exits.")),e.out.line(),"continue"}},Ex=[GW,zW,qW,JW];function Gf(e,t=30){return!e||e.length===0?p.dim("(none)"):e.length<=t?e.join(", "):`${e.slice(0,t).join(", ")}, ${p.dim(`+${e.length-t} more`)}`}function Ct(e,t){return` ${p.label(e.padEnd(16))} ${t}`}function Yc(e){let t=[];t.push(" "+de("Session Debug")),e.sessionId&&t.push(Ct("session",e.sessionId)),e.model&&t.push(Ct("model",e.model)),e.permissionMode&&t.push(Ct("permission",e.permissionMode)),e.cwd&&t.push(Ct("cwd",e.cwd)),e.claudeCodeVersion&&t.push(Ct("sdk",`v${e.claudeCodeVersion}`)),e.apiKeySource&&t.push(Ct("api key",e.apiKeySource)),e.outputStyle&&t.push(Ct("output style",e.outputStyle));let n=e.tools?.length??0;t.push(Ct(`tools (${n})`,Gf(e.tools)));let r=e.mcpServers??[],o=r.length?r.map(c=>`${c.name}[${c.status}]`).join(", "):p.dim("(none)");t.push(Ct(`mcp (${r.length})`,o));let s=e.skills?.length??0;t.push(Ct(`skills (${s})`,Gf(e.skills)));let i=e.plugins?.length??0,a=i?(e.plugins??[]).map(c=>c.name).join(", "):p.dim("(none)");t.push(Ct(`plugins (${i})`,a));let l=e.slashCommands?.length??0;return t.push(Ct(`slash (${l})`,Gf(e.slashCommands))),t.push(" "+de()),t.join(`
|
|
1682
|
+
`),c=d.length}return new Promise(d=>{process.stdin.setRawMode(!0),Xr(process.stdin);let m=(g,h)=>{if(h)if(h.name==="up"||h.sequence==="\x1B[A")r>0&&(r--,r<o&&(o=r),u());else if(h.name==="down"||h.sequence==="\x1B[B"){if(r<e.length-1){r++;let{end:b}=i();r>=b&&o++,u()}}else h.name==="space"?(s.has(r)?s.delete(r):s.add(r),u()):h.name==="return"||h.name==="enter"?(f(),d([...s].sort((b,y)=>b-y))):(h.name==="escape"||h.ctrl&&h.name==="c")&&(f(),d(":cancel"))};function f(){process.stdin.removeListener("keypress",m);try{process.stdin.setRawMode(!1)}catch{}}process.stdin.on("keypress",m)})}var Ms={action:"decline"},le={action:"cancel"},IW={action:"accept"};function PW(e){let t=e.properties,n={},r=0,o=!1;if(typeof t=="object"&&t!==null){let a=0;for(let[l,c]of Object.entries(t))if(!jf.has(l)){if(r+=1,a>=Uf){o=!0;continue}n[l]=c,a+=1}}let s=e.required,i=new Set(Array.isArray(s)?s.slice(0,Uf*2).filter(a=>typeof a=="string").filter(a=>!jf.has(a)):[]);return{properties:n,required:i,fieldsTruncated:o,originalFieldCount:r}}function MW(e,t){e.line(),e.line(p.warning("\u26A0 MCP form elicitation")),e.line(p.dim(" server: ")+p.bold(fe(t.serverName,64))),e.line(p.dim(" message: ")+fe(t.message,256)),t.elicitationId&&e.line(p.dim(" id: ")+fe(t.elicitationId,64)),e.line(p.dim(" Type :decline or :cancel at any prompt to exit.")),e.line()}async function OW(e,t,n,r,o,s){if(s.aborted)return{tag:"cancel"};let i=fe(t.description??t.title??e),a=fe(t.type??"string",32),l=fe(e,64),c;if(t.enum!==void 0){let d=t.enum.slice(0,Kc).map(f=>fe(String(f),32)).join("|"),m=t.enum.length>Kc?"|\u2026":"";c=` (enum: ${d}${m})`}else a==="boolean"?c=" (boolean: y/n)":a==="number"||a==="integer"?c=` (${a})`:a==="string"?c=" (string)":(c=` (${a} \u2014 treated as string)`,o.line(p.warning(` \u26A0 Unknown field type '${a}' for '${l}' \u2014 collecting as string.`)));let u=n?"":p.dim(" [optional, enter to skip]");for(o.line(p.dim(` [${l}]`)+p.dim(` ${i}`)+p.dim(c)+u),t.enum!==void 0&&t.enum.length>Bf&&o.line(p.warning(` \u26A0 Field '${l}' has ${t.enum.length} enum values; only the first ${Bf} are valid for input.`));;){let d;try{d=await r(p.dim(" > "))}catch{return{tag:"cancel"}}if(s.aborted)return{tag:"cancel"};let m=d.trim();if(m===":cancel")return{tag:"cancel"};if(m===":decline")return{tag:"decline"};if(m===""){if(n){o.line(p.warning(" (required \u2014 cannot be skipped)"));continue}return{tag:"value",value:t.default}}let f;if(a==="boolean"){let g=m.toLowerCase();if(g==="y"||g==="yes"||g==="true"||g==="1")f=!0;else if(g==="n"||g==="no"||g==="false"||g==="0")f=!1;else{o.line(p.warning(" Invalid boolean \u2014 enter y/yes/true/1 or n/no/false/0."));continue}}else if(a==="number"){let g=Number(m);if(!isFinite(g)){o.line(p.warning(" Invalid number \u2014 enter a numeric value."));continue}f=g}else if(a==="integer"){let g=parseInt(m,10);if(!isFinite(g)||String(g)!==m.replace(/\.0+$/,"")){o.line(p.warning(" Invalid integer \u2014 enter a whole number."));continue}f=g}else f=m;if(t.enum!==void 0){let g=t.enum.slice(0,Bf),h=!1;for(let b of g)if(String(b)===String(f)){h=!0;break}if(!h){let b=fe(String(f),64),y=g.slice(0,Kc).map(S=>fe(String(S),32)).join(", "),w=g.length>Kc?", \u2026":"";o.line(p.warning(` '${b}' is not a valid choice. Valid: ${y}${w}`));continue}}return{tag:"value",value:f}}}function $W(e,t){e.line(),e.line(p.warning("\u26A0 MCP elicitation")),e.line(p.dim(" server: ")+p.bold(fe(t.serverName,64))),e.line(p.dim(" message: ")+fe(t.message,256)),t.url&&e.line(p.dim(" url: ")+p.brand(fe(t.url,512))),t.elicitationId&&e.line(p.dim(" id: ")+fe(t.elicitationId,64)),e.line()}var Zr={action:"skip"};function Hf(e){let t=[];return t.push(p.warning(" \u{1F4AC} Agent question")),t.push(p.bold(" ? "+fe(e.message,512))),e.context&&t.push(p.dim(" "+fe(e.context,512))),t.push(""),t}async function DW(e,t,n,r){let o=Hf(t),s=t.allowSkip===!0;if(e==="number"){let u=t.min,d=t.max,f=`enter to submit \xB7 esc to cancel${u!==void 0&&d!==void 0?` [${u}\u2013${d}]`:u!==void 0?` [\u2265${u}]`:d!==void 0?` [\u2264${d}]`:""}`,h=await n({header:o,help:f,validate:y=>{let w=y.trim();if(w==="")return s?null:"Please enter a number (or esc to cancel).";let S=Number(w);return Number.isFinite(S)?u!==void 0&&S<u?`Value must be \u2265 ${u}.`:d!==void 0&&S>d?`Value must be \u2264 ${d}.`:null:"Please enter a valid number."},signal:r});if(h===null)return null;let b=h.trim();return b===""&&s?{tag:"skip"}:{tag:"number",value:Number(b)}}let i=t.minLength,a=t.maxLength,c=await n({header:o,validate:u=>u===""?s?null:"Please enter a response (or esc to cancel).":i!==void 0&&u.length<i?`Response must be at least ${i} characters.`:a!==void 0&&u.length>a?`Response must be at most ${a} characters.`:null,signal:r});return c===null?null:c===""&&s?{tag:"skip"}:{tag:"text",value:c}}async function LW(e,t,n){if(n.aborted)return Ms;let{readLine:r,writer:o,pendingCount:s,pickFromList:i,readTextOverlay:a}=t,l=e.type??"text",c=s();if(c>1&&o.line(p.dim(` [${c} questions queued]`)),(l==="choice"||l==="multi_choice")&&i&&(e.choices?.length??0)>0){let m=(e.choices??[]).map(h=>fe(h,128)),f;try{f=await i({header:Hf(e),options:m,multi:l==="multi_choice",signal:n})}catch{return le}if(n.aborted||f===null)return le;if(f.length===0)return e.allowSkip?Zr:le;let g=f.length===1?fe(f[0]??"",128):f.map(h=>fe(h,128)).join(", ");return o.line(p.dim(" \u2713 ")+p.brand(g)),l==="choice"?{action:"accept",content:{value:f[0]}}:{action:"accept",content:{value:[...f]}}}if(l==="confirm"&&i){let f=e.questionDefault!==!1?["Yes","No"]:["No","Yes"],g;try{g=await i({header:Hf(e),options:f,multi:!1,signal:n})}catch{return le}if(n.aborted||g===null)return le;let h=g[0];if(h===void 0)return le;let b=h==="Yes";return o.line(p.dim(" \u2713 ")+(b?p.success("Yes"):p.error("No"))),{action:"accept",content:{value:b}}}if((l==="text"||l==="number")&&a){let m=await DW(l,e,a,n);if(m===null)return le;if(m.tag==="skip")return Zr;let f=m.tag==="text"?fe(m.value,256):String(m.value);return o.line(p.dim(" \u2713 ")+p.brand(f)),{action:"accept",content:{value:(m.tag==="text",m.value)}}}if(o.line(),o.line(p.warning("\u{1F4AC} Agent question")),e.context&&o.line(p.dim(" context: ")+fe(e.context,512)),o.line(p.bold(" "+fe(e.message,512))),o.line(p.dim(" Type :cancel to skip this question.")),o.line(),l==="confirm"){o.line("\x07");let m=e.questionDefault===!0?"Y/n":"y/N";for(;;){if(n.aborted)return le;let f;try{f=(await r(p.dim(` Continue? [${m}] `))).trim().toLowerCase()}catch{return le}if(n.aborted||f===":cancel")return le;if(f==="")return{action:"accept",content:{value:e.questionDefault===!0}};if(f==="y"||f==="yes")return{action:"accept",content:{value:!0}};if(f==="n"||f==="no")return{action:"accept",content:{value:!1}};o.line(p.warning(" Please enter y or n."))}}if(l==="choice"){o.line("\x07");let m=e.choices??[],f=await _W(m,n);if(f!==null){if(f===":cancel")return le;let g=m[f];return g!==void 0?(o.line(p.dim(` Selected: ${fe(g,128)}`)),{action:"accept",content:{value:g}}):le}for(m.forEach((g,h)=>{o.line(` ${h+1}. ${fe(g,128)}`)});;){if(n.aborted)return le;let g;try{g=(await r(p.dim(" Enter number: "))).trim()}catch{return le}if(n.aborted||g===":cancel")return le;if(g===""&&e.allowSkip)return Zr;let h=parseInt(g,10);if(!isFinite(h)||String(h)!==g||h<1||h>m.length){o.line(p.warning(` Please enter a number between 1 and ${m.length}.`));continue}return{action:"accept",content:{value:m[h-1]}}}}if(l==="multi_choice"){let m=e.choices??[],f=await CW(m,n);if(f!==null){if(f===":cancel")return le;if(f.length===0&&e.allowSkip)return Zr;if(f.length>0){let g=f.map(h=>m[h]);return o.line(p.dim(` Selected: ${g.map(h=>fe(h,64)).join(", ")}`)),{action:"accept",content:{value:g}}}}for(m.forEach((g,h)=>{o.line(` ${h+1}. ${fe(g,128)}`)});;){if(n.aborted)return le;let g;try{g=(await r(p.dim(" Enter numbers (comma-separated): "))).trim()}catch{return le}if(n.aborted||g===":cancel")return le;if(g===""&&e.allowSkip)return Zr;if(g===""){o.line(p.warning(" Please enter at least one selection."));continue}let h=g.split(",").map(w=>w.trim()),b=[],y=!0;for(let w of h){let S=parseInt(w,10);if(!isFinite(S)||String(S)!==w||S<1||S>m.length){o.line(p.warning(` Invalid selection "${fe(w,32)}". Enter numbers between 1 and ${m.length}.`)),y=!1;break}b.push(m[S-1])}if(y)return{action:"accept",content:{value:b}}}}if(l==="number"){let m=e.min,f=e.max,g=m!==void 0&&f!==void 0?` [${m}\u2013${f}]`:m!==void 0?` [\u2265${m}]`:f!==void 0?` [\u2264${f}]`:"";for(;;){if(n.aborted)return le;let h;try{h=(await r(p.dim(` Enter a number${g}: `))).trim()}catch{return le}if(n.aborted||h===":cancel")return le;if(h===""&&e.allowSkip)return Zr;if(h===""&&!e.allowSkip){o.line(p.warning(" Please enter a number (or :cancel to skip)."));continue}let b=Number(h);if(!isFinite(b)){o.line(p.warning(" Please enter a valid number."));continue}if(m!==void 0&&b<m){o.line(p.warning(` Value must be \u2265 ${m}.`));continue}if(f!==void 0&&b>f){o.line(p.warning(` Value must be \u2264 ${f}.`));continue}return{action:"accept",content:{value:b}}}}let u=e.minLength,d=e.maxLength;for(;;){if(n.aborted)return le;let m;try{m=(await r(p.dim(" > "))).trim()}catch{return le}if(n.aborted||m===":cancel")return le;if(m===""&&e.allowSkip)return Zr;if(m===""){o.line(p.warning(" Please enter a response (or type :cancel to skip)."));continue}if(u!==void 0&&m.length<u){o.line(p.warning(` Response must be at least ${u} characters.`));continue}if(d!==void 0&&m.length>d){o.line(p.warning(` Response must be at most ${d} characters.`));continue}return{action:"accept",content:{value:m}}}}function Gc(e){return async(t,{signal:n})=>{if(n.aborted)return Ms;Wc(process.stdout),e.suspendInput?.();try{if(t.origin==="agent")return await LW(t,e,n);if(t.mode==="form"){let o=t.requestedSchema,{properties:s,required:i,fieldsTruncated:a,originalFieldCount:l}=typeof o=="object"&&o!==null?PW(o):{properties:{},required:new Set,fieldsTruncated:!1,originalFieldCount:0};MW(e.writer,t),a&&e.writer.line(p.warning(` \u26A0 Schema has ${l} fields; only the first ${Uf} will be prompted (server may be malformed or compromised).`));let c=Object.create(null);if(Object.keys(s).length===0)return e.writer.line(p.warning(" \u26A0 Form schema has no usable fields \u2014 declining.")),Ms;for(let u of i)if(!(u in s))return e.writer.line(p.warning(` \u26A0 Required field '${fe(u,64)}' has no schema entry \u2014 declining.`)),Ms;for(let[u,d]of Object.entries(s)){if(n.aborted)return le;let m=await OW(u,d,i.has(u),e.readLine,e.writer,n);if(m.tag==="cancel")return le;if(m.tag==="decline")return Ms;m.value!==void 0&&!jf.has(u)&&(c[u]=m.value)}return{action:"accept",content:{...c}}}$W(e.writer,t);let r=(await e.readLine(p.dim("Continue? [y/N] "))).trim().toLowerCase();return r===""?le:r==="y"||r==="yes"?IW:Ms}finally{e.resumeInput?.()}}}us();Ft();Le();_n();function gx(e){let t=Math.max(0,Math.min(1,e.ratio)),n=t>.8?p.error:t>.5?p.warning:p.meta,r=20,o=Math.round(t*r),s=r-o,i="["+"\u2588".repeat(o)+"\u2591".repeat(s)+"]",a=Math.round(t*100)+"%",l="";e.used!==void 0&&e.limit!==void 0&&(l=se(e.used)+"/"+se(e.limit));let c=l?`${i} ${a} ${l}`:`${i} ${a}`,u=`${i} ${a}`,d=`ctx ${a}`,m=e.sparkline?p.meta(e.sparkline)+" ":"",f=e.sparkline?q(e.sparkline)+1:0,g=Math.max(0,e.width-f);if(q(c)<=g&&g>90)return m+n(c);if(q(u)<=g&&g>32)return m+n(u);if(q(d)<=g)return m+n(d);if(e.width>0){let h=m+n(d);return ie(h,e.width)}return n(a)}var zc=class{stream;force;throttleMs;started=!1;lastRepaint=0;lastFields=null;resizeUnsub=null;lastPaintedRow=null;extraRows=0;afterScrollRestore=null;constructor(t={}){this.stream=t.stream??process.stdout,this.force=t.force??!1,this.throttleMs=t.throttleMs??100}get enabled(){return this.force||!!this.stream.isTTY}start(){if(this.started||!this.enabled)return;this.started=!0,this.lastRepaint=0;let t=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.resizeUnsub===null&&(this.resizeUnsub=Ne.subscribe(()=>{this.onResize()}))}onResize(){if(!this.started||!this.enabled)return;let t=this.currentRows();this.stream.write("\x1B[s"),this.lastPaintedRow!==null&&this.lastPaintedRow!==this.paintRow(t)&&(this.stream.write(`\x1B[${this.lastPaintedRow};1H`),this.stream.write("\x1B[2K")),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.flush()}repaint(t){if(!this.enabled||!this.started){this.lastFields=t;return}let n=Date.now();if(n-this.lastRepaint<this.throttleMs){this.lastFields=t;return}this.lastRepaint=n,this.lastFields=t;let r=this.currentRows();this.stream.write("\x1B[s"),this.stream.write(`\x1B[${this.paintRow(r)};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatLine(t)),this.stream.write("\x1B[u"),this.lastPaintedRow=this.paintRow(r)}flush(){this.lastRepaint=0,this.lastFields&&this.repaint(this.lastFields)}setExtraRows(t){if(this.extraRows=t,this.started&&this.enabled){let n=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(n),this.stream.write("\x1B[u"),this.flush()}}getExtraRows(){return this.extraRows}setAfterScrollRestore(t){this.afterScrollRestore=t}rearm(){if(!this.started||!this.enabled)return;let t=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(t),this.stream.write("\x1B[u"),this.flush()}withFullScrollRegion(t){if(!this.started||!this.enabled)return t();this.stream.write("\x1B[s"),this.stream.write("\x1B[r"),this.stream.write("\x1B[u");try{return t()}finally{let n=this.currentRows();this.stream.write("\x1B[s"),this.writeScrollRegion(n),this.stream.write("\x1B[u"),this.flush(),this.afterScrollRestore?.()}}stop(){if(this.resizeUnsub!==null&&(this.resizeUnsub(),this.resizeUnsub=null),!this.started||!this.enabled){this.started=!1;return}let t=this.currentRows();this.stream.write("\x1B[s"),this.stream.write(`\x1B[${this.lastPaintedRow??this.paintRow(t)};1H`),this.stream.write("\x1B[2K"),this.stream.write("\x1B[r"),this.stream.write("\x1B[u"),this.started=!1,this.lastRepaint=0,this.lastPaintedRow=null}formatLine(t){let n=[],r=Math.max(4,(this.stream.columns??80)-2);if(t.cwd){let a=Math.max(8,Math.floor(r*.4)),l=ta(t.cwd,{maxWidth:a});l&&n.push({text:p.dim(l)})}if(n.push({text:p.brand(t.model)}),t.planMode&&n.push({text:p.warning("\u25CF plan")}),t.contextPct!==void 0){let a=gx({ratio:t.contextPct,used:t.contextUsedTokens,limit:t.contextLimit,sparkline:t.contextSparkline,width:r});n.push({text:a,droppablePriority:1})}t.cost!==void 0&&n.push({text:p.meta(`$${t.cost.toFixed(2)}`),droppablePriority:2}),t.tokens!==void 0&&n.push({text:p.meta(`${FW(t.tokens)} tok`),droppablePriority:3});let o=p.dim(" \xB7 "),s=n.map(a=>a.text).join(o);if(q(s)<=r)return s;let i=n.filter(a=>a.droppablePriority!==void 0);for(;i.length>0&&q(s)>r;){let a=Math.max(...i.map(l=>l.droppablePriority));n=n.filter(l=>l.droppablePriority===void 0||l.droppablePriority!==a),s=n.map(l=>l.text).join(o),i=n.filter(l=>l.droppablePriority!==void 0)}return ie(s,r)}currentRows(){let t=this.stream.rows;return typeof t=="number"&&t>0?t:24}paintRow(t){return t>1?t:1}writeScrollRegion(t){let n=1+this.extraRows;if(t>n){this.stream.write(`\x1B[1;${t-n}r`);return}this.stream.write("\x1B[r")}};function FW(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}var gt=new Map,Qr=new Map;function pe(e){if(gt.has(e.name))throw new Error(`Slash command already registered: ${e.name}`);gt.set(e.name,e);for(let t of e.aliases??[]){if(Qr.has(t)||gt.has(t))throw new Error(`Slash alias collides: ${t}`);Qr.set(t,e.name)}}function fr(e){if(gt.has(e.name)){for(let[t,n]of Qr.entries())n===e.name&&Qr.delete(t);gt.delete(e.name)}pe(e)}function hx(e){gt.has(e.name)||pe(e)}function yx(){gt.clear(),Qr.clear()}function st(){return[...gt.values()].sort((e,t)=>e.name.localeCompare(t.name))}function bx(){let e=[];for(let[t,n]of Qr.entries()){let r=gt.get(n);r&&e.push({alias:t,canonical:n,summary:r.summary})}return e.sort((t,n)=>t.alias.localeCompare(n.alias))}function NW(e){if(gt.has(e))return gt.get(e);let t=Qr.get(e);return t?gt.get(t):void 0}function BW(e,t){let n=Array.from({length:e.length+1},()=>new Array(t.length+1).fill(0));for(let r=0;r<=e.length;r++)n[r][0]=r;for(let r=0;r<=t.length;r++)n[0][r]=r;for(let r=1;r<=e.length;r++)for(let o=1;o<=t.length;o++){let s=e[r-1]===t[o-1]?0:1;n[r][o]=Math.min(n[r-1][o]+1,n[r][o-1]+1,n[r-1][o-1]+s)}return n[e.length][t.length]}function UW(e,t=3){let n;for(let r of gt.keys()){let o=BW(e,r);o<=t&&(n===void 0||o<n.dist)&&(n={name:r,dist:o})}return n?.name}function Wf(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.indexOf(" ");return n===-1?{name:t,args:""}:{name:t.slice(0,n),args:t.slice(n+1).trim()}}async function wx(e,t,n){let r=Wf(e);if(r===null)return{handled:!1};let o=NW(r.name);if(!o){let a=UW(r.name);return a?t.out.warn(`Unknown command: ${r.name} (did you mean ${a}?)`):t.out.warn(`Unknown command: ${r.name} (type /help for commands)`),{handled:!0,result:"continue"}}let s=n??[];s.length>0&&o.acceptsAttachments!==!0&&t.out.warn(`\u26A0 Image attachments are ignored by ${r.name} (images only reach the model on skill commands like /forge, /mint).`);let i=await o.handler(t,r.args,o.acceptsAttachments===!0?s:void 0);return i==="forward"?{handled:!1}:{handled:!0,result:i}}import KW from"ora";$i();function Sx(e,t=5){if(e.length===0)return"";let n=e.slice(-t),r=["\u2581","\u2582","\u2583","\u2584","\u2585","\u2586","\u2587","\u2588"];return n.map(o=>{let s=Math.max(0,Math.min(1,o)),i=Math.min(7,Math.floor(s*8));return r[i]}).join("")}function qc(e,t,n){e.totalTurns=t.totalTurns,e.totalCostUsd=t.totalCostUsd,e.totalTokens=t.totalTokens,e.totalDurationMs=t.totalDurationMs,e.turns=[...t.turns],e.sessionId=t.sessionId??n,e.name=t.name,e.model=t.model,e.sessionStartTime=t.startedAt??Date.now()}function Jc(e,t){let n=e.turns;if(n.length===0)return;let r=n[n.length-1];if(!r)return;let o=kx(vx(r.user),80),s=kx(WW(vx(r.assistant)),120);o.length>0&&t.fn(p.dim(` Last: ${o}`)),s.length>0&&t.fn(p.dim(` \u21B3 ${s}`)),t.fn(p.dim(" \u21AA /history for full review"))}function vx(e){return e.replace(HW,"").replace(/\s+/g," ").trim()}var HW=/\u001B\][\s\S]*?(?:\u0007|\u001B\\|\u009C)|\u001B[PX^_][\s\S]*?(?:\u0007|\u001B\\|\u009C)|\u001B[@-OQ-WY-Z\\`6-9=]|[\u001B\u009B][[\]()#;?]*(?:\d{1,4}(?:[;:]\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]/g;function WW(e){let t=e.match(/^.*?(?<![A-Za-z]\.[A-Za-z])[.!?](?=\s|$)/);return t?t[0]:e}function kx(e,t){let n=[...e];return n.length<=t?e:n.slice(0,t-1).join("")+"\u2026"}var na={stream:process.stdout,hideCursor:!1,discardStdin:!1};function Kf(e,t){if(t?.getRatio()!==void 0)return t.getRatio();let n=e.turnTokens[e.turnTokens.length-1];return n?(n.footprint??n.input+n.output+n.cache)/mt(e.model):0}function gr(e,t){let n=Kf(e,t),r=mt(e.model),o,s=t?.getDetail();if(s!==void 0)o=s.used;else{let a=e.turnTokens[e.turnTokens.length-1];a&&(o=a.footprint??a.input+a.output+a.cache)}let i;if(e.turnTokens.length>=2){let a=e.turnTokens.map(c=>(c.footprint??c.input+c.output+c.cache)/r),l=Sx(a,5);l.length>0&&(i=l)}return{model:e.model,cost:e.totalCostUsd,tokens:e.totalTokens,contextPct:n,contextLimit:r,contextUsedTokens:o,contextSparkline:i,planMode:e.planMode,...e.cwd!==void 0?{cwd:e.cwd}:{}}}var GW={name:"/exit",aliases:["/quit"],summary:"Exit the session",hint:"When you want to tear down the REPL \u2014 Ctrl+D on an empty prompt does the same.",async handler(){return"exit"}},zW={name:"/clear",summary:"Clear conversation history",hint:"When the current thread has drifted off-topic or you want a clean slate without restarting the session.",async handler(e){try{await e.session.current.reset(),e.ui.clearScreen(),sx(e.stats),e.ledger?.clear(),e.out.success("Conversation history cleared.")}catch(t){e.out.error(t instanceof Error?t.message:"Unknown error")}return"continue"}},qW={name:"/compact",summary:"Compact history (summarize older messages)",hint:"When context is filling up but you want to keep the thread \u2014 summarizes old turns and keeps the recent ones intact.",async handler(e){let t=KW({text:p.meta("Summarizing earlier turns..."),...na}).start();try{let n=await e.session.current.compact();if(t.stop(),n.compacted){let r=n.tokensSavedEstimate?` (~${n.tokensSavedEstimate} input tokens saved)`:"";e.out.success(`Compacted ${n.messagesBefore} \u2192 ${n.messagesAfter} messages${r}.`)}else{let r=n.reason??"unknown";r==="aborted"?e.out.info("Compaction cancelled."):r.startsWith("summarization-failed")?e.out.error(`Compaction failed: ${r}. History unchanged.`):r==="nothing-to-summarize"?e.out.info("Nothing to compact \u2014 all history is within the keep window."):r==="not-supported"?e.out.warn("Compaction is not supported for this model or provider \u2014 use a Claude model to enable /compact."):e.out.info(`Nothing to compact (${r}).`)}}catch(n){t.stop(),e.out.error(n instanceof Error?n.message:"Unknown error")}return"continue"}},JW={name:"/help",summary:"Show this help",hint:"When you want the full command list with usage strings \u2014 broader than this inline dropdown.",async handler(e){let t=st(),n=t.reduce((r,o)=>Math.max(r,o.name.length),0)+2;e.out.line(),e.out.line(p.bold(p.brand("Commands"))),e.out.line(de());for(let r of t){let o=r.usage??r.name,s=" ".repeat(Math.max(0,n-o.length));e.out.line(` ${p.warning(o)}${s} ${p.dim(r.summary)}`)}return e.out.line(),e.out.line(p.dim(" Tip: Ctrl+C interrupts a running turn; a second press exits.")),e.out.line(),"continue"}},Ex=[GW,zW,qW,JW];function Gf(e,t=30){return!e||e.length===0?p.dim("(none)"):e.length<=t?e.join(", "):`${e.slice(0,t).join(", ")}, ${p.dim(`+${e.length-t} more`)}`}function Ct(e,t){return` ${p.label(e.padEnd(16))} ${t}`}function Yc(e){let t=[];t.push(" "+de("Session Debug")),e.sessionId&&t.push(Ct("session",e.sessionId)),e.model&&t.push(Ct("model",e.model)),e.permissionMode&&t.push(Ct("permission",e.permissionMode)),e.cwd&&t.push(Ct("cwd",e.cwd)),e.claudeCodeVersion&&t.push(Ct("sdk",`v${e.claudeCodeVersion}`)),e.apiKeySource&&t.push(Ct("api key",e.apiKeySource)),e.outputStyle&&t.push(Ct("output style",e.outputStyle));let n=e.tools?.length??0;t.push(Ct(`tools (${n})`,Gf(e.tools)));let r=e.mcpServers??[],o=r.length?r.map(c=>`${c.name}[${c.status}]`).join(", "):p.dim("(none)");t.push(Ct(`mcp (${r.length})`,o));let s=e.skills?.length??0;t.push(Ct(`skills (${s})`,Gf(e.skills)));let i=e.plugins?.length??0,a=i?(e.plugins??[]).map(c=>c.name).join(", "):p.dim("(none)");t.push(Ct(`plugins (${i})`,a));let l=e.slashCommands?.length??0;return t.push(Ct(`slash (${l})`,Gf(e.slashCommands))),t.push(" "+de()),t.join(`
|
|
1683
1683
|
`)}Ke();Yn();var Jf=["small","medium","large","opus","opus_1m","sonnet","sonnet_1m","haiku","fable"],ZW={name:"/cost",summary:"Show total and per-turn cost",hint:"When you want a dollar breakdown of this session \u2014 total, average per turn, and the recent turn-by-turn series.",async handler(e){let{stats:t,out:n}=e;if(n.line(),n.line(p.bold("Session cost")),n.line(de()),n.line(` total ${p.success(ze(t.totalCostUsd))}`),n.line(` turns ${p.meta(String(t.totalTurns))}`),t.totalTurns>0){let r=t.totalCostUsd/t.totalTurns;n.line(` avg/turn ${p.meta(ze(r))}`)}if(t.turnCosts.length>0){let r=t.turnCosts.slice(-5).map(ze).join(p.dim(" \xB7 "));n.line(` last 5 ${r}`)}return n.line(),"continue"}};function QW(e,t){let n=t.apiUsage,r=n?.input_tokens??0,o=n?.output_tokens??0,s=n?.cache_read_input_tokens??0,i=n?.cache_creation_input_tokens??0,a=r+o+s+i;e.line(),e.line(p.bold("Token usage")+p.dim(" (SDK breakdown)")),e.line(de()),e.line(` total ${p.success(se(t.totalTokens))} of ${p.meta(se(t.maxTokens))} (${p.meta(`${Math.round(t.percentage*100)/100}%`)})`),t.autoCompactThreshold&&t.isAutoCompactEnabled&&e.line(` compact at ${p.meta(se(t.autoCompactThreshold))}`),e.line(),e.line(p.dim(" Last turn (API):")),e.line(` input ${p.meta(se(r))}`),e.line(` output ${p.meta(se(o))}`),e.line(` cache read ${p.meta(se(s))}`),e.line(` cache creat ${p.meta(se(i))}`),e.line(` total ${p.meta(se(a))}`);let l=t.categories??[];if(l.length>0){let m=[...l].sort((f,g)=>g.tokens-f.tokens).slice(0,5);e.line(),e.line(p.dim(" Top categories:"));for(let f of m)e.line(` ${p.warning(f.name.padEnd(18))} ${p.meta(se(f.tokens))}`)}let c=t.systemTools??[],u=t.mcpTools??[];if(c.length>0||u.length>0){e.line();let m=c.reduce((g,h)=>g+h.tokens,0),f=u.reduce((g,h)=>g+h.tokens,0);c.length>0&&e.line(p.dim(` system tools ${c.length} tools, ${se(m)} tokens`)),u.length>0&&e.line(p.dim(` MCP tools ${u.length} tools, ${se(f)} tokens`))}let d=t.agents??[];if(d.length>0){let m=d.reduce((f,g)=>f+g.tokens,0);e.line(p.dim(` agents ${d.length} loaded, ${se(m)} tokens`))}if(t.skills){let m=t.skills;e.line(p.dim(` skills ${m.includedSkills}/${m.totalSkills} included, ${se(m.tokens)} tokens`))}if(t.slashCommands){let m=t.slashCommands;e.line(p.dim(` slash cmds ${m.includedCommands}/${m.totalCommands} included, ${se(m.tokens)} tokens`))}e.line()}function eK(e,t){let n=t.turnTokens.reduce((u,d)=>u+d.input,0),r=t.turnTokens.reduce((u,d)=>u+d.output,0),o=t.turnTokens.reduce((u,d)=>u+d.cache,0),s=n+r,i=mt(t.model),a=t.turnTokens[t.turnTokens.length-1],l=a?a.footprint??a.input+a.output+a.cache:0,c=i>0?Math.round(l/i*100):0;e.line(),e.line(p.bold("Token usage")+p.dim(" (local stats \u2014 SDK breakdown unavailable)")),e.line(de()),e.line(` input ${p.meta(se(n))}`),e.line(` output ${p.meta(se(r))}`),e.line(` cache read ${p.meta(se(o))}`),e.line(` total ${p.success(se(s))}`),e.line(` context ${p.meta(`${c}% of ${se(i)} (${t.model})`)}`),e.line()}var tK={name:"/tokens",aliases:["/ctx"],summary:"Show token usage (SDK breakdown with local-stats fallback)",hint:"When you want to know how full the context window is \u2014 input/output/cache breakdown plus % of the model's limit used.",async handler(e){try{let t=await e.session.current.getContextUsage();QW(e.out,t)}catch{eK(e.out,e.stats)}return"continue"}},nK={name:"/history",summary:"Show conversation history",async handler(e){let{stats:t,out:n}=e;return t.turns.length===0?(n.info("No turns yet in this session."),"continue"):(n.line(),n.line(p.bold(`Session history (${t.turns.length} turn${t.turns.length===1?"":"s"})`)),n.line(de()),t.turns.forEach((r,o)=>{let s=p.meta(`#${o+1}`),i=r.user.length>100?r.user.slice(0,97)+"...":r.user,a=r.assistant.length>100?r.assistant.slice(0,97)+"...":r.assistant;n.line(` ${s} ${p.user("\u25B6")} ${i}`),n.line(` ${p.brand("\u25C6")} ${p.dim(a)}`)}),n.line(),"continue")}},rK={name:"/reset",summary:"Clear screen, history, and session stats",async handler(e){let{stats:t,ui:n,out:r}=e;try{await e.session.current.sendMessage("/clear")}catch{}return t.totalTurns=0,t.totalCostUsd=0,t.totalTokens=0,t.totalDurationMs=0,t.turnCosts.length=0,t.turnTokens.length=0,t.turns.length=0,t.sessionStartTime=Date.now(),n.clearScreen(),r.success("Session reset."),"continue"}},oK={name:"/model",usage:"/model <small|medium|large|opus|sonnet|haiku|fable|org/model>",summary:"Switch the active model mid-session",hint:"Switch the capability tier (small/medium/large \u2014 or your configured names) or pass a full model id. Upgrade to large for a hard problem, downshift to small for cheap iteration \u2014 context carries over. Also accepts HuggingFace-style ids (e.g. mlx-community/Qwen3-30B-A3B-4bit).",async handler(e,t){let n=t.trim().toLowerCase();if(!n)return e.out.info(`Current model: ${p.brand(e.stats.model)}`),e.out.line(p.dim(` Aliases: ${Jf.join(", ")} (or any org/model HF id)`)),"continue";let r=Jf.includes(n),o=Si(n)!==void 0,s=ne(n)==="openai-compatible";if(!r&&!o&&!s)return e.out.warn(`Unknown model: ${n}. Aliases: ${Jf.join(", ")} (or org/model for local/OpenAI-compatible)`),"continue";try{await e.session.current.setModel(n),e.stats.model=n,e.ui.repaintStatusLine(),e.out.success(`Model switched to ${p.brand(n)}`)}catch(i){e.out.error(`Failed to switch model: ${i instanceof Error?i.message:String(i)}`)}return"continue"}},sK={name:"/tools",summary:"List tools available to the session",async handler(e){try{let n=(await e.session.current.waitForInitialization()).tools??[];if(n.length===0)return e.out.info("No tools reported by the session."),"continue";e.out.line(),e.out.line(p.bold(`Tools (${n.length})`)),e.out.line(de());let r=3,o=Math.ceil(n.length/r),s=Math.max(...n.map(i=>i.length))+2;for(let i=0;i<o;i++){let a=[];for(let l=0;l<r;l++){let c=l*o+i;c<n.length&&a.push(n[c].padEnd(s))}e.out.line(" "+a.join(""))}e.out.line()}catch(t){e.out.error(`Could not read session tools: ${t instanceof Error?t.message:String(t)}`)}return"continue"}},iK={name:"/mcp",summary:'List MCP servers connected to the session ("/mcp auth" to surface pending OAuth URLs)',async handler(e,t){let n=(t??"").trim().toLowerCase();if(n==="auth"){try{let{readOauthPending:r}=await Promise.resolve().then(()=>(Zc(),Px)),o=r();if(Object.keys(o).length===0)return e.out.info("No MCP servers are waiting for OAuth."),"continue";e.out.line(),e.out.line(p.bold(`MCP OAuth pending (${Object.keys(o).length})`)),e.out.line(de());for(let[s,i]of Object.entries(o)){let a=Date.now()-i.timestamp,l=Math.round(a/6e4);e.out.line(` ${p.warning("\u25CF")} ${s} ${p.dim(`(${l}m ago)`)}`),e.out.line(` ${p.info(i.authorizationUrl)}`)}e.out.line(),e.out.line(p.dim(" Open each URL in a browser. After authorizing, paste the code with:")),e.out.line(p.dim(" /mcp auth complete <serverName> <code>")),e.out.line()}catch(r){e.out.error(`Could not read OAuth state: ${r instanceof Error?r.message:String(r)}`)}return"continue"}if(n.startsWith("auth complete ")){let r=(t??"").trim(),o=r.slice(r.toLowerCase().indexOf("auth complete ")+14).trim(),s=o.indexOf(" ");if(s===-1||o.slice(0,s).length===0||o.slice(s+1).trim().length===0)return e.out.error("Usage: /mcp auth complete <serverName> <code>"),"continue";let i=o.slice(0,s).trim(),a=o.slice(s+1).trim();if(!e.mcpManager)return e.out.error("No MCP manager available in this session. Make sure an mcp.json config is present and at least one server is enabled."),"continue";try{e.out.info(`Completing OAuth for "${i}"\u2026`),await e.mcpManager.completeAuth(i,a),e.out.success(`OAuth complete for "${i}" \u2014 server is now connected.`)}catch(l){e.out.error(`OAuth completion failed for "${i}": ${l instanceof Error?l.message:String(l)}`)}return"continue"}if(n!==""&&n!=="auth")return e.out.error(`Unknown /mcp subcommand: "${n}". Try: /mcp, /mcp auth, /mcp auth complete <server> <code>.`),"continue";try{let o=(await e.session.current.waitForInitialization()).mcpServers??[];if(o.length===0)return e.out.info("No MCP servers connected."),"continue";e.out.line(),e.out.line(p.bold(`MCP servers (${o.length})`)),e.out.line(de());let s=0;for(let i of o){let a=typeof i=="string"?i:i.name??JSON.stringify(i),l=typeof i=="object"&&i!==null&&"status"in i?String(i.status):"",c=l==="connected"?p.success("\u25CF"):p.warning("\u25CF");e.out.line(` ${c} ${a}${l?p.dim(` (${l})`):""}`),l==="oauth_pending"&&s++}e.out.line(),s>0&&(e.out.line(p.dim(` ${s} server(s) need OAuth \u2014 run "/mcp auth" to see authorization URLs.`)),e.out.line())}catch(r){e.out.error(`Could not read MCP servers: ${r instanceof Error?r.message:String(r)}`)}return"continue"}},aK={name:"/limits",summary:"Show known per-model context-window limits",async handler(e){e.out.line(),e.out.line(p.bold("Context-window limits")),e.out.line(de());for(let[t,n]of Object.entries(ns)){let r=t===e.stats.model?p.brand(" \u2190 active"):"";e.out.line(` ${p.warning(t.padEnd(12))} ${p.meta(se(n))}${r}`)}return e.out.line(),"continue"}},lK={name:"/debug",summary:"Show SDK session metadata (tools, MCP, skills, plugins, etc.)",hint:"When something feels broken and you want to inspect what the session actually loaded \u2014 tools, MCP servers, plugins, system prompt source.",async handler(e){try{let t=await e.session.current.waitForInitialization();e.out.line(),e.out.line(Yc(t)),e.out.line()}catch(t){e.out.error(`Could not read session metadata: ${t instanceof Error?t.message:String(t)}`)}return"continue"}},Mx=[ZW,tK,nK,rK,oK,sK,iK,aK,lK];K();var Yf=!1;async function hr(e,t){let n=e.stats.planMode,r=t!==void 0?t:!n;try{if(await e.session.current.setPermissionMode(r?"plan":"default"),e.stats.planMode=r,e.ui.repaintStatusLine(),r){let o=Yf?"":p.dim(" /plan off saves the plan + implements; Shift+Tab just exits.");Yf||(Yf=!0),e.out.success(p.warning("\u25CF plan mode ON")+p.dim(" \u2014 write_file, edit_file, and write-intent bash are refused.")+o)}else e.out.success(p.success("\u25CB plan mode OFF")+p.dim(" \u2014 default permissions restored"))}catch(o){e.out.error(`Could not toggle plan mode: ${o instanceof Error?o.message:String(o)}`)}}function cK(e){return["The user has switched off plan mode. Writes are now permitted. Do two things, in order:","",`1. Save the plan. Write the plan you developed in this conversation to a new markdown file under \`${e}/\` \u2014 pick a short, descriptive kebab-case filename (e.g. \`${e}/refactor-auth-flow.md\`). Capture the full plan: the chosen approach, the concrete step-by-step changes, the risks named, and the alternatives considered. This is the durable record.`,"","2. Implement the plan. Work through the steps you just recorded, verifying as you go \u2014 run the project's lint/test gates where they apply. End in a terminal state: Done with evidence, Blocked with the exact unblock condition, or Asking one precise question."].join(`
|
|
1684
1684
|
`)}async function uK(e){if(await hr(e,!1),e.stats.planMode)return"continue";let t=My(e.stats.cwd??process.cwd());return e.out.info(p.dim(` \u2192 saving the plan to ${t}/, then implementing it.`)),{kind:"submit",message:cK(t)}}var Ox={name:"/plan",usage:"/plan [on|off|<prompt>]",summary:"Toggle plan mode; /plan off saves the plan to a file then implements it",hint:"Think through an approach without touching files \u2014 writes are refused until you exit. /plan off saves the plan + implements it; Shift+Tab exits without implementing.",async handler(e,t){let n=t.trim(),r=n.toLowerCase();return n!==""&&r!=="on"&&r!=="off"?(e.stats.planMode||await hr(e,!0),{kind:"submit",message:n}):(r==="on"?!0:r==="off"?!1:!e.stats.planMode)===!0?(e.stats.planMode||await hr(e,!0),"continue"):e.stats.planMode?uK(e):(await hr(e,!1),"continue")}};K();import{readFileSync as dK,writeFileSync as pK,existsSync as $x,mkdirSync as mK}from"fs";import{join as fK}from"path";function Dx(){return jy(),np()}function Lx(e){return fK(Dx(),`${e}.json`)}function Qc(e){let t=Lx(e);if(!$x(t))return{sessionId:e,items:[]};try{let n=dK(t,"utf-8"),r=JSON.parse(n);return Array.isArray(r.items)?r:{sessionId:e,items:[]}}catch{return{sessionId:e,items:[]}}}function ra(e){let t=Dx();$x(t)||mK(t,{recursive:!0}),pK(Lx(e.sessionId),JSON.stringify(e,null,2))}function Fx(e,t){let r={id:e.items.reduce((o,s)=>Math.max(o,s.id),0)+1,text:t,done:!1,createdAt:Date.now()};return e.items.push(r),r}function Nx(e,t){let n=e.items.find(r=>r.id===t);return n&&(n.done=!0),n}function Bx(e,t){let n=e.items.findIndex(r=>r.id===t);return n===-1?!1:(e.items.splice(n,1),!0)}function Ux(e){e.items.length=0}function eu(e){if(e.items.length===0)return[];let t=[],n=Math.max(20,Z());{let r=p.dim("\u250C\u2500 todos "),o=Math.max(0,Math.min(n-10,120));t.push(r+p.dim("\u2500".repeat(o)))}for(let r of e.items){let o=r.done?p.success("[x]"):p.dim("[ ]"),s=r.done?p.dim(r.text):qn(r.text),a=` ${p.meta(`#${r.id}`)} ${o} `,l=Math.max(8,n-q(a)),c=ue(s,l).split(`
|
|
1685
1685
|
`);t.push(a+(c[0]??""));let u=" ".repeat(q(a));for(let d of c.slice(1))t.push(u+d)}{let r=Math.max(0,Math.min(n-1,120));t.push(p.dim("\u2514"+"\u2500".repeat(r)))}return t}function jx(e){return e.items.length===0?"":e.items.map(t=>`${t.id}:${t.done?1:0}:${t.text}`).join(`
|
|
@@ -1719,7 +1719,7 @@ ${u}`}function ng(e,t){let n=aR[t.status];e.out.line(` ${n} ${p.bold(t.jobId)}
|
|
|
1719
1719
|
`,n-1);return r<0?0:r+1}function vR(e,t){let n=to(t,e.length),r=e.indexOf(`
|
|
1720
1720
|
`,n);return r<0?e.length:r}function br(e,t,n){let r=to(t.start,e.buffer.length),o=to(t.end,e.buffer.length),s=Math.min(r,o),i=Math.max(r,o);if(s===i&&n.length===0)return e;let a=e.buffer.slice(0,s)+n+e.buffer.slice(i),l=s+n.length;return a===e.buffer&&l===e.cursor?e:{buffer:a,cursor:l}}var j={seed(e=""){return{buffer:e,cursor:e.length}},replaceRange:br,insert(e,t){return t.length===0?e:br(e,{start:e.cursor,end:e.cursor},t)},backspace(e){if(e.cursor===0)return e;let t=dp(e.buffer,e.cursor);return br(e,{start:t,end:e.cursor},"")},deleteForward(e){if(e.cursor>=e.buffer.length)return e;let t=Pr(e.buffer,e.cursor);return br(e,{start:e.cursor,end:t},"")},deleteWordBackward(e){if(e.cursor===0)return e;let t=bR(e.buffer,e.cursor);return t===e.cursor?e:br(e,{start:t,end:e.cursor},"")},deleteWordForward(e){if(e.cursor>=e.buffer.length)return e;let t=wR(e.buffer,e.cursor);return t===e.cursor?e:br(e,{start:e.cursor,end:t},"")},deleteToLineStart(e){let t=SR(e.buffer,e.cursor);return t===e.cursor?e:br(e,{start:t,end:e.cursor},"")},deleteToLineEnd(e){let t=vR(e.buffer,e.cursor);return t===e.cursor?e:br(e,{start:e.cursor,end:t},"")},moveLeft(e){return cn(e,dp(e.buffer,e.cursor))},moveRight(e){return cn(e,Pr(e.buffer,e.cursor))},moveHome(e){return cn(e,0)},moveEnd(e){return cn(e,e.buffer.length)},moveLineStart(e){return cn(e,SR(e.buffer,e.cursor))},moveLineEnd(e){return cn(e,vR(e.buffer,e.cursor))},moveWordBackward(e){return cn(e,bR(e.buffer,e.cursor))},moveWordForward(e){return cn(e,wR(e.buffer,e.cursor))},moveUpLine(e,t,n){let r=t||80,{row:o,col:s}=yr(e.buffer,e.cursor,n,r);if(o===0)return{moved:!1};let i=o-1,a=s,l=0,c=1/0;for(let d=0;d<=e.buffer.length;d++){let m=yr(e.buffer,d,n,r);if(m.row===i){let f=Math.abs(m.col-a);f<c&&(c=f,l=d)}else if(m.row>i)break}let u=cn(e,l);return u===e?{moved:!1}:{moved:!0,state:u}},moveDownLine(e,t,n){let r=t||80,{row:o,col:s}=yr(e.buffer,e.cursor,n,r),i=yr(e.buffer,e.buffer.length,n,r);if(o>=i.row)return{moved:!1};let a=o+1,l=s,c=e.buffer.length,u=1/0;for(let m=0;m<e.buffer.length;m++){let f=yr(e.buffer,m,n,r);if(f.row===a){let g=Math.abs(f.col-l);g<u&&(u=g,c=m)}else if(f.row>a)break}i.row===a&&Math.abs(i.col-l)<u&&(c=e.buffer.length);let d=cn(e,c);return d===e?{moved:!1}:{moved:!0,state:d}}};var kR=["Stalking","Shadowing","Tailing","Casing","Sleuthing","Investigating","Deducing","Interrogating","Profiling","Canvassing","Prowling","Lurking","Scanning","Probing","Inspecting","Querying","Invoking","Parsing","Validating","Resolving","Compiling","Executing","Hunting","Sweeping","Tracing","Tracking","Triangulating","Decoding","Decrypting","Intercepting","Hacking","Bugging","Wiretapping","Dispatching","Deploying","Patching","Hooking","Unmasking","Cornering","Striking","Surveilling","Scouting"];function cg(){return kR[Math.floor(Math.random()*kR.length)]}at();z();var YK=[{id:"kbd:ctrl-b",text:"Ctrl+B during a turn detaches it to the background so you can keep typing \u2014 find it later with /tasks.",source:"static"},{id:"kbd:shift-tab",text:"Shift+Tab toggles plan mode (no file writes) without leaving the prompt.",source:"static"},{id:"kbd:ctrl-c",text:"Ctrl+C interrupts the current turn; press it twice in a row to exit the REPL.",source:"static"},{id:"kbd:at-path",text:"Type @ in the prompt to autocomplete a file path and attach its contents to your turn.",source:"static"},{id:"kbd:cmd-v",text:"Paste an image with Cmd+V (macOS) or Ctrl+V \u2014 clipboard images attach automatically.",source:"static"},{id:"env:tips-opt-out",text:"Set AFK_SPINNER_TIPS=0 to silence these loading-screen tips.",source:"static"}];function VK(){let e=[];for(let t of st())t.hint&&(t.name.includes(":")||e.push({id:`cmd:${t.name}`,text:`${t.name} \u2014 ${t.hint}`,source:"command"}));return e}function XK(e){let t=[];for(let n of bn()){let r=`cmd:/${n}`;if(e.has(r))continue;let o;try{o=$e(n)}catch{continue}$t(o,v.AFK_INTERNAL==="1")&&o.whenToUse&&t.push({id:`skill:${n}`,text:`/${n} \u2014 ${o.whenToUse}`,source:"skill"})}return t}function xR(){if(v.AFK_SPINNER_TIPS==="0")return[];let e=VK(),t=new Set(e.map(r=>r.id)),n=XK(t);return[...YK,...e,...n]}var ER=new Set,TR=new Map;function RR(e,t){if(e.length===0)return null;let n=t.now??Date.now(),r=t.warmupMs??1500;if(n-t.startedAt<r)return null;let o=t.rotateMs??7e3,s=Math.floor((n-t.startedAt)/o),i=`${t.startedAt}:${s}`,a=TR.get(i);if(a)return a;let l=null,c=e.filter(u=>!ER.has(u.id));if(c.length>0){let u=(s%c.length+c.length)%c.length;l=c[u]??null}else{let u=(s%e.length+e.length)%e.length;l=e[u]??null}return l&&(ER.add(l.id),TR.set(i,l)),l}var ug=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ZK=5e3;function AR(e){let t=Date.now()-e;if(t<ZK)return"";let n=Math.floor(t/1e3);if(n<60)return p.dim(` ${n}s`);let r=Math.floor(n/60),o=n%60;return p.dim(` ${r}m${o.toString().padStart(2,"0")}s`)}function _R(e,t){let n=" \u{1F4A1} ",r=Math.max(8,t-n.length-1),o=e.length>r?e.slice(0,r-1)+"\u2026":e;return p.dim(n+o)}var mu=class{state=null;interval=null;captureMode;onTick;constructor(t){this.captureMode=t.captureMode,this.onTick=t.onTick}set(t){if(!t.enabled){this.interval&&(clearInterval(this.interval),this.interval=null),this.state&&(this.state=null,this.onTick());return}if(this.captureMode||this.state)return;let n=t.rotateVerbEveryMs??3500,r=Date.now();this.state={frameIndex:0,verb:cg(),nextVerbRotateAt:r+n,startedAt:r,tipPool:xR(),currentTip:null},this.interval=setInterval(()=>this.tick(n),80),this.onTick()}dispose(){this.interval&&(clearInterval(this.interval),this.interval=null),this.state=null}renderSpinnerRow(){return this.state?p.meta(`${ug[this.state.frameIndex]} ${this.state.verb}...`)+AR(this.state.startedAt):null}renderTipRow(t){return this.state?.currentTip?_R(this.state.currentTip.text,t):null}tick(t){if(!this.state)return;this.state.frameIndex=(this.state.frameIndex+1)%ug.length;let n=Date.now();n>=this.state.nextVerbRotateAt&&(this.state.verb=cg(),this.state.nextVerbRotateAt=n+t),this.state.currentTip=RR(this.state.tipPool,{startedAt:this.state.startedAt,now:n}),this.onTick()}};import{randomBytes as QK}from"node:crypto";var eG=5,tG=1e3,nG=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/g;function rG(e,t){let n=t.match(/\n/g),r=n?n.length:0;return r>0?`[Pasted text #${e} +${r+1} lines]`:`[Pasted text #${e} +${t.length} chars]`}function Ds(e,t){return e.pasteRegistry.size===0?t:t.replace(nG,(n,r)=>e.pasteRegistry.get(r)??n)}function CR(e){let t=e.pasteStartCursor,n=e.input.cursor;if(n<=t)return;let o=e.input.buffer.slice(t,n).replace(/\x1b\[200~/g,"").replace(/\x1b\[201~/g,""),s=o.match(/\n/g),i=s?s.length:0,a=o.length;if(i<eG&&a<tG)return;let l=QK(4).toString("hex");e.pasteRegistry.set(l,o);let c=rG(l,o);e.input=j.replaceRange(e.input,{start:t,end:n},c)}function dg(e,t){if(e.pasteRegistry.size===0)return null;let n=e.input.buffer,r=e.input.cursor;if(t==="backward"){let l=/\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]$/.exec(n.slice(0,r));if(!l)return null;let c=r-l[0].length,u=l[1],d=j.replaceRange(e.input,{start:c,end:r},"");return e.pasteRegistry.delete(u),d}let o=/^\[Pasted text #([0-9a-f]+) \+\d+ (?:lines|chars)\]/.exec(n.slice(r));if(!o)return null;let s=r+o[0].length,i=o[1],a=j.replaceRange(e.input,{start:r,end:s},"");return e.pasteRegistry.delete(i),a}import{readdirSync as sG,statSync as iG}from"fs";import{join as aG}from"path";import{join as IR}from"path";import{homedir as oG}from"os";var PR=50;function fu(e,t,n=oG()){if(e==="~"||e.startsWith("~/")){let l=e==="~"?"":e.slice(2),c=l.lastIndexOf("/"),u=c===-1?"":l.slice(0,c),d=c===-1?l:l.slice(c+1),m=u?IR(n,u):n,f=u?`~/${u}/`:"~/";return{scanDir:m,leafPrefix:d,displayPrefix:f}}if(e.startsWith("/")){let l=e.lastIndexOf("/"),c=e.slice(0,l+1)||"/",u=e.slice(l+1);return{scanDir:c,leafPrefix:u,displayPrefix:c}}let r=e.lastIndexOf("/"),o=r===-1?"":e.slice(0,r),s=r===-1?e:e.slice(r+1),i=o?IR(t,o):t,a=o?`${o}/`:"";return{scanDir:i,leafPrefix:s,displayPrefix:a}}async function MR(e){let t="",n=e.promptFn(),r=e.continuationPrompt??" \u203A ";for(;;){e.rl.setPrompt(n),e.rl.prompt();let o=await new Promise(s=>{e.rl.once("line",i=>s(i))});if(o.endsWith("\\")){t+=o.slice(0,-1)+`
|
|
1721
1721
|
`,n=r;continue}return t+=o,t}}function aa(e,t){let n=e.slice(0,t);if(/^\/[A-Za-z_-]*$/.test(n))return{kind:"slash",query:n.slice(1)};let r=n.split(/\s+/),o=r[r.length-1]??"";if(o.startsWith("@")&&/^@[^\s]*$/.test(o))return{kind:"file",query:o.slice(1)};let s=/^\/([A-Za-z][A-Za-z0-9_:-]*)\s+(?:.*\s)?--([a-z0-9-]*)$/.exec(n);if(s){let i=s[1],a=s[2],l=st().find(c=>c.name===`/${i}`);if(l?.flags&&l.flags.length>0)return{kind:"flag",command:i,query:a}}return null}function gu(e){let t=st(),n=t.filter(s=>s.name.slice(1).startsWith(e)).map(s=>({value:s.name,summary:s.summary,...s.hint?{hint:s.hint}:{}})),r=bx().filter(s=>s.alias.slice(1).startsWith(e)).map(s=>{let i=t.find(a=>a.name===s.canonical);return{value:s.alias,summary:s.summary,...i?.hint?{hint:i.hint}:{}}});return[...n,...r].sort((s,i)=>s.value.localeCompare(i.value)).slice(0,20)}function hu(e,t=process.cwd(),n){let{scanDir:r,leafPrefix:o,displayPrefix:s}=fu(e,t,n);try{return sG(r).filter(a=>a.startsWith(o)).filter(a=>!(a.startsWith(".")&&!o.startsWith("."))).sort().slice(0,PR).map(a=>{let l=s+a;try{iG(aG(r,a)).isDirectory()&&(l+="/")}catch{}return{value:"@"+l}})}catch{return[]}}function la(e,t){let n=st().find(s=>s.name===`/${e}`);if(!n?.flags||n.flags.length===0)return[];let r=t.startsWith("--")?t.slice(2):t;return n.flags.filter(s=>(s.startsWith("--")?s.slice(2):s).startsWith(r)).map(s=>({value:s})).sort((s,i)=>s.value.localeCompare(i.value)).slice(0,20)}Ke();z();var lG=3,cG=250,uG=1500,dG=500;function OR(){return"Predict the single most likely completion of the user's in-progress REPL input. Return ONLY the completed line \u2014 no explanation, no preamble, no trailing newline."}function $R(e,t){let n=t.cwd.split("/").filter(Boolean).pop()??t.cwd,r=t.getRecentCommands().slice(0,5),o=t.getTranscriptTail(),s=[];return s.push(`cwd: ${n}`),r.length>0&&s.push(`recent: ${r.join(" | ")}`),o.length>0&&s.push(`context: ${o.slice(0,200)}`),s.push(`input: ${e}`),s.join(`
|
|
1722
|
-
`)}function Ls(e){return e.replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\u001b\][\s\S]*?(?:\u0007|\u001b\\)/g,"").replace(/\u001b[@-_]/g,"").replace(/[\u0000-\u001f\u007f-\u009f]/g,"")}function DR(e,t){let n=t.trim();return n.startsWith(e)&&n.length>e.length}function FR(e={}){let t=e.debounceMs??cG,n=e.timeoutMs??uG,r=null,o=null,s=null,i=new Map,a=e.resolveProviderFn??xc,l=new Map;function c(h,b){let y=ne(h,b),w=l.get(y);return w===void 0&&(w=a(h,b),l.set(y,w)),w}function u(h,b){if(i.size>=dG&&!i.has(h)){let y=i.keys().next().value;y!==void 0&&i.delete(y)}i.set(h,b)}function d(h,b){if(h.length===0)return null;let y=b.getDropdownTopCandidate(h);if(y!==null&&y.startsWith(h)&&y.length>h.length)return y;let w=b.getHistory();for(let S of w)if(S.startsWith(h)&&S.length>h.length)return S;return null}async function m(h,b){let y=d(h,b);if(y!==null)return y;if(!b.llmEnabled()||h.length<lG)return null;if(i.has(h))return i.get(h)??null;if(s!==null&&(s.abort(),s=null),r!==null&&(clearTimeout(r),r=null,o!==null)){let w=o;o=null,w(null)}return new Promise(w=>{o=w,r=setTimeout(()=>{r=null,o=null,f(h,b,w)},t)})}async function f(h,b,y){let w=new AbortController;s=w;let S=setTimeout(()=>w.abort(),n),x=new Promise(E=>{w.signal.aborted?E(null):w.signal.addEventListener("abort",()=>E(null),{once:!0})});try{let E=null,A=!1;if(e.completeFn){let T=await Promise.race([e.completeFn({system:OR(),user:$R(h,b),model:LR(b),maxTokens:24,signal:w.signal,apiKey:b.apiKey,baseUrl:b.baseUrl}).then(R=>({ok:!0,raw:R})),x.then(()=>({ok:!1}))]);if(T.ok){A=!0;let R=Ls(T.raw).trim();E=DR(h,R)?R:null}}else{let T=LR(b),R=b.baseUrl?{openaiBaseUrl:b.baseUrl}:void 0,M=c(T,R);if(typeof M.complete!="function"){u(h,null),y(null);return}let N=await Promise.race([M.complete({system:OR(),user:$R(h,b),model:T,maxTokens:24,signal:w.signal,apiKey:b.apiKey,baseUrl:b.baseUrl}).then(C=>({ok:!0,raw:C})),x.then(()=>({ok:!1}))]);if(N.ok){A=!0;let C=Ls(N.raw).trim();E=DR(h,C)?C:null}}A&&u(h,E),y(E)}catch(E){e.onError?.(E),y(null)}finally{clearTimeout(S),s===w&&(s=null)}}function g(){if(r!==null&&(clearTimeout(r),r=null,o!==null)){let h=o;o=null,h(null)}s!==null&&(s.abort(),s=null);for(let h of l.values())try{h.close?.()}catch{}l.clear()}return{getDeterministicGhost:d,getGhost:m,dispose:g}}function LR(e){let t=v.AFK_SUGGEST_MODEL;if(t)return t;let n=ne(e.model);return n==="anthropic-direct"||n==="anthropic"?v.AFK_COMPACT_MODEL??"haiku":e.model}var no=6;function yu(e){let t=e.autocompleteState;if(!t)return;t.trigger=aa(e.input.buffer,e.input.cursor);let n=`${e.input.cursor}:${e.input.buffer}`;t.suppressedSignature!==null&&t.suppressedSignature!==n&&(t.suppressedSignature=null),t.trigger&&t.suppressedSignature===null?(t.trigger.kind==="slash"?t.candidates=gu(t.trigger.query).slice(0,12):t.trigger.kind==="file"?t.candidates=hu(t.trigger.query):t.candidates=la(t.trigger.command,t.trigger.query),t.dropdownOpen=t.candidates.length>0):(t.dropdownOpen=!1,t.candidates=[]),t.selectedIndex>=t.candidates.length&&(t.selectedIndex=Math.max(0,t.candidates.length-1)),t.viewportStart>t.selectedIndex&&(t.viewportStart=t.selectedIndex),t.selectedIndex>=t.viewportStart+no&&(t.viewportStart=t.selectedIndex-no+1)}function NR(e){if(!e.ghostEngine||!e.ghostGetContext)return;let t=e.input.buffer;e.activeGhost!==null&&!e.activeGhost.startsWith(t)&&(e.activeGhost=null);let n=e.ghostGetContext(),r=e.ghostEngine.getDeterministicGhost(t,n);if(r!==null){e.activeGhost=r;return}if(e.activeGhost=null,e.autocompleteState?.dropdownOpen)return;let s=t;e.ghostEngine.getGhost(t,n).then(i=>{i!==null&&e.input.buffer===s&&i.startsWith(s)&&i.length>s.length&&(e.activeGhost=i,e.repaint())}).catch(()=>{})}function BR(e){let t=e.autocompleteState;if(!t?.dropdownOpen||t.candidates.length===0)return!1;let n=t.candidates[t.selectedIndex];if(!n)return!1;let r=e.input.buffer.slice(0,e.input.cursor),o=e.input.buffer.slice(e.input.cursor),s,i;if(t.trigger?.kind==="slash"){let l=/\/[A-Za-z_-]*$/.exec(r);s=l?r.length-l[0].length:e.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else if(t.trigger?.kind==="flag"){let l=/--[a-z0-9-]*$/.exec(r);s=l?r.length-l[0].length:e.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else{let l=r.search(/[^\s]*$/);s=l>=0?l:e.input.cursor,i=n.value}let a=j.replaceRange(e.input,{start:s,end:e.input.cursor},i);return a===e.input?!1:(e.input=a,t.dropdownOpen=!1,t.candidates=[],t.viewportStart=0,t.selectedIndex=0,e.queued=!1,yu(e),e.repaint(),!0)}function UR(e){let t=e.activeGhost;if(t===null||e.autocompleteState?.dropdownOpen||e.input.cursor!==e.input.buffer.length||!t.startsWith(e.input.buffer)||t.length<=e.input.buffer.length)return!1;let r=e.input.buffer+Ls(t.slice(e.input.buffer.length)),o=j.seed(r);return e.input=o,e.queued=!1,e.activeGhost=null,yu(e),e.repaint(),!0}import mG from"chalk";import fG from"string-width";function jR(e,t){if(t<=0)return"";let n=0;for(let r=0;r<e.length;r++)if(n+=fG(e[r]),n>t)return e.slice(0,r)+p.dim("\u2026");return e}function bu(e,t,n,r){let o=t?">":" ",s=e.value,i=e.summary?` ${e.summary}`:"",a=`${s}${i}`,l=jR(a,n-4),c=` ${o} ${l}`;return t?mG.inverse(p.user(c)):p.meta(c)}function wu(e,t){if(!e)return null;let n=e.trim();if(n.length===0)return null;let r=jR(n,Math.max(0,t-7));return r.length===0?null:p.dim(` \u21B3 ${r}`)}function HR(e){let t=e.queued?" "+p.dim("[queued]"):"",n=e.input.buffer.slice(0,e.input.cursor),r=Pr(e.input.buffer,e.input.cursor),o=e.input.cursor<e.input.buffer.length?e.input.buffer.slice(e.input.cursor,r):" ",s=e.input.cursor<e.input.buffer.length?e.input.buffer.slice(r):"",i=e.formatInputBuffer?.(n)??n,a=e.formatInputBuffer?.(s)??s,l=p.user.inverse(o),c=e.autocompleteState,u="",d=e.activeGhost;if(d!==null&&!t&&e.input.buffer.length>0&&e.input.cursor===e.input.buffer.length&&d.startsWith(e.input.buffer)&&d.length>e.input.buffer.length&&!c?.dropdownOpen){let m=Ls(d.slice(e.input.buffer.length)),f=e.stdout.columns??80,g=q(Ie(e.promptTextFn())),h=q(Ie(n))+1,b=Math.max(0,f-g-h-1),y=
|
|
1722
|
+
`)}function Ls(e){return e.replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\u001b\][\s\S]*?(?:\u0007|\u001b\\)/g,"").replace(/\u001b[@-_]/g,"").replace(/[\u0000-\u001f\u007f-\u009f]/g,"")}function DR(e,t){let n=t.trim();return n.startsWith(e)&&n.length>e.length}function FR(e={}){let t=e.debounceMs??cG,n=e.timeoutMs??uG,r=null,o=null,s=null,i=new Map,a=e.resolveProviderFn??xc,l=new Map;function c(h,b){let y=ne(h,b),w=l.get(y);return w===void 0&&(w=a(h,b),l.set(y,w)),w}function u(h,b){if(i.size>=dG&&!i.has(h)){let y=i.keys().next().value;y!==void 0&&i.delete(y)}i.set(h,b)}function d(h,b){if(h.length===0)return null;let y=b.getDropdownTopCandidate(h);if(y!==null&&y.startsWith(h)&&y.length>h.length)return y;let w=b.getHistory();for(let S of w)if(S.startsWith(h)&&S.length>h.length)return S;return null}async function m(h,b){let y=d(h,b);if(y!==null)return y;if(!b.llmEnabled()||h.length<lG)return null;if(i.has(h))return i.get(h)??null;if(s!==null&&(s.abort(),s=null),r!==null&&(clearTimeout(r),r=null,o!==null)){let w=o;o=null,w(null)}return new Promise(w=>{o=w,r=setTimeout(()=>{r=null,o=null,f(h,b,w)},t)})}async function f(h,b,y){let w=new AbortController;s=w;let S=setTimeout(()=>w.abort(),n),x=new Promise(E=>{w.signal.aborted?E(null):w.signal.addEventListener("abort",()=>E(null),{once:!0})});try{let E=null,A=!1;if(e.completeFn){let T=await Promise.race([e.completeFn({system:OR(),user:$R(h,b),model:LR(b),maxTokens:24,signal:w.signal,apiKey:b.apiKey,baseUrl:b.baseUrl}).then(R=>({ok:!0,raw:R})),x.then(()=>({ok:!1}))]);if(T.ok){A=!0;let R=Ls(T.raw).trim();E=DR(h,R)?R:null}}else{let T=LR(b),R=b.baseUrl?{openaiBaseUrl:b.baseUrl}:void 0,M=c(T,R);if(typeof M.complete!="function"){u(h,null),y(null);return}let N=await Promise.race([M.complete({system:OR(),user:$R(h,b),model:T,maxTokens:24,signal:w.signal,apiKey:b.apiKey,baseUrl:b.baseUrl}).then(C=>({ok:!0,raw:C})),x.then(()=>({ok:!1}))]);if(N.ok){A=!0;let C=Ls(N.raw).trim();E=DR(h,C)?C:null}}A&&u(h,E),y(E)}catch(E){e.onError?.(E),y(null)}finally{clearTimeout(S),s===w&&(s=null)}}function g(){if(r!==null&&(clearTimeout(r),r=null,o!==null)){let h=o;o=null,h(null)}s!==null&&(s.abort(),s=null);for(let h of l.values())try{h.close?.()}catch{}l.clear()}return{getDeterministicGhost:d,getGhost:m,dispose:g}}function LR(e){let t=v.AFK_SUGGEST_MODEL;if(t)return t;let n=ne(e.model);return n==="anthropic-direct"||n==="anthropic"?v.AFK_COMPACT_MODEL??"haiku":e.model}var no=6;function yu(e){let t=e.autocompleteState;if(!t)return;t.trigger=aa(e.input.buffer,e.input.cursor);let n=`${e.input.cursor}:${e.input.buffer}`;t.suppressedSignature!==null&&t.suppressedSignature!==n&&(t.suppressedSignature=null),t.trigger&&t.suppressedSignature===null?(t.trigger.kind==="slash"?t.candidates=gu(t.trigger.query).slice(0,12):t.trigger.kind==="file"?t.candidates=hu(t.trigger.query):t.candidates=la(t.trigger.command,t.trigger.query),t.dropdownOpen=t.candidates.length>0):(t.dropdownOpen=!1,t.candidates=[]),t.selectedIndex>=t.candidates.length&&(t.selectedIndex=Math.max(0,t.candidates.length-1)),t.viewportStart>t.selectedIndex&&(t.viewportStart=t.selectedIndex),t.selectedIndex>=t.viewportStart+no&&(t.viewportStart=t.selectedIndex-no+1)}function NR(e){if(!e.ghostEngine||!e.ghostGetContext)return;let t=e.input.buffer;e.activeGhost!==null&&!e.activeGhost.startsWith(t)&&(e.activeGhost=null);let n=e.ghostGetContext(),r=e.ghostEngine.getDeterministicGhost(t,n);if(r!==null){e.activeGhost=r;return}if(e.activeGhost=null,e.autocompleteState?.dropdownOpen)return;let s=t;e.ghostEngine.getGhost(t,n).then(i=>{i!==null&&e.input.buffer===s&&i.startsWith(s)&&i.length>s.length&&(e.activeGhost=i,e.repaint())}).catch(()=>{})}function BR(e){let t=e.autocompleteState;if(!t?.dropdownOpen||t.candidates.length===0)return!1;let n=t.candidates[t.selectedIndex];if(!n)return!1;let r=e.input.buffer.slice(0,e.input.cursor),o=e.input.buffer.slice(e.input.cursor),s,i;if(t.trigger?.kind==="slash"){let l=/\/[A-Za-z_-]*$/.exec(r);s=l?r.length-l[0].length:e.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else if(t.trigger?.kind==="flag"){let l=/--[a-z0-9-]*$/.exec(r);s=l?r.length-l[0].length:e.input.cursor,i=n.value+(o.startsWith(" ")?"":" ")}else{let l=r.search(/[^\s]*$/);s=l>=0?l:e.input.cursor,i=n.value}let a=j.replaceRange(e.input,{start:s,end:e.input.cursor},i);return a===e.input?!1:(e.input=a,t.dropdownOpen=!1,t.candidates=[],t.viewportStart=0,t.selectedIndex=0,e.queued=!1,yu(e),e.repaint(),!0)}function UR(e){let t=e.activeGhost;if(t===null||e.autocompleteState?.dropdownOpen||e.input.cursor!==e.input.buffer.length||!t.startsWith(e.input.buffer)||t.length<=e.input.buffer.length)return!1;let r=e.input.buffer+Ls(t.slice(e.input.buffer.length)),o=j.seed(r);return e.input=o,e.queued=!1,e.activeGhost=null,yu(e),e.repaint(),!0}import mG from"chalk";import fG from"string-width";function jR(e,t){if(t<=0)return"";let n=0;for(let r=0;r<e.length;r++)if(n+=fG(e[r]),n>t)return e.slice(0,r)+p.dim("\u2026");return e}function bu(e,t,n,r){let o=t?">":" ",s=e.value,i=e.summary?` ${e.summary}`:"",a=`${s}${i}`,l=jR(a,n-4),c=` ${o} ${l}`;return t?mG.inverse(p.user(c)):p.meta(c)}function wu(e,t){if(!e)return null;let n=e.trim();if(n.length===0)return null;let r=jR(n,Math.max(0,t-7));return r.length===0?null:p.dim(` \u21B3 ${r}`)}function HR(e){let t=e.queued?" "+p.dim("[queued]"):"",n=e.input.buffer.slice(0,e.input.cursor),r=Pr(e.input.buffer,e.input.cursor),o=e.input.cursor<e.input.buffer.length?e.input.buffer.slice(e.input.cursor,r):" ",s=e.input.cursor<e.input.buffer.length?e.input.buffer.slice(r):"",i=e.formatInputBuffer?.(n)??n,a=e.formatInputBuffer?.(s)??s,l=p.user.inverse(o),c=e.autocompleteState,u="",d=e.activeGhost;if(d!==null&&!t&&e.input.buffer.length>0&&e.input.cursor===e.input.buffer.length&&d.startsWith(e.input.buffer)&&d.length>e.input.buffer.length&&!c?.dropdownOpen){let m=Ls(d.slice(e.input.buffer.length)),f=e.stdout.columns??80,g=q(Ie(e.promptTextFn())),h=q(Ie(n))+1,b=Math.max(0,f-g-h-1),y=ie(m,b,"");y.length>0&&(u=p.dim(y))}return e.promptTextFn()+i+l+a+u+t}function WR(e){let t=e.autocompleteState;if(!t?.dropdownOpen)return[];let n=e.stdout.columns||80;if(n<=40)return[];let r=Math.min(n-4,60),o=Math.min(t.candidates.length-t.viewportStart,no),s=[];for(let i=0;i<o;i++){let a=t.viewportStart+i,l=t.candidates[a];if(!l)continue;let c=bu(l,a===t.selectedIndex,r,t.trigger?.kind),u=Ie(c).length,d=Math.max(0,Math.ceil(u/n)-1);s.push(c);for(let m=0;m<d;m++)s.push("")}return s.reverse()}function KR(e){let t=e.autocompleteState;if(!t?.dropdownOpen)return null;let n=e.stdout.columns||80;if(n<=40)return null;let r=t.candidates[t.selectedIndex];if(!r)return null;let o=Math.min(n-4,80);return wu(r.hint,o)??""}function GR(e,t){e.debugLog("commitAbove:enter",{textLen:t.length,anchorRow:e.anchorRow??null,committing:e.committing,topRow:e.logUpdate?.topRow??null});let n=b=>{e.scrollRegion?e.scrollRegion.withFullScrollRegion(b):b()};if(!e.armed||!e.logUpdate){n(()=>{e.stdout.write(t+`
|
|
1723
1723
|
`)});return}let r=Math.max(1,e.stdout.rows??24),o=t.endsWith(`
|
|
1724
1724
|
`)?t.slice(0,-1):t,s=o.match(/\n/g)?.length??0,i=Math.max(1,s+1),a=e.logUpdate.measure?Math.max(1,e.logUpdate.measure(o,r).lineCount):i,l=o.split(`
|
|
1725
1725
|
`),c=e.scrollRegion?.getExtraRows()??0,u=e.logUpdate.topRow??0,d=u>1?u:Math.max(1,r-1-c),m=Math.max(e.anchorRow??1,1),f=u>1&&a<=d-m;e.commitInFlight=!0,e.committing=!0;let g=0;try{e.logUpdate.clear(c),n(()=>{let b=f,y=b&&e.committedBand.length>0&&e.committedBandBottomRow>0?Math.max(d,e.committedBandBottomRow+1):d,w=Math.max(0,y-m),S=b?Math.max(0,e.committedBand.length+a-w):a;if(g=f?S:0,e.debugLog("commitAbove:phase1",{lineCount:a,fitsAboveFrame:f,bandOverflow:S}),f)S>0&&e.stdout.write(`\x1B[${r};1H${`
|
|
@@ -1751,10 +1751,10 @@ ${u}`}function ng(e,t){let n=aR[t.status];e.out.line(` ${n} ${p.bold(t.jobId)}
|
|
|
1751
1751
|
`;return new Promise(r=>{let o=aA("osascript",["-e",n],{stdio:["ignore","pipe","pipe"]}),s="",i="";o.stdout?.on("data",a=>{s+=a.toString("utf8")}),o.stderr?.on("data",a=>{i+=a.toString("utf8")}),o.on("error",()=>r({ok:!1,exitCode:null,stderr:i})),o.on("close",a=>{r({ok:a===0&&s.trim()==="ok",exitCode:a,stderr:i})})})}function AG(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function _G(e){return e.length>=8&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71?"image/png":e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255?"image/jpeg":e.length>=4&&e[0]===71&&e[1]===73&&e[2]===70&&e[3]===56?"image/gif":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"image/webp":null}function pA(e,t,n){if(!e.armed||CG(e,t,n))return;let r=n?.sequence??"";IG(e,r)||PG(e,n)||MG(e,n)||OG(e,n)||$G(e,n)||DG(e,n,r)||LG(e,n)||FG(e,n)||NG(e,n)||BG(e,n)||UG(e,t,n)}function CG(e,t,n){return e.inputMode==="picker"&&e.pickerController?(e.pickerController.onKey(t,n),!0):!1}function IG(e,t){if(t==="\x1B[200~")return e.pasting=!0,e.pasteStartBufferLen=e.input.buffer.length,e.pasteStartCursor=e.input.cursor,!0;if(t==="\x1B[201~"){e.pasting=!1;let n=r=>{e.clipboardInFlight||(e.clipboardInFlight=!0,so().then(o=>{o?(e.clipboardFailureMsg=null,e.attachments.push(o),e.repaint()):r==="flag-missing"&&(e.clipboardFailureMsg="[clipboard: no image found]",e.repaint())}).catch(()=>{}).finally(()=>{e.clipboardInFlight=!1}))};return e.input.buffer.length===e.pasteStartBufferLen?n("flag-missing"):(CR(e),e.updateAutocomplete(),e.repaint(),n("silent")),!0}return!1}function PG(e,t){if(t?.name!=="escape")return!1;let n=e.autocompleteState;return n?.dropdownOpen?(n.suppressedSignature=`${e.input.cursor}:${e.input.buffer}`,n.dropdownOpen=!1,n.candidates=[],e.repaint(),!0):(e.inputMode==="idle"||e.softStopped||(e.input.buffer.length>0&&!e.queued&&(e.queued=!0,e.repaint()),e.softStopped=!0,e.onSoftStop&&e.onSoftStop()),!0)}function MG(e,t){return t?.ctrl&&t?.name==="c"?e.inputMode==="idle"?(e.onCancel&&e.onCancel(),!0):(e.canceled||(e.canceled=!0,e.input.buffer.length>0&&!e.queued&&(e.queued=!0,e.repaint()),e.onCancel&&e.onCancel()),!0):!1}function OG(e,t){return t?.ctrl&&t?.name==="v"?(e.clipboardInFlight||(e.clipboardInFlight=!0,so().then(n=>{n?(e.clipboardFailureMsg=null,e.attachments.push(n)):e.clipboardFailureMsg="[clipboard: no image found]",e.repaint()}).catch(()=>{}).finally(()=>{e.clipboardInFlight=!1})),!0):!1}function $G(e,t){let n=e.autocompleteState;if(t?.ctrl&&t?.name==="p"||t?.name==="up"){if(n?.dropdownOpen)return n.selectedIndex<n.candidates.length-1&&(n.selectedIndex++,n.selectedIndex>=n.viewportStart+no&&(n.viewportStart=n.selectedIndex-no+1),e.repaint()),!0;if(e.history){let r=e.history.back(e.input.buffer);r!==null&&e.applyEdit(j.seed(r))}return!0}if(t?.ctrl&&t?.name==="n"||t?.name==="down"){if(n?.dropdownOpen)return n.selectedIndex>0&&(n.selectedIndex--,n.selectedIndex<n.viewportStart&&(n.viewportStart=n.selectedIndex),e.repaint()),!0;if(e.history){let r=e.history.forward();r!==null&&e.applyEdit(j.seed(r))}return!0}return!1}function DG(e,t,n){if(t?.name!=="return")return!1;let r=t?.shift===!0||n==="\x1B[13;2u",o=t?.meta===!0;if(r||o)return e.history?.resetRecall(),e.applyEdit(j.insert(e.input,`
|
|
1752
1752
|
`)),!0;if(e.pasting)return e.input=j.insert(e.input,`
|
|
1753
1753
|
`),e.queued=!1,!0;let s=e.autocompleteState;if(s?.dropdownOpen){let i=s.trigger?.kind,a=e.applyDropdownSelection();if(i!=="slash"||!a)return!0}if(e.input.buffer.length===0&&e.attachments.length===0)return!0;if(e.inputMode==="idle"&&e.onSubmit){let i=e.input.buffer,a=Ds(e,i),l=[...e.attachments],c=e.onSubmit;return e.queued=!1,e.input=j.seed(""),e.attachments=[],e.pasteRegistry.clear(),e.autocompleteState?.reset(),e.repaint(),c(a===i?{text:a,attachments:l}:{text:a,displayText:i,attachments:l}),!0}return e.queued||(e.queued=!0,e.repaint()),!0}function LG(e,t){if(t?.name!=="backspace")return!1;if(t?.meta){let o=j.deleteWordBackward(e.input);return o!==e.input&&(e.history?.resetRecall(),e.applyEdit(o)),!0}let n=dg(e,"backward");if(n)return e.history?.resetRecall(),e.applyEdit(n),!0;let r=j.backspace(e.input);return r!==e.input?(e.history?.resetRecall(),e.applyEdit(r)):e.queued?(e.queued=!1,e.repaint()):e.attachments.length>0&&(e.attachments.pop(),e.repaint()),!0}function FG(e,t){if(t?.ctrl&&t?.name==="a")return e.applyEdit(j.moveLineStart(e.input)),!0;if(t?.ctrl&&t?.name==="e")return e.applyEdit(j.moveLineEnd(e.input)),!0;if((t?.meta||t?.ctrl)&&t?.name==="left")return e.applyEdit(j.moveWordBackward(e.input)),!0;if((t?.meta||t?.ctrl)&&t?.name==="right")return e.applyEdit(j.moveWordForward(e.input)),!0;if(t?.meta&&t?.name==="b")return e.applyEdit(j.moveWordBackward(e.input)),!0;if(t?.meta&&t?.name==="f")return e.applyEdit(j.moveWordForward(e.input)),!0;if(t?.ctrl&&t?.name==="w"){let n=j.deleteWordBackward(e.input);return n!==e.input&&(e.history?.resetRecall(),e.applyEdit(n)),!0}if(t?.ctrl&&t?.name==="u"){let n=j.deleteToLineStart(e.input);return n!==e.input&&(e.history?.resetRecall(),e.applyEdit(n)),!0}if(t?.ctrl&&t?.name==="k"){let n=j.deleteToLineEnd(e.input);return n!==e.input&&(e.history?.resetRecall(),e.applyEdit(n)),!0}if(t?.name==="left")return e.applyEdit(j.moveLeft(e.input)),!0;if(t?.name==="right")return e.input.cursor===e.input.buffer.length&&e.activeGhost!==null&&!e.autocompleteState?.dropdownOpen?e.applyGhostAccept():e.applyEdit(j.moveRight(e.input)),!0;if(t?.name==="home")return e.applyEdit(j.moveHome(e.input)),!0;if(t?.name==="end")return e.applyEdit(j.moveEnd(e.input)),!0;if(t?.name==="delete"){if(t?.meta){let r=j.deleteWordForward(e.input);return r!==e.input&&(e.history?.resetRecall(),e.applyEdit(r)),!0}let n=dg(e,"forward");return n?(e.history?.resetRecall(),e.applyEdit(n),!0):(e.history?.resetRecall(),e.applyEdit(j.deleteForward(e.input)),!0)}return!1}function NG(e,t){return t?.ctrl&&t?.name==="b"?(e.inputMode==="idle"||e.backgrounded||(e.backgrounded=!0,e.onBackground&&e.onBackground()),!0):!1}function BG(e,t){return t?.name==="tab"&&t?.shift?(e.onShiftTab&&e.onShiftTab(),!0):t?.name==="tab"?(e.applyDropdownSelection()||e.applyGhostAccept(),!0):!1}function dA(e){return e>=" "&&Pr(e,0)===e.length}function UG(e,t,n){let r=["tab","pageup","pagedown"];if(n?.name&&r.includes(n.name)||n?.ctrl||n?.meta)return;let o=typeof t=="string"&&dA(t)?t:typeof n?.sequence=="string"&&dA(n.sequence)?n.sequence:null;o!==null&&(e.history?.resetRecall(),e.applyEdit(j.insert(e.input,o)))}function mA(e){if(!(!e.armed||e.suspended)){if(e.logUpdate)try{e.logUpdate.clear(e.scrollRegion?.getExtraRows()??0),e.logUpdate.done()}catch{}e.handleKeypress&&e.stdin.removeListener("keypress",e.handleKeypress);try{e.stdin.setRawMode(!1)}catch{}e.suspended=!0}}function fA(e){if(!(!e.armed||!e.suspended)){try{e.stdin.setRawMode(!0)}catch{}e.handleKeypress&&e.stdin.on("keypress",e.handleKeypress),e.suspended=!1,e.repaint()}}async function gA(e){if(e.armed)throw new Error("TerminalCompositor: arm() called while already armed");if(!(!e.stdout.isTTY||!e.stdin.isTTY)){e.anchorRow=e.declaredAnchorRow,e.logUpdate||(e.logUpdate=new Su(e.stdout)),e.stdinClaim=ma("TerminalCompositor.arm"),e.wasRaw=e.stdin.isRaw??!1;try{e.stdin.setRawMode(!0)}catch{e.stdinClaim?.release(),e.stdinClaim=null,e.logUpdate=null,e.wasRaw=!1;return}try{e.stdout.write("\x1B[?2004h")}catch{}e.stdin.resume(),Xr(e.stdin),e.handleKeypress=(t,n)=>pA(e,t,n),e.stdin.on("keypress",e.handleKeypress),e.armed=!0,e.canceled=!1,e.resizeUnsub=Ne.subscribe(()=>{e.armed&&e.repaint()}),e.resizeImmediateUnsub=Ne.subscribeImmediate(()=>{if(!e.armed)return;let t=e.stdout.rows??24;if(e.lastKnownRows>0&&t>e.lastKnownRows){let n=e.scrollRegion?.getExtraRows()??0,r=e.logUpdate?.topRow??0,o=e.committedBand.length>0?e.committedBandTopRow:0,s=[r,o].filter(l=>l>0),i=s.length>0?Math.min(...s):0,a=Math.max(1,e.lastKnownRows-1-n);i>0&&i<=a&&(e.pendingResizeErase={top:i,bottom:a})}else e.pendingResizeErase=null;e.logUpdate?.resetGeometry?.()}),e.repaint()}}function hA(e){if(e.spinnerController.dispose(),!e.armed){e.resetState();return}if(e.handleKeypress&&(e.stdin.removeListener("keypress",e.handleKeypress),e.handleKeypress=null),e.resizeUnsub&&(e.resizeUnsub(),e.resizeUnsub=null),e.resizeImmediateUnsub&&(e.resizeImmediateUnsub(),e.resizeImmediateUnsub=null),e.logUpdate)try{e.logUpdate.clear(e.scrollRegion?.getExtraRows()??0),e.logUpdate.done()}catch{}if(e.stdout.isTTY&&e.stdin.isTTY){try{e.stdout.write("\x1B[?2004l")}catch{}try{e.stdin.setRawMode(e.wasRaw)}catch{}}e.stdinClaim&&(e.stdinClaim.release(),e.stdinClaim=null),e.armed=!1,e.resetState(),e.ghostEngine?.dispose()}var Ns=class{stdout;stdin;onCancel;onSoftStop;softStopped=!1;onBackground;onShiftTab;promptTextFn;history;autocompleteState;formatInputBuffer;scrollRegion;anchorRow;declaredAnchorRow;onSubmit;attachments=[];pasting=!1;pasteStartBufferLen=0;pasteStartCursor=0;pasteRegistry=new Map;clipboardInFlight=!1;clipboardFailureMsg=null;inputMode="streaming";pickerController=null;pickerSavedMode="streaming";armed=!1;suspended=!1;canceled=!1;backgrounded=!1;wasRaw=!1;stdinClaim=null;logUpdate=null;overlay="";input=j.seed("");queued=!1;handleKeypress=null;resizeUnsub=null;resizeImmediateUnsub=null;spinnerController;committing=!1;hasCommitted=!1;committedBand=[];committedBandTopRow=0;committedBandBottomRow=0;coveredBand=[];lastKnownRows=0;pendingResizeErase=null;commitInFlight=!1;debugCompositor=!!v.AFK_DEBUG_COMPOSITOR;ghostEngine;ghostGetContext;activeGhost=null;debugLog(t,n={}){if(!this.debugCompositor)return;let r=process.hrtime.bigint(),o=Object.entries(n).map(([s,i])=>{let a=typeof i=="string"?JSON.stringify(i.length>60?i.slice(0,57)+"...":i):String(i);return`${s}=${a}`}).join(" ");process.stderr.write(`[compositor] t=${r} ${t}${o?" "+o:""}
|
|
1754
|
-
`)}constructor(t){this.stdout=t.stdout,this.stdin=t.stdin,this.onCancel=t.onCancel,this.onSoftStop=t.onSoftStop,this.onBackground=t.onBackground,this.onShiftTab=t.onShiftTab;let n=t.promptText;if(typeof n=="function")this.promptTextFn=n;else if(typeof n=="string")this.promptTextFn=()=>n;else{let r=" "+p.dim("\u23AF")+" ";this.promptTextFn=()=>r}this.history=t.history,this.autocompleteState=t.autocompleteState,this.formatInputBuffer=t.formatInputBuffer,this.scrollRegion=t.scrollRegion,this.spinnerController=new mu({captureMode:t.captureMode??!1,onTick:()=>this.repaint()}),this.onSubmit=t.onSubmit,this.anchorRow=t.anchorRow,this.declaredAnchorRow=t.anchorRow,this.ghostEngine=t.suggest?.engine,this.ghostGetContext=t.suggest?.getContext}isArmed(){return this.armed}setAnchorRow(t){this.anchorRow=t,this.declaredAnchorRow=t}suspendInput(){mA(this)}resumeInput(){fA(this)}setOnSubmit(t){this.onSubmit=t??void 0}setOnCancel(t){this.onCancel=t??void 0}getOnCancel(){return this.onCancel}setOnSoftStop(t){this.onSoftStop=t??void 0}setOnBackground(t){this.onBackground=t??void 0}setOnShiftTab(t){this.onShiftTab=t??void 0}enterPickerMode(t){ZR(this,t)}exitPickerMode(){QR(this)}repaintPicker(){eA(this)}setInputMode(t){tA(this,t)}getInputMode(){return nA(this)}async arm(){return gA(this)}disarm(){hA(this)}setOverlay(t){t!==this.overlay&&(this.debugLog("setOverlay",{framesLen:t.length,anchorRow:this.anchorRow??null}),this.overlay=t,this.repaint())}setSpinner(t){this.stdout.isTTY&&this.spinnerController.set(t)}commitAbove(t){GR(this,t)}clearCommittedBand(){ca(this)}flushResizeGhostErase(){qR(this)}resetCommittedBand(){zR(this)}repositionCommittedBand(t,n,r){JR(this,t,n,r)}getBuffer(){return{text:Ds(this,this.input.buffer),queued:this.queued}}getAttachments(){return[...this.attachments]}renderInputLine(){return HR(this)}updateAutocomplete(){yu(this)}updateGhost(){NR(this)}renderDropdownRows(){return WR(this)}renderHintRow(){return KR(this)}repaint(){XR(this)}resetState(){this.overlay="",this.input=j.seed(""),this.queued=!1,this.canceled=!1,this.backgrounded=!1,this.softStopped=!1,this.activeGhost=null,this.anchorRow=void 0,this.hasCommitted=!1,this.clearCommittedBand(),this.commitInFlight=!1,this.pendingResizeErase=null,this.lastKnownRows=0,this.pickerController=null,this.inputMode="streaming",this.attachments=[],this.pasting=!1,this.pasteStartBufferLen=0,this.pasteStartCursor=0,this.pasteRegistry.clear(),this.clipboardFailureMsg=null,this.autocompleteState?.reset(),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.resizeImmediateUnsub&&(this.resizeImmediateUnsub(),this.resizeImmediateUnsub=null)}applyEdit(t){return t===this.input?!1:(this.input=t,this.queued=!1,this.pasting||(this.updateAutocomplete(),this.updateGhost(),this.repaint()),!0)}applyDropdownSelection(){return BR(this)}applyGhostAccept(){return UR(this)}};import WG from"chalk";var KG=/(?<=\s|^)(\/[A-Za-z][\w:-]*)(?=\s|$)/g,GG=/(?<=\s|^)(@[~\w./-]*)(?=\s|$)/g,zG=/\[Pasted text #[0-9a-f]+ \+\d+ (?:lines|chars)\]/g,yA={mint:p.mint};function qG(e){let t=yA[e];if(t)return t;let n=e.lastIndexOf(":");if(n>=0){let r=e.slice(n+1),o=yA[r];if(o)return o}return null}function wr(e,t){return WG.level===0?e:e.replace(KG,o=>{let s=o.slice(1);return t.has(s)?(qG(s)??p.brand)(o):p.meta(o)}).replace(GG,o=>p.fileRef(o)).replace(zG,o=>p.meta(o))}z();import{pathToFileURL as JG}from"node:url";var YG="\x1B]8;;\x1B\\",VG=new Set(["iterm2","wezterm","kitty","vscode","ghostty","windows-terminal","konsole","gnome-terminal","alacritty"]),XG=5e3;function ZG(e=process.env,t=process.stdout.isTTY===!0){let n=e.FORCE_HYPERLINK;if(n!==void 0&&n.length>0)return n!=="0"&&n.toLowerCase()!=="false";if(!t||e.CI!==void 0&&e.CI.length>0)return!1;let r=oa(e);if(!VG.has(r))return!1;if(r==="gnome-terminal"&&e.VTE_VERSION!==void 0){let o=Number.parseInt(e.VTE_VERSION,10);if(!Number.isFinite(o)||o<XG)return!1}return!0}var yg;function vu(){return yg===void 0&&(yg=ZG()),yg}function QG(e,t){return`\x1B]8;;${t}\x1B\\${e}${YG}`}function ku(e,t){try{return QG(e,JG(t).href)}catch{return e}}var bA=/[\x00-\x1F\x7F-\x9F]/g;function Xe(e){return Ie(e).replace(bA," ").replace(/ {2,}/g," ").trim()}function bg(e){return Ie(e).replace(bA," ")}function fa(e){let t=/[a-z][a-z0-9+.-]*:\/\/[^\s<>\"`]+/gi,n="",r=0;for(let o of e.matchAll(t)){let s=o[0]??"",i=o.index??r;n+=wA(e.slice(r,i)),n+=s,r=i+s.length}return n+=wA(e.slice(r)),n}function wA(e){let t=vu();return e.replace(/\/(?:[^/\s,)]+\/){2,}([^/\s,)]+)/g,(n,r)=>t?ku(r,n):r)}function e2(e){let t=/^(\s*[("]?\s*)cd\s+\S+\s+&&\s+(?!cd\s)(.+)$/.exec(e);return t?(t[1]??"")+(t[2]??""):e}var SA=60;function wg(e,t){let n=e.trim().replace(/^\((.*)\)$/s,"$1"),r;try{r=JSON.parse(n)}catch{return e}if(!r||typeof r!="object")return e;let o=r;for(let s of t){let i=o[s];if(typeof i=="string"&&i.length>0){let a=Xe(i);if(a.length===0)continue;return`(${a.length>SA?ae(a,SA,"\u2026"):a})`}}return e}function vA(e,t){if(e==="bash"||e==="Bash")return e2(t);if(e==="compose"||e==="Compose"){let n=t.trim().replace(/^\((.*)\)$/s,"$1");try{let r=JSON.parse(n);if(r&&typeof r=="object"){let o=Array.isArray(r.nodes)?r.nodes.length:void 0,s=Array.isArray(r.edges)?r.edges.length:0;if(o!==void 0){let i=`${o} node${o===1?"":"s"}`,a=s>0?`, ${s} edge${s===1?"":"s"}`:"";return`(${i}${a})`}}}catch{}}return e==="agent"||e==="Agent"?wg(t,["id_prefix","prompt"]):e==="Task"?wg(t,["description","prompt"]):e==="skill"||e==="Skill"?wg(t,["name","arguments"]):e==="ask_question"?t2(t):t}function t2(e){let t=e.trim().replace(/^\((.*)\)$/s,"$1");try{let n=JSON.parse(t);if(!n||typeof n!="object")return e;let r=n,o=typeof r.type=="string"?r.type:"text";if(o==="choice"||o==="multi_choice"){let s=r.choices,i=Array.isArray(s)?s.length:0;return i>0?`(${o}: ${i} option${i===1?"":"s"})`:`(${o})`}return`(${o})`}catch{return e}}function n2(e){return e.replace(/[\r\n]+/g," ")}var r2={"(":")","{":"}","[":"]"};function kA(e,t,n="\u2026"){let r=e.charAt(0),o=r2[r];return!(o&&e.endsWith(o)&&e.length>=2)||q(e)<=t?ae(e,t,n):t<3?t>=2?r+o:ae(e,t,n):ae(e,t-1,n)+o}function Ln(e,t){let n=/^([A-Za-z_][A-Za-z0-9_]*)(.*)$/s.exec(e);if(n){let r=n[1],o=fa(vA(r,n[2]??"")),s=sr(r),{color:i,glyph:a}=Ts(r),l=zm(s),c=l?` [${l}]`:"";if(t!==void 0){let d=(a+" ").length+r.length+c.length,m=Math.max(1,t-d);o=kA(o,m)}o=n2(o);let u=i(a+" ")+i.bold(r)+p.toolArg(o);return l?u+p.dim(c):u}return p.chrome("\u25CF ")+p.toolArg(e)}z();var EA=8,Eu=30;function o2(){let e=v.AFK_DIFF_LINES;if(e===void 0)return Eu;let t=e.trim();if(!/^\d+$/.test(t))return Eu;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:Eu}function s2(){let e=v.AFK_SHOW_DIFFS;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"}function i2(e){let t=p.diffAdd(`+${e.addedLines}`),n=p.diffRemove(`-${e.removedLines}`),r=e.hunks.length,o=p.dim(`across ${r} hunk${r===1?"":"s"}`);return`${t} ${n} ${o}`}var a2=/[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;function l2(e){let t=Ie(e.text).replace(a2,"");return e.kind==="+"?p.diffAdd("+ "+t):e.kind==="-"?p.diffRemove("- "+t):p.dim(" "+t)}var vg=new WeakMap;function Fn(e,t,n){if(s2())return[];if(e.hunks.length===0)return[];let r=t==="overlay"?EA:o2(),o=t+"|"+n+"|"+r,s=vg.get(e);if(s!==void 0){let f=s.get(o);if(f!==void 0)return f}let i=[];i.push(n+i2(e));let a=[];for(let f of e.hunks){let g=`@@ -${f.oldStart},${f.oldLines} +${f.newStart},${f.newLines} @@`;a.push({kind:"header",text:p.diffHunk(g)});for(let h of f.lines)a.push({kind:"body",text:l2(h)})}if(r===0){for(let f of a)i.push(n+f.text);return Sg(e,o,i),i}let l=0;for(let f of a)f.kind==="body"&&l++;if(l<=r){for(let f of a)i.push(n+f.text);return Sg(e,o,i),i}let c=0;for(let f of a)f.kind==="header"?i.push(n+f.text):c<r&&(i.push(n+f.text),c++);let u=l-r,d=`line${u===1?"":"s"}`,m=t==="flush"?" (set AFK_DIFF_LINES=0 to expand)":"";return i.push(n+p.dim(`\u2026 +${u} more diff ${d}${m}`)),Sg(e,o,i),i}function Sg(e,t,n){let r=vg.get(e);r===void 0&&(r=new Map,vg.set(e,r)),r.set(t,n)}var c2=p.success("\u2713"),u2=p.error("\u2717");function Sr(e){return e?u2:c2}var ga=3,TA=2,xA=3;function RA(e){switch(sr(e)){case"read":return"Reading\u2026";case"write":return"Writing\u2026";case"web":return"Fetching\u2026";case"shell":return"Running\u2026";default:return"Running\u2026"}}function d2(e,t){return e?e==="grep"||e==="Grep"?t===1?"match":"matches":e==="glob"||e==="Glob"?t===1?"path":"paths":t===1?"line":"lines":t===1?"line":"lines"}function Nn(e,t,n=60,r){let o=e.isError?p.error:p.dim,s=t??v.HOME??"___NOHOME___";if(e.display!==void 0&&!e.isError)return o(e.display);if(e.persistedPath){let a=e.persistedPath.startsWith(s)?"~"+e.persistedPath.slice(s.length):e.persistedPath,l=vu()?ku(a,e.persistedPath):a;return o(`saved \u2192 ${l}`)}if(e.lineCount!==void 0&&e.lineCount>1)return o(`${e.lineCount} ${d2(r,e.lineCount)}`);let i=e.content.length>n?e.content.slice(0,n-3)+"\u2026":e.content;return o(Xe(i))}z();function ha(e,t){if(e.length<=t)return e;let n=e.slice(0,t),r=e.slice(t),o=_A(r);return[...n,{kind:"overflow",count:r.length,text:o}]}function p2(e,t){return t<=1||e.endsWith("s")||/(sh|ch|x|z)$/i.test(e)?e:e+"s"}var m2=5,AA=60;function _A(e){let t=new Map,n=0;for(let s of e)s.kind==="group"?(t.set(s.toolName,(t.get(s.toolName)??0)+s.entries.length),n+=s.entries.length):(t.set(s.toolName,(t.get(s.toolName)??0)+1),n+=1);if(n===0)return"";if(e.length>0&&e.every(s=>Be.has(s.toolName))&&new Set(e.map(s=>s.toolName)).size===1){let s=[],i=!1;for(let a of e){let c=(a.kind==="group"?a.label:a.toolInput).trim();if(!c.startsWith("(")||!c.endsWith(")")){i=!0;break}let u=c.slice(1,-1),d=Xe(u);if(!d){i=!0;break}let m=d.length>AA?d.slice(0,AA-1)+"\u2026":d,f=a.kind==="group"?a.entries.length:1;s.push({display:m,entries:f})}if(!i&&s.length>0){let a=s.slice(0,m2),l=a.map(({display:m,entries:f})=>f>1?`${m} \xD7${f}`:m),c=a.reduce((m,f)=>m+f.entries,0),u=n-c,d=l.join(", ")+(u>0?` (+${u})`:"");return`\u2026 +${n} more: ${d}`}}let o=[];for(let[s,i]of t)o.push(`${i} ${p2(s,i)}`);return`\u2026 +${n} (${o.join(", ")})`}function Tu(e,t=Ut()){return e.map((n,r)=>({sibling:n,connector:r===e.length-1?t.lastConnector:t.midConnector}))}function kg(e,t){return t?[...e,{kind:"resultSummary",summary:t}]:e}function Eg(e){if(e.length===0)return[];let t=new Map;for(let o of e){let s=CA(o),i=t.get(s);i||(i=[],t.set(s,i)),i.push(o)}let n=[],r=new Set;for(let o of e){let s=CA(o),i=t.get(s);i.length>=f2(o.toolName)?r.has(s)||(n.push({kind:"group",toolName:o.toolName,label:Be.has(o.toolName)?o.toolInput:"",entries:i}),r.add(s)):n.push(o)}return n}function Tg(e){let t=e.entries.length,n=e.entries.filter(a=>a.result),r=n.filter(a=>a.result.isError),o=n.length,s;if(r.length>0){let a=o-r.length,l=[];a>0&&l.push(`${a} ok`),l.push(`${r.length} error${r.length===1?"":"s"}`),s=l.join(", ")}else o===t?s=`${t} done`:o===0?s=`${t} running`:s=`${o}/${t} done`;return Ln(e.toolName+e.label)+p.dim(` \xD7${t} \u2014 ${s}`)}function CA(e){return Be.has(e.toolName)?e.toolName+"::"+e.toolInput:e.toolName}function f2(e){return Be.has(e)?TA:xA}function IA(e,t,n,r){return e>0||t?Bs([...n,!0],r):Bs(n,r)}function PA(e,t){return!Be.has(e.toolName)||e.headerEmitted!==!0?!1:(t.get(e.toolUseId)??[]).every(r=>r.kind==="tool"&&PA(r,t))}function xu(e,t,n,r=Z(),o=[],s=Ut(),i){let a=Bs(o,s),l=ya(a,s),c=e.filter(h=>h.kind==="text"),u=e.filter(h=>h.kind==="tool").filter(h=>!PA(h,t)),d=Eg(u),m=ha(d,ga),f=Tu(m,s);for(let{sibling:h,connector:b}of f){let y=p.dim(b),w=b===s.lastConnector;if(h.kind==="overflow")n.push(ke(l+y+p.dim(h.text),r));else if(h.kind==="group")n.push(ke(l+y+Tg(h),r));else if(h.kind==="resultSummary")n.push(ke(l+y+p.dim(h.summary),r));else{let S=h,x=t.get(S.toolUseId);if(Be.has(S.toolName)&&x&&x.length>0){S.headerEmitted?n.push(ke(l+y,r)):n.push(ke(l+y+S.prefix,r));let E=i??w;if(xu(x,t,n,r,[...o,E],s,w),S.thinkingTail){let A=ya(Bs([...o,E],s),s);n.push(ke(A+p.thinking("\u2307 "+Xe(S.thinkingTail)),r))}}else if(!(Be.has(S.toolName)&&S.headerEmitted))if(S.result){if(n.push(ke(l+y+S.prefix+p.dim(" \u2014 ")+Sr(S.result.isError)+" "+Nn(S.result,void 0,60,S.toolName),r)),S.diff&&!S.result.isError){let E=l+(w?s.spineClosed:p.dim(s.spine))+" ";for(let A of Fn(S.diff,"overlay",E))n.push(ke(A,r))}}else{n.push(ke(l+y+S.prefix,r));let E=l+(w?s.spineClosed:p.dim(s.spine))+" ";S.thinkingTail?n.push(ke(E+p.thinking("\u2307 "+Xe(S.thinkingTail)),r)):n.push(ke(E+p.dim(RA(S.toolName)),r))}}}let g=IA(u.length,!1,o,s);for(let h of c)for(let b of xg(h.text,g,s))n.push(ke(b,r))}function ba(e,t,n,r,o=Z(),s=[],i=Ut(),a){let l=Bs(s,i),c=ya(l,i),u=[],d=e.filter(w=>w.kind==="text"),m=e.filter(w=>w.kind==="tool"),f=Eg(m),g=ha(f,ga),h=kg(g,r),b=Tu(h,i);for(let{sibling:w,connector:S}of b){let x=p.dim(S),E=S===i.lastConnector;if(w.kind==="overflow")u.push(ke(c+x+p.dim(w.text),o));else if(w.kind==="resultSummary")u.push(ke(c+x+p.dim(w.summary),o));else if(w.kind==="group")u.push(ke(c+x+Tg(w),o));else{let A=w,T=t.get(A.toolUseId);if(Be.has(A.toolName)&&T&&T.length>0){if(A.headerEmitted){let M=A.toolInput?`${A.toolName} ${Xe(A.toolInput)}`:A.toolName;u.push(ke(c+x+p.dim("\u21B3 "+M),o))}else u.push(ke(c+x+A.prefix,o));let R=a??E;u.push(...ba(T,t,n,void 0,o,[...s,R],i,E))}else if(A.result){if(u.push(ke(c+x+A.prefix+p.dim(" \u2014 ")+Sr(A.result.isError)+" "+Nn(A.result,n,60,A.toolName),o)),A.diff&&!A.result.isError){let R=c+(E?i.spineClosed:p.dim(i.spine))+" ";for(let M of Fn(A.diff,"flush",R))u.push(ke(M,o))}}else u.push(ke(c+x+A.prefix,o))}}let y=IA(m.length,r!=null,s,i);for(let w of d)for(let S of xg(w.text,y,i))u.push(ke(S,o));return u}function wa(e,t,n,r,o=[]){let s=Ut(),i=t.filter(h=>h.kind==="tool"),l=i.filter(h=>h.result).reduce((h,b)=>h+(b.result.lineCount??0),0),c=[];i.length>ga&&(c.push(`${i.length} tools`),l>0&&c.push(`${l} lines`));let u=p.dim(s.spine.repeat(o.length)),d=o,m=p.dim(s.turnRoot),f=c.length>0?u+m+e.prefix+p.dim(" \u2014 "+c.join(" \xB7 ")):u+m+e.prefix,g=ba(t,n,r,e.agentResultSummary,Z(),d,s);return[f,...g].join(`
|
|
1755
|
-
`)}function Rg(e,t=[]){let n=Ut(),r=p.dim(n.spine.repeat(t.length)),o=p.dim(n.turnRoot);return r+o+e.prefix}function Sa(e,t,n,r,o=[]){let s=Ut(),i=o;return ba(t,n,r,e.agentResultSummary,Z(),i,s)}function Us(e,t,n){let r=[],o=Z();for(let s of t){let i=e.get(s);if(i.length===1){let a=i[0];if(a.result){if(r.push(" "+a.prefix+p.dim(" \u2014 ")+Sr(a.result.isError)+" "+Nn(a.result,n,60,a.toolName)),a.diff&&!a.result.isError)for(let l of Fn(a.diff,"flush"," "))r.push(ke(l,o))}else r.push(" "+a.prefix)}else{r.push(MA(s,i,n));let a=i.filter(c=>c.diff&&c.result&&!c.result.isError),l=a.length>1;for(let c of a){if(l){let u=Xe(c.toolInput),d=fa(u).trim()||u.trim();r.push(" "+p.dim(`\u2500\u2500 ${d} \u2500\u2500`))}for(let u of Fn(c.diff,"flush"," "))r.push(ke(u,o))}}}return r}function MA(e,t,n){let{color:r,glyph:o}=Ts(e),s=t.map(u=>fa(Xe(u.toolInput)).trim()),i=r(o+" ")+r.bold(e)+p.dim(` \xD7${t.length}`)+" "+p.toolArg(s.join(", ")),a=t.filter(u=>u.result),l=a.filter(u=>u.result.isError);if(l.length>0){let u=a.length-l.length,m=a.filter(g=>!g.result.isError).map(g=>g.result.lineCount).filter(g=>g!==void 0).reduce((g,h)=>g+h,0),f=[];return m>0&&f.push(`${m} lines`),u>0&&f.push(`${u} ok`),f.push(p.error(`${l.length} error${l.length>1?"s":""}`))," "+i+p.dim(" \u2014 ")+f.join(p.dim(", "))}let c=a.map(u=>u.result?.lineCount).filter(u=>u!==void 0);if(c.length===a.length&&c.length>0){if(c.every(m=>m===c[0]))return" "+i+p.dim(` \u2014 ${c[0]} lines each`);let d=c.reduce((m,f)=>m+f,0);return" "+i+p.dim(` \u2014 ${d} lines total`)}if(a.length>0){let u=a.map(d=>Nn(d.result,n,60,d.toolName));return" "+i+p.dim(" \u2014 ")+u.join(p.dim(", "))}return" "+i}function ke(e,t){return
|
|
1754
|
+
`)}constructor(t){this.stdout=t.stdout,this.stdin=t.stdin,this.onCancel=t.onCancel,this.onSoftStop=t.onSoftStop,this.onBackground=t.onBackground,this.onShiftTab=t.onShiftTab;let n=t.promptText;if(typeof n=="function")this.promptTextFn=n;else if(typeof n=="string")this.promptTextFn=()=>n;else{let r=" "+p.dim("\u23AF")+" ";this.promptTextFn=()=>r}this.history=t.history,this.autocompleteState=t.autocompleteState,this.formatInputBuffer=t.formatInputBuffer,this.scrollRegion=t.scrollRegion,this.spinnerController=new mu({captureMode:t.captureMode??!1,onTick:()=>this.repaint()}),this.onSubmit=t.onSubmit,this.anchorRow=t.anchorRow,this.declaredAnchorRow=t.anchorRow,this.ghostEngine=t.suggest?.engine,this.ghostGetContext=t.suggest?.getContext}isArmed(){return this.armed}setAnchorRow(t){this.anchorRow=t,this.declaredAnchorRow=t}suspendInput(){mA(this)}resumeInput(){fA(this)}setOnSubmit(t){this.onSubmit=t??void 0}setOnCancel(t){this.onCancel=t??void 0}getOnCancel(){return this.onCancel}setOnSoftStop(t){this.onSoftStop=t??void 0}setOnBackground(t){this.onBackground=t??void 0}setOnShiftTab(t){this.onShiftTab=t??void 0}enterPickerMode(t){ZR(this,t)}exitPickerMode(){QR(this)}repaintPicker(){eA(this)}setInputMode(t){tA(this,t)}getInputMode(){return nA(this)}async arm(){return gA(this)}disarm(){hA(this)}setOverlay(t){t!==this.overlay&&(this.debugLog("setOverlay",{framesLen:t.length,anchorRow:this.anchorRow??null}),this.overlay=t,this.repaint())}setSpinner(t){this.stdout.isTTY&&this.spinnerController.set(t)}commitAbove(t){GR(this,t)}clearCommittedBand(){ca(this)}flushResizeGhostErase(){qR(this)}resetCommittedBand(){zR(this)}repositionCommittedBand(t,n,r){JR(this,t,n,r)}getBuffer(){return{text:Ds(this,this.input.buffer),queued:this.queued}}getAttachments(){return[...this.attachments]}renderInputLine(){return HR(this)}updateAutocomplete(){yu(this)}updateGhost(){NR(this)}renderDropdownRows(){return WR(this)}renderHintRow(){return KR(this)}repaint(){XR(this)}resetState(){this.overlay="",this.input=j.seed(""),this.queued=!1,this.canceled=!1,this.backgrounded=!1,this.softStopped=!1,this.activeGhost=null,this.anchorRow=void 0,this.hasCommitted=!1,this.clearCommittedBand(),this.commitInFlight=!1,this.pendingResizeErase=null,this.lastKnownRows=0,this.pickerController=null,this.inputMode="streaming",this.attachments=[],this.pasting=!1,this.pasteStartBufferLen=0,this.pasteStartCursor=0,this.pasteRegistry.clear(),this.clipboardFailureMsg=null,this.autocompleteState?.reset(),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.resizeImmediateUnsub&&(this.resizeImmediateUnsub(),this.resizeImmediateUnsub=null)}applyEdit(t){return t===this.input?!1:(this.input=t,this.queued=!1,this.pasting||(this.updateAutocomplete(),this.updateGhost(),this.repaint()),!0)}applyDropdownSelection(){return BR(this)}applyGhostAccept(){return UR(this)}};import WG from"chalk";var KG=/(?<=\s|^)(\/[A-Za-z][\w:-]*)(?=\s|$)/g,GG=/(?<=\s|^)(@[~\w./-]*)(?=\s|$)/g,zG=/\[Pasted text #[0-9a-f]+ \+\d+ (?:lines|chars)\]/g,yA={mint:p.mint};function qG(e){let t=yA[e];if(t)return t;let n=e.lastIndexOf(":");if(n>=0){let r=e.slice(n+1),o=yA[r];if(o)return o}return null}function wr(e,t){return WG.level===0?e:e.replace(KG,o=>{let s=o.slice(1);return t.has(s)?(qG(s)??p.brand)(o):p.meta(o)}).replace(GG,o=>p.fileRef(o)).replace(zG,o=>p.meta(o))}z();import{pathToFileURL as JG}from"node:url";var YG="\x1B]8;;\x1B\\",VG=new Set(["iterm2","wezterm","kitty","vscode","ghostty","windows-terminal","konsole","gnome-terminal","alacritty"]),XG=5e3;function ZG(e=process.env,t=process.stdout.isTTY===!0){let n=e.FORCE_HYPERLINK;if(n!==void 0&&n.length>0)return n!=="0"&&n.toLowerCase()!=="false";if(!t||e.CI!==void 0&&e.CI.length>0)return!1;let r=oa(e);if(!VG.has(r))return!1;if(r==="gnome-terminal"&&e.VTE_VERSION!==void 0){let o=Number.parseInt(e.VTE_VERSION,10);if(!Number.isFinite(o)||o<XG)return!1}return!0}var yg;function vu(){return yg===void 0&&(yg=ZG()),yg}function QG(e,t){return`\x1B]8;;${t}\x1B\\${e}${YG}`}function ku(e,t){try{return QG(e,JG(t).href)}catch{return e}}var bA=/[\x00-\x1F\x7F-\x9F]/g;function Xe(e){return Ie(e).replace(bA," ").replace(/ {2,}/g," ").trim()}function bg(e){return Ie(e).replace(bA," ")}function fa(e){let t=/[a-z][a-z0-9+.-]*:\/\/[^\s<>\"`]+/gi,n="",r=0;for(let o of e.matchAll(t)){let s=o[0]??"",i=o.index??r;n+=wA(e.slice(r,i)),n+=s,r=i+s.length}return n+=wA(e.slice(r)),n}function wA(e){let t=vu();return e.replace(/\/(?:[^/\s,)]+\/){2,}([^/\s,)]+)/g,(n,r)=>t?ku(r,n):r)}function e2(e){let t=/^(\s*[("]?\s*)cd\s+\S+\s+&&\s+(?!cd\s)(.+)$/.exec(e);return t?(t[1]??"")+(t[2]??""):e}var SA=60;function wg(e,t){let n=e.trim().replace(/^\((.*)\)$/s,"$1"),r;try{r=JSON.parse(n)}catch{return e}if(!r||typeof r!="object")return e;let o=r;for(let s of t){let i=o[s];if(typeof i=="string"&&i.length>0){let a=Xe(i);if(a.length===0)continue;return`(${a.length>SA?ie(a,SA,"\u2026"):a})`}}return e}function vA(e,t){if(e==="bash"||e==="Bash")return e2(t);if(e==="compose"||e==="Compose"){let n=t.trim().replace(/^\((.*)\)$/s,"$1");try{let r=JSON.parse(n);if(r&&typeof r=="object"){let o=Array.isArray(r.nodes)?r.nodes.length:void 0,s=Array.isArray(r.edges)?r.edges.length:0;if(o!==void 0){let i=`${o} node${o===1?"":"s"}`,a=s>0?`, ${s} edge${s===1?"":"s"}`:"";return`(${i}${a})`}}}catch{}}return e==="agent"||e==="Agent"?wg(t,["id_prefix","prompt"]):e==="Task"?wg(t,["description","prompt"]):e==="skill"||e==="Skill"?wg(t,["name","arguments"]):e==="ask_question"?t2(t):t}function t2(e){let t=e.trim().replace(/^\((.*)\)$/s,"$1");try{let n=JSON.parse(t);if(!n||typeof n!="object")return e;let r=n,o=typeof r.type=="string"?r.type:"text";if(o==="choice"||o==="multi_choice"){let s=r.choices,i=Array.isArray(s)?s.length:0;return i>0?`(${o}: ${i} option${i===1?"":"s"})`:`(${o})`}return`(${o})`}catch{return e}}function n2(e){return e.replace(/[\r\n]+/g," ")}var r2={"(":")","{":"}","[":"]"};function kA(e,t,n="\u2026"){let r=e.charAt(0),o=r2[r];return!(o&&e.endsWith(o)&&e.length>=2)||q(e)<=t?ie(e,t,n):t<3?t>=2?r+o:ie(e,t,n):ie(e,t-1,n)+o}function Ln(e,t){let n=/^([A-Za-z_][A-Za-z0-9_]*)(.*)$/s.exec(e);if(n){let r=n[1],o=fa(vA(r,n[2]??"")),s=sr(r),{color:i,glyph:a}=Ts(r),l=zm(s),c=l?` [${l}]`:"";if(t!==void 0){let d=(a+" ").length+r.length+c.length,m=Math.max(1,t-d);o=kA(o,m)}o=n2(o);let u=i(a+" ")+i.bold(r)+p.toolArg(o);return l?u+p.dim(c):u}return p.chrome("\u25CF ")+p.toolArg(e)}z();var EA=8,Eu=30;function o2(){let e=v.AFK_DIFF_LINES;if(e===void 0)return Eu;let t=e.trim();if(!/^\d+$/.test(t))return Eu;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:Eu}function s2(){let e=v.AFK_SHOW_DIFFS;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"}function i2(e){let t=p.diffAdd(`+${e.addedLines}`),n=p.diffRemove(`-${e.removedLines}`),r=e.hunks.length,o=p.dim(`across ${r} hunk${r===1?"":"s"}`);return`${t} ${n} ${o}`}var a2=/[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;function l2(e){let t=Ie(e.text).replace(a2,"");return e.kind==="+"?p.diffAdd("+ "+t):e.kind==="-"?p.diffRemove("- "+t):p.dim(" "+t)}var vg=new WeakMap;function Fn(e,t,n){if(s2())return[];if(e.hunks.length===0)return[];let r=t==="overlay"?EA:o2(),o=t+"|"+n+"|"+r,s=vg.get(e);if(s!==void 0){let f=s.get(o);if(f!==void 0)return f}let i=[];i.push(n+i2(e));let a=[];for(let f of e.hunks){let g=`@@ -${f.oldStart},${f.oldLines} +${f.newStart},${f.newLines} @@`;a.push({kind:"header",text:p.diffHunk(g)});for(let h of f.lines)a.push({kind:"body",text:l2(h)})}if(r===0){for(let f of a)i.push(n+f.text);return Sg(e,o,i),i}let l=0;for(let f of a)f.kind==="body"&&l++;if(l<=r){for(let f of a)i.push(n+f.text);return Sg(e,o,i),i}let c=0;for(let f of a)f.kind==="header"?i.push(n+f.text):c<r&&(i.push(n+f.text),c++);let u=l-r,d=`line${u===1?"":"s"}`,m=t==="flush"?" (set AFK_DIFF_LINES=0 to expand)":"";return i.push(n+p.dim(`\u2026 +${u} more diff ${d}${m}`)),Sg(e,o,i),i}function Sg(e,t,n){let r=vg.get(e);r===void 0&&(r=new Map,vg.set(e,r)),r.set(t,n)}var c2=p.success("\u2713"),u2=p.error("\u2717");function Sr(e){return e?u2:c2}var ga=3,TA=2,xA=3;function RA(e){switch(sr(e)){case"read":return"Reading\u2026";case"write":return"Writing\u2026";case"web":return"Fetching\u2026";case"shell":return"Running\u2026";default:return"Running\u2026"}}function d2(e,t){return e?e==="grep"||e==="Grep"?t===1?"match":"matches":e==="glob"||e==="Glob"?t===1?"path":"paths":t===1?"line":"lines":t===1?"line":"lines"}function Nn(e,t,n=60,r){let o=e.isError?p.error:p.dim,s=t??v.HOME??"___NOHOME___";if(e.display!==void 0&&!e.isError)return o(e.display);if(e.persistedPath){let a=e.persistedPath.startsWith(s)?"~"+e.persistedPath.slice(s.length):e.persistedPath,l=vu()?ku(a,e.persistedPath):a;return o(`saved \u2192 ${l}`)}if(e.lineCount!==void 0&&e.lineCount>1)return o(`${e.lineCount} ${d2(r,e.lineCount)}`);let i=e.content.length>n?e.content.slice(0,n-3)+"\u2026":e.content;return o(Xe(i))}z();function ha(e,t){if(e.length<=t)return e;let n=e.slice(0,t),r=e.slice(t),o=_A(r);return[...n,{kind:"overflow",count:r.length,text:o}]}function p2(e,t){return t<=1||e.endsWith("s")||/(sh|ch|x|z)$/i.test(e)?e:e+"s"}var m2=5,AA=60;function _A(e){let t=new Map,n=0;for(let s of e)s.kind==="group"?(t.set(s.toolName,(t.get(s.toolName)??0)+s.entries.length),n+=s.entries.length):(t.set(s.toolName,(t.get(s.toolName)??0)+1),n+=1);if(n===0)return"";if(e.length>0&&e.every(s=>Be.has(s.toolName))&&new Set(e.map(s=>s.toolName)).size===1){let s=[],i=!1;for(let a of e){let c=(a.kind==="group"?a.label:a.toolInput).trim();if(!c.startsWith("(")||!c.endsWith(")")){i=!0;break}let u=c.slice(1,-1),d=Xe(u);if(!d){i=!0;break}let m=d.length>AA?d.slice(0,AA-1)+"\u2026":d,f=a.kind==="group"?a.entries.length:1;s.push({display:m,entries:f})}if(!i&&s.length>0){let a=s.slice(0,m2),l=a.map(({display:m,entries:f})=>f>1?`${m} \xD7${f}`:m),c=a.reduce((m,f)=>m+f.entries,0),u=n-c,d=l.join(", ")+(u>0?` (+${u})`:"");return`\u2026 +${n} more: ${d}`}}let o=[];for(let[s,i]of t)o.push(`${i} ${p2(s,i)}`);return`\u2026 +${n} (${o.join(", ")})`}function Tu(e,t=Ut()){return e.map((n,r)=>({sibling:n,connector:r===e.length-1?t.lastConnector:t.midConnector}))}function kg(e,t){return t?[...e,{kind:"resultSummary",summary:t}]:e}function Eg(e){if(e.length===0)return[];let t=new Map;for(let o of e){let s=CA(o),i=t.get(s);i||(i=[],t.set(s,i)),i.push(o)}let n=[],r=new Set;for(let o of e){let s=CA(o),i=t.get(s);i.length>=f2(o.toolName)?r.has(s)||(n.push({kind:"group",toolName:o.toolName,label:Be.has(o.toolName)?o.toolInput:"",entries:i}),r.add(s)):n.push(o)}return n}function Tg(e){let t=e.entries.length,n=e.entries.filter(a=>a.result),r=n.filter(a=>a.result.isError),o=n.length,s;if(r.length>0){let a=o-r.length,l=[];a>0&&l.push(`${a} ok`),l.push(`${r.length} error${r.length===1?"":"s"}`),s=l.join(", ")}else o===t?s=`${t} done`:o===0?s=`${t} running`:s=`${o}/${t} done`;return Ln(e.toolName+e.label)+p.dim(` \xD7${t} \u2014 ${s}`)}function CA(e){return Be.has(e.toolName)?e.toolName+"::"+e.toolInput:e.toolName}function f2(e){return Be.has(e)?TA:xA}function IA(e,t,n,r){return e>0||t?Bs([...n,!0],r):Bs(n,r)}function PA(e,t){return!Be.has(e.toolName)||e.headerEmitted!==!0?!1:(t.get(e.toolUseId)??[]).every(r=>r.kind==="tool"&&PA(r,t))}function xu(e,t,n,r=Z(),o=[],s=Ut(),i){let a=Bs(o,s),l=ya(a,s),c=e.filter(h=>h.kind==="text"),u=e.filter(h=>h.kind==="tool").filter(h=>!PA(h,t)),d=Eg(u),m=ha(d,ga),f=Tu(m,s);for(let{sibling:h,connector:b}of f){let y=p.dim(b),w=b===s.lastConnector;if(h.kind==="overflow")n.push(ke(l+y+p.dim(h.text),r));else if(h.kind==="group")n.push(ke(l+y+Tg(h),r));else if(h.kind==="resultSummary")n.push(ke(l+y+p.dim(h.summary),r));else{let S=h,x=t.get(S.toolUseId);if(Be.has(S.toolName)&&x&&x.length>0){S.headerEmitted?n.push(ke(l+y,r)):n.push(ke(l+y+S.prefix,r));let E=i??w;if(xu(x,t,n,r,[...o,E],s,w),S.thinkingTail){let A=ya(Bs([...o,E],s),s);n.push(ke(A+p.thinking("\u2307 "+Xe(S.thinkingTail)),r))}}else if(!(Be.has(S.toolName)&&S.headerEmitted))if(S.result){if(n.push(ke(l+y+S.prefix+p.dim(" \u2014 ")+Sr(S.result.isError)+" "+Nn(S.result,void 0,60,S.toolName),r)),S.diff&&!S.result.isError){let E=l+(w?s.spineClosed:p.dim(s.spine))+" ";for(let A of Fn(S.diff,"overlay",E))n.push(ke(A,r))}}else{n.push(ke(l+y+S.prefix,r));let E=l+(w?s.spineClosed:p.dim(s.spine))+" ";S.thinkingTail?n.push(ke(E+p.thinking("\u2307 "+Xe(S.thinkingTail)),r)):n.push(ke(E+p.dim(RA(S.toolName)),r))}}}let g=IA(u.length,!1,o,s);for(let h of c)for(let b of xg(h.text,g,s))n.push(ke(b,r))}function ba(e,t,n,r,o=Z(),s=[],i=Ut(),a){let l=Bs(s,i),c=ya(l,i),u=[],d=e.filter(w=>w.kind==="text"),m=e.filter(w=>w.kind==="tool"),f=Eg(m),g=ha(f,ga),h=kg(g,r),b=Tu(h,i);for(let{sibling:w,connector:S}of b){let x=p.dim(S),E=S===i.lastConnector;if(w.kind==="overflow")u.push(ke(c+x+p.dim(w.text),o));else if(w.kind==="resultSummary")u.push(ke(c+x+p.dim(w.summary),o));else if(w.kind==="group")u.push(ke(c+x+Tg(w),o));else{let A=w,T=t.get(A.toolUseId);if(Be.has(A.toolName)&&T&&T.length>0){if(A.headerEmitted){let M=A.toolInput?`${A.toolName} ${Xe(A.toolInput)}`:A.toolName;u.push(ke(c+x+p.dim("\u21B3 "+M),o))}else u.push(ke(c+x+A.prefix,o));let R=a??E;u.push(...ba(T,t,n,void 0,o,[...s,R],i,E))}else if(A.result){if(u.push(ke(c+x+A.prefix+p.dim(" \u2014 ")+Sr(A.result.isError)+" "+Nn(A.result,n,60,A.toolName),o)),A.diff&&!A.result.isError){let R=c+(E?i.spineClosed:p.dim(i.spine))+" ";for(let M of Fn(A.diff,"flush",R))u.push(ke(M,o))}}else u.push(ke(c+x+A.prefix,o))}}let y=IA(m.length,r!=null,s,i);for(let w of d)for(let S of xg(w.text,y,i))u.push(ke(S,o));return u}function wa(e,t,n,r,o=[]){let s=Ut(),i=t.filter(h=>h.kind==="tool"),l=i.filter(h=>h.result).reduce((h,b)=>h+(b.result.lineCount??0),0),c=[];i.length>ga&&(c.push(`${i.length} tools`),l>0&&c.push(`${l} lines`));let u=p.dim(s.spine.repeat(o.length)),d=o,m=p.dim(s.turnRoot),f=c.length>0?u+m+e.prefix+p.dim(" \u2014 "+c.join(" \xB7 ")):u+m+e.prefix,g=ba(t,n,r,e.agentResultSummary,Z(),d,s);return[f,...g].join(`
|
|
1755
|
+
`)}function Rg(e,t=[]){let n=Ut(),r=p.dim(n.spine.repeat(t.length)),o=p.dim(n.turnRoot);return r+o+e.prefix}function Sa(e,t,n,r,o=[]){let s=Ut(),i=o;return ba(t,n,r,e.agentResultSummary,Z(),i,s)}function Us(e,t,n){let r=[],o=Z();for(let s of t){let i=e.get(s);if(i.length===1){let a=i[0];if(a.result){if(r.push(" "+a.prefix+p.dim(" \u2014 ")+Sr(a.result.isError)+" "+Nn(a.result,n,60,a.toolName)),a.diff&&!a.result.isError)for(let l of Fn(a.diff,"flush"," "))r.push(ke(l,o))}else r.push(" "+a.prefix)}else{r.push(MA(s,i,n));let a=i.filter(c=>c.diff&&c.result&&!c.result.isError),l=a.length>1;for(let c of a){if(l){let u=Xe(c.toolInput),d=fa(u).trim()||u.trim();r.push(" "+p.dim(`\u2500\u2500 ${d} \u2500\u2500`))}for(let u of Fn(c.diff,"flush"," "))r.push(ke(u,o))}}}return r}function MA(e,t,n){let{color:r,glyph:o}=Ts(e),s=t.map(u=>fa(Xe(u.toolInput)).trim()),i=r(o+" ")+r.bold(e)+p.dim(` \xD7${t.length}`)+" "+p.toolArg(s.join(", ")),a=t.filter(u=>u.result),l=a.filter(u=>u.result.isError);if(l.length>0){let u=a.length-l.length,m=a.filter(g=>!g.result.isError).map(g=>g.result.lineCount).filter(g=>g!==void 0).reduce((g,h)=>g+h,0),f=[];return m>0&&f.push(`${m} lines`),u>0&&f.push(`${u} ok`),f.push(p.error(`${l.length} error${l.length>1?"s":""}`))," "+i+p.dim(" \u2014 ")+f.join(p.dim(", "))}let c=a.map(u=>u.result?.lineCount).filter(u=>u!==void 0);if(c.length===a.length&&c.length>0){if(c.every(m=>m===c[0]))return" "+i+p.dim(` \u2014 ${c[0]} lines each`);let d=c.reduce((m,f)=>m+f,0);return" "+i+p.dim(` \u2014 ${d} lines total`)}if(a.length>0){let u=a.map(d=>Nn(d.result,n,60,d.toolName));return" "+i+p.dim(" \u2014 ")+u.join(p.dim(", "))}return" "+i}function ke(e,t){return ie(e,t)}var Ag=Object.freeze({spine:"\u2502 ",spineClosed:" ",lead:" ",turnRoot:"\u25C9 ",midConnector:"\u251C\u2500 ",lastConnector:"\u2570\u2500 ",textPrefix:"\u2502 "}),g2=Object.freeze({spine:"| ",spineClosed:" ",lead:" ",turnRoot:"o ",midConnector:"+- ",lastConnector:"\\- ",textPrefix:"| "}),qye=Ag.midConnector,Jye=Ag.lastConnector;function Ut(){let e=v.AGENT_AFK_ASCII;return e&&/^(1|true|yes)$/i.test(e)?g2:Ag}function Bs(e,t){let n="";for(let r of e)n+=r?t.spineClosed:t.spine;return n+=t.spine,n}function ya(e,t){let n="";for(let r=0;r<e.length;r+=2){let o=e.slice(r,r+2);n+=o===t.spine?p.dim(o):o}return n}function xg(e,t,n){if(!e||!e.trim())return[];let r=p.dim(n.textPrefix),o=Math.max(1,Z()-t.length-2-2),s=ya(t,n),i=[];for(let a of e.split(`
|
|
1756
1756
|
`)){let l=bg(a),c=ue(l,o);for(let u of c.split(`
|
|
1757
|
-
`))i.push(s+r+u)}return i}var OA=6,va=class{entries=new Map;order=[];agentIdStack=[];addStart(t,n,r){let o=Ie(r),s=Ln(n+o),i=this.agentIdStack.at(-1)??void 0,a={kind:"tool",toolUseId:t,toolName:n,toolInput:o,prefix:s,...i!==void 0?{agentContext:i}:{}};this.entries.set(t,a),this.order.push(t),or.has(n)&&this.agentIdStack.push(t)}addStartWithAgentContext(t,n,r,o,s){let i=Ie(r),a=this.entries.get(t);if(a?.kind==="tool"){a.toolInput=i,a.prefix=Ln(n+i,s),o!==void 0&&(a.agentContext=o);return}let l=Ln(n+i,s),c={kind:"tool",toolUseId:t,toolName:n,toolInput:i,prefix:l,...o!==void 0?{agentContext:o}:{}};this.entries.set(t,c),this.order.push(t)}mergeAgentLabel(t,n,r){let o=this.entries.get(t);if(o?.kind!=="tool"||!or.has(o.toolName)||o.toolName==="Agent")return!1;let i=`(${Ie(n)})`;return o.toolName="Agent",o.toolInput=i,o.prefix=Ln("Agent"+i,r),!0}setAgentContext(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.agentContext:r.agentContext=n)}setAgentResultSummary(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.agentResultSummary=n)}setThinkingTail(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.thinkingTail:r.thinkingTail=n)}addResult(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.result=n),this.agentIdStack.at(-1)===t&&this.agentIdStack.pop()}addDiff(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.diff=n)}upsertTextChild(t,n,r){let o=this.entries.get(t);if(o?.kind==="text"){o.text=r,o.agentContext=n;return}let s={kind:"text",toolUseId:t,text:r,agentContext:n};this.entries.set(t,s),this.order.push(t)}removeTextChildrenUnder(t){let n=[];for(let[r,o]of this.entries)o.kind==="text"&&o.agentContext===t&&n.push(r);for(let r of n)this.entries.delete(r);if(n.length>0){let r=new Set(n);this.order=this.order.filter(o=>!r.has(o))}}hasPending(){return this.entries.size>0}hasEntry(t){return this.entries.get(t)?.kind==="tool"}findLastSkillEntryId(){for(let t=this.order.length-1;t>=0;t--){let n=this.order[t],r=this.entries.get(n);if(r?.kind==="tool"&&Bi.has(r.toolName))return n}}getOverlay(){let t=this.buildChildMap(),n=[],r=Ut(),o=Z(),s=d=>
|
|
1757
|
+
`))i.push(s+r+u)}return i}var OA=6,va=class{entries=new Map;order=[];agentIdStack=[];addStart(t,n,r){let o=Ie(r),s=Ln(n+o),i=this.agentIdStack.at(-1)??void 0,a={kind:"tool",toolUseId:t,toolName:n,toolInput:o,prefix:s,...i!==void 0?{agentContext:i}:{}};this.entries.set(t,a),this.order.push(t),or.has(n)&&this.agentIdStack.push(t)}addStartWithAgentContext(t,n,r,o,s){let i=Ie(r),a=this.entries.get(t);if(a?.kind==="tool"){a.toolInput=i,a.prefix=Ln(n+i,s),o!==void 0&&(a.agentContext=o);return}let l=Ln(n+i,s),c={kind:"tool",toolUseId:t,toolName:n,toolInput:i,prefix:l,...o!==void 0?{agentContext:o}:{}};this.entries.set(t,c),this.order.push(t)}mergeAgentLabel(t,n,r){let o=this.entries.get(t);if(o?.kind!=="tool"||!or.has(o.toolName)||o.toolName==="Agent")return!1;let i=`(${Ie(n)})`;return o.toolName="Agent",o.toolInput=i,o.prefix=Ln("Agent"+i,r),!0}setAgentContext(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.agentContext:r.agentContext=n)}setAgentResultSummary(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.agentResultSummary=n)}setThinkingTail(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(n===void 0?delete r.thinkingTail:r.thinkingTail=n)}addResult(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.result=n),this.agentIdStack.at(-1)===t&&this.agentIdStack.pop()}addDiff(t,n){let r=this.entries.get(t);r?.kind==="tool"&&(r.diff=n)}upsertTextChild(t,n,r){let o=this.entries.get(t);if(o?.kind==="text"){o.text=r,o.agentContext=n;return}let s={kind:"text",toolUseId:t,text:r,agentContext:n};this.entries.set(t,s),this.order.push(t)}removeTextChildrenUnder(t){let n=[];for(let[r,o]of this.entries)o.kind==="text"&&o.agentContext===t&&n.push(r);for(let r of n)this.entries.delete(r);if(n.length>0){let r=new Set(n);this.order=this.order.filter(o=>!r.has(o))}}hasPending(){return this.entries.size>0}hasEntry(t){return this.entries.get(t)?.kind==="tool"}findLastSkillEntryId(){for(let t=this.order.length-1;t>=0;t--){let n=this.order[t],r=this.entries.get(n);if(r?.kind==="tool"&&Bi.has(r.toolName))return n}}getOverlay(){let t=this.buildChildMap(),n=[],r=Ut(),o=Z(),s=d=>ie(d,o),i=[];for(let d of this.order){let m=this.entries.get(d);!m||m.kind!=="tool"||m.agentContext||i.push(m)}let a=i,l=0;if(i.length>OA){let d=i.filter(h=>!h.result),m=i.filter(h=>h.result),f=Math.max(0,OA-d.length),g=new Set(m.slice(-f));l=m.length-g.size,a=i.filter(h=>!h.result||g.has(h))}let u=a.some(d=>Be.has(d.toolName))?p.dim(r.turnRoot):" ";for(let d of a){let m=t.get(d.toolUseId);if(Be.has(d.toolName)&&m&&m.length>0)d.headerEmitted?n.push(s(p.dim(r.turnRoot))):n.push(s(p.dim(r.turnRoot)+d.prefix)),xu(m,t,n,o,void 0,r),d.thinkingTail&&n.push(s(p.dim(r.spine)+p.thinking("\u2307 "+Xe(d.thinkingTail))));else if(!(Be.has(d.toolName)&&d.headerEmitted))if(Be.has(d.toolName))d.result?n.push(s(p.dim(r.turnRoot)+d.prefix+p.dim(" \u2014 ")+Sr(d.result.isError)+" "+Nn(d.result,void 0,60,d.toolName))):n.push(s(p.dim(r.turnRoot)+d.prefix+p.dim(" \u2026"))),d.thinkingTail&&n.push(s(p.dim(r.spine)+p.thinking("\u2307 "+Xe(d.thinkingTail))));else if(d.result){if(n.push(s(u+d.prefix+p.dim(" \u2014 ")+Sr(d.result.isError)+" "+Nn(d.result,void 0,60,d.toolName))),d.diff&&!d.result.isError)for(let f of Fn(d.diff,"overlay"," "))n.push(s(f))}else n.push(s(u+d.prefix+p.dim(" \u2026"))),d.thinkingTail&&n.push(s(p.dim(r.spine)+p.thinking("\u2307 "+Xe(d.thinkingTail))))}return l>0&&n.push(s(" "+p.dim(`\u2026 +${l} done`))),n.join(`
|
|
1758
1758
|
`)}ancestorDepthOf(t){let n=new Set([t]),r=0,o=t,s=32;for(;o!==void 0&&r<s;){let i=this.entries.get(o);if(!i||i.kind!=="tool")break;let a=i.agentContext;if(a===void 0||n.has(a))break;n.add(a);let l=this.entries.get(a);if(!l||l.kind!=="tool")break;r+=1,o=a}return r}flushSource(t,n){let r=this.entries.get(t);if(!r||r.kind!=="tool")return[];let o=Array.from({length:this.ancestorDepthOf(t)},()=>!1),s=[];{let m=[],f=new Set([t]),g=r.agentContext;for(;g!==void 0&&!f.has(g);){f.add(g);let h=this.entries.get(g);if(!h||h.kind!=="tool")break;m.push({entry:h,depth:this.ancestorDepthOf(h.toolUseId)}),g=h.agentContext}m.reverse();for(let{entry:h,depth:b}of m)h.headerEmitted||(s.push(Rg(h,Array.from({length:b},()=>!1))),h.headerEmitted=!0)}let i=new Set([t]),a=[t];for(;a.length>0;){let m=a.shift();for(let[f,g]of this.entries){if(i.has(f))continue;(g.kind==="tool",g.agentContext)===m&&(i.add(f),g.kind==="tool"&&a.push(f))}}let l=new Map;for(let m of this.order){if(!i.has(m))continue;let f=this.entries.get(m);if(!f)continue;let g=(f.kind==="tool",f.agentContext);if(!g)continue;let h=l.get(g);h||(h=[],l.set(g,h)),h.push(f)}let c=l.get(r.toolUseId)??[],u=r.headerEmitted?Sa(r,c,l,n,o).join(`
|
|
1759
1759
|
`):wa(r,c,l,n,o);for(let m of i)this.entries.delete(m);this.order=this.order.filter(m=>!i.has(m));let d=u===""?[]:[u];return[...s,...d]}flushCompletedRoots(t){if(this.entries.size===0)return[];let n=this.buildChildMap(),r=[];for(let c of this.order){let u=this.entries.get(c);!u||u.kind!=="tool"||u.agentContext||u.result!==void 0&&r.push(c)}if(r.length===0)return[];let o=[],s=new Map,i=[];for(let c of r){let u=this.entries.get(c);if(!u||u.kind!=="tool")continue;let d=n.get(u.toolUseId);if(Be.has(u.toolName))if(o.push(...Us(s,i,t)),s.clear(),i.length=0,u.headerEmitted){let m=Sa(u,d??[],n,t,[]);o.push(...m)}else o.push(wa(u,d??[],n,t));else s.has(u.toolName)||(s.set(u.toolName,[]),i.push(u.toolName)),s.get(u.toolName).push(u)}o.push(...Us(s,i,t));let a=new Set(r),l=[...r];for(;l.length>0;){let c=l.shift();for(let[u,d]of this.entries){if(a.has(u))continue;(d.kind==="tool",d.agentContext)===c&&(a.add(u),d.kind==="tool"&&l.push(u))}}for(let c of a)this.entries.delete(c);return this.order=this.order.filter(c=>!a.has(c)),o}flush(t){if(this.entries.size===0)return[];let n=this.buildChildMap(),r=[];for(let a of this.order){let l=this.entries.get(a);!l||l.kind!=="tool"||l.agentContext||r.push(a)}let o=[],s=new Map,i=[];for(let a of r){let l=this.entries.get(a);if(!l||l.kind!=="tool")continue;let c=n.get(l.toolUseId);if(Be.has(l.toolName))if(o.push(...Us(s,i,t)),s.clear(),i.length=0,l.headerEmitted){let u=Sa(l,c??[],n,t,[]);o.push(...u)}else o.push(wa(l,c??[],n,t));else s.has(l.toolName)||(s.set(l.toolName,[]),i.push(l.toolName)),s.get(l.toolName).push(l)}return o.push(...Us(s,i,t)),this.entries.clear(),this.order=[],this.agentIdStack=[],o}buildChildMap(){let t=new Map;for(let n of this.order){let r=this.entries.get(n);if(!r)continue;let o=(r.kind==="tool",r.agentContext);if(!o)continue;let s=t.get(o);s||(s=[],t.set(o,s)),s.push(r)}return t}};Oe();function _g(e,t){let n=Math.max(0,e),r=n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`,o=Math.ceil(t/4);return` ${p.thinking("\u25C6 thought for "+r+" \xB7 "+o+" tok")}`}var js=class{buffer="";startedAt=null;endedAt=null;hasEmitted=!1;committedUpTo=0;push(t){this.hasEmitted||(this.buffer+=t,this.startedAt||(this.startedAt=Date.now()))}markEnded(){this.endedAt===null&&this.startedAt!==null&&(this.endedAt=Date.now())}isActive(){return!this.hasEmitted}hasBufferedContent(){return this.buffer.trim().length>0}peek(){return this.buffer}consume(){return this.hasEmitted=!0,this.buffer}peekPhase(){return this.buffer.slice(this.committedUpTo)}drainPhase(){let t=this.buffer.slice(this.committedUpTo);return this.committedUpTo=this.buffer.length,t}collapse(){if(this.hasEmitted||!this.startedAt)return!this.startedAt&&!this.hasEmitted&&Je()&&console.error("[afk:thinking] collapse() short-circuited: no thinking chunks received this turn. Model may not support extended thinking, or API ignored the thinking parameter."),null;this.hasEmitted=!0;let t=this.endedAt??Date.now();return _g(t-this.startedAt,this.buffer.length)}inlineSummary(){if(!this.startedAt||!this.hasBufferedContent())return null;let t=this.endedAt??Date.now(),n=Math.max(0,t-this.startedAt),r=n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`,o=Math.ceil(this.buffer.length/4);return`thought ${r} \xB7 ${o} tok`}};var Cg="__main__";function DA(e){let t={startedAt:Date.now(),lastEventAt:Date.now(),stats:{tokens:0,toolUses:0},contentBuffer:"",done:!1,errored:!1,stalledTicks:0};return e!==void 0&&(t.agentType=e),t}function Hs(e,t){return{type:"tool_result",toolUseId:"synthetic",content:e,isError:t}}function LA(e){let t=["Done"],n=[];e.stats.toolUses&&n.push(`${e.stats.toolUses} tool${e.stats.toolUses===1?"":"s"}`),e.stats.tokens&&n.push(`${se(e.stats.tokens)} tok`);let r=e.responseMetadata?.durationMs,o=Date.now()-e.startedAt;typeof r=="number"&&(n.push(oe(r)),o>r*1.5&&o-r>=1e3&&n.push(`${oe(o)} wall`)),n.length===0&&o>0&&n.push(oe(o));let s=e.thinkingLane?.inlineSummary();return s&&n.push(s),n.length>0&&t.push(`(${n.join(" \xB7 ")})`),t.join(" ")}function Ig(e){let t=Math.max(1,Z()-2);return Math.max(1,t-e)}function FA(e,t){return h2(e)?Pt(e,{maxWidth:t}):ue(e,t)}function NA(e,t,n){if(!n||!e.trim())return"";let r;return UA(e)?r=`
|
|
1760
1760
|
\u258D streaming code\u2026
|
|
@@ -1795,7 +1795,7 @@ An AFK.md already exists at \`${n}\`. Read it first \u2014 then update it with a
|
|
|
1795
1795
|
A CLAUDE.md exists at \`${r}\`. Read it and incorporate relevant context (commands, conventions, architecture) into the AFK.md. Don't duplicate \u2014 adapt.`),t.trim()){let a=t.replace("--force","").trim();a&&(s+=`
|
|
1796
1796
|
|
|
1797
1797
|
## Additional context from user
|
|
1798
|
-
${a}`)}o.push({type:"text",text:s});let i=Du(e,{skillName:"init",out:zs(),onCancel:()=>{e.session.current.interrupt().catch(()=>{})}});try{await i.arm(),await Wo(i.sink,async()=>{for await(let a of e.session.current.sendMessageStream(o))i.sink(a)})}catch(a){e.out.line(),e.out.error(`init failed: ${a instanceof Error?a.message:String(a)}`)}finally{await i.dispose()}return"continue"}};import i_ from"chalk";Xm();var jg=new Map;function a_(e,t){let n=jg.get(e);if(n){if(n.glyph===t.glyph&&n.color===t.color&&n.inFlightVerb===t.inFlightVerb)return;throw new Error(`Trusted skill "${e}" already registered with different config`)}jg.set(e,t),Hv(e)}function Lu(e){return jg.get(e)}function P2(e){return(e/1e3).toFixed(1)+"s"}function l_(e,t){let n=Lu(e.skillName),r=P2(e.durationMs);if(!n){let s=`[${e.skillName} \xB7 ${r}]`;return qs(s,t?.columns)}if(t?.isTTY!==!1){let s;if(e.claimsTotal!==void 0){let a=e.claimsTotal===e.claimsConfirmed&&e.claimsRefuted===void 0&&e.claimsInconclusive===void 0,l;if(a)l=`${e.claimsTotal} claims \xB7 all confirmed`;else{let c=`${e.claimsTotal} claims`;e.claimsConfirmed!==void 0&&(c+=` \xB7 ${e.claimsConfirmed} confirmed`),e.claimsRefuted!==void 0&&(c+=` \xB7 ${e.claimsRefuted} refuted`),e.claimsInconclusive!==void 0&&(c+=` \xB7 ${e.claimsInconclusive} inconclusive`),l=c}s=`${n.glyph} ${e.skillName} \xB7 ${l} \xB7 ${r}`}else s=`${n.glyph} ${e.skillName} \xB7 ${r}`;let i=i_.hex(n.color)(s);return qs(i,t?.columns)}else{let s;if(e.claimsTotal!==void 0){let i=e.claimsConfirmed??0;s=`[${e.skillName} \xB7 ${i}/${e.claimsTotal} confirmed \xB7 ${r}]`}else s=`[${e.skillName} \xB7 ${r}]`;return qs(s,t?.columns)}}function qs(e,t){return t!==void 0&&q(e)>t?
|
|
1798
|
+
${a}`)}o.push({type:"text",text:s});let i=Du(e,{skillName:"init",out:zs(),onCancel:()=>{e.session.current.interrupt().catch(()=>{})}});try{await i.arm(),await Wo(i.sink,async()=>{for await(let a of e.session.current.sendMessageStream(o))i.sink(a)})}catch(a){e.out.line(),e.out.error(`init failed: ${a instanceof Error?a.message:String(a)}`)}finally{await i.dispose()}return"continue"}};import i_ from"chalk";Xm();var jg=new Map;function a_(e,t){let n=jg.get(e);if(n){if(n.glyph===t.glyph&&n.color===t.color&&n.inFlightVerb===t.inFlightVerb)return;throw new Error(`Trusted skill "${e}" already registered with different config`)}jg.set(e,t),Hv(e)}function Lu(e){return jg.get(e)}function P2(e){return(e/1e3).toFixed(1)+"s"}function l_(e,t){let n=Lu(e.skillName),r=P2(e.durationMs);if(!n){let s=`[${e.skillName} \xB7 ${r}]`;return qs(s,t?.columns)}if(t?.isTTY!==!1){let s;if(e.claimsTotal!==void 0){let a=e.claimsTotal===e.claimsConfirmed&&e.claimsRefuted===void 0&&e.claimsInconclusive===void 0,l;if(a)l=`${e.claimsTotal} claims \xB7 all confirmed`;else{let c=`${e.claimsTotal} claims`;e.claimsConfirmed!==void 0&&(c+=` \xB7 ${e.claimsConfirmed} confirmed`),e.claimsRefuted!==void 0&&(c+=` \xB7 ${e.claimsRefuted} refuted`),e.claimsInconclusive!==void 0&&(c+=` \xB7 ${e.claimsInconclusive} inconclusive`),l=c}s=`${n.glyph} ${e.skillName} \xB7 ${l} \xB7 ${r}`}else s=`${n.glyph} ${e.skillName} \xB7 ${r}`;let i=i_.hex(n.color)(s);return qs(i,t?.columns)}else{let s;if(e.claimsTotal!==void 0){let i=e.claimsConfirmed??0;s=`[${e.skillName} \xB7 ${i}/${e.claimsTotal} confirmed \xB7 ${r}]`}else s=`[${e.skillName} \xB7 ${r}]`;return qs(s,t?.columns)}}function qs(e,t){return t!==void 0&&q(e)>t?ie(e,t):e}function c_(e,t){let n=Lu(e);if(!n){let s=`[${e} \xB7 running\u2026]`;return qs(s,t?.columns)}if(t?.isTTY!==!1){let s=`${n.glyph} ${e} \xB7 ${n.inFlightVerb}`,i=i_.hex(n.color)(s);return qs(i,t?.columns)}let o=`[${e} \xB7 ${n.inFlightVerb}]`;return qs(o,t?.columns)}var u_={name:"/stats",summary:"Show session statistics including skill runs",async handler(e){let t=e.ledger;if(!t)return e.out.info("No skill stats available."),"continue";let n=t.summary();if(!n)return e.out.info("No skill runs recorded this session."),"continue";e.out.line(),e.out.line(p.bold("Skill runs"));for(let[r,o]of n){let s=Lu(r)?.glyph??"",i=s?`${s} `:"",a=`${(o.totalDurationMs/1e3).toFixed(1)}s total`,l=`${o.runs} run${o.runs!==1?"s":""}`,c="";o.totalClaims!==void 0&&(c=` \xB7 ${o.totalClaims} claims`,o.totalConfirmed!==void 0&&(c+=` \xB7 ${o.totalConfirmed} confirmed`),o.totalRefuted!==void 0&&(c+=` \xB7 ${o.totalRefuted} refuted`),o.totalInconclusive!==void 0&&(c+=` \xB7 ${o.totalInconclusive} inconclusive`)),e.out.line(` ${i}${r} ${l}${c} \xB7 ${a}`)}return e.out.line(),"continue"}};Om();function M2(e=Mm){return{name:"/font-size",summary:"Get or set the terminal font size in Cursor / VS Code",usage:"/font-size [size] [editor]",hint:"Direct shortcut to the terminal_font_size tool \u2014 bypasses the LLM and the first-write permission prompt. Examples: `/font-size` (read all), `/font-size 18` (set all), `/font-size 14 cursor` (set Cursor only).",async handler(t,n){let r=n.split(/\s+/).filter(Boolean),o=new AbortController;if(r.length===0){let u=await e({action:"get"},o.signal);return u.isError?t.out.error(u.content):t.out.line(u.content),"continue"}let s=r[0],i=Number(s);if(!Number.isFinite(i))return t.out.error(`Invalid size: "${s}". Usage: /font-size [size] [editor]`),"continue";let a=r[1],l={action:"set",size:i};a!==void 0&&(l.editor=a);let c=await e(l,o.signal);return c.isError?t.out.error(c.content):t.out.success(c.content),"continue"}}}var d_=M2();import O2 from"path";import{statSync as $2}from"fs";var ao;function p_(e){ao=e}var m_={name:"/allow-dir",summary:"Manage per-session directory access grants for tool handlers",usage:"/allow-dir [--rw | --revoke] [<path>]",flags:["--rw","--revoke"],async handler(e,t){if(!ao)return e.out.error("Directory grants not available in this session."),"continue";let n=t.trim();if(!n){let a=ao.getGrants();return e.out.line(" Session directory grants:"),e.out.line(` resolveBase : ${a.resolveBase??"(none)"}`),e.out.line(` readRoots : ${a.readRoots.length>0?a.readRoots.join(", "):"(none)"}`),e.out.line(` writeRoots : ${a.writeRoots.length>0?a.writeRoots.join(", "):"(none)"}`),"continue"}let r="read",o=n;if(o.startsWith("--rw ")||o==="--rw"?(r="write",o=o.slice(5).trim()):(o.startsWith("--revoke ")||o==="--revoke")&&(r="revoke",o=o.slice(9).trim()),!o)return e.out.error("Usage: /allow-dir [--rw | --revoke] <path>"),"continue";let s=O2.resolve(process.cwd(),o);if(r!=="revoke")try{$2(s)}catch{return e.out.error(`Path does not exist: ${s}`),"continue"}let i=e.stats.sessionId;if(r==="revoke"){let a=ao.getGrants();ao.revokeRoot(s,"slash",i),a.resolveBase&&s===a.resolveBase?e.out.warn(`Cannot revoke the session's initial resolveBase: ${s}`):e.out.line(`\u2713 Revoked: ${s}`)}else r==="write"?(ao.addWriteRoot(s,"slash",i),e.out.line(`\u2713 Read+write grant: ${s}`)):(ao.addReadRoot(s,"slash",i),e.out.line(`\u2713 Read-only grant: ${s}`));return"continue"}};var f_=[{group:"Navigation",rows:[["ctrl+a","Move to start of current line"],["ctrl+e","Move to end of current line"],["ctrl+b","Move one character backward (input mode) / Run turn in background (streaming mode)"],["ctrl+f","Move one character forward"],["alt+b","Move one word backward"],["alt+f","Move one word forward"],["\u2190 / \u2192","Character left / right"],["home / end","Buffer start / end"]]},{group:"Editing",rows:[["ctrl+u","Delete to start of current line"],["ctrl+k","Delete to end of current line"],["ctrl+w","Delete previous word"],["backspace","Delete previous character"],["delete","Delete next character"],["alt+backspace","Delete previous word (Option+Delete on macOS)"],["alt+delete","Delete next word (Option+Fn-Delete on macOS)"]]},{group:"History",rows:[["ctrl+p / \u2191","Previous history entry (or move up in multi-line draft)"],["ctrl+n / \u2193","Next history entry (or move down in multi-line draft)"]]},{group:"Multi-line",rows:[["shift+enter","Insert newline (no submit)"],["alt+enter","Insert newline (no submit)"],["<text>\\","Trailing \\ + Enter inserts newline (backwards-compat)"]]},{group:"Misc",rows:[["ctrl+l","Clear screen and repaint"],["ctrl+v","Paste image from clipboard"],["ctrl+x","Remove last attached image"],["ctrl+c","Interrupt running turn / exit (second press)"],["ctrl+d","EOF / exit (when buffer is empty)"],["tab","Accept autocomplete suggestion"],["enter","Submit prompt"]]}],g_={name:"/keys",summary:"Show keybinding reference",async handler(e){e.out.line(),e.out.line(p.bold(p.brand("Keybindings"))),e.out.line(de());let n=f_.flatMap(r=>r.rows).reduce((r,[o])=>Math.max(r,o.length),0);for(let{group:r,rows:o}of f_){e.out.line(),e.out.line(p.bold(r));for(let[s,i]of o){let a=" ".repeat(Math.max(0,n-s.length));e.out.line(` ${p.warning(s)}${a} ${p.dim(i)}`)}}return e.out.line(),"continue"}};import{execFile as q2}from"node:child_process";import{promises as J2}from"node:fs";import{dirname as Y2,isAbsolute as V2,join as X2,resolve as Z2}from"node:path";import{promisify as Q2}from"node:util";K();Yp();import{promises as jt,existsSync as b_,createReadStream as D2,realpathSync as L2}from"node:fs";import{join as Fu,relative as F2,isAbsolute as N2}from"node:path";import{createInterface as B2}from"node:readline";var U2=36e5,j2=30*864e5;function h_(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function y_(e){try{return L2(e)}catch{return e}}function H2(e,t){let n=F2(y_(t),y_(e));return n===""||!n.startsWith("..")&&!N2(n)}function W2(e){let t=e.trim().split(/\n\n+/),n=[];for(let r of t){let o=r.split(`
|
|
1799
1799
|
`),s="",i="",a="",l=!1,c=!1,u=!1;for(let d of o)d.startsWith("worktree ")?s=d.slice(9).trim():d.startsWith("HEAD ")?i=d.slice(5).trim():d.startsWith("branch ")?a=d.slice(7).trim():d.trim()==="locked"?l=!0:d.trim()==="prunable"?c=!0:d.trim()==="bare"&&(u=!0);s&&n.push({path:s,head:i,branch:a,locked:l,prunable:c,isBare:u})}return n}function K2(e,t,n){if(e.locked)return"locked";let r=864e5,o=t*r,s=n*r;return e.ownerLiveness==="dead"&&!e.isDirty&&e.commitsAhead===0?"dead-owner":e.commitsAhead===0&&!e.isDirty&&e.ageMs>=U2?"empty":e.isDirty&&e.ageMs>s?"stale-dirty":!e.isDirty&&e.ageMs>o?"stale-clean":"active"}async function G2(e){if(!b_(e))return 0;let t=0;try{let n=B2({input:D2(e),crlfDelay:1/0});for await(let r of n){let o=r.trim();if(o)try{let s=JSON.parse(o);s.taskId==="worktree-prune"&&(s.status==="success"||s.status==="error")&&t++}catch{}}}catch{}return t}var Nu=class extends Error{constructor(t){super(`Worktree sweep lock contested: ${t} \u2014 another sweep may be running.`),this.name="LockContestedError"}};async function z2(e){let t=Fu(e,"..");await jt.mkdir(t,{recursive:!0}).catch(()=>{});let r=await(async()=>{try{return await jt.open(e,"wx")}catch(o){if(o.code!=="EEXIST")throw o;let i=null;try{let a=await jt.readFile(e,"utf-8");i=parseInt(a.trim(),10)}catch{}if(i!==null&&!Number.isNaN(i)){let a=!1;try{process.kill(i,0),a=!0}catch{}if(!a)return await jt.unlink(e).catch(()=>{}),await jt.open(e,"wx")}throw new Nu(e)}})();return await r.writeFile(String(process.pid),"utf-8"),await r.close(),async()=>{await jt.unlink(e).catch(()=>{})}}async function un(e){let{execFile:t,repoRoot:n,maxAgeDaysClean:r=14,maxAgeDaysDirty:o=30,scope:s="all",telemetryPath:i}=e,a=i??Kn(),l=e.lockPath??$y(),c={removed:[],warnings:[],dryRun:e.dryRun??!1,candidates:[]},u=e.bypassSoftLaunch?Number.POSITIVE_INFINITY:await G2(a),d=e.dryRun===!0||u<3;c.dryRun=d;let m=null;try{m=await z2(l)}catch(f){if(f instanceof Nu)return c.warnings.push(`[WARN] ${f.message}`),c;throw f}try{let f=await t("git",["-C",n,"worktree","list","--porcelain"]),g=W2(f.stdout),h=Fu(n,".afk-worktrees"),b=new Set(g.map(T=>T.path)),y=[];try{y=(await jt.readdir(h,{withFileTypes:!0})).filter(R=>R.isDirectory()).map(R=>Fu(h,R.name))}catch{}let w=y.filter(T=>!b.has(T));if(s==="all"||s==="interactive")for(let T of w){let R=0;try{let M=await jt.stat(T);R=Date.now()-M.birthtimeMs}catch{}if(c.candidates.push({path:T,verdict:"orphaned-dir",owner:"interactive",ageMs:R}),!d)try{await jt.rm(T,{recursive:!0,force:!0}),c.removed.push(T)}catch(M){c.warnings.push(`[ERROR] Failed to remove orphaned dir ${T}: ${M instanceof Error?M.message:String(M)}`)}}let S=e.readPresence??Jp,x=[];try{x=(await S()).filter(R=>typeof R.pid=="number"&&R.pid>0&&h_(R.pid)).map(R=>R.cwd).filter(R=>typeof R=="string"&&R.length>0)}catch{}let E=!1,A=g[0]?.path;for(let T of g){if(T.path===A||T.isBare||!T.path.startsWith(h))continue;let R;try{let L=await jt.readFile(Fu(T.path,".afk-worktree-meta.json"),"utf-8");R=JSON.parse(L)}catch{}if(s!=="all"&&R?.owner!==s)continue;let M=R?.owner==="interactive"||R?.owner==="diagnose"?R.owner:"unknown";if(!b_(T.path)){c.candidates.push({path:T.path,verdict:"orphaned-registration",owner:M,ageMs:0}),d||(E=!0);continue}let N=0,C=R?.createdAt;if(C)N=Date.now()-new Date(C).getTime();else try{let L=await jt.stat(T.path);N=Date.now()-L.birthtimeMs}catch{}let O=!1,F=0;try{O=(await t("git",["-C",T.path,"status","--porcelain"])).stdout.trim().length>0}catch{O=!0}if(!O&&T.head){let L=R?.baseSha??T.head;try{let $=await t("git",["-C",n,"rev-list",`${L}..${T.head}`,"--count"]);F=parseInt($.stdout.trim(),10)||0}catch{F=0}}let H="unknown";typeof R?.pid=="number"&&Number.isInteger(R.pid)&&R.pid>0&&N<=j2&&(H=h_(R.pid)?"alive":"dead"),H!=="alive"&&x.some(L=>H2(L,T.path))&&(H="alive");let U={path:T.path,head:T.head,branch:T.branch,locked:T.locked,prunable:T.prunable,meta:R,ageMs:N,isDirty:O,commitsAhead:F,ownerLiveness:H},G=K2(U,r,o);if(c.candidates.push({path:T.path,verdict:G,owner:M,ageMs:N}),!d)try{G==="empty"?(await t("git",["-C",n,"worktree","remove","--force",T.path]),T.branch&&await t("git",["-C",n,"branch","-d",T.branch]).catch(()=>{}),c.removed.push(T.path)):G==="dead-owner"?(await t("git",["-C",n,"worktree","remove","--force",T.path]),T.branch&&await t("git",["-C",n,"branch","-d",T.branch]).catch(()=>{}),c.removed.push(T.path)):G==="stale-clean"?(await t("git",["-C",n,"worktree","remove","--force",T.path]),c.removed.push(T.path)):G==="stale-dirty"&&c.warnings.push(`[WARN] stale-dirty worktree preserved (uncommitted changes): ${T.path}`)}catch(L){c.warnings.push(`[ERROR] Failed to process ${T.path} (${G}): ${L instanceof Error?L.message:String(L)}`)}}if(E&&!d)try{await t("git",["-C",n,"worktree","prune"])}catch(T){c.warnings.push(`[ERROR] git worktree prune failed: ${T instanceof Error?T.message:String(T)}`)}}finally{m&&await m()}return c}var Hg=Q2(q2),w_=["interactive","diagnose","all"],Bu=new Set(["empty","stale-clean","orphaned-dir","orphaned-registration","dead-owner"]);async function S_(){let t=(await Hg("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=V2(t)?t:Z2(process.cwd(),t);return Y2(n)}function ez(e){if(e<=0)return"-";let t=e/864e5;return t<1?`${Math.max(1,Math.round(e/36e5))}h`:`${Math.round(t)}d`}function tz(e,t){return Bu.has(e)?p.error(t):e==="stale-dirty"?p.warning(t):e==="locked"?p.dim(t):p.dim(t)}function v_(e,t){let n=e.split(/\s+/).map(o=>o.trim()).filter(o=>o.length>0),r={scope:t,apply:!1,unknown:[]};for(let o=0;o<n.length;o++){let s=n[o];if(s==="--apply")r.apply=!0;else if(s==="--scope"&&o+1<n.length){let i=n[o+1];o++,w_.includes(i)?r.scope=i:r.unknown.push(`--scope=${i}`)}else if(s.startsWith("--scope=")){let i=s.slice(8);w_.includes(i)?r.scope=i:r.unknown.push(s)}else r.unknown.push(s)}return r}async function nz(e){try{let t=await J2.readFile(X2(e,".afk-worktree-meta.json"),"utf-8"),n=JSON.parse(t);if(typeof n.pid=="number"&&Number.isInteger(n.pid)&&n.pid>0)return n.pid}catch{}}async function rz(e,t,n){if(t.length===0){e.info("No afk-managed worktrees found.");return}let r=process.pid;e.line(),e.line(p.bold("Worktrees")),e.line(p.dim(" "+"PATH".padEnd(45)+" "+"OWNER".padEnd(12)+" "+"AGE".padEnd(5)+" "+"VERDICT".padEnd(22)+" PRUNE?"));for(let o of t){let a=n.get(o.path)===r?p.brand("\u2192 "):" ",l=o.path.slice(-44).padEnd(45),c=o.owner.padEnd(12),u=ez(o.ageMs).padEnd(5),d=o.verdict.padEnd(22),m=Bu.has(o.verdict)?p.error("yes"):o.verdict==="stale-dirty"?p.warning("warn"):p.dim("no"),f=tz(o.verdict,d);e.line(`${a}${l} ${c} ${u} ${f} ${m}`)}e.line(),e.line(p.dim(" \u2192 this session")),e.line()}async function oz(e){let t=new Map;for(let n of e)t.set(n.path,await nz(n.path));return t}async function sz(e,t){let n=v_(t,"interactive");n.unknown.length>0&&e.out.warn(`Unknown args ignored: ${n.unknown.join(" ")}`);let r;try{r=await S_()}catch(i){return e.out.error(`Not in a git repository: ${i.message}`),"continue"}let o;try{let i={execFile:Hg,repoRoot:r,dryRun:!0,scope:n.scope};o=await un(i)}catch(i){return e.out.error(`Sweep failed: ${i.message}`),"continue"}let s=await oz(o.candidates);await rz(e.out,o.candidates,s);for(let i of o.warnings)e.out.warn(i);return"continue"}async function iz(e,t){let n=v_(t,"interactive");n.unknown.length>0&&e.out.warn(`Unknown args ignored: ${n.unknown.join(" ")}`);let r;try{r=await S_()}catch(a){return e.out.error(`Not in a git repository: ${a.message}`),"continue"}let o;try{let a={execFile:Hg,repoRoot:r,dryRun:!n.apply,scope:n.scope};o=await un(a)}catch(a){return e.out.error(`Sweep failed: ${a.message}`),"continue"}let s={};for(let a of o.candidates)s[a.verdict]=(s[a.verdict]??0)+1;let i=Object.entries(s).sort(([a],[l])=>a.localeCompare(l)).map(([a,l])=>`${a}=${l}`);if(o.dryRun){let a=o.candidates.filter(l=>Bu.has(l.verdict)).length;e.out.line(),e.out.line(p.warning("\u{1F50D} Dry-run \u2014 pass --apply to actually remove.")+` Would prune ${a} worktree(s).`+(i.length>0?` [${i.join(" ")}]`:""))}else{let a=o.warnings.filter(c=>c.startsWith("[WARN]")).length,l=o.warnings.filter(c=>c.startsWith("[ERROR]")).length;e.out.line(),e.out.success(`Removed ${o.removed.length}, warned ${a}, errors ${l}`+(i.length>0?` [${i.join(" ")}]`:""))}for(let a of o.candidates){let c=o.removed.includes(a.path)?p.error("\u2717"):Bu.has(a.verdict)?p.warning("\u2022"):p.dim("\xB7");e.out.line(` ${c} [${a.verdict.padEnd(22)}] ${a.path}`)}for(let a of o.warnings)a.startsWith("[ERROR]")?e.out.error(a):e.out.warn(a);return e.out.line(),"continue"}var k_={name:"/worktree",summary:"List or prune afk-managed git worktrees",usage:"/worktree list | /worktree prune [--apply] [--scope <interactive|diagnose|all>]",async handler(e,t){let n=t.trim();return n.length===0||n.startsWith("list")?sz(e,n.replace(/^list\s*/,"")):n.startsWith("prune")?iz(e,n.replace(/^prune\s*/,"")):(e.out.error(`Unknown /worktree subcommand. Usage:
|
|
1800
1800
|
/worktree list
|
|
1801
1801
|
/worktree prune [--apply] [--scope <interactive|diagnose|all>]`),"continue")}};Ho();var E_={name:"/reauth",summary:"Re-read keychain credentials and swap the running session's client",usage:"/reauth [--check]",hint:"Force the running session to pick up a new keychain token (e.g. after `claude /login` in another terminal)",async handler(e,t){if(t.trim()==="--check"){let s=nt();if(!s)return e.out.warn("No OAuth token found. Run `claude login` in a terminal to authenticate."),"continue";let i=Xn(s);return e.out.success(`Active keychain account: ${i}`),e.out.info("Note: --check only inspects the keychain. The running SDK client may still hold an older token \u2014 run `/reauth` (no args) to actually swap."),"continue"}let r=nt();if(r){let s=Xn(r);e.out.info(`Current keychain account: ${s}`)}e.out.info("Rebuilding session client from keychain credentials\u2026");let o;try{o=await e.session.current.reauth()}catch(s){return e.out.error(`Client refresh failed: ${s instanceof Error?s.message:String(s)}`),e.out.warn("Run `claude login` in a terminal to re-authenticate."),"continue"}return o?(o.swapped?(e.out.success(`\u2713 Client swapped. Session now authenticated as: ${o.accountId}`),e.out.info("Next turn will use the new credential. If a usage-limit pause is active, it will resume automatically within ~30s (or send a message to retry immediately).")):e.out.success(`\u2713 Client refreshed. Authenticated as: ${o.accountId} (token unchanged)`),"continue"):(nt()?e.out.warn("This session is not using OAuth (probably api-key mode) \u2014 nothing to refresh. The active credential is whatever ANTHROPIC_API_KEY held at session start."):e.out.warn("No OAuth credentials found in the keychain. Run `claude login` in a terminal to authenticate."),"continue")}};z();import{spawn as az}from"node:child_process";import{promises as Wg}from"node:fs";import*as T_ from"node:os";import*as x_ from"node:path";function lz(e){return new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function cz(e,t){let n=[p.meta(`#${t+1}`),p.dim(lz(e.timestamp))];if(e.durationMs!==void 0&&e.durationMs>0&&n.push(p.dim(oe(e.durationMs))),e.costUsd!==void 0&&e.costUsd>0&&n.push(p.dim(ze(e.costUsd))),e.inputTokens!==void 0||e.outputTokens!==void 0){let r=e.inputTokens??0,o=e.outputTokens??0;n.push(p.dim(`${Math.round((r+o)/1e3)}k tok`))}return n.join(" ")}function uz(e){if(!e.toolEvents||e.toolEvents.length===0)return"";let t=[];for(let n of e.toolEvents){let r=n.isError?p.error("\u2717"):p.dim("\u25CF"),o=p.chrome(n.toolName),s="";if(n.result){let i=n.result.trim().split(`
|
|
@@ -1891,18 +1891,18 @@ _ended: ${new Date().toISOString()}_
|
|
|
1891
1891
|
`).trim();return{kind:o,rawBody:a,...GY(o,i)}}function WY(e){let t=e.trim().replace(/^#{1,6}\s+/,"").replace(/^[-•▶▸]\s+/,"").replace(/^\*\s+/,"").replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^\*(.+?)\*$/,"$1").replace(/^_(.+?)_$/,"$1").replace(/[.:!?\s]+$/,"").trim();if(t.length===0||t.length>24)return null;let n=t.toLowerCase();return n==="done"?"done":n==="blocked"?"blocked":n==="asking"?"asking":n==="interrupted"?"interrupted":null}function KY(e){let t=[];for(let n of e){let r=n.trim();if(r==="")continue;let o=/^(?:[-*•▶▸]|\d+[.)])\s+(.*)$/.exec(r),s=o?(o[1]??"").trim():r;if(!o&&t.length>0&&r.length>0){let a=t[t.length-1];a.value=`${a.value} ${r}`.trim();continue}let i=s.indexOf(":");if(i>0&&i<60){let a=s.slice(0,i).trim().replace(/^\*\*(.+?)\*\*$/,"$1").replace(/^__(.+?)__$/,"$1").replace(/^(?:\*\*|__)\s*/,"").toLowerCase(),l=s.slice(i+1).trim().replace(/^(?:\*\*|__)\s/,"");t.push({label:a,value:l})}else t.push({label:"",value:s})}return t}function GY(e,t){let n=(...r)=>{for(let o of t)if(o.label!==""){for(let s of r)if(o.label.includes(s))return o.value}};switch(e){case"done":{let r={},o=n("what was done","what i did","completed","done");o!==void 0&&(r.whatWasDone=o);let s=n("evidence","what changed","change","artifact","output");s!==void 0&&(r.evidence=s);let i=n("pending","deferred","follow-up","followup","next");return i!==void 0&&(r.deferred=i),r}case"blocked":{let r={},o=n("what blocks","blocker","blocked by");o!==void 0&&(r.whatBlocks=o);let s=n("unblock","must change","to unblock","condition");s!==void 0&&(r.unblockCondition=s);let i=n("has already","been done","already done","what has been done","progress");return i!==void 0&&(r.alreadyDone=i),r}case"asking":{let r={},o=n("question","asking");o!==void 0&&(r.question=o);let s=n("assumption","resolves");s!==void 0&&(r.assumption=s);let i=n("once answered","follow-up","next","will do","after");return i!==void 0&&(r.followup=i),r}case"interrupted":{let r={},o=n("what you were doing","in progress","doing","task");o!==void 0&&(r.whatWasInProgress=o);let s=n("state was saved","state","saved","where");s!==void 0&&(r.stateLocation=s);let i=n("resumption","resume","requires");return i!==void 0&&(r.resumeRequires=i),r}}}var zY={done:{color:p.success,chip:"\u2713 Done",affordance:"Objective satisfied - review evidence and close."},blocked:{color:p.error,chip:"\u2298 Blocked",affordance:"External dependency - unblock above to resume."},asking:{color:p.warning,chip:"? Asking",affordance:"Waiting on you - answer above to continue."},interrupted:{color:p.meta,chip:"\u23F8 Interrupted",affordance:"Halted with state preserved - resume when ready."}};function iI(e){let t=zY[e.kind],n=Math.max(34,Math.min(Z()-6,100)),r=n+4,o=t.color("\u256D\u2500")+t.color.call(null,` ${t.chip} `)+t.color("\u2500".repeat(Math.max(0,r-1-q(` ${t.chip} `)))+"\u256E"),s=t.color("\u2570"+"\u2500".repeat(r)+"\u256F"),i=t.color("\u2502"),a=i+" ".repeat(n+4)+i,l=qY(e),c=l.reduce((f,g)=>Math.max(f,q(g.label)),0),u=Math.max(8,n-c-2),d=[o,a];if(l.length===0){let f=e.rawBody.split(`
|
|
1892
1892
|
`).find(b=>b.trim().length>0)?.trim()??"",g=f.length>0?f:`${e.kind} (no structured fields)`,h=ue(qn(g),n).split(`
|
|
1893
1893
|
`);for(let b of h)d.push(i+" "+We(b,n)+" "+i)}else for(let f of l){let g=p.dim(We(f.label,c)),h=ue(qn(f.value),u).split(`
|
|
1894
|
-
`),b=h[0]??"";d.push(i+" "+g+" "+We(b,u)+" "+i);for(let y of h.slice(1))d.push(i+" "+" ".repeat(c)+" "+We(y,u)+" "+i)}d.push(a);let m=p.dim(
|
|
1894
|
+
`),b=h[0]??"";d.push(i+" "+g+" "+We(b,u)+" "+i);for(let y of h.slice(1))d.push(i+" "+" ".repeat(c)+" "+We(y,u)+" "+i)}d.push(a);let m=p.dim(ie(t.affordance,n));return d.push(i+" "+We(m,n)+" "+i),d.push(s),d.join(`
|
|
1895
1895
|
`)}function qY(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),e.deferred?.trim()!==e.whatWasDone?.trim()&&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 aI(e,t,n,r){let o=[];return n&&n.trim().length>0&&o.push({type:"text",text:n}),r&&r.length>0&&o.push(...r),e&&o.push({type:"text",text:e}),ju(o,t),o}import{readFileSync as JY,statSync as YY}from"fs";import{extname as VY,join as lI}from"path";import{homedir as XY}from"os";Ul();var ZY=100*1024,QY=400*1024,e4=/(?<=\s|^)@([~\w./-]+)(?=\s|$)/g,t4=/(^|\/)\.(ssh|aws|gnupg|kube|docker)(\/|$)|(^|\/)[^/]*\.env(\.[^/]+)?$|(^|\/)\.(netrc|npmrc|pypirc)$|(^|\/)id_(rsa|ed25519|ecdsa|dsa)(\.pub)?$|\.(pem|key|p12|pfx)$|(^|\/)credentials$|(^|\/)\.git\/config$|(^|\/)\.git-credentials$|(^|\/)\.(bash|zsh|fish|sh)_history$/i,n4=[".afk/config",".afk/state",".config/gcloud",".config/gh"];function r4(e){let t=0,n=e.match(/`+/g);if(n)for(let r of n)r.length>t&&(t=r.length);return"`".repeat(Math.max(3,t+1))}function o4(e,t){if(t4.test(e))return!0;for(let n of t)if(e===n||e.startsWith(n+"/"))return!0;return!1}var s4={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"jsx",".mjs":"javascript",".cjs":"javascript",".json":"json",".md":"markdown",".py":"python",".sh":"bash",".bash":"bash",".zsh":"bash",".yaml":"yaml",".yml":"yaml",".toml":"toml",".rs":"rust",".go":"go",".rb":"ruby",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cs":"csharp",".html":"html",".css":"css",".scss":"scss",".sql":"sql",".xml":"xml",".txt":""};function i4(e){return s4[e.toLowerCase()]??""}function a4(e=process.env){return e.AFK_AT_FILE_INJECT!=="0"}function cI(e,t={}){let n={fileBlocks:[],warnings:[]};if(!a4(t.env))return n;let r=[];for(let d of e.matchAll(e4)){let m=d[1];m&&r.push(m)}if(r.length===0)return n;let o=t.rootDir??process.cwd(),s=t.homeDir??XY(),i=n4.map(d=>Jo(lI(s,d))),a=[],l=[],c=new Set,u=0;for(let d of r){let{scanDir:m,leafPrefix:f}=fu(d,o,s),g=f?lI(m,f):m,h=Jo(g);if(c.has(h))continue;if(c.add(h),o4(h,i)){l.push(`@${d}: sensitive path, not injected`);continue}let b;try{b=YY(h)}catch{l.push(`@${d}: not found, left as text`);continue}if(b.isDirectory()){l.push(`@${d}: is a directory, skipped`);continue}if(!b.isFile()){l.push(`@${d}: not a regular file, skipped`);continue}if(b.size>ZY){l.push(`@${d}: too large (${Math.round(b.size/1024)} KB > 100 KB), skipped`);continue}if(u+b.size>QY){l.push(`@${d}: 400 KB total injection budget exceeded, skipped`);continue}let y;try{y=JY(h)}catch{l.push(`@${d}: could not read, skipped`);continue}if(y.includes(0)){l.push(`@${d}: binary file, skipped`);continue}u+=b.size;let w=i4(VY(h)),S=y.toString("utf8"),x=r4(S);a.push({type:"text",text:`Contents of ${d}:
|
|
1896
1896
|
${x}${w}
|
|
1897
1897
|
${S}
|
|
1898
|
-
${x}`})}return{fileBlocks:a,warnings:l}}async function uI(e,t,n,r,o="summary",s,i,a){let l=YR(e.text,e.attachments);r.setInFlight(!0);let c="",u=0,d=!1,m=!1,f=!1,g=!1,h,b=!1,y=!1,w=0,S=15e3,x=[],E=new Map,A=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,T=r.getCompositor?r.getCompositor():null,R=()=>new Gs({out:zs(s),thinkingMode:o,...A?{activeSkillName:A}:{},onCancel:()=>{t.interrupt().catch(O=>{Je()&&console.error(" "+p.error("session.interrupt() failed:"),O)})},...i?{onBackground:()=>{b=!0}}:{},...a?.history?{history:a.history}:{},...a?.autocompleteState?{autocompleteState:a.autocompleteState}:{},...a?.promptText!==void 0?{promptText:a.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...T?{compositor:T}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{}}),M=R(),N=async()=>{if(!f){f=!0;try{await M.dispose()}catch{}}},C=async()=>{await M.arm();let O=M.getCompositor();if(s&&O){let F=O;s.fn=H=>F.commitAbove(H)}r.setActiveCompositor?.(O),r.setInterruptNotifier?.(F=>M.setInterrupting(F)),r.rearmStatus?.()};try{T?T.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{y=!0}),await C(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{b=!0});let{fileBlocks:O,warnings:F}=cI(e.text,{rootDir:process.cwd()});for(let L of F)(s??{fn:console.log}).fn(p.dim(` @-file: ${L}`));let H=O.length>0||e.attachments.length>0?aI(e.text,e.attachments,void 0,O):e.text,U=t.sendMessageStream(H);if(await Wo((L,$)=>{M.process(L,$)},async()=>{for await(let L of U){if(y){t.interrupt().catch($=>{Je()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),$)});break}if(b&&i){let $=A??e.text.slice(0,40),D=i.register($),I=ru(D,i);ou(U,c,l,D,i,I,n,r.onTurnComplete,t.abortSignal),await N(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${D.id}: ${D.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(L.type==="chunk"&&L.chunk.type==="content"?(c+=L.chunk.content,d=!0):L.type==="message"&&!d&&(c=L.message.content),L.type==="stream_retry"&&(c=c.slice(0,u)),L.type==="chunk"&&L.chunk.type==="tool_use_detail"){let $=L.chunk,D={toolName:$.toolName,toolUseId:$.toolUseId,input:$.toolInput};E.set($.toolUseId,D),x.push(D)}else if(L.type==="chunk"&&L.chunk.type==="tool_result"){let $=L.chunk;u=c.length;let D=E.get($.toolUseId);if(D&&(D.result=$.content,D.isError=$.isError,E.delete($.toolUseId)),r.onContextProgress){let I=Date.now();if(I-w>=S){w=I;try{let V=r.onContextProgress();V instanceof Promise&&await V}catch(V){Je()&&console.error(" "+p.error("onContextProgress (status refresh) failed:"),V)}}}}if(L.type==="paused"){await N(),(s??{fn:console.log}).fn(ab({reason:L.reason,...L.resetsAt!==void 0?{resetsAt:L.resetsAt}:{},...L.accountId!==void 0?{accountId:L.accountId}:{},...L.autoResume!==void 0?{autoResume:L.autoResume}:{}}));continue}if(L.type==="resumed"){let $=L.hotSwapped&&L.accountId?`\u25B6 Resumed on ${L.accountId}`:"\u25B6 Resumed";c="",u=0,d=!1,x.length=0,E.clear(),g=!1,h=void 0,m=!1,b=!1,M=R(),f=!1,await C(),(s??{fn:console.log}).fn(p.success($));continue}if(L.type==="error"){await N(),Fo($o(L.error)),m=!0;continue}M.process(L),L.type==="done"&&(g=!0,h=L.metadata)}}),await N(),y){let L=s?s.fn:console.log;L(p.warning("\u23F8 Stopped \u2014 work so far kept.")+p.dim(" Use /resume or --resume to continue.")),L("")}if(g&&!y){Dn(n,l,c,h,x),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{}),Wc(process.stdout);let L=D=>{s?s.fn(D):console.log(D)},$=sI(c);if($&&(L(iI($)),L(""),r.onTerminalState))try{r.onTerminalState($)}catch{}if(l4(h,n,L),r.onAfterTurn){let D=r.onAfterTurn();D instanceof Promise&&await D.catch(()=>{})}}}catch(O){await N(),m||Fo($o(O))}finally{await N(),s&&(s.fn=s.idleFn),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function l4(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push(ze(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),s=Number(e.usage?.output_tokens??0);o+s>0&&r.push(se(o+s)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let i=Kf(t),a=mt(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 ~${se(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 ${se(a)}`))}n("")}function dI(e={}){let t=e.load??Qc,n=e.onResize??(i=>Ne.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=jx(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:eu(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var Eh={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 pI(e={}){let t=Math.max(2,e.capacity??8),n=[],r=null,o=()=>0,s=!1,i=0,a,l=null;function c(){let g=r?.rows;return typeof g=="number"&&g>0?g:24}function u(g){let h=o();return Math.max(1,g-1-h)}function d(){if(!s||!r?.isTTY)return;let g=f(),h=c(),b=g!==null&&h>1?1:0;if(b!==i&&(i>0&&m(),i=b,a?.(i)),b===0)return;let y=u(h);r.write("\x1B[s"),r.write(`\x1B[${y};1H`),r.write("\x1B[2K"),r.write(g),r.write("\x1B[u")}function m(){if(!r?.isTTY)return;let g=c(),h=u(g);r.write("\x1B[s"),r.write(`\x1B[${h};1H`),r.write("\x1B[2K"),r.write("\x1B[u")}function f(){if(n.length===0)return null;let g=p.dim(" ledger "),h=p.dim(" \xB7 "),b=n.map(E=>{let A=Eh[E];return A.color(`${A.glyph} ${A.label}`)}),y=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),w=g+b.join(h)+y,S=Math.max(20,Z()-2);if(q(w)<=S)return w;let x=g+n.map(E=>Eh[E].color(Eh[E].glyph)).join(p.dim(" "))+y;return ae(x,S)}return{push(g){n.push(g.kind),n.length>t&&(n=n.slice(n.length-t)),d()},reset(){n=[],s&&i>0&&(m(),i=0,a?.(0))},entries(){return n},render(){return f()},setRowCountChangeHandler(g){a=g},start(g){s||(s=!0,r=g.stream??process.stdout,o=g.getAdjacentRows??(()=>0),i=0,l=Ne.subscribe(()=>d()),d())},stop(){s&&(s=!1,l!==null&&(l(),l=null),i>0&&(m(),i=0,a?.(0)),r=null)},repaint(){d()}}}var Th=["\u25D0","\u25D1","\u25D2","\u25D3"],yd=class{stream;manager;registry;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;registryStartedHandler=null;registrySettledHandler=null;rowCount=0;onRowCountChange;getAdjacentRows;constructor(t,n,r={}){this.manager=t,this.registry=n,this.stream=r.stream??process.stdout,this.throttleMs=r.throttleMs??200,this.getAdjacentRows=r.getAdjacentRows??(()=>0)}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=Ne.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%Th.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()}redraw(){this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=[...this.manager.running().map(i=>({kind:"turn",task:i})),...(this.registry?.list()??[]).filter(i=>i.status==="running").map(i=>({kind:"subagent",job:i}))],n=this.stream.rows??24,r=this.getAdjacentRows(),o=Math.max(0,Math.min(t.length,n-1-r));if(o!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=o,this.onRowCountChange?.(o)),o===0)return;let s=Math.max(1,n-o-r);this.stream.write("\x1B[s");for(let i=0;i<o;i++){let a=t[i],l=s+i;this.stream.write(`\x1B[${l};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatItemLine(a))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=this.getAdjacentRows(),r=Math.min(this.rowCount,t-1-n),o=Math.max(1,t-r-n);this.stream.write("\x1B[s");for(let s=0;s<r;s++)this.stream.write(`\x1B[${o+s};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(Th[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(`${se(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(oe(l)),a.length>0&&i.push(p.dim(a.join(" \xB7 "))),ae(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(Th[this.spinnerIndex]),o=p.dim(t.jobId),s=p.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(p.dim(oe(a))),ae(" "+i.join(" "),n)}};import{spawn as c4}from"node:child_process";var u4=/\x1b(?:\[[0-9;]*[a-zA-Z]|[\]P^_X][^\x07\x1b]*(?:\x07|\x1b\\)|[@-OQ-WYZ\\])/g;function d4(){let e="";return{strip(t){let r=(e+t).replace(u4,""),o=r.match(/\x1b(?:[\]P^_X][^\x07\x1b]*|\[[0-9;]*)?$/);return o?(e=o[0],r.slice(0,r.length-e.length)):(e="",r)},flush(){return e="",""}}}function mI(e,t){if(e.length<=t)return e;let n=t;for(;n>0&&(e[n]&192)===128;)n--;return e.subarray(0,n)}var fI=12e4,gI=1e5;function xh(e){let t=Date.now(),n=e.timeoutMs??fI,r=e.maxBytes??gI,o=d4(),s;try{s=c4(e.command,{shell:!0,detached:!0,stdio:["ignore","pipe","pipe"],...e.cwd!==void 0?{cwd:e.cwd}:{},...e.env!==void 0?{env:{...process.env,...e.env}}:{}})}catch(E){let A=E instanceof Error?E.message:String(E);return{pid:void 0,kill:()=>{},promise:Promise.resolve({exitCode:null,durationMs:Date.now()-t,displayCaptured:"",modelCaptured:"",truncated:!1,errorReason:"spawn-failed",errorMessage:`Failed to spawn shell: ${A}`})}}s.unref();let i,a=!1,l=new Promise(E=>{i=A=>{a||(a=!0,E(A))}}),c="",u="",d=0,m=0,f=!1,g=!1,h=!1;function b(E){let A=r-d;if(A>0){let T=E.length<=A?E:mI(E,A);d+=T.length,c+=T.toString("utf8"),E.length>A&&(f=!0)}else E.length>0&&(f=!0);if(m<r){let T=o.strip(E.toString("utf8")),R=Buffer.byteLength(T,"utf8"),M=r-m;if(R<=M)u+=T,m+=R;else{let N=Buffer.from(T,"utf8");u+=mI(N,M).toString("utf8"),m=r,f=!0}}}function y(){if(s.pid!==void 0&&s.pid!==0&&!s.killed)try{process.kill(-s.pid,"SIGKILL")}catch{}}let w=setTimeout(()=>{y(),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"timeout",errorMessage:`Command timed out after ${n}ms`})},n),S=()=>{y(),clearTimeout(w),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:h?"Command killed":"Command aborted"})};e.abort.addEventListener("abort",S);function x(){g||a||d<r&&m<r||(g=!0,y(),clearTimeout(w),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:!0,errorReason:"overflow",errorMessage:`Output exceeded ${r} bytes`}))}return s.stdout?.on("data",E=>{b(E);try{e.onChunk?.(E,"stdout")}catch{}x()}),s.stderr?.on("data",E=>{b(E);try{e.onChunk?.(E,"stderr")}catch{}x()}),s.on("error",E=>{clearTimeout(w),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"spawn-failed",errorMessage:`Shell process error: ${E.message}`})}),s.on("close",(E,A)=>{if(clearTimeout(w),e.abort.removeEventListener("abort",S),!(g||a)){if(o.flush(),h){i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:"Command killed"});return}if(E!==null&&E!==0){i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"nonzero-exit",errorMessage:`Command exited with code ${E}`});return}if(E===null){i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"signal-killed",errorMessage:A?`Command killed by signal ${A}`:"Command killed by signal"});return}i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f})}}),{pid:s.pid,promise:l,kill:(E="SIGKILL")=>{if(!(s.pid===void 0||s.pid===0||s.killed)){h=!0;try{process.kill(-s.pid,E)}catch{}}}}}import{EventEmitter as p4}from"node:events";var hI=200,$a=class extends p4{jobs=new Map;handles=new Map;aborts=new Map;counter=0;start(t){let n=`sh-${++this.counter}`,r=new AbortController,o=xh({command:t.command,...t.cwd!==void 0?{cwd:t.cwd}:{},abort:r.signal,...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{},...t.maxBytes!==void 0?{maxBytes:t.maxBytes}:{},...t.env!==void 0?{env:t.env}:{},...t.onChunk!==void 0?{onChunk:t.onChunk}:{}}),s={id:n,command:t.command,pid:o.pid,startedAt:Date.now(),mode:t.mode,status:"running"};return this.jobs.set(n,s),this.handles.set(n,o),this.aborts.set(n,r),o.promise.then(i=>{s.result=i,s.status=m4(i),this.aborts.delete(n),this.handles.delete(n);try{this.emit("complete",s)}catch(a){console.warn(`[shell-jobs] listener for 'complete' threw on ${n}: ${a instanceof Error?a.message:String(a)}`)}this.pruneHistory()}),{job:s,handle:o}}get(t){return this.jobs.get(t)}list(){return[...this.jobs.values()].sort((t,n)=>t.startedAt-n.startedAt)}running(){return this.list().filter(t=>t.status==="running")}kill(t){let n=this.jobs.get(t);if(!n||n.status!=="running")return!1;let r=this.aborts.get(t);if(r)return r.abort(),!0;let o=this.handles.get(t);return o?(o.kill(),!0):!1}killAll(){let t=this.running();for(let n of t)this.kill(n.id);return t}runningCount(){let t=0;for(let n of this.jobs.values())n.status==="running"&&t++;return t}pruneHistory(){if(!(this.jobs.size<=hI))for(let[t,n]of this.jobs){if(this.jobs.size<=hI)break;n.status!=="running"&&this.jobs.delete(t)}}};function m4(e){return e.errorReason===void 0?"completed":e.errorReason==="abort"?"killed":"failed"}function f4(e){if(!e.startsWith("!"))return null;if(e.startsWith("!&")){let n=e.slice(2).trim();return n.length===0?null:{mode:"background",command:n}}let t=e.slice(1).trim();return t.length===0?null:{mode:"foreground",command:t}}function g4(e,t){let n=oe(t.durationMs);return t.errorReason==="abort"?p.dim(` [${e.id} \xB7 killed \xB7 ${n}]`):t.errorReason==="timeout"?p.dim(` [${e.id} \xB7 timed out \xB7 ${n}]`):t.errorReason==="overflow"?p.dim(` [${e.id} \xB7 output overflow \xB7 ${n}]`):t.errorReason==="spawn-failed"?p.warning(` [${e.id} \xB7 spawn failed \xB7 ${n}]`):t.errorReason==="nonzero-exit"?p.warning(` [${e.id} \xB7 exit ${t.exitCode} \xB7 ${n}]`):t.errorReason==="signal-killed"?p.warning(` [${e.id} \xB7 killed by signal \xB7 ${n}]`):p.dim(` [${e.id} \xB7 exit ${t.exitCode??0} \xB7 ${n}]`)}function yI(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function h4(e,t,n){let r=[],o=[`mode="${t}"`];return n.exitCode!==null&&o.push(`exit="${n.exitCode}"`),n.errorReason!==void 0&&o.push(`reason="${n.errorReason}"`),o.push(`duration="${oe(n.durationMs)}"`),n.truncated&&o.push('truncated="true"'),r.push(`<bash-passthrough ${o.join(" ")}>`),r.push(`<command>${yI(e)}</command>`),r.push("<output>"),r.push(yI(n.modelCaptured)),r.push("</output>"),r.push("</bash-passthrough>"),r.join(`
|
|
1898
|
+
${x}`})}return{fileBlocks:a,warnings:l}}async function uI(e,t,n,r,o="summary",s,i,a){let l=YR(e.text,e.attachments);r.setInFlight(!0);let c="",u=0,d=!1,m=!1,f=!1,g=!1,h,b=!1,y=!1,w=0,S=15e3,x=[],E=new Map,A=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,T=r.getCompositor?r.getCompositor():null,R=()=>new Gs({out:zs(s),thinkingMode:o,...A?{activeSkillName:A}:{},onCancel:()=>{t.interrupt().catch(O=>{Je()&&console.error(" "+p.error("session.interrupt() failed:"),O)})},...i?{onBackground:()=>{b=!0}}:{},...a?.history?{history:a.history}:{},...a?.autocompleteState?{autocompleteState:a.autocompleteState}:{},...a?.promptText!==void 0?{promptText:a.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...T?{compositor:T}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{}}),M=R(),N=async()=>{if(!f){f=!0;try{await M.dispose()}catch{}}},C=async()=>{await M.arm();let O=M.getCompositor();if(s&&O){let F=O;s.fn=H=>F.commitAbove(H)}r.setActiveCompositor?.(O),r.setInterruptNotifier?.(F=>M.setInterrupting(F)),r.rearmStatus?.()};try{T?T.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{y=!0}),await C(),i&&r.setBackgroundHandler&&r.setBackgroundHandler(()=>{b=!0});let{fileBlocks:O,warnings:F}=cI(e.text,{rootDir:process.cwd()});for(let L of F)(s??{fn:console.log}).fn(p.dim(` @-file: ${L}`));let H=O.length>0||e.attachments.length>0?aI(e.text,e.attachments,void 0,O):e.text,U=t.sendMessageStream(H);if(await Wo((L,$)=>{M.process(L,$)},async()=>{for await(let L of U){if(y){t.interrupt().catch($=>{Je()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),$)});break}if(b&&i){let $=A??e.text.slice(0,40),D=i.register($),I=ru(D,i);ou(U,c,l,D,i,I,n,r.onTurnComplete,t.abortSignal),await N(),(s??{fn:console.log}).fn(p.dim(` \u2192 backgrounded as ${D.id}: ${D.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(L.type==="chunk"&&L.chunk.type==="content"?(c+=L.chunk.content,d=!0):L.type==="message"&&!d&&(c=L.message.content),L.type==="stream_retry"&&(c=c.slice(0,u)),L.type==="chunk"&&L.chunk.type==="tool_use_detail"){let $=L.chunk,D={toolName:$.toolName,toolUseId:$.toolUseId,input:$.toolInput};E.set($.toolUseId,D),x.push(D)}else if(L.type==="chunk"&&L.chunk.type==="tool_result"){let $=L.chunk;u=c.length;let D=E.get($.toolUseId);if(D&&(D.result=$.content,D.isError=$.isError,E.delete($.toolUseId)),r.onContextProgress){let I=Date.now();if(I-w>=S){w=I;try{let V=r.onContextProgress();V instanceof Promise&&await V}catch(V){Je()&&console.error(" "+p.error("onContextProgress (status refresh) failed:"),V)}}}}if(L.type==="paused"){await N(),(s??{fn:console.log}).fn(ab({reason:L.reason,...L.resetsAt!==void 0?{resetsAt:L.resetsAt}:{},...L.accountId!==void 0?{accountId:L.accountId}:{},...L.autoResume!==void 0?{autoResume:L.autoResume}:{}}));continue}if(L.type==="resumed"){let $=L.hotSwapped&&L.accountId?`\u25B6 Resumed on ${L.accountId}`:"\u25B6 Resumed";c="",u=0,d=!1,x.length=0,E.clear(),g=!1,h=void 0,m=!1,b=!1,M=R(),f=!1,await C(),(s??{fn:console.log}).fn(p.success($));continue}if(L.type==="error"){await N(),Fo($o(L.error)),m=!0;continue}M.process(L),L.type==="done"&&(g=!0,h=L.metadata)}}),await N(),y){let L=s?s.fn:console.log;L(p.warning("\u23F8 Stopped \u2014 work so far kept.")+p.dim(" Use /resume or --resume to continue.")),L("")}if(g&&!y){Dn(n,l,c,h,x),r.onTurnComplete&&await r.onTurnComplete(l,c).catch(()=>{}),Wc(process.stdout);let L=D=>{s?s.fn(D):console.log(D)},$=sI(c);if($&&(L(iI($)),L(""),r.onTerminalState))try{r.onTerminalState($)}catch{}if(l4(h,n,L),r.onAfterTurn){let D=r.onAfterTurn();D instanceof Promise&&await D.catch(()=>{})}}}catch(O){await N(),m||Fo($o(O))}finally{await N(),s&&(s.fn=s.idleFn),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setInFlight(!1),r.rearmStatus?.()}}function l4(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(oe(e.durationMs)),e.totalCostUsd!==void 0&&r.push(ze(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),s=Number(e.usage?.output_tokens??0);o+s>0&&r.push(se(o+s)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let i=Kf(t),a=mt(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 ~${se(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 ${se(a)}`))}n("")}function dI(e={}){let t=e.load??Qc,n=e.onResize??(i=>Ne.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=jx(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:eu(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var Eh={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 pI(e={}){let t=Math.max(2,e.capacity??8),n=[],r=null,o=()=>0,s=!1,i=0,a,l=null;function c(){let g=r?.rows;return typeof g=="number"&&g>0?g:24}function u(g){let h=o();return Math.max(1,g-1-h)}function d(){if(!s||!r?.isTTY)return;let g=f(),h=c(),b=g!==null&&h>1?1:0;if(b!==i&&(i>0&&m(),i=b,a?.(i)),b===0)return;let y=u(h);r.write("\x1B[s"),r.write(`\x1B[${y};1H`),r.write("\x1B[2K"),r.write(g),r.write("\x1B[u")}function m(){if(!r?.isTTY)return;let g=c(),h=u(g);r.write("\x1B[s"),r.write(`\x1B[${h};1H`),r.write("\x1B[2K"),r.write("\x1B[u")}function f(){if(n.length===0)return null;let g=p.dim(" ledger "),h=p.dim(" \xB7 "),b=n.map(E=>{let A=Eh[E];return A.color(`${A.glyph} ${A.label}`)}),y=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),w=g+b.join(h)+y,S=Math.max(20,Z()-2);if(q(w)<=S)return w;let x=g+n.map(E=>Eh[E].color(Eh[E].glyph)).join(p.dim(" "))+y;return ie(x,S)}return{push(g){n.push(g.kind),n.length>t&&(n=n.slice(n.length-t)),d()},reset(){n=[],s&&i>0&&(m(),i=0,a?.(0))},entries(){return n},render(){return f()},setRowCountChangeHandler(g){a=g},start(g){s||(s=!0,r=g.stream??process.stdout,o=g.getAdjacentRows??(()=>0),i=0,l=Ne.subscribe(()=>d()),d())},stop(){s&&(s=!1,l!==null&&(l(),l=null),i>0&&(m(),i=0,a?.(0)),r=null)},repaint(){d()}}}var Th=["\u25D0","\u25D1","\u25D2","\u25D3"],yd=class{stream;manager;registry;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;registryStartedHandler=null;registrySettledHandler=null;rowCount=0;onRowCountChange;getAdjacentRows;constructor(t,n,r={}){this.manager=t,this.registry=n,this.stream=r.stream??process.stdout,this.throttleMs=r.throttleMs??200,this.getAdjacentRows=r.getAdjacentRows??(()=>0)}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=Ne.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%Th.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()}redraw(){this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=[...this.manager.running().map(i=>({kind:"turn",task:i})),...(this.registry?.list()??[]).filter(i=>i.status==="running").map(i=>({kind:"subagent",job:i}))],n=this.stream.rows??24,r=this.getAdjacentRows(),o=Math.max(0,Math.min(t.length,n-1-r));if(o!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=o,this.onRowCountChange?.(o)),o===0)return;let s=Math.max(1,n-o-r);this.stream.write("\x1B[s");for(let i=0;i<o;i++){let a=t[i],l=s+i;this.stream.write(`\x1B[${l};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatItemLine(a))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let t=this.stream.rows??24,n=this.getAdjacentRows(),r=Math.min(this.rowCount,t-1-n),o=Math.max(1,t-r-n);this.stream.write("\x1B[s");for(let s=0;s<r;s++)this.stream.write(`\x1B[${o+s};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(Th[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(`${se(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(oe(l)),a.length>0&&i.push(p.dim(a.join(" \xB7 "))),ie(" "+i.join(" "),n)}formatJobLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(Th[this.spinnerIndex]),o=p.dim(t.jobId),s=p.bold(t.label||t.jobId),i=[r,o,s],a=Date.now()-t.startedAt;return i.push(p.dim(oe(a))),ie(" "+i.join(" "),n)}};import{spawn as c4}from"node:child_process";var u4=/\x1b(?:\[[0-9;]*[a-zA-Z]|[\]P^_X][^\x07\x1b]*(?:\x07|\x1b\\)|[@-OQ-WYZ\\])/g;function d4(){let e="";return{strip(t){let r=(e+t).replace(u4,""),o=r.match(/\x1b(?:[\]P^_X][^\x07\x1b]*|\[[0-9;]*)?$/);return o?(e=o[0],r.slice(0,r.length-e.length)):(e="",r)},flush(){return e="",""}}}function mI(e,t){if(e.length<=t)return e;let n=t;for(;n>0&&(e[n]&192)===128;)n--;return e.subarray(0,n)}var fI=12e4,gI=1e5;function xh(e){let t=Date.now(),n=e.timeoutMs??fI,r=e.maxBytes??gI,o=d4(),s;try{s=c4(e.command,{shell:!0,detached:!0,stdio:["ignore","pipe","pipe"],...e.cwd!==void 0?{cwd:e.cwd}:{},...e.env!==void 0?{env:{...process.env,...e.env}}:{}})}catch(E){let A=E instanceof Error?E.message:String(E);return{pid:void 0,kill:()=>{},promise:Promise.resolve({exitCode:null,durationMs:Date.now()-t,displayCaptured:"",modelCaptured:"",truncated:!1,errorReason:"spawn-failed",errorMessage:`Failed to spawn shell: ${A}`})}}s.unref();let i,a=!1,l=new Promise(E=>{i=A=>{a||(a=!0,E(A))}}),c="",u="",d=0,m=0,f=!1,g=!1,h=!1;function b(E){let A=r-d;if(A>0){let T=E.length<=A?E:mI(E,A);d+=T.length,c+=T.toString("utf8"),E.length>A&&(f=!0)}else E.length>0&&(f=!0);if(m<r){let T=o.strip(E.toString("utf8")),R=Buffer.byteLength(T,"utf8"),M=r-m;if(R<=M)u+=T,m+=R;else{let N=Buffer.from(T,"utf8");u+=mI(N,M).toString("utf8"),m=r,f=!0}}}function y(){if(s.pid!==void 0&&s.pid!==0&&!s.killed)try{process.kill(-s.pid,"SIGKILL")}catch{}}let w=setTimeout(()=>{y(),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"timeout",errorMessage:`Command timed out after ${n}ms`})},n),S=()=>{y(),clearTimeout(w),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:h?"Command killed":"Command aborted"})};e.abort.addEventListener("abort",S);function x(){g||a||d<r&&m<r||(g=!0,y(),clearTimeout(w),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:!0,errorReason:"overflow",errorMessage:`Output exceeded ${r} bytes`}))}return s.stdout?.on("data",E=>{b(E);try{e.onChunk?.(E,"stdout")}catch{}x()}),s.stderr?.on("data",E=>{b(E);try{e.onChunk?.(E,"stderr")}catch{}x()}),s.on("error",E=>{clearTimeout(w),e.abort.removeEventListener("abort",S),i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"spawn-failed",errorMessage:`Shell process error: ${E.message}`})}),s.on("close",(E,A)=>{if(clearTimeout(w),e.abort.removeEventListener("abort",S),!(g||a)){if(o.flush(),h){i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"abort",errorMessage:"Command killed"});return}if(E!==null&&E!==0){i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"nonzero-exit",errorMessage:`Command exited with code ${E}`});return}if(E===null){i({exitCode:null,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f,errorReason:"signal-killed",errorMessage:A?`Command killed by signal ${A}`:"Command killed by signal"});return}i({exitCode:E,durationMs:Date.now()-t,displayCaptured:c,modelCaptured:u,truncated:f})}}),{pid:s.pid,promise:l,kill:(E="SIGKILL")=>{if(!(s.pid===void 0||s.pid===0||s.killed)){h=!0;try{process.kill(-s.pid,E)}catch{}}}}}import{EventEmitter as p4}from"node:events";var hI=200,$a=class extends p4{jobs=new Map;handles=new Map;aborts=new Map;counter=0;start(t){let n=`sh-${++this.counter}`,r=new AbortController,o=xh({command:t.command,...t.cwd!==void 0?{cwd:t.cwd}:{},abort:r.signal,...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{},...t.maxBytes!==void 0?{maxBytes:t.maxBytes}:{},...t.env!==void 0?{env:t.env}:{},...t.onChunk!==void 0?{onChunk:t.onChunk}:{}}),s={id:n,command:t.command,pid:o.pid,startedAt:Date.now(),mode:t.mode,status:"running"};return this.jobs.set(n,s),this.handles.set(n,o),this.aborts.set(n,r),o.promise.then(i=>{s.result=i,s.status=m4(i),this.aborts.delete(n),this.handles.delete(n);try{this.emit("complete",s)}catch(a){console.warn(`[shell-jobs] listener for 'complete' threw on ${n}: ${a instanceof Error?a.message:String(a)}`)}this.pruneHistory()}),{job:s,handle:o}}get(t){return this.jobs.get(t)}list(){return[...this.jobs.values()].sort((t,n)=>t.startedAt-n.startedAt)}running(){return this.list().filter(t=>t.status==="running")}kill(t){let n=this.jobs.get(t);if(!n||n.status!=="running")return!1;let r=this.aborts.get(t);if(r)return r.abort(),!0;let o=this.handles.get(t);return o?(o.kill(),!0):!1}killAll(){let t=this.running();for(let n of t)this.kill(n.id);return t}runningCount(){let t=0;for(let n of this.jobs.values())n.status==="running"&&t++;return t}pruneHistory(){if(!(this.jobs.size<=hI))for(let[t,n]of this.jobs){if(this.jobs.size<=hI)break;n.status!=="running"&&this.jobs.delete(t)}}};function m4(e){return e.errorReason===void 0?"completed":e.errorReason==="abort"?"killed":"failed"}function f4(e){if(!e.startsWith("!"))return null;if(e.startsWith("!&")){let n=e.slice(2).trim();return n.length===0?null:{mode:"background",command:n}}let t=e.slice(1).trim();return t.length===0?null:{mode:"foreground",command:t}}function g4(e,t){let n=oe(t.durationMs);return t.errorReason==="abort"?p.dim(` [${e.id} \xB7 killed \xB7 ${n}]`):t.errorReason==="timeout"?p.dim(` [${e.id} \xB7 timed out \xB7 ${n}]`):t.errorReason==="overflow"?p.dim(` [${e.id} \xB7 output overflow \xB7 ${n}]`):t.errorReason==="spawn-failed"?p.warning(` [${e.id} \xB7 spawn failed \xB7 ${n}]`):t.errorReason==="nonzero-exit"?p.warning(` [${e.id} \xB7 exit ${t.exitCode} \xB7 ${n}]`):t.errorReason==="signal-killed"?p.warning(` [${e.id} \xB7 killed by signal \xB7 ${n}]`):p.dim(` [${e.id} \xB7 exit ${t.exitCode??0} \xB7 ${n}]`)}function yI(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function h4(e,t,n){let r=[],o=[`mode="${t}"`];return n.exitCode!==null&&o.push(`exit="${n.exitCode}"`),n.errorReason!==void 0&&o.push(`reason="${n.errorReason}"`),o.push(`duration="${oe(n.durationMs)}"`),n.truncated&&o.push('truncated="true"'),r.push(`<bash-passthrough ${o.join(" ")}>`),r.push(`<command>${yI(e)}</command>`),r.push("<output>"),r.push(yI(n.modelCaptured)),r.push("</output>"),r.push("</bash-passthrough>"),r.join(`
|
|
1899
1899
|
`)}var bd=class e{constructor(t){this.opts=t;this.registry.on("complete",n=>{if(n.mode!=="background")return;let r=n.result;r&&(this.queueInjection({command:n.command,mode:"background",result:r}),this.pendingNotifications.push({job:n,result:r}),this.pendingNotifications.length>e.MAX_PENDING_NOTIFICATIONS&&this.pendingNotifications.shift())})}opts;registry=new $a;pendingInjections=[];pendingNotifications=[];activeFgJobId=null;static MAX_PENDING_INJECTIONS=25;static MAX_PENDING_NOTIFICATIONS=50;async dispatch(t){let n=f4(t);return n===null?t==="!"||t==="!&"||t.startsWith("! ")||t.startsWith("!& ")?(this.opts.writeLine(p.dim(" usage: !<cmd> (foreground) !&<cmd> (background)")),!0):!1:(n.mode==="foreground"?await this.runForeground(n.command):this.startBackground(n.command),!0)}drainInjections(){if(this.pendingInjections.length===0)return"";let t=this.pendingInjections.map(n=>h4(n.command,n.mode,n.result));return this.pendingInjections=[],t.join(`
|
|
1900
1900
|
`)+`
|
|
1901
1901
|
`}drainNotifications(){if(this.pendingNotifications.length===0)return[];let t=this.pendingNotifications;return this.pendingNotifications=[],t}abortActiveForeground(){return this.activeFgJobId===null?!1:(this.registry.kill(this.activeFgJobId),!0)}hasActiveForeground(){return this.activeFgJobId!==null}drainOnExit(){let t=this.registry.killAll();t.length>0&&this.opts.writeLine(p.dim(` Killing ${t.length} background shell job${t.length===1?"":"s"} on exit.`))}async runForeground(t){this.opts.writeLine(p.dim(`$ ${t}`));let n="",r=!1,o=()=>{let c;for(;(c=n.indexOf(`
|
|
1902
1902
|
`))!==-1;){let u=n.slice(0,c);n=n.slice(c+1),this.opts.writeLine(u)}},s={command:t,mode:"foreground",onChunk:c=>{r||(n+=c.toString("utf8"),o())}},i=this.opts.getCwd();i!==void 0&&(s.cwd=i);let{job:a,handle:l}=this.registry.start(s);this.activeFgJobId=a.id;try{let c=await l.promise;r=!0,n.length>0&&(this.opts.writeLine(n),n=""),this.opts.writeLine(g4(a,c)),this.queueInjection({command:t,mode:"foreground",result:c})}finally{this.activeFgJobId=null}}startBackground(t){let n={command:t,mode:"background"},r=this.opts.getCwd();r!==void 0&&(n.cwd=r);let{job:o}=this.registry.start(n);this.opts.writeLine(p.dim(` [${o.id}] background: `)+t)}queueInjection(t){this.pendingInjections.push(t),this.pendingInjections.length>e.MAX_PENDING_INJECTIONS&&this.pendingInjections.shift()}};function y4(e,t){if(e!==void 0){let n=e.toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}return typeof t=="boolean"?t:!0}async function b4(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(p.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}function wd(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function bI(e,t,n,r){let o=null,s=[];e.session.current.waitForInitialization().then(async S=>{Je()&&(o=Yc(S)),await zu(e.session.current),Je()&&(s=oC())}).catch(()=>{});let i=await ZC(),a=new hd({rl:e.rl,history:i,statusLine:e.statusLine}),l,c,u,d,m,f,g,h=!1,b=!1,y=FR({onError:S=>Y("[afk suggest] Tier-2 completion failed:",S)}),w=y4(v.AFK_SUGGEST_GHOST,e.suggestGhostConfig);try{await a.armCompositor({promptFn:()=>wd(e.stats.model,e.stats.planMode),onCancel:r,onShiftTab:()=>{hr(e.slashCtx).catch(()=>{}),e.statusLine.rearm()},scrollRegion:e.statusLine,...e.preArmAnchorRow!==void 0?{anchorRow:e.preArmAnchorRow}:{},...w?{suggest:{engine:y,getContext:()=>({model:e.stats.model,apiKey:e.suggestApiKey,baseUrl:e.suggestBaseUrl,cwd:e.stats.cwd??process.cwd(),getHistory:()=>{let C=a.history;return C.getEntries?[...C.getEntries()]:[]},getDropdownTopCandidate:C=>{let F=a.autocompleteState.candidates[0];return F&&F.value.startsWith(C)&&F.value.length>C.length?F.value:null},getTranscriptTail:()=>"",getRecentCommands:()=>[],llmEnabled:()=>/^(1|true|yes|on)$/i.test(v.AFK_SUGGEST_ENABLED??"")})}}:{}});let S=a.getCompositor();Zt.install(Gc({readLine:C=>a.readLine({promptFn:()=>C}).then(O=>O.text),writer:{line:(C="")=>{let O=a.getCompositor();O?O.commitAbove(C):process.stdout.write(C+`
|
|
1903
1903
|
`)}},pendingCount:()=>Zt.pendingCount(),...S?{pickFromList:C=>rI(S,C),readTextOverlay:C=>oI(S,C)}:{}})),e.replRenderer.setCompositor(a.getCompositor()),e.slashCtx.getCompositor=()=>a.getCompositor();let x=a.getCompositor();if(x){let C=O=>x.commitAbove(O);e.completionWriter.fn=C,e.completionWriter.idleFn=C}e.slashCtx.setSoftStopHandler=C=>a.setSoftStopHandler(C),e.slashCtx.onStageChange=C=>m?.repaint(C),e.slashCtx.onContextProgress=async()=>{await e.contextSampler.refresh(),e.statusLine.repaint(gr(e.stats,e.contextSampler))},e.slashCtx.transcript=t,e.inputSurfaceRef&&(e.inputSurfaceRef.current=a),c=dI(),g=pI(),e.clearVerdictLedger=()=>g?.reset(),u=new nu,rR(u),pR(u),gR(u),mR(e.backgroundRegistry);let E=0,A=0,T=1,R=()=>e.statusLine.setExtraRows(T+E+A);g.setRowCountChangeHandler(C=>{A=C,R(),d?.redraw(),m?.redraw()}),d=new yd(u,e.backgroundRegistry,{getAdjacentRows:()=>A}),d.setRowCountChangeHandler(C=>{E=C,R()}),m=new Au({getExtraRows:()=>e.statusLine.getExtraRows()}),m.setRowCountChangeHandler(C=>{R()}),e.statusLine.setAfterScrollRestore(()=>{g?.repaint(),d?.redraw(),m?.redraw()}),d.start(),m.start(),g.start({stream:process.stdout});let M=50,N=[];for(u.on("complete",C=>{N.length>=M&&N.shift(),N.push(C)}),f=new bd({writeLine:C=>e.replRenderer.writeLine(C),getCwd:()=>e.stats.cwd}),uR(f),n.tryAbortShellForeground=()=>f.abortActiveForeground();;){if(o&&(e.replRenderer.writeLine(o),e.replRenderer.writeLine(""),o=null),s.length>0){for(let $ of s)e.replRenderer.writeLine($);e.replRenderer.writeLine(""),s=[]}for(;N.length>0;){let $=N.shift(),D=$.status==="succeeded"?"\u2713":"\u2717",I=[];if($.resultText){let J=$.resultText.trim().split(`
|
|
1904
1904
|
`)[0]?.slice(0,80)??"";J&&I.push(J)}$.error&&I.push($.error.message);let V=[$.stats.toolUses>0?`${$.stats.toolUses} tools`:"",$.stats.tokens>0?`${Math.round($.stats.tokens/1e3)}k tok`:"",$.stats.durationMs>0?`${Math.round($.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");V&&I.push(V),e.replRenderer.writeLine(Jn({kind:$.status==="succeeded"?"checkpoint":"diagnosis",title:`${D} ${$.id} ${$.label}`,body:I})),e.replRenderer.writeLine("")}let C=f.drainNotifications();for(let{job:$,result:D}of C){let I=D.errorReason===void 0?"\u2713":"\u2717",V=D.errorReason==="abort"?"killed":D.errorReason==="timeout"?"timed out":D.errorReason==="signal-killed"?"killed by signal":`exit ${D.exitCode??0}`,J=Math.max(0,Math.round(D.durationMs/100)/10);e.replRenderer.writeLine(p.dim(` ${I} [${$.id}] ${V} \xB7 ${J}s \xB7 `)+$.command)}let O=c.renderIfChanged(e.stats.sessionId);if(O.length>0){for(let $ of O)e.replRenderer.writeLine($);e.replRenderer.writeLine("")}let F,H;if(l!==void 0){let $=l;l=void 0;let D=wd(e.stats.model,e.stats.planMode),I=eo({buffer:$.text,promptText:D,isTTY:!!process.stdout.isTTY,attachmentSummary:Fs([...$.attachments])});e.replRenderer.writeLine(I),F=$.text.trim(),H=$.attachments}else{let $=await a.readLine({promptFn:()=>wd(e.stats.model,e.stats.planMode),onSigint:r,onShiftTab:()=>{hr(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});F=$.text.trim(),H=$.attachments}if(!F&&H.length===0)continue;if(F.startsWith("!")){let $=/^(0|false|off|no)$/i.test(v.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!$&&(h||(h=!0,e.replRenderer.writeLine(p.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch(F))){e.statusLine.rearm();continue}}let U=!1;if(F.startsWith("/")){let $=await wx(F,e.slashCtx,H);if($.handled){if($.result==="exit"){e.rl.close();return}if((F==="/clear"||F.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),g.reset()),$.result!==null&&typeof $.result=="object"&&"kind"in $.result&&$.result.kind==="submit"){l={text:$.result.message,attachments:H??[]},e.statusLine.rearm();continue}e.statusLine.rearm();continue}U=!0}i.push(F),await b4(e,F);let G=F;if(U){let $=Wf(F);if($){let D=$.name.replace(/^\//,"").split(":").pop()??"";if(D&&Xg(D)){let I={skillName:D,rawArgs:$.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},V=e.session.current.sessionId,J=uo(V),X=Date.now();Y(`[afk trace] preflight.start commandName=${D}`);let te=!1,B=await co(I,{cwd:e.stats.cwd??process.cwd(),artifactDir:J},Se=>{Je()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${D}) failed: `)+(Se instanceof Error?Se.message:String(Se)))});te=B!==null,Y(`[afk trace] preflight.end commandName=${D} durationMs=${Date.now()-X} success=${te}`),G=Qg(B?.manifestBlock,F)}}}let L=f.drainInjections();L.length>0&&(G=L+G),await uI({text:G,attachments:H},e.session.current,e.stats,{setInFlight($){n.turnInFlight=$},async onTurnComplete($,D){if(await t.appendTurn($,D),e.stats.sessionId)try{sn(e.stats)}catch(I){b||(b=!0,e.replRenderer.writeLine(p.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(I instanceof Error?I.message:String(I))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),e.statusLine.rearm(),m?.repaint("observing")},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:$=>g?.push($),setActiveCompositor:$=>{n.activeCompositor=$},setInterruptNotifier:$=>{n.notifyInterrupting=$},scrollRegion:e.statusLine,getCompositor:()=>a.getCompositor(),setBackgroundHandler:$=>a.setBackgroundHandler($),setSoftStopHandler:$=>a.setSoftStopHandler($),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(gr(e.stats,e.contextSampler))},...m?{onStageChange:$=>m.repaint($)}:{}},e.options.thinkingUi,e.completionWriter,u,a.toRunTurnRefs(wd(e.stats.model,e.stats.planMode)))}}finally{if(u!==void 0)for(let x of u.running())u.cancel(x.id);n.tryAbortShellForeground=null,f?.drainOnExit(),m?.stop(),d?.stop(),g?.stop(),c?.dispose();let S=x=>console.log(x);e.completionWriter.fn=S,e.completionWriter.idleFn=S,await a.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}_i();import{execFile as w4}from"node:child_process";import{dirname as S4,isAbsolute as v4,resolve as k4}from"node:path";import{promisify as E4}from"node:util";var wI=E4(w4),T4=3e3,x4=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function R4(){let t=(await wI("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=v4(t)?t:k4(process.cwd(),t);return S4(n)}async function SI(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await R4()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),T4)});try{let o=un({execFile:wI,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=>x4.has(c.verdict)&&i.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}bl();_i();import{promises as A4}from"node:fs";import{dirname as _4,join as EI}from"node:path";import{randomBytes as C4}from"node:crypto";var I4=["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(`
|
|
1905
|
-
`),vI=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Rh=30,P4=1024,M4=8e3,O4="haiku";async function $4(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=N4(n,P4),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??M4),i=t.signal?B4([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await jo({token:t.token,model:t.model??O4,system:I4,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=D4(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=_4(t.worktreePath);return await L4(l,c)}function D4(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(vI.test(t)&&t.length<=Rh)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>Rh)break;o=i}return vI.test(o)?o:null}async function L4(e,t){if(!await F4(EI(t,e)))return e;let n=C4(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Rh-5)}-${n}`}async function F4(e){try{return await A4.access(e),!0}catch{return!1}}function N4(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 B4(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 TI(e){let t,n,r=EI(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await $4(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),s=t??"unknown",i=n;if(o!==null){let l=`${Hl(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return kI(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){s="create-failed",i=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return kI(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:s,...i!==void 0?{detail:i}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function kI(e,t){e&&e.setCwd(t),U4(t)}function U4(e){try{process.chdir(e)}catch{}}Le();_n();K();import{spawn as xI}from"child_process";import{existsSync as G4,mkdirSync as z4,readFileSync as RI,unlinkSync as q4,writeFileSync as J4}from"fs";import{get as Y4}from"https";import{join as AI}from"path";import{readFileSync as j4}from"fs";import{dirname as H4,join as W4}from"path";import{fileURLToPath as K4}from"url";function jn(){try{return"3.96.
|
|
1905
|
+
`),vI=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,Rh=30,P4=1024,M4=8e3,O4="haiku";async function $4(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=N4(n,P4),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??M4),i=t.signal?B4([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await jo({token:t.token,model:t.model??O4,system:I4,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=D4(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=_4(t.worktreePath);return await L4(l,c)}function D4(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(vI.test(t)&&t.length<=Rh)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>Rh)break;o=i}return vI.test(o)?o:null}async function L4(e,t){if(!await F4(EI(t,e)))return e;let n=C4(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,Rh-5)}-${n}`}async function F4(e){try{return await A4.access(e),!0}catch{return!1}}function N4(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 B4(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 TI(e){let t,n,r=EI(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await $4(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),s=t??"unknown",i=n;if(o!==null){let l=`${Hl(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return kI(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){s="create-failed",i=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return kI(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:s,...i!==void 0?{detail:i}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function kI(e,t){e&&e.setCwd(t),U4(t)}function U4(e){try{process.chdir(e)}catch{}}Le();_n();K();import{spawn as xI}from"child_process";import{existsSync as G4,mkdirSync as z4,readFileSync as RI,unlinkSync as q4,writeFileSync as J4}from"fs";import{get as Y4}from"https";import{join as AI}from"path";import{readFileSync as j4}from"fs";import{dirname as H4,join as W4}from"path";import{fileURLToPath as K4}from"url";function jn(){try{return"3.96.1"}catch{}try{let e=H4(K4(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(j4(W4(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}z();var V4=64*1024,X4=1440*60*1e3,Z4="update-check.json",Q4="pending-update.json";function _I(){return AI(tl(),Z4)}function Ah(){return AI(tl(),Q4)}function CI(){let e=tl();G4(e)||z4(e,{recursive:!0})}function eV(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 tV(){try{let e=RI(_I(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function nV(){try{CI();let e=`
|
|
1906
1906
|
const https = require('https');
|
|
1907
1907
|
const fs = require('fs');
|
|
1908
1908
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|
|
@@ -1949,10 +1949,10 @@ ${O.slice(0,500)}`).catch(F=>{console.error("[daemon] crash notification push fa
|
|
|
1949
1949
|
`||o===""?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",r),process.stdout.write(`
|
|
1950
1950
|
`),t(n.join("").trim())):o===""?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write(`
|
|
1951
1951
|
`),process.exit(1)):o==="\x7F"?n.pop():n.push(o)};process.stdin.on("data",r)})}function lP(){return iP("Anthropic API key or OAuth token: ")}async function Td(e){let t=e??await lP();t||(console.error(aP.red("No token provided. Nothing saved.")),process.exit(1));let n=ut(),r,o;t.startsWith("sk-ant-oat")?(r="CLAUDE_CODE_OAUTH_TOKEN",o=["ANTHROPIC_API_KEY"]):(r="ANTHROPIC_API_KEY",o=["CLAUDE_CODE_OAUTH_TOKEN"]),Hn(n,r,t,o),console.log(aP.green(`\u2713 Saved ${r} to ${n}`)),console.log(p.meta("Restart any running afk daemon to pick up the new token."))}function cP(e){e.command("login [token]").description("Save an Anthropic API key or OAuth token for afk to use").action(async t=>{let n=ne(ot());if(n==="openai-compatible"||n==="openai-codex"){console.log(Zs.yellow("`afk login` is Anthropic-only.")),console.log(""),console.log("For OpenAI-backed models (gpt-*, o1*, o3*, o4*, codex-*), authenticate with one of:"),console.log(Zs.cyan(" export OPENAI_API_KEY=sk-proj-...")),console.log(Zs.cyan(" # or: export CODEX_API_KEY=...")),console.log(Zs.cyan(" codex login --api-key sk-proj-...")),console.log(""),console.log(Zs.gray("Run `afk provider auth diagnose` to see which auth source AFK will use.")),console.log(Zs.gray("To save an Anthropic key for Claude models instead, re-run with AFK_MODEL=sonnet (or similar) first."));return}await Td(t)})}import me from"chalk";import xd from"ora";K();import{existsSync as JV}from"fs";import{join as YV}from"path";ft();cr();async function Dh(e,t={},n={}){let r=n.pluginsDir??Fe(),o=n.indexPath??ce(),s=n.now??(()=>new Date),i=n.gitRunner?{runner:n.gitRunner}:{},l=be(o).plugins[e];if(!l)throw new Error(`plugin "${e}" is not installed`);let c=YV(r,e);if(!JV(c))return{name:e,status:"missing-dir",dir:c};if(Pn(),l.sourceType==="local")return{name:e,status:"skipped-local"};await Yu(c,i);let u,d=!1;if(t.ref)u=t.ref;else{let E=await vr(c,i),A=Er(E);A!==null?(u=A,d=!0):u=l.ref??await mn(c,i)}let m=`refs/remotes/origin/${u}`,f=d?null:await Vu(c,m,i),g=f!==null,h=await pn(c,i);if(g?f===h:u===l.ref)return{name:e,status:"up-to-date",ref:u,commit:h,version:lo(c).version};await kr(c,g?m:d?`refs/tags/${u}`:u,{...i,force:!0});let y=await pn(c,i),w=lo(c).version,S=s().toISOString(),x={...l,ref:u,commit:y,updatedAt:S};return lr(e,x,o),{name:e,status:"updated",fromRef:l.ref,toRef:u,commit:y,version:w}}async function uP(e={}){let t=e.indexPath??ce(),n=be(t),r=[];for(let o of Object.keys(n.plugins))try{r.push(await Dh(o,{},e))}catch(s){let i=s instanceof Error?s.message:String(s);r.push({name:o,status:"missing-dir",dir:i})}return r}K();ft();import{existsSync as VV,lstatSync as XV,rmSync as ZV,unlinkSync as QV}from"fs";import{join as e8}from"path";cr();function dP(e,t={}){Bn(e);let n=t.pluginsDir??Fe(),r=t.indexPath??ce(),o=e8(n,e),s=!1;t8(o)?(QV(o),s=!0):VV(o)&&(ZV(o,{recursive:!0,force:!0}),s=!0);let i=be(r),a=Object.prototype.hasOwnProperty.call(i.plugins,e);return a&&ak(e,r),Pn(),{name:e,removedDir:s,removedIndexEntry:a}}function t8(e){try{return XV(e).isSymbolicLink()}catch{return!1}}ft();K();function pP(e,t={}){let n=t.logger??console,r=t.pluginsDir??Fe(),o=t.indexPath??ce(),s={...t,pluginsDir:r,indexPath:o},i=e.command("plugin").description("Manage AFK plugins (install / update / list / remove / enable / disable)");i.command("install <source> [name]").description("Install a plugin from a git URL, owner/repo shorthand, local path, or <marketplace>:<plugin>").option("-r, --ref <ref>","Install a specific tag, branch, or SHA").option("-f, --force","Replace an existing plugin with the same name").option("-y, --yes","Skip the install warning and countdown (non-interactive / CI)").action(async(a,l,c)=>{let u;try{u=Js(a)}catch(f){xd(`Installing ${a}\u2026`).start().fail("Failed"),W(f)}let d=process.stderr.isTTY===!0&&!c.yes;if(u.type==="marketplace-ref"){let f=xd(`Installing ${u.marketplace}:${u.plugin}\u2026`).start();try{let g=await Ys(u.marketplace,u.plugin,{...c.ref?{ref:c.ref}:{},...c.force?{force:!0}:{}},{...s,confirm:d});f.succeed(me.green(`Installed ${me.bold(g.key)}`)+me.gray(` at ${g.dir}`))}catch(g){f.fail("Failed"),W(g)}return}let m=xd(`Installing ${a}\u2026`).start();try{let f={...l?{name:l}:{},...c.ref?{ref:c.ref}:{},...c.force?{force:!0}:{}},g=await Qu(a,f,{...s,confirm:d});m.succeed(me.green(`Installed ${me.bold(g.name)}`)+me.gray(` at ${g.dir}${g.entry.ref?` (ref: ${g.entry.ref})`:""}`))}catch(f){m.fail("Failed"),W(f)}}),i.command("update [name]").description("Update one plugin, or all if no name is given").option("-r, --ref <ref>","Pin to a specific ref instead of the latest tag").action(async(a,l)=>{try{if(a){let c=xd(`Updating ${a}\u2026`).start(),u=await Dh(a,l.ref?{ref:l.ref}:{},s);r8(u,c)}else{n.log(me.cyan("Updating all plugins\u2026"));let c=await uP(s);if(c.length===0){n.log(me.gray(" (nothing installed)"));return}for(let u of c)n.log(" "+mP(u))}}catch(c){W(c)}}),i.command("list").description("List installed plugins with their source, version, and enabled state").option("-f, --format <format>","Output format (text|json)","text").action(a=>{let l=be(o);if(a.format==="json"){let c=Object.entries(l.plugins).map(([u,d])=>({name:u,enabled:d.enabled,...d.ref?{ref:d.ref}:{},source:d.source}));n.log(JSON.stringify({plugins:c},null,2))}else n8(l,n)}),i.command("remove <name>").description("Remove a plugin (directory + index entry)").action(a=>{let l=dP(a,{pluginsDir:r,indexPath:o});if(!l.removedDir&&!l.removedIndexEntry){n.log(me.gray(`No plugin named "${a}" to remove.`));return}let c=[l.removedDir?"directory":null,l.removedIndexEntry?"index entry":null].filter(Boolean);n.log(me.green(`Removed ${a}: ${c.join(" + ")}`))}),i.command("enable <name>").description("Re-enable a previously disabled plugin").action(a=>{try{sf(a,!0,o),n.log(me.green(`Enabled ${a}`))}catch(l){W(l)}}),i.command("disable <name>").description("Keep the plugin on disk but skip it from SDK init").action(a=>{try{sf(a,!1,o),n.log(me.yellow(`Disabled ${a} (dir preserved at ${r}/${a})`))}catch(l){W(l)}})}function n8(e,t){let n=Object.keys(e.plugins).sort();if(n.length===0){t.log(me.gray("No plugins installed.")),t.log(me.gray(" Try: afk plugin install anthropics/claude-plugins-official"));return}t.log(me.cyan.bold(`
|
|
1952
|
-
Installed plugins:`));for(let r of n){let o=e.plugins[r];if(!o)continue;let s=o.enabled?me.green("enabled "):me.yellow("disabled"),i=o.ref?me.blue(o.ref):me.gray("(local)"),a=me.gray(o.source);t.log(` ${me.bold(r.padEnd(30))} ${s} ${i.padEnd(12)} ${a}`)}t.log("")}function mP(e){switch(e.status){case"updated":{let t=e.fromRef===e.toRef?`${e.toRef} @ ${e.commit.slice(0,7)}`:`${e.fromRef??"(none)"} \u2192 ${e.toRef}`,n=e.version?me.gray(` [v${e.version.replace(/^v/i,"")}]`):"";return`${me.green("\u2713")} ${me.bold(e.name)}: ${t}${n}`}case"up-to-date":{let t=e.version?me.gray(` [v${e.version.replace(/^v/i,"")}]`):"";return`${me.gray("\xB7")} ${me.bold(e.name)}: up-to-date (${e.ref})${t}`}case"skipped-local":return`${me.gray("\xB7")} ${me.bold(e.name)}: skipped (local source)`;case"missing-dir":return`${me.yellow("!")} ${me.bold(e.name)}: plugin dir missing (${e.dir})`}}function r8(e,t){let n=mP(e);e.status==="updated"?t.succeed(n):e.status==="up-to-date"||e.status==="skipped-local"?t.info(n):t.warn(n)}import
|
|
1953
|
-
Installed marketplaces:`));for(let[u,d]of c.sort()){let m=d.ref?
|
|
1954
|
-
Plugins in ${a}:`)),c.forEach((u,d)=>{let m=u.installed?
|
|
1955
|
-
Install one: afk plugin install ${a}:<plugin>`))}catch(c){W(c)}}),i.command("install-plugin <marketplace> <plugin>").description("Install a single plugin from a marketplace").option("-r, --ref <ref>","For git-sourced plugins, pin to a specific tag/branch/SHA").option("-f, --force","Replace an existing plugin with the same key").option("-y, --yes","Skip the install warning and countdown (non-interactive / CI)").action(async(a,l,c)=>{let u=process.stderr.isTTY===!0&&!c.yes,d=Lh(`Installing ${a}:${l}\u2026`).start();try{let m=await Ys(a,l,{...c.ref?{ref:c.ref}:{},...c.force?{force:!0}:{}},{...s,confirm:u});d.succeed(
|
|
1952
|
+
Installed plugins:`));for(let r of n){let o=e.plugins[r];if(!o)continue;let s=o.enabled?me.green("enabled "):me.yellow("disabled"),i=o.ref?me.blue(o.ref):me.gray("(local)"),a=me.gray(o.source);t.log(` ${me.bold(r.padEnd(30))} ${s} ${i.padEnd(12)} ${a}`)}t.log("")}function mP(e){switch(e.status){case"updated":{let t=e.fromRef===e.toRef?`${e.toRef} @ ${e.commit.slice(0,7)}`:`${e.fromRef??"(none)"} \u2192 ${e.toRef}`,n=e.version?me.gray(` [v${e.version.replace(/^v/i,"")}]`):"";return`${me.green("\u2713")} ${me.bold(e.name)}: ${t}${n}`}case"up-to-date":{let t=e.version?me.gray(` [v${e.version.replace(/^v/i,"")}]`):"";return`${me.gray("\xB7")} ${me.bold(e.name)}: up-to-date (${e.ref})${t}`}case"skipped-local":return`${me.gray("\xB7")} ${me.bold(e.name)}: skipped (local source)`;case"missing-dir":return`${me.yellow("!")} ${me.bold(e.name)}: plugin dir missing (${e.dir})`}}function r8(e,t){let n=mP(e);e.status==="updated"?t.succeed(n):e.status==="up-to-date"||e.status==="skipped-local"?t.info(n):t.warn(n)}import ae from"chalk";import Lh from"ora";ft();K();function fP(e,t={}){let n=t.logger??console,r=t.cacheDir??fn(),o=t.indexPath??ce(),s={...t,cacheDir:r,indexPath:o},i=e.command("marketplace").description("Manage AFK plugin marketplaces (install / list / plugins / install-plugin / remove / update)");i.command("install <source> [name]").description("Clone or symlink a marketplace into the local plugin cache").option("-r, --ref <ref>","Install a specific tag, branch, or SHA").option("-f, --force","Replace an existing marketplace with the same name").action(async(a,l,c)=>{let u=Lh(`Installing marketplace ${a}\u2026`).start();try{let d={...l?{name:l}:{},...c.ref?{ref:c.ref}:{},...c.force?{force:!0}:{}},m=await td(a,d,s),f=m.entry.ref?` (ref: ${m.entry.ref})`:"";u.succeed(ae.green(`Installed marketplace ${ae.bold(m.name)}`)+ae.gray(`${f} at ${m.dir}`)),n.log(ae.gray(` ${m.plugins.length} plugin(s) available \u2014 run \`afk marketplace plugins ${m.name}\` to list.`))}catch(d){u.fail("Failed"),W(d)}}),i.command("list").description("List installed marketplaces with their source and ref").option("-f, --format <format>","Output format (text|json)","text").action(a=>{let l=be(o),c=Object.entries(l.marketplaces);if(a.format==="json"){n.log(JSON.stringify({marketplaces:c.map(([u,d])=>({name:u,source:d.source,sourceType:d.sourceType,...d.ref?{ref:d.ref}:{}}))},null,2));return}if(c.length===0){n.log(ae.gray("No marketplaces installed.")),n.log(ae.gray(" Try: afk marketplace install <org>/<marketplace>"));return}n.log(ae.cyan.bold(`
|
|
1953
|
+
Installed marketplaces:`));for(let[u,d]of c.sort()){let m=d.ref?ae.blue(d.ref):ae.gray("(local)"),f=ae.gray(d.source);n.log(` ${ae.bold(u.padEnd(30))} ${m.padEnd(12)} ${f}`)}n.log("")}),i.command("plugins <name>").description("List plugins inside a marketplace, with [installed] / [available] markers").option("-f, --format <format>","Output format (text|json)","text").action((a,l)=>{try{let c=od(a,s);if(l.format==="json"){n.log(JSON.stringify({marketplace:a,plugins:c},null,2));return}if(c.length===0){n.log(ae.gray(`Marketplace "${a}" lists no plugins.`));return}n.log(ae.cyan.bold(`
|
|
1954
|
+
Plugins in ${a}:`)),c.forEach((u,d)=>{let m=u.installed?ae.green("[\u2713]"):ae.gray("[ ]"),f=u.description?ae.gray(` \u2014 ${u.description}`):"";n.log(` ${m} ${ae.bold((d+1).toString().padStart(2))}. ${ae.bold(u.name)}${f}`)}),n.log(ae.gray(`
|
|
1955
|
+
Install one: afk plugin install ${a}:<plugin>`))}catch(c){W(c)}}),i.command("install-plugin <marketplace> <plugin>").description("Install a single plugin from a marketplace").option("-r, --ref <ref>","For git-sourced plugins, pin to a specific tag/branch/SHA").option("-f, --force","Replace an existing plugin with the same key").option("-y, --yes","Skip the install warning and countdown (non-interactive / CI)").action(async(a,l,c)=>{let u=process.stderr.isTTY===!0&&!c.yes,d=Lh(`Installing ${a}:${l}\u2026`).start();try{let m=await Ys(a,l,{...c.ref?{ref:c.ref}:{},...c.force?{force:!0}:{}},{...s,confirm:u});d.succeed(ae.green(`Installed ${ae.bold(m.key)}`)+ae.gray(` at ${m.dir}`))}catch(m){d.fail("Failed"),W(m)}}),i.command("remove <name>").description("Remove a marketplace and cascade-delete its installed plugins").action(a=>{let l=nd(a,{cacheDir:r,indexPath:o});if(!l.removedDir&&!l.removedIndexEntry&&l.removedPluginEntries.length===0){n.log(ae.gray(`No marketplace named "${a}" to remove.`));return}let c=[l.removedDir?"directory":null,l.removedIndexEntry?"index entry":null,l.removedPluginEntries.length>0?`${l.removedPluginEntries.length} plugin entry`:null].filter(Boolean);if(n.log(ae.green(`Removed ${a}: ${c.join(" + ")}`)),l.removedPluginEntries.length>0)for(let u of l.removedPluginEntries)n.log(ae.gray(` - ${u}`))}),i.command("update [name]").description("Update one marketplace, or all if no name is given").option("-r, --ref <ref>","Pin to a specific ref instead of the latest tag").action(async(a,l)=>{try{if(a){let c=Lh(`Updating ${a}\u2026`).start(),u=await Ta(a,l.ref?{ref:l.ref}:{},s);o8(u,c)}else{n.log(ae.cyan("Updating all marketplaces\u2026"));let c=await EC(s);if(c.length===0){n.log(ae.gray(" (no marketplaces installed)"));return}for(let u of c)n.log(" "+gP(u))}}catch(c){W(c)}})}function gP(e){switch(e.status){case"updated":{let t=e.addedPlugins.length>0?` +${e.addedPlugins.join(", ")}`:"",n=e.removedPlugins.length>0?` -${e.removedPlugins.join(", ")}`:"",r=e.fromRef===e.toRef?`${e.toRef} @ ${e.commit.slice(0,7)}`:`${e.fromRef??"(none)"} \u2192 ${e.toRef}`,o=e.pluginVersions.filter(i=>i.version!==null).map(i=>`${i.name} ${i.version}`).join(", "),s=o?ae.gray(` [${o}]`):"";return`${ae.green("\u2713")} ${ae.bold(e.name)}: ${r}${ae.gray(t+n)}${s}`}case"up-to-date":return`${ae.gray("\xB7")} ${ae.bold(e.name)}: up-to-date (${e.ref})`;case"skipped-local":return`${ae.gray("\xB7")} ${ae.bold(e.name)}: skipped (local source)`;case"missing-dir":return`${ae.yellow("!")} ${ae.bold(e.name)}: marketplace dir missing (${e.dir})`}}function o8(e,t){let n=gP(e);e.status==="updated"?t.succeed(n):e.status==="up-to-date"||e.status==="skipped-local"?t.info(n):t.warn(n)}function hP(e){e.command("doctor").description("Check system health and configuration").option("-f, --format <format>","Output format (text|json)","text").action(async t=>{let n=await Uu(),r={passed:n.filter(o=>o.state==="pass").length,warned:n.filter(o=>o.state==="warn").length,failed:n.filter(o=>o.state==="fail").length};t.format==="json"?console.log(JSON.stringify({checks:n,summary:r},null,2)):(n.forEach(o=>{let s;o.state==="pass"?s=p.success("\u2713"):o.state==="warn"?s=p.warning("\u26A0"):s=p.error("\u2717");let i=`${s} ${o.name}`;o.detail&&(i+=` \u2014 ${o.detail}`),console.log(i),o.state==="fail"&&o.fix&&console.log(` Fix: ${o.fix}`)}),console.log(`
|
|
1956
1956
|
Summary: ${r.passed} passed, ${r.warned} warned, ${r.failed} failed`)),process.exit(r.failed>0?1:0)})}Fi();function s8(e,t){let n=Gr(e,t),r=Li(n),o=n.apiKey===null?1:0,s={source:n.source,message:r,exitCode:o};return n.last4!==void 0&&(s.last4=n.last4),s}function yP(e){e.command("provider").description("Provider diagnostics and configuration").command("auth").description("Inspect provider auth state").command("diagnose").description("Report which OpenAI auth source would be used by the openai-compatible provider. Never prints raw tokens.").option("-f, --format <format>","Output format (text|json)","text").action(r=>{let o=s8(void 0);if(r.format==="json"){let s={source:o.source,message:o.message,ok:o.exitCode===0};o.last4!==void 0&&(s.last4=o.last4),console.log(JSON.stringify(s,null,2))}else{let s=o.exitCode===0?p.success("\u2713"):p.warning("\u26A0");console.log(`${s} ${o.message}`)}process.exit(o.exitCode)})}var i8=["chat","interactive","status","config","daemon","login","plugin","doctor","completion"],a8=["install","update","list","remove","enable","disable"],Fh=["sonnet","opus","haiku","fable"],Nh=["json","text"],Bh=["cron","sessionstart","both"];function Ht(e){return e.join(" ")}function l8(){let e=Ht(Fh),t=Ht(Nh),n=Ht(Bh);return`#compdef afk
|
|
1957
1957
|
|
|
1958
1958
|
_afk() {
|