agent-afk 5.98.0 → 5.99.0
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 +3 -3
- package/dist/index.mjs +2 -2
- package/dist/telegram.mjs +5 -5
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -7,7 +7,7 @@ var T8=Object.defineProperty;var k=(e,t)=>()=>(e&&(t=e(e=0)),t);var Nc=(e,t)=>{f
|
|
|
7
7
|
`;process.stderr.write(c)}}var W5,K5,G5,Ti=k(()=>{"use strict";W();W5=`# AFK PROMPT DUMP \u2014 May contain secrets. Inspect before sharing.
|
|
8
8
|
`,K5=/key|token|secret|password|credential|auth/i,G5=[[/sk-ant-[A-Za-z0-9_\-]{8,200}/g,e=>`<REDACTED sk-ant length=${e[0].length}>`],[/sk-(?!ant-)[A-Za-z0-9_\-]{20,200}/g,e=>`<REDACTED sk- length=${e[0].length}>`],[/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,e=>`<REDACTED Bearer length=${e[0].length}>`],[/AKIA[A-Z0-9]{16}/g,e=>`<REDACTED AKIA length=${e[0].length}>`],[/xox[baprs]-[A-Za-z0-9\-]{10,200}/g,e=>`<REDACTED xox token length=${e[0].length}>`],[/\d{8,12}:[A-Za-z0-9_\-]{35}/g,e=>`<REDACTED Telegram token length=${e[0].length}>`],[/([A-Za-z_]{3,}(?:[Kk][Ee][Yy]|[Tt][Oo][Kk][Ee][Nn]|[Ss][Ee][Cc][Rr][Ee][Tt]|[Pp][Aa][Ss][Ss][Ww][Oo][Rr][Dd]|[Cc][Rr][Ee][Dd][Ee][Nn][Tt][Ii][Aa][Ll])[A-Za-z_]*)=([^\s]{16,})/g,e=>`${e[1]}=<REDACTED length=${e[2].length}>`],[/([A-Z_]{3,}(?:KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH)[A-Z_]*)=([^\s]{16,})/g,e=>`${e[1]}=<REDACTED length=${e[2].length}>`]]});import{randomBytes as V5}from"node:crypto";import{mkdir as J5,writeFile as Y5}from"node:fs/promises";import{join as X5}from"node:path";function Z5(e){return T.AFK_CAPTURE_SUBAGENT_PROMPTS!=="1"||!e.isSubagentFork||!e.sessionId||!e.subagentId?!1:e.prompt.length>0}function e3(e,t){let n=Buffer.byteLength(e,"utf8");return n<=t?{text:e,originalBytes:n,truncated:!1}:{text:Buffer.from(e,"utf8").subarray(0,t).toString("utf8").replace(/\uFFFD+$/,""),originalBytes:n,truncated:!0}}function t3(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function Rm(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function n3(e,t){let n=["---",`subagentId: ${Rm(e.subagentId??"unknown")}`,`sessionLabel: ${Rm(e.sessionId??"unknown")}`,`turn: ${e.turn}`,`capturedAt: ${Rm(new Date().toISOString())}`,`promptBytes: ${t.originalBytes}`,`bodyBytes: ${Buffer.byteLength(t.text,"utf8")}`,`truncated: ${t.truncated}`,"redaction: best-effort"];return e.model!==void 0&&n.push(`model: ${Rm(e.model)}`),n.push("---",Q5,""),n.push(t.text),t.truncated&&n.push("",`<!-- TRUNCATED at ${PI} bytes of ${t.originalBytes} -->`),`${n.join(`
|
|
9
9
|
`)}
|
|
10
|
-
`}async function MI(e){try{if(!Z5(e))return;let t=e3(e.prompt,PI),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Ue(n),o=n3(e,{...t,text:r}),i=H_(e.sessionId);await J5(i,{recursive:!0,mode:448});let s=new Date().toISOString().replace(/[:.]/g,"-"),a=V5(3).toString("hex"),l=X5(i,`${s}-${t3(e.subagentId)}-t${e.turn}-${a}.md`);await Y5(l,o,{encoding:"utf8",mode:384,flag:"wx"})}catch(t){B(`subagent-prompt-capture failed: ${String(t)}`)}}var PI,Q5,OI=k(()=>{"use strict";W();G();de();Ti();PI=8*1024,Q5="<!-- Best-effort secret redaction only. Connection strings, PEM blocks, and PII are NOT caught. -->"});async function Ei(e,t){if(e)try{await e.write({kind:"tool_call",payload:t})}catch(n){B(`trace.emit tool_call failed: ${Mn(n)}`)}}async function sn(e,t){if(e)try{await e.write({kind:"hook_decision",payload:t})}catch(n){B(`trace.emit hook_decision failed: ${Mn(n)}`)}}async function Ri(e,t){if(e)try{await e.write({kind:"subagent_lifecycle",payload:t})}catch(n){B(`trace.emit subagent_lifecycle failed: ${Mn(n)}`)}}async function xi(e,t){if(e)try{await e.write({kind:"background_agent",payload:t})}catch(n){B(`trace.emit background_agent failed: ${Mn(n)}`)}}async function $I(e,t){if(e)try{await e.write({kind:"budget",payload:t})}catch(n){B(`trace.emit budget failed: ${Mn(n)}`)}}async function DI(e,t){if(e)try{await e.write({kind:"abort",payload:t})}catch(n){B(`trace.emit abort failed: ${Mn(n)}`)}}async function xm(e,t){if(e)try{await e.write({kind:"compaction",payload:t})}catch(n){B(`trace.emit compaction failed: ${Mn(n)}`)}}async function FI(e,t){if(e)try{await e.write({kind:"closure",payload:t})}catch(n){B(`trace.emit closure failed: ${Mn(n)}`)}}async function it(e,t){if(e)try{await e.write({kind:"browser_event",payload:t})}catch(n){B(`trace.emit browser_event failed: ${Mn(n)}`)}}async function LI(e,t){if(e)try{await e.write({kind:"queued_user_message",payload:t})}catch(n){B(`trace.emit queued_user_message failed: ${Mn(n)}`)}}async function re(e,t){if(e)try{await e.write({kind:"session_phase",payload:t})}catch(n){B(`trace.emit session_phase failed: ${Mn(n)}`)}}function Mn(e){return e instanceof Error?e.message:String(e)}var pe=k(()=>{"use strict";de()});function NI(e){let t=[...e.oauthEntries??[],...e.effort?[e.effortEntry]:[],...e.extendedCacheTtl?[e.extendedCacheEntry]:[],...e.fast?[r3]:[]].filter(Boolean);return[...new Set(t)].join(",")||void 0}var r3,BI=k(()=>{"use strict";r3="fast-mode-2026-02-01"});function Cm(e){return e.startsWith("sk-ant-oat01-")?"oauth":"api-key"}function Qc(e,t,n,r){let o=t==="oauth"?{authToken:e}:{apiKey:e},i=typeof n=="string"&&n.length>0?{...o,baseURL:n}:o;return r?{...i,fetch:r}:i}function So(e,t,n,r,o,i){let s=NI({oauthEntries:e==="oauth"?o3.split(","):[],effort:e==="oauth"&&r===!0,extendedCacheTtl:o,fast:i,effortEntry:i3,extendedCacheEntry:UI});return e!=="oauth"?s?{"anthropic-beta":s}:{}:{"anthropic-beta":s,"x-app":"cli","User-Agent":s3,"X-Claude-Code-Session-Id":t,"x-client-request-id":n}}function jI(e){return e!=="oauth"?null:[{type:"text",text:a3}]}var UI,o3,i3,s3,a3,Ci=k(()=>{"use strict";BI();UI="extended-cache-ttl-2025-04-11",o3=`claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,${UI}`,i3="effort-2025-11-24",s3="claude-cli/1.0.0 (external, cli)",a3="x-anthropic-billing-header: cc_version=1.0.0.test; cc_entrypoint=cli; cch=00000;"});function _m(e){gv=e}function pv(e){if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0}function Am(e,t,n){let r={},o=pv(e);o&&(r.id=o);let i=pv(t);i&&(r.baseUrl=i);let s=pv(n);return s&&(r.apiKey=s),r}function l3(){return{local:Am(T.AFK_MODEL_LOCAL,T.AFK_MODEL_LOCAL_BASE_URL,T.AFK_MODEL_LOCAL_API_KEY),small:Am(T.AFK_MODEL_SMALL,T.AFK_MODEL_SMALL_BASE_URL,T.AFK_MODEL_SMALL_API_KEY),medium:Am(T.AFK_MODEL_MEDIUM,T.AFK_MODEL_MEDIUM_BASE_URL,T.AFK_MODEL_MEDIUM_API_KEY),large:Am(T.AFK_MODEL_LARGE,T.AFK_MODEL_LARGE_BASE_URL,T.AFK_MODEL_LARGE_API_KEY)}}function bv(e){let t=l3(),n={};for(let r of Zc){let o=Ai[r],i=e?.[r],s=t[r],a={id:s.id??i?.id??o.id},l=i?.name;l&&(a.name=l);let c=i?.provider;c&&(a.provider=c);let u=s.baseUrl??i?.baseUrl;u&&(a.baseUrl=u);let d=s.apiKey??i?.apiKey;d&&(a.apiKey=d),n[r]=a}return n}function ha(e){return e||gv||bv()}function ya(e,t=ha()){let n=e.trim().toLowerCase();if(!(!n||n===KI)){for(let r of Zc){let o=t[r].name;if(o&&o.trim().toLowerCase()===n)return r}if(n==="local"||n==="small"||n==="medium"||n==="large")return n}}function _i(e,t=ha()){if(e===void 0)return{id:""};let n=ya(e,t);if(n)return t[n];let r=yv[e.trim().toLowerCase()];return r?{id:r}:{id:e}}function or(e,t=ha()){if(e!==void 0)return _i(e,t).id}function ba(e,t=ha()){if(e===void 0)return;let n=ya(e,t);if(n&&t[n].id.trim()===""){let r=n.toUpperCase();return`The "${n}" model tier is not configured (no model id). Set AFK_MODEL_${r}=<id> (optionally AFK_MODEL_${r}_BASE_URL / AFK_MODEL_${r}_API_KEY) or "models.${n}" in afk.config.json, then retry.`}}function GI(e){let t={};if(!e||typeof e!="object")return t;let n=e;for(let r of Zc){let o=u3(n[r]);o&&(t[r]=o)}return t}function qI(e){if(typeof e!="string")return;let t=e.trim().toLowerCase();if(t==="anthropic"||t==="anthropic-direct")return"anthropic";if(t==="openai"||t==="openai-compatible")return"openai";if(t==="chatgpt-oauth"||t==="chatgpt")return"chatgpt-oauth"}function ga(e){return typeof e=="string"?e.trim():""}function HI(e){return/[\x00-\x1f\x7f]/.test(e)}function u3(e){if(typeof e=="string"){let t=e.trim();return t?{id:t}:void 0}if(e&&typeof e=="object"){let t=e,n=ga(t.id);if(!n)return;let r={id:n},o=ga(t.name);o&&(r.name=o);let i=qI(t.provider);i&&(r.provider=i);let s=ga(t.baseUrl);s&&(r.baseUrl=s);let a=ga(t.apiKey);return a&&(r.apiKey=a),r}}function zI(e){if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,error:'model binding must be an object with at least an "id"'};let t=e;if("apiKey"in t||"api_key"in t)return{ok:!1,error:"per-slot API keys are credentials; set AFK_MODEL_<TIER>_API_KEY via `afk config env set` instead of afk.config.json"};if("baseUrl"in t||"base_url"in t)return{ok:!1,error:"per-slot baseUrl is an endpoint-redirect credential vector; set AFK_MODEL_<TIER>_BASE_URL via `afk config env set` instead of afk.config.json"};let n=ga(t.id);if(!n)return{ok:!1,error:'model binding requires a non-empty "id"'};if(HI(n))return{ok:!1,error:'model binding "id" must not contain control characters'};let r={id:n},o=ga(t.name);if(o){if(HI(o))return{ok:!1,error:'model binding "name" must not contain control characters'};if(c3.has(o.trim().toLowerCase()))return{ok:!1,error:`model binding "name" must not shadow a built-in alias ("${o}")`};r.name=o}if(t.provider!==void 0&&t.provider!==""){let i=qI(t.provider);if(!i)return{ok:!1,error:'model binding "provider" must be one of: anthropic, openai (aliases: anthropic-direct, openai-compatible)'};r.provider=i}return{ok:!0,value:r}}var Zc,WI,mv,fv,hv,Ai,KI,yv,eu,gv,c3,Ct=k(()=>{"use strict";W();Zc=["local","small","medium","large"],WI="claude-haiku-4-5-20251001",mv="claude-sonnet-5",fv="claude-opus-5",hv="claude-fable-5",Ai={local:{id:""},small:{id:WI},medium:{id:mv},large:{id:fv}},KI="auto",yv={opus:fv,opus_1m:fv,sonnet:mv,sonnet_1m:mv,haiku:WI,fable:hv},eu=[...Zc,...Object.keys(yv)];c3=new Set([...Zc,KI,...Object.keys(yv)])});function tu(e){return e in wv}function ft(e){return or(e)}var wv,an=k(()=>{"use strict";Ct();wv={opus:Ai.large.id,opus_1m:Ai.large.id,sonnet:Ai.medium.id,sonnet_1m:Ai.medium.id,haiku:Ai.small.id,fable:hv}});import d3 from"@anthropic-ai/sdk";import{randomUUID as VI}from"node:crypto";async function wa(e){let{token:t,model:n,system:r,user:o,maxTokens:i=64,signal:s,clientFactory:a}=e;if(!t)throw new Error("oneShotCompletion: token required");let l=Cm(t),c=Qc(t,l),u=a?a(c):new d3(c),d=VI(),m=VI(),f=So(l,d,m),g=ft(n)??n,h={};Object.keys(f).length>0&&(h.headers=f),s&&(h.signal=s);let y=await u.messages.create({model:g,max_tokens:i,system:r,messages:[{role:"user",content:o}]},Object.keys(h).length>0?h:void 0),b=[];for(let S of y.content)S.type==="text"&&b.push(S.text);let w=b.join("").trim();return w.length===0&&console.warn("oneShotCompletion: response contained no text blocks \u2014 returning empty string"),w}var Im=k(()=>{"use strict";Ci();an()});function f3(){let e=T.AFK_VISION_MODELS,t=[],n=[];if(e)for(let r of e.split(",")){let o=r.trim().toLowerCase();if(o)if(o.startsWith("!")){let i=o.slice(1).trim();i&&n.push(i)}else t.push(o)}return{enable:t,disable:n}}function JI(e,t){return e===t||e.includes(t)}function Pm(e){if(!e)return!1;let t=(or(e)??e).trim();if(!t)return!1;let n=t.toLowerCase(),{enable:r,disable:o}=f3();return o.some(i=>JI(n,i))?!1:r.some(i=>JI(n,i))||p3.has(n)?!0:m3.some(i=>i.test(t))}function YI(e){let t=e.trim().toLowerCase();return t.includes("/")?t.slice(t.lastIndexOf("/")+1):t}function Ii(e){return e?/^o[0-9]/.test(YI(e)):!1}function nu(e){if(!e)return!1;if(Ii(e))return!0;let t=YI(e);return g3.some(n=>n.test(t))}var p3,m3,g3,Pi=k(()=>{"use strict";W();Ct();p3=new Set(["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4-turbo","o1","o3","o4-mini"]),m3=[/^claude-/i,/^gpt-4o/i,/^gpt-4\.1/i,/^gpt-4-turbo/i,/^gpt-4-vision/i,/^gpt-5/i,/(?:^|[/_-])(?:vl|vlm)(?:[/_.-]|$)/i,/(?:^|[/_-])(?:llava|pixtral|internvl|cogvlm|idefics|moondream|janus)/i,/(?:vision|minicpm-?[vo]|qwen[\d.]*-?vl|llama-?3\.2-\d+b-vision|gemma-3|phi-3\.5-vision|phi-4-multimodal)/i];g3=[/^gpt-5/]});function ru(e){let t=String(e).trim().toLowerCase(),n=Mm[t];if(t.endsWith("_1m")&&n!==void 0)return n;let r=or(e)??String(e);return Mm[r]??Mm[r.toLowerCase()]??h3}function w3(e){if(!e)return!1;let t=e.trim().toLowerCase();return t?!!(t.includes("/")||t.startsWith("gpt-")||t.startsWith("gpt_")||Ii(t)||t.startsWith("codex-")||t.startsWith("codex_")||t==="codex"):!1}function Gt(e){let t=String(e).trim().toLowerCase(),n=Sa[t];if(t.endsWith("_1m")&&n!==void 0)return n;let r=or(e)??String(e),o=Sa[r]??Sa[r.toLowerCase()];return o!==void 0?o:w3(r)?b3:y3}function Mi(e){let t=Gt(e);if(String(e).trim().toLowerCase().endsWith("_1m"))return t;let r=or(e)??String(e),o=XI[r]??XI[r.toLowerCase()];return o!==void 0?Math.min(t,o):t}var Mm,h3,Sa,y3,b3,XI,vo=k(()=>{"use strict";Ct();Pi();Mm={opus:128e3,opus_1m:128e3,sonnet:128e3,sonnet_1m:128e3,haiku:64e3,fable:128e3,"claude-opus-5":128e3,"claude-opus-4-8":128e3,"claude-sonnet-5":128e3,"claude-haiku-4-5-20251001":64e3,"claude-fable-5":128e3,"gpt-5.5":128e3,"gpt-5.6":128e3,"gpt-5.6-sol":128e3,"gpt-5.6-terra":128e3,"gpt-5.6-luna":128e3},h3=64e3;Sa={opus:1e6,opus_1m:1e6,sonnet:1e6,sonnet_1m:1e6,haiku:2e5,fable:1e6,"claude-fable-5":1e6,"claude-sonnet-5":1e6,"claude-opus-5":1e6,"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4.1":1e6,"gpt-4.1-mini":1e6,"gpt-5.5":1e6,"gpt-5.6":1e6,"gpt-5.6-sol":1e6,"gpt-5.6-terra":1e6,"gpt-5.6-luna":1e6,o1:2e5,"o1-mini":128e3,o3:2e5,"o3-mini":2e5,"o4-mini":2e5,"mlx-community/qwen3-30b-a3b-4bit":128e3,"mlx-community/qwen3-32b-4bit":128e3,"mlx-community/qwen2.5-coder-32b-instruct-4bit":131072},y3=2e5,b3=262144;XI={"claude-sonnet-5":2e5,"claude-opus-5":2e5}});function QI(e){return(e.inputTokens??0)+(e.outputTokens??0)}function qt(e){return e.contextWindowTokens??QI(e)}function ou(e){return e?{totalTokens:qt(e),apiUsage:{input_tokens:e.inputTokens??0,output_tokens:e.outputTokens??0,cache_read_input_tokens:e.cachedInputTokens??0,cache_creation_input_tokens:e.cacheCreationTokens??0,context_window_tokens:qt(e)}}:{totalTokens:0,apiUsage:null}}function iu(e,t,n){return t<=0||e<=0||n<=0||n>=1?!1:e/t>=n}function su(e,t){return t<=0||e<=0?0:e/t}function va(e){if(e===void 0||e===!1)return;if(e===!0)return S3;let t=e.threshold;if(!(typeof t!="number"||!Number.isFinite(t)||t<=0||t>=1))return t}var S3,au=k(()=>{"use strict";S3=.9});function $m(e,t){let n=ru(t),r=e.maxOutputTokens;if(typeof r=="number"&&Number.isFinite(r)&&r>0){let o=Math.floor(r);if(o>n){let i=`max:${t}:${o}`;return Om.has(i)||(Om.add(i),console.warn(`[afk] maxOutputTokens ${o} exceeds the ${t} output ceiling (${n}); clamping to ${n}.`)),n}return o}return n}function ZI(e){if(!e||e.length===0)return;let t=[];for(let n of e)n.user.length>0&&t.push({role:"user",content:n.user}),n.assistant.length>0&&t.push({role:"assistant",content:n.assistant});return t.length>0?t:void 0}function Dm(e,t,n){switch(e.type){case"adaptive":return{type:"adaptive",display:"summarized"};case"disabled":return{type:"disabled"};case"enabled":{if(typeof n=="string"&&k3(n))return{type:"adaptive",display:"summarized"};let r=Math.floor(t*T3),o=Math.max(1024,t-1-r),i=e.budgetTokens!==void 0&&Number.isFinite(e.budgetTokens)?Math.floor(e.budgetTokens):void 0,s=Math.min(Math.max(i??o,1024),o);if(i!==void 0&&i>o){let a=`think:${n??"default"}:${i}:${t}`;Om.has(a)||(Om.add(a),console.warn(`[afk] thinking budgetTokens ${i} leaves too little of max_tokens ${t} for the reply; clamping to ${o}.`))}return{type:"enabled",budget_tokens:s,display:"summarized"}}}}function Fm(e,t){if(e!==void 0)return e;let n=t.toLowerCase();if(/(claude-)?(opus|sonnet)-(4-[678]|5)/.test(n))return"max"}var v3,k3,Om,T3,Lm=k(()=>{"use strict";vo();au();v3=e=>/opus-4-(7|[89])/.test(e),k3=e=>v3(e)||/(claude-)?(opus|sonnet)-5/.test(e),Om=new Set,T3=.25});import Sv from"path";import{dirname as E3}from"path";import{appendFileSync as R3,mkdirSync as x3}from"fs";var ko,Nm=k(()=>{"use strict";G();ko=class{hooks;constructor(t){this.hooks=t}addReadRoot(t,n="slash",r){this.hooks.ensureInitialized?.();let o=this.hooks.getReadRoots();if(!o)return;let i=Sv.resolve(t);o.includes(i)||(o.push(i),this.appendAuditLog({action:"grant-read",path:i,source:n,sessionId:r}))}addWriteRoot(t,n="slash",r){this.hooks.ensureInitialized?.();let o=this.hooks.getReadRoots(),i=this.hooks.getWriteRoots();if(!o||!i)return;let s=Sv.resolve(t);o.includes(s)||o.push(s),i.includes(s)||(i.push(s),this.appendAuditLog({action:"grant-write",path:s,source:n,sessionId:r}))}revokeRoot(t,n="slash",r){let o=this.hooks.getReadRoots();if(!o)return;let i=Sv.resolve(t),s=this.hooks.getProtectedRoot();if(s!==void 0&&i===s)return;let a=o.indexOf(i);a!==-1&&o.splice(a,1);let l=this.hooks.getWriteRoots();if(l){let c=l.indexOf(i);c!==-1&&l.splice(c,1)}this.appendAuditLog({action:"revoke",path:i,source:n,sessionId:r})}getGrants(){return{resolveBase:this.hooks.getProtectedRoot(),readRoots:this.hooks.getReadRoots()?.slice()??[],writeRoots:this.hooks.getWriteRoots()?.slice()??[],allowAll:this.hooks.getAllowAll()}}appendAuditLog(t){try{let n=rm();x3(E3(n),{recursive:!0});let r=JSON.stringify({timestamp:new Date().toISOString(),sessionId:t.sessionId??this.hooks.getDefaultSessionId?.()??null,action:t.action,path:t.path,source:t.source});R3(n,r+`
|
|
10
|
+
`}async function MI(e){try{if(!Z5(e))return;let t=e3(e.prompt,PI),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Ue(n),o=n3(e,{...t,text:r}),i=H_(e.sessionId);await J5(i,{recursive:!0,mode:448});let s=new Date().toISOString().replace(/[:.]/g,"-"),a=V5(3).toString("hex"),l=X5(i,`${s}-${t3(e.subagentId)}-t${e.turn}-${a}.md`);await Y5(l,o,{encoding:"utf8",mode:384,flag:"wx"})}catch(t){B(`subagent-prompt-capture failed: ${String(t)}`)}}var PI,Q5,OI=k(()=>{"use strict";W();G();de();Ti();PI=8*1024,Q5="<!-- Best-effort secret redaction only. Connection strings, PEM blocks, and PII are NOT caught. -->"});async function Ei(e,t){if(e)try{await e.write({kind:"tool_call",payload:t})}catch(n){B(`trace.emit tool_call failed: ${Mn(n)}`)}}async function sn(e,t){if(e)try{await e.write({kind:"hook_decision",payload:t})}catch(n){B(`trace.emit hook_decision failed: ${Mn(n)}`)}}async function Ri(e,t){if(e)try{await e.write({kind:"subagent_lifecycle",payload:t})}catch(n){B(`trace.emit subagent_lifecycle failed: ${Mn(n)}`)}}async function xi(e,t){if(e)try{await e.write({kind:"background_agent",payload:t})}catch(n){B(`trace.emit background_agent failed: ${Mn(n)}`)}}async function $I(e,t){if(e)try{await e.write({kind:"budget",payload:t})}catch(n){B(`trace.emit budget failed: ${Mn(n)}`)}}async function DI(e,t){if(e)try{await e.write({kind:"abort",payload:t})}catch(n){B(`trace.emit abort failed: ${Mn(n)}`)}}async function xm(e,t){if(e)try{await e.write({kind:"compaction",payload:t})}catch(n){B(`trace.emit compaction failed: ${Mn(n)}`)}}async function FI(e,t){if(e)try{await e.write({kind:"closure",payload:t})}catch(n){B(`trace.emit closure failed: ${Mn(n)}`)}}async function it(e,t){if(e)try{await e.write({kind:"browser_event",payload:t})}catch(n){B(`trace.emit browser_event failed: ${Mn(n)}`)}}async function LI(e,t){if(e)try{await e.write({kind:"queued_user_message",payload:t})}catch(n){B(`trace.emit queued_user_message failed: ${Mn(n)}`)}}async function re(e,t){if(e)try{await e.write({kind:"session_phase",payload:t})}catch(n){B(`trace.emit session_phase failed: ${Mn(n)}`)}}function Mn(e){return e instanceof Error?e.message:String(e)}var pe=k(()=>{"use strict";de()});function NI(e){let t=[...e.oauthEntries??[],...e.effort?[e.effortEntry]:[],...e.extendedCacheTtl?[e.extendedCacheEntry]:[],...e.fast?[r3]:[]].filter(Boolean);return[...new Set(t)].join(",")||void 0}var r3,BI=k(()=>{"use strict";r3="fast-mode-2026-02-01"});function Cm(e){return e.startsWith("sk-ant-oat01-")?"oauth":"api-key"}function Qc(e,t,n,r){let o=t==="oauth"?{authToken:e}:{apiKey:e},i=typeof n=="string"&&n.length>0?{...o,baseURL:n}:o;return r?{...i,fetch:r}:i}function So(e,t,n,r,o,i){let s=NI({oauthEntries:e==="oauth"?o3.split(","):[],effort:e==="oauth"&&r===!0,extendedCacheTtl:o,fast:i,effortEntry:i3,extendedCacheEntry:UI});return e!=="oauth"?s?{"anthropic-beta":s}:{}:{"anthropic-beta":s,"x-app":"cli","User-Agent":s3,"X-Claude-Code-Session-Id":t,"x-client-request-id":n}}function jI(e){return e!=="oauth"?null:[{type:"text",text:a3}]}var UI,o3,i3,s3,a3,Ci=k(()=>{"use strict";BI();UI="extended-cache-ttl-2025-04-11",o3=`claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,${UI}`,i3="effort-2025-11-24",s3="claude-cli/1.0.0 (external, cli)",a3="x-anthropic-billing-header: cc_version=1.0.0.test; cc_entrypoint=cli; cch=00000;"});function _m(e){gv=e}function pv(e){if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0}function Am(e,t,n){let r={},o=pv(e);o&&(r.id=o);let i=pv(t);i&&(r.baseUrl=i);let s=pv(n);return s&&(r.apiKey=s),r}function l3(){return{local:Am(T.AFK_MODEL_LOCAL,T.AFK_MODEL_LOCAL_BASE_URL,T.AFK_MODEL_LOCAL_API_KEY),small:Am(T.AFK_MODEL_SMALL,T.AFK_MODEL_SMALL_BASE_URL,T.AFK_MODEL_SMALL_API_KEY),medium:Am(T.AFK_MODEL_MEDIUM,T.AFK_MODEL_MEDIUM_BASE_URL,T.AFK_MODEL_MEDIUM_API_KEY),large:Am(T.AFK_MODEL_LARGE,T.AFK_MODEL_LARGE_BASE_URL,T.AFK_MODEL_LARGE_API_KEY)}}function bv(e){let t=l3(),n={};for(let r of Zc){let o=Ai[r],i=e?.[r],s=t[r],a={id:s.id??i?.id??o.id},l=i?.name;l&&(a.name=l);let c=i?.provider;c&&(a.provider=c);let u=s.baseUrl??i?.baseUrl;u&&(a.baseUrl=u);let d=s.apiKey??i?.apiKey;d&&(a.apiKey=d),n[r]=a}return n}function ha(e){return e||gv||bv()}function ya(e,t=ha()){let n=e.trim().toLowerCase();if(!(!n||n===KI)){for(let r of Zc){let o=t[r].name;if(o&&o.trim().toLowerCase()===n)return r}if(n==="local"||n==="small"||n==="medium"||n==="large")return n}}function _i(e,t=ha()){if(e===void 0)return{id:""};let n=ya(e,t);if(n)return t[n];let r=yv[e.trim().toLowerCase()];return r?{id:r}:{id:e}}function or(e,t=ha()){if(e!==void 0)return _i(e,t).id}function ba(e,t=ha()){if(e===void 0)return;let n=ya(e,t);if(n&&t[n].id.trim()===""){let r=n.toUpperCase();return`The "${n}" model tier is not configured (no model id). Set AFK_MODEL_${r}=<id> (optionally AFK_MODEL_${r}_BASE_URL / AFK_MODEL_${r}_API_KEY) or "models.${n}" in afk.config.json, then retry.`}}function GI(e){let t={};if(!e||typeof e!="object")return t;let n=e;for(let r of Zc){let o=u3(n[r]);o&&(t[r]=o)}return t}function qI(e){if(typeof e!="string")return;let t=e.trim().toLowerCase();if(t==="anthropic"||t==="anthropic-direct")return"anthropic";if(t==="openai"||t==="openai-compatible")return"openai";if(t==="chatgpt-oauth"||t==="chatgpt")return"chatgpt-oauth"}function ga(e){return typeof e=="string"?e.trim():""}function HI(e){return/[\x00-\x1f\x7f]/.test(e)}function u3(e){if(typeof e=="string"){let t=e.trim();return t?{id:t}:void 0}if(e&&typeof e=="object"){let t=e,n=ga(t.id);if(!n)return;let r={id:n},o=ga(t.name);o&&(r.name=o);let i=qI(t.provider);i&&(r.provider=i);let s=ga(t.baseUrl);s&&(r.baseUrl=s);let a=ga(t.apiKey);return a&&(r.apiKey=a),r}}function zI(e){if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,error:'model binding must be an object with at least an "id"'};let t=e;if("apiKey"in t||"api_key"in t)return{ok:!1,error:"per-slot API keys are credentials; set AFK_MODEL_<TIER>_API_KEY via `afk config env set` instead of afk.config.json"};if("baseUrl"in t||"base_url"in t)return{ok:!1,error:"per-slot baseUrl is an endpoint-redirect credential vector; set AFK_MODEL_<TIER>_BASE_URL via `afk config env set` instead of afk.config.json"};let n=ga(t.id);if(!n)return{ok:!1,error:'model binding requires a non-empty "id"'};if(HI(n))return{ok:!1,error:'model binding "id" must not contain control characters'};let r={id:n},o=ga(t.name);if(o){if(HI(o))return{ok:!1,error:'model binding "name" must not contain control characters'};if(c3.has(o.trim().toLowerCase()))return{ok:!1,error:`model binding "name" must not shadow a built-in alias ("${o}")`};r.name=o}if(t.provider!==void 0&&t.provider!==""){let i=qI(t.provider);if(!i)return{ok:!1,error:'model binding "provider" must be one of: anthropic, openai (aliases: anthropic-direct, openai-compatible)'};r.provider=i}return{ok:!0,value:r}}var Zc,WI,mv,fv,hv,Ai,KI,yv,eu,gv,c3,Ct=k(()=>{"use strict";W();Zc=["local","small","medium","large"],WI="claude-haiku-4-5-20251001",mv="claude-sonnet-5",fv="claude-opus-5",hv="claude-fable-5",Ai={local:{id:""},small:{id:WI},medium:{id:mv},large:{id:fv}},KI="auto",yv={opus:fv,opus_1m:fv,sonnet:mv,sonnet_1m:mv,haiku:WI,fable:hv},eu=[...Zc,...Object.keys(yv)];c3=new Set([...Zc,KI,...Object.keys(yv)])});function tu(e){return e in wv}function ft(e){return or(e)}var wv,an=k(()=>{"use strict";Ct();wv={opus:Ai.large.id,opus_1m:Ai.large.id,sonnet:Ai.medium.id,sonnet_1m:Ai.medium.id,haiku:Ai.small.id,fable:hv}});import d3 from"@anthropic-ai/sdk";import{randomUUID as VI}from"node:crypto";async function wa(e){let{token:t,model:n,system:r,user:o,maxTokens:i=64,signal:s,clientFactory:a}=e;if(!t)throw new Error("oneShotCompletion: token required");let l=Cm(t),c=Qc(t,l),u=a?a(c):new d3(c),d=VI(),m=VI(),f=So(l,d,m),g=ft(n)??n,h={};Object.keys(f).length>0&&(h.headers=f),s&&(h.signal=s);let y=await u.messages.create({model:g,max_tokens:i,system:r,messages:[{role:"user",content:o}]},Object.keys(h).length>0?h:void 0),b=[];for(let S of y.content)S.type==="text"&&b.push(S.text);let w=b.join("").trim();return w.length===0&&console.warn("oneShotCompletion: response contained no text blocks \u2014 returning empty string"),w}var Im=k(()=>{"use strict";Ci();an()});function f3(){let e=T.AFK_VISION_MODELS,t=[],n=[];if(e)for(let r of e.split(",")){let o=r.trim().toLowerCase();if(o)if(o.startsWith("!")){let i=o.slice(1).trim();i&&n.push(i)}else t.push(o)}return{enable:t,disable:n}}function JI(e,t){return e===t||e.includes(t)}function Pm(e){if(!e)return!1;let t=(or(e)??e).trim();if(!t)return!1;let n=t.toLowerCase(),{enable:r,disable:o}=f3();return o.some(i=>JI(n,i))?!1:r.some(i=>JI(n,i))||p3.has(n)?!0:m3.some(i=>i.test(t))}function YI(e){let t=e.trim().toLowerCase();return t.includes("/")?t.slice(t.lastIndexOf("/")+1):t}function Ii(e){return e?/^o[0-9]/.test(YI(e)):!1}function nu(e){if(!e)return!1;if(Ii(e))return!0;let t=YI(e);return g3.some(n=>n.test(t))}var p3,m3,g3,Pi=k(()=>{"use strict";W();Ct();p3=new Set(["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4-turbo","o1","o3","o4-mini"]),m3=[/^claude-/i,/^gpt-4o/i,/^gpt-4\.1/i,/^gpt-4-turbo/i,/^gpt-4-vision/i,/^gpt-5/i,/(?:^|[/_-])(?:vl|vlm)(?:[/_.-]|$)/i,/(?:^|[/_-])(?:llava|pixtral|internvl|cogvlm|idefics|moondream|janus)/i,/(?:vision|minicpm-?[vo]|qwen[\d.]*-?vl|llama-?3\.2-\d+b-vision|gemma-3|phi-3\.5-vision|phi-4-multimodal)/i];g3=[/^gpt-5/]});function ru(e){let t=String(e).trim().toLowerCase(),n=Mm[t];if(t.endsWith("_1m")&&n!==void 0)return n;let r=or(e)??String(e);return Mm[r]??Mm[r.toLowerCase()]??h3}function w3(e){if(!e)return!1;let t=e.trim().toLowerCase();return t?!!(t.includes("/")||t.startsWith("gpt-")||t.startsWith("gpt_")||Ii(t)||t.startsWith("codex-")||t.startsWith("codex_")||t==="codex"):!1}function Gt(e){let t=String(e).trim().toLowerCase(),n=Sa[t];if(t.endsWith("_1m")&&n!==void 0)return n;let r=or(e)??String(e),o=Sa[r]??Sa[r.toLowerCase()];return o!==void 0?o:w3(r)?b3:y3}function Mi(e){let t=Gt(e);if(String(e).trim().toLowerCase().endsWith("_1m"))return t;let r=or(e)??String(e),o=XI[r]??XI[r.toLowerCase()];return o!==void 0?Math.min(t,o):t}var Mm,h3,Sa,y3,b3,XI,vo=k(()=>{"use strict";Ct();Pi();Mm={opus:128e3,opus_1m:128e3,sonnet:128e3,sonnet_1m:128e3,haiku:64e3,fable:128e3,"claude-opus-5":128e3,"claude-opus-4-8":128e3,"claude-sonnet-5":128e3,"claude-sonnet-4-6":64e3,"claude-haiku-4-5-20251001":64e3,"claude-fable-5":128e3,"gpt-5.5":128e3,"gpt-5.6":128e3,"gpt-5.6-sol":128e3,"gpt-5.6-terra":128e3,"gpt-5.6-luna":128e3},h3=64e3;Sa={opus:1e6,opus_1m:1e6,sonnet:1e6,sonnet_1m:1e6,haiku:2e5,fable:1e6,"claude-fable-5":1e6,"claude-sonnet-5":1e6,"claude-opus-5":1e6,"claude-sonnet-4-6":2e5,"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4.1":1e6,"gpt-4.1-mini":1e6,"gpt-5.5":1e6,"gpt-5.6":1e6,"gpt-5.6-sol":1e6,"gpt-5.6-terra":1e6,"gpt-5.6-luna":1e6,o1:2e5,"o1-mini":128e3,o3:2e5,"o3-mini":2e5,"o4-mini":2e5,"mlx-community/qwen3-30b-a3b-4bit":128e3,"mlx-community/qwen3-32b-4bit":128e3,"mlx-community/qwen2.5-coder-32b-instruct-4bit":131072},y3=2e5,b3=262144;XI={"claude-sonnet-5":2e5,"claude-opus-5":2e5}});function QI(e){return(e.inputTokens??0)+(e.outputTokens??0)}function qt(e){return e.contextWindowTokens??QI(e)}function ou(e){return e?{totalTokens:qt(e),apiUsage:{input_tokens:e.inputTokens??0,output_tokens:e.outputTokens??0,cache_read_input_tokens:e.cachedInputTokens??0,cache_creation_input_tokens:e.cacheCreationTokens??0,context_window_tokens:qt(e)}}:{totalTokens:0,apiUsage:null}}function iu(e,t,n){return t<=0||e<=0||n<=0||n>=1?!1:e/t>=n}function su(e,t){return t<=0||e<=0?0:e/t}function va(e){if(e===void 0||e===!1)return;if(e===!0)return S3;let t=e.threshold;if(!(typeof t!="number"||!Number.isFinite(t)||t<=0||t>=1))return t}var S3,au=k(()=>{"use strict";S3=.9});function $m(e,t){let n=ru(t),r=e.maxOutputTokens;if(typeof r=="number"&&Number.isFinite(r)&&r>0){let o=Math.floor(r);if(o>n){let i=`max:${t}:${o}`;return Om.has(i)||(Om.add(i),console.warn(`[afk] maxOutputTokens ${o} exceeds the ${t} output ceiling (${n}); clamping to ${n}.`)),n}return o}return n}function ZI(e){if(!e||e.length===0)return;let t=[];for(let n of e)n.user.length>0&&t.push({role:"user",content:n.user}),n.assistant.length>0&&t.push({role:"assistant",content:n.assistant});return t.length>0?t:void 0}function Dm(e,t,n){switch(e.type){case"adaptive":return{type:"adaptive",display:"summarized"};case"disabled":return{type:"disabled"};case"enabled":{if(typeof n=="string"&&k3(n))return{type:"adaptive",display:"summarized"};let r=Math.floor(t*T3),o=Math.max(1024,t-1-r),i=e.budgetTokens!==void 0&&Number.isFinite(e.budgetTokens)?Math.floor(e.budgetTokens):void 0,s=Math.min(Math.max(i??o,1024),o);if(i!==void 0&&i>o){let a=`think:${n??"default"}:${i}:${t}`;Om.has(a)||(Om.add(a),console.warn(`[afk] thinking budgetTokens ${i} leaves too little of max_tokens ${t} for the reply; clamping to ${o}.`))}return{type:"enabled",budget_tokens:s,display:"summarized"}}}}function Fm(e,t){if(e!==void 0)return e;let n=t.toLowerCase();if(/(claude-)?(opus|sonnet)-(4-[678]|5)/.test(n))return"max"}var v3,k3,Om,T3,Lm=k(()=>{"use strict";vo();au();v3=e=>/opus-4-(7|[89])/.test(e),k3=e=>v3(e)||/(claude-)?(opus|sonnet)-5/.test(e),Om=new Set,T3=.25});import Sv from"path";import{dirname as E3}from"path";import{appendFileSync as R3,mkdirSync as x3}from"fs";var ko,Nm=k(()=>{"use strict";G();ko=class{hooks;constructor(t){this.hooks=t}addReadRoot(t,n="slash",r){this.hooks.ensureInitialized?.();let o=this.hooks.getReadRoots();if(!o)return;let i=Sv.resolve(t);o.includes(i)||(o.push(i),this.appendAuditLog({action:"grant-read",path:i,source:n,sessionId:r}))}addWriteRoot(t,n="slash",r){this.hooks.ensureInitialized?.();let o=this.hooks.getReadRoots(),i=this.hooks.getWriteRoots();if(!o||!i)return;let s=Sv.resolve(t);o.includes(s)||o.push(s),i.includes(s)||(i.push(s),this.appendAuditLog({action:"grant-write",path:s,source:n,sessionId:r}))}revokeRoot(t,n="slash",r){let o=this.hooks.getReadRoots();if(!o)return;let i=Sv.resolve(t),s=this.hooks.getProtectedRoot();if(s!==void 0&&i===s)return;let a=o.indexOf(i);a!==-1&&o.splice(a,1);let l=this.hooks.getWriteRoots();if(l){let c=l.indexOf(i);c!==-1&&l.splice(c,1)}this.appendAuditLog({action:"revoke",path:i,source:n,sessionId:r})}getGrants(){return{resolveBase:this.hooks.getProtectedRoot(),readRoots:this.hooks.getReadRoots()?.slice()??[],writeRoots:this.hooks.getWriteRoots()?.slice()??[],allowAll:this.hooks.getAllowAll()}}appendAuditLog(t){try{let n=rm();x3(E3(n),{recursive:!0});let r=JSON.stringify({timestamp:new Date().toISOString(),sessionId:t.sessionId??this.hooks.getDefaultSessionId?.()??null,action:t.action,path:t.path,source:t.source});R3(n,r+`
|
|
11
11
|
`)}catch{}}}});function On(e){return e==="bypassPermissions"||e==="autonomous"}var ka=k(()=>{"use strict"});var Bm,eP=k(()=>{"use strict";Nm();ka();Bm=class{_readRoots;_writeRoots;_initialResolveBase;_currentCwd;_permissionMode="default";manager=new ko({getReadRoots:()=>this._readRoots,getWriteRoots:()=>this._writeRoots,ensureInitialized:()=>this.ensureInitialized(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>On(this._permissionMode)});get readRoots(){return this._readRoots}get writeRoots(){return this._writeRoots}get currentCwd(){return this._currentCwd}set currentCwd(t){this._currentCwd=t}get permissionMode(){return this._permissionMode}set permissionMode(t){this._permissionMode=t}ensureInitialized(t){if(!this._readRoots){let n=t?[t]:[];this._readRoots=n.slice(),this._writeRoots=n.slice(),t&&!this._initialResolveBase&&(this._initialResolveBase=t),t&&!this._currentCwd&&(this._currentCwd=t)}}}});function P3(e){return T[e]}function iP(e,t=!0){let n=P3(e.key);if(n===void 0)return{...e,rawValue:n,effectiveValue:e.defaultValue,source:"default",valid:!0};let r=n.trim(),o=Number(r);return/^\d+$/.test(r)&&Number.isInteger(o)&&o>0&&o<=e.maxValue?{...e,rawValue:n,effectiveValue:o,source:"environment",valid:!0}:(t&&!tP.has(e.key)&&(tP.add(e.key),process.stderr.write(`[afk] Invalid ${e.key}=${JSON.stringify(n)}; using default ${e.defaultValue}. Expected an integer in [1, ${e.maxValue}].
|
|
12
12
|
`)),{...e,rawValue:n,effectiveValue:e.defaultValue,source:"fallback",valid:!1})}function sP(e=!0){return oP.map(t=>iP(t,e))}function vv(e){let t=oP.find(n=>n.key===e);if(!t)throw new Error(`Unknown concurrency setting: ${e}`);return iP(t).effectiveValue}function aP(){return vv("AFK_MAX_CONCURRENT_SAFE_TOOL_CALLS")}function lu(){return vv("AFK_MAX_CONCURRENT_SUBAGENT_CALLS")}function lP(){return vv("AFK_MAX_CONCURRENT_BACKGROUND_JOBS")}var nP,rP,C3,A3,_3,I3,oP,tP,cu=k(()=>{"use strict";W();nP=8,rP=8,C3=10,A3=32,_3=32,I3=64,oP=[{key:"AFK_MAX_CONCURRENT_SAFE_TOOL_CALLS",defaultValue:nP,maxValue:A3},{key:"AFK_MAX_CONCURRENT_SUBAGENT_CALLS",defaultValue:rP,maxValue:_3},{key:"AFK_MAX_CONCURRENT_BACKGROUND_JOBS",defaultValue:C3,maxValue:I3}],tP=new Set});function kv(e){if(e instanceof rt)return"timeout";if(e instanceof nr)return"budget";if(typeof e=="string"){if(e==="budget"||e.startsWith("Budget "))return"budget";if(e==="timeout"||e.includes("timed out"))return"timeout";if(e==="closed")return"closed"}return"interrupted"}function Pt(e){let t=kv(e.reason);return t==="timeout"||t==="budget"?t:"abort"}var Oi=k(()=>{"use strict";Fe()});async function Ta(e,t,n){let r=new Array(e.length),o=Math.min(Math.max(1,Math.floor(t)),e.length),i=0,s=[];for(let a=0;a<o;a++)s.push((async()=>{for(;i<e.length;){let l=i++;try{r[l]={status:"fulfilled",value:await n(e[l])}}catch(c){r[l]={status:"rejected",reason:c}}}})());return await Promise.all(s),r}var Um=k(()=>{"use strict";cu()});function M3(e,t,n){return new Promise((r,o)=>{let i=!1,s=setTimeout(()=>{i||(i=!0,o(new ir(n,t)))},t);s.unref(),Promise.resolve(e).then(a=>{i||(i=!0,clearTimeout(s),r(a))},a=>{i||(i=!0,clearTimeout(s),o(a))})})}function O3(e){return e.continue===!1||e.decision==="block"}function Tv(e,t){if(e?.aborted){let n=e.reason,r=`aborted during ${t}${n?`: ${String(n)}`:""}`;throw new mt(r)}}function cP(){return new Ev}var $i,ir,Ev,uu=k(()=>{"use strict";Fe();$i=3e4;ir=class extends Error{constructor(n,r){super(`hook handler timed out after ${r}ms during ${n}`);this.hookEvent=n;this.timeoutMs=r;this.name="HookHandlerTimeoutError"}hookEvent;timeoutMs;code="HOOK_HANDLER_TIMEOUT"},Ev=class{handlers=new Map;register(t,n,r={}){let o=this.handlers.get(t);o||(o=[],this.handlers.set(t,o));let i={handler:n,options:r};return o.push(i),()=>{let s=this.handlers.get(t);if(!s)return;let a=s.indexOf(i);a>=0&&s.splice(a,1)}}count(t){return this.handlers.get(t)?.length??0}async dispatch(t,n,r=$i){Tv(n,t.event);let o=this.handlers.get(t.event);if(!o||o.length===0)return{};let i=o.slice(),s={};for(let a of i){Tv(n,t.event);let l;try{let u=a.handler(t,n);l=!a.options.longRunning&&r>0&&Number.isFinite(r)?await M3(u,r,t.event):await u}catch(u){throw u instanceof ir?u:new xe(`hook handler threw during ${t.event}`,t.event,u instanceof Error?u.message:String(u),{cause:u})}if(Tv(n,t.event),O3(l))throw new xe(`hook handler blocked ${t.event}${l.reason?`: ${l.reason}`:""}`,t.event,l.reason);let c=[s.injectContext,l.injectContext].filter(u=>typeof u=="string"&&u.length>0).join(`
|
|
13
13
|
`);s={...s,...l,...c.length>0?{injectContext:c}:{}}}return s}}});async function sr(e,t,n,r){if(!e)return;if(r.kind==="blocked"){await sn(e,{hookEvent:t,decision:"block",...r.err.reason!==void 0?{reason:r.err.reason}:{},...t==="PreToolUse"&&n.toolName!==void 0?{blockedTool:n.toolName}:{}});return}let o=r.decision;await sn(e,{hookEvent:t,decision:o.decision,...o.reason!==void 0?{reason:o.reason}:{},...o.injectContext!==void 0?{injectedContextBytes:Buffer.byteLength(o.injectContext,"utf8")}:{}})}async function uP(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await sr(n.traceWriter,"SubagentStart",{},{kind:"decision",decision:r})}catch(r){throw r instanceof xe&&await sr(n.traceWriter,"SubagentStart",{},{kind:"blocked",err:r}),r}}function $3(e,t,n){return new Promise((r,o)=>{let i=!1,s=setTimeout(()=>{i||(i=!0,o(new ir(n,t)))},t);s.unref(),e.then(a=>{i||(i=!0,clearTimeout(s),r(a))},a=>{i||(i=!0,clearTimeout(s),o(a))})})}async function dP(e,t,n={}){if(!e)return{};try{let r=await $3(e.dispatch(t,n.signal,$i),$i,"SubagentStop");return await sr(n.traceWriter,"SubagentStop",{},{kind:"decision",decision:r}),r}catch(r){return r instanceof ir?(console.warn(`[afk] SubagentStop hook timed out after ${$i}ms (subagentId=${t.subagentId}): ${r.message}`),n.onError?.(r),{}):(r instanceof xe&&await sr(n.traceWriter,"SubagentStop",{},{kind:"blocked",err:r}),r instanceof xe||r instanceof mt?(B(`SubagentStop hook swallowed ${r.name}: ${r.message}`),n.onError?.(r),{}):(B(`SubagentStop hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r))),{}))}}async function pP(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await sr(n.traceWriter,"PreToolUse",{toolName:t.toolName},{kind:"decision",decision:r})}catch(r){throw r instanceof xe&&await sr(n.traceWriter,"PreToolUse",{toolName:t.toolName},{kind:"blocked",err:r}),r}}async function mP(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await sr(n.traceWriter,"PostToolUse",{toolName:t.toolName},{kind:"decision",decision:r})}catch(r){if(r instanceof xe&&await sr(n.traceWriter,"PostToolUse",{toolName:t.toolName},{kind:"blocked",err:r}),r instanceof xe||r instanceof mt){B(`PostToolUse hook swallowed ${r.name}: ${r.message}`),n.onError?.(r);return}B(`PostToolUse hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r)))}}async function fP(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await sr(n.traceWriter,"PostToolUseFailure",{toolName:t.toolName},{kind:"decision",decision:r})}catch(r){if(r instanceof xe&&await sr(n.traceWriter,"PostToolUseFailure",{toolName:t.toolName},{kind:"blocked",err:r}),r instanceof xe||r instanceof mt){B(`PostToolUseFailure hook swallowed ${r.name}: ${r.message}`),n.onError?.(r);return}B(`PostToolUseFailure hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r)))}}var jm=k(()=>{"use strict";de();Fe();uu();pe()});function gP(e,t){return t?.allowedTools?t.allowedTools.includes(e)?{allowed:!0}:{allowed:!1,reason:`Tool "${e}" is not in the configured allowlist`}:{allowed:!0}}function Hm(e,t){return hP(e,t)}function Wm(e,t){return hP(e,t)}function hP(e,t){if(!e?.allowedTools||t.length===0)return e;let n=new Set(e.allowedTools),r=!1;for(let o of t)n.has(o)||(n.add(o),r=!0);return r?{...e,allowedTools:[...n]}:e}var Km=k(()=>{"use strict"});function uX(e){return e.replace(/'[^']*'/g," ").replace(/"(?:[^"\\]|\\.)*"/g,t=>/\$\(|`/.test(t)?t:" ")}function Rv(e){return(e.split("/").pop()??e).replace(/^\\+/,"")}function bP(e){let t=[],n=[],r=[],o="",i=!1,s=()=>{i&&(r.push(o),o="",i=!1)},a=()=>{s(),r.length>0&&(t.push(r),r=[])},l=d=>{let m=d,f=1,g="";for(;m<e.length&&f>0;){let h=e[m];if(h==="(")f++;else if(h===")"&&(f--,f===0)){m++;break}g+=h,m++}return n.push(g),m},c=0,u=e.length;for(;c<u;){let d=e[c];if(d==="'"){for(i=!0,c++;c<u&&e[c]!=="'";)o+=e[c],c++;c++;continue}if(d==='"'){for(i=!0,c++;c<u&&e[c]!=='"';)if(e[c]==="$"&&e[c+1]==="(")c=l(c+2);else if(e[c]==="`"){c++;let m="";for(;c<u&&e[c]!=="`";)m+=e[c],c++;c++,n.push(m)}else o+=e[c],c++;c++;continue}if(d==="`"){s(),c++;let m="";for(;c<u&&e[c]!=="`";)m+=e[c],c++;c++,n.push(m);continue}if(d==="$"&&e[c+1]==="("){s(),c=l(c+2);continue}if(d===";"||d===`
|
|
@@ -250,7 +250,7 @@ ${o}`,paths:[t,n]}:o!==null?i={content:o,paths:[n]}:r!==null?i={content:r,paths:
|
|
|
250
250
|
|
|
251
251
|
`).trim()}function YZ(e){return(e?.textContent??"").replace(/\s+/g," ").trim().length}async function z0(e,t){let{JSDOM:n,Readability:r,turndown:o}=await JZ(),s=new n(e,{url:t}).window.document,a=(s.title??"").trim(),l=(()=>{try{let m=s.cloneNode(!0);return new r(m).parse()}catch{return null}})();if(l&&typeof l.content=="string"&&l.content.trim().length>0){let m=q0(o.turndown(l.content)),f=(l.title??"").trim()||a,g=typeof l.length=="number"&&l.length>0?l.length:(l.textContent??"").replace(/\s+/g," ").trim().length;return{title:f,markdown:m,textLength:g,usedFallback:!1}}let c=s.body,u=c?.innerHTML??"",d=q0(o.turndown(u));return{title:a,markdown:d,textLength:YZ(c),usedFallback:!0}}var Ok,V0=k(()=>{"use strict";Ok=null});function QZ(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new Error("aborted"));return}let o=()=>{clearTimeout(i),r(t?.reason??new Error("aborted"))},i=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e);t?.addEventListener("abort",o,{once:!0})})}function J0(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function ZZ(e,t){let n=e.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,t)}async function Y0(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??QZ,l=n.signal??void 0,c;for(let u=0;u<=o;u++){if(l?.aborted)throw l.reason??new Error("aborted");try{let d=await e(t,n);if(!XZ.has(d.status)||u===o)return d;let m=ZZ(d,s)??J0(u,i,s);B("[web/retryFetch] retrying",{url:t,attempt:u,status:d.status,waitMs:m}),await d.body?.cancel().catch(()=>{}),await a(m,l)}catch(d){if(l?.aborted||(c=d,u===o))throw d;let m=J0(u,i,s);B("[web/retryFetch] retrying after error",{url:t,attempt:u,waitMs:m}),await a(m,l)}}throw c??new Error("retryFetch: exhausted without a result")}var XZ,X0=k(()=>{"use strict";de();XZ=new Set([429,502,503,504])});import{BlockList as eee,isIP as Dk}from"node:net";import{lookup as tee}from"node:dns/promises";import{Agent as nee}from"undici";function Z0(){let e=T.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function see(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function $k(e){let t=Dk(e);return t===0?!1:iee.check(e,t===4?"ipv4":"ipv6")}async function eO(e){return tee(e,{all:!0,verbatim:!0})}async function Fk(e,t={}){if(t.allowPrivateHosts??Z0())return{allowed:!0};let n;try{n=new URL(e)}catch{return{allowed:!1,reason:`"${e}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=see(n.hostname),o=(a,l)=>`refusing to fetch ${l} \u2014 internal/private address ${a} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`;if(Dk(r)!==0)return $k(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??eO,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if($k(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Nu(e,t={}){let n=await Fk(e,t);if(!n.allowed)throw new Ln(n.reason)}async function Df(e,t,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},i=t;for(let s=0;s<=Q0;s++){await Nu(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??Z0())?{dispatcher:aee}:{}},l=await Y0(e,i,a,r.retry??{});if(!lee.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let u;try{u=new URL(c,l.url||i).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),i=u}throw new Ln(`too many redirects (>${Q0}) starting from ${t}`)}var ree,oee,iee,Ln,aee,Q0,lee,Lk=k(()=>{"use strict";W();X0();ree=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.168.0.0",16]],oee=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],iee=(()=>{let e=new eee;for(let[t,n]of ree)e.addSubnet(t,n,"ipv4");for(let[t,n]of oee)e.addSubnet(t,n,"ipv6");return e})(),Ln=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};aee=new nee({connect:{lookup(e,t,n){eO(e).then(r=>{let o=r.find(s=>$k(s.address));if(o!==void 0){n(new Ln(`refusing to connect to ${e} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let i=r[0];if(i===void 0){n(new Error(`DNS lookup returned no addresses for ${e}`),"",0);return}n(null,i.address,Dk(i.address))},r=>n(r,"",0))}}});Q0=20,lee=new Set([301,302,303,307,308])});import{readFileSync as cee}from"node:fs";import{join as uee}from"path";function dee(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function tO(e,t){return dee(t).test(e)}function fee(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(pee.has(t))return!0;if(mee.has(t))return!1}return!1}function nO(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function gee(e){if(e===void 0||e===""||e==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${e}`)}function rO(e){let t=e===void 0||e.trim()===""?"default":e.trim();return qc(t),t}function hee(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function yee(e){try{return cee(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function bee(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright")n.backend="playwright";else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=rO(t.defaultProfile)),n}function oO(e){let t=e?.env??T,n=e?.readFileSync??yee,r=e?.surface??t.AGENT_SURFACE,o=fee(t.AFK_BROWSER_HEADLESS,r),i=nO(t.AFK_BROWSER_ALLOWED_DOMAINS),s=nO(t.AFK_BROWSER_BLOCKED_DOMAINS),a=hee(t.AFK_BROWSER_DOM_SNAPSHOTS),l=gee(t.AFK_BROWSER_BACKEND),c=rO(t.AFK_BROWSER_DEFAULT_PROFILE),u={headless:o,allowedDomains:i,blockedDomains:s,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},d=t.AFK_BROWSER_CONFIG,m=d!==void 0&&d.trim()!==""?d.trim():uee(Pn(),"browser.json"),f=n(m);if(f===void 0)return u;let g;try{g=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${m}: ${String(y)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${m} must be a JSON object`);let h=bee(u,g);return h.configPath=m,h}function Ff(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(tO(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>tO(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var pee,mee,Lf=k(()=>{"use strict";W();G();pee=new Set(["daemon","subagent","telegram","afk"]),mee=new Set(["repl","interactive","cli"])});import{existsSync as wee,readFileSync as See}from"node:fs";import{createRequire as vee}from"node:module";import{dirname as kee,join as Tee}from"node:path";function aO(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<Ree&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function Lt(e){let t=aO(e);return sO.some(n=>t.includes(n))}function xee(){try{let t=vee(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(See(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let i=Tee(kee(t),o);return wee(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function Bu(){return iO??=xee()??Eee,iO}function Nk(e){return e.includes("install chromium")}function pn(e,t){let n=aO(e),r=t?.latched===!0?` ${Cee}`:"";if(n.includes("Executable doesn't exist")){let o="";return t?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${Bu()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Bu()}). Or pick a different tool.${r}`}function Uu(e,t,n=!1){if(!Lt(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
|
|
252
252
|
|
|
253
|
-
${pn(e,{headless:t,latched:n})}`,{cause:e})}var sO,Eee,Ree,iO,Cee,Nf=k(()=>{"use strict";sO=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],Eee="pnpm exec playwright install chromium",Ree=4;Cee="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import qi from"node:fs";import Bf from"node:path";import{randomBytes as Aee}from"node:crypto";import{chromium as _ee}from"playwright";function Iee(){try{return"5.98.0"}catch{}try{let e=Bf.resolve(import.meta.dirname,"../../../package.json"),t=qi.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var Pee,Uf,lO=k(()=>{"use strict";Nf();G();de();Pee=Iee(),Uf=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=_ee.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Uu(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(m){throw i??m}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${Pee}`}}loadStorageState(t){let n=zc(t);try{if(!qi.existsSync(n))return;let r=JSON.parse(qi.readFileSync(n,"utf8"));return B("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){B("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=zc(t);if(!qi.existsSync(r))return;let o=await n.storageState(),i=Bf.join(Bf.dirname(r),`.${Bf.basename(r)}.${process.pid}.${Aee(4).toString("hex")}.tmp`);qi.writeFileSync(i,JSON.stringify(o),{mode:384}),qi.chmodSync(i,384),qi.renameSync(i,r),B("[browser/vault] saved session",{profile:t,file:r})}catch(r){B("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as Mee}from"crypto";function cO(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&Oee.test(e.label))}function uO(e){return Mee("sha256").update(e,"utf8").digest("hex").slice(0,8)}function dO(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var Oee,jf=k(()=>{"use strict";Oee=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as $ee}from"node:crypto";function Dee(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function Fee(e,t,n){return`el_${$ee("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function Lee(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function pO(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function fO(e,t){let n=e.role??"",r=e.name??"";mO.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])fO(i,t)}async function Nee(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},gO).catch(()=>[])}async function Bee(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,m=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:m};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},gO).catch(()=>[])}function Uee(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Hf(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Uee(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=Nee(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,m,f,g,h]=await Promise.all([s,a,l,c,u]),y,b=!1;d!==null?(y=[],fO(d,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await Bee(e)).filter(N=>mO.has(N.role??"")));let w=new Map;for(let P of m){let N=pO(P.name),z=w.get(N);(!z||z.bbox.w===0&&P.bbox.w>0)&&w.set(N,P)}let S=y.map(P=>({ax:P,dom:w.get(pO(P.name??""))})),v=r?S:S.filter(P=>P.dom?P.dom.bbox.w>0||P.dom.bbox.h>0:!0);v.sort((P,N)=>{let z=P.dom?.bbox.y??0,O=N.dom?.bbox.y??0;if(z!==O)return z-O;let H=P.dom?.bbox.x??0,K=N.dom?.bbox.x??0;return H-K}),v.length>200&&o.push("page has 200+ interactive elements; consider scoping");let C=v.slice(0,n).map((P,N)=>{let z=P.ax.role??"generic",O=P.ax.name??"",H=Fee(z,O,N),K=P.dom?.bbox??{x:0,y:0,w:0,h:0},_=P.dom?.type??null,D=null;P.ax.value!==void 0&&P.ax.value!==null&&(D=String(P.ax.value)),P.ax.checked!==void 0&&(D=String(P.ax.checked)),cO({role:z,kind:_})&&(D="[redacted]");let M={disabled:P.ax.disabled??!1};P.ax.checked!==void 0&&(M.checked=P.ax.checked===!0||P.ax.checked==="mixed"),P.ax.selected!==void 0&&(M.selected=P.ax.selected),P.ax.expanded!==void 0&&(M.expanded=P.ax.expanded);let $;P.dom?.testId?$=`[data-testid="${P.dom.testId}"]`:P.dom?.id&&($=`#${P.dom.id}`);let U={id:H,role:z,label:Dee(O),kind:_,value:D,state:M,bbox:K};return $!==void 0&&(U.selector=$),U}),F="idle";try{let P=await e.evaluate(()=>document.readyState);P==="loading"?F="loading":P==="interactive"?F="navigating":F="idle"}catch{F="navigating"}F!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let I=Lee(f),x=`obs_${t.observationCounter.toString(36)}`,A=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:I,interactive:C,status:{httpStatus:t.httpStatus??null,loadingState:F,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:A}}var mO,gO,hO=k(()=>{"use strict";jf();mO=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);gO="a[href], button, input, select, textarea, [role], [tabindex], label"});async function yO(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function Bk(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>yO(e,i)))).filter(o=>o!==null)}async function jee(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function Uk(e,t,n){switch(t.kind){case"element_id":return Hee(e,t,n);case"selector":return Wee(e,t);case"semantic":return Kee(e,t)}}async function Hee(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await Bk(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Wee(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await Bk(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Kee(e,t){return t.role!==void 0?Gee(e,t.text,t.role):qee(e,t.text,t)}async function Gee(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await Bk(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function qee(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await jee(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=d.slice(0,5),f=[];for(let h=0;h<m.length;h++){let y=m[h];if(y===void 0)continue;let b=await yO(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let v=0;v<w.length;v++)S=S*31+w.charCodeAt(v)>>>0;f.push({...b,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var bO=k(()=>{"use strict"});async function jk(e,t,n,r){let o=e.url();if(o===n)return null;let i=Ff(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var wO=k(()=>{"use strict";Lf()});import{randomBytes as zee}from"crypto";import{mkdir as Vee,stat as Jee,writeFile as Yee}from"fs/promises";import{join as Hk}from"path";import{gzip as Xee}from"zlib";import{promisify as Qee}from"util";function Zee(e){return Hk(Ir(e),"browser")}function ete(e){return Hk(Zee(e),"screenshots")}function tte(){return new Date().toISOString().replace(/[:.]/g,"-")}function nte(){return zee(3).toString("hex")}async function Wk(e,t,n){if(t.length>SO)throw new Error(`writeScreenshotSidecar: buffer exceeds ${SO} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=ete(e);await Vee(r,{recursive:!0});let o=`${tte()}-${nte()}-${n}.png`,i=Hk(r,o);await Yee(i,t);let{size:s}=await Jee(i);return{path:i,bytes:s}}var SNe,SO,vO=k(()=>{"use strict";G();jf();SNe=Qee(Xee);SO=5*1024*1024});var TO={};Nc(TO,{PlaywrightProvider:()=>Kk});function kO(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Kk,EO=k(()=>{"use strict";lO();hO();bO();Lf();wO();vO();Kk=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Uf(t)}async open(t){let n=Ff(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await jk(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Hf(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Hf(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await Uk(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${kO(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(y){c=y}else c=h}let d=await jk(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Hf(r,{observationCounter:o.observationCounter,screenshotPath:m,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await Uk(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${kO(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await Wk(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await Wk(n,o,r);return i}catch{return null}}}});var Vi={};Nc(Vi,{__resetBrowserRegistryForTests:()=>ate,browserProviderActive:()=>ite,closeBrowserProvider:()=>Gk,getBrowserProvider:()=>ote,peekBrowserProvider:()=>ste});function RO(){Promise.resolve(Gk()).then(()=>{process.exit(130)})}function xO(){Promise.resolve(Gk()).then(()=>{process.exit(143)})}function CO(){pr=null}function rte(){Wf||(process.on("SIGINT",RO),process.on("SIGTERM",xO),process.on("exit",CO),Wf=!0)}function AO(){Wf&&(process.removeListener("SIGINT",RO),process.removeListener("SIGTERM",xO),process.removeListener("exit",CO),Wf=!1)}async function ote(e){return pr!==null?pr:(zi!==null||(zi=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(EO(),TO)),n=oO(e),r=new t(n);return rte(),pr=r,zi=null,r})()),zi)}async function Gk(){if(pr===null)return;let e=pr;pr=null,zi=null,AO(),await e.shutdown()}function ite(){return pr!==null}function ste(){return pr}function ate(){pr=null,zi=null,AO()}var pr,zi,Wf,Ji=k(()=>{"use strict";Lf();pr=null,zi=null,Wf=!1});async function _O(e,t){try{return await z0(e,t)}catch(n){return B("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function mte(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Ji(),Vi));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function IO(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??mte,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s=e,a=null,l=null;try{let u=await Df(n,e,{headers:pte,signal:t.signal},o);a=u.status,s=u.url||e;let d=u.headers.get("content-type")??"";if(u.ok){if(dte.test(d))throw new Error(`web_scrape markdown mode received binary content (${d.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let m=await u.text();if(ute.test(d)&&!cte.test(d))return{title:"",markdown:m.trim(),finalUrl:s,usedRender:!1};if(i=await _O(m,s),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(u){if(t.signal.aborted||u instanceof Ln||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(i===null||i.textLength<200)&&i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};try{await Nu(e,o);let u=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:m=>Nu(m,o)});u.finalUrl!==e&&/^https?:\/\//i.test(u.finalUrl)&&await Nu(u.finalUrl,o);let d=await _O(u.html,u.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||d.textLength>=i.textLength)return{title:d.title,markdown:d.markdown,finalUrl:u.finalUrl,usedRender:!0}}catch(u){if(t.signal.aborted||u instanceof Ln)throw u;if(i===null){let d=u instanceof Error?u.message:String(u),m=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${e}: fetch failed (${m}) and render failed (${d}).`);throw f.cause=u,f}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${a??"error"}).`)}var cte,ute,dte,pte,PO=k(()=>{"use strict";V0();Lk();de();cte=/(text\/html|application\/xhtml\+xml)/i,ute=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,dte=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,pte={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function hte(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(fte,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),gte),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=Or(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function MO(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?hte({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function OO(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
253
|
+
${pn(e,{headless:t,latched:n})}`,{cause:e})}var sO,Eee,Ree,iO,Cee,Nf=k(()=>{"use strict";sO=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],Eee="pnpm exec playwright install chromium",Ree=4;Cee="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import qi from"node:fs";import Bf from"node:path";import{randomBytes as Aee}from"node:crypto";import{chromium as _ee}from"playwright";function Iee(){try{return"5.99.0"}catch{}try{let e=Bf.resolve(import.meta.dirname,"../../../package.json"),t=qi.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var Pee,Uf,lO=k(()=>{"use strict";Nf();G();de();Pee=Iee(),Uf=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=_ee.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Uu(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(m){throw i??m}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${Pee}`}}loadStorageState(t){let n=zc(t);try{if(!qi.existsSync(n))return;let r=JSON.parse(qi.readFileSync(n,"utf8"));return B("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){B("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=zc(t);if(!qi.existsSync(r))return;let o=await n.storageState(),i=Bf.join(Bf.dirname(r),`.${Bf.basename(r)}.${process.pid}.${Aee(4).toString("hex")}.tmp`);qi.writeFileSync(i,JSON.stringify(o),{mode:384}),qi.chmodSync(i,384),qi.renameSync(i,r),B("[browser/vault] saved session",{profile:t,file:r})}catch(r){B("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as Mee}from"crypto";function cO(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&Oee.test(e.label))}function uO(e){return Mee("sha256").update(e,"utf8").digest("hex").slice(0,8)}function dO(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var Oee,jf=k(()=>{"use strict";Oee=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as $ee}from"node:crypto";function Dee(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function Fee(e,t,n){return`el_${$ee("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function Lee(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function pO(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function fO(e,t){let n=e.role??"",r=e.name??"";mO.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])fO(i,t)}async function Nee(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},gO).catch(()=>[])}async function Bee(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,m=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:m};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},gO).catch(()=>[])}function Uee(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Hf(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Uee(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=Nee(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,m,f,g,h]=await Promise.all([s,a,l,c,u]),y,b=!1;d!==null?(y=[],fO(d,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await Bee(e)).filter(N=>mO.has(N.role??"")));let w=new Map;for(let P of m){let N=pO(P.name),z=w.get(N);(!z||z.bbox.w===0&&P.bbox.w>0)&&w.set(N,P)}let S=y.map(P=>({ax:P,dom:w.get(pO(P.name??""))})),v=r?S:S.filter(P=>P.dom?P.dom.bbox.w>0||P.dom.bbox.h>0:!0);v.sort((P,N)=>{let z=P.dom?.bbox.y??0,O=N.dom?.bbox.y??0;if(z!==O)return z-O;let H=P.dom?.bbox.x??0,K=N.dom?.bbox.x??0;return H-K}),v.length>200&&o.push("page has 200+ interactive elements; consider scoping");let C=v.slice(0,n).map((P,N)=>{let z=P.ax.role??"generic",O=P.ax.name??"",H=Fee(z,O,N),K=P.dom?.bbox??{x:0,y:0,w:0,h:0},_=P.dom?.type??null,D=null;P.ax.value!==void 0&&P.ax.value!==null&&(D=String(P.ax.value)),P.ax.checked!==void 0&&(D=String(P.ax.checked)),cO({role:z,kind:_})&&(D="[redacted]");let M={disabled:P.ax.disabled??!1};P.ax.checked!==void 0&&(M.checked=P.ax.checked===!0||P.ax.checked==="mixed"),P.ax.selected!==void 0&&(M.selected=P.ax.selected),P.ax.expanded!==void 0&&(M.expanded=P.ax.expanded);let $;P.dom?.testId?$=`[data-testid="${P.dom.testId}"]`:P.dom?.id&&($=`#${P.dom.id}`);let U={id:H,role:z,label:Dee(O),kind:_,value:D,state:M,bbox:K};return $!==void 0&&(U.selector=$),U}),F="idle";try{let P=await e.evaluate(()=>document.readyState);P==="loading"?F="loading":P==="interactive"?F="navigating":F="idle"}catch{F="navigating"}F!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let I=Lee(f),x=`obs_${t.observationCounter.toString(36)}`,A=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:I,interactive:C,status:{httpStatus:t.httpStatus??null,loadingState:F,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:A}}var mO,gO,hO=k(()=>{"use strict";jf();mO=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);gO="a[href], button, input, select, textarea, [role], [tabindex], label"});async function yO(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function Bk(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>yO(e,i)))).filter(o=>o!==null)}async function jee(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function Uk(e,t,n){switch(t.kind){case"element_id":return Hee(e,t,n);case"selector":return Wee(e,t);case"semantic":return Kee(e,t)}}async function Hee(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await Bk(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Wee(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await Bk(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Kee(e,t){return t.role!==void 0?Gee(e,t.text,t.role):qee(e,t.text,t)}async function Gee(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await Bk(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function qee(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await jee(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=d.slice(0,5),f=[];for(let h=0;h<m.length;h++){let y=m[h];if(y===void 0)continue;let b=await yO(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let v=0;v<w.length;v++)S=S*31+w.charCodeAt(v)>>>0;f.push({...b,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var bO=k(()=>{"use strict"});async function jk(e,t,n,r){let o=e.url();if(o===n)return null;let i=Ff(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var wO=k(()=>{"use strict";Lf()});import{randomBytes as zee}from"crypto";import{mkdir as Vee,stat as Jee,writeFile as Yee}from"fs/promises";import{join as Hk}from"path";import{gzip as Xee}from"zlib";import{promisify as Qee}from"util";function Zee(e){return Hk(Ir(e),"browser")}function ete(e){return Hk(Zee(e),"screenshots")}function tte(){return new Date().toISOString().replace(/[:.]/g,"-")}function nte(){return zee(3).toString("hex")}async function Wk(e,t,n){if(t.length>SO)throw new Error(`writeScreenshotSidecar: buffer exceeds ${SO} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=ete(e);await Vee(r,{recursive:!0});let o=`${tte()}-${nte()}-${n}.png`,i=Hk(r,o);await Yee(i,t);let{size:s}=await Jee(i);return{path:i,bytes:s}}var SNe,SO,vO=k(()=>{"use strict";G();jf();SNe=Qee(Xee);SO=5*1024*1024});var TO={};Nc(TO,{PlaywrightProvider:()=>Kk});function kO(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Kk,EO=k(()=>{"use strict";lO();hO();bO();Lf();wO();vO();Kk=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Uf(t)}async open(t){let n=Ff(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await jk(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Hf(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Hf(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await Uk(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${kO(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(y){c=y}else c=h}let d=await jk(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Hf(r,{observationCounter:o.observationCounter,screenshotPath:m,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await Uk(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${kO(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await Wk(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await Wk(n,o,r);return i}catch{return null}}}});var Vi={};Nc(Vi,{__resetBrowserRegistryForTests:()=>ate,browserProviderActive:()=>ite,closeBrowserProvider:()=>Gk,getBrowserProvider:()=>ote,peekBrowserProvider:()=>ste});function RO(){Promise.resolve(Gk()).then(()=>{process.exit(130)})}function xO(){Promise.resolve(Gk()).then(()=>{process.exit(143)})}function CO(){pr=null}function rte(){Wf||(process.on("SIGINT",RO),process.on("SIGTERM",xO),process.on("exit",CO),Wf=!0)}function AO(){Wf&&(process.removeListener("SIGINT",RO),process.removeListener("SIGTERM",xO),process.removeListener("exit",CO),Wf=!1)}async function ote(e){return pr!==null?pr:(zi!==null||(zi=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(EO(),TO)),n=oO(e),r=new t(n);return rte(),pr=r,zi=null,r})()),zi)}async function Gk(){if(pr===null)return;let e=pr;pr=null,zi=null,AO(),await e.shutdown()}function ite(){return pr!==null}function ste(){return pr}function ate(){pr=null,zi=null,AO()}var pr,zi,Wf,Ji=k(()=>{"use strict";Lf();pr=null,zi=null,Wf=!1});async function _O(e,t){try{return await z0(e,t)}catch(n){return B("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function mte(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Ji(),Vi));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function IO(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??mte,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s=e,a=null,l=null;try{let u=await Df(n,e,{headers:pte,signal:t.signal},o);a=u.status,s=u.url||e;let d=u.headers.get("content-type")??"";if(u.ok){if(dte.test(d))throw new Error(`web_scrape markdown mode received binary content (${d.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let m=await u.text();if(ute.test(d)&&!cte.test(d))return{title:"",markdown:m.trim(),finalUrl:s,usedRender:!1};if(i=await _O(m,s),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(u){if(t.signal.aborted||u instanceof Ln||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(i===null||i.textLength<200)&&i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};try{await Nu(e,o);let u=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:m=>Nu(m,o)});u.finalUrl!==e&&/^https?:\/\//i.test(u.finalUrl)&&await Nu(u.finalUrl,o);let d=await _O(u.html,u.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||d.textLength>=i.textLength)return{title:d.title,markdown:d.markdown,finalUrl:u.finalUrl,usedRender:!0}}catch(u){if(t.signal.aborted||u instanceof Ln)throw u;if(i===null){let d=u instanceof Error?u.message:String(u),m=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${e}: fetch failed (${m}) and render failed (${d}).`);throw f.cause=u,f}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${a??"error"}).`)}var cte,ute,dte,pte,PO=k(()=>{"use strict";V0();Lk();de();cte=/(text\/html|application\/xhtml\+xml)/i,ute=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,dte=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,pte={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function hte(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(fte,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),gte),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=Or(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function MO(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?hte({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function OO(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
254
254
|
|
|
255
255
|
(no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
256
256
|
`).trimEnd()}var fte,gte,$O=k(()=>{"use strict";Ro();fte="https://api.exa.ai/search",gte=10});function Kf(e){if(e instanceof Error&&e.name==="TimeoutError")return"timeout";let t=e instanceof Error?e.message:String(e);return/Timeout\s+\d+\s*ms exceeded/i.test(t)?"timeout":void 0}var Yi=k(()=>{"use strict";Nf()});function kte(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,i;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};i=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(l.protocol!=="http:"&&l.protocol!=="https:")return{error:`Invalid input: protocol "${l.protocol}" not supported (http/https only)`};o=l.toString()}let s=yte;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};s=Math.min(t.timeout_ms,bte)}let a=wte;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,Ste)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function qk(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:Mr(e,t),truncated:!0}}function Tte(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env,r=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{};return async(o,i)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=kte(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let d=i.reason;return{content:`web_scrape aborted: ${d instanceof Error?d.message:String(d??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(i.reason)},c,u=()=>{let d=a.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(i.addEventListener("abort",l,{once:!0}),c=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.url!==void 0){let m=await Fk(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(!m.allowed)return{content:`web_scrape blocked: ${m.reason}`,isError:!0}}if(s.mode==="raw"){let m;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};m=await Df(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:h instanceof Ln?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!m.ok)return{content:`web_scrape HTTP ${m.status} ${m.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await m.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=qk(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let m=await IO(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(m.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=qk(m.markdown,s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(m){if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(m instanceof Ln)return{content:`web_scrape blocked: ${m.message}`,isError:!0};let f=m instanceof Error?m.message:String(m),g=Lt(m)&&!Nk(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Bu()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let d=MO({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let m=await d.search(s.query,{limit:vte,timeoutMs:s.timeoutMs,signal:a.signal}),f=qk(OO(s.query,m),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(m){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${m instanceof Error?m.message:String(m)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var yte,bte,wte,Ste,vte,DO,FO=k(()=>{"use strict";PO();$O();Lk();Di();Yi();yte=3e4,bte=12e4,wte=1e5,Ste=1e6,vte=10;DO=Tte()});import{existsSync as NO,mkdirSync as Ete,readFileSync as Rte,renameSync as xte,unlinkSync as Cte,writeFileSync as Ate}from"node:fs";import{dirname as LO,join as _te}from"node:path";import{randomBytes as Ite}from"node:crypto";function mn(e){let t=e??US();if(!NO(t))return[];try{let n=Rte(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${t}: ${r}`),[]}}function Xi(e,t){let n=t??US();Ete(LO(n),{recursive:!0});let r=_te(LO(n),`.schedules.json.${process.pid}.${Ite(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{Ate(r,o,"utf-8"),xte(r,n)}catch(i){try{NO(r)&&Cte(r)}catch{}throw i}}function Gf(e,t){let n=mn(t),r=n.map(l=>l.id),o=Pte(e.name),i=Mte(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),Xi(n,t),a}function qf(e,t){let n=mn(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(Xi(o,t),!0)}function ju(e,t){return mn(t).find(n=>n.id===e)}function Pte(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function Mte(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function BO(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var zf=k(()=>{"use strict";G()});import{existsSync as Ote,readFileSync as $te}from"node:fs";import{join as Dte}from"node:path";async function Nn(e,t,n){let r;try{let o=Dte(sm("default"),"port");if(!Ote(o))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=$te(o,"utf-8").trim();if(r=parseInt(i,10),Number.isNaN(r))return{synced:!1,detail:"daemon-not-detected (invalid port file)"}}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let o=await fetch(`http://localhost:${r}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return o.ok?{synced:!0,detail:"synced"}:e==="POST"&&o.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&o.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${o.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}var _o,zk=k(()=>{"use strict";G();_o="Change saved to schedules.json, but a running daemon (if any) did not pick it up \u2014 it will apply on the next daemon (re)start."});import{existsSync as Fte}from"node:fs";import{readFile as Lte}from"node:fs/promises";var UO,jO,HO,WO,KO=k(()=>{"use strict";zf();G();zk();UO=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let i=Gf({name:n.name,command:n.command,cron:n.cron,trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),s=i.enabled?await Nn("POST","/tasks",{taskId:i.id,command:i.command,cron:i.cron,trigger:i.trigger,notifyOn:i.notifyOn,...i.notifyChat!==void 0?{notifyChat:i.notifyChat}:{}}):await Nn("DELETE",`/tasks/${i.id}`);return{content:JSON.stringify({id:i.id,name:i.name,cron:i.cron,enabled:i.enabled,daemonSynced:s.synced,syncDetail:s.detail,...s.synced?{}:{syncNote:_o}})}},jO=async(e,t)=>{let n=mn();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},HO=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,i=Xn();if(!Fte(i))return{content:JSON.stringify([])};let s;try{let c=await Lte(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
|
|
@@ -1823,7 +1823,7 @@ ${v}
|
|
|
1823
1823
|
${E}`})}return{fileBlocks:l,warnings:c}}function tJ(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function nJ(e,t,n){let r=t?.peekQueuedText(),o=r!==void 0?{text:r.text,claimed:!1}:void 0;r!==void 0&&t?.reserveQueued?.(r);let i;try{i=await e.promoteActiveForeground(o)}catch(s){throw r!==void 0&&t?.releaseQueued?.(r),s}if(o?.claimed===!0&&t!==null&&r!==void 0){try{await n?.(o.text)}catch{}return t.dropQueued(r),{jobs:i,flushedText:o.text,flushedPreview:r.preview}}return r!==void 0&&t?.releaseQueued?.(r),{jobs:i}}async function rJ(e,t,n,r,o="summary",i,s){let a=DK(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0),Gl(process.stdout,qd(process.cwd(),!0));let l="",c=0,u=!1,d=!1,m=!1,f=!1,g=!1,h,y=!1,b=!1,w={abort:null},S=0,v=3e3,E=[],C=new Map,F=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,I=()=>{let O=r.subagentControl;O?.hasPromotableForeground()&&nJ(O,x,r.onQueuedUserMessage).then(({jobs:H,flushedText:K,flushedPreview:_})=>{let D=(i??{fn:console.log}).fn;for(let M of H)D(p.dim(` \u2192 subagent backgrounded as ${M.jobId}: ${M.label}`));K!==void 0&&D(p.dim(` \u2192 queued message sent to this turn: ${tJ(_??K)}`))}).catch(()=>{})},x=r.getCompositor?r.getCompositor():null,A=()=>new sc({out:ac(i),thinkingMode:o,...F?{activeSkillName:F}:{},onCancel:()=>{t.interrupt().catch(O=>{Be()&&console.error(" "+p.error("session.interrupt() failed:"),O)})},...r.subagentControl?{onBackground:I}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...x?{compositor:x}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{}}),P=A(),N=async()=>{if(!f){f=!0;try{await P.dispose()}catch{}}},z=async()=>{await P.arm();let O=P.getCompositor();if(i&&O){let H=O;i.fn=K=>H.commitAbove(K),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(O),r.setInterruptNotifier?.(H=>P.setInterrupting(H)),r.rearmStatus?.()};try{x?x.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{y=!0,P.setSoftStopping(!0),t.interrupt().catch($=>{Be()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),$)});let M=r.subagentControl;M?.hasActiveForeground()&&M.cancelActiveForeground().catch($=>{Be()&&console.error(" "+p.error("soft-stop cancelActiveForeground() failed:"),$)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{b=!0,t.interrupt().catch(M=>{Be()&&console.error(" "+p.error("pause-interrupt session.interrupt() failed:"),M)})}),await z(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(I);let{fileBlocks:O,warnings:H}=eJ(e.text,{rootDir:process.cwd()});for(let M of H)(i??{fn:console.log}).fn(p.dim(` @-file: ${M}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let K=O.length>0||e.attachments.length>0?await ZV(e.text,e.attachments,void 0,O,t.sessionId):e.text,_=t.sendMessageStream(K);if(await Ja((M,$)=>{P.process(M,$)},async()=>{for await(let M of _){if(y||b)break;if(M.type==="chunk"&&M.chunk.type==="content"?(l=u?XV(l,M.chunk.content):l+M.chunk.content,u=!1,d=!0):M.type==="message"&&!d&&(l=M.message.content),M.type==="stream_retry"&&(l=l.slice(0,c),u=l.length>0),M.type==="chunk"&&M.chunk.type==="tool_use_detail"){let $=M.chunk,U={toolName:$.toolName,toolUseId:$.toolUseId,input:$.toolInput,...$.toolInputRaw!==void 0&&{inputRaw:$.toolInputRaw}};C.set($.toolUseId,U),E.push(U)}else if(M.type==="chunk"&&M.chunk.type==="tool_result"){let $=M.chunk;c=l.length,u=!0;let U=C.get($.toolUseId);if(U&&(U.result=$.content,U.isError=$.isError,C.delete($.toolUseId)),r.onContextProgress){let X=Date.now();if(X-S>=v){S=X;try{let j=r.onContextProgress();j instanceof Promise&&await j}catch(j){Be()&&console.error(" "+p.error("onContextProgress (status refresh) failed:"),j)}}}}if(M.type==="paused"){if(r.setPausedState?.(!0),await N(),x&&M.autoResume===!0){let $=new AbortController;w.abort=$;let U=M.resetsAt?M.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,X=U?`Keep waiting \u2014 auto-resumes at ${U}`:"Keep waiting \u2014 auto-resume in progress",j="Switch model / provider (type /model after)",ee="Stop waiting",se=[p.warning(" \u23F3 Usage limit reached.")+(U?p.dim(` Auto-resumes at ${U}.`):""),p.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];An(x,{header:se,options:[X,j,ee],signal:$.signal,initialIndex:0}).then(q=>{if(w.abort=null,!q)return;let te=q[0];te===void 0||te===X||(b=!0,te===j&&(i??{fn:console.log}).fn(p.dim(" Hint: type /model <name> to switch, then send your message again.")),t.interrupt().catch(le=>{Be()&&console.error(" "+p.error("picker pause-interrupt session.interrupt() failed:"),le)}))}).catch(q=>{Be()&&console.error(" "+p.error("picker promise rejected:"),q)})}else(i??{fn:console.log}).fn(xI({reason:M.reason,...M.resetsAt!==void 0?{resetsAt:M.resetsAt}:{},...M.accountId!==void 0?{accountId:M.accountId}:{},...M.autoResume!==void 0?{autoResume:M.autoResume}:{}}));continue}if(M.type==="resumed"){r.setPausedState?.(!1),w.abort?.abort(),w.abort=null;let $=M.hotSwapped&&M.accountId?`\u25B6 Resumed on ${M.accountId}`:"\u25B6 Resumed";l="",c=0,u=!1,d=!1,E.length=0,C.clear(),g=!1,h=void 0,m=!1,P=A(),f=!1,await z(),(i??{fn:console.log}).fn(p.success($));continue}if(M.type==="error"){await N(),fa(aa(M.error)),m=!0;continue}P.process(M),M.type==="done"&&(g=!0,h=M.metadata)}}),await N(),y){let M=i?i.fn:console.log,$=x?x.getPendingCount():0,U=$>0?` \xB7 ${$} queued`:"";M(p.warning(`\u23F8 Stopped${U} \u2014 work so far kept.`)+p.dim(" Send a message to continue.")),M("")}if(b){let M=i?i.fn:console.log;M(p.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),M("")}if(g&&!y&&!b){Ss(n,a,l,h,E),r.onTurnComplete&&await r.onTurnComplete(a,l).catch(()=>{}),Kl(process.stdout),SW(process.stdout,"afk: turn complete");let M=U=>{i?i.fn(U):console.log(U)},$=Uw(l);if($){M(QV($)),M("");let U=cq(E);if(r.onTerminalState)try{r.onTerminalState($,{doneHasCorroboratingEvidence:U})}catch{}if(n.permissionMode==="autonomous"){let X=$.kind==="done"&&Fu().verifyDone===!0&&!U;dq($,void 0,{unverified:X})}}if(Gve(h,n,M),r.onAfterTurn){let U=r.onAfterTurn();U instanceof Promise&&await U.catch(()=>{})}}}catch(O){await N(),m||fa(aa(O))}finally{await N(),Gl(process.stdout,qd(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),w.abort?.abort(),w.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}function Kve(e,t){let n=Math.round(e*100),r=he(t);if(e>=1){let o=Math.round((e-1)*t);return{tier:"over",text:` context OVER ${Math.round(t/1e3)}k tok by ~${he(o)} tok \u2014 model output may be silently truncated`}}return e>=.95?{tier:"near",text:` context ${n}% used of ${r} \u2014 near limit; output may soon truncate (consider /clear or a fresh session)`}:e>=.8?{tier:"caution",text:` context ${n}% used of ${r} \u2014 approaching limit`}:e>.5?{tier:"normal",text:` context ${n}% used of ${r}`}:{tier:"quiet",text:null}}function Gve(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(Ce(e.durationMs)),e.totalCostUsd!==void 0&&r.push(dt(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),i=Number(e.usage?.output_tokens??0);o+i>0&&r.push(he(o+i)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let s=fC(t),a=Gt(t.model),l=Kve(s,a);if(l.text!==null){let u=l.tier==="over"||l.tier==="near"?p.error:l.tier==="caution"?p.warning:p.dim;n(u(l.text))}let c=YV(Bb(Ag()),new Date,{autoResume:N0()});if(c.text!==null){let u=c.tier==="over"||c.tier==="near"?p.error:c.tier==="caution"?p.warning:p.dim;n(u(c.text))}n("")}var qve=5e3,zve=3,Vve="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function Jve(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(p.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function oJ(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,verdictLedger:d,shellPassthrough:m,bgResultNotifier:f}=s,g=null,h=[];e.session.current.waitForInitialization().then(async I=>{Be()&&(g=tw(I)),await gp(e.session.current),Be()&&(h=dC())}).catch(()=>{});let y=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,b,w=!1,S=!1,v,E,C,F=0;for(f.onInjectable=()=>{F>=zve||!o.isAwaitingInput()||!o.bufferIsEmpty()||(F++,Kl(process.stdout),y={text:Vve,attachments:[]},o.abortPendingRead())};;){if(g&&(e.replRenderer.writeLine(g),e.replRenderer.writeLine(""),g=null),h.length>0){for(let _ of h)e.replRenderer.writeLine(_);e.replRenderer.writeLine(""),h=[]}let I=m.drainNotifications();for(let{job:_,result:D}of I){let M=D.errorReason===void 0?"\u2713":"\u2717",$=D.errorReason==="abort"?"killed":D.errorReason==="timeout"?"timed out":D.errorReason==="signal-killed"?"killed by signal":`exit ${D.exitCode??0}`,U=Math.max(0,Math.round(D.durationMs/100)/10);e.replRenderer.writeLine(p.dim(` ${M} [${_.id}] ${$} \xB7 ${U}s \xB7 `)+_.command)}let x=f.drainNotifications();for(let{job:_}of x){let D=_.status==="completed"?"\u2713":_.status==="failed"?"\u2717":"\u2298",M=_.endedAt!==void 0?Math.max(0,Math.round((_.endedAt-_.startedAt)/100)/10):0,$=ae(_.label,60);e.replRenderer.writeLine(p.dim(` ${D} [${_.jobId}] subagent ${_.status} \xB7 ${M}s \xB7 `)+$)}let A=l.renderIfChanged(e.stats.sessionId);if(A.length>0){for(let _ of A)e.replRenderer.writeLine(_);e.replRenderer.writeLine("")}let P,N;if(y===void 0){let _=await e.session.current.takePendingPlanExitSeed();_!==void 0&&(e.stats.permissionMode=_.mode,y={text:_.message,attachments:[]})}if(y!==void 0){let _=y;y=void 0;let D=fc(e.stats.permissionMode),M=Rs({buffer:_.text,promptText:D,isTTY:!!process.stdout.isTTY,attachmentSummary:Xl([..._.attachments])});e.replRenderer.writeLine(M),P=_.text.trim(),N=_.attachments}else{let _=b;b=void 0;let D=await o.readLine({promptFn:()=>fc(e.stats.permissionMode),..._!==void 0?{initialBuffer:_}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{Dw(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});P=D.text.trim(),N=D.attachments}if(!P&&N.length===0)continue;if(P.startsWith("!")){let _=/^(0|false|off|no)$/i.test(T.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!_&&(w||(w=!0,e.replRenderer.writeLine(p.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await m.dispatch(P))){e.statusLine.rearm();continue}}let z=!1;if(P.startsWith("/")){let _=await TW(P,e.slashCtx,N);if(_.handled){if(_.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((P==="/clear"||P.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),d.reset(),v=void 0),_.result!==null&&typeof _.result=="object"&&"kind"in _.result&&_.result.kind==="submit"){y={text:_.result.message,attachments:N??[]},e.statusLine.rearm();continue}if(_.result!==null&&typeof _.result=="object"&&"kind"in _.result&&_.result.kind==="prefill"){b=_.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}z=!0}a.push(P),await Jve(e,P);let O=P;if(z){let _=Sx(P);if(_){let D=_.name.replace(/^\//,"").split(":").pop()??"";if(D&&aC(D)){let M={skillName:D,rawArgs:_.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},$=e.session.current.sessionId,U=Fs($),X=Date.now();B(`[afk trace] preflight.start commandName=${D}`);let j=!1,ee=await Ds(M,{cwd:e.stats.cwd??process.cwd(),artifactDir:U},se=>{Be()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${D}) failed: `)+(se instanceof Error?se.message:String(se)))});j=ee!==null,B(`[afk trace] preflight.end commandName=${D} durationMs=${Date.now()-X} success=${j}`),O=cC(ee?.manifestBlock,P)}}}let H=m.drainInjections();H.length>0&&(O=H+O);let K=f.drainInjections();if(K.length>0&&(O=K+O),v!==void 0&&(O=v+`
|
|
1824
1824
|
|
|
1825
1825
|
`+O,v=void 0),e.hookRegistry)try{let _={event:"UserPromptSubmit",prompt:O,sessionId:e.stats.sessionId},D=await e.hookRegistry.dispatch(_);D.injectContext&&(O=D.injectContext+O)}catch(_){if(_ instanceof xe){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+(_.reason?p.dim(`: ${Or(_.reason)}`):"")),e.statusLine.rearm();continue}if(_ instanceof ir){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+p.dim(`: handler timed out after ${_.timeoutMs}ms`)),e.statusLine.rearm();continue}throw _}if(E=void 0,C=void 0,await rJ({text:O,attachments:N},e.session.current,e.stats,{setInFlight(_){n.turnInFlight=_},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(_){await t.appendUser(_)},async onQueuedUserMessage(_){await t.appendQueuedUser(_)},async onTurnComplete(_,D){if(await t.appendTurn(_,D),e.stats.sessionId)try{Zo(e.stats)}catch(M){S||(S=!0,e.replRenderer.writeLine(p.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(M instanceof Error?M.message:String(M))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.rearm(),c?.repaint("observing")},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(_,D)=>{d?.push(_),E=_.kind,C=D?.doneHasCorroboratingEvidence},setActiveCompositor:_=>{n.activeCompositor=_},setInterruptNotifier:_=>{n.notifyInterrupting=_},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:_=>o.setBackgroundHandler(_),setSoftStopHandler:i,setPausedState:_=>o.setPausedState(_),setPauseInterruptHandler:_=>o.setPauseInterruptHandler(_),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(zn(e.stats,e.contextSampler,e.gitStatusSampler))},...c?{onStageChange:(_,D)=>{c.repaint(_),u?.onStage(_,D)}}:{}},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(fc(e.stats.permissionMode))),e.hookRegistry)try{let _=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...E!==void 0?{terminalState:E}:{},...C!==void 0?{doneHasCorroboratingEvidence:C}:{}},void 0,qve);_.injectContext&&_.injectContext.trim().length>0&&(v=_.injectContext)}catch(_){if(_ instanceof mt)throw _;_ instanceof ir?(B("[stop hook] handler timed out"),e.completionWriter.fn(p.dim(" [stop hook] timed out"))):_ instanceof xe?e.completionWriter.fn(p.dim(` [stop hook] blocked: ${Or(_.reason??"no reason given")}`)):B("[stop hook] unexpected error: "+String(_))}}}function Yve(e,t){if(e!==void 0){let n=e.toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}return typeof t=="boolean"?t:!0}async function iJ(e,t,n,r){let o=await xV(),i=new $w({rl:e.rl,history:o,statusLine:e.statusLine}),s=Yve(T.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await PV(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar,getMascotBar:()=>a?.mascotBar});a=VV(e,n),await oJ(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.loopStageBar.stop(),a?.mascotBar.stop(),a?.bgStatusBar.stop(),a?.verdictLedger.stop(),a?.contextPane.dispose();let l=c=>console.log(c);e.completionWriter.fn=l,e.completionWriter.idleFn=l,await i.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}Au();Ha();import{execFile as Xve}from"node:child_process";import{dirname as Qve,isAbsolute as Zve,resolve as eke}from"node:path";import{promisify as tke}from"node:util";var sJ=tke(Xve),nke=3e3,rke=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function oke(){let t=(await sJ("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=Zve(t)?t:eke(process.cwd(),t);return Qve(n)}async function aJ(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await oke()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),nke)});try{let o=gn({execFile:sJ,repoRoot:t,dryRun:!1,scope:"interactive",bypassSoftLaunch:!0}),i=await Promise.race([o,r]);if(i==="timeout")return{ran:!1,removedCount:0,skippedReason:"timeout"};let s=i;return s.warnings.some(c=>c.toLowerCase().includes("contested"))?{ran:!1,removedCount:0,skippedReason:"lock-contested"}:{ran:!0,removedCount:s.candidates.filter(c=>rke.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}Im();Au();import{promises as ike}from"node:fs";import{dirname as ske,join as uJ}from"node:path";import{randomBytes as ake}from"node:crypto";var lke=["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(`
|
|
1826
|
-
`),lJ=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,yA=30,cke=1024,uke=8e3,dke="haiku";async function pke(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=hke(n,cke),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??uke),s=t.signal?yke([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await wa({token:t.token,model:t.model??dke,system:lke,user:r,maxTokens:32,signal:s})}catch(d){let m=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(i)}let l=mke(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=ske(t.worktreePath);return await fke(l,c)}function mke(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(lJ.test(t)&&t.length<=yA)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>yA)break;o=s}return lJ.test(o)?o:null}async function fke(e,t){if(!await gke(uJ(t,e)))return e;let n=ake(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,yA-5)}-${n}`}async function gke(e){try{return await ike.access(e),!0}catch{return!1}}function hke(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 yke(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 dJ(e){let t,n,r=uJ(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await pke(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Cf(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return cJ(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return cJ(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function cJ(e,t){e&&e.setCwd(t),bke(t)}function bke(e){try{process.chdir(e)}catch{}}vt();G();import{spawn as mJ}from"child_process";import{existsSync as fJ,mkdirSync as Tke,readFileSync as gJ,unlinkSync as pJ,writeFileSync as hJ}from"fs";import{get as Eke}from"https";import{join as yJ}from"path";import{readFileSync as wke}from"fs";import{dirname as Ske,join as vke}from"path";import{fileURLToPath as kke}from"url";function Er(){try{return"5.
|
|
1826
|
+
`),lJ=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,yA=30,cke=1024,uke=8e3,dke="haiku";async function pke(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=hke(n,cke),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??uke),s=t.signal?yke([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await wa({token:t.token,model:t.model??dke,system:lke,user:r,maxTokens:32,signal:s})}catch(d){let m=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(i)}let l=mke(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=ske(t.worktreePath);return await fke(l,c)}function mke(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(lJ.test(t)&&t.length<=yA)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>yA)break;o=s}return lJ.test(o)?o:null}async function fke(e,t){if(!await gke(uJ(t,e)))return e;let n=ake(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,yA-5)}-${n}`}async function gke(e){try{return await ike.access(e),!0}catch{return!1}}function hke(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 yke(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 dJ(e){let t,n,r=uJ(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await pke(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Cf(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return cJ(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return cJ(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function cJ(e,t){e&&e.setCwd(t),bke(t)}function bke(e){try{process.chdir(e)}catch{}}vt();G();import{spawn as mJ}from"child_process";import{existsSync as fJ,mkdirSync as Tke,readFileSync as gJ,unlinkSync as pJ,writeFileSync as hJ}from"fs";import{get as Eke}from"https";import{join as yJ}from"path";import{readFileSync as wke}from"fs";import{dirname as Ske,join as vke}from"path";import{fileURLToPath as kke}from"url";function Er(){try{return"5.99.0"}catch{}try{let e=Ske(kke(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(wke(vke(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}W();var Rke=64*1024,xke=10800*1e3,Cke=800,Ake=3600*1e3,_ke="update-check.json",Ike="pending-update.json";function bA(){return yJ(ia(),_ke)}function Cp(){return yJ(ia(),Ike)}function wA(){let e=ia();fJ(e)||Tke(e,{recursive:!0})}function bJ(e,t){let n=a=>a.split(/[-+]/,1)[0]??a,r=a=>a.includes("-"),o=n(e).split(".").map(Number),i=n(t).split(".").map(Number),s=Math.max(o.length,i.length);for(let a=0;a<s;a++){let l=o[a]??0,c=i[a]??0;if(c>l)return!0;if(c<l)return!1}return r(e)&&!r(t)}function wJ(){try{let e=gJ(bA(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function SJ(){try{wA();let e=`
|
|
1827
1827
|
const https = require('https');
|
|
1828
1828
|
const fs = require('fs');
|
|
1829
1829
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|