agent-afk 2.26.2 → 2.26.4
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 +12 -10
- package/dist/index.mjs +14 -14
- package/dist/telegram.mjs +69 -69
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -17,10 +17,12 @@ var Qh=Object.defineProperty;var ey=(e=>typeof require<"u"?require:typeof Proxy<
|
|
|
17
17
|
`))}return c.join(`
|
|
18
18
|
`)+`
|
|
19
19
|
`}case"space":return`
|
|
20
|
-
`;case"hr":return p.dim("\u2500".repeat(40))
|
|
20
|
+
`;case"hr":return p.dim("\u2500".repeat(40))+`
|
|
21
|
+
`;case"blockquote":{let l=a,c=l.tokens?s(l.tokens):l.text,d=p.dim(" \u2502 "),m=r?Math.max(1,r-4):void 0,f=[];for(let g of c.split(`
|
|
21
22
|
`)){let b=m?te(g,m):g;for(let S of b.split(`
|
|
22
|
-
`))f.push(d+S)}return f.join(`
|
|
23
|
-
`)
|
|
23
|
+
`))f.push(S?d+S:"")}return f.join(`
|
|
24
|
+
`)+`
|
|
25
|
+
`}case"table":{let l=a,c=v=>v.tokens?o(v.tokens):v.text,d=l.header.map(c),u=l.rows.map(v=>v.map(c)),m=d.length,f=new Array(m).fill(0);for(let v=0;v<m;v++){let E=gi(d[v]??"");for(let I of u)E=Math.max(E,gi(I[v]??""));f[v]=E}let g=r??Number.POSITIVE_INFINITY,b=3*m+1,S=g>=b+m?1:0,h=Math.max(m*S,g-b),k=f.reduce((v,E)=>v+E,0);if(Number.isFinite(g)&&k>h){let v=f.slice(),E=v.reduce((I,R)=>I+Math.max(0,R-S),0);if(E>0){let I=k-h,R=Math.min(1,I/E);for(let O=0;O<v.length;O++){let F=Math.max(0,v[O]-S);v[O]=Math.max(S,v[O]-Math.round(F*R))}}for(let I=0;I<v.length;I++)f[I]=v[I]??f[I]??0}let T=l.align,A=(v,E,I)=>p.dim(v+f.map(R=>"\u2500".repeat(R+2)).join(E)+I),w=(v,E)=>E<=0?[""]:te(v,E).split(`
|
|
24
26
|
`).map(R=>ie(R,E)),C=(v,E=!1)=>{let I=v.map((F,_)=>w(E?p.bold(F):F,f[_]??0)),R=Math.max(1,...I.map(F=>F.length)),O=[];for(let F=0;F<R;F++)O.push(p.dim("\u2502")+I.map((_,M)=>" "+Ay(_[F]??"",f[M]??0,T[M]??null)+" ").join(p.dim("\u2502"))+p.dim("\u2502"));return O},x=[A("\u250C","\u252C","\u2510")];x.push(...C(d,!0)),x.push(A("\u251C","\u253C","\u2524"));for(let v=0;v<u.length;v++)x.push(...C(u[v])),v<u.length-1&&x.push(A("\u251C","\u253C","\u2524"));return x.push(A("\u2514","\u2534","\u2518")),x.join(`
|
|
25
27
|
`)+`
|
|
26
28
|
`}default:return a.raw}}).join("")}return s(n)}var hi=class{useColors;constructor(t=!0){this.useColors=t&&!!Qr.level}formatMarkdown(t){return this.useColors?et(t):t}formatError(t,n){let r=p.error("\u2717 Error: ")+t;return n&&n.message&&(r+=`
|
|
@@ -1712,7 +1714,7 @@ Create a ship-ready summary with next steps.`,l=await i.runToResult(a);if(l.stat
|
|
|
1712
1714
|
`))return{};let n=t.slice(4),r=n.indexOf(`
|
|
1713
1715
|
---`);if(r===-1)return{};let o=n.slice(0,r),s=n.slice(r+4).trim(),i={},a=o.split(`
|
|
1714
1716
|
`);for(let l of a){if(!l)continue;let c=l.indexOf(":");if(c===-1)continue;let d=l.slice(0,c).trim(),u=l.slice(c+1).trim();d==="name"?i.name=u.replace(/^["']|["']$/g,""):d==="description"?i.description=u.replace(/^["']|["']$/g,""):d==="argumentHint"&&(i.argumentHint=u.replace(/^["']|["']$/g,""))}return s.length>0&&(i.body=s),i}catch{return{}}}function pd(e){let t=gr(e);if(t.length===0)return"";let n=[];for(let r of t){let o=r.argumentHint?`${r.argumentHint}`:"",s=o?`- \`${r.name} ${o}\`: ${r.description}`:`- ${r.name}: ${r.description}`;n.push(s),r.whenToUse&&n.push(` When to use: ${r.whenToUse}`)}return["Available skills (invoke via the `skill` tool):","","Each skill dispatches one or more context-isolated subagents internally. Calling `skill` is a delegation primitive \u2014 it preserves the main session's context. Prefer a skill over inline investigation when the task shape matches.","",...n].join(`
|
|
1715
|
-
`)}function gr(e){let t=[],n=new Set;for(let o of Qt()){let s=ve(o);t.push({name:o,description:s.description,source:s.origin==="user"?"user":s.origin==="project"?"project":"builtin",argumentHint:s.argumentHint,whenToUse:s.whenToUse}),n.add(o)}let r=e??[...dt(oi()),...dt(),...dt(si())];for(let o of r){if(o.type!=="local")continue;let s=Hi(o.path);for(let i of s)!i.name||n.has(i.name)||(t.push({name:i.name,description:i.description??`Skill from plugin at ${o.path}`,source:"plugin"}),n.add(i.name))}return t}function Eo(e){let t=new Map,n=e??[...dt(oi()),...dt(),...dt(si())];for(let r of n){if(r.type!=="local")continue;let o=Hi(r.path);for(let s of o)s.name&&s.body&&s.body.length>0&&t.set(s.name,s.body)}return t}var md={opus:128e3,opus_1m:128e3,sonnet:64e3,sonnet_1m:64e3,haiku:64e3,"claude-opus-4-7":128e3,"claude-opus-4-6":128e3,"claude-sonnet-4-6":64e3,"claude-haiku-4-5-20251001":64e3},Hw=64e3;function Ki(e){return md[e]??Hw}var Po={opus:2e5,opus_1m:1e6,sonnet:2e5,sonnet_1m:1e6,haiku:2e5},Kw=2e5;function nt(e){return Po[e]??Kw}var Gw=3,zw="claude-haiku-4-5-20251001",qw=1024,Yw=[{value:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",description:"Latest balanced Claude \u2014 recommended default"},{value:"claude-opus-4-5-20250929",displayName:"Claude Opus 4.5",description:"Highest-capability Claude"},{value:"claude-haiku-4-5-20250929",displayName:"Claude Haiku 4.5",description:"Fastest, cheapest Claude"}],Ro=class{client;authMode;initSessionId;promptStream;toolDispatcher;maxTokens;tools;systemPrefix;userSystem;tokenRefresher;thinking;traceWriter;currentModel;currentPermissionMode;messages;closed=!1;abortController=null;pendingAbortReason=null;closedPromise;closeResolve=null;lastUsage=null;refreshPromise=null;usageLimitWaitPromise=null;autoResumeOnUsageLimit;cwdDependentsFactory;constructor(t){this.client=t.client,this.authMode=t.authMode,this.initSessionId=t.sessionId??hr(),this.promptStream=t.promptStream,this.toolDispatcher=t.toolDispatcher,this.maxTokens=t.maxTokens,this.tools=t.tools,this.systemPrefix=t.systemPrefix,this.userSystem=t.userSystem,this.currentModel=t.model,this.currentPermissionMode=t.permissionMode??"default",this.messages=t.initialMessages?[...t.initialMessages]:[],this.tokenRefresher=t.tokenRefresher,this.thinking=t.thinking,this.traceWriter=t.traceWriter,this.autoResumeOnUsageLimit=t.autoResumeOnUsageLimit??!0,this.cwdDependentsFactory=t.cwdDependentsFactory,this.closedPromise=new Promise(n=>{this.closeResolve=()=>n("__closed__")})}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.currentModel,permissionMode:this.currentPermissionMode,cwd:process.cwd(),tools:[],slashCommands:[],skills:[],plugins:[],mcpServers:[],apiKeySource:this.authMode,version:"anthropic-direct-v1"}};let n=this.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let r=await Promise.race([n.next(),this.closedPromise]);if(r==="__closed__")break;let o=r;if(o.done)break;let s=o.value,i=new AbortController;if(this.abortController=i,this.pendingAbortReason!==null&&!i.signal.aborted&&(i.abort(this.pendingAbortReason),this.pendingAbortReason=null),i.signal.aborted){this.abortController===i&&(this.abortController=null);return}this.messages.push({role:"user",content:s.content});let a=this.composeSystem(),l=Zt(this.authMode,this.initSessionId,hr()),c={client:this.client,messages:this.messages,system:a,tools:this.tools,toolDispatcher:this.toolDispatcher,model:this.currentModel,maxTokens:this.maxTokens,headers:l,signal:i.signal,ctx:{sessionId:this.initSessionId},...this.thinking!==void 0?{thinking:this.thinking}:{},...this.traceWriter?{traceWriter:this.traceWriter}:{}};try{for await(let d of this.turnWithUsageLimitRetry(c)){if(this.closed)return;d.type==="turn.completed"&&(this.lastUsage=d.usage,this.abortController===i&&(this.abortController=null)),yield d}}catch(d){if(i.signal.aborted)return;yield{type:"error",error:d instanceof Error?d:new Error(String(d))};return}finally{this.abortController===i&&(this.abortController=null)}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}async*turnWithUsageLimitRetry(t){let n=null,r=null;for await(let c of this.turnWithAuthRetry(t)){if(c.type==="error"){let d=di(c.error);if(d&&d.kind==="oauth-limit"){r=d.resetsAt,n=c;break}}yield c}if(!r||!n)return;let o=7200*1e3;if(r.getTime()-Date.now()>o){yield n;return}let s=ui(Vt()??"");if(yield{type:"paused",reason:"usage-limit",resetsAt:r,accountId:s},!this.autoResumeOnUsageLimit){yield n;return}let i;if(this.usageLimitWaitPromise)i=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=ec({resetsAt:r,signal:t.signal});try{i=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(i==="aborted")return;let a=Vt();t.headers=Zt(this.authMode,this.initSessionId,hr());let l=i==="hot-swap"?ui(a??""):s;yield{type:"resumed",hotSwapped:i==="hot-swap",accountId:l},yield*this.turnWithAuthRetry(t)}async*turnWithAuthRetry(t){let n=null;for await(let o of bi(t)){if(this.closed)return;if(o.type==="error"&&this.isRetryableAuth(o.error)){n=o;break}yield o}if(!n)return;let r=null;try{if(this.refreshPromise)r=await this.refreshPromise;else{this.refreshPromise=this.tokenRefresher();try{r=await this.refreshPromise??null}finally{this.refreshPromise=null}}}catch{this.refreshPromise=null}if(!r){yield n;return}this.client=r,t.client=this.client,t.headers=Zt(this.authMode,this.initSessionId,hr()),yield*bi(t)}isRetryableAuth(t){return this.authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in t&&t.status===401}composeSystem(){let t=this.systemPrefix,n=this.userSystem,r=[];t&&t.length>0&&r.push(...t),n&&n.length>0&&r.push({type:"text",text:n});let o=Tc(this.currentPermissionMode);return o!==null&&r.push(o),r.length===0?null:oo()?wc(r,so()):r}async interrupt(){let t=this.abortController;if(t&&!t.signal.aborted){t.abort("interrupted");return}this.pendingAbortReason="interrupted"}async setModel(t){t!==void 0&&t.length>0&&(this.currentModel=t)}async setPermissionMode(t){this.currentPermissionMode=t}setCwd(t){if(!this.cwdDependentsFactory)return;let{userSystem:n,dispatcher:r}=this.cwdDependentsFactory(t);this.userSystem=n,this.toolDispatcher=r}async supportedCommands(){try{return gr().map(n=>{let r={name:n.name,description:n.description};return n.argumentHint&&(r.argumentHint=n.argumentHint),r})}catch{return[]}}async supportedModels(){return Yw.map(t=>({...t}))}async supportedAgents(){return[]}async getContextUsage(){let t=this.lastUsage,n=nt(this.currentModel),r;if(t&&n>0){let o=(t.inputTokens??0)+(t.outputTokens??0)+(t.cachedInputTokens??0)+(t.cacheCreationTokens??0);r=Math.min(100,Math.max(0,o/n*100))}return{tools:[],agents:[],isAutoCompactEnabled:!1,apiUsage:this.lastUsage,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return[]}async accountInfo(){return{subscriptionType:this.authMode==="oauth"?"claude-subscription":"api-key"}}async rewindFiles(t,n){return{canRewind:!1,error:"anthropic-direct provider does not support file checkpoint rewind"}}async compact(){let t=this.messages.length;if(this.closed)return{compacted:!1,reason:"session-closed",messagesBefore:t,messagesAfter:t};if(this.abortController!==null)return{compacted:!1,reason:"turn-in-flight",messagesBefore:t,messagesAfter:t};let n=Vw(),r=Rc(this.messages,n);if(r<=0)return{compacted:!1,reason:"history-too-short",messagesBefore:t,messagesAfter:t};let o=this.messages.slice(0,r),s=Jw(),i=_c(o,s,qw),a=new AbortController;this.abortController=a,this.pendingAbortReason!==null&&!a.signal.aborted&&(a.abort(this.pendingAbortReason),this.pendingAbortReason=null);let l;try{if(a.signal.aborted)return{compacted:!1,reason:"aborted",messagesBefore:t,messagesAfter:t};let m=Zt(this.authMode,this.initSessionId,hr()),f=this.client,g=await Promise.resolve(f.messages.create(i,{headers:m,signal:a.signal}));l=await Xw(g)}catch(m){return a.signal.aborted?{compacted:!1,reason:"aborted",messagesBefore:t,messagesAfter:t}:{compacted:!1,reason:"summarization-failed: "+(m instanceof Error?m.message:String(m)),messagesBefore:t,messagesAfter:t}}finally{this.abortController===a&&(this.abortController=null)}if(l.trim().length===0)return{compacted:!1,reason:"empty-summary",messagesBefore:t,messagesAfter:t};let c=Mc(this.messages,r,l),d=Ic(this.messages,r,l);this.messages.splice(0,this.messages.length,...d);let u=this.messages.length;return yc(this.traceWriter,{trigger:"manual",preCompactionMessages:o,summary:l,keptTailCount:t-r,keepLastNConfig:n,messagesBefore:t,messagesAfter:u,tokensSavedEstimate:c}),{compacted:!0,messagesBefore:t,messagesAfter:u,tokensSavedEstimate:c}}close(){this.closed=!0;let t=this.abortController;t&&!t.signal.aborted?t.abort("closed"):this.pendingAbortReason="closed",this.closeResolve?.()}};function Vw(){let e=process.env.AFK_COMPACT_KEEP_LAST_TURNS;if(e!==void 0&&e.length>0){let t=Number.parseInt(e,10);if(Number.isFinite(t)&&t>0)return t}return Gw}function Jw(){let e=process.env.AFK_COMPACT_MODEL;return e!==void 0&&e.length>0?e:zw}async function Xw(e){let t="";for await(let n of e)if(n.type==="content_block_delta"){let r=n.delta;r.type==="text_delta"&&typeof r.text=="string"&&(t+=r.text)}return t}import zi from"path";import{appendFileSync as Zw,mkdirSync as Qw}from"fs";import{dirname as eS}from"path";function Gi(e,t){return t?.allowedTools?t.allowedTools.includes(e)?{allowed:!0}:{allowed:!1,reason:`Tool "${e}" is not in the configured allowlist`}:{allowed:!0}}var tS=new Set(["agent","compose","read_file","glob","grep","list_directory","memory_search"]);function nS(e){return tS.has(e)}function rS(e,t){return e.reduce((n,r,o)=>{let s=t(r.name,r.input),i=n[n.length-1];return i&&s&&i.isConcurrencySafe?i.indices.push(o):n.push({isConcurrencySafe:s,indices:[o]}),n},[])}var yr=class{handlers;schemas;hookRegistry;permissions;subagentExecutor;skillExecutor;composeExecutor;classifier;resolveBase;_readRoots;_writeRoots;sessionId;traceWriter;constructor(t){this.handlers=t.handlers,this.schemas=t.schemas,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.subagentExecutor=t.subagentExecutor,this.skillExecutor=t.skillExecutor,this.composeExecutor=t.composeExecutor,this.classifier=t.concurrencyClassifier??nS,this.resolveBase=t.cwd,this.sessionId=t.sessionId,this.traceWriter=t.traceWriter;let n=t.cwd?[t.cwd]:[];this._readRoots=t.readRoots??n.slice(),this._writeRoots=t.writeRoots??n.slice()}get handlerContext(){return{cwd:this.resolveBase,resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice()}}addReadRoot(t,n="slash"){let r=zi.resolve(t);this._readRoots.includes(r)||this._readRoots.push(r),this.appendAuditLog({action:"grant-read",path:r,source:n})}addWriteRoot(t,n="slash"){let r=zi.resolve(t);this._readRoots.includes(r)||this._readRoots.push(r),this._writeRoots.includes(r)||this._writeRoots.push(r),this.appendAuditLog({action:"grant-write",path:r,source:n})}revokeRoot(t,n="slash"){let r=zi.resolve(t);if(r===this.resolveBase)return;let o=this._readRoots.indexOf(r);o!==-1&&this._readRoots.splice(o,1);let s=this._writeRoots.indexOf(r);s!==-1&&this._writeRoots.splice(s,1),this.appendAuditLog({action:"revoke",path:r,source:n})}getGrants(){return{resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice()}}appendAuditLog(t){try{let n=Jr();Qw(eS(n),{recursive:!0});let r=JSON.stringify({timestamp:new Date().toISOString(),sessionId:this.sessionId??null,action:t.action,path:t.path,source:t.source});Zw(n,r+`
|
|
1717
|
+
`)}function gr(e){let t=[],n=new Set;for(let o of Qt()){let s=ve(o);t.push({name:o,description:s.description,source:s.origin==="user"?"user":s.origin==="project"?"project":"builtin",argumentHint:s.argumentHint,whenToUse:s.whenToUse}),n.add(o)}let r=e??[...dt(oi()),...dt(),...dt(si())];for(let o of r){if(o.type!=="local")continue;let s=Hi(o.path);for(let i of s)!i.name||n.has(i.name)||(t.push({name:i.name,description:i.description??`Skill from plugin at ${o.path}`,source:"plugin"}),n.add(i.name))}return t}function Eo(e){let t=new Map,n=e??[...dt(oi()),...dt(),...dt(si())];for(let r of n){if(r.type!=="local")continue;let o=Hi(r.path);for(let s of o)s.name&&s.body&&s.body.length>0&&t.set(s.name,s.body)}return t}var md={opus:128e3,opus_1m:128e3,sonnet:64e3,sonnet_1m:64e3,haiku:64e3,"claude-opus-4-7":128e3,"claude-opus-4-6":128e3,"claude-sonnet-4-6":64e3,"claude-haiku-4-5-20251001":64e3},Hw=64e3;function Ki(e){return md[e]??Hw}var Po={opus:2e5,opus_1m:1e6,sonnet:2e5,sonnet_1m:1e6,haiku:2e5},Kw=2e5;function nt(e){return Po[e]??Kw}var Gw=2,zw="claude-haiku-4-5-20251001",qw=1024,Yw=[{value:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",description:"Latest balanced Claude \u2014 recommended default"},{value:"claude-opus-4-5-20250929",displayName:"Claude Opus 4.5",description:"Highest-capability Claude"},{value:"claude-haiku-4-5-20250929",displayName:"Claude Haiku 4.5",description:"Fastest, cheapest Claude"}],Ro=class{client;authMode;initSessionId;promptStream;toolDispatcher;maxTokens;tools;systemPrefix;userSystem;tokenRefresher;thinking;traceWriter;currentModel;currentPermissionMode;messages;closed=!1;abortController=null;pendingAbortReason=null;closedPromise;closeResolve=null;lastUsage=null;refreshPromise=null;usageLimitWaitPromise=null;autoResumeOnUsageLimit;cwdDependentsFactory;constructor(t){this.client=t.client,this.authMode=t.authMode,this.initSessionId=t.sessionId??hr(),this.promptStream=t.promptStream,this.toolDispatcher=t.toolDispatcher,this.maxTokens=t.maxTokens,this.tools=t.tools,this.systemPrefix=t.systemPrefix,this.userSystem=t.userSystem,this.currentModel=t.model,this.currentPermissionMode=t.permissionMode??"default",this.messages=t.initialMessages?[...t.initialMessages]:[],this.tokenRefresher=t.tokenRefresher,this.thinking=t.thinking,this.traceWriter=t.traceWriter,this.autoResumeOnUsageLimit=t.autoResumeOnUsageLimit??!0,this.cwdDependentsFactory=t.cwdDependentsFactory,this.closedPromise=new Promise(n=>{this.closeResolve=()=>n("__closed__")})}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.currentModel,permissionMode:this.currentPermissionMode,cwd:process.cwd(),tools:[],slashCommands:[],skills:[],plugins:[],mcpServers:[],apiKeySource:this.authMode,version:"anthropic-direct-v1"}};let n=this.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let r=await Promise.race([n.next(),this.closedPromise]);if(r==="__closed__")break;let o=r;if(o.done)break;let s=o.value,i=new AbortController;if(this.abortController=i,this.pendingAbortReason!==null&&!i.signal.aborted&&(i.abort(this.pendingAbortReason),this.pendingAbortReason=null),i.signal.aborted){this.abortController===i&&(this.abortController=null);return}this.messages.push({role:"user",content:s.content});let a=this.composeSystem(),l=Zt(this.authMode,this.initSessionId,hr()),c={client:this.client,messages:this.messages,system:a,tools:this.tools,toolDispatcher:this.toolDispatcher,model:this.currentModel,maxTokens:this.maxTokens,headers:l,signal:i.signal,ctx:{sessionId:this.initSessionId},...this.thinking!==void 0?{thinking:this.thinking}:{},...this.traceWriter?{traceWriter:this.traceWriter}:{}};try{for await(let d of this.turnWithUsageLimitRetry(c)){if(this.closed)return;d.type==="turn.completed"&&(this.lastUsage=d.usage,this.abortController===i&&(this.abortController=null)),yield d}}catch(d){if(i.signal.aborted)return;yield{type:"error",error:d instanceof Error?d:new Error(String(d))};return}finally{this.abortController===i&&(this.abortController=null)}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}async*turnWithUsageLimitRetry(t){let n=null,r=null;for await(let c of this.turnWithAuthRetry(t)){if(c.type==="error"){let d=di(c.error);if(d&&d.kind==="oauth-limit"){r=d.resetsAt,n=c;break}}yield c}if(!r||!n)return;let o=7200*1e3;if(r.getTime()-Date.now()>o){yield n;return}let s=ui(Vt()??"");if(yield{type:"paused",reason:"usage-limit",resetsAt:r,accountId:s},!this.autoResumeOnUsageLimit){yield n;return}let i;if(this.usageLimitWaitPromise)i=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=ec({resetsAt:r,signal:t.signal});try{i=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(i==="aborted")return;let a=Vt();t.headers=Zt(this.authMode,this.initSessionId,hr());let l=i==="hot-swap"?ui(a??""):s;yield{type:"resumed",hotSwapped:i==="hot-swap",accountId:l},yield*this.turnWithAuthRetry(t)}async*turnWithAuthRetry(t){let n=null;for await(let o of bi(t)){if(this.closed)return;if(o.type==="error"&&this.isRetryableAuth(o.error)){n=o;break}yield o}if(!n)return;let r=null;try{if(this.refreshPromise)r=await this.refreshPromise;else{this.refreshPromise=this.tokenRefresher();try{r=await this.refreshPromise??null}finally{this.refreshPromise=null}}}catch{this.refreshPromise=null}if(!r){yield n;return}this.client=r,t.client=this.client,t.headers=Zt(this.authMode,this.initSessionId,hr()),yield*bi(t)}isRetryableAuth(t){return this.authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in t&&t.status===401}composeSystem(){let t=this.systemPrefix,n=this.userSystem,r=[];t&&t.length>0&&r.push(...t),n&&n.length>0&&r.push({type:"text",text:n});let o=Tc(this.currentPermissionMode);return o!==null&&r.push(o),r.length===0?null:oo()?wc(r,so()):r}async interrupt(){let t=this.abortController;if(t&&!t.signal.aborted){t.abort("interrupted");return}this.pendingAbortReason="interrupted"}async setModel(t){t!==void 0&&t.length>0&&(this.currentModel=t)}async setPermissionMode(t){this.currentPermissionMode=t}setCwd(t){if(!this.cwdDependentsFactory)return;let{userSystem:n,dispatcher:r}=this.cwdDependentsFactory(t);this.userSystem=n,this.toolDispatcher=r}async supportedCommands(){try{return gr().map(n=>{let r={name:n.name,description:n.description};return n.argumentHint&&(r.argumentHint=n.argumentHint),r})}catch{return[]}}async supportedModels(){return Yw.map(t=>({...t}))}async supportedAgents(){return[]}async getContextUsage(){let t=this.lastUsage,n=nt(this.currentModel),r;if(t&&n>0){let o=(t.inputTokens??0)+(t.outputTokens??0)+(t.cachedInputTokens??0)+(t.cacheCreationTokens??0);r=Math.min(100,Math.max(0,o/n*100))}return{tools:[],agents:[],isAutoCompactEnabled:!1,apiUsage:this.lastUsage,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return[]}async accountInfo(){return{subscriptionType:this.authMode==="oauth"?"claude-subscription":"api-key"}}async rewindFiles(t,n){return{canRewind:!1,error:"anthropic-direct provider does not support file checkpoint rewind"}}async compact(){let t=this.messages.length;if(this.closed)return{compacted:!1,reason:"session-closed",messagesBefore:t,messagesAfter:t};if(this.abortController!==null)return{compacted:!1,reason:"turn-in-flight",messagesBefore:t,messagesAfter:t};let n=Vw(),r=Rc(this.messages,n);if(r<0)return{compacted:!1,reason:"history-too-short",messagesBefore:t,messagesAfter:t};if(r===0)return{compacted:!1,reason:"nothing-to-summarize",messagesBefore:t,messagesAfter:t};let o=this.messages.slice(0,r),s=Jw(),i=_c(o,s,qw),a=new AbortController;this.abortController=a,this.pendingAbortReason!==null&&!a.signal.aborted&&(a.abort(this.pendingAbortReason),this.pendingAbortReason=null);let l;try{if(a.signal.aborted)return{compacted:!1,reason:"aborted",messagesBefore:t,messagesAfter:t};let m=Zt(this.authMode,this.initSessionId,hr()),f=this.client,g=await Promise.resolve(f.messages.create(i,{headers:m,signal:a.signal}));l=await Xw(g)}catch(m){return a.signal.aborted?{compacted:!1,reason:"aborted",messagesBefore:t,messagesAfter:t}:{compacted:!1,reason:"summarization-failed: "+(m instanceof Error?m.message:String(m)),messagesBefore:t,messagesAfter:t}}finally{this.abortController===a&&(this.abortController=null)}if(l.trim().length===0)return{compacted:!1,reason:"empty-summary",messagesBefore:t,messagesAfter:t};let c=Mc(this.messages,r,l),d=Ic(this.messages,r,l);this.messages.splice(0,this.messages.length,...d);let u=this.messages.length;return yc(this.traceWriter,{trigger:"manual",preCompactionMessages:o,summary:l,keptTailCount:t-r,keepLastNConfig:n,messagesBefore:t,messagesAfter:u,tokensSavedEstimate:c}),{compacted:!0,messagesBefore:t,messagesAfter:u,tokensSavedEstimate:c}}close(){this.closed=!0;let t=this.abortController;t&&!t.signal.aborted?t.abort("closed"):this.pendingAbortReason="closed",this.closeResolve?.()}};function Vw(){let e=process.env.AFK_COMPACT_KEEP_LAST_TURNS;if(e!==void 0&&e.length>0){let t=Number.parseInt(e,10);if(Number.isFinite(t)&&t>0)return t}return Gw}function Jw(){let e=process.env.AFK_COMPACT_MODEL;return e!==void 0&&e.length>0?e:zw}async function Xw(e){let t="";for await(let n of e)if(n.type==="content_block_delta"){let r=n.delta;r.type==="text_delta"&&typeof r.text=="string"&&(t+=r.text)}return t}import zi from"path";import{appendFileSync as Zw,mkdirSync as Qw}from"fs";import{dirname as eS}from"path";function Gi(e,t){return t?.allowedTools?t.allowedTools.includes(e)?{allowed:!0}:{allowed:!1,reason:`Tool "${e}" is not in the configured allowlist`}:{allowed:!0}}var tS=new Set(["agent","compose","read_file","glob","grep","list_directory","memory_search"]);function nS(e){return tS.has(e)}function rS(e,t){return e.reduce((n,r,o)=>{let s=t(r.name,r.input),i=n[n.length-1];return i&&s&&i.isConcurrencySafe?i.indices.push(o):n.push({isConcurrencySafe:s,indices:[o]}),n},[])}var yr=class{handlers;schemas;hookRegistry;permissions;subagentExecutor;skillExecutor;composeExecutor;classifier;resolveBase;_readRoots;_writeRoots;sessionId;traceWriter;constructor(t){this.handlers=t.handlers,this.schemas=t.schemas,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.subagentExecutor=t.subagentExecutor,this.skillExecutor=t.skillExecutor,this.composeExecutor=t.composeExecutor,this.classifier=t.concurrencyClassifier??nS,this.resolveBase=t.cwd,this.sessionId=t.sessionId,this.traceWriter=t.traceWriter;let n=t.cwd?[t.cwd]:[];this._readRoots=t.readRoots??n.slice(),this._writeRoots=t.writeRoots??n.slice()}get handlerContext(){return{cwd:this.resolveBase,resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice()}}addReadRoot(t,n="slash"){let r=zi.resolve(t);this._readRoots.includes(r)||this._readRoots.push(r),this.appendAuditLog({action:"grant-read",path:r,source:n})}addWriteRoot(t,n="slash"){let r=zi.resolve(t);this._readRoots.includes(r)||this._readRoots.push(r),this._writeRoots.includes(r)||this._writeRoots.push(r),this.appendAuditLog({action:"grant-write",path:r,source:n})}revokeRoot(t,n="slash"){let r=zi.resolve(t);if(r===this.resolveBase)return;let o=this._readRoots.indexOf(r);o!==-1&&this._readRoots.splice(o,1);let s=this._writeRoots.indexOf(r);s!==-1&&this._writeRoots.splice(s,1),this.appendAuditLog({action:"revoke",path:r,source:n})}getGrants(){return{resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice()}}appendAuditLog(t){try{let n=Jr();Qw(eS(n),{recursive:!0});let r=JSON.stringify({timestamp:new Date().toISOString(),sessionId:this.sessionId??null,action:t.action,path:t.path,source:t.source});Zw(n,r+`
|
|
1716
1718
|
`)}catch{}}get toolDefs(){return this.schemas}async execute(t){if(t.signal.aborted)return{content:"Tool call aborted",isError:!0};if(this.hookRegistry){let s={event:"PreToolUse",toolName:t.name,input:t.input};try{await wi(this.hookRegistry,s,{signal:t.signal,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}catch(i){if(i instanceof fe)return{content:`Tool "${t.name}" blocked by PreToolUse hook: ${i.message}`,isError:!0};throw i}}let n=Gi(t.name,this.permissions);if(!n.allowed)return{content:n.reason??`Tool "${t.name}" is not permitted`,isError:!0};if(t.name==="agent"){if(!this.subagentExecutor)return{content:"Agent tool is not available in this session configuration",isError:!0};let s;try{s=await this.subagentExecutor.execute(t)}catch(i){s={content:`Agent tool error: ${i instanceof Error?i.message:String(i)}`,isError:!0}}return await this.dispatchPostToolUseAndAwait(t.name,s.content,t.signal),s}if(t.name==="skill"){if(!this.skillExecutor)return{content:"Skill tool is not available in this session configuration",isError:!0};let s;try{s=await this.skillExecutor.execute(t)}catch(i){s={content:`Skill tool error: ${i instanceof Error?i.message:String(i)}`,isError:!0}}return await this.dispatchPostToolUseAndAwait(t.name,s.content,t.signal),s}if(t.name==="compose"){let s=await this.executeCompose(t);return this.firePostToolUse(t.name,s.content,t.signal),s}let r=this.handlers.get(t.name);if(!r)return{content:`Unknown tool "${t.name}". Available tools: ${[...this.handlers.keys()].join(", ")}`,isError:!0};let o;try{o=await r(t.input,t.signal,this.handlerContext)}catch(s){o={content:`Tool execution error: ${s instanceof Error?s.message:String(s)}`,isError:!0}}return await this.dispatchPostToolUseAndAwait(t.name,o.content,t.signal),o}async executeBatch(t){if(t.length===0)return[];if(t.length===1)return[await this.execute(t[0])];let n=new Array(t.length),r=new Set;for(let i=0;i<t.length;i++){let a=t[i];if(a.signal.aborted){n[i]={content:"Tool call aborted",isError:!0},r.add(i);continue}if(this.hookRegistry){let c={event:"PreToolUse",toolName:a.name,input:a.input};try{await wi(this.hookRegistry,c,{signal:a.signal,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}catch(d){if(d instanceof fe){n[i]={content:`Tool "${a.name}" blocked by PreToolUse hook: ${d.message}`,isError:!0},r.add(i);continue}throw d}}let l=Gi(a.name,this.permissions);l.allowed||(n[i]={content:l.reason??`Tool "${a.name}" is not permitted`,isError:!0},r.add(i))}let o=t.map((i,a)=>({call:i,originalIndex:a})).filter((i,a)=>!r.has(a));if(o.length===0)return n;let s=rS(o.map(i=>i.call),this.classifier);for(let i of s)if(i.isConcurrencySafe){let a=await Promise.allSettled(i.indices.map(async l=>{let{call:c,originalIndex:d}=o[l];return c.signal.aborted?{result:{content:"Tool call aborted",isError:!0},originalIndex:d}:{result:await this.executeCore(c),originalIndex:d}}));for(let l of a)if(l.status==="fulfilled")n[l.value.originalIndex]=l.value.result;else{let c=l.reason instanceof Error?l.reason.message:String(l.reason),d=i.indices[a.indexOf(l)];n[o[d].originalIndex]={content:`Tool execution error: ${c}`,isError:!0}}}else for(let a of i.indices){let{call:l,originalIndex:c}=o[a];if(l.signal.aborted){n[c]={content:"Tool call aborted",isError:!0};continue}n[c]=await this.executeCore(l)}return n}async executeCore(t){if(t.name==="agent"){if(!this.subagentExecutor)return{content:"Agent tool is not available in this session configuration",isError:!0};let o;try{o=await this.subagentExecutor.execute(t)}catch(s){o={content:`Agent tool error: ${s instanceof Error?s.message:String(s)}`,isError:!0}}return this.firePostToolUse(t.name,o.content,t.signal),o}if(t.name==="skill"){if(!this.skillExecutor)return{content:"Skill tool is not available in this session configuration",isError:!0};let o;try{o=await this.skillExecutor.execute(t)}catch(s){o={content:`Skill tool error: ${s instanceof Error?s.message:String(s)}`,isError:!0}}return this.firePostToolUse(t.name,o.content,t.signal),o}if(t.name==="compose"){let o=await this.executeCompose(t);return this.firePostToolUse(t.name,o.content,t.signal),o}let n=this.handlers.get(t.name);if(!n)return{content:`Unknown tool "${t.name}". Available tools: ${[...this.handlers.keys()].join(", ")}`,isError:!0};let r;try{r=await n(t.input,t.signal,this.handlerContext)}catch(o){r={content:`Tool execution error: ${o instanceof Error?o.message:String(o)}`,isError:!0}}return this.firePostToolUse(t.name,r.content,t.signal),r}async executeCompose(t){if(!this.composeExecutor)return{content:"Compose tool is not available in this session configuration",isError:!0};try{return await this.composeExecutor.execute(t)}catch(n){return{content:`Compose tool error: ${n instanceof Error?n.message:String(n)}`,isError:!0}}}firePostToolUse(t,n,r){if(!this.hookRegistry)return;let o={event:"PostToolUse",toolName:t,output:n};Si(this.hookRegistry,o,{signal:r,...this.traceWriter?{traceWriter:this.traceWriter}:{}}).catch(()=>{})}async dispatchPostToolUseAndAwait(t,n,r){if(!this.hookRegistry)return;let o={event:"PostToolUse",toolName:t,output:n};await Si(this.hookRegistry,o,{signal:r,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}};import{spawn as oS}from"child_process";function sS(e){if(typeof e!="object"||e===null)throw new Error("Input must be an object");let t=e;if(typeof t.command!="string")throw new Error('Input must have a "command" field of type string');let n=12e4;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number")throw new Error("timeout_ms must be a number");if(t.timeout_ms<0||t.timeout_ms>6e5)throw new Error("timeout_ms must be between 0 and 600000");n=t.timeout_ms}return{command:t.command,timeout_ms:n}}function iS(e){return e.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}function _o(e,t){let n=!1;function r(){n||e==="bypassPermissions"&&(n=!0,console.warn("[security] bash handler: shell=true with bypassPermissions \u2014 all shell metacharacters are interpreted without confirmation. Migrate to execFile to eliminate this risk (tracked: C4)."))}return async(o,s,i)=>{let{command:a,timeout_ms:l}=sS(o);return s.aborted?{content:"Command aborted",isError:!0}:(r(),new Promise(c=>{let d=!1;function u(h){d||(d=!0,clearTimeout(f),s.removeEventListener("abort",S),c(h))}let m=oS(a,{shell:!0,stdio:["ignore","pipe","pipe"],...(i?.resolveBase??i?.cwd??t)!==void 0?{cwd:i?.resolveBase??i?.cwd??t}:{}}),f=setTimeout(()=>{m.kill(),u({content:`Command timed out after ${l}ms`,isError:!0})},l),g="",b="";m.stdout.on("data",h=>{g+=h.toString()}),m.stderr.on("data",h=>{b+=h.toString()});let S=()=>{m.kill(),u({content:"Command aborted",isError:!0})};s.addEventListener("abort",S),m.on("close",()=>{let h=(g+b).trimEnd();h=iS(h);let k=1e5;h.length>k&&(h=h.slice(0,k)+`
|
|
1717
1719
|
[output truncated \u2014 exceeded 100KB]`),u({content:h})}),m.on("error",h=>{u({content:`Failed to execute: ${h.message}`,isError:!0})})}))}}var fd=_o("default");import{promises as aS}from"fs";import qi from"path";function Ge(e,t,n="read"){let r=t?.resolveBase??t?.cwd,o=qi.isAbsolute(e)?e:qi.resolve(r??process.cwd(),e);if(r===void 0)return o;let s=n==="read"?t?.readRoots??[r]:t?.writeRoots??[r];for(let l of s)if(!qi.relative(l,o).startsWith(".."))return o;let i=s.map(l=>`\`${l}\``).join(", "),a=n==="read"?"read roots":"write roots";throw new Error(`Path \`${e}\` is outside the allowed ${a} [${i}].`)}var gd=async(e,t,n)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected an object",isError:!0};let r=e,o=r.file_path,s=r.offset??1,i=r.limit??2e3;if(typeof o!="string")return{content:"Invalid input: file_path must be a string",isError:!0};if(typeof s!="number"||s<1)return{content:"Invalid input: offset must be a positive number",isError:!0};if(typeof i!="number"||i<1)return{content:"Invalid input: limit must be a positive number",isError:!0};let a;try{a=Ge(o,n,"read")}catch(l){return{content:l instanceof Error?l.message:String(l),isError:!0}}try{let l=await aS.readFile(a),c=Math.min(8192,l.length);for(let k=0;k<c;k++)if(l[k]===0)return{content:`File appears to be binary: ${a}`,isError:!0};let d=l.toString("utf-8");if(d.length===0)return{content:""};let u=d.split(`
|
|
1718
1720
|
`),m=Math.max(0,s-1),f=Math.min(u.length,m+i),g=u.slice(m,f),b=u.length;if(g.length===0)return{content:`... (offset ${s} is past end of file \u2014 file has ${b} lines)`};let S=String(b).length,h=g.map((k,T)=>{let A=m+T+1;return`${String(A).padStart(S," ")} ${k}`}).join(`
|
|
@@ -1782,7 +1784,7 @@ Save reusable multi-step workflows the user teaches you or that you discover wor
|
|
|
1782
1784
|
`+(e.aggregated_output??"");yield{type:"tool.output",toolUseId:e.id,content:a,isError:s,...n!==void 0?{sessionId:n}:{}}}return}if(e.type==="file_change"){if(t){let s=e.changes.map(i=>`${i.kind} ${i.path}`).join(`
|
|
1783
1785
|
`);yield{type:"tool.output",toolUseId:e.id,content:s,isError:e.status==="failed",...n!==void 0?{sessionId:n}:{}}}return}if(e.type==="mcp_tool_call"){if(t){let s=e.status==="failed",i;e.error?i=e.error.message:e.result?i=JSON.stringify(e.result,null,2):i="",yield{type:"tool.output",toolUseId:e.id,content:i,isError:s,...n!==void 0?{sessionId:n}:{}}}return}if(e.type==="web_search"){t&&(yield{type:"tool.output",toolUseId:e.id,content:`web_search: ${e.query}`,...n!==void 0?{sessionId:n}:{}});return}if(e.type!=="todo_list"&&e.type==="error"){t&&(yield{type:"error",error:new Error(e.message)});return}}var na=class{startOpts;promptStream;codex;thread;currentModel;currentSandbox;currentApproval;abortController=null;pendingAbortReason=null;closed=!1;initSessionId;dispose;closeResolve=null;closedPromise;constructor(t,n,r){this.startOpts=t,this.promptStream=n,this.initSessionId=r,this.codex=new Od(t.codexOptions),this.thread=t.resumeId?this.codex.resumeThread(t.resumeId,t.threadOptions):this.codex.startThread(t.threadOptions),this.currentModel=t.threadOptions.model,this.currentSandbox=t.threadOptions.sandboxMode??"workspace-write",this.currentApproval=t.threadOptions.approvalPolicy??"never",t.instructionsDispose!==void 0&&(this.dispose=t.instructionsDispose),this.closedPromise=new Promise(o=>{this.closeResolve=()=>o("__closed__")})}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,...this.currentModel!==void 0?{model:this.currentModel}:{},permissionMode:this.sandboxToPermissionMode(),cwd:this.startOpts.threadOptions.workingDirectory??process.cwd(),tools:["Bash","Read","Write","Edit"],slashCommands:[],skills:[],plugins:[],mcpServers:[],apiKeySource:this.startOpts.codexOptions.apiKey!==void 0?"apiKey":"codex-cli",version:"codex-sdk"}};let n=new Map,r=new Map,o=this.initSessionId,s=this.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let i=await Promise.race([s.next(),this.closedPromise]);if(i==="__closed__")break;let a=i;if(a.done)break;let l=a.value,c=new AbortController;if(this.abortController=c,this.pendingAbortReason!==null&&!c.signal.aborted&&(c.abort(this.pendingAbortReason),this.pendingAbortReason=null),c.signal.aborted)return;let d;try{let u=typeof l.content=="string"?l.content:l.content.map(m=>{if(typeof m=="object"&&m&&"type"in m){if(m.type==="text")return m.text;if(m.type==="image")return"[image omitted]"}return""}).join(`
|
|
1784
1786
|
`);d=await this.thread.runStreamed(u,{signal:c.signal})}catch(u){if(c.signal.aborted)return;yield{type:"error",error:u instanceof Error?u:new Error(String(u))};return}try{for await(let u of d.events){if(this.closed)return;u.type==="thread.started"&&(o=u.thread_id),yield*mv(u,o,n,r)}}catch(u){if(c.signal.aborted)return;yield{type:"error",error:u instanceof Error?u:new Error(String(u))};return}finally{this.abortController===c&&(this.abortController=null)}}}catch(i){yield{type:"error",error:i instanceof Error?i:new Error(String(i))}}finally{try{await s.return?.()}catch{}}}sandboxToPermissionMode(){return this.currentSandbox==="read-only"||this.currentApproval==="untrusted"?"plan":"bypassPermissions"}async interrupt(){let t=this.abortController;if(t&&!t.signal.aborted){t.abort("interrupted");return}this.pendingAbortReason="interrupted"}async setModel(t){this.currentModel=t;let n={...this.startOpts.threadOptions,...t!==void 0?{model:t}:{},sandboxMode:this.currentSandbox,approvalPolicy:this.currentApproval},r=this.thread.id;this.thread=r?this.codex.resumeThread(r,n):this.codex.startThread(n),this.startOpts.threadOptions=n}async setPermissionMode(t){let{sandboxMode:n,approvalPolicy:r}=Dd(t);this.currentSandbox=n,this.currentApproval=r;let o={...this.startOpts.threadOptions,sandboxMode:n,approvalPolicy:r},s=this.thread.id;this.thread=s?this.codex.resumeThread(s,o):this.codex.startThread(o),this.startOpts.threadOptions=o}async supportedCommands(){return[]}async supportedModels(){return av.map(t=>({...t}))}async supportedAgents(){return[]}async getContextUsage(){return{tools:[],agents:[],isAutoCompactEnabled:!1,apiUsage:null}}async mcpServerStatus(){return[]}async accountInfo(){return{}}async rewindFiles(t,n){throw new Yt(br,"rewindFiles",`${br} provider does not support file checkpoint rewind.`)}close(){this.closed=!0;let t=this.abortController;t&&!t.signal.aborted?t.abort("closed"):this.pendingAbortReason="closed",this.closeResolve?.(),this.dispose?.()}getThread(){return this.thread}},gv=null;var Uo=class{name=br;query(t){lv(t.config);let n=pv(t.config),r=cv(t.config.effort),{sandboxMode:o,approvalPolicy:s}=Dd(t.config.permissionMode),i={...t.config.model!==void 0?{model:t.config.model}:{},sandboxMode:o,approvalPolicy:s,...r!==void 0?{modelReasoningEffort:r}:{},skipGitRepoCheck:!0,workingDirectory:process.cwd()},a=uv(t.config),l={};n!==void 0&&(l.apiKey=n);let c;if(a!==void 0){let{path:g,dispose:b}=dv(a);l.config={...l.config??{},model_instructions_file:g},c=b}X(`\u{1F7E2} OpenAICodexProvider: creating Codex thread (model=${String(t.config.model)}, sandbox=${o}, approval=${s})`);let d=gv,u=d??(g=>new Od(g)),m=t.config.resume??`codex-pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,f=new na({threadOptions:i,codexOptions:l,...t.config.resume!==void 0?{resumeId:t.config.resume}:{},...c!==void 0?{instructionsDispose:c}:{}},t.prompt,m);if(d){let g=u(l);f.codex=g,f.thread=t.config.resume?g.resumeThread(t.config.resume,i):g.startThread(i)}return f}},Fd=new Uo;var hv=new Set(["opus","opus_1m","sonnet","sonnet_1m","haiku","auto"]);function Ke(e){if(!e)return"anthropic-direct";let t=e.trim().toLowerCase();return!t||hv.has(t)||t.startsWith("claude-")||t.startsWith("claude_")?"anthropic-direct":t.startsWith("gpt-")||t.startsWith("gpt_")||t.startsWith("o1")||t.startsWith("o3")||t.startsWith("o4")||t.startsWith("codex-")||t.startsWith("codex_")||t==="codex"?"openai-codex":"anthropic-direct"}function Ld(e){return Ke(e)==="openai-codex"?Fd:new xe}async function jo(e,t,n){if(!e)return;if(n.kind==="blocked"){await kn(e,{hookEvent:t,decision:"block",...n.err.reason!==void 0?{reason:n.err.reason}:{}});return}let r=n.decision;await kn(e,{hookEvent:t,decision:r.decision,...r.reason!==void 0?{reason:r.reason}:{},...r.injectContext!==void 0?{injectedContextBytes:Buffer.byteLength(r.injectContext,"utf8")}:{}})}async function Nd(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await jo(n.traceWriter,"SessionStart",{kind:"decision",decision:r})}catch(r){throw r instanceof fe&&await jo(n.traceWriter,"SessionStart",{kind:"blocked",err:r}),r}}async function Ud(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await jo(n.traceWriter,"SessionEnd",{kind:"decision",decision:r})}catch(r){if(r instanceof fe&&await jo(n.traceWriter,"SessionEnd",{kind:"blocked",err:r}),r instanceof fe||r instanceof Ue){X(`SessionEnd hook swallowed ${r.name}: ${r.message}`),n.onError?.(r);return}X(`SessionEnd hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r)))}}var Bo=class{pendingResolve=null;bufferedMessage=null;getSessionId;constructor(t){this.getSessionId=t}pushUserMessage(t){if(this.pendingResolve){let n=this.pendingResolve;this.pendingResolve=null;let r=this.getSessionId();n({content:t,...r!==void 0?{sessionId:r}:{}});return}this.bufferedMessage=t}createIterable(){let t=this;return{[Symbol.asyncIterator](){return{next(){if(t.bufferedMessage!==null){let n=t.bufferedMessage;t.bufferedMessage=null;let r=t.getSessionId();return Promise.resolve({value:{content:n,...r!==void 0?{sessionId:r}:{}},done:!1})}return new Promise(n=>{t.pendingResolve=r=>n({value:r,done:!1})})},return(){return Promise.resolve({value:void 0,done:!0})}}}}}};function jd(e,t,n){e&&(e.aborted?t.abort(e.reason):e.addEventListener("abort",()=>{t.signal.aborted||t.abort(e.reason)},{once:!0})),t.signal.addEventListener("abort",n,{once:!0})}function Bd(e,t){let n=e.permissionMode??"default",r=e.persistSession??!0,o={sessionId:e.sessionId,configuredSessionId:e.sessionId,resume:e.resume,resumeSessionAt:e.resumeSessionAt,continue:e.continue,forkSession:e.forkSession,persistSession:r},s={sessionId:e.sessionId,model:t,permissionMode:n};return{sessionIdentity:o,metadata:s}}var Wo=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(t,n){this.sessionIdentity=t,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(t){t&&(this.sessionIdentity={...this.sessionIdentity,sessionId:t},this.sessionMetadata={...this.sessionMetadata,sessionId:t})}setSessionMetadata(t){this.sessionMetadata=t(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(t){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(t))}isInitializationSettled(){return this.initializationSettled}};function Wd(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.length;if(n===0)return"no results";let r=0,o=0;for(let a of t)if(a&&typeof a=="object"){let l=a.type;l==="fact"?r++:l==="procedure"&&o++}let s=`${n} result${n===1?"":"s"}`;if(r+o!==n)return s;let i=[];return r>0&&i.push(`${r} fact${r===1?"":"s"}`),o>0&&i.push(`${o} procedure${o===1?"":"s"}`),i.length===0?s:`${s} (${i.join(", ")})`}catch{return null}}function Hd(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(n.target==="hot"&&n.saved===!0)return"hot memory saved";if(n.target==="fact"){if(n.action==="remove")return n.removed===!0?"fact removed":"fact not found";if(n.action==="set"&&typeof n.id=="number")return`fact #${n.id} set`;if(n.action==="supersede"&&typeof n.id=="number"&&typeof n.supersedes=="number")return`fact #${n.id} supersedes #${n.supersedes}`}return null}catch{return null}}function Kd(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return typeof n.name=="string"&&n.written===!0?`wrote procedure '${n.name}'`:null}catch{return null}}function ra(e){let t=e.trim();if(t.length===0)return null;let n=t[0];if(n!=="{"&&n!=="[")return null;let r=t[t.length-1];if(n==="{"&&r!=="}"||n==="["&&r!=="]")return null;let o;try{o=JSON.parse(t)}catch{return null}return Array.isArray(o)?Gd(yv(o)):o!==null&&typeof o=="object"?Gd(bv(o)):null}function yv(e){return e.length===0?"[empty array]":e.length===1?"[1 item]":`[${e.length} items]`}function bv(e){let t=Object.keys(e);if(t.length===0)return"{empty object}";let n=t.slice(0,4),r=t.length>4?", \u2026":"";return`{${n.join(", ")}${r}}`}function Gd(e){return e.length<=80?e:e.slice(0,79)+"\u2026"}var kv=new Map([["memory_search",Wd],["memory_update",Hd],["procedure_write",Kd],["bash",ra],["Bash",ra]]);function wv(e){return e.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g,"").replace(/\x1b[@-_]/g,"").replace(/[\x00-\x1f\x7f]/g," ").trim()}function zd(e,t){if(!e)return null;let n=kv.get(e);if(!n)return null;try{let r=n(t);if(r===null)return null;let o=wv(r);return o.length>0?o:null}catch{return null}}function Sv(e){let t=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=e.match(t);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],s=n[3],i=parseFloat(r),a=i;o==="KB"?a=i*1024:o==="MB"?a=i*1024*1024:o==="GB"&&(a=i*1024*1024*1024);let l=r;return i%1===0&&(l=String(Math.floor(i))),l+=o,{sizeLabel:l,sizeBytes:Math.round(a),absolutePath:s.trim()}}function vv(e){if(e<1024)return`${e}B`;let t=e/1024;if(t<1024)return t%1===0?`${Math.floor(t)}KB`:`${t.toFixed(1)}KB`;let n=t/1024;if(n<1024)return n%1===0?`${Math.floor(n)}MB`:`${n.toFixed(1)}MB`;let r=n/1024;return r%1===0?`${Math.floor(r)}GB`:`${r.toFixed(1)}GB`}function Tv(e){let t=Buffer.byteLength(e,"utf8"),n=vv(t),r=e.split(`
|
|
1785
|
-
`);if(r.length<=1&&e.length<=80)return{content:e,truncated:!1,sizeBytes:t,sizeLabel:n};if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};if(e.length<=80)return{content:e,truncated:!1,sizeBytes:t,sizeLabel:n};let o=r[0]??"",s=o;return o.length>80&&(s=o.substring(0,80)+"\u2026"),{content:s+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n}}function xv(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function Ev(e){let t=e.isError===!0?null:zd(e.toolName,e.content),n=t!==null?{display:t}:{},r=Sv(e.content);if(r)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${r.sizeLabel}) \u2192 ${r.absolutePath}`,isError:e.isError===!0,persistedPath:r.absolutePath,sizeBytes:r.sizeBytes,sizeLabel:r.sizeLabel,...n}};let{content:o,truncated:s,lineCount:i,sizeBytes:a,sizeLabel:l}=Tv(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:o,isError:e.isError===!0,sizeBytes:a,sizeLabel:l,...s&&{truncated:s},...i!==void 0&&{lineCount:i},...n}}}function oa(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return Ev(e);case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=xv(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){gc(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new wt(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r.message),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};default:return null}}var Ie=class{config;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;lastResponseMetadata=null;initPromise=null;inputStream;abortController;hookRegistry;sessionEndDispatched=!1;stateManager;sessionRunningCostUsd=0;sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0};lastStopReason;constructor(t){this.config=t,this.abortController=new AbortController,this.hookRegistry=t.hookRegistry,jd(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.initSdkLifecycle()}initSdkLifecycle(){let t=cr(this.config.model)??this.config.model,{sessionIdentity:n,metadata:r}=Bd(this.config,t);this.stateManager=new Wo(n,r),this.inputStream=new Bo(()=>this.sessionId);let o=this.config.provider??Ld(t);X(`\u{1F7E2} AgentSession: Creating query session via provider=${o.name}`),this.providerQuery=o.query({prompt:this.inputStream.createIterable(),config:this.config}),this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.sessionRunningCostUsd=0,this.sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0},this.lastStopReason=void 0,this.sessionEndDispatched=!1,this.currentState="idle";let s=this.providerQuery;this.providerIterator=s[Symbol.asyncIterator](),this.initPromise=this.pullInitialization()}async pullInitialization(){try{for(await Nd(this.hookRegistry,{event:"SessionStart",sessionId:this.sessionId},{signal:this.abortController.signal,...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}});;){let t=await this.providerIterator.next();if(t.done){this.stateManager.resolveInitializationIfNeeded();return}let n=t.value,r=oa(n,this.buildTransformDeps());if(n.type==="session.init"||r&&r.type==="error")return}}catch(t){let n=t instanceof Error?t:new Error(String(t));this.stateManager.isInitializationSettled()||this.stateManager.rejectInitializationOnce(n),await this.dispatchSessionEndOnce("error").catch(()=>{})}}buildTransformDeps(){return{conversationHistory:this.conversationHistory,getSessionMetadata:()=>this.stateManager.getSessionMetadata(),setSessionMetadata:t=>this.stateManager.setSessionMetadata(t),updateSessionIdentity:t=>this.stateManager.updateSessionIdentity(t),resolveInitialization:()=>this.stateManager.resolveInitializationOnce(),setLastResponseMetadata:t=>{this.lastResponseMetadata=t,typeof t.totalCostUsd=="number"&&Number.isFinite(t.totalCostUsd)&&(this.sessionRunningCostUsd+=t.totalCostUsd);let n=t.usage;if(n&&typeof n=="object"){let r=n,o=(s,i)=>{let a=r[s];typeof a=="number"&&Number.isFinite(a)&&(this.sessionRunningTokens[i]+=a)};o("input_tokens","input"),o("output_tokens","output"),o("cache_read_input_tokens","cacheRead"),o("cache_creation_input_tokens","cacheCreation")}typeof t.stopReason=="string"&&(this.lastStopReason=t.stopReason)},maxBudgetUsd:this.config.maxBudgetUsd,abortBudget:t=>{this.abortController.signal.aborted||this.abortController.abort(t)},...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}}}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}async sendMessage(t,n={}){this.assertCanSend();let r=this.config.timeoutMs??lo,o=async()=>{let s=null,i="";this.currentState=n.stream?"streaming":"processing";for await(let a of this.sendMessageStreamInternal(t)){if(a.type==="chunk"&&a.chunk.type==="content"&&(i+=a.chunk.content),a.type==="message"&&a.message.role==="assistant"&&(s=a.message),a.type==="error")throw a.error;if(a.type==="done"){if(s)return{...s,metadata:a.metadata};if(i)return{role:"assistant",content:i,metadata:a.metadata,timestamp:new Date}}}if(s)return s;if(i)return{role:"assistant",content:i,timestamp:new Date};throw new Error("No assistant response received")};try{return await co(o(),r,{controller:this.abortController,label:this.sessionId??"session"})}finally{this.state!=="closed"&&(this.currentState="idle")}}async*sendMessageStream(t){this.assertCanSend(),this.currentState="streaming",yield*this.sendMessageStreamInternal(t)}async*sendMessageStreamInternal(t){this.initPromise&&await this.initPromise;let r={role:"user",content:typeof t=="string"?t:this.summarizeContentBlocks(t),timestamp:new Date};this.conversationHistory.push(r),this.inputStream.pushUserMessage(t);let o=this.buildTransformDeps();try{for(;;){let s=await this.providerIterator.next();if(s.done)break;let i=s.value,a=oa(i,o);if(a&&(a.type==="done"&&this.turnCount++,yield a,a.type==="done"||a.type==="error"))break}}finally{this.state!=="closed"&&(this.currentState="idle")}}summarizeContentBlocks(t){let n=[],r=0;for(let s of t)s.type==="text"?n.push(s.text):s.type==="image"&&r++;let o=n.join(" ");return r>0&&(o=o?`${o} [+ ${r} image(s)]`:`[+ ${r} image(s)]`),o||"[content block(s)]"}async interrupt(){this.currentState!=="streaming"&&this.currentState!=="processing"||(this.currentState="idle",await this.providerQuery.interrupt())}async reset(){if(this.currentState==="closed")throw new Error("Cannot reset: session is closed");if(this.abortController.signal.aborted)throw new Ue("Cannot reset: session aborted");if(this.currentState==="processing"||this.currentState==="streaming")try{await this.providerQuery.interrupt()}catch{}await this.dispatchSessionEndOnce("reset");try{await this.providerQuery.close()}catch{}await this.providerIterator.return?.(),this.initPromise&&await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,ki))]).catch(()=>{}),this.stateManager.resolveInitializationIfNeeded();try{this.initSdkLifecycle()}catch(t){throw this.currentState="closed",new Error(`Session reset failed during lifecycle rebuild: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}async onAbort(){try{await this.providerQuery.interrupt()}catch{}}async setModel(t){let n=cr(t),r=this.stateManager.getSessionMetadata();await this.providerQuery.setModel(n??r.model??""),n&&this.stateManager.setSessionMetadata(o=>({...o,model:n}))}async setPermissionMode(t){await this.providerQuery.setPermissionMode(t),this.stateManager.setSessionMetadata(n=>({...n,permissionMode:t}))}setCwd(t){this.config={...this.config,cwd:t},this.providerQuery.setCwd?.(t)}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return this.providerQuery.supportedCommands()}supportedModels(){return this.providerQuery.supportedModels()}supportedAgents(){return this.providerQuery.supportedAgents()}getContextUsage(){return this.providerQuery.getContextUsage()}mcpServerStatus(){return this.providerQuery.mcpServerStatus()}accountInfo(){return this.providerQuery.accountInfo()}rewindFiles(t,n){return this.providerQuery.rewindFiles(t,n)}async compact(){if(this.currentState==="closed")throw new Error("Cannot compact: session is closed");if(this.currentState!=="idle")return{compacted:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let t=this.providerQuery.compact?.bind(this.providerQuery);return t?t():{compacted:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){throw new Error("getOutputStream() is not supported \u2014 use sendMessageStream() instead")}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,ki))])}catch{}await this.dispatchSessionEndOnce("close")}}async dispatchSessionEndOnce(t){this.sessionEndDispatched||(this.sessionEndDispatched=!0,await this.emitClosure(t).catch(()=>{}),await this.sealTraceWriter(t).catch(()=>{}),await Ud(this.hookRegistry,{event:"SessionEnd",sessionId:this.sessionId,reason:t},this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}))}async emitClosure(t){let n=this.config.traceWriter;if(!n)return;let r=this.deriveClosureReason(t),o={};this.sessionRunningTokens.input>0&&(o.input=this.sessionRunningTokens.input),this.sessionRunningTokens.output>0&&(o.output=this.sessionRunningTokens.output),this.sessionRunningTokens.cacheRead>0&&(o.cacheRead=this.sessionRunningTokens.cacheRead),this.sessionRunningTokens.cacheCreation>0&&(o.cacheCreation=this.sessionRunningTokens.cacheCreation),await bc(n,{reason:r,finalTurnCount:this.turnCount,finalCostUsd:this.sessionRunningCostUsd,finalTokens:o,...this.lastStopReason!==void 0?{lastStopReason:this.lastStopReason}:{}})}deriveClosureReason(t){if(t==="error")return"abort";let n=this.abortController.signal;if(n.aborted&&n.reason!=="closed"){let r=n.reason;if(r instanceof wt)return"budget_exceeded";if(r instanceof je)return"timeout";if(typeof r=="string"){if(r.startsWith("Budget "))return"budget_exceeded";if(r.includes("timed out"))return"timeout"}return"abort"}return"model_end_turn"}async sealTraceWriter(t){let n=this.config.traceWriter;if(!n)return;let r=this.deriveSealStatus(t);await n.seal({status:r,finalCostUsd:this.sessionRunningCostUsd,finalTurnCount:this.turnCount,closedAt:new Date().toISOString()})}deriveSealStatus(t){if(t==="error")return"failed";let n=this.abortController.signal;return n.aborted&&n.reason!=="closed"?"cancelled":"succeeded"}assertCanSend(){if(this.currentState==="closed")throw new Error("Cannot send message: session is closed");if(this.abortController.signal.aborted)throw new Ue("Cannot send message: session aborted");if(this.currentState==="processing"||this.currentState==="streaming")throw new Error("Cannot send message: session is busy");if(this.config.maxTurns&&this.turnCount>=this.config.maxTurns)throw new Error(`Maximum turns (${this.config.maxTurns}) exceeded`)}};var ia=class{handlers=new Map;register(t,n){let r=this.handlers.get(t);return r||(r=[],this.handlers.set(t,r)),r.push(n),()=>{let o=this.handlers.get(t);if(!o)return;let s=o.indexOf(n);s>=0&&o.splice(s,1)}}count(t){return this.handlers.get(t)?.length??0}async dispatch(t,n){sa(n,t.event);let r=this.handlers.get(t.event);if(!r||r.length===0)return{};let o=r.slice(),s={};for(let i of o){sa(n,t.event);let a;try{a=await i(t)}catch(l){throw new fe(`hook handler threw during ${t.event}`,t.event,l instanceof Error?l.message:String(l),{cause:l})}if(sa(n,t.event),Cv(a))throw new fe(`hook handler blocked ${t.event}${a.reason?`: ${a.reason}`:""}`,t.event,a.reason);s=a}return s}};function Cv(e){return e.continue===!1||e.decision==="block"}function sa(e,t){if(e?.aborted){let n=e.reason,r=`aborted during ${t}${n?`: ${String(n)}`:""}`;throw new Ue(r)}}function qd(){return new ia}function Yd(){return qd()}var Av=["shadow-verify","shadow_verify","resolve","diagnose","appmap","qualify","mint"],Pv=[/\bverdict(s)?\b/i,/\brecommend(ation)?s?\b/i,/\bshould\s+(delete|remove|rewrite|refactor|rename|reject|merge|revert|disable)\b/i,/\b(USELESS|KEEP|REJECT|APPROVE|SALVAGE|BLOCK|FAIL)\b/,/\b(redundant|duplicated|superseded|obsolete)\b/i,/\bvulnerab\w*\b/i,/\bunused\b/i,/\bbroken\b/i,/\bregress\w*\b/i,/\|\s*(status|verdict|decision|severity|risk|finding|priority|holds\??)\s*\|/i,/\bfound\s+\d+\s*(issue|problem|bug|error|finding|vulnerabilit)/i,/\b(critical|high|medium|low)\s+(severity|priority|risk)\b/i,/\bclaim(s)?\b[^\n]{0,80}\b(holds?|refuted|verified|partial|confirmed|disputed)\b/i,/\b(root\s*cause|incident)\b/i,/\brecommend\s+(removing|deleting|rewriting|refactoring|merging|reverting)\b/i,/\bI\s+(applied|committed|pushed|edited|wrote|fixed|patched|reset|restored|staged)\b/i,/\b(applied|committed|pushed|fixed|patched)\s+(the|these|those)\s+(change|commit|fix|patch|edit)/i],Rv=[/\bverifier_verdict\b/i,/"\s*claim\s*"\s*:/i,/\bre-derived\b[^.\n]{0,80}\bindependent/i,/\bindependently\s+(re-derived|re-verified|verified|checked)\b/i,/\bverifier\s+(agrees|disagrees|confirms|refutes)\b/i],_v=`shadow-verify nudge:
|
|
1787
|
+
`);if(r.length<=1&&e.length<=80)return{content:e,truncated:!1,sizeBytes:t,sizeLabel:n};if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};if(e.length<=80)return{content:e,truncated:!1,sizeBytes:t,sizeLabel:n};let o=r[0]??"",s=o;return o.length>80&&(s=o.substring(0,80)+"\u2026"),{content:s+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n}}function xv(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function Ev(e){let t=e.isError===!0?null:zd(e.toolName,e.content),n=t!==null?{display:t}:{},r=Sv(e.content);if(r)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${r.sizeLabel}) \u2192 ${r.absolutePath}`,isError:e.isError===!0,persistedPath:r.absolutePath,sizeBytes:r.sizeBytes,sizeLabel:r.sizeLabel,...n}};let{content:o,truncated:s,lineCount:i,sizeBytes:a,sizeLabel:l}=Tv(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:o,isError:e.isError===!0,sizeBytes:a,sizeLabel:l,...s&&{truncated:s},...i!==void 0&&{lineCount:i},...n}}}function oa(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return Ev(e);case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=xv(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){gc(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new wt(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r.message),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};default:return null}}var Ie=class{config;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;lastResponseMetadata=null;initPromise=null;inputStream;abortController;hookRegistry;sessionEndDispatched=!1;stateManager;sessionRunningCostUsd=0;sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0};lastStopReason;constructor(t){this.config=t,this.abortController=new AbortController,this.hookRegistry=t.hookRegistry,jd(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.initSdkLifecycle()}initSdkLifecycle(){let t=cr(this.config.model)??this.config.model,{sessionIdentity:n,metadata:r}=Bd(this.config,t);this.stateManager=new Wo(n,r),this.inputStream=new Bo(()=>this.sessionId);let o=this.config.provider??Ld(t);X(`\u{1F7E2} AgentSession: Creating query session via provider=${o.name}`),this.providerQuery=o.query({prompt:this.inputStream.createIterable(),config:this.config}),this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.sessionRunningCostUsd=0,this.sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0},this.lastStopReason=void 0,this.sessionEndDispatched=!1,this.currentState="idle";let s=this.providerQuery;this.providerIterator=s[Symbol.asyncIterator](),this.initPromise=this.pullInitialization()}async pullInitialization(){try{for(await Nd(this.hookRegistry,{event:"SessionStart",sessionId:this.sessionId},{signal:this.abortController.signal,...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}});;){let t=await this.providerIterator.next();if(t.done){this.stateManager.resolveInitializationIfNeeded();return}let n=t.value,r=oa(n,this.buildTransformDeps());if(n.type==="session.init"||r&&r.type==="error")return}}catch(t){let n=t instanceof Error?t:new Error(String(t));this.stateManager.isInitializationSettled()||this.stateManager.rejectInitializationOnce(n),await this.dispatchSessionEndOnce("error").catch(()=>{})}}buildTransformDeps(){return{conversationHistory:this.conversationHistory,getSessionMetadata:()=>this.stateManager.getSessionMetadata(),setSessionMetadata:t=>this.stateManager.setSessionMetadata(t),updateSessionIdentity:t=>this.stateManager.updateSessionIdentity(t),resolveInitialization:()=>this.stateManager.resolveInitializationOnce(),setLastResponseMetadata:t=>{this.lastResponseMetadata=t,typeof t.totalCostUsd=="number"&&Number.isFinite(t.totalCostUsd)&&(this.sessionRunningCostUsd+=t.totalCostUsd);let n=t.usage;if(n&&typeof n=="object"){let r=n,o=(s,i)=>{let a=r[s];typeof a=="number"&&Number.isFinite(a)&&(this.sessionRunningTokens[i]+=a)};o("input_tokens","input"),o("output_tokens","output"),o("cache_read_input_tokens","cacheRead"),o("cache_creation_input_tokens","cacheCreation")}typeof t.stopReason=="string"&&(this.lastStopReason=t.stopReason)},maxBudgetUsd:this.config.maxBudgetUsd,abortBudget:t=>{this.abortController.signal.aborted||this.abortController.abort(t)},...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}}}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}async sendMessage(t,n={}){this.assertCanSend();let r=this.config.timeoutMs??lo,o=async()=>{let s=null,i="";this.currentState=n.stream?"streaming":"processing";for await(let a of this.sendMessageStreamInternal(t)){if(a.type==="chunk"&&a.chunk.type==="content"&&(i+=a.chunk.content),a.type==="message"&&a.message.role==="assistant"&&(s=a.message),a.type==="error")throw a.error;if(a.type==="done"){if(s)return{...s,metadata:a.metadata};if(i)return{role:"assistant",content:i,metadata:a.metadata,timestamp:new Date}}}if(s)return s;if(i)return{role:"assistant",content:i,timestamp:new Date};throw new Error("No assistant response received")};try{return await co(o(),r,{controller:this.abortController,label:this.sessionId??"session"})}finally{this.state!=="closed"&&(this.currentState="idle")}}async*sendMessageStream(t){this.assertCanSend(),this.currentState="streaming";try{yield*this.sendMessageStreamInternal(t)}finally{this.state!=="closed"&&(this.currentState="idle")}}async*sendMessageStreamInternal(t){this.initPromise&&await this.initPromise;let r={role:"user",content:typeof t=="string"?t:this.summarizeContentBlocks(t),timestamp:new Date};this.conversationHistory.push(r),this.inputStream.pushUserMessage(t);let o=this.buildTransformDeps();try{for(;;){let s=await this.providerIterator.next();if(s.done)break;let i=s.value,a=oa(i,o);if(a&&(a.type==="done"&&this.turnCount++,yield a,a.type==="done"||a.type==="error"))break}}finally{this.state!=="closed"&&(this.currentState="idle")}}summarizeContentBlocks(t){let n=[],r=0;for(let s of t)s.type==="text"?n.push(s.text):s.type==="image"&&r++;let o=n.join(" ");return r>0&&(o=o?`${o} [+ ${r} image(s)]`:`[+ ${r} image(s)]`),o||"[content block(s)]"}async interrupt(){this.currentState!=="streaming"&&this.currentState!=="processing"||(this.currentState="idle",await this.providerQuery.interrupt())}async reset(){if(this.currentState==="closed")throw new Error("Cannot reset: session is closed");if(this.abortController.signal.aborted)throw new Ue("Cannot reset: session aborted");if(this.currentState==="processing"||this.currentState==="streaming")try{await this.providerQuery.interrupt()}catch{}await this.dispatchSessionEndOnce("reset");try{await this.providerQuery.close()}catch{}await this.providerIterator.return?.(),this.initPromise&&await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,ki))]).catch(()=>{}),this.stateManager.resolveInitializationIfNeeded();try{this.initSdkLifecycle()}catch(t){throw this.currentState="closed",new Error(`Session reset failed during lifecycle rebuild: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}async onAbort(){try{await this.providerQuery.interrupt()}catch{}}async setModel(t){let n=cr(t),r=this.stateManager.getSessionMetadata();await this.providerQuery.setModel(n??r.model??""),n&&this.stateManager.setSessionMetadata(o=>({...o,model:n}))}async setPermissionMode(t){await this.providerQuery.setPermissionMode(t),this.stateManager.setSessionMetadata(n=>({...n,permissionMode:t}))}setCwd(t){this.config={...this.config,cwd:t},this.providerQuery.setCwd?.(t)}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return this.providerQuery.supportedCommands()}supportedModels(){return this.providerQuery.supportedModels()}supportedAgents(){return this.providerQuery.supportedAgents()}getContextUsage(){return this.providerQuery.getContextUsage()}mcpServerStatus(){return this.providerQuery.mcpServerStatus()}accountInfo(){return this.providerQuery.accountInfo()}rewindFiles(t,n){return this.providerQuery.rewindFiles(t,n)}async compact(){if(this.currentState==="closed")throw new Error("Cannot compact: session is closed");if(this.currentState!=="idle")return{compacted:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let t=this.providerQuery.compact?.bind(this.providerQuery);return t?t():{compacted:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){throw new Error("getOutputStream() is not supported \u2014 use sendMessageStream() instead")}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,ki))])}catch{}await this.dispatchSessionEndOnce("close")}}async dispatchSessionEndOnce(t){this.sessionEndDispatched||(this.sessionEndDispatched=!0,await this.emitClosure(t).catch(()=>{}),await this.sealTraceWriter(t).catch(()=>{}),await Ud(this.hookRegistry,{event:"SessionEnd",sessionId:this.sessionId,reason:t},this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}))}async emitClosure(t){let n=this.config.traceWriter;if(!n)return;let r=this.deriveClosureReason(t),o={};this.sessionRunningTokens.input>0&&(o.input=this.sessionRunningTokens.input),this.sessionRunningTokens.output>0&&(o.output=this.sessionRunningTokens.output),this.sessionRunningTokens.cacheRead>0&&(o.cacheRead=this.sessionRunningTokens.cacheRead),this.sessionRunningTokens.cacheCreation>0&&(o.cacheCreation=this.sessionRunningTokens.cacheCreation),await bc(n,{reason:r,finalTurnCount:this.turnCount,finalCostUsd:this.sessionRunningCostUsd,finalTokens:o,...this.lastStopReason!==void 0?{lastStopReason:this.lastStopReason}:{}})}deriveClosureReason(t){if(t==="error")return"abort";let n=this.abortController.signal;if(n.aborted&&n.reason!=="closed"){let r=n.reason;if(r instanceof wt)return"budget_exceeded";if(r instanceof je)return"timeout";if(typeof r=="string"){if(r.startsWith("Budget "))return"budget_exceeded";if(r.includes("timed out"))return"timeout"}return"abort"}return"model_end_turn"}async sealTraceWriter(t){let n=this.config.traceWriter;if(!n)return;let r=this.deriveSealStatus(t);await n.seal({status:r,finalCostUsd:this.sessionRunningCostUsd,finalTurnCount:this.turnCount,closedAt:new Date().toISOString()})}deriveSealStatus(t){if(t==="error")return"failed";let n=this.abortController.signal;return n.aborted&&n.reason!=="closed"?"cancelled":"succeeded"}assertCanSend(){if(this.currentState==="closed")throw new Error("Cannot send message: session is closed");if(this.abortController.signal.aborted)throw new Ue("Cannot send message: session aborted");if(this.currentState==="processing"||this.currentState==="streaming")throw new Error("Cannot send message: session is busy");if(this.config.maxTurns&&this.turnCount>=this.config.maxTurns)throw new Error(`Maximum turns (${this.config.maxTurns}) exceeded`)}};var ia=class{handlers=new Map;register(t,n){let r=this.handlers.get(t);return r||(r=[],this.handlers.set(t,r)),r.push(n),()=>{let o=this.handlers.get(t);if(!o)return;let s=o.indexOf(n);s>=0&&o.splice(s,1)}}count(t){return this.handlers.get(t)?.length??0}async dispatch(t,n){sa(n,t.event);let r=this.handlers.get(t.event);if(!r||r.length===0)return{};let o=r.slice(),s={};for(let i of o){sa(n,t.event);let a;try{a=await i(t)}catch(l){throw new fe(`hook handler threw during ${t.event}`,t.event,l instanceof Error?l.message:String(l),{cause:l})}if(sa(n,t.event),Cv(a))throw new fe(`hook handler blocked ${t.event}${a.reason?`: ${a.reason}`:""}`,t.event,a.reason);s=a}return s}};function Cv(e){return e.continue===!1||e.decision==="block"}function sa(e,t){if(e?.aborted){let n=e.reason,r=`aborted during ${t}${n?`: ${String(n)}`:""}`;throw new Ue(r)}}function qd(){return new ia}function Yd(){return qd()}var Av=["shadow-verify","shadow_verify","resolve","diagnose","appmap","qualify","mint"],Pv=[/\bverdict(s)?\b/i,/\brecommend(ation)?s?\b/i,/\bshould\s+(delete|remove|rewrite|refactor|rename|reject|merge|revert|disable)\b/i,/\b(USELESS|KEEP|REJECT|APPROVE|SALVAGE|BLOCK|FAIL)\b/,/\b(redundant|duplicated|superseded|obsolete)\b/i,/\bvulnerab\w*\b/i,/\bunused\b/i,/\bbroken\b/i,/\bregress\w*\b/i,/\|\s*(status|verdict|decision|severity|risk|finding|priority|holds\??)\s*\|/i,/\bfound\s+\d+\s*(issue|problem|bug|error|finding|vulnerabilit)/i,/\b(critical|high|medium|low)\s+(severity|priority|risk)\b/i,/\bclaim(s)?\b[^\n]{0,80}\b(holds?|refuted|verified|partial|confirmed|disputed)\b/i,/\b(root\s*cause|incident)\b/i,/\brecommend\s+(removing|deleting|rewriting|refactoring|merging|reverting)\b/i,/\bI\s+(applied|committed|pushed|edited|wrote|fixed|patched|reset|restored|staged)\b/i,/\b(applied|committed|pushed|fixed|patched)\s+(the|these|those)\s+(change|commit|fix|patch|edit)/i],Rv=[/\bverifier_verdict\b/i,/"\s*claim\s*"\s*:/i,/\bre-derived\b[^.\n]{0,80}\bindependent/i,/\bindependently\s+(re-derived|re-verified|verified|checked)\b/i,/\bverifier\s+(agrees|disagrees|confirms|refutes)\b/i],_v=`shadow-verify nudge:
|
|
1786
1788
|
|
|
1787
1789
|
The sub-agent that just finished returned output that reads like **decision-driving findings** (verdicts, recommendations, audit conclusions, or claim-style results that could drive file edits, deletions, commits, or external side-effects).
|
|
1788
1790
|
|
|
@@ -1822,7 +1824,7 @@ ${zv}`}import nn from"chalk";var qv=new Set(["Read","Glob","Grep","NotebookRead"
|
|
|
1822
1824
|
`),s+=`${n}
|
|
1823
1825
|
`,await Tr.writeFile(t,s,"utf8")}function BT(e,t,n){if(!Ln(e))return new Error(`git worktree add failed: ${String(e)}`);let r=e.stderr??"",o=e.message??"",s=`${r}
|
|
1824
1826
|
${o}`;return s.includes("already checked out")||s.includes("is already used by worktree")?new Error(`Branch '${t}' is already checked out in another worktree. Pick a different name.`):s.includes("already exists")?new Error(`Worktree path '${n}' already exists. Remove it or pick a different branch name.`):new Error(o||r||"git worktree add failed")}async function Zo(e,t){let n=t?.execFile??Mp,r=$p(t?.branchPrefix),o=await UT(n),s=e===!0?NT(r):e;Op(s);let i=s.replaceAll("/","-"),a=xr(o,".afk-worktrees",i);await jT(o);try{await n("git",["-C",o,"worktree","add","-b",s,a])}catch(c){throw BT(c,s,a)}let l={path:a,branch:s,cleanup:async()=>{let c=l.path,d=l.branch,u;try{u=await n("git",["-C",c,"status","--porcelain"])}catch(m){let f=Ln(m)?m.message||m.stderr||"":String(m);console.warn(`Worktree cleanup: could not check status at ${c} (${f}). Skipping removal \u2014 manual cleanup may be needed.`);return}if(u.stdout.trim().length>0){console.log(`Worktree preserved at ${c} (branch: ${d}) \u2014 uncommitted changes.`);return}try{await n("git",["-C",o,"worktree","remove","--force",c])}catch(m){let f=Ln(m)?m.message||m.stderr||"":String(m);console.warn(`Worktree cleanup: 'git worktree remove --force ${c}' failed (${f}). Manual removal may be needed.`);return}try{await n("git",["-C",o,"branch","-d",d])}catch(m){let f=Ln(m)?m.message||m.stderr||"":String(m);console.warn(`Could not delete branch '${d}': ${f}`)}}};try{let c="",d="";try{c=(await n("git",["-C",o,"rev-parse","HEAD"])).stdout.trim()}catch{}try{d=(await n("git",["-C",o,"symbolic-ref","--short","HEAD"])).stdout.trim()}catch{}let u={owner:"interactive",createdAt:new Date().toISOString(),baseSha:c,baseBranch:d};await Tr.writeFile(xr(a,".afk-worktree-meta.json"),JSON.stringify(u,null,2),"utf-8")}catch{}return l}async function Dp(e,t,n){let r=n?.execFile??Mp,o=$p(n?.branchPrefix),s=e.path,i=e.branch,a=`${o}${t}`;try{Op(a)}catch(u){return{ok:!1,reason:u instanceof Error?u.message:String(u)}}let l=pa(s),c=pa(l),d=xr(l,t);if(s===d&&i===a)return{ok:!1,reason:"rename would be a no-op (slug matches current state)"};try{await r("git",["-C",c,"worktree","move",s,d])}catch(u){return{ok:!1,reason:`worktree move failed: ${Ln(u)?u.message||u.stderr||"":String(u)}`}}try{await r("git",["-C",d,"branch","-m",i,a])}catch(u){let m=Ln(u)?u.message||u.stderr||"":String(u);return e.path=d,{ok:!1,reason:`branch rename failed (worktree moved successfully): ${m}`,partial:"branch",newPath:d}}e.path=d,e.branch=a;try{let u=xr(d,".afk-worktree-meta.json"),m={};try{let g=await Tr.readFile(u,"utf-8");m=JSON.parse(g)}catch{}let f={...m,worktreePath:d,branch:a};await Tr.writeFile(u,JSON.stringify(f,null,2),"utf-8")}catch{}return{ok:!0,oldPath:s,newPath:d,oldBranch:i,newBranch:a}}function Up(e){e.command("chat").description("Send a message to the agent").argument("<message>","Message to send").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.",Te()).option("-s, --stream","[no-op] reserved; chat currently waits for the full response",!1).option("-f, --format <format>","Output format (text|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-codex. 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`.").action(async(t,n)=>{let r=WT("Initializing agent...").start(),o=null,s,i,a;try{if(n.worktree!==void 0)try{i=await Zo(n.worktree),a=i.path,r.text=`Worktree ready at ${i.path} (branch: ${i.branch})`}catch(_){r.fail("Failed to create worktree"),q(_)}let l,c,d,u,m,f;try{l=$t(n.thinking)??An(),c=Ot(n.effort)??Pn(),d=Rn(n.maxBudgetUsd)??Fi(),u=Rn(n.taskBudget)??Li(),m=_n(n.maxOutputTokens)??mr(),f=void 0}catch(_){r.fail("Invalid options"),q(_)}if(n.dumpPrompt!==void 0){let _=n.dumpPrompt===!0?Np.join(Lp.homedir(),".afk","logs",`prompt-dump-${new Date().toISOString().replace(/[:.]/g,"-")}.json`):String(n.dumpPrompt);process.env.AFK_DUMP_PROMPT=_,n.provider!==void 0&&n.provider!=="anthropic"&&n.provider!=="anthropic-direct"&&console.error(`[--dump-prompt] WARNING: active provider (${n.provider}) does not support prompt dumping. No file will be written.`)}let g=J(),b=Cn()??En(),S=Pe(),h=S.systemPromptSource,k=S.autoRouting?.chat??!1,T=Go(b,k),A,w=new N({apiKey:g,...a!==void 0?{cwd:a}:{}}),C=Yo(),x={get sessionId(){return A?.sessionId},getInputStreamRef(){return A?.getInputStreamRef?.()??{pushUserMessage:()=>{}}},get abortSignal(){return A?.abortSignal??new AbortController().signal}},v=Vo(n.model,g,C),E=new Lt({subagentManager:w,parentSession:x,defaultConfig:{apiKey:g,systemPrompt:b},defaultSubagentModel:Mt(),childProviderFactory:C,childSkillExecutorFactory:v}),I=new Ft({parentSession:x,defaultModel:n.model,defaultSubagentModel:Mt(),apiKey:g,childProviderFactory:C,childSkillExecutorFactory:v}),R=new $n({parentSession:x,defaultModel:n.model,defaultSubagentModel:Mt(),apiKey:g,systemPrompt:b??""});s=new $e,f=xo(n.provider,{subagentExecutor:E,skillExecutor:I,composeExecutor:R,memoryStore:s})??new xe({permissions:{allowedTools:[...It,...tn,"agent","skill","compose"]},subagentExecutor:E,skillExecutor:I,composeExecutor:R,memoryStore:s,surface:"cli"});let O=Xo();o=new Ie(en({model:n.model,apiKey:g,maxTurns:parseInt(n.maxTurns,10),hookRegistry:On(_=>{console.log(qo(_))},"cli",s).registry,...T!==void 0?{systemPrompt:T}:{},...h!==void 0?{systemPromptSource:h}:{},...l!==void 0?{thinking:l}:{},...c!==void 0?{effort:c}:{},...d!==void 0?{maxBudgetUsd:d}:{},...u!==void 0?{taskBudget:u}:{},...m!==void 0?{maxOutputTokens:m}:{},...O?{traceWriter:O.writer}:{},...S.autoResumeOnUsageLimit!==void 0?{autoResumeOnUsageLimit:S.autoResumeOnUsageLimit}:{},...a!==void 0?{cwd:a}:{},provider:f})),A=o,r.text="Sending message...";let F=await o.sendMessage(t,{stream:n.stream});if(r.succeed("Response received"),n.format==="json"){let _=o.getLastResponseMetadata(),M=_?Number(_.usage?.input_tokens??0):0,B=_?Number(_.usage?.output_tokens??0):0;console.log(JSON.stringify({success:!0,model:n.model,message:F.content,timestamp:F.timestamp,..._?.totalCostUsd!==void 0?{costUsd:_.totalCostUsd}:{},..._?.durationMs!==void 0?{durationMs:_.durationMs}:{},...M>0?{inputTokens:M}:{},...B>0?{outputTokens:B}:{}},null,2))}else{console.log(Fp.cyan(`
|
|
1825
|
-
\u{1F916} Claude:`)),console.log(et(F.content));let _=o.getLastResponseMetadata();if(_){let M=[];_.durationMs&&M.push(re(_.durationMs)),_.totalCostUsd!==void 0&&M.push(Oe(_.totalCostUsd));let B=Number(_.usage?.input_tokens??0),V=Number(_.usage?.output_tokens??0);B+V>0&&M.push(H(B+V)+" tokens"),M.length>0&&console.log(Fp.dim(" \xB7 "+M.join(" \xB7 ")))}console.log("")}}catch(l){r.fail("Failed to send message"),q(l)}finally{o&&await o.close(),s?.close(),i!==void 0&&await i.cleanup()}})}import SP from"ora";import*as zg from"node:os";import*as Yn from"node:path";var Qo=new Set;function Nn(e){return Qo.add(e),()=>{Qo.delete(e)}}async function ma(){await Promise.all([...Qo].map(e=>e())),Qo.clear()}import{readFileSync as HT,writeFileSync as KT,existsSync as fa,mkdirSync as GT,readdirSync as zT,statSync as qT}from"fs";import{join as jp,basename as Bp}from"path";function ga(){return Kl(),kt()}function ha(e){return jp(ga(),`${e}.json`)}function es(e,t){let n=ga();fa(n)||GT(n,{recursive:!0});let r=t??e.sessionId??`session-${Date.now()}`,o={sessionId:e.sessionId,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=ha(r);return KT(s,JSON.stringify(o,null,2)),s}function Er(e){let t=e.includes("/")?e:ha(e);if(fa(t))try{let n=HT(t,"utf-8");return JSON.parse(n)}catch{return}}function ts(e){let t=e.includes("/")?e:ha(e),n=Er(t);if(n)return{path:t,id:Bp(t,".json"),data:n};for(let r of Cr()){if(r.id!==e&&r.sessionId!==e)continue;let o=Er(r.path);if(o)return{path:r.path,id:r.id,data:o}}}function Cr(){let e=ga();if(!fa(e))return[];let t=[];for(let n of zT(e)){if(!n.endsWith(".json"))continue;let r=jp(e,n);try{if(!qT(r).isFile())continue;let s=Er(r);if(!s||typeof s.savedAt!="number"||typeof s.model!="string")continue;t.push({path:r,id:Bp(n,".json"),sessionId:s.sessionId,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}var YT=/^[A-Za-z0-9_@%+=:,./-]+$/;function Wp(e){return YT.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Un(e,t){let n=["afk","interactive"];return typeof t=="string"&&t.length>0&&n.push("--model",Wp(t)),n.push("--resume",Wp(e)),n.join(" ")}import*as tg from"node:readline";function Hp(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=H(e.used)+"/"+H(e.limit));let c=l?`${i} ${a} ${l}`:`${i} ${a}`,d=`${i} ${a}`,u=`ctx ${a}`,m=e.sparkline?p.meta(e.sparkline)+" ":"",f=e.sparkline?U(e.sparkline)+1:0,g=Math.max(0,e.width-f);if(U(c)<=g&&g>90)return m+n(c);if(U(d)<=g&&g>32)return m+n(d);if(U(u)<=g)return m+n(u);if(e.width>0){let b=m+n(u);return ie(b,e.width)}return n(a)}import VT from"chalk";var ba=new Map;function Kp(e,t){let n=ba.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`)}ba.set(e,t),up(e)}function ns(e){return ba.get(e)}function JT(e){return(e/1e3).toFixed(1)+"s"}function Gp(e,t){let n=ns(e.skillName),r=JT(e.durationMs);if(!n){let s=`[${e.skillName} \xB7 ${r}]`;return ya(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=VT.hex(n.color)(s);return ya(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 ya(s,t?.columns)}}function ya(e,t){return t!==void 0&&U(e)>t?ie(e,t):e}function zp(e){let t=ns(e);return t?`${t.glyph} ${t.inFlightVerb}`:e}import{homedir as XT}from"node:os";import{sep as rt}from"node:path";function qp(e,t={}){if(!e)return"";let n=t.homedir??XT(),r=ZT(e,n),o=t.maxWidth;if(o===void 0||o<=0||U(r)<=o)return r;let s=r.split(rt).filter(u=>u.length>0);if(s.length<=1)return ie(r,o);let a=r.startsWith("~")?"~":s[0],l=1,c=s[s.length-1],d=[];for(let u=s.length-2;u>=l;u--){let m=s.slice(l,u+1),f=m.length>0?m.join(rt)+rt:"";d.push(`${a}${rt}${f}\u2026${rt}${c}`)}d.push(`${a}${rt}\u2026${rt}${c}`);for(let u of d)if(U(u)<=o)return u;return ie(d[d.length-1],o)}function ZT(e,t){if(!t)return e;if(e===t)return"~";let n=t.endsWith(rt)?t:t+rt;return e.startsWith(n)?"~"+rt+e.slice(n.length):e}var rs=class{stream;force;throttleMs;started=!1;lastRepaint=0;lastFields=null;resizeUnsub=null;lastPaintedRow=null;extraRows=0;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=xt.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}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()}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 s=Math.max(8,Math.floor(r*.4)),i=qp(t.cwd,{maxWidth:s});i&&n.push(p.dim(i))}if(t.trustedSkillVerifying&&n.push(zp(t.trustedSkillVerifying)),n.push(p.brand(t.model)),t.planMode&&n.push(p.warning("\u25CF plan")),t.contextPct!==void 0){let s=Hp({ratio:t.contextPct,used:t.contextUsedTokens,limit:t.contextLimit,sparkline:t.contextSparkline,width:r});n.push(s)}t.cost!==void 0&&n.push(p.meta(`$${t.cost.toFixed(2)}`)),t.tokens!==void 0&&n.push(p.meta(`${QT(t.tokens)} tok`));let o=n.join(p.dim(" \xB7 "));return ie(o,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 QT(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}var De=new Map,rn=new Map;function oe(e){if(De.has(e.name))throw new Error(`Slash command already registered: ${e.name}`);De.set(e.name,e);for(let t of e.aliases??[]){if(rn.has(t)||De.has(t))throw new Error(`Slash alias collides: ${t}`);rn.set(t,e.name)}}function Nt(e){if(De.has(e.name)){for(let[t,n]of rn.entries())n===e.name&&rn.delete(t);De.delete(e.name)}oe(e)}function Yp(e){De.has(e.name)||oe(e)}function Vp(){De.clear(),rn.clear()}function ot(){return[...De.values()].sort((e,t)=>e.name.localeCompare(t.name))}function Jp(){let e=[];for(let[t,n]of rn.entries()){let r=De.get(n);r&&e.push({alias:t,canonical:n,summary:r.summary})}return e.sort((t,n)=>t.alias.localeCompare(n.alias))}function ex(e){if(De.has(e))return De.get(e);let t=rn.get(e);return t?De.get(t):void 0}function tx(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 nx(e,t=3){let n;for(let r of De.keys()){let o=tx(e,r);o<=t&&(n===void 0||o<n.dist)&&(n={name:r,dist:o})}return n?.name}function ka(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 Xp(e,t){let n=ka(e);if(n===null)return{handled:!1};let r=ex(n.name);if(!r){let s=nx(n.name);return s?t.out.warn(`Unknown command: ${n.name} (did you mean ${s}?)`):t.out.warn(`Unknown command: ${n.name} (type /help for commands)`),{handled:!0,result:"continue"}}let o=await r.handler(t,n.args);return o==="forward"?{handled:!1}:{handled:!0,result:o}}import ox from"ora";function Zp(e){return{totalTurns:0,totalCostUsd:0,totalTokens:0,totalDurationMs:0,sessionStartTime:Date.now(),turnCosts:[],turnTokens:[],turns:[],model:e,planMode:!1}}function Qp(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.pendingPlanExit}function os(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,d=l,u=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 g=m[m.length-1];if(g&&typeof g=="object"){let b=g;c=Number(b.input_tokens??0),d=Number(b.output_tokens??0),u=Number(b.cache_read_input_tokens??0)+Number(b.cache_creation_input_tokens??0)}}e.totalTurns+=1,e.totalCostUsd+=s,e.totalDurationMs+=i,e.totalTokens+=a+l,e.turnCosts.push(s),e.turnTokens.push({input:c,output:d,cache:u}),r?.sessionId&&!e.sessionId&&(e.sessionId=String(r.sessionId));let f={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(f),f}function em(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("")}var ss={stream:process.stdout,hideCursor:!1,discardStdin:!1};function wa(e,t){if(t?.getRatio()!==void 0)return t.getRatio();let n=e.turnTokens[e.turnTokens.length-1];if(!n)return 0;let r=n.input+n.output+n.cache;return Math.min(1,r/nt(e.model))}function Ar(e,t){let n=wa(e,t),r=nt(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.input+a.output+a.cache)}let i;if(e.turnTokens.length>=2){let a=e.turnTokens.map(c=>(c.input+c.output+c.cache)/r),l=em(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 sx={name:"/exit",aliases:["/quit"],summary:"Exit the session",async handler(){return"exit"}},ix={name:"/clear",summary:"Clear conversation history",async handler(e){try{await e.session.reset(),e.ui.clearScreen(),Qp(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"}},ax={name:"/compact",summary:"Compact history (summarize older messages)",async handler(e){let t=ox({text:p.meta("Summarizing earlier turns..."),...ss}).start();try{let n=await e.session.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.`):e.out.info(`Nothing to compact (${r}).`)}}catch(n){t.stop(),e.out.error(n instanceof Error?n.message:"Unknown error")}return"continue"}},lx={name:"/help",summary:"Show this help",async handler(e){let t=ot(),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(ue());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"}},tm=[sx,ix,ax,lx];function Sa(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 ze(e,t){return` ${p.label(e.padEnd(16))} ${t}`}function is(e){let t=[];t.push(" "+ue("Session Debug")),e.sessionId&&t.push(ze("session",e.sessionId)),e.model&&t.push(ze("model",e.model)),e.permissionMode&&t.push(ze("permission",e.permissionMode)),e.cwd&&t.push(ze("cwd",e.cwd)),e.claudeCodeVersion&&t.push(ze("sdk",`v${e.claudeCodeVersion}`)),e.apiKeySource&&t.push(ze("api key",e.apiKeySource)),e.outputStyle&&t.push(ze("output style",e.outputStyle));let n=e.tools?.length??0;t.push(ze(`tools (${n})`,Sa(e.tools)));let r=e.mcpServers??[],o=r.length?r.map(c=>`${c.name}[${c.status}]`).join(", "):p.dim("(none)");t.push(ze(`mcp (${r.length})`,o));let s=e.skills?.length??0;t.push(ze(`skills (${s})`,Sa(e.skills)));let i=e.plugins?.length??0,a=i?(e.plugins??[]).map(c=>c.name).join(", "):p.dim("(none)");t.push(ze(`plugins (${i})`,a));let l=e.slashCommands?.length??0;return t.push(ze(`slash (${l})`,Sa(e.slashCommands))),t.push(" "+ue()),t.join(`
|
|
1827
|
+
\u{1F916} Claude:`)),console.log(et(F.content));let _=o.getLastResponseMetadata();if(_){let M=[];_.durationMs&&M.push(re(_.durationMs)),_.totalCostUsd!==void 0&&M.push(Oe(_.totalCostUsd));let B=Number(_.usage?.input_tokens??0),V=Number(_.usage?.output_tokens??0);B+V>0&&M.push(H(B+V)+" tokens"),M.length>0&&console.log(Fp.dim(" \xB7 "+M.join(" \xB7 ")))}console.log("")}}catch(l){r.fail("Failed to send message"),q(l)}finally{o&&await o.close(),s?.close(),i!==void 0&&await i.cleanup()}})}import SP from"ora";import*as zg from"node:os";import*as Yn from"node:path";var Qo=new Set;function Nn(e){return Qo.add(e),()=>{Qo.delete(e)}}async function ma(){await Promise.all([...Qo].map(e=>e())),Qo.clear()}import{readFileSync as HT,writeFileSync as KT,existsSync as fa,mkdirSync as GT,readdirSync as zT,statSync as qT}from"fs";import{join as jp,basename as Bp}from"path";function ga(){return Kl(),kt()}function ha(e){return jp(ga(),`${e}.json`)}function es(e,t){let n=ga();fa(n)||GT(n,{recursive:!0});let r=t??e.sessionId??`session-${Date.now()}`,o={sessionId:e.sessionId,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=ha(r);return KT(s,JSON.stringify(o,null,2)),s}function Er(e){let t=e.includes("/")?e:ha(e);if(fa(t))try{let n=HT(t,"utf-8");return JSON.parse(n)}catch{return}}function ts(e){let t=e.includes("/")?e:ha(e),n=Er(t);if(n)return{path:t,id:Bp(t,".json"),data:n};for(let r of Cr()){if(r.id!==e&&r.sessionId!==e)continue;let o=Er(r.path);if(o)return{path:r.path,id:r.id,data:o}}}function Cr(){let e=ga();if(!fa(e))return[];let t=[];for(let n of zT(e)){if(!n.endsWith(".json"))continue;let r=jp(e,n);try{if(!qT(r).isFile())continue;let s=Er(r);if(!s||typeof s.savedAt!="number"||typeof s.model!="string")continue;t.push({path:r,id:Bp(n,".json"),sessionId:s.sessionId,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}var YT=/^[A-Za-z0-9_@%+=:,./-]+$/;function Wp(e){return YT.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Un(e,t){let n=["afk","interactive"];return typeof t=="string"&&t.length>0&&n.push("--model",Wp(t)),n.push("--resume",Wp(e)),n.join(" ")}import*as tg from"node:readline";function Hp(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=H(e.used)+"/"+H(e.limit));let c=l?`${i} ${a} ${l}`:`${i} ${a}`,d=`${i} ${a}`,u=`ctx ${a}`,m=e.sparkline?p.meta(e.sparkline)+" ":"",f=e.sparkline?U(e.sparkline)+1:0,g=Math.max(0,e.width-f);if(U(c)<=g&&g>90)return m+n(c);if(U(d)<=g&&g>32)return m+n(d);if(U(u)<=g)return m+n(u);if(e.width>0){let b=m+n(u);return ie(b,e.width)}return n(a)}import VT from"chalk";var ba=new Map;function Kp(e,t){let n=ba.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`)}ba.set(e,t),up(e)}function ns(e){return ba.get(e)}function JT(e){return(e/1e3).toFixed(1)+"s"}function Gp(e,t){let n=ns(e.skillName),r=JT(e.durationMs);if(!n){let s=`[${e.skillName} \xB7 ${r}]`;return ya(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=VT.hex(n.color)(s);return ya(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 ya(s,t?.columns)}}function ya(e,t){return t!==void 0&&U(e)>t?ie(e,t):e}function zp(e){let t=ns(e);return t?`${t.glyph} ${t.inFlightVerb}`:e}import{homedir as XT}from"node:os";import{sep as rt}from"node:path";function qp(e,t={}){if(!e)return"";let n=t.homedir??XT(),r=ZT(e,n),o=t.maxWidth;if(o===void 0||o<=0||U(r)<=o)return r;let s=r.split(rt).filter(u=>u.length>0);if(s.length<=1)return ie(r,o);let a=r.startsWith("~")?"~":s[0],l=1,c=s[s.length-1],d=[];for(let u=s.length-2;u>=l;u--){let m=s.slice(l,u+1),f=m.length>0?m.join(rt)+rt:"";d.push(`${a}${rt}${f}\u2026${rt}${c}`)}d.push(`${a}${rt}\u2026${rt}${c}`);for(let u of d)if(U(u)<=o)return u;return ie(d[d.length-1],o)}function ZT(e,t){if(!t)return e;if(e===t)return"~";let n=t.endsWith(rt)?t:t+rt;return e.startsWith(n)?"~"+rt+e.slice(n.length):e}var rs=class{stream;force;throttleMs;started=!1;lastRepaint=0;lastFields=null;resizeUnsub=null;lastPaintedRow=null;extraRows=0;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=xt.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}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()}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 s=Math.max(8,Math.floor(r*.4)),i=qp(t.cwd,{maxWidth:s});i&&n.push(p.dim(i))}if(t.trustedSkillVerifying&&n.push(zp(t.trustedSkillVerifying)),n.push(p.brand(t.model)),t.planMode&&n.push(p.warning("\u25CF plan")),t.contextPct!==void 0){let s=Hp({ratio:t.contextPct,used:t.contextUsedTokens,limit:t.contextLimit,sparkline:t.contextSparkline,width:r});n.push(s)}t.cost!==void 0&&n.push(p.meta(`$${t.cost.toFixed(2)}`)),t.tokens!==void 0&&n.push(p.meta(`${QT(t.tokens)} tok`));let o=n.join(p.dim(" \xB7 "));return ie(o,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 QT(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}var De=new Map,rn=new Map;function oe(e){if(De.has(e.name))throw new Error(`Slash command already registered: ${e.name}`);De.set(e.name,e);for(let t of e.aliases??[]){if(rn.has(t)||De.has(t))throw new Error(`Slash alias collides: ${t}`);rn.set(t,e.name)}}function Nt(e){if(De.has(e.name)){for(let[t,n]of rn.entries())n===e.name&&rn.delete(t);De.delete(e.name)}oe(e)}function Yp(e){De.has(e.name)||oe(e)}function Vp(){De.clear(),rn.clear()}function ot(){return[...De.values()].sort((e,t)=>e.name.localeCompare(t.name))}function Jp(){let e=[];for(let[t,n]of rn.entries()){let r=De.get(n);r&&e.push({alias:t,canonical:n,summary:r.summary})}return e.sort((t,n)=>t.alias.localeCompare(n.alias))}function ex(e){if(De.has(e))return De.get(e);let t=rn.get(e);return t?De.get(t):void 0}function tx(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 nx(e,t=3){let n;for(let r of De.keys()){let o=tx(e,r);o<=t&&(n===void 0||o<n.dist)&&(n={name:r,dist:o})}return n?.name}function ka(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 Xp(e,t){let n=ka(e);if(n===null)return{handled:!1};let r=ex(n.name);if(!r){let s=nx(n.name);return s?t.out.warn(`Unknown command: ${n.name} (did you mean ${s}?)`):t.out.warn(`Unknown command: ${n.name} (type /help for commands)`),{handled:!0,result:"continue"}}let o=await r.handler(t,n.args);return o==="forward"?{handled:!1}:{handled:!0,result:o}}import ox from"ora";function Zp(e){return{totalTurns:0,totalCostUsd:0,totalTokens:0,totalDurationMs:0,sessionStartTime:Date.now(),turnCosts:[],turnTokens:[],turns:[],model:e,planMode:!1}}function Qp(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.pendingPlanExit}function os(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,d=l,u=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 g=m[m.length-1];if(g&&typeof g=="object"){let b=g;c=Number(b.input_tokens??0),d=Number(b.output_tokens??0),u=Number(b.cache_read_input_tokens??0)+Number(b.cache_creation_input_tokens??0)}}e.totalTurns+=1,e.totalCostUsd+=s,e.totalDurationMs+=i,e.totalTokens+=a+l,e.turnCosts.push(s),e.turnTokens.push({input:c,output:d,cache:u}),r?.sessionId&&!e.sessionId&&(e.sessionId=String(r.sessionId));let f={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(f),f}function em(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("")}var ss={stream:process.stdout,hideCursor:!1,discardStdin:!1};function wa(e,t){if(t?.getRatio()!==void 0)return t.getRatio();let n=e.turnTokens[e.turnTokens.length-1];if(!n)return 0;let r=n.input+n.output+n.cache;return Math.min(1,r/nt(e.model))}function Ar(e,t){let n=wa(e,t),r=nt(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.input+a.output+a.cache)}let i;if(e.turnTokens.length>=2){let a=e.turnTokens.map(c=>(c.input+c.output+c.cache)/r),l=em(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 sx={name:"/exit",aliases:["/quit"],summary:"Exit the session",async handler(){return"exit"}},ix={name:"/clear",summary:"Clear conversation history",async handler(e){try{await e.session.reset(),e.ui.clearScreen(),Qp(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"}},ax={name:"/compact",summary:"Compact history (summarize older messages)",async handler(e){let t=ox({text:p.meta("Summarizing earlier turns..."),...ss}).start();try{let n=await e.session.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."):e.out.info(`Nothing to compact (${r}).`)}}catch(n){t.stop(),e.out.error(n instanceof Error?n.message:"Unknown error")}return"continue"}},lx={name:"/help",summary:"Show this help",async handler(e){let t=ot(),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(ue());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"}},tm=[sx,ix,ax,lx];function Sa(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 ze(e,t){return` ${p.label(e.padEnd(16))} ${t}`}function is(e){let t=[];t.push(" "+ue("Session Debug")),e.sessionId&&t.push(ze("session",e.sessionId)),e.model&&t.push(ze("model",e.model)),e.permissionMode&&t.push(ze("permission",e.permissionMode)),e.cwd&&t.push(ze("cwd",e.cwd)),e.claudeCodeVersion&&t.push(ze("sdk",`v${e.claudeCodeVersion}`)),e.apiKeySource&&t.push(ze("api key",e.apiKeySource)),e.outputStyle&&t.push(ze("output style",e.outputStyle));let n=e.tools?.length??0;t.push(ze(`tools (${n})`,Sa(e.tools)));let r=e.mcpServers??[],o=r.length?r.map(c=>`${c.name}[${c.status}]`).join(", "):p.dim("(none)");t.push(ze(`mcp (${r.length})`,o));let s=e.skills?.length??0;t.push(ze(`skills (${s})`,Sa(e.skills)));let i=e.plugins?.length??0,a=i?(e.plugins??[]).map(c=>c.name).join(", "):p.dim("(none)");t.push(ze(`plugins (${i})`,a));let l=e.slashCommands?.length??0;return t.push(ze(`slash (${l})`,Sa(e.slashCommands))),t.push(" "+ue()),t.join(`
|
|
1826
1828
|
`)}var va=["opus","opus_1m","sonnet","sonnet_1m","haiku"],cx={name:"/cost",summary:"Show total and per-turn cost",async handler(e){let{stats:t,out:n}=e;if(n.line(),n.line(p.bold("Session cost")),n.line(ue()),n.line(` total ${p.success(Oe(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(Oe(r))}`)}if(t.turnCosts.length>0){let r=t.turnCosts.slice(-5).map(Oe).join(p.dim(" \xB7 "));n.line(` last 5 ${r}`)}return n.line(),"continue"}};function ux(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(ue()),e.line(` total ${p.success(H(t.totalTokens))} of ${p.meta(H(t.maxTokens))} (${p.meta(`${Math.round(t.percentage*100)/100}%`)})`),t.autoCompactThreshold&&t.isAutoCompactEnabled&&e.line(` compact at ${p.meta(H(t.autoCompactThreshold))}`),e.line(),e.line(p.dim(" Last turn (API):")),e.line(` input ${p.meta(H(r))}`),e.line(` output ${p.meta(H(o))}`),e.line(` cache read ${p.meta(H(s))}`),e.line(` cache creat ${p.meta(H(i))}`),e.line(` total ${p.meta(H(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(H(f.tokens))}`)}let c=t.systemTools??[],d=t.mcpTools??[];if(c.length>0||d.length>0){e.line();let m=c.reduce((g,b)=>g+b.tokens,0),f=d.reduce((g,b)=>g+b.tokens,0);c.length>0&&e.line(p.dim(` system tools ${c.length} tools, ${H(m)} tokens`)),d.length>0&&e.line(p.dim(` MCP tools ${d.length} tools, ${H(f)} tokens`))}let u=t.agents??[];if(u.length>0){let m=u.reduce((f,g)=>f+g.tokens,0);e.line(p.dim(` agents ${u.length} loaded, ${H(m)} tokens`))}if(t.skills){let m=t.skills;e.line(p.dim(` skills ${m.includedSkills}/${m.totalSkills} included, ${H(m.tokens)} tokens`))}if(t.slashCommands){let m=t.slashCommands;e.line(p.dim(` slash cmds ${m.includedCommands}/${m.totalCommands} included, ${H(m.tokens)} tokens`))}e.line()}function dx(e,t){let n=t.turnTokens.reduce((c,d)=>c+d.input,0),r=t.turnTokens.reduce((c,d)=>c+d.output,0),o=t.turnTokens.reduce((c,d)=>c+d.cache,0),s=n+r,i=nt(t.model),a=n+r+o,l=Math.round(a/i*100);e.line(),e.line(p.bold("Token usage")+p.dim(" (local stats \u2014 SDK breakdown unavailable)")),e.line(ue()),e.line(` input ${p.meta(H(n))}`),e.line(` output ${p.meta(H(r))}`),e.line(` cache read ${p.meta(H(o))}`),e.line(` total ${p.success(H(s))}`),e.line(` context ${p.meta(`${l}% of ${H(i)} (${t.model})`)}`),e.line()}var px={name:"/tokens",aliases:["/ctx"],summary:"Show token usage (SDK breakdown with local-stats fallback)",async handler(e){try{let t=await e.session.getContextUsage();ux(e.out,t)}catch{dx(e.out,e.stats)}return"continue"}},mx={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(ue()),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")}},fx={name:"/reset",summary:"Clear screen, history, and session stats",async handler(e){let{stats:t,session:n,ui:r,out:o}=e;try{await n.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(),r.clearScreen(),o.success("Session reset."),"continue"}},gx={name:"/model",usage:"/model <opus|opus_1m|sonnet|sonnet_1m|haiku>",summary:"Switch the active model mid-session",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(` Valid: ${va.join(", ")}`)),"continue";if(!va.includes(n))return e.out.warn(`Unknown model: ${n}. Valid: ${va.join(", ")}`),"continue";try{await e.session.setModel(n),e.stats.model=n,e.ui.repaintStatusLine(),e.out.success(`Model switched to ${p.brand(n)}`)}catch(r){e.out.error(`Failed to switch model: ${r instanceof Error?r.message:String(r)}`)}return"continue"}},hx={name:"/tools",summary:"List tools available to the session",async handler(e){try{let n=(await e.session.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(ue());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"}},yx={name:"/mcp",summary:"List MCP servers connected to the session",async handler(e){try{let n=(await e.session.waitForInitialization()).mcpServers??[];if(n.length===0)return e.out.info("No MCP servers connected."),"continue";e.out.line(),e.out.line(p.bold(`MCP servers (${n.length})`)),e.out.line(ue());for(let r of n){let o=typeof r=="string"?r:r.name??JSON.stringify(r),s=typeof r=="object"&&r!==null&&"status"in r?String(r.status):"",i=s==="connected"?p.success("\u25CF"):p.warning("\u25CF");e.out.line(` ${i} ${o}${s?p.dim(` (${s})`):""}`)}e.out.line()}catch(t){e.out.error(`Could not read MCP servers: ${t instanceof Error?t.message:String(t)}`)}return"continue"}},bx={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(ue());for(let[t,n]of Object.entries(Po)){let r=t===e.stats.model?p.brand(" \u2190 active"):"";e.out.line(` ${p.warning(t.padEnd(12))} ${p.meta(H(n))}${r}`)}return e.out.line(),"continue"}},kx={name:"/debug",summary:"Show SDK session metadata (tools, MCP, skills, plugins, etc.)",async handler(e){try{let t=await e.session.waitForInitialization();e.out.line(),e.out.line(is(t)),e.out.line()}catch(t){e.out.error(`Could not read session metadata: ${t instanceof Error?t.message:String(t)}`)}return"continue"}},nm=[cx,px,mx,fx,gx,hx,yx,bx,kx];var Ta=!1;async function ht(e,t,n={}){let r=e.stats.planMode,o=t!==void 0?t:!r;try{if(await e.session.setPermissionMode(o?"plan":"default"),e.stats.planMode=o,e.ui.repaintStatusLine(),o){let s=Ta?"":p.dim(" Shift+Tab or /plan to exit.");Ta||(Ta=!0),e.out.success(p.warning("\u25CF plan mode ON")+p.dim(" \u2014 write_file, edit_file, and write-intent bash are refused.")+s)}else n.closureSummarySkipped?e.out.success(p.success("\u25CB plan mode OFF")+p.dim(" \u2014 force-exit (closure summary skipped). Default permissions restored.")):e.out.success(p.success("\u25CB plan mode OFF")+p.dim(" \u2014 default permissions restored"))}catch(s){e.out.error(`Could not toggle plan mode: ${s instanceof Error?s.message:String(s)}`)}}async function rm(e){e.stats.pendingPlanExit&&(await ht(e,!1),e.stats.planMode||(e.stats.pendingPlanExit=!1))}var wx=["You are about to exit plan mode. Before I flip permissions back to default on the next turn, emit your final plan in three sections:",""," - **Chosen approach** \u2014 the plan you recommend, in one to three sentences."," - **Risks named** \u2014 the concrete failure modes, constraints, or unknowns this plan does not eliminate."," - **Alternatives considered** \u2014 the options you weighed and why you rejected them.","","This is the record. Be specific. Do not propose write actions in this turn \u2014 writes are still refused until the mode flips."].join(`
|
|
1827
1829
|
`);async function Sx(e){return e.stats.pendingPlanExit=!0,e.ui.repaintStatusLine(),e.out.success(p.warning("\u25CF plan exit queued")+p.dim(" \u2014 plan mode still ON; writes still refused. Submitting closure summary (chosen approach, risks, alternatives); mode flips after the model responds. Force-exit now: /plan off again or Shift+Tab.")),{kind:"submit",message:wx}}async function vx(e){return e.stats.pendingPlanExit=!1,await ht(e,!1,{closureSummarySkipped:!0}),"continue"}async function Tx(e){return e.stats.pendingPlanExit=!1,e.ui.repaintStatusLine(),e.out.success(p.warning("\u25CF plan mode ON")+p.dim(" \u2014 plan exit cancelled, staying in plan mode.")),"continue"}function xx(e){e.out.info(p.dim("(plan exit cancelled \u2014 submitting your prompt instead.)"))}var om={name:"/plan",usage:"/plan [on|off|<prompt>]",summary:"Toggle plan mode (write_file, edit_file, and write-intent bash refused)",async handler(e,t){let n=t.trim(),r=n.toLowerCase();if(n!==""&&r!=="on"&&r!=="off"){let s=!!e.stats.pendingPlanExit;return e.stats.planMode||await ht(e,!0),s&&(e.stats.pendingPlanExit=!1,xx(e)),{kind:"submit",message:n}}return(r==="on"?!0:r==="off"?!1:!e.stats.planMode)===!0?e.stats.pendingPlanExit?Tx(e):(e.stats.planMode||await ht(e,!0),"continue"):e.stats.planMode?e.stats.pendingPlanExit?vx(e):Sx(e):(await ht(e,!1),"continue")}};import{readFileSync as Ex,writeFileSync as Cx,existsSync as sm,mkdirSync as Ax}from"fs";import{join as Px}from"path";function im(){return Gl(),ii()}function am(e){return Px(im(),`${e}.json`)}function as(e){let t=am(e);if(!sm(t))return{sessionId:e,items:[]};try{let n=Ex(t,"utf-8"),r=JSON.parse(n);return Array.isArray(r.items)?r:{sessionId:e,items:[]}}catch{return{sessionId:e,items:[]}}}function Pr(e){let t=im();sm(t)||Ax(t,{recursive:!0}),Cx(am(e.sessionId),JSON.stringify(e,null,2))}function lm(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 cm(e,t){let n=e.items.find(r=>r.id===t);return n&&(n.done=!0),n}function um(e,t){let n=e.items.findIndex(r=>r.id===t);return n===-1?!1:(e.items.splice(n,1),!0)}function dm(e){e.items.length=0}function ls(e){if(e.items.length===0)return[];let t=[],n=Math.max(20,ee());{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):Tt(r.text),a=` ${p.meta(`#${r.id}`)} ${o} `,l=Math.max(8,n-U(a)),c=te(s,l).split(`
|
|
1828
1830
|
`);t.push(a+(c[0]??""));let d=" ".repeat(U(a));for(let u of c.slice(1))t.push(d+u)}{let r=Math.max(0,Math.min(n-1,120));t.push(p.dim("\u2514"+"\u2500".repeat(r)))}return t}function pm(e){return e.items.length===0?"":e.items.map(t=>`${t.id}:${t.done?1:0}:${t.text}`).join(`
|
|
@@ -1863,11 +1865,11 @@ ${a}
|
|
|
1863
1865
|
`)){let i=te(s,r);for(let a of i.split(`
|
|
1864
1866
|
`))o.push(t+n+a)}return o}function Hm(e){return gt.has(e.toolName)?e.toolName+"::"+e.toolInput:e.toolName}function nE(e){return gt.has(e)?Um:jm}function Gm(e){return e.map((t,n)=>({sibling:t,connector:n===e.length-1?"\u2514 ":"\u251C "}))}function zm(e,t){if(e.length<=t)return e;let n=e.slice(0,t),r=e.slice(t),o=oE(r);return[...n,{kind:"overflow",count:r.length,text:o}]}function rE(e,t){return t?[...e,{kind:"resultSummary",summary:t}]:e}function qm(e){if(e.length===0)return[];let t=new Map;for(let o of e){let s=Hm(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=Hm(o),i=t.get(s);i.length>=nE(o.toolName)?r.has(s)||(n.push({kind:"group",toolName:o.toolName,label:gt.has(o.toolName)?o.toolInput:"",entries:i}),r.add(s)):n.push(o)}return n}function Ym(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 Bt(e.toolName+e.label)+p.dim(` \xD7${t} \u2014 ${s}`)}function oE(e){let t=new Map,n=0;for(let o of e)o.kind==="group"?(t.set(o.toolName,(t.get(o.toolName)??0)+o.entries.length),n+=o.entries.length):(t.set(o.toolName,(t.get(o.toolName)??0)+1),n+=1);if(n===0)return"";let r=[];for(let[o,s]of t)r.push(`${s} ${o}`);return`\u2026 +${n} (${r.join(", ")})`}function $a(e,t,n,r,o=ee()){let s=" ".repeat(n+1),i=e.filter(u=>u.kind==="text"),a=e.filter(u=>u.kind==="tool"),l=qm(a),c=zm(l,ws),d=Gm(c);for(let{sibling:u,connector:m}of d){let f=p.dim(m);if(u.kind==="overflow")r.push(Fe(s+f+p.dim(u.text),o));else if(u.kind==="group")r.push(Fe(s+f+Ym(u),o));else if(u.kind==="resultSummary")r.push(Fe(s+f+p.dim(u.summary),o));else{let g=u,b=t.get(g.toolUseId);gt.has(g.toolName)&&b&&b.length>0?(r.push(Fe(s+f+g.prefix,o)),$a(b,t,n+1,r,o),g.thinkingTail&&r.push(s+" "+p.thinking("\u2307 "+g.thinkingTail))):g.result?r.push(Fe(s+f+g.prefix+p.dim(" \u2014 ")+jn(g.result.isError)+" "+sn(g.result,void 0,60,g.toolName),o)):(r.push(Fe(s+f+g.prefix,o)),g.thinkingTail?r.push(s+" "+p.thinking("\u2307 "+g.thinkingTail)):r.push(Fe(s+" "+p.dim(Bm(g.toolName)),o)))}}for(let u of i)r.push(...Km(u.text,s))}function Vm(e,t,n,r,o,s=ee()){let i=" ".repeat(n+1),a=[],l=e.filter(g=>g.kind==="text"),c=e.filter(g=>g.kind==="tool"),d=qm(c),u=zm(d,ws),m=rE(u,o),f=Gm(m);for(let{sibling:g,connector:b}of f){let S=p.dim(b);if(g.kind==="overflow")a.push(Fe(i+S+p.dim(g.text),s));else if(g.kind==="resultSummary")a.push(Fe(i+S+p.dim(g.summary),s));else if(g.kind==="group")a.push(Fe(i+S+Ym(g),s));else{let h=g,k=t.get(h.toolUseId);gt.has(h.toolName)&&k&&k.length>0?(a.push(Fe(i+S+h.prefix,s)),a.push(...Vm(k,t,n+1,r,void 0,s))):h.result?a.push(Fe(i+S+h.prefix+p.dim(" \u2014 ")+jn(h.result.isError)+" "+sn(h.result,r,60,h.toolName),s)):a.push(Fe(i+S+h.prefix,s))}}for(let g of l)a.push(...Km(g.text,i));return a}function Oa(e,t,n,r){let o=t.filter(d=>d.kind==="tool"),i=o.filter(d=>d.result).reduce((d,u)=>d+(u.result.lineCount??0),0),a=[];o.length>ws&&(a.push(`${o.length} tools`),i>0&&a.push(`${i} lines`));let l=a.length>0?" "+e.prefix+p.dim(" \u2014 "+a.join(" \xB7 ")):" "+e.prefix,c=Vm(t,n,1,r,e.agentResultSummary);return[l,...c].join(`
|
|
1865
1867
|
`)}function Da(e,t,n){let r=[];for(let o of t){let s=e.get(o);if(s.length===1){let i=s[0];i.result?r.push(" "+i.prefix+p.dim(" \u2014 ")+jn(i.result.isError)+" "+sn(i.result,n,60,i.toolName)):r.push(" "+i.prefix)}else r.push(sE(o,s,n))}return r}function sE(e,t,n){let{color:r,glyph:o}=Dn(e),s=t.map(d=>Ma(d.toolInput).trim()),i=r(o+" ")+r.bold(e)+p.dim(` \xD7${t.length}`)+" "+p.toolArg(s.join(", ")),a=t.filter(d=>d.result),l=a.filter(d=>d.result.isError);if(l.length>0){let d=a.length-l.length,m=a.filter(g=>!g.result.isError).map(g=>g.result.lineCount).filter(g=>g!==void 0).reduce((g,b)=>g+b,0),f=[];return m>0&&f.push(`${m} lines`),d>0&&f.push(`${d} ok`),f.push(p.error(`${l.length} error${l.length>1?"s":""}`))," "+i+p.dim(" \u2014 ")+f.join(p.dim(", "))}let c=a.map(d=>d.result?.lineCount).filter(d=>d!==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 u=c.reduce((m,f)=>m+f,0);return" "+i+p.dim(` \u2014 ${u} lines total`)}if(a.length>0){let d=a.map(u=>sn(u.result,n,60,u.toolName));return" "+i+p.dim(" \u2014 ")+d.join(p.dim(", "))}return" "+i}var Jm=6,Ir=class{entries=new Map;order=[];agentIdStack=[];addStart(t,n,r){let o=Bt(n+r),s=this.agentIdStack.at(-1)??void 0,i={kind:"tool",toolUseId:t,toolName:n,toolInput:r,prefix:o,...s!==void 0?{agentContext:s}:{}};this.entries.set(t,i),this.order.push(t),wr.has(n)&&this.agentIdStack.push(t)}addStartWithAgentContext(t,n,r,o,s){let i=this.entries.get(t);if(i?.kind==="tool"){i.toolInput=r,i.prefix=Bt(n+r,s),o!==void 0&&(i.agentContext=o);return}let a=Bt(n+r,s),l={kind:"tool",toolUseId:t,toolName:n,toolInput:r,prefix:a,...o!==void 0?{agentContext:o}:{}};this.entries.set(t,l),this.order.push(t)}mergeAgentLabel(t,n,r){let o=this.entries.get(t);if(o?.kind!=="tool"||!wr.has(o.toolName)||o.toolName==="Agent")return!1;let s=`(${n})`;return o.toolName="Agent",o.toolInput=s,o.prefix=Bt("Agent"+s,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()}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"}getOverlay(){let t=this.buildChildMap(),n=[],r=[];for(let i of this.order){let a=this.entries.get(i);!a||a.kind!=="tool"||a.agentContext||r.push(a)}let o=r,s=0;if(r.length>Jm){let i=r.filter(d=>!d.result),a=r.filter(d=>d.result),l=Math.max(0,Jm-i.length),c=new Set(a.slice(-l));s=a.length-c.size,o=r.filter(d=>!d.result||c.has(d))}for(let i of o){let a=t.get(i.toolUseId);gt.has(i.toolName)&&a&&a.length>0?(n.push(" "+i.prefix),$a(a,t,1,n),i.thinkingTail&&n.push(" "+p.thinking("\u2307 "+i.thinkingTail))):i.result?n.push(" "+i.prefix+p.dim(" \u2014 ")+jn(i.result.isError)+" "+sn(i.result,void 0,60,i.toolName)):(n.push(" "+i.prefix+p.dim(" \u2026")),i.thinkingTail&&n.push(" "+p.thinking("\u2307 "+i.thinkingTail)))}return s>0&&n.push(" "+p.dim(`\u2026 +${s} done`)),n.join(`
|
|
1866
|
-
`)}flushSource(t,n){let r=this.entries.get(t);if(!r||r.kind!=="tool")return[];let o=new Set([t]),s=[t];for(;s.length>0;){let c=s.shift();for(let[d,u]of this.entries){if(o.has(d))continue;(u.kind==="tool",u.agentContext)===c&&(o.add(d),u.kind==="tool"&&s.push(d))}}let i=new Map;for(let c of this.order){if(!o.has(c))continue;let d=this.entries.get(c);if(!d)continue;let u=(d.kind==="tool",d.agentContext);if(!u)continue;let m=i.get(u);m||(m=[],i.set(u,m)),m.push(d)}let a=i.get(r.toolUseId)??[],l=[Oa(r,a,i,n)];for(let c of o)this.entries.delete(c);return this.order=this.order.filter(c=>!o.has(c)),l}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);gt.has(l.toolName)&&c&&c.length>0?(o.push(...Da(s,i,t)),s.clear(),i.length=0,o.push(Oa(l,c,n,t))):(s.has(l.toolName)||(s.set(l.toolName,[]),i.push(l.toolName)),s.get(l.toolName).push(l))}return o.push(...Da(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}};var Bn=class{buffer="";startedAt=null;hasEmitted=!1;push(t){this.hasEmitted||(this.buffer+=t,this.startedAt||(this.startedAt=Date.now()))}isActive(){return!this.hasEmitted}hasBufferedContent(){return this.buffer.trim().length>0}peek(){return this.buffer}consume(){return this.hasEmitted=!0,this.buffer}collapse(){if(this.hasEmitted||!this.startedAt)return!this.startedAt&&!this.hasEmitted&&Ae()&&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=Date.now()-this.startedAt,n=t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`,r=Math.ceil(this.buffer.length/4);return` ${p.thinking("\u25C6 thought for "+n+" \xB7 "+r+" tok")}`}inlineSummary(){if(!this.startedAt||!this.hasBufferedContent())return null;let t=Date.now()-this.startedAt,n=t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`,r=Math.ceil(this.buffer.length/4);return`thought ${n} \xB7 ${r} tok`}};var Fa="__main__";function Zm(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 Mr(e,t){return{type:"tool_result",toolUseId:"synthetic",content:e,isError:t}}function Qm(e){let t=["Done"],n=[];e.stats.toolUses&&n.push(`${e.stats.toolUses} tool${e.stats.toolUses===1?"":"s"}`),e.stats.tokens&&n.push(`${H(e.stats.tokens)} tok`);let r=e.responseMetadata?.durationMs;if(typeof r=="number"&&n.push(re(r)),n.length===0){let s=Date.now()-e.startedAt;s>0&&n.push(re(s))}let o=e.thinkingLane?.inlineSummary();return o&&n.push(o),n.length>0&&t.push(`(${n.join(" \xB7 ")})`),t.join(" ")}var Ss=class{out;throttleMs;indent;buffer="";committed="";throttleTimer=null;logUpdate=null;isTTY;flushing=!1;compositor;constructor(t){this.out=t?.out??process.stdout,this.throttleMs=t?.throttleMs??33,this.indent=t?.indent??" ",this.isTTY=this.out.isTTY??!1,this.compositor=t?.compositor??null,this.logUpdate=null}async initLogUpdate(){if(!(!this.isTTY||this.logUpdate!==null))try{let n=(await import("log-update")).default,r=(o=>{n(o)});r.clear=()=>n.clear(),this.logUpdate=r}catch{this.logUpdate=null}}hasMarkdownContent(t){return/[#*_\-\`>\[\|~]/.test(t)}findBlockBoundary(t){let n=t.indexOf(`
|
|
1868
|
+
`)}flushSource(t,n){let r=this.entries.get(t);if(!r||r.kind!=="tool")return[];let o=new Set([t]),s=[t];for(;s.length>0;){let c=s.shift();for(let[d,u]of this.entries){if(o.has(d))continue;(u.kind==="tool",u.agentContext)===c&&(o.add(d),u.kind==="tool"&&s.push(d))}}let i=new Map;for(let c of this.order){if(!o.has(c))continue;let d=this.entries.get(c);if(!d)continue;let u=(d.kind==="tool",d.agentContext);if(!u)continue;let m=i.get(u);m||(m=[],i.set(u,m)),m.push(d)}let a=i.get(r.toolUseId)??[],l=[Oa(r,a,i,n)];for(let c of o)this.entries.delete(c);return this.order=this.order.filter(c=>!o.has(c)),l}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);gt.has(l.toolName)&&c&&c.length>0?(o.push(...Da(s,i,t)),s.clear(),i.length=0,o.push(Oa(l,c,n,t))):(s.has(l.toolName)||(s.set(l.toolName,[]),i.push(l.toolName)),s.get(l.toolName).push(l))}return o.push(...Da(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}};var Bn=class{buffer="";startedAt=null;hasEmitted=!1;push(t){this.hasEmitted||(this.buffer+=t,this.startedAt||(this.startedAt=Date.now()))}isActive(){return!this.hasEmitted}hasBufferedContent(){return this.buffer.trim().length>0}peek(){return this.buffer}consume(){return this.hasEmitted=!0,this.buffer}collapse(){if(this.hasEmitted||!this.startedAt)return!this.startedAt&&!this.hasEmitted&&Ae()&&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=Date.now()-this.startedAt,n=t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`,r=Math.ceil(this.buffer.length/4);return` ${p.thinking("\u25C6 thought for "+n+" \xB7 "+r+" tok")}`}inlineSummary(){if(!this.startedAt||!this.hasBufferedContent())return null;let t=Date.now()-this.startedAt,n=t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`,r=Math.ceil(this.buffer.length/4);return`thought ${n} \xB7 ${r} tok`}};var Fa="__main__";function Zm(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 Mr(e,t){return{type:"tool_result",toolUseId:"synthetic",content:e,isError:t}}function Qm(e){let t=["Done"],n=[];e.stats.toolUses&&n.push(`${e.stats.toolUses} tool${e.stats.toolUses===1?"":"s"}`),e.stats.tokens&&n.push(`${H(e.stats.tokens)} tok`);let r=e.responseMetadata?.durationMs;if(typeof r=="number"&&n.push(re(r)),n.length===0){let s=Date.now()-e.startedAt;s>0&&n.push(re(s))}let o=e.thinkingLane?.inlineSummary();return o&&n.push(o),n.length>0&&t.push(`(${n.join(" \xB7 ")})`),t.join(" ")}var Ss=class{out;throttleMs;indent;buffer="";committed="";throttleTimer=null;logUpdate=null;isTTY;flushing=!1;compositor;constructor(t){this.out=t?.out??process.stdout,this.throttleMs=t?.throttleMs??33,this.indent=t?.indent??" ",this.isTTY=this.out.isTTY??!1,this.compositor=t?.compositor??null,this.logUpdate=null}async initLogUpdate(){if(!(!this.isTTY||this.logUpdate!==null))try{let n=(await import("log-update")).default,r=(o=>{n(o)});r.clear=()=>n.clear(),this.logUpdate=r}catch{this.logUpdate=null}}hasMarkdownContent(t){return/[#*_\-\`>\[\|~]|\d+\.\s/.test(t)}findBlockBoundary(t){let n=t.indexOf(`
|
|
1867
1869
|
|
|
1868
|
-
`);if(n!==-1)return n+2;let r=t.match(/\n[ \t]
|
|
1870
|
+
`);if(n!==-1&&!this.isInOpenCodeFence(t.slice(0,n)))return n+2;let r=t.match(/\n[ \t]*(?:```|~~~)[ \t]*\n/);return r&&r.index!==void 0?r.index+r[0].length:-1}applyIndent(t){return t.split(`
|
|
1869
1871
|
`).map(n=>n?this.indent+n:"").join(`
|
|
1870
|
-
`)}isInOpenCodeFence(t){
|
|
1872
|
+
`)}isInOpenCodeFence(t){let n=(t.match(/^```[^\n]*$/gm)??[]).length,r=(t.match(/^~~~[^\n]*$/gm)??[]).length;return n%2===1||r%2===1}commitBlock(t){if(!t.trim())return;let n=this.hasMarkdownContent(t),r=this.indent.length,o=Math.max(1,ee()-2),s=Math.max(1,o-r),i;n?i=et(t,{maxWidth:s}):i=te(t,s);let a=te(i,s),c=this.applyIndent(a).replace(/\n+$/,"");this.compositor&&this.compositor.commitAbove(c+`
|
|
1871
1873
|
`),this.committed?this.committed+=`
|
|
1872
1874
|
|
|
1873
1875
|
`+c:this.committed+=c}scheduleRepaint(){this.isTTY&&(this.flushing||(this.throttleTimer&&clearTimeout(this.throttleTimer),this.throttleTimer=setTimeout(()=>{this.throttleTimer=null,this.repaint()},this.throttleMs)))}async repaint(){if(this.flushing||!this.isTTY||!this.buffer.trim())return;let t,n=this.indent.length,r=Math.max(1,ee()-2),o=Math.max(1,r-n);this.isInOpenCodeFence(this.buffer)?t=`
|
|
@@ -1970,7 +1972,7 @@ _ended: ${new Date().toISOString()}_
|
|
|
1970
1972
|
`)}function BA(e){let t=[],n=(r,o)=>{o&&o.trim().length>0&&t.push({label:r,value:o.trim()})};switch(e.kind){case"done":n("done",e.whatWasDone),n("evidence",e.evidence),n("deferred",e.deferred);break;case"blocked":n("blocks",e.whatBlocks),n("unblock",e.unblockCondition),n("progress",e.alreadyDone);break;case"asking":n("question",e.question),n("resolves",e.assumption),n("after",e.followup);break;case"interrupted":n("was doing",e.whatWasInProgress),n("saved at",e.stateLocation),n("resume",e.resumeRequires);break}return t}function WA(e,t){let n=[];e&&n.push({type:"text",text:e});for(let r of t)n.push({type:"image",source:{type:"base64",media_type:r.mediaType,data:r.bytes.toString("base64")}});return n}async function Rg(e,t,n,r,o="summary",s,i){let a=dg(e.text,e.attachments);r.setInFlight(!0);let l="",c=!1,d,u=!1,m=!1,f=!1,g,b=!1,S=[],h=new Map,k=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,T=new Wt({out:Wn(),thinkingMode:o,...k?{activeSkillName:k}:{},onCancel:()=>{t.interrupt().catch(w=>{Ae()&&console.error(" "+p.error("session.interrupt() failed:"),w)})},...i?{onBackground:()=>{b=!0}}:{}}),A=async()=>{if(!m){m=!0;try{await T.dispose()}catch{}}};try{console.log(),await T.arm();let w=T.getCompositor();if(s&&w){let v=w;s.fn=E=>v.commitAbove(E)}r.setActiveCompositor?.(w),r.rearmStatus?.();let C=e.attachments.length===0?e.text:WA(e.text,e.attachments),x=t.sendMessageStream(C);if(await Sn(T.sink,async()=>{for await(let v of x){if(b&&i){let E=k??e.text.slice(0,40),I=i.register(E),R=us(I,i);ds(x,l,a,I,i,R,n,r.onTurnComplete,t.abortSignal),await A(),console.log(p.dim(` \u2192 backgrounded as ${I.id}: ${I.label}`)),r.setInFlight(!1),r.rearmStatus?.();return}if(v.type==="chunk"&&v.chunk.type==="content"?(l+=v.chunk.content,c=!0):v.type==="message"&&!c&&(l=v.message.content),v.type==="chunk"&&v.chunk.type==="tool_use_detail"){let E=v.chunk,I={toolName:E.toolName,toolUseId:E.toolUseId,input:E.toolInput};h.set(E.toolUseId,I),S.push(I)}else if(v.type==="chunk"&&v.chunk.type==="tool_result"){let E=v.chunk,I=h.get(E.toolUseId);I&&(I.result=E.content,I.isError=E.isError,h.delete(E.toolUseId))}if(v.type==="paused"){await A(),console.log(fc({reason:v.reason,...v.resetsAt!==void 0?{resetsAt:v.resetsAt}:{},...v.accountId!==void 0?{accountId:v.accountId}:{}}));continue}if(v.type==="resumed"){let E=v.hotSwapped&&v.accountId?`\u25B6 Resumed on ${v.accountId}`:"\u25B6 Resumed";console.log(p.success(E));continue}if(v.type==="error"){await A(),bn(yn(v.error)),u=!0;continue}T.process(v),v.type==="done"&&(f=!0,g=v.metadata)}}),!m){let v=T.getCompositor();if(v)try{let{text:E,queued:I}=v.getBuffer();I&&E.length>0&&(d=E)}catch{}}if(await A(),f){os(n,a,l,g,S),r.onTurnComplete&&await r.onTurnComplete(a,l).catch(()=>{}),c&&console.log(`
|
|
1971
1973
|
`);let v=Ag(l);if(v&&(console.log(Pg(v)),console.log(),r.onTerminalState))try{r.onTerminalState(v)}catch{}if(HA(g,n),r.onAfterTurn){let E=r.onAfterTurn();E instanceof Promise&&await E.catch(()=>{})}}}catch(w){await A(),u||bn(yn(w))}finally{await A(),s&&(s.fn=w=>console.log(w)),r.setActiveCompositor?.(null),r.setInFlight(!1),r.rearmStatus?.()}return d}function HA(e,t){if(!e)return;let n=[];e.durationMs&&n.push(re(e.durationMs)),e.totalCostUsd!==void 0&&n.push(Oe(e.totalCostUsd));let r=Number(e.usage?.input_tokens??0),o=Number(e.usage?.output_tokens??0);r+o>0&&n.push(H(r+o)+" tok"),n.length>0&&console.log(p.dim(" \u25E6 "+n.join(" \xB7 ")));let s=wa(t);if(s>.5){let i=s>.8?p.error:p.warning;console.log(i(` context ${Math.round(s*100)}% used of ${H(nt(t.model))}`))}console.log()}function _g(e={}){let t=e.load??as,n=e.onResize??(i=>xt.subscribe(i)),r="",o,s=n(()=>{r=""});return{renderIfChanged(i){let a=i??"unbound",l=t(a),c=pm(l);return a===o&&c===r?[]:(o=a,r=c,c===""?[]:ls(l))},invalidate(){r=""},dispose(){try{s()}catch{}}}}var il={done:{glyph:"\u2713",color:p.success,label:"done"},blocked:{glyph:"\u2298",color:p.error,label:"blocked"},asking:{glyph:"?",color:p.warning,label:"asking"},interrupted:{glyph:"\u23F8",color:p.info,label:"interrupted"}};function Ig(e={}){let t=Math.max(2,e.capacity??8),n=[];return{push(r){n.push(r.kind),n.length>t&&(n=n.slice(n.length-t))},reset(){n=[]},entries(){return n},render(){if(n.length===0)return null;let r=p.dim(" ledger "),o=p.dim(" \xB7 "),s=n.map(d=>{let u=il[d];return u.color(`${u.glyph} ${u.label}`)}),i=p.dim(` (${n.length} turn${n.length===1?"":"s"})`),a=r+s.join(o)+i,l=Math.max(20,ee()-2);if(U(a)<=l)return a;let c=r+n.map(d=>il[d].color(il[d].glyph)).join(p.dim(" "))+i;return ie(c,l)}}}var Mg=["\u25D0","\u25D1","\u25D2","\u25D3"],Ks=class{stream;manager;throttleMs;started=!1;lastRepaint=0;spinnerIndex=0;spinnerInterval=null;resizeUnsub=null;updateHandler=null;rowCount=0;onRowCountChange;constructor(t,n={}){this.manager=t,this.stream=n.stream??process.stdout,this.throttleMs=n.throttleMs??200}setRowCountChangeHandler(t){this.onRowCountChange=t}start(){this.started||(this.started=!0,this.updateHandler=()=>this.scheduleRepaint(),this.manager.on("update",this.updateHandler),this.manager.on("complete",this.updateHandler),this.resizeUnsub=xt.subscribe(()=>this.repaint()),this.spinnerInterval=setInterval(()=>{this.spinnerIndex=(this.spinnerIndex+1)%Mg.length,this.rowCount>0&&this.repaint()},Math.max(this.throttleMs,50)))}stop(){this.started&&(this.started=!1,this.updateHandler&&(this.manager.removeListener("update",this.updateHandler),this.manager.removeListener("complete",this.updateHandler),this.updateHandler=null),this.resizeUnsub&&(this.resizeUnsub(),this.resizeUnsub=null),this.spinnerInterval&&(clearInterval(this.spinnerInterval),this.spinnerInterval=null),this.rowCount>0&&(this.clearRows(),this.rowCount=0,this.onRowCountChange?.(0)))}scheduleRepaint(){Date.now()-this.lastRepaint<this.throttleMs||this.repaint()}repaint(){if(!this.started||!this.stream.isTTY)return;this.lastRepaint=Date.now();let t=this.manager.running(),n=t.length;if(n!==this.rowCount&&(this.rowCount>0&&this.clearRows(),this.rowCount=n,this.onRowCountChange?.(n)),n===0)return;let o=(this.stream.rows??24)-n;this.stream.write("\x1B[s");for(let s=0;s<t.length;s++){let i=t[s],a=o+s;this.stream.write(`\x1B[${a};1H`),this.stream.write("\x1B[2K"),this.stream.write(this.formatTaskLine(i))}this.stream.write("\x1B[u")}clearRows(){if(!this.stream.isTTY)return;let n=(this.stream.rows??24)-this.rowCount;this.stream.write("\x1B[s");for(let r=0;r<this.rowCount;r++)this.stream.write(`\x1B[${n+r};1H`),this.stream.write("\x1B[2K");this.stream.write("\x1B[u")}formatTaskLine(t){let n=Math.max(4,(this.stream.columns??80)-2),r=p.brand(Mg[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(`${H(t.stats.tokens)} tok`);let l=Date.now()-t.startedAt;return a.push(re(l)),a.length>0&&i.push(p.dim(a.join(" \xB7 "))),ie(" "+i.join(" "),n)}};function $g(e,t){let n=p.brand("afk")+p.dim(` (${e})`),r=t?p.warning(" \u25CF plan"):"";return n+r+p.dim(" \u203A ")}async function Og(e,t,n,r){let o=null,s=[];e.session.waitForInitialization().then(async g=>{Ae()&&(o=is(g)),await Cf(e.session),Ae()&&(s=Ef())}).catch(()=>{});let i=await Cg(),a,l=_g(),c=Ig(),d=new cs;Tm(d),Rm(d),Im(d);let u=new Ks(d);u.setRowCountChangeHandler(g=>{e.statusLine.setExtraRows(g)}),u.start();let m=50,f=[];d.on("complete",g=>{f.length>=m&&f.shift(),f.push(g)});try{for(;;){if(o&&(e.replRenderer.writeLine(o),e.replRenderer.writeLine(""),o=null),s.length>0){for(let w of s)e.replRenderer.writeLine(w);e.replRenderer.writeLine(""),s=[]}for(;f.length>0;){let w=f.shift(),C=w.status==="succeeded"?"\u2713":"\u2717",x=[];if(w.resultText){let E=w.resultText.trim().split(`
|
|
1972
1974
|
`)[0]?.slice(0,80)??"";E&&x.push(E)}w.error&&x.push(w.error.message);let v=[w.stats.toolUses>0?`${w.stats.toolUses} tools`:"",w.stats.tokens>0?`${Math.round(w.stats.tokens/1e3)}k tok`:"",w.stats.durationMs>0?`${Math.round(w.stats.durationMs/1e3)}s`:""].filter(Boolean).join(" \xB7 ");v&&x.push(v),e.replRenderer.writeLine(Et({kind:w.status==="succeeded"?"checkpoint":"diagnosis",title:`${C} ${w.id} ${w.label}`,body:x})),e.replRenderer.writeLine("")}let g=l.renderIfChanged(e.stats.sessionId);if(g.length>0){for(let w of g)e.replRenderer.writeLine(w);e.replRenderer.writeLine("")}let b=c.render();b&&e.replRenderer.writeLine(b);let S,h;if(a!==void 0){let w=a;a=void 0;let C=$g(e.stats.model,e.stats.planMode),x=_r({buffer:w,promptText:C,isTTY:!!process.stdout.isTTY});e.replRenderer.writeLine(x),S=w.trim(),h=[]}else{let w=await vg({rl:e.rl,promptFn:()=>$g(e.stats.model,e.stats.planMode),onSigint:r,statusLine:e.statusLine,compositor:n.activeCompositor??void 0,history:i,onShiftTab:()=>{let C=e.slashCtx;C.stats.planMode&&C.stats.pendingPlanExit?(C.stats.pendingPlanExit=!1,ht(C,!1,{closureSummarySkipped:!0}).catch(()=>{})):ht(C).catch(()=>{}),e.statusLine.rearm()}});S=w.text.trim(),h=w.attachments}if(!S&&h.length===0)continue;let k=!1;if(S.startsWith("/")){let w=await Xp(S,e.slashCtx);if(w.handled){if(w.result==="exit"){e.rl.close();return}if((S==="/clear"||S.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),c.reset()),w.result!==null&&typeof w.result=="object"&&"kind"in w.result&&w.result.kind==="submit"){a=w.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}k=!0}i.push(S);let T=S;if(k){let w=ka(S);if(w){let C=w.name.replace(/^\//,"").split(":").pop()??"";if(C&&Wa(C)){let x={skillName:C,rawArgs:w.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},v=e.session.sessionId,E=Or(v),I=await $r(x,{cwd:process.cwd(),artifactDir:E},R=>{Ae()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${C}) failed: `)+(R instanceof Error?R.message:String(R)))});T=Ka(I?.manifestBlock,S)}}}let A;if(e.firstTurnHook&&e.stats.totalTurns===0){let w=e.firstTurnHook;e.firstTurnHook=void 0,A=Promise.resolve().then(()=>w(S)).catch(C=>{console.warn(p.warning("\u26A0 ")+"first-turn hook failed: "+(C instanceof Error?C.message:String(C)))})}a=await Rg({text:T,attachments:h},e.session,e.stats,{setInFlight(w){n.turnInFlight=w},async onTurnComplete(w,C){await t.appendTurn(w,C)},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await rm(e.slashCtx),e.statusLine.rearm()},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:w=>c.push(w),setActiveCompositor:w=>{n.activeCompositor=w,e.replRenderer.setCompositor(w)}},e.options.thinkingUi,e.completionWriter,d),A!==void 0&&await A}}finally{u.stop(),l.dispose()}}import{promises as GA}from"node:fs";import{dirname as zA,join as qA}from"node:path";import{randomBytes as YA}from"node:crypto";import KA from"@anthropic-ai/sdk";import{randomUUID as Dg}from"node:crypto";async function Fg(e){let{token:t,model:n,system:r,user:o,maxTokens:s=64,signal:i,clientFactory:a}=e;if(!t)throw new Error("oneShotCompletion: token required");let l=ro(t),c=rr(t,l),d=a?a(c):new KA(c),u=Dg(),m=Dg(),f=Zt(l,u,m),g={};Object.keys(f).length>0&&(g.headers=f),i&&(g.signal=i);let b=await d.messages.create({model:n,max_tokens:s,system:r,messages:[{role:"user",content:o}]},Object.keys(g).length>0?g:void 0),S=[];for(let k of b.content)k.type==="text"&&S.push(k.text);let h=S.join("").trim();return h.length===0&&console.warn("oneShotCompletion: response contained no text blocks \u2014 returning empty string"),h}var VA=["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(`
|
|
1973
|
-
`),Lg=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,al=30,JA=1024,XA=8e3,ZA="haiku";async function QA(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=rP(n,JA),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??XA),i=t.signal?oP([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Fg({token:t.token,model:t.model??ZA,system:VA,user:r,maxTokens:32,signal:i})}catch{return null}finally{clearTimeout(s)}let l=eP(a);if(l===null)return null;let c=zA(t.worktreePath);return await tP(l,c)}function eP(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(Lg.test(t)&&t.length<=al)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>al)break;o=i}return Lg.test(o)?o:null}async function tP(e,t){if(!await nP(qA(t,e)))return e;let n=YA(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,al-5)}-${n}`}async function nP(e){try{return await GA.access(e),!0}catch{return!1}}function rP(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 oP(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 Ng(e){let t=await QA(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:e.handle.path,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{}});if(t===null)return{status:"skipped",reason:"slug generation returned null"};let r=await(e.renameFn??Dp)(e.handle,t,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return r.ok?(e.session&&e.session.setCwd(r.newPath),{status:"renamed",oldPath:r.oldPath,newPath:r.newPath,oldBranch:r.oldBranch,newBranch:r.newBranch}):(r.partial==="branch"&&e.session&&e.session.setCwd(e.handle.path),{status:"failed",reason:r.reason,...r.partial!==void 0?{partial:r.partial}:{}})}import{spawn as Ug}from"child_process";import{existsSync as cP,mkdirSync as uP,readFileSync as jg,unlinkSync as dP,writeFileSync as pP}from"fs";import{get as mP}from"https";import{join as Bg}from"path";import{readFileSync as sP}from"fs";import{dirname as iP,join as aP}from"path";import{fileURLToPath as lP}from"url";function fn(){try{return"2.26.
|
|
1975
|
+
`),Lg=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,al=30,JA=1024,XA=8e3,ZA="haiku";async function QA(e,t){let n=e.trim();if(n.length===0||n.startsWith("/"))return null;let r=rP(n,JA),o=new AbortController,s=setTimeout(()=>o.abort(),t.timeoutMs??XA),i=t.signal?oP([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,i):a=await Fg({token:t.token,model:t.model??ZA,system:VA,user:r,maxTokens:32,signal:i})}catch{return null}finally{clearTimeout(s)}let l=eP(a);if(l===null)return null;let c=zA(t.worktreePath);return await tP(l,c)}function eP(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(Lg.test(t)&&t.length<=al)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>al)break;o=i}return Lg.test(o)?o:null}async function tP(e,t){if(!await nP(qA(t,e)))return e;let n=YA(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,al-5)}-${n}`}async function nP(e){try{return await GA.access(e),!0}catch{return!1}}function rP(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 oP(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 Ng(e){let t=await QA(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:e.handle.path,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{}});if(t===null)return{status:"skipped",reason:"slug generation returned null"};let r=await(e.renameFn??Dp)(e.handle,t,e.branchPrefix!==void 0?{branchPrefix:e.branchPrefix}:void 0);return r.ok?(e.session&&e.session.setCwd(r.newPath),{status:"renamed",oldPath:r.oldPath,newPath:r.newPath,oldBranch:r.oldBranch,newBranch:r.newBranch}):(r.partial==="branch"&&e.session&&e.session.setCwd(e.handle.path),{status:"failed",reason:r.reason,...r.partial!==void 0?{partial:r.partial}:{}})}import{spawn as Ug}from"child_process";import{existsSync as cP,mkdirSync as uP,readFileSync as jg,unlinkSync as dP,writeFileSync as pP}from"fs";import{get as mP}from"https";import{join as Bg}from"path";import{readFileSync as sP}from"fs";import{dirname as iP,join as aP}from"path";import{fileURLToPath as lP}from"url";function fn(){try{return"2.26.4"}catch{}try{let e=iP(lP(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(sP(aP(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}var fP=64*1024,gP=1440*60*1e3,hP="update-check.json",yP="pending-update.json";function Wg(){return Bg(qr(),hP)}function ll(){return Bg(qr(),yP)}function Hg(){let e=qr();cP(e)||uP(e,{recursive:!0})}function bP(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 kP(){try{let e=jg(Wg(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function wP(){try{Hg();let e=`
|
|
1974
1976
|
const https = require('https');
|
|
1975
1977
|
const fs = require('fs');
|
|
1976
1978
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|