agent-afk 5.221.5 → 5.221.6

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.
@@ -13,4 +13,4 @@ export interface ProviderLifecycleResult {
13
13
  providerIterator: AsyncIterator<ProviderEvent>;
14
14
  }
15
15
  export declare function buildProviderLifecycle(config: AgentConfig): ProviderLifecycleResult;
16
- export declare function runInitialization(config: AgentConfig, providerIterator: AsyncIterator<ProviderEvent>, abortSignal: AbortSignal, stateManager: SessionStateManager, accounting: AccountingAccumulator, shutdown: SessionShutdown, hookRegistry: HookRegistry | undefined, queueFrameworkContext: (text: string) => void, buildTransformDeps: () => TransformDeps): Promise<void>;
16
+ export declare function runInitialization(config: AgentConfig, getProviderIterator: () => AsyncIterator<ProviderEvent>, abortSignal: AbortSignal, stateManager: SessionStateManager, accounting: AccountingAccumulator, shutdown: SessionShutdown, hookRegistry: HookRegistry | undefined, queueFrameworkContext: (text: string) => void, buildTransformDeps: () => TransformDeps): Promise<void>;
@@ -46,13 +46,13 @@ Never fabricate intent. When none is available the value is the literal `(none s
46
46
 
47
47
  **Capture prior reviewer feedback (inline, PR targets only).** When the review target is a PR URL or number, fetch existing reviewer feedback from all three GitHub comment stores before dispatching Wave 1:
48
48
 
49
- 1. Inline review comments (anchored to diff lines): `gh api repos/{owner}/{repo}/pulls/<n>/comments --paginate`.
49
+ 1. Inline review comments (anchored to diff lines): `gh api "repos/{owner}/{repo}/pulls/<n>/comments?per_page=25&sort=created&direction=desc"`.
50
50
  2. Review summary bodies (top-level body per review submission): `gh pr view <n> -R {owner}/{repo} --json reviews -q '.reviews[] | {author: .author.login, state: .state, body: .body, submittedAt: .submittedAt}'`.
51
51
  3. Conversation comments (issue-level PR comments): `gh pr view <n> -R {owner}/{repo} --json comments -q '.comments[] | {author: .author.login, body: .body, createdAt: .createdAt}'`.
52
52
 
53
53
  Extract `{owner}/{repo}` from the PR URL argument directly, or for bare-number inputs from `gh pr view <n> --json url -q .url`. Pass `-R {owner}/{repo}` on every `gh pr view` call above so cross-repo PR URLs resolve in the correct repository.
54
54
 
55
- Filter: drop bot/automation comments (author login contains `[bot]` or body is empty/whitespace). Merge all three stores into a single array, sort by timestamp descending (`created_at` / `submittedAt` / `createdAt`), then cap to the **20 most recent** comments, truncated to a combined **4,096 tokens** to prevent context-window bloat on busy PRs. Identify afk's own prior review comments by the `<!-- agent-afk-review -->` marker.
55
+ Normalize each source's timestamp field (`created_at` for inline, `submittedAt` for review summaries, `createdAt` for conversation) to a single `timestamp` ISO string during merge. Filter: drop bot/automation comments (author login contains `[bot]` or body is empty/whitespace). Merge all three stores into a single array, sort by timestamp descending, then cap to the **20 most recent** comments, truncated to a combined **4,096 tokens** to prevent context-window bloat on busy PRs. Identify afk's own prior review comments by the `<!-- agent-afk-review -->` marker.
56
56
 
57
57
  Bundle surviving comments as a **`prior-reviewer-feedback`** block: `[{ source: "inline"|"review"|"conversation", author, body, timestamp, path?, line? }]`. When the PR has no prior comments, set `prior-reviewer-feedback: none`.
58
58
 
@@ -156,7 +156,7 @@ Severity and disposition are **separate axes**. `severity` answers "how bad is t
156
156
  - A `medium` representing a material data-integrity risk or a likely production failure under normal usage is **never** overridable to `false` — a race that intermittently loses user state stays blocking even when its blast radius keeps it out of `high`.
157
157
  - A `low` or `nit` may be marked `blocking: true` only for a stated external constraint (release gate, compliance requirement). Do not use this to smuggle a preference.
158
158
 
159
- **Invariant — assignment order.** `blocking` is assigned from the **pre-downgrade** severity. A finding later downgraded by **any** downgrade rule in this file — the api-compat reachability rule (which drops straight to `nit`, two tiers in one step), its grep-unavailable fallback, Wave 1's absence-grounding fallback, Wave 1.5's `diff-only` citation rule, Wave 1.5's `grep-unavailable` absence rule, or the confidence rule below — **keeps the `blocking` value its pre-downgrade severity earned**: a downgrade lowers severity, never disposition. Only an explicit, justified override from the list above may flip `blocking`. Without this ordering, a security or data-integrity `medium` would silently become non-blocking by being downgraded rather than waived, defeating the two never-overridable rules above through a path that requires no justification at all.
159
+ **Invariant — assignment order.** `blocking` is assigned from the **pre-downgrade** severity. A finding later downgraded by **any** downgrade rule in this file — the api-compat reachability rule (which drops straight to `nit`, two tiers in one step), its grep-unavailable fallback, Wave 1's absence-grounding fallback, Wave 1.5's `diff-only` citation rule, Wave 1.5's `grep-unavailable` absence rule, the confidence rule below, or the prior-feedback addressed-since-prior-review rule (Wave 2) — **keeps the `blocking` value its pre-downgrade severity earned**: a downgrade lowers severity, never disposition. Only an explicit, justified override from the list above may flip `blocking`. Without this ordering, a security or data-integrity `medium` would silently become non-blocking by being downgraded rather than waived, defeating the two never-overridable rules above through a path that requires no justification at all.
160
160
 
161
161
  A `blocking: true` that survives a downgrade this way is **not** an override and needs no justification clause: it carries `· blocking preserved from pre-downgrade <severity>` instead, and the `low`/`nit` external-constraint rule above does not apply to it. Without this exemption the invariant and that rule contradict each other — every downgraded `medium` would land as a `low`/`nit` carrying `blocking: true` with no admissible reason to write, forcing the reviewer to either fabricate an external constraint or emit a schema-violating finding.
162
162
 
@@ -191,6 +191,7 @@ Confidence `low` → auto-downgrade one tier + append `[low confidence — verif
191
191
  - If any citations could not be verified against a live ref (patch-file input): `Citation verification skipped — no live ref available; diff-context citations only.`
192
192
  - Any topical gaps (e.g. 'did not review Telegram surface', 'did not run tests').
193
193
  - Whether a **stated intent** was available and spec-compliance was assessed. Example: `Stated intent: PR #123 title+body — spec-compliance assessed.` or `Stated intent: (none supplied) — spec-compliance not assessed.`
194
+ - Whether prior-reviewer-feedback was captured (PR targets: list comment count and cap hit if truncated; non-PR targets: 'not available — non-PR target').
194
195
 
195
196
  **Post-synthesis:** if any `critical` or `high` finding is present, **or any finding whose `blocking` value departs from the default table** (a waived `medium`, an escalated `low`/`nit`), invoke `/shadow-verify` on those findings before surfacing to the user. Shadow-verify independently re-derives each claim against source; fabricated or unsupportable findings drop here before they reach the merge decision. An overridden finding is routed because the agent that found it also set its disposition and wrote its own justification — the waiver is otherwise the only judgement in this pipeline with no second reader. `medium` and below **at their default disposition** go straight through.
196
197
 
package/dist/cli.mjs CHANGED
@@ -426,7 +426,7 @@ ${o}`,paths:[t,n]}:o!==null?i={content:o,paths:[n]}:r!==null?i={content:r,paths:
426
426
 
427
427
  ${t}`}var SAe,_I=y(()=>{"use strict";SAe=new Set(["script","style","noscript","template","svg"])});function TAe(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 iq(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function xAe(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 sq(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??TAe,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(!kAe.has(d.status)||u===o)return d;let p=xAe(d,s)??iq(u,i,s);B("[web/retryFetch] retrying",{url:t,attempt:u,status:d.status,waitMs:p}),await d.body?.cancel().catch(()=>{}),await a(p,l)}catch(d){if(l?.aborted||(c=d,u===o))throw d;let p=iq(u,i,s);B("[web/retryFetch] retrying after error",{url:t,attempt:u,waitMs:p}),await a(p,l)}}throw c??new Error("retryFetch: exhausted without a result")}var kAe,aq=y(()=>{"use strict";me();kAe=new Set([429,502,503,504])});import{BlockList as EAe,isIP as II}from"node:net";import{lookup as RAe}from"node:dns/promises";import{Agent as AAe}from"undici";function cq(){let e=k.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function IAe(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function PI(e){let t=II(e);return t===0?!1:PAe.check(e,t===4?"ipv4":"ipv6")}async function uq(e){return RAe(e,{all:!0,verbatim:!0})}async function ol(e,t={}){if(t.allowPrivateHosts??cq())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=IAe(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(II(r)!==0)return PI(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??uq,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if(PI(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Jf(e,t={}){let n=await ol(e,t);if(!n.allowed)throw new rn(n.reason)}async function cs(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<=lq;s++){await Jf(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??cq())?{dispatcher:MAe}:{}},l=await sq(e,i,a,r.retry??{});if(!OAe.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 rn(`too many redirects (>${lq}) starting from ${t}`)}var CAe,_Ae,PAe,rn,MAe,lq,OAe,il=y(()=>{"use strict";F();aq();CAe=[["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]],_Ae=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],PAe=(()=>{let e=new EAe;for(let[t,n]of CAe)e.addSubnet(t,n,"ipv4");for(let[t,n]of _Ae)e.addSubnet(t,n,"ipv6");return e})(),rn=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};MAe=new AAe({connect:{lookup(e,t,n){uq(e).then(r=>{let o=r.find(s=>PI(s.address));if(o!==void 0){n(new rn(`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,II(i.address))},r=>n(r,"",0))}}});lq=20,OAe=new Set([301,302,303,307,308])});var OI={};lt(OI,{enforceDomainPolicy:()=>Br,loadBrowserConfig:()=>MI});import{readFileSync as DAe}from"node:fs";import{join as $Ae}from"path";function LAe(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function dq(e,t){return LAe(t).test(e)}function BAe(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(FAe.has(t))return!0;if(NAe.has(t))return!1}return!1}function pq(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function jAe(e){if(e===void 0||e==="")return"auto";if(e==="playwright"||e==="agent-browser"||e==="auto")return e;throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${e}`)}function mq(e){let t=e===void 0||e.trim()===""?"default":e.trim();return Kc(t),t}function UAe(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function HAe(e){try{return DAe(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function WAe(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"||t.backend==="agent-browser"||t.backend==="auto")n.backend=t.backend;else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=mq(t.defaultProfile)),n}function MI(e){let t=e?.env??k,n=e?.readFileSync??HAe,r=e?.surface??t.AGENT_SURFACE,o=BAe(t.AFK_BROWSER_HEADLESS,r),i=pq(t.AFK_BROWSER_ALLOWED_DOMAINS),s=pq(t.AFK_BROWSER_BLOCKED_DOMAINS),a=UAe(t.AFK_BROWSER_DOM_SNAPSHOTS),l=jAe(t.AFK_BROWSER_BACKEND),c=mq(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,p=d!==void 0&&d.trim()!==""?d.trim():$Ae(Tn(),"browser.json"),f=n(p);if(f===void 0)return u;let g;try{g=JSON.parse(f)}catch(b){throw new Error(`Failed to parse browser config at ${p}: ${String(b)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${p} must be a JSON object`);let h=WAe(u,g);return h.configPath=p,h}function Br(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(dq(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>dq(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var FAe,NAe,us=y(()=>{"use strict";F();N();FAe=new Set(["daemon","subagent","telegram","afk"]),NAe=new Set(["repl","interactive","cli"])});import{readFileSync as KAe}from"node:fs";import{join as GAe}from"node:path";import{homedir as qAe}from"node:os";function JAe(e){let t=e??zAe,n;try{n=KAe(t,"utf8")}catch{return null}let r;try{r=JSON.parse(n)}catch{return null}if(typeof r!="object"||r===null||Array.isArray(r))return null;let o=r;if(typeof o.url!="string"||typeof o.token!="string"||typeof o.pid!="number")return null;let i;try{i=new URL(o.url)}catch{return null}let{hostname:s,protocol:a}=i;if(!(s==="127.0.0.1"||s==="localhost"||s==="::1")||a!=="http:")throw new Error(`Agent Browser connection file contains an untrusted URL: ${o.url}. Only http://127.0.0.1 or http://localhost is permitted.`);return{url:o.url,token:o.token,pid:o.pid,version:typeof o.version=="string"?o.version:"unknown"}}function VAe(e){try{return process.kill(e,0),!0}catch{return!1}}async function YAe(e,t,n=2e3){try{let r=new AbortController,o=setTimeout(()=>r.abort(),n),i=await fetch(`${e}/health`,{method:"GET",headers:{Authorization:`Bearer ${t}`,Host:"127.0.0.1:8833"},signal:r.signal});return clearTimeout(o),i.ok}catch{return!1}}async function DI(e){let t=JAe(e);return t===null?{available:!1,connection:null,reason:"connection file missing or invalid"}:VAe(t.pid)?await YAe(t.url,t.token)?{available:!0,connection:t,reason:null}:{available:!1,connection:t,reason:`health probe failed at ${t.url}`}:{available:!1,connection:t,reason:`stale connection file: PID ${t.pid} not alive`}}var zAe,fq=y(()=>{"use strict";zAe=GAe(qAe(),".config","agent-browser","connection.json")});async function gq(e){let{config:t,surface:n}=e;if(t.backend==="playwright")return{backend:"playwright",reason:"explicit config: backend=playwright",probeMs:0,availability:null};if(t.backend==="agent-browser"){let s=Date.now(),a=await DI(),l=Date.now()-s;if(!a.available)throw new Error(`AFK_BROWSER_BACKEND=agent-browser but Agent Browser is not available: ${a.reason}`);return{backend:"agent-browser",reason:"explicit config: backend=agent-browser",probeMs:l,availability:a}}if(n&&XAe.has(n))return{backend:"playwright",reason:`auto: surface "${n}" excluded from Agent Browser`,probeMs:0,availability:null};if(t.headless)return{backend:"playwright",reason:"auto: headless mode requires Playwright",probeMs:0,availability:null};let r=Date.now(),o=await DI(),i=Date.now()-r;return o.available?{backend:"agent-browser",reason:"auto: Agent Browser available and preferred",probeMs:i,availability:o}:{backend:"playwright",reason:`auto: Agent Browser unavailable (${o.reason})`,probeMs:i,availability:o}}var XAe,hq=y(()=>{"use strict";fq();XAe=new Set(["daemon","subagent"])});import{createHash as QAe}from"crypto";function yq(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&ZAe.test(e.label))}function bq(e){return QAe("sha256").update(e,"utf8").digest("hex").slice(0,8)}function wq(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var ZAe,IS=y(()=>{"use strict";ZAe=/password|secret|token|api[_-]?key|otp|2fa/i});import{randomBytes as eCe}from"crypto";import{mkdir as tCe,stat as nCe,writeFile as rCe}from"fs/promises";import{join as $I}from"path";import{gzip as oCe}from"zlib";import{promisify as iCe}from"util";function sCe(e){return $I(en(e),"browser")}function aCe(e){return $I(sCe(e),"screenshots")}function lCe(){return new Date().toISOString().replace(/[:.]/g,"-")}function cCe(){return eCe(3).toString("hex")}async function Fu(e,t,n){if(t.length>Sq)throw new Error(`writeScreenshotSidecar: buffer exceeds ${Sq} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=aCe(e);await tCe(r,{recursive:!0});let o=`${lCe()}-${cCe()}-${n}.png`,i=$I(r,o);await rCe(i,t);let{size:s}=await nCe(i);return{path:i,bytes:s}}var Imt,Sq,LI=y(()=>{"use strict";N();IS();Imt=iCe(oCe);Sq=5*1024*1024});var MS,vq=y(()=>{"use strict";me();MS=class{baseUrl;token;constructor(t){this.baseUrl=t.url,this.token=t.token}async call(t,n,r=3e4){let o={version:1,method:t,params:n},i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(`${this.baseUrl}/agent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`,Host:new URL(this.baseUrl).host},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let c=await a.text().catch(()=>"");throw new Error(`Agent Browser ${t} failed (HTTP ${a.status}): ${c}`)}let l=await a.json();if(l.ok===!1){let c=l.error,u=c?.code??"UNKNOWN",d=c?.message??JSON.stringify(l);throw new Error(`Agent Browser ${t} failed: [${String(u)}] ${String(d)}`)}return l.result}finally{clearTimeout(s)}}async listTabs(){return this.call("tabs.list",null)}async openTab(t){return{tabId:(await this.call("tabs.open",{url:t},6e4)).id}}async closeTab(t){await this.call("page.eval",{id:t,script:"window.close()"}).catch(n=>{B("[browser/agent-browser] closeTab window.close() failed (tab leak expected)",{tabId:t,err:n})})}async read(t,n){return this.call("page.read",{id:t,mode:n?.mode??"main",...n?.query?{query:n.query}:{},...n?.budget?{budget:n.budget}:{}})}async inspect(t,n){return this.call("page.inspect",{id:t,mode:n?.mode??"interactive",...n?.query?{query:n.query}:{},...n?.limit?{limit:n.limit}:{}})}async click(t,n){await this.call("page.click",{id:t,elementId:n})}async fill(t,n,r){await this.call("page.fill",{id:t,elementId:n,value:r})}async press(t,n,r){await this.call("page.press",{id:t,key:n,...r?{elementId:r}:{}})}async select(t,n,r){await this.call("page.select",{id:t,elementId:n,value:r})}async waitFor(t,n,r){await this.call("page.wait",{id:t,condition:n,...r?.value?{value:r.value}:{},...r?.timeout?{timeout:r.timeout}:{}},(r?.timeout??3e4)+5e3)}async evalScript(t,n){return this.call("page.eval",{id:t,script:n})}async screenshot(t){return this.call("page.screenshot",{id:t})}}});function FI(e){return{id:e.id,role:e.role,label:e.label,kind:e.kind,value:e.value,state:{disabled:e.disabled,...e.checked!==void 0?{checked:e.checked}:{},...e.selected!==void 0?{selected:e.selected}:{},...e.expanded!==void 0?{expanded:e.expanded}:{}},bbox:e.bbox,...e.selector?{selector:e.selector}:{}}}function kq(e,t){switch(t.kind){case"element_id":if(e.has(t.elementId))return t.elementId;throw new Error(`Element ${t.elementId} not found in current observation. Call browser_observe to refresh.`);case"selector":return null;case"semantic":return null}}async function NI(e,t,n,r,o,i){switch(n){case"click":await e.click(t,r);break;case"fill":if(o===void 0)throw new Error("fill requires a value");await e.fill(t,r,o);break;case"press":if(o===void 0)throw new Error("press requires a value (key combo)");await e.press(t,o,r);break;case"select":if(o===void 0)throw new Error("select requires a value");await e.select(t,r,o);break;case"hover":throw new Error("hover is not supported by Agent Browser; use element_id from a prior observation to target clicks instead");case"scroll_to":{let s=r.replace(/\\/g,"\\\\").replace(/"/g,'\\"');await e.evalScript(t,`document.querySelector('[data-element-id="${s}"]')?.scrollIntoView({behavior:'smooth',block:'center'})`);break}case"wait_for":await e.waitFor(t,"element",{value:r,timeout:i??1e4});break;default:throw new Error(`Unknown action: ${n}`)}}async function Tq(e,t){if(t.target.kind!=="semantic")throw new Error("resolveSemanticAndAct called with non-semantic target");let{elements:n}=await e.client.inspect(e.tabId,{mode:"interactive",query:t.target.text,limit:10}),r=n;if(t.target.role){let l=t.target.role.toLowerCase();r=n.filter(c=>c.role.toLowerCase()===l)}if(r.length===0)throw new Error(`No element found matching semantic target: text="${t.target.text}"`+(t.target.role?`, role="${t.target.role}"`:""));if(r.length>1)return{outcome:"ambiguous_target",query:{text:t.target.text,...t.target.role?{role:t.target.role}:{}},candidates:r.slice(0,5).map(FI)};let i=r[0].id;await NI(e.client,e.tabId,t.action,i,t.value,t.timeoutMs);let s=await e.client.read(e.tabId,{mode:"main"}),a=Br(s.url,e.config);return a.allowed?{elementId:i}:{outcome:"blocked_by_policy",url:s.url,reason:`action navigated to blocked domain: ${a.reason}`}}var xq=y(()=>{"use strict";us()});var Eq={};lt(Eq,{AgentBrowserProvider:()=>BI});var BI,Rq=y(()=>{"use strict";us();LI();vq();xq();BI=class{name="agent-browser";config;client;sessions=new Map;constructor(t,n){this.config=t,this.client=new MS(n)}async open(t){let n=Br(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let r=this.sessions.get(t.sessionId);if(r)await this.client.evalScript(r.tabId,`window.location.href = ${JSON.stringify(t.url)}`),await this.client.waitFor(r.tabId,"load",{timeout:t.timeoutMs??3e4});else{let{tabId:s}=await this.client.openTab(t.url);await this.client.waitFor(s,"load",{timeout:t.timeoutMs??3e4}),r={tabId:s,observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null},this.sessions.set(t.sessionId,r)}let o=await this.client.read(r.tabId,{mode:"main"}),i=Br(o.url,this.config);return i.allowed?this.buildObservation(r,t.sessionId,t.screenshot,void 0,"browser_open"):(await this.client.evalScript(r.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`redirected to blocked domain: ${i.reason}`})}async observe(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);return this.buildObservation(n,t.sessionId,t.screenshot,t.maxElements,"browser_observe")}async act(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);let r=kq(n.knownElements,t.target);if(r===null){if(t.target.kind==="semantic"){let s=await Tq({client:this.client,config:this.config,tabId:n.tabId},t);return"outcome"in s?s:(n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString(),this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"))}throw t.target.kind==="selector"?new Error("selector targets are not supported by Agent Browser; use element_id or semantic targets"):new Error(`Cannot resolve target: ${JSON.stringify(t.target)}`)}await NI(this.client,n.tabId,t.action,r,t.value,t.timeoutMs),n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString();let o=await this.client.read(n.tabId,{mode:"main"}),i=Br(o.url,this.config);return i.allowed?this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"):(await this.client.evalScript(n.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`action navigated to blocked domain: ${i.reason}`})}async render(t){throw new Error("AgentBrowserProvider does not support render(). Use PlaywrightProvider for one-shot content fetches.")}async screenshot(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);if(t.target!==void 0||t.fullPage)throw new Error("Agent Browser does not support element or full-page screenshots; omit target and fullPage.");let r=await this.client.screenshot(n.tabId),o=Buffer.from(r.data,"base64"),i=o.length>=24?o.readUInt32BE(16):0,s=o.length>=24?o.readUInt32BE(20):0;return{path:(await Fu(t.sessionId,o,"browser_screenshot")).path,bytes:o.length,width:i,height:s,dataBase64:r.data,mediaType:"image/png"}}async extract(t){throw new Error("AgentBrowserProvider does not support extract() yet.")}async close(t){let n=this.sessions.get(t.sessionId);if(n){try{await this.client.closeTab(n.tabId)}catch{}this.sessions.delete(t.sessionId)}}describe(t){let n=this.sessions.get(t);return n?{active:!0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:1}:null}async shutdown(){let t=Array.from(this.sessions.entries()).map(async([,n])=>{try{await this.client.closeTab(n.tabId)}catch{}});await Promise.all(t),this.sessions.clear()}async buildObservation(t,n,r,o,i="browser_open"){let[s,a]=await Promise.all([this.client.read(t.tabId,{mode:"main",budget:4e3}),this.client.inspect(t.tabId,{mode:"interactive",limit:o??80})]),l=a.elements.map(FI),c=o??80,u=l.slice(0,c);t.observationCounter+=1,t.knownElements=new Map(u.map(h=>[h.id,h])),t.currentUrl=s.url,t.currentTitle=s.title;let d=[];l.length>c&&d.push(`page has ${l.length} interactive elements; showing first ${c}`);let p=null;if(r)try{let h=await this.client.screenshot(t.tabId),b=Buffer.from(h.data,"base64");p=(await Fu(n,b,i)).path}catch{d.push("screenshot capture failed")}let f=`obs_${t.observationCounter.toString(36)}`,g={httpStatus:null,loadingState:"idle",hasDialog:!1,consoleErrors:0};return{observationId:f,url:s.url,title:s.title,textSummary:s.content.slice(0,4e3),interactive:u,status:g,warnings:d,screenshotPath:p,capturedAt:new Date().toISOString()}}}});import{existsSync as uCe,readFileSync as dCe}from"node:fs";import{createRequire as pCe}from"node:module";import{dirname as mCe,join as fCe}from"node:path";function _q(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<hCe&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function In(e){let t=_q(e);return Cq.some(n=>t.includes(n))}function yCe(){try{let t=pCe(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(dCe(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=fCe(mCe(t),o);return uCe(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function Vf(){return Aq??=yCe()??gCe,Aq}function jI(e){return e.includes("install chromium")}function ur(e,t){let n=_q(e),r=t?.latched===!0?` ${bCe}`:"";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: ${Vf()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Vf()}). Or pick a different tool.${r}`}function Nu(e,t,n=!1){if(!In(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
428
428
 
429
- ${ur(e,{headless:t,latched:n})}`,{cause:e})}var Cq,gCe,hCe,Aq,bCe,OS=y(()=>{"use strict";Cq=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],gCe="pnpm exec playwright install chromium",hCe=4;bCe="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 sl from"node:fs";import DS from"node:path";import{randomBytes as wCe}from"node:crypto";function SCe(){try{return"5.221.5"}catch{}try{let e=DS.resolve(import.meta.dirname,"../../../package.json"),t=sl.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var vCe,$S,Pq=y(()=>{"use strict";OS();N();me();vCe=SCe(),$S=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=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=Nu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Nu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),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(p){throw i??p}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/${vCe}`}}loadStorageState(t){let n=Gc(t);try{if(!sl.existsSync(n))return;let r=JSON.parse(sl.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=Gc(t);if(!sl.existsSync(r))return;let o=await n.storageState(),i=DS.join(DS.dirname(r),`.${DS.basename(r)}.${process.pid}.${wCe(4).toString("hex")}.tmp`);sl.writeFileSync(i,JSON.stringify(o),{mode:384}),sl.chmodSync(i,384),sl.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 kCe}from"node:crypto";function TCe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function xCe(e,t,n){return`el_${kCe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function ECe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function Iq(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function Oq(e,t){let n=e.role??"",r=e.name??"";Mq.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])Oq(i,t)}async function RCe(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},Dq).catch(()=>[])}async function ACe(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,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},Dq).catch(()=>[])}function CCe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function LS(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=CCe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=RCe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,w=!1;d!==null?(b=[],Oq(d,b)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,b=(await ACe(e)).filter(M=>Mq.has(M.role??"")));let S=new Map;for(let _ of p){let M=Iq(_.name),j=S.get(M);(!j||j.bbox.w===0&&_.bbox.w>0)&&S.set(M,_)}let v=b.map(_=>({ax:_,dom:S.get(Iq(_.name??""))})),x=r?v:v.filter(_=>_.dom?_.dom.bbox.w>0||_.dom.bbox.h>0:!0);x.sort((_,M)=>{let j=_.dom?.bbox.y??0,O=M.dom?.bbox.y??0;if(j!==O)return j-O;let H=_.dom?.bbox.x??0,q=M.dom?.bbox.x??0;return H-q}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let E=x.slice(0,n).map((_,M)=>{let j=_.ax.role??"generic",O=_.ax.name??"",H=xCe(j,O,M),q=_.dom?.bbox??{x:0,y:0,w:0,h:0},W=_.dom?.type??null,K=null;_.ax.value!==void 0&&_.ax.value!==null&&(K=String(_.ax.value)),_.ax.checked!==void 0&&(K=String(_.ax.checked)),yq({role:j,kind:W})&&(K="[redacted]");let Y={disabled:_.ax.disabled??!1};_.ax.checked!==void 0&&(Y.checked=_.ax.checked===!0||_.ax.checked==="mixed"),_.ax.selected!==void 0&&(Y.selected=_.ax.selected),_.ax.expanded!==void 0&&(Y.expanded=_.ax.expanded);let ie;_.dom?.testId?ie=`[data-testid="${_.dom.testId}"]`:_.dom?.id&&(ie=`#${_.dom.id}`);let D={id:H,role:j,label:TCe(O),kind:W,value:K,state:Y,bbox:q};return ie!==void 0&&(D.selector=ie),D}),C="idle";try{let _=await e.evaluate(()=>document.readyState);_==="loading"?C="loading":_==="interactive"?C="navigating":C="idle"}catch{C="navigating"}C!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),w&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let I=ECe(f),A=`obs_${t.observationCounter.toString(36)}`,P=new Date().toISOString();return{observationId:A,url:g,title:h,textSummary:I,interactive:E,status:{httpStatus:t.httpStatus??null,loadingState:C,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:P}}var Mq,Dq,$q=y(()=>{"use strict";IS();Mq=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);Dq="a[href], button, input, select, textarea, [role], [tabindex], label"});async function Lq(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 UI(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>Lq(e,i)))).filter(o=>o!==null)}async function _Ce(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 HI(e,t,n){switch(t.kind){case"element_id":return PCe(e,t,n);case"selector":return ICe(e,t);case"semantic":return MCe(e,t)}}async function PCe(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 UI(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function ICe(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 UI(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function MCe(e,t){return t.role!==void 0?OCe(e,t.text,t.role):DCe(e,t.text,t)}async function OCe(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 UI(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function DCe(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 _Ce(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 p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let w=await Lq(b.locator,b.index);if(w!==null){let S=`${w.role}:${w.label}:${h}`,v=0;for(let x=0;x<S.length;x++)v=v*31+S.charCodeAt(x)>>>0;f.push({...w,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var Fq=y(()=>{"use strict"});async function WI(e,t,n,r){let o=e.url();if(o===n)return null;let i=Br(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 Nq=y(()=>{"use strict";us()});var GI={};lt(GI,{PlaywrightProvider:()=>KI});function Bq(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 KI,qI=y(()=>{"use strict";Pq();$q();Fq();us();Nq();LI();KI=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new $S(t)}async open(t){let n=Br(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 WI(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 LS(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 LS(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 HI(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${Bq(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(b){c=b}else c=h}let d=await WI(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await LS(r,{observationCounter:o.observationCounter,screenshotPath:p,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 HI(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${Bq(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 Fu(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 Fu(n,o,r);return i}catch{return null}}}});var ll={};lt(ll,{__resetBrowserRegistryForTests:()=>jCe,browserProviderActive:()=>FCe,closeBrowserProvider:()=>JI,getBrowserProvider:()=>LCe,getLastRoutingDecision:()=>BCe,peekBrowserProvider:()=>NCe});function jq(){Promise.resolve(JI()).then(()=>{process.exit(130)})}function Uq(){Promise.resolve(JI()).then(()=>{process.exit(143)})}function Hq(){_o=null}function $Ce(){FS||(process.on("SIGINT",jq),process.on("SIGTERM",Uq),process.on("exit",Hq),FS=!0)}function Wq(){FS&&(process.removeListener("SIGINT",jq),process.removeListener("SIGTERM",Uq),process.removeListener("exit",Hq),FS=!1)}async function LCe(e){return _o!==null?_o:(al!==null||(al=(async()=>{let t=MI(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await gq({config:t,surface:n});zI=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:i}=await Promise.resolve().then(()=>(Rq(),Eq)),s=r.availability.connection;o=new i(t,s)}else{let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(qI(),GI));o=new i(t)}return $Ce(),_o=o,al=null,o})()),al)}async function JI(){if(_o===null)return;let e=_o;_o=null,al=null,Wq(),await e.shutdown()}function FCe(){return _o!==null}function NCe(){return _o}function BCe(){return zI}function jCe(){_o=null,al=null,zI=null,Wq()}var _o,al,FS,zI,cl=y(()=>{"use strict";us();hq();F();_o=null,al=null,FS=!1,zI=null});async function Kq(e,t){try{return await nq(e,t)}catch(n){return B("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function qCe(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(cl(),ll)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(qI(),GI)),{loadBrowserConfig:s}=await Promise.resolve().then(()=>(us(),OI)),a=s(),l=new i(a);try{return await l.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await l.shutdown()}}throw o}}async function Gq(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??qCe,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await cs(n,e,{headers:GCe,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(KCe.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(WCe.test(p)&&!HCe.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await Kq(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof rn||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=CI({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Jf(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Jf(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Jf(d.finalUrl,o);let p=await Kq(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=CI({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof rn)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var HCe,WCe,KCe,GCe,qq=y(()=>{"use strict";rq();_I();il();me();HCe=/(text\/html|application\/xhtml\+xml)/i,WCe=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,KCe=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,GCe={"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 VCe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(zCe,{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),JCe),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=se(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 zq(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?VCe({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 Jq(e,t){if(t.length===0)return`# Search results for "${e}"
429
+ ${ur(e,{headless:t,latched:n})}`,{cause:e})}var Cq,gCe,hCe,Aq,bCe,OS=y(()=>{"use strict";Cq=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],gCe="pnpm exec playwright install chromium",hCe=4;bCe="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 sl from"node:fs";import DS from"node:path";import{randomBytes as wCe}from"node:crypto";function SCe(){try{return"5.221.6"}catch{}try{let e=DS.resolve(import.meta.dirname,"../../../package.json"),t=sl.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var vCe,$S,Pq=y(()=>{"use strict";OS();N();me();vCe=SCe(),$S=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=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=Nu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Nu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),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(p){throw i??p}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/${vCe}`}}loadStorageState(t){let n=Gc(t);try{if(!sl.existsSync(n))return;let r=JSON.parse(sl.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=Gc(t);if(!sl.existsSync(r))return;let o=await n.storageState(),i=DS.join(DS.dirname(r),`.${DS.basename(r)}.${process.pid}.${wCe(4).toString("hex")}.tmp`);sl.writeFileSync(i,JSON.stringify(o),{mode:384}),sl.chmodSync(i,384),sl.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 kCe}from"node:crypto";function TCe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function xCe(e,t,n){return`el_${kCe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function ECe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function Iq(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function Oq(e,t){let n=e.role??"",r=e.name??"";Mq.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])Oq(i,t)}async function RCe(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},Dq).catch(()=>[])}async function ACe(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,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},Dq).catch(()=>[])}function CCe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function LS(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=CCe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=RCe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,w=!1;d!==null?(b=[],Oq(d,b)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,b=(await ACe(e)).filter(M=>Mq.has(M.role??"")));let S=new Map;for(let _ of p){let M=Iq(_.name),j=S.get(M);(!j||j.bbox.w===0&&_.bbox.w>0)&&S.set(M,_)}let v=b.map(_=>({ax:_,dom:S.get(Iq(_.name??""))})),x=r?v:v.filter(_=>_.dom?_.dom.bbox.w>0||_.dom.bbox.h>0:!0);x.sort((_,M)=>{let j=_.dom?.bbox.y??0,O=M.dom?.bbox.y??0;if(j!==O)return j-O;let H=_.dom?.bbox.x??0,q=M.dom?.bbox.x??0;return H-q}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let E=x.slice(0,n).map((_,M)=>{let j=_.ax.role??"generic",O=_.ax.name??"",H=xCe(j,O,M),q=_.dom?.bbox??{x:0,y:0,w:0,h:0},W=_.dom?.type??null,K=null;_.ax.value!==void 0&&_.ax.value!==null&&(K=String(_.ax.value)),_.ax.checked!==void 0&&(K=String(_.ax.checked)),yq({role:j,kind:W})&&(K="[redacted]");let Y={disabled:_.ax.disabled??!1};_.ax.checked!==void 0&&(Y.checked=_.ax.checked===!0||_.ax.checked==="mixed"),_.ax.selected!==void 0&&(Y.selected=_.ax.selected),_.ax.expanded!==void 0&&(Y.expanded=_.ax.expanded);let ie;_.dom?.testId?ie=`[data-testid="${_.dom.testId}"]`:_.dom?.id&&(ie=`#${_.dom.id}`);let D={id:H,role:j,label:TCe(O),kind:W,value:K,state:Y,bbox:q};return ie!==void 0&&(D.selector=ie),D}),C="idle";try{let _=await e.evaluate(()=>document.readyState);_==="loading"?C="loading":_==="interactive"?C="navigating":C="idle"}catch{C="navigating"}C!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),w&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let I=ECe(f),A=`obs_${t.observationCounter.toString(36)}`,P=new Date().toISOString();return{observationId:A,url:g,title:h,textSummary:I,interactive:E,status:{httpStatus:t.httpStatus??null,loadingState:C,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:P}}var Mq,Dq,$q=y(()=>{"use strict";IS();Mq=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);Dq="a[href], button, input, select, textarea, [role], [tabindex], label"});async function Lq(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 UI(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>Lq(e,i)))).filter(o=>o!==null)}async function _Ce(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 HI(e,t,n){switch(t.kind){case"element_id":return PCe(e,t,n);case"selector":return ICe(e,t);case"semantic":return MCe(e,t)}}async function PCe(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 UI(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function ICe(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 UI(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function MCe(e,t){return t.role!==void 0?OCe(e,t.text,t.role):DCe(e,t.text,t)}async function OCe(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 UI(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function DCe(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 _Ce(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 p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let w=await Lq(b.locator,b.index);if(w!==null){let S=`${w.role}:${w.label}:${h}`,v=0;for(let x=0;x<S.length;x++)v=v*31+S.charCodeAt(x)>>>0;f.push({...w,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var Fq=y(()=>{"use strict"});async function WI(e,t,n,r){let o=e.url();if(o===n)return null;let i=Br(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 Nq=y(()=>{"use strict";us()});var GI={};lt(GI,{PlaywrightProvider:()=>KI});function Bq(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 KI,qI=y(()=>{"use strict";Pq();$q();Fq();us();Nq();LI();KI=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new $S(t)}async open(t){let n=Br(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 WI(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 LS(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 LS(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 HI(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${Bq(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(b){c=b}else c=h}let d=await WI(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await LS(r,{observationCounter:o.observationCounter,screenshotPath:p,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 HI(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${Bq(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 Fu(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 Fu(n,o,r);return i}catch{return null}}}});var ll={};lt(ll,{__resetBrowserRegistryForTests:()=>jCe,browserProviderActive:()=>FCe,closeBrowserProvider:()=>JI,getBrowserProvider:()=>LCe,getLastRoutingDecision:()=>BCe,peekBrowserProvider:()=>NCe});function jq(){Promise.resolve(JI()).then(()=>{process.exit(130)})}function Uq(){Promise.resolve(JI()).then(()=>{process.exit(143)})}function Hq(){_o=null}function $Ce(){FS||(process.on("SIGINT",jq),process.on("SIGTERM",Uq),process.on("exit",Hq),FS=!0)}function Wq(){FS&&(process.removeListener("SIGINT",jq),process.removeListener("SIGTERM",Uq),process.removeListener("exit",Hq),FS=!1)}async function LCe(e){return _o!==null?_o:(al!==null||(al=(async()=>{let t=MI(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await gq({config:t,surface:n});zI=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:i}=await Promise.resolve().then(()=>(Rq(),Eq)),s=r.availability.connection;o=new i(t,s)}else{let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(qI(),GI));o=new i(t)}return $Ce(),_o=o,al=null,o})()),al)}async function JI(){if(_o===null)return;let e=_o;_o=null,al=null,Wq(),await e.shutdown()}function FCe(){return _o!==null}function NCe(){return _o}function BCe(){return zI}function jCe(){_o=null,al=null,zI=null,Wq()}var _o,al,FS,zI,cl=y(()=>{"use strict";us();hq();F();_o=null,al=null,FS=!1,zI=null});async function Kq(e,t){try{return await nq(e,t)}catch(n){return B("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function qCe(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(cl(),ll)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(qI(),GI)),{loadBrowserConfig:s}=await Promise.resolve().then(()=>(us(),OI)),a=s(),l=new i(a);try{return await l.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await l.shutdown()}}throw o}}async function Gq(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??qCe,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await cs(n,e,{headers:GCe,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(KCe.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(WCe.test(p)&&!HCe.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await Kq(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof rn||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=CI({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Jf(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Jf(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Jf(d.finalUrl,o);let p=await Kq(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=CI({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof rn)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var HCe,WCe,KCe,GCe,qq=y(()=>{"use strict";rq();_I();il();me();HCe=/(text\/html|application\/xhtml\+xml)/i,WCe=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,KCe=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,GCe={"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 VCe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(zCe,{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),JCe),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=se(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 zq(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?VCe({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 Jq(e,t){if(t.length===0)return`# Search results for "${e}"
430
430
 
431
431
  (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(`
432
432
  `).trimEnd()}var zCe,JCe,Vq=y(()=>{"use strict";Ne();zCe="https://api.exa.ai/search",JCe=10});function NS(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 ul=y(()=>{"use strict";OS()});function t_e(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=YCe;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,XCe)}let a=QCe;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,ZCe)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function VI(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:Lr(e,t),truncated:!0}}function n_e(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=t_e(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 p=await ol(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(s.mode==="raw"){let p;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await cs(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:h instanceof rn?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await p.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=VI(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let p=await Gq(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=VI(oq(p.markdown,p.advisory),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(p instanceof rn)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),g=In(p)&&!jI(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Vf()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let d=zq({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let p=await d.search(s.query,{limit:e_e,timeoutMs:s.timeoutMs,signal:a.signal}),f=VI(Jq(s.query,p),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var YCe,XCe,QCe,ZCe,e_e,Yq,Xq=y(()=>{"use strict";qq();Vq();il();vo();_I();ul();YCe=3e4,XCe=12e4,QCe=1e5,ZCe=1e6,e_e=10;Yq=n_e()});function i_e(e){return r_e.has(e)?"low":e==="DELETE"?"high":"medium"}function s_e(e){return o_e.has(e)}function c_e(e){let t={};return e.forEach((n,r)=>{let o=r.toLowerCase();l_e.has(o)||a_e.some(i=>o.startsWith(i))||(t[r]=n)}),t}function u_e(e,t){if(e==null)return{serialized:void 0,inferredContentType:void 0};let n=Object.keys(t).some(o=>o.toLowerCase()==="content-type");return typeof e=="string"?{serialized:e,inferredContentType:n?void 0:"text/plain"}:{serialized:JSON.stringify(e),inferredContentType:n?void 0:"application/json"}}function d_e(e,t,n){let r=Buffer.byteLength(e,"utf8"),o=e,i=!1;if(r>n&&(o=Lr(e,n),i=!0),!i&&/application\/json/i.test(t))try{return{body:JSON.parse(o),truncated:!1}}catch{}return{body:o,truncated:i}}async function ez(e){let{url:t,method:n,signal:r,domainCheck:o,recordEffect:i}=e,s=Math.min(e.maxResponseBytes??YI,XI),a={...e.headers},l=e.fetchFn??globalThis.fetch,c=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},u=i_e(n);if(o!==void 0){let A=o(t);if(!A.allowed)throw Object.assign(new Error(`web_request blocked by domain policy: ${A.reason}`),{name:"DomainPolicyError"})}let d=await ol(t,c);if(!d.allowed)throw new rn(d.reason);let{serialized:p,inferredContentType:f}=u_e(e.body,a);f!==void 0&&(a["content-type"]=f);let g={method:n,headers:Object.keys(a).length>0?a:void 0,body:p,signal:r},b=s_e(n)?{retries:2,baseDelayMs:300,maxDelayMs:5e3}:{retries:0},w=Date.now(),S;try{S=await cs(l,t,g,{...c,retry:b})}catch(A){throw A instanceof rn,A}let v=Date.now()-w,x=S.headers.get("content-type")??"",T;try{let A=S.body?.getReader();if(!A)T="";else{let P=[],_=0,M=s*2;for(;;){let{done:j,value:O}=await A.read();if(j||!O)break;if(P.push(O),_+=O.byteLength,_>=M){await A.cancel();break}}T=new TextDecoder().decode(Buffer.concat(P,_))}}catch{T=""}let{body:E,truncated:C}=d_e(T,x,s),I=c_e(S.headers);return i!==void 0&&Promise.resolve(i({url:t,method:n,status:S.status,risk:u,timing_ms:v})).catch(()=>{}),{status:S.status,headers:I,body:E,truncated:C,timing_ms:v,risk:u}}function tz(e){if(typeof e!="string"||e.trim().length===0)return{error:"method must be a non-empty string (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)"};let t=e.trim().toUpperCase(),n=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"];return n.includes(t)?t:{error:`method "${e}" is not supported \u2014 must be one of: ${n.join(", ")}`}}var Qq,Zq,YI,XI,r_e,o_e,a_e,l_e,nz=y(()=>{"use strict";il();vo();Qq=3e4,Zq=12e4,YI=1e5,XI=1e6,r_e=new Set(["GET","HEAD","OPTIONS"]),o_e=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]);a_e=["set-cookie","x-"],l_e=new Set(["server","via","age","vary","authorization","www-authenticate"])});function p_e(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e;if(typeof t.url!="string"||t.url.length===0)return{error:'Invalid input: "url" must be a non-empty string'};let n;try{n=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{error:`Invalid input: protocol "${n.protocol}" not supported (http/https only)`};n.username="",n.password="";let r=n.toString(),o=tz(t.method);if(typeof o=="object"&&"error"in o)return{error:`Invalid input: ${o.error}`};let i=o,s;if(t.body!==void 0&&t.body!==null){if(typeof t.body!="string"&&typeof t.body!="object")return{error:'Invalid input: "body" must be a string, object, or array'};s=t.body}let a={};if(t.headers!==void 0){if(typeof t.headers!="object"||t.headers===null||Array.isArray(t.headers))return{error:'Invalid input: "headers" must be a string-keyed object'};let d=t.headers;for(let[p,f]of Object.entries(d)){if(typeof f!="string")return{error:`Invalid input: header value for "${p}" must be a string`};a[p]=f}}let l=Qq;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'};l=Math.min(t.timeout_ms,Zq)}let c=YI;if(t.max_response_bytes!==void 0){if(typeof t.max_response_bytes!="number"||!Number.isFinite(t.max_response_bytes)||t.max_response_bytes<=0)return{error:'Invalid input: "max_response_bytes" must be a positive finite number'};c=Math.min(t.max_response_bytes,XI)}let u;if(t.credential!==void 0){if(typeof t.credential!="string"||t.credential.length===0)return{error:'Invalid input: "credential" must be a non-empty string (an env var name)'};u=t.credential}return{url:r,method:i,body:s,headers:a,timeoutMs:l,maxResponseBytes:c,credential:u}}function m_e(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env;async function r(){if(e.domainCheck!==void 0)return e.domainCheck;try{let{loadBrowserConfig:o,enforceDomainPolicy:i}=await Promise.resolve().then(()=>(us(),OI)),s=o();return a=>i(a,s)}catch{return}}return async(o,i)=>{if(typeof t!="function")return{content:"web_request unavailable: global fetch() is not present (agent-afk requires Node 20+).",isError:!0};let s=p_e(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let p=i.reason;return{content:`web_request aborted: ${p instanceof Error?p.message:String(p??"aborted")}`,isError:!0}}let a={...s.headers};if(s.credential!==void 0){let p=n[s.credential];if(p===void 0||p.trim().length===0)return{content:`web_request credential error: environment variable "${s.credential}" is not set. Set it in afk.env or export it in the shell before starting AFK.`,isError:!0};if(Object.keys(a).some(g=>g.toLowerCase()==="authorization"))return{content:'web_request credential error: both "credential" and an explicit Authorization header were provided. Use one or the other.',isError:!0};a.Authorization=`Bearer ${p}`}let l=new AbortController,c=()=>l.abort(i.reason),u,d=()=>{let p=l.signal.reason;return p instanceof Error?p.message:String(p??"aborted")};try{i.addEventListener("abort",c,{once:!0}),u=setTimeout(()=>{l.abort(new Error(`web_request timeout after ${s.timeoutMs}ms`))},s.timeoutMs);let p=await r(),f={url:s.url,method:s.method,body:s.body,headers:a,maxResponseBytes:s.maxResponseBytes,signal:l.signal,fetchFn:t,lookupFn:e.lookupFn,domainCheck:p,recordEffect:e.recordEffect},g;try{g=await ez(f)}catch(S){if(l.signal.aborted)return{content:`web_request aborted: ${d()}`,isError:!0};if(S instanceof rn)return{content:`web_request blocked: ${S.message}`,isError:!0};let v=S instanceof Error&&S.name==="DomainPolicyError"?"blocked":"network error",x=S instanceof Error?S.message:String(S);return{content:`web_request ${v}: ${x}`,isError:!0}}if(l.signal.aborted)return{content:`web_request aborted: ${d()}`,isError:!0};let h=g.body;if(typeof h=="string")h=ft(h);else if(typeof h=="object"&&h!==null){let S=ft(JSON.stringify(h));try{h=JSON.parse(S)}catch{h=S}}let b={status:g.status,headers:g.headers,body:h,timing_ms:g.timing_ms,...g.truncated?{truncated:!0}:{}};return{content:JSON.stringify(b,null,2),...g.truncated?{truncated:!0}:{}}}finally{u!==void 0&&clearTimeout(u),i.removeEventListener("abort",c)}}}var rz,oz=y(()=>{"use strict";nz();il();Ir();rz=m_e()});import{existsSync as sz,mkdirSync as f_e,readFileSync as g_e,renameSync as h_e,unlinkSync as y_e,writeFileSync as b_e}from"node:fs";import{dirname as iz,join as w_e}from"node:path";import{randomBytes as S_e}from"node:crypto";function zt(e){let t=e??Sb();if(!sz(t))return[];try{let n=g_e(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 jr(e,t){let n=t??Sb();f_e(iz(n),{recursive:!0});let r=w_e(iz(n),`.schedules.json.${process.pid}.${S_e(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{b_e(r,o,"utf-8"),h_e(r,n)}catch(i){try{sz(r)&&y_e(r)}catch{}throw i}}function Bu(e,t){let n=zt(t),r=n.map(l=>l.id),o=v_e(e.name),i=k_e(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),jr(n,t),a}function ju(e,t){let n=zt(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(jr(o,t),!0)}function dl(e,t){return zt(t).find(n=>n.id===e)}function v_e(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function k_e(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function ds(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.executor!==void 0?{executor:e.executor}:{},...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var Yf=y(()=>{"use strict";N()});import{existsSync as T_e,readFileSync as x_e}from"node:fs";import{join as E_e}from"node:path";async function gt(e,t,n){let r,o;try{let i=E_e(Ea("default"),"port");if(!T_e(i))return{synced:!1,detail:"daemon-not-detected (no port file)"};let s=x_e(i,"utf-8").trim(),a=QI(s);if(!a)return{synced:!1,detail:"daemon-not-detected (invalid port file)"};({host:r,port:o}=a)}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let i=r.includes(":")?`[${r}]`:r,s=await fetch(`http://${i}:${o}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return s.ok?{synced:!0,detail:"synced"}:e==="POST"&&s.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&s.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${s.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function QI(e){let t=parseInt(e,10);if(String(t)===e&&!Number.isNaN(t))return t<1||t>65535?null:{host:"localhost",port:t};let n=e.lastIndexOf(":");if(n<1)return null;let r=e.slice(0,n),o=e.slice(n+1);if(!/^\d+$/.test(o))return null;let i=parseInt(o,10);return Number.isNaN(i)||i<1||i>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:i}}var Kn,BS=y(()=>{"use strict";N();Kn="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 R_e}from"node:fs";import{readFile as A_e}from"node:fs/promises";var az,lz,cz,uz,dz=y(()=>{"use strict";Yf();N();BS();az=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=n.executor;if(i!==void 0&&i!=="agent"&&i!=="shell")return{content:'Invalid input: executor must be "agent" or "shell"',isError:!0};let s=Bu({name:n.name,command:n.command,cron:n.cron,...i!==void 0?{executor:i}:{},trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),a=s.enabled?await gt("POST","/tasks",{taskId:s.id,command:s.command,cron:s.cron,...s.executor!==void 0?{executor:s.executor}:{},trigger:s.trigger,notifyOn:s.notifyOn,...s.notifyChat!==void 0?{notifyChat:s.notifyChat}:{}}):await gt("DELETE",`/tasks/${s.id}`);return{content:JSON.stringify({id:s.id,name:s.name,cron:s.cron,enabled:s.enabled,daemonSynced:a.synced,syncDetail:a.detail,...a.synced?{}:{syncNote:Kn}})}},lz=async(e,t)=>{let n=zt();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,executor:r.executor??"agent",trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},cz=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=jn();if(!R_e(i))return{content:JSON.stringify([])};let s;try{let c=await A_e(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
@@ -1486,7 +1486,7 @@ ${r}`:e.text,sessionId:t.ctx.sessionId},e.text.length<=uNe&&(yield{type:"suggest
1486
1486
 
1487
1487
  ${e}`:t:[{type:"text",text:t},...e]}var WT,GQ=y(()=>{"use strict";KD();GD();me();WT=class{outerIterator;baseConfig;deps;currentModel;currentPermissionMode;currentCwd;currentSystemPrompt;systemPromptOverridden=!1;startupFamily;active;activeModel;closed=!1;shadowHistory;pendingUserText;pendingAssistantText="";lastSessionId;constructor(t,n){this.outerIterator=t.prompt[Symbol.asyncIterator](),this.baseConfig=t.config,this.deps=n,this.currentModel=typeof t.config.model=="string"?t.config.model:void 0,this.currentPermissionMode=t.config.permissionMode,this.currentCwd=t.config.cwd,this.startupFamily=n.providerNameForModel(this.currentModel),this.shadowHistory=[...t.config.resumeHistory??[]]}resolveInner(t){let n=this.deps.resolveProvider(t),r={...this.baseConfig};r.model=t??this.baseConfig.model;let o=n.name===this.startupFamily&&this.baseConfig.apiKey!==void 0?this.baseConfig.apiKey:this.deps.resolveApiKey(t);o!==void 0?r.apiKey=o:delete r.apiKey,HT(r);let i=[n.name,r.baseUrl??"",r.openaiBaseUrl??"",r.apiKey??"",r.forceChatgptOAuth?"chatgpt-oauth":"",r.forceXaiOAuth?"xai-oauth":"",r.forceXaiApiKey?"xai-apikey":"",r.xaiBaseUrl??""].join("\0");return{provider:n,innerConfig:r,signature:i}}buildInner(t,n){let{provider:r,innerConfig:o,signature:i}=this.resolveInner(t),s=new Kd(()=>this.lastSessionId);this.currentPermissionMode!==void 0&&(o.permissionMode=this.currentPermissionMode),this.currentCwd!==void 0&&(o.cwd=this.currentCwd),this.systemPromptOverridden&&(o.systemPrompt=this.currentSystemPrompt),n&&(o.resumeHistory=[...this.shadowHistory]);let a=r.query({prompt:s.createIterable(),config:o});return{family:r.name,signature:i,query:a,iterator:a[Symbol.asyncIterator](),input:s}}async closeActive(){let t=this.active;if(t){this.active=void 0;try{await t.iterator.return?.(void 0)}catch{}try{await t.query.close()}catch{}}}observeEvent(t){t.type==="assistant.message"&&(this.pendingAssistantText+=(this.pendingAssistantText?`
1488
1488
  `:"")+t.text)}commitShadowTurn(){this.pendingUserText!==void 0&&(this.shadowHistory.push({user:this.pendingUserText,assistant:this.pendingAssistantText}),this.pendingUserText=void 0,this.pendingAssistantText="")}async*[Symbol.asyncIterator](){try{for(this.active=this.buildInner(this.currentModel,!1),this.activeModel=this.currentModel,yield*this.driveUntilInit(!1);!this.closed;){let t=await this.outerIterator.next();if(t.done)break;let n=t.value;this.lastSessionId=n.sessionId;let r=this.currentModel!==this.activeModel,o=!this.active||r&&this.resolveInner(this.currentModel).signature!==this.active.signature,i=this.activeModel,s=this.active?.family;this.activeModel=this.currentModel;let a;if(o&&(await this.closeActive(),this.active=this.buildInner(this.currentModel,!0),B(`\u{1F500} ProviderRouter: switched inner provider \u2192 ${this.active.family} (model=${this.currentModel})`),i!==void 0&&i!==this.currentModel&&(a=bBe(i,this.currentModel??"(unset)",s,this.active.family)),yield*this.driveUntilInit(!0)))break;for(this.pendingUserText=yBe(n.content),this.pendingAssistantText="",this.active.input.pushUserMessage(a?wBe(n.content,a):n.content);;){let l=await this.active.iterator.next();if(l.done){this.closed=!0;break}let c=l.value;if(this.observeEvent(c),yield c,c.type==="turn.completed"){this.commitShadowTurn();break}if(c.type==="error"){this.commitShadowTurn();break}}}}finally{await this.closeActive()}}async*driveUntilInit(t){for(;;){let n=await this.active.iterator.next();if(n.done)return yield{type:"error",error:new Error("provider ended before initialization")},this.closed=!0,!0;let r=n.value;if(r.type==="session.init")return t||(yield r),!1;if(r.type==="error")return yield r,this.closed=!0,!0;yield r}}async interrupt(t="interrupted"){await this.active?.query.interrupt(t)}async setModel(t){typeof t=="string"&&t.length>0&&(this.currentModel=t,this.active&&this.resolveInner(t).signature===this.active.signature&&await this.active.query.setModel(t))}async setPermissionMode(t){this.currentPermissionMode=t,await this.active?.query.setPermissionMode(t)}setCwd(t){this.currentCwd=t,this.active?.query.setCwd?.(t)}setSystemPrompt(t){return this.currentSystemPrompt=t,this.systemPromptOverridden=!0,this.active?.query.setSystemPrompt?.(t)??!1}async reauth(){return await this.active?.query.reauth?.()??null}async supportedCommands(){return await this.active?.query.supportedCommands()??[]}async supportedModels(){return await this.active?.query.supportedModels()??[]}async supportedAgents(){return await this.active?.query.supportedAgents()??[]}async getContextUsage(){return await this.active?.query.getContextUsage()??{}}async mcpServerStatus(){return await this.active?.query.mcpServerStatus()??[]}async accountInfo(){return await this.active?.query.accountInfo()??{}}async rewindFiles(t,n){let r=this.active;return r?r.query.rewindFiles(t,n):{canRewind:!1,error:"no active provider"}}async compact(){let t=this.active;return t?.query.compact?t.query.compact():{compacted:!1,reason:"provider does not support compaction",messagesBefore:0,messagesAfter:0}}listRewindTargets(){return this.active?.query.listRewindTargets?.()??[]}async rewindConversation(t){let n=this.active;return n?.query.rewindConversation?n.query.rewindConversation(t):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}async reloadPlugins(...t){let n=this.active?.query;if(n&&typeof n.reloadPlugins=="function")return n.reloadPlugins(...t)}async close(){this.closed=!0,await this.closeActive()}}});async function KT(e,t,n){if(!e)return;if(n.kind==="blocked"){await ir(e,{hookEvent:t,decision:"block",...n.err.reason!==void 0?{reason:n.err.reason}:{}});return}let r=n.decision;await ir(e,{hookEvent:t,decision:r.decision,...r.reason!==void 0?{reason:r.reason}:{},...r.injectContext!==void 0?{injectedContextBytes:Buffer.byteLength(r.injectContext,"utf8")}:{}})}async function qQ(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);return await KT(n.traceWriter,"SessionStart",{kind:"decision",decision:r}),r.injectContext}catch(r){throw r instanceof _e&&await KT(n.traceWriter,"SessionStart",{kind:"blocked",err:r}),r}}async function zQ(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await KT(n.traceWriter,"SessionEnd",{kind:"decision",decision:r})}catch(r){if(r instanceof _e&&await KT(n.traceWriter,"SessionEnd",{kind:"blocked",err:r}),r instanceof _e||r instanceof It){B(`SessionEnd hook swallowed ${r.name}: ${r.message}`),n.onError?.(r);return}B(`SessionEnd hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r)))}}var qD=y(()=>{"use strict";me();Be();fe()});function JQ(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.length;if(n===0)return"no results";let r=0,o=0;for(let a of t)if(a&&typeof a=="object"){let l=a.type;l==="fact"?r++:l==="procedure"&&o++}let i=`${n} result${n===1?"":"s"}`;if(r+o!==n)return i;let s=[];return r>0&&s.push(`${r} fact${r===1?"":"s"}`),o>0&&s.push(`${o} procedure${o===1?"":"s"}`),s.length===0?i:`${i} (${s.join(", ")})`}catch{return null}}function VQ(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(n.target==="hot"&&n.saved===!0){if(n.truncated===!0)return"hot memory saved (truncated to fit cap)";let r=n.usage;if(r&&typeof r=="object"){let o=r.pct;if(typeof o=="number")return`hot memory saved (${o}% of cap)`}return"hot memory saved"}if(n.target==="fact"){if(n.action==="remove")return n.removed===!0?"fact removed":"fact not found";if(n.action==="set"&&typeof n.id=="number")return`fact #${n.id} set`;if(n.action==="supersede"&&typeof n.id=="number"&&typeof n.supersedes=="number")return`fact #${n.id} supersedes #${n.supersedes}`}return null}catch{return null}}function YQ(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return typeof n.name=="string"&&n.written===!0?`wrote procedure '${n.name}'`:null}catch{return null}}var XQ=y(()=>{"use strict"});function zD(e){let t=e.trim();if(t.length===0)return null;let n=t[0];if(n!=="{"&&n!=="[")return null;let r=t[t.length-1];if(n==="{"&&r!=="}"||n==="["&&r!=="]")return null;let o;try{o=JSON.parse(t)}catch{return null}return Array.isArray(o)?QQ(SBe(o)):o!==null&&typeof o=="object"?QQ(vBe(o)):null}function SBe(e){return e.length===0?"[empty array]":e.length===1?"[1 item]":`[${e.length} items]`}function vBe(e){let t=Object.keys(e);if(t.length===0)return"{empty object}";let n=t.slice(0,4),r=t.length>4?", \u2026":"";return`{${n.join(", ")}${r}}`}function QQ(e){return e.length<=80?e:e.slice(0,79)+"\u2026"}var ZQ=y(()=>{"use strict"});function e9(e,t){if(!e)return null;let n=kBe.get(e);if(!n)return null;try{let r=n(t);if(r===null)return null;let o=se(r);return o.length>0?o:null}catch{return null}}var kBe,t9=y(()=>{"use strict";XQ();ZQ();Ne();kBe=new Map([["memory_search",JQ],["memory_update",VQ],["procedure_write",YQ],["bash",zD],["Bash",zD]])});function n9(e,t){if(e===void 0||e.trim()==="")return t;let n=Number(e.trim());return!Number.isInteger(n)||n<TBe||n>xBe?t:n}function r9(){return{tailCount:n9(k.AFK_BASH_PREVIEW_TAIL_LINES,EBe),headCount:n9(k.AFK_BASH_PREVIEW_HEAD_LINES,RBe)}}function o9(e,t,n){if(e.length===0)return{head:[],tail:[]};if(t+n>=e.length){let i=e.slice(0,t),s=e.slice(t);return{head:i,tail:s}}let r=t>0?e.slice(0,t):[],o=n>0?e.slice(e.length-n):[];return{head:r,tail:o}}var TBe,xBe,EBe,RBe,i9=y(()=>{"use strict";F();TBe=0,xBe=200,EBe=7,RBe=0});function ABe(e){if(e<1024)return`${e}B`;let t=e/1024;if(t<1024)return t%1===0?`${Math.floor(t)}KB`:`${t.toFixed(1)}KB`;let n=t/1024;if(n<1024)return n%1===0?`${Math.floor(n)}MB`:`${n.toFixed(1)}MB`;let r=n/1024;return r%1===0?`${Math.floor(r)}GB`:`${r.toFixed(1)}GB`}function s9(e){let t=Buffer.byteLength(e,"utf8"),n=ABe(t),r=e.split(`
1489
- `);if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};let{tailCount:o,headCount:i}=r9(),s=r.filter(h=>h.trim()!==""),{head:a,tail:l}=o9(s,i,o),c=a.length+l.length,u=r.length-c,d=[...a,...l];if(e.length<=80)return{content:e,truncated:!1,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:d,hiddenLineCount:u};let p=r[0]??"",f=p;return p.length>80&&(f=p.substring(0,80)+"\u2026"),{content:f+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:d,hiddenLineCount:u}}var a9=y(()=>{"use strict";i9()});function CBe(e){let t=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=e.match(t);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],i=n[3],s=parseFloat(r),a=s;o==="KB"?a=s*1024:o==="MB"?a=s*1024*1024:o==="GB"&&(a=s*1024*1024*1024);let l=r;return s%1===0&&(l=String(Math.floor(s))),l+=o,{sizeLabel:l,sizeBytes:Math.round(a),absolutePath:i.trim()}}function _Be(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),e.contextWindowTokens!==void 0&&(n.context_window_tokens=e.contextWindowTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function PBe(e){let t=e.isError===!0?null:e9(e.toolName,e.content),n=t!==null?{display:t}:{},r=typeof e.batchIndex=="number"&&typeof e.batchSize=="number"?{batchIndex:e.batchIndex,batchSize:e.batchSize}:{},o=e.failureClass?{failureClass:e.failureClass}:{},i=CBe(e.content);if(i)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${i.sizeLabel}) \u2192 ${i.absolutePath}`,isError:e.isError===!0,persistedPath:i.absolutePath,sizeBytes:i.sizeBytes,sizeLabel:i.sizeLabel,...n,...r,...o}};let{content:s,lineCount:a,sizeBytes:l,sizeLabel:c,tailPreview:u,hiddenLineCount:d}=s9(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:s,isError:e.isError===!0,sizeBytes:l,sizeLabel:c,...e.truncated===!0&&{truncated:!0},...e.capturePath!==void 0&&{capturePath:e.capturePath},...a!==void 0&&{lineCount:a},...u!==void 0&&u.length>0&&{tailPreview:u},...d!==void 0&&{hiddenLineCount:d},...e.exitCode!==void 0&&{exitCode:e.exitCode},...e.durationMs!==void 0&&{durationMs:e.durationMs},...n,...r,...o}}}function GT(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput,toolInputRaw:e.toolInputRaw,toolInputCapture:e.toolInputCapture,...e.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return e.isError!==!0&&e.toolName&&(t._successfulToolNames??=[]).push(e.toolName),PBe(e);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:e.toolUseId,diff:e.diff}};case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=_Be(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t._successfulToolNames!==void 0&&t._successfulToolNames.length>0&&(n.successfulToolNames=[...t._successfulToolNames]),t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){rH(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new po(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{},...e.autoResume!==void 0?{autoResume:e.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...e.retryAfterMs!==void 0?{retryAfterMs:e.retryAfterMs}:{}};case"notice":return{type:"notice",text:e.text,kind:e.kind};case"tool.activity":return{type:"tool-activity",activeCount:e.activeCount,activeToolUseIds:e.activeToolUseIds};default:return null}}var JD=y(()=>{"use strict";Be();fe();t9();a9()});var qT,l9=y(()=>{"use strict";qT=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(t,n){this.sessionIdentity=t,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(t){t&&(this.sessionIdentity={...this.sessionIdentity,sessionId:t},this.sessionMetadata={...this.sessionMetadata,sessionId:t})}setSessionMetadata(t){this.sessionMetadata=t(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(t){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(t))}isInitializationSettled(){return this.initializationSettled}}});function c9(e){e.models&&ow(e.models),HT(e);let t=St(e.model)??e.model,{sessionIdentity:n,metadata:r}=SH(e,t),o=new qT(n,r),i=new Kd(()=>o.getSessionId()),s=i.createIterable(),a;if(e.provider)B(`\u{1F7E2} AgentSession: Creating query session via injected provider=${e.provider.name}`),a=e.provider.query({prompt:s,config:e});else{B("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let u=e.providerFactory?e.providerFactory:d=>UT(d,void 0,{customTools:e.customTools,canUseTool:e.canUseTool});a=new WT({prompt:s,config:e},{resolveProvider:u,providerNameForModel:d=>ae(d),resolveApiKey:d=>Ue(d)})}let c=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:i,providerQuery:a,providerIterator:c}}async function u9(e,t,n,r,o,i,s,a,l){try{let c=await qQ(s,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:e.parentSessionId},{signal:n,...e.traceWriter?{traceWriter:e.traceWriter}:{}});for(c&&e.parentSessionId===void 0&&a(c);;){let u=await t.next();if(u.done){r.resolveInitializationIfNeeded();return}let d=u.value,p=GT(d,l());if(d.type==="session.init"){await re(e.traceWriter,{phase:"session_init_done",durationMs:Date.now()-o.sessionStartedAt});return}if(p&&p.type==="error"){o.markProviderError();return}}}catch(c){let u=c instanceof Error?c:new Error(String(c));u instanceof _e&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(u),await i.dispatchOnce("error").catch(()=>{})}}var d9=y(()=>{"use strict";me();fe();He();GQ();Tt();qD();Be();JD();M_();l9();Rn();$t();GD();KD()});import{randomBytes as IBe}from"node:crypto";import{mkdir as MBe,writeFile as OBe}from"node:fs/promises";import{join as DBe}from"node:path";function LBe(e){return k.AFK_CAPTURE_SUBAGENT_PROMPTS!=="1"||!e.isSubagentFork||!e.sessionId||!e.subagentId?!1:e.prompt.length>0}function VD(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 FBe(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function zT(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function NBe(e,t){let n=["---",`subagentId: ${zT(e.subagentId??"unknown")}`,`sessionLabel: ${zT(e.sessionId??"unknown")}`,`turn: ${e.turn}`,`capturedAt: ${zT(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: ${zT(e.model)}`),n.push("---",$Be,""),n.push(t.text),t.truncated&&n.push("",`<!-- TRUNCATED at ${p9} bytes of ${t.originalBytes} -->`),`${n.join(`
1489
+ `);if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};let{tailCount:o,headCount:i}=r9(),s=r.filter(h=>h.trim()!==""),{head:a,tail:l}=o9(s,i,o),c=a.length+l.length,u=r.length-c,d=[...a,...l];if(e.length<=80)return{content:e,truncated:!1,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:d,hiddenLineCount:u};let p=r[0]??"",f=p;return p.length>80&&(f=p.substring(0,80)+"\u2026"),{content:f+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:d,hiddenLineCount:u}}var a9=y(()=>{"use strict";i9()});function CBe(e){let t=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=e.match(t);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],i=n[3],s=parseFloat(r),a=s;o==="KB"?a=s*1024:o==="MB"?a=s*1024*1024:o==="GB"&&(a=s*1024*1024*1024);let l=r;return s%1===0&&(l=String(Math.floor(s))),l+=o,{sizeLabel:l,sizeBytes:Math.round(a),absolutePath:i.trim()}}function _Be(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),e.contextWindowTokens!==void 0&&(n.context_window_tokens=e.contextWindowTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function PBe(e){let t=e.isError===!0?null:e9(e.toolName,e.content),n=t!==null?{display:t}:{},r=typeof e.batchIndex=="number"&&typeof e.batchSize=="number"?{batchIndex:e.batchIndex,batchSize:e.batchSize}:{},o=e.failureClass?{failureClass:e.failureClass}:{},i=CBe(e.content);if(i)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${i.sizeLabel}) \u2192 ${i.absolutePath}`,isError:e.isError===!0,persistedPath:i.absolutePath,sizeBytes:i.sizeBytes,sizeLabel:i.sizeLabel,...n,...r,...o}};let{content:s,lineCount:a,sizeBytes:l,sizeLabel:c,tailPreview:u,hiddenLineCount:d}=s9(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:s,isError:e.isError===!0,sizeBytes:l,sizeLabel:c,...e.truncated===!0&&{truncated:!0},...e.capturePath!==void 0&&{capturePath:e.capturePath},...a!==void 0&&{lineCount:a},...u!==void 0&&u.length>0&&{tailPreview:u},...d!==void 0&&{hiddenLineCount:d},...e.exitCode!==void 0&&{exitCode:e.exitCode},...e.durationMs!==void 0&&{durationMs:e.durationMs},...n,...r,...o}}}function GT(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput,toolInputRaw:e.toolInputRaw,toolInputCapture:e.toolInputCapture,...e.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return e.isError!==!0&&e.toolName&&(t._successfulToolNames??=[]).push(e.toolName),PBe(e);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:e.toolUseId,diff:e.diff}};case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=_Be(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t._successfulToolNames!==void 0&&t._successfulToolNames.length>0&&(n.successfulToolNames=[...t._successfulToolNames]),t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){rH(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new po(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{},...e.autoResume!==void 0?{autoResume:e.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...e.retryAfterMs!==void 0?{retryAfterMs:e.retryAfterMs}:{}};case"notice":return{type:"notice",text:e.text,kind:e.kind};case"tool.activity":return{type:"tool-activity",activeCount:e.activeCount,activeToolUseIds:e.activeToolUseIds};default:return null}}var JD=y(()=>{"use strict";Be();fe();t9();a9()});var qT,l9=y(()=>{"use strict";qT=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(t,n){this.sessionIdentity=t,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(t){t&&(this.sessionIdentity={...this.sessionIdentity,sessionId:t},this.sessionMetadata={...this.sessionMetadata,sessionId:t})}setSessionMetadata(t){this.sessionMetadata=t(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(t){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(t))}isInitializationSettled(){return this.initializationSettled}}});function c9(e){e.models&&ow(e.models),HT(e);let t=St(e.model)??e.model,{sessionIdentity:n,metadata:r}=SH(e,t),o=new qT(n,r),i=new Kd(()=>o.getSessionId()),s=i.createIterable(),a;if(e.provider)B(`\u{1F7E2} AgentSession: Creating query session via injected provider=${e.provider.name}`),a=e.provider.query({prompt:s,config:e});else{B("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let u=e.providerFactory?e.providerFactory:d=>UT(d,void 0,{customTools:e.customTools,canUseTool:e.canUseTool});a=new WT({prompt:s,config:e},{resolveProvider:u,providerNameForModel:d=>ae(d),resolveApiKey:d=>Ue(d)})}let c=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:i,providerQuery:a,providerIterator:c}}async function u9(e,t,n,r,o,i,s,a,l){try{let c=await qQ(s,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:e.parentSessionId},{signal:n,...e.traceWriter?{traceWriter:e.traceWriter}:{}});for(c&&e.parentSessionId===void 0&&a(c);;){let u=await t().next();if(u.done){r.resolveInitializationIfNeeded();return}let d=u.value,p=GT(d,l());if(d.type==="session.init"){await re(e.traceWriter,{phase:"session_init_done",durationMs:Date.now()-o.sessionStartedAt});return}if(p&&p.type==="error"){o.markProviderError();return}}}catch(c){let u=c instanceof Error?c:new Error(String(c));u instanceof _e&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(u),await i.dispatchOnce("error").catch(()=>{})}}var d9=y(()=>{"use strict";me();fe();He();GQ();Tt();qD();Be();JD();M_();l9();Rn();$t();GD();KD()});import{randomBytes as IBe}from"node:crypto";import{mkdir as MBe,writeFile as OBe}from"node:fs/promises";import{join as DBe}from"node:path";function LBe(e){return k.AFK_CAPTURE_SUBAGENT_PROMPTS!=="1"||!e.isSubagentFork||!e.sessionId||!e.subagentId?!1:e.prompt.length>0}function VD(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 FBe(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function zT(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function NBe(e,t){let n=["---",`subagentId: ${zT(e.subagentId??"unknown")}`,`sessionLabel: ${zT(e.sessionId??"unknown")}`,`turn: ${e.turn}`,`capturedAt: ${zT(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: ${zT(e.model)}`),n.push("---",$Be,""),n.push(t.text),t.truncated&&n.push("",`<!-- TRUNCATED at ${p9} bytes of ${t.originalBytes} -->`),`${n.join(`
1490
1490
  `)}
1491
1491
  `}async function m9(e){try{if(!LBe(e))return;let t=VD(e.prompt,p9),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Me(n),o=NBe(e,{...t,text:r}),i=yb(e.sessionId);await MBe(i,{recursive:!0,mode:448});let s=new Date().toISOString().replace(/[:.]/g,"-"),a=IBe(3).toString("hex"),l=DBe(i,`${s}-${FBe(e.subagentId)}-t${e.turn}-${a}.md`);await OBe(l,o,{encoding:"utf8",mode:384,flag:"wx"})}catch(t){Ot("subagent-prompt-capture",e.sessionId??"unknown","captureSubagentPrompt",t)}}var p9,$Be,YD=y(()=>{"use strict";F();N();Jb();Qr();p9=8*1024,$Be="<!-- Best-effort secret redaction only. Connection strings, PEM blocks, and PII are NOT caught. -->"});import{appendFile as BBe,mkdir as jBe}from"node:fs/promises";import{join as UBe}from"node:path";function WBe(e){let t=k.AFK_CAPTURE_SUBAGENT_OUTPUT;return!(!t||!va(t)||!e.isSubagentFork||!e.sessionId||!e.subagentId)}function KBe(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function JT(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function h9(e){let t=VD(e,f9),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Me(n);return t.truncated?`${r}
1492
1492
  <!-- TRUNCATED at ${f9} bytes of ${t.originalBytes} -->`:r}function GBe(e){let t=["---",`subagentId: ${JT(e.subagentId??"unknown")}`,`sessionLabel: ${JT(e.sessionId??"unknown")}`,`startedAt: ${JT(new Date().toISOString())}`,"redaction: best-effort","capture: incremental (flushed at each tool-call boundary)"];return e.model!==void 0&&t.push(`model: ${JT(e.model)}`),t.push("---",HBe,""),`${t.join(`
@@ -1511,7 +1511,7 @@ ${r}
1511
1511
 
1512
1512
  ${t}`:[{type:"text",text:i},...t]}ensureLedger(){let{getConfig:t,getSessionId:n,ledger:r,getLedgerMetadata:o}=this.deps,i=t();r.ensure({depth:i.depth,parentSessionId:i.parentSessionId,sessionId:n(),fallbackModel:String(i.model),tracePath:i.traceWriter?.getTracePath(),getMetadata:o})}buildTransformDeps(){let{getConfig:t,getAbortController:n,stateManager:r,accounting:o,setLastResponseMetadata:i,conversationHistory:s}=this.deps,a=t();return{_successfulToolNames:[],conversationHistory:s,getSessionMetadata:()=>r.getSessionMetadata(),setSessionMetadata:l=>r.setSessionMetadata(l),updateSessionIdentity:l=>r.updateSessionIdentity(l),resolveInitialization:()=>r.resolveInitializationOnce(),setLastResponseMetadata:l=>{i(l),o.recordTurnMetadata(l)},maxBudgetUsd:a.maxBudgetUsd,abortBudget:l=>{let c=n();c.signal.aborted||c.abort(l)},...a.traceWriter?{traceWriter:a.traceWriter}:{}}}async*runStream(t,n){let r=this.deps.getInitPromise();r&&await r;let o=this.withPendingContext(t),i=typeof o=="string"?o:this.summarize(o),s={role:"user",content:i,timestamp:new Date};this.deps.conversationHistory.push(s),n.pushUserMessage(o),this.ensureLedger(),this.deps.ledger.recordUser(i);let a=this.deps.incInboundMessageCount(),l=this.deps.getConfig(),c=this.deps.getSessionId();m9({sessionId:Zo(l.traceWriter?.getTracePath())??c,subagentId:l.subagentId,isSubagentFork:l.isSubagentFork===!0,model:l.model===void 0?void 0:String(l.model),turn:a,prompt:i});let u=this.buildTransformDeps();this.deps.getSubagentOutputRecorder()===void 0&&this.deps.setSubagentOutputRecorder(y9({sessionId:Zo(l.traceWriter?.getTracePath())??c,subagentId:l.subagentId,isSubagentFork:l.isSubagentFork===!0,model:l.model===void 0?void 0:String(l.model)}));let d=this.deps.getSubagentOutputRecorder();try{for(;;){let p=await this.deps.getProviderIterator().next();if(p.done)break;let f=p.value,g=GT(f,u);if(g&&(d?.observe(g),g.type==="done"?(this.deps.incTurnCount(),this.deps.accounting.clearProviderError()):g.type==="error"&&this.deps.accounting.markProviderError(),this.deps.ledger.recordEvent(g),this.deps.outputBroadcast.push(g),yield g,g.type==="done"||g.type==="error"))break}d?.end("stream_complete")}finally{this.deps.getState()==="streaming"&&(d?.end("aborted_or_incomplete"),this.deps.setState("idle"))}}queueFrameworkContext(t){let n=t.trim();if(n.length===0)return;let r=this.deps.getPendingFrameworkContext();this.deps.setPendingFrameworkContext([...r,n]),B(`AgentSession: queued framework context (${n.length} chars) for the next user message`)}}});function Fs(e){switch(e){case"abort":return XD;case"iteration_cap":return qBe;case"timeout":return zBe;case"truncated":return QD;default:return null}}var XD,qBe,zBe,QD,XT=y(()=>{"use strict";XD="Session ended via abort before reaching a terminal state. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue from saved state, or re-run the task if the interruption was intentional.",qBe="Session hit the tool-use iteration cap before reaching a terminal state. Partial work is preserved in the transcript and witness trace. Resume with `afk --resume <sessionId>` to continue from where it stopped, or re-run with a higher budget (`--max-turns` or `max_tool_use_iterations`).",zBe="Session was terminated by the wall-clock timeout before reaching a terminal state. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue, or re-run with a longer timeout. Check the trace for whether the timeout hit during active work or while waiting on a slow tool call.",QD="Session output was truncated by the model provider's output-token ceiling before the response completed. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue from where the output was cut off."});function S9(e){return e.maxTurnsHit?"max_turns_exceeded":e.hookBlocked?"hook_blocked":e.dispatchReason==="error"?"abort":e.abort!==null?e.abort:e.sawProviderError||e.lastStopReason===Vn?"abort":e.lastStopReason==="tool_use_loop_capped"?"iteration_cap":e.lastStopReason===zr?"timeout":Do(e.lastStopReason)?"truncated":"model_end_turn"}var v9=y(()=>{"use strict";Sd();Es();bg()});function JBe(e){let t=null,n=e.signal;if(n.aborted&&n.reason!=="closed"){let r=n.reason;r instanceof po?t="budget_exceeded":r instanceof Mt?t="timeout":typeof r=="string"&&r.startsWith("Budget ")?t="budget_exceeded":typeof r=="string"&&r.includes("timed out")?t="timeout":t="abort"}return S9({dispatchReason:e.dispatchReason,maxTurnsHit:e.maxTurnsHit,hookBlocked:e.hookBlocked,abort:t,lastStopReason:e.lastStopReason,sawProviderError:e.sawProviderError})}function VBe(e){if(e.dispatchReason==="error")return"failed";let t=e.signal;return t.aborted&&t.reason!=="closed"?"cancelled":e.sawProviderError||e.lastStopReason===Vn?"failed":"succeeded"}async function k9(e,t){if(!e)return;let n=JBe(t),r={},o=t.runningTokens;o.input>0&&(r.input=o.input),o.output>0&&(r.output=o.output),o.cacheRead>0&&(r.cacheRead=o.cacheRead),o.cacheCreation>0&&(r.cacheCreation=o.cacheCreation);let i=Fs(n);await iH(e,{reason:n,finalTurnCount:t.finalTurnCount,finalCostUsd:t.finalCostUsd,finalTokens:r,...t.lastStopReason!==void 0?{lastStopReason:t.lastStopReason}:{},...i!==null?{guidance:i}:{}})}async function T9(e,t){if(!e)return;let n=VBe(t),r=t.subagentCompletedCount>0?t.subagentCompletedCount:void 0,o=t.subagentRunningTokens,s=o.input>0||o.output>0||o.cacheRead>0||o.cacheCreation>0?{...o.input>0?{input:o.input}:{},...o.output>0?{output:o.output}:{},...o.cacheRead>0?{cacheRead:o.cacheRead}:{},...o.cacheCreation>0?{cacheCreation:o.cacheCreation}:{}}:void 0,a=t.subagentRunningCostUsd>0?t.subagentRunningCostUsd:void 0;await e.seal({status:n,finalCostUsd:t.finalCostUsd,finalTurnCount:t.finalTurnCount,closedAt:new Date().toISOString(),...r!==void 0?{subagentCount:r}:{},...s!==void 0?{subagentTokens:s}:{},...a!==void 0?{subagentCostUsd:a}:{}})}var x9=y(()=>{"use strict";Be();Sd();fe();XT();v9()});var QT,E9=y(()=>{"use strict";qD();x9();QT=class{dispatched=!1;deps;constructor(t){this.deps=t}reset(){this.dispatched=!1}async dispatchOnce(t){if(this.dispatched)return;this.dispatched=!0;let{getConfig:n,getAbortController:r,getHookRegistry:o,accounting:i,getTurnCount:s,getSessionId:a,ownsTraceSeal:l,ownedTraceWriter:c}=this.deps,u=n();u.drainSubagents!==void 0&&await u.drainSubagents(t).catch(()=>{});let d=i.closureSignals(r().signal,t),p=i.snapshot();if(await k9(u.traceWriter,{...d,finalTurnCount:s(),finalCostUsd:p.sessionRunningCostUsd,runningTokens:p.sessionRunningTokens}).catch(()=>{}),l){let f={...d,finalTurnCount:s(),finalCostUsd:p.sessionRunningCostUsd,subagentCompletedCount:p.subagentCompletedCount,subagentRunningTokens:p.subagentRunningTokens,subagentRunningCostUsd:p.subagentRunningCostUsd};await T9(c,f).catch(()=>{})}await zQ(o(),{event:"SessionEnd",sessionId:a(),reason:t,parentSessionId:u.parentSessionId,...u.traceWriter?{tracePath:u.traceWriter.getTracePath()}:{}},u.traceWriter&&!l?{traceWriter:u.traceWriter}:{})}}});async function R9(e){if(e.getState()==="closed")throw new Error("Cannot reset: session is closed");if(e.getAbortController().signal.aborted)throw new It("Cannot reset: session aborted");let t=e.getState();if(t==="processing"||t==="streaming")try{await e.getProviderQuery().interrupt()}catch{}await e.getShutdown().dispatchOnce("reset"),await e.getLedger().seal("reset");try{await e.getProviderQuery().close()}catch{}await e.getProviderIterator().return?.();let n=e.getInitPromise();n&&await Promise.race([n,new Promise(r=>setTimeout(r,Xb))]).catch(()=>{}),e.getStateManager().resolveInitializationIfNeeded();try{e.reinitialize(r=>{let o={...r};return delete o.resume,delete o.sessionId,delete o.resumeHistory,delete o.resumeSessionAt,delete o.continue,delete o.forkSession,o})}catch(r){throw e.setState("closed"),new Error(`Session reset failed during lifecycle rebuild: ${r instanceof Error?r.message:String(r)}`,{cause:r})}}var A9=y(()=>{"use strict";Be();qm()});function C9(e){return e.getProviderQuery().supportedCommands()}function _9(e){return e.getProviderQuery().supportedModels()}function P9(e){return e.getProviderQuery().supportedAgents()}function I9(e){return e.getProviderQuery().getContextUsage()}function M9(e){return e.getProviderQuery().mcpServerStatus()}function O9(e){return e.getProviderQuery().accountInfo()}function D9(e,t,n){return n.getProviderQuery().rewindFiles(e,t)}async function $9(e){if(e.getState()==="closed")throw new Error("Cannot compact: session is closed");if(e.getState()!=="idle")return{compacted:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let t=e.getProviderQuery().compact?.bind(e.getProviderQuery());if(!t)return{compacted:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0};e.setState("compacting");try{return await t()}finally{e.setState("idle")}}function L9(e){return e.getState()==="closed"?[]:e.getProviderQuery().listRewindTargets?.()??[]}async function F9(e,t){if(t.getState()==="closed")throw new Error("Cannot rewind: session is closed");if(t.getState()!=="idle")return{rewound:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let n=t.getProviderQuery().rewindConversation?.bind(t.getProviderQuery());return n?n(e):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}var N9=y(()=>{"use strict"});import{z as XBe}from"zod";async function ZD(e,t={},n){n.runner.assertCanSend();let o=n.getConfig().timeoutMs??sH,i=async()=>{let s=null,a="";n.setState(t.stream?"streaming":"processing");for await(let l of U9(e,n)){if(l.type==="chunk"&&l.chunk.type==="content"&&(a+=l.chunk.content),l.type==="message"&&l.message.role==="assistant"&&(s=l.message),l.type==="error")throw l.error;if(l.type==="done"){if(s)return{...s,metadata:l.metadata};if(a)return{role:"assistant",content:a,metadata:l.metadata,timestamp:new Date}}}if(s)return s;if(a)return{role:"assistant",content:a,timestamp:new Date};throw new Error("No assistant response received")};try{return await Qb(i(),o,{controller:n.getAbortController(),label:n.getSessionId()??"session"})}finally{n.getState()==="processing"&&n.setState("idle")}}async function B9(e,t,n={},r){let{maxRetries:o=2,injectSchemaPrompt:i=!0,...s}=n,a=i?"\n\nRespond with ONLY a JSON object (optionally in a ```json fence) that conforms to this JSON Schema:\n```json\n"+JSON.stringify(XBe.toJSONSchema(t,{target:"openapi-3.0"}))+"\n```":"",l="";for(let c=0;c<=o;c++){let u=c===0?e+a:`Your previous response did not match the required JSON schema.
1513
1513
  Validation error: ${l}
1514
- Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,d=await ZD(u,s,r),p=Hk(d.content),f=t.safeParse(p);if(f.success)return f.data;l=f.error.message}throw new Error(`structured output did not match schema after ${o+1} attempt(s): ${l}`)}async function*j9(e,t){t.runner.assertCanSend(),t.setState("streaming");try{yield*U9(e,t)}finally{t.getState()==="streaming"&&t.setState("idle")}}function U9(e,t){return t.planExit.clearModeBeforeDefault(),t.runner.runStream(e,t.getInputStream())}async function H9(e){let t=e.getState();t!=="streaming"&&t!=="processing"||(e.setState("idle"),await e.getProviderQuery().interrupt())}function W9(e,t){t.getProviderQuery().setBeforeNextRound?.(e)}var K9=y(()=>{"use strict";qm();DO()});async function G9(e,t){let n=St(e);typeof e=="string"&&e.length>0&&await t.getProviderQuery().setModel(e),n&&t.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function e$(e,t){let n=t.getStateManager().getSessionMetadata().permissionMode;t.getPlanExit().recordModeTransition(e,n),await t.getProviderQuery().setPermissionMode(e),t.getStateManager().setSessionMetadata(r=>({...r,permissionMode:e})),t.pushSidebandEvent({type:"plan_mode",mode:e==="plan"?"plan":"default"})}function q9(e,t){return t.setConfig(n=>({...n,systemPrompt:e})),t.getProviderQuery().setSystemPrompt?.(e)??!1}function z9(e,t){t.setConfig(r=>({...r,cwd:e})),t.getProviderQuery().setCwd?.(e);let n=t.getConfig().sessionId;n!==void 0&&sK(n,e)}async function J9(e){return await e.getProviderQuery().reauth?.()??null}async function V9(e){let t=e.getPlanExit().takeSeed();if(t!==void 0){try{await e$(t.mode,e)}catch(n){B(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${t.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:t.message,mode:t.mode}}}var Y9=y(()=>{"use strict";me();Rn();Xa()});var Vt,ZT=y(()=>{"use strict";tH();fe();Ji();qm();dH();pH();Rn();ja();M_();N();xH();FH();KH();GH();d9();w9();E9();A9();N9();K9();Y9();Vt=class{ownedTraceWriter;config;planExit=new nw;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new mw;ledger=new tw;outputBroadcast=new zb;shutdown;runner;constructor(t,n){this.ownsTraceSeal=n!==void 0&&t.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=t.parentSessionId===void 0&&t.planExitControls===void 0?{...t,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,i)=>this.planExit.requestImplementSeed(o,i),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:t,this.abortController=new AbortController,this._hookRegistry=t.hookRegistry,wH(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new QT({getConfig:()=>this.config,getAbortController:()=>this.abortController,getHookRegistry:()=>this._hookRegistry,accounting:this.accounting,getTurnCount:()=>this.turnCount,getSessionId:()=>this.sessionId,ownedTraceWriter:this.ownedTraceWriter,ownsTraceSeal:this.ownsTraceSeal});let r=String(t.model);re(t.traceWriter,{phase:"session_init_start",model:r,resolvedModel:St(t.model)??r,origin:Xi(t.surface),actor:iw(t.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(TH(Im(),{maxBytes:vH,keepTailLines:kH}),setTimeout(()=>{$H({activeLabel:Zo(this.config.traceWriter?.getTracePath())??void 0})},LH).unref(),setTimeout(()=>{WH({activeSessionId:this.sessionId})},HH).unref())}initSdkLifecycle(){let{stateManager:t,inputStream:n,providerQuery:r,providerIterator:o}=c9(this.config);this.stateManager=t,this.inputStream=n,this.providerQuery=r,this.providerIterator=o,this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.accounting.reset(),this.shutdown.reset(),this.currentState="idle",this.pendingFrameworkContext=[],this.runner=new YT({getConfig:()=>this.config,getAbortController:()=>this.abortController,getProviderIterator:()=>this.providerIterator,stateManager:this.stateManager,accounting:this.accounting,ledger:this.ledger,outputBroadcast:this.outputBroadcast,conversationHistory:this.conversationHistory,getInitPromise:()=>this.initPromise,getSessionId:()=>this.sessionId,getState:()=>this.currentState,setState:i=>{this.currentState=i},getLastResponseMetadata:()=>this.lastResponseMetadata,setLastResponseMetadata:i=>{this.lastResponseMetadata=i},getPendingFrameworkContext:()=>this.pendingFrameworkContext,setPendingFrameworkContext:i=>{this.pendingFrameworkContext=i},getInboundMessageCount:()=>this.inboundMessageCount,incInboundMessageCount:()=>++this.inboundMessageCount,getTurnCount:()=>this.turnCount,incTurnCount:()=>{this.turnCount++},getSubagentOutputRecorder:()=>this.subagentOutputRecorder,setSubagentOutputRecorder:i=>{this.subagentOutputRecorder=i},getProviderQuery:()=>this.providerQuery,getLedgerMetadata:()=>this.stateManager.getSessionMetadata()}),this.initPromise=u9(this.config,this.providerIterator,this.abortController.signal,this.stateManager,this.accounting,this.shutdown,this._hookRegistry,i=>this.queueFrameworkContext(i),()=>this.runner.buildTransformDeps())}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}get hookRegistry(){return this._hookRegistry}abort(t){if(t==="closed"||t.startsWith("Budget ")||t.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${t}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(t)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:t=>{this.currentState=t},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(t,n={}){return ZD(t,n,this.makeSendDeps())}async sendMessageStructured(t,n,r={}){return B9(t,n,r,this.makeSendDeps())}async*sendMessageStream(t){yield*j9(t,this.makeSendDeps())}async interrupt(){await H9(this.makeSendDeps())}setBeforeNextRound(t){W9(t,this.makeSendDeps())}async reset(){await R9({getState:()=>this.currentState,setState:t=>{this.currentState=t},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:t=>{this.config=t(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(k_(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:t=>{this.config=t(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:t=>this.pushSidebandEvent(t)}}async setModel(t){return G9(t,this.makeConfigDeps())}async setPermissionMode(t){return e$(t,this.makeConfigDeps())}setSystemPrompt(t){return q9(t,this.makeConfigDeps())}setCwd(t){return z9(t,this.makeConfigDeps())}async reauth(){return J9(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(t){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=t)}async takePendingPlanExitSeed(){return V9(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return C9(this.makePassthroughDeps())}supportedModels(){return _9(this.makePassthroughDeps())}supportedAgents(){return P9(this.makePassthroughDeps())}getContextUsage(){return I9(this.makePassthroughDeps())}mcpServerStatus(){return M9(this.makePassthroughDeps())}accountInfo(){return O9(this.makePassthroughDeps())}rewindFiles(t,n){return D9(t,n,this.makePassthroughDeps())}compact(){return $9(this.makePassthroughDeps())}listRewindTargets(){return L9(this.makePassthroughDeps())}rewindConversation(t){return F9(t,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:t=>{this.currentState=t},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(t){this.runner.queueFrameworkContext(t)}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t),queueFrameworkContext:t=>this.queueFrameworkContext(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.outputBroadcast.close(),await this.ledger.seal("close"),this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{await this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,Xb))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(t,n){this.accounting.recordSubagentCompletion(t,n)}pushSidebandEvent(t){this.currentState!=="closed"&&(this.ledger.recordEvent(t),this.outputBroadcast.push(t))}recordLedgerElicitation(t,n){this.ledger.recordElicitation(t,n)}}});var Id=y(()=>{"use strict";ZT()});function ije(e){return e?oje.some(t=>t.test(e)):!1}function sje(e){return nje.some(t=>t.test(e))}function aje(e){let t=0;for(let n of tje)n.test(e)&&t++;return t}function X9(){let e=!1,t=new Set;return n=>{if(n.event==="Stop")return e=!1,{};if(n.event!=="SubagentStop")return{};let r=n.lastMessage??"";return r.length<600?{}:ije(n.agentType)?{}:sje(r)?{}:aje(r)<2?{}:e||t.has(n.subagentId)?{}:(e=!0,t.add(n.subagentId),{injectContext:rje})}}var eje,tje,nje,rje,oje,Q9=y(()=>{"use strict";eje=["shadow-verify","shadow_verify","resolve","diagnose","appmap","mint","review","verify","verifier"],tje=[/\bverdict(s)?\b/i,/\brecommend(ation)?s?\b/i,/\bshould\s+(delete|remove|rewrite|refactor|rename|reject|merge|revert|disable)\b/i,/\b(USELESS|KEEP|REJECT|APPROVE|SALVAGE|BLOCK|FAIL)\b/,/\b(redundant|duplicated|superseded|obsolete)\b/i,/\bvulnerab\w*\b/i,/\bunused\b/i,/\bbroken\b/i,/\bregress\w*\b/i,/\|\s*(status|verdict|decision|severity|risk|finding|priority|holds\??)\s*\|/i,/\bfound\s+\d+\s*(issue|problem|bug|error|finding|vulnerabilit)/i,/\b(critical|high|medium|low)\s+(severity|priority|risk)\b/i,/\bclaim(s)?\b[^\n]{0,80}\b(holds?|refuted|verified|partial|confirmed|disputed)\b/i,/\b(root\s*cause|incident)\b/i,/\brecommend\s+(removing|deleting|rewriting|refactoring|merging|reverting)\b/i,/\bI\s+(applied|committed|pushed|edited|wrote|fixed|patched|reset|restored|staged)\b/i,/\b(applied|committed|pushed|fixed|patched)\s+(the|these|those)\s+(change|commit|fix|patch|edit)/i],nje=[/\bverifier_verdict\b/i,/"\s*claim\s*"\s*:/i,/\bre-derived\b[^.\n]{0,80}\bindependent/i,/\bindependently\s+(re-derived|re-verified|verified|checked)\b/i,/\bverifier\s+(agrees|disagrees|confirms|refutes)\b/i,/\b(CONFIRMED|REFUTED|UNVERIFIABLE)\b[\s\S]*?\b(CONFIRMED|REFUTED|UNVERIFIABLE)\b/,/\|\s*(claims?|verdicts?)\s*\|/i],rje=`[framework-generated context: shadow-verify nudge]
1514
+ Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,d=await ZD(u,s,r),p=Hk(d.content),f=t.safeParse(p);if(f.success)return f.data;l=f.error.message}throw new Error(`structured output did not match schema after ${o+1} attempt(s): ${l}`)}async function*j9(e,t){t.runner.assertCanSend(),t.setState("streaming");try{yield*U9(e,t)}finally{t.getState()==="streaming"&&t.setState("idle")}}function U9(e,t){return t.planExit.clearModeBeforeDefault(),t.runner.runStream(e,t.getInputStream())}async function H9(e){let t=e.getState();t!=="streaming"&&t!=="processing"||(e.setState("idle"),await e.getProviderQuery().interrupt())}function W9(e,t){t.getProviderQuery().setBeforeNextRound?.(e)}var K9=y(()=>{"use strict";qm();DO()});async function G9(e,t){let n=St(e);typeof e=="string"&&e.length>0&&await t.getProviderQuery().setModel(e),n&&t.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function e$(e,t){let n=t.getStateManager().getSessionMetadata().permissionMode;t.getPlanExit().recordModeTransition(e,n),await t.getProviderQuery().setPermissionMode(e),t.getStateManager().setSessionMetadata(r=>({...r,permissionMode:e})),t.pushSidebandEvent({type:"plan_mode",mode:e==="plan"?"plan":"default"})}function q9(e,t){return t.setConfig(n=>({...n,systemPrompt:e})),t.getProviderQuery().setSystemPrompt?.(e)??!1}function z9(e,t){t.setConfig(r=>({...r,cwd:e})),t.getProviderQuery().setCwd?.(e);let n=t.getConfig().sessionId;n!==void 0&&sK(n,e)}async function J9(e){return await e.getProviderQuery().reauth?.()??null}async function V9(e){let t=e.getPlanExit().takeSeed();if(t!==void 0){try{await e$(t.mode,e)}catch(n){B(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${t.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:t.message,mode:t.mode}}}var Y9=y(()=>{"use strict";me();Rn();Xa()});var Vt,ZT=y(()=>{"use strict";tH();fe();Ji();qm();dH();pH();Rn();ja();M_();N();xH();FH();KH();GH();d9();w9();E9();A9();N9();K9();Y9();Vt=class{ownedTraceWriter;config;planExit=new nw;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new mw;ledger=new tw;outputBroadcast=new zb;shutdown;runner;constructor(t,n){this.ownsTraceSeal=n!==void 0&&t.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=t.parentSessionId===void 0&&t.planExitControls===void 0?{...t,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,i)=>this.planExit.requestImplementSeed(o,i),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:t,this.abortController=new AbortController,this._hookRegistry=t.hookRegistry,wH(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new QT({getConfig:()=>this.config,getAbortController:()=>this.abortController,getHookRegistry:()=>this._hookRegistry,accounting:this.accounting,getTurnCount:()=>this.turnCount,getSessionId:()=>this.sessionId,ownedTraceWriter:this.ownedTraceWriter,ownsTraceSeal:this.ownsTraceSeal});let r=String(t.model);re(t.traceWriter,{phase:"session_init_start",model:r,resolvedModel:St(t.model)??r,origin:Xi(t.surface),actor:iw(t.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(TH(Im(),{maxBytes:vH,keepTailLines:kH}),setTimeout(()=>{$H({activeLabel:Zo(this.config.traceWriter?.getTracePath())??void 0})},LH).unref(),setTimeout(()=>{WH({activeSessionId:this.sessionId})},HH).unref())}initSdkLifecycle(){let{stateManager:t,inputStream:n,providerQuery:r,providerIterator:o}=c9(this.config);this.stateManager=t,this.inputStream=n,this.providerQuery=r,this.providerIterator=o,this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.accounting.reset(),this.shutdown.reset(),this.currentState="idle",this.pendingFrameworkContext=[],this.runner=new YT({getConfig:()=>this.config,getAbortController:()=>this.abortController,getProviderIterator:()=>this.providerIterator,stateManager:this.stateManager,accounting:this.accounting,ledger:this.ledger,outputBroadcast:this.outputBroadcast,conversationHistory:this.conversationHistory,getInitPromise:()=>this.initPromise,getSessionId:()=>this.sessionId,getState:()=>this.currentState,setState:i=>{this.currentState=i},getLastResponseMetadata:()=>this.lastResponseMetadata,setLastResponseMetadata:i=>{this.lastResponseMetadata=i},getPendingFrameworkContext:()=>this.pendingFrameworkContext,setPendingFrameworkContext:i=>{this.pendingFrameworkContext=i},getInboundMessageCount:()=>this.inboundMessageCount,incInboundMessageCount:()=>++this.inboundMessageCount,getTurnCount:()=>this.turnCount,incTurnCount:()=>{this.turnCount++},getSubagentOutputRecorder:()=>this.subagentOutputRecorder,setSubagentOutputRecorder:i=>{this.subagentOutputRecorder=i},getProviderQuery:()=>this.providerQuery,getLedgerMetadata:()=>this.stateManager.getSessionMetadata()}),this.initPromise=u9(this.config,()=>this.providerIterator,this.abortController.signal,this.stateManager,this.accounting,this.shutdown,this._hookRegistry,i=>this.queueFrameworkContext(i),()=>this.runner.buildTransformDeps())}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}get hookRegistry(){return this._hookRegistry}abort(t){if(t==="closed"||t.startsWith("Budget ")||t.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${t}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(t)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:t=>{this.currentState=t},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(t,n={}){return ZD(t,n,this.makeSendDeps())}async sendMessageStructured(t,n,r={}){return B9(t,n,r,this.makeSendDeps())}async*sendMessageStream(t){yield*j9(t,this.makeSendDeps())}async interrupt(){await H9(this.makeSendDeps())}setBeforeNextRound(t){W9(t,this.makeSendDeps())}async reset(){await R9({getState:()=>this.currentState,setState:t=>{this.currentState=t},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:t=>{this.config=t(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(k_(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:t=>{this.config=t(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:t=>this.pushSidebandEvent(t)}}async setModel(t){return G9(t,this.makeConfigDeps())}async setPermissionMode(t){return e$(t,this.makeConfigDeps())}setSystemPrompt(t){return q9(t,this.makeConfigDeps())}setCwd(t){return z9(t,this.makeConfigDeps())}async reauth(){return J9(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(t){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=t)}async takePendingPlanExitSeed(){return V9(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return C9(this.makePassthroughDeps())}supportedModels(){return _9(this.makePassthroughDeps())}supportedAgents(){return P9(this.makePassthroughDeps())}getContextUsage(){return I9(this.makePassthroughDeps())}mcpServerStatus(){return M9(this.makePassthroughDeps())}accountInfo(){return O9(this.makePassthroughDeps())}rewindFiles(t,n){return D9(t,n,this.makePassthroughDeps())}compact(){return $9(this.makePassthroughDeps())}listRewindTargets(){return L9(this.makePassthroughDeps())}rewindConversation(t){return F9(t,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:t=>{this.currentState=t},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(t){this.runner.queueFrameworkContext(t)}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t),queueFrameworkContext:t=>this.queueFrameworkContext(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.outputBroadcast.close(),await this.ledger.seal("close"),this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{await this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,Xb))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(t,n){this.accounting.recordSubagentCompletion(t,n)}pushSidebandEvent(t){this.currentState!=="closed"&&(this.ledger.recordEvent(t),this.outputBroadcast.push(t))}recordLedgerElicitation(t,n){this.ledger.recordElicitation(t,n)}}});var Id=y(()=>{"use strict";ZT()});function ije(e){return e?oje.some(t=>t.test(e)):!1}function sje(e){return nje.some(t=>t.test(e))}function aje(e){let t=0;for(let n of tje)n.test(e)&&t++;return t}function X9(){let e=!1,t=new Set;return n=>{if(n.event==="Stop")return e=!1,{};if(n.event!=="SubagentStop")return{};let r=n.lastMessage??"";return r.length<600?{}:ije(n.agentType)?{}:sje(r)?{}:aje(r)<2?{}:e||t.has(n.subagentId)?{}:(e=!0,t.add(n.subagentId),{injectContext:rje})}}var eje,tje,nje,rje,oje,Q9=y(()=>{"use strict";eje=["shadow-verify","shadow_verify","resolve","diagnose","appmap","mint","review","verify","verifier"],tje=[/\bverdict(s)?\b/i,/\brecommend(ation)?s?\b/i,/\bshould\s+(delete|remove|rewrite|refactor|rename|reject|merge|revert|disable)\b/i,/\b(USELESS|KEEP|REJECT|APPROVE|SALVAGE|BLOCK|FAIL)\b/,/\b(redundant|duplicated|superseded|obsolete)\b/i,/\bvulnerab\w*\b/i,/\bunused\b/i,/\bbroken\b/i,/\bregress\w*\b/i,/\|\s*(status|verdict|decision|severity|risk|finding|priority|holds\??)\s*\|/i,/\bfound\s+\d+\s*(issue|problem|bug|error|finding|vulnerabilit)/i,/\b(critical|high|medium|low)\s+(severity|priority|risk)\b/i,/\bclaim(s)?\b[^\n]{0,80}\b(holds?|refuted|verified|partial|confirmed|disputed)\b/i,/\b(root\s*cause|incident)\b/i,/\brecommend\s+(removing|deleting|rewriting|refactoring|merging|reverting)\b/i,/\bI\s+(applied|committed|pushed|edited|wrote|fixed|patched|reset|restored|staged)\b/i,/\b(applied|committed|pushed|fixed|patched)\s+(the|these|those)\s+(change|commit|fix|patch|edit)/i],nje=[/\bverifier_verdict\b/i,/"\s*claim\s*"\s*:/i,/\bre-derived\b[^.\n]{0,80}\bindependent/i,/\bindependently\s+(re-derived|re-verified|verified|checked)\b/i,/\bverifier\s+(agrees|disagrees|confirms|refutes)\b/i,/\b(CONFIRMED|REFUTED|UNVERIFIABLE)\b[\s\S]*?\b(CONFIRMED|REFUTED|UNVERIFIABLE)\b/,/\|\s*(claims?|verdicts?)\s*\|/i],rje=`[framework-generated context: shadow-verify nudge]
1515
1515
 
1516
1516
  The sub-agent that just finished returned output that reads like **decision-driving findings** (verdicts, recommendations, audit conclusions, or claim-style results that could drive file edits, deletions, commits, or external side-effects).
1517
1517
 
@@ -2352,7 +2352,7 @@ ${x}
2352
2352
  ${T}`})}return{fileBlocks:l,warnings:c}}function ede(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function tde(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}}F();L();F();Ze();L();Nl();function nde(){return{toolStartTimes:new Map,subagentStartTimes:new Map,subagentLabels:new Map}}function rde(e,t){Ke()&&(t.pending||e.toolStartTimes.has(t.toolUseId)||e.toolStartTimes.set(t.toolUseId,Date.now()))}function ode(e,t,n,r){if(!Ke())return;let o=e.toolStartTimes.get(t.toolUseId),i=o!==void 0?Date.now()-o:void 0;e.toolStartTimes.delete(t.toolUseId);let s=$e(n??"tool"),a=t.isError?m.error("err"):m.success("ok"),l=i!==void 0?` \xB7 ${Se(i)}`:"";r.fn(m.dim(` \u25E6 ${s}${l} \xB7 `)+a)}function ide(e,t,n,r){if(!Ke())return;let{subagentId:o,agentType:i}=n,s=$e(i??o);if(e.subagentStartTimes.has(o)||(e.subagentStartTimes.set(o,Date.now()),e.subagentLabels.set(o,s),r.fn(m.dim(` \u25E6 worker ${s} started`))),t.type==="done"||t.type==="error"){let l=e.subagentStartTimes.get(o),c=l!==void 0?Date.now()-l:void 0;e.subagentStartTimes.delete(o),e.subagentLabels.delete(o);let u=c!==void 0?` \xB7 ${Se(c)}`:"",d=t.type==="error"?m.error("failed"):m.success("done");r.fn(m.dim(` \u25E6 worker ${s}${u} \xB7 `)+d)}}var RA=class{state;writer;ttfb;constructor(t,n){this.state=nde(),this.writer=t,this.ttfb=n}onToolStart(t){rde(this.state,t)}onToolResult(t,n){ode(this.state,t,n,this.writer)}onSubagentEvent(t,n){ide(this.state,t,n,this.writer)}onFirstContent(t){this.ttfb.waitingLineEmitted&&(this.ttfb.waitingLineEmitted=!1,t.write("\r\x1B[2K"))}};function sde(e){return{startedAt:e,received:!1,waitingLineEmitted:!1}}function ade(e){return e.received?{}:{turnStartedAt:e.startedAt}}function lde(e,t,n){let r=t.type==="chunk"&&t.chunk.type==="content"&&!n;return r&&(e.received=!0),r}function cde(e,t=process.stdout,n){if(!Ke()||!t.isTTY)return;(e?.fn??console.log)(m.dim(" \u25E6 waiting for response\u2026")),n&&(n.waitingLineEmitted=!0,e&&(n.plainHooks=new RA(e,n)))}me();L();var aXe=3e3;async function ude(e,t){if(!e)return t;let n=Date.now();if(n-t<aXe)return t;try{let r=e();r instanceof Promise&&await r}catch(r){ze()&&console.error(" "+m.error("onContextProgress (status refresh) failed:"),r)}return n}L();me();wt();oa();var lXe="Keep waiting \u2014 auto-resume in progress",dde="Switch model / provider (type /model after)",cXe="Stop waiting";async function pde(e){let{event:t,session:n,borrowedCompositor:r,pickerRef:o,completionWriter:i,disposeRendererOnce:s,setPausedState:a,onPauseInterrupt:l}=e;if(a?.(!0),await s(),r&&t.autoResume===!0){let c=new AbortController;o.abort=c;let u=t.resetsAt?t.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,d=u?`Keep waiting \u2014 auto-resumes at ${u}`:lXe,p=[m.warning(" \u23F3 Usage limit reached.")+(u?m.dim(` Auto-resumes at ${u}.`):""),m.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];Fn(r,{header:p,options:[d,dde,cXe],signal:c.signal,initialIndex:0}).then(f=>{if(o.abort=null,!f)return;let g=f[0];g===void 0||g===d||(l(),g===dde&&(i??{fn:console.log}).fn(m.dim(" Hint: type /model <name> to switch, then send your message again.")),n.interrupt().catch(h=>{ze()&&console.error(" "+m.error("picker pause-interrupt session.interrupt() failed:"),h)}))}).catch(f=>{ze()&&console.error(" "+m.error("picker promise rejected:"),f)})}else(i??{fn:console.log}).fn(v1({reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}}))}AE();async function mde(e,t,n,r,o="summary",i,s){let a=ure(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0);let l=Date.now(),c=sde(l);cde(i,process.stdout,c),gp(process.stdout,Ih(process.cwd(),!0));let u="",d=0,p=!1,f=!1,g=!1,h=!1,b=!1,w,S=!1,v=!1,x={abort:null},T=0,E=[],C=new Map,I=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,A=()=>{let H=r.subagentControl;H?.hasPromotableForeground()&&tde(H,P,r.onQueuedUserMessage).then(({jobs:q,flushedText:W,flushedPreview:K})=>{let Y=(i??{fn:console.log}).fn;for(let ie of q)Y(m.dim(` \u2192 subagent backgrounded as ${ie.jobId}: ${ie.label}`));q.some(ie=>ie.sharesWorktree)&&Y(m.warning("\u26A0 Background child is writing to your worktree \u2014 edits may conflict until it finishes")),W!==void 0&&Y(m.dim(` \u2192 queued message sent to this turn: ${ede(K??W)}`))}).catch(()=>{})},P=r.getCompositor?r.getCompositor():null,_=()=>new jp({out:Hp(i),thinkingMode:o,...I?{activeSkillName:I}:{},onCancel:()=>{t.interrupt().catch(H=>{ze()&&console.error(" "+m.error("session.interrupt() failed:"),H)})},...r.subagentControl?{onBackground:A}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...P?{compositor:P}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{},...ade(c),...r.addPreviewDiffRef?{addPreviewDiffRef:r.addPreviewDiffRef}:{}}),M=_();r.bashTailSetter&&(r.bashTailSetter.current=(H,q)=>M.setBashOutputTail(H,q));let j=async()=>{if(!h){h=!0,r.bashTailSetter&&(r.bashTailSetter.current=void 0);try{await M.dispose()}catch{}}},O=async()=>{await M.arm();let H=M.getCompositor();if(i&&H){let q=H;i.fn=W=>q.commitAbove(W),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(H),r.setInterruptNotifier?.(q=>M.setInterrupting(q)),r.rearmStatus?.()};try{P?P.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{S=!0,M.setSoftStopping(!0),t.interrupt().catch(Q=>{ze()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),Q)});let U=r.subagentControl;U?.hasActiveForeground()&&U.cancelActiveForeground().catch(Q=>{ze()&&console.error(" "+m.error("soft-stop cancelActiveForeground() failed:"),Q)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{v=!0,t.interrupt().catch(U=>{ze()&&console.error(" "+m.error("pause-interrupt session.interrupt() failed:"),U)})}),await O(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(A),r.setTaskViewHandler?.(Jue(r));let{fileBlocks:H,warnings:q}=Zue(e.text,{rootDir:process.cwd()});for(let U of q)(i??{fn:console.log}).fn(m.dim(` @-file: ${U}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let W=H.length>0||e.attachments.length>0?await Que(e.text,e.attachments,void 0,H,t.sessionId):e.text,K=t.sendMessageStream(W);await Zu((U,Q)=>{M.process(U,Q),Q&&c.plainHooks?.onSubagentEvent(U,Q)},async()=>{for await(let U of K){if(S||v)break;let Q=lde(c,U,f);if(U.type==="chunk"&&U.chunk.type==="content"?(u=p?que(u,U.chunk.content):u+U.chunk.content,p=!1,f=!0,r.onTextDelta?.(U.chunk.content.length)):U.type==="message"&&!f&&(u=U.message.content),U.type==="stream_retry"&&(u=u.slice(0,d),p=u.length>0),U.type==="chunk"&&U.chunk.type==="tool_use_detail"){let le=U.chunk,Z={toolName:le.toolName,toolUseId:le.toolUseId,input:le.toolInput,...le.toolInputRaw!==void 0&&{inputRaw:le.toolInputRaw}};C.set(le.toolUseId,Z),E.push(Z),c.plainHooks?.onToolStart(le)}else if(U.type==="chunk"&&U.chunk.type==="tool_result"){let le=U.chunk;d=u.length,p=!0;let Z=C.get(le.toolUseId);Z&&(Z.result=le.content,Z.isError=le.isError,C.delete(le.toolUseId)),c.plainHooks?.onToolResult(le,Z?.toolName),T=await ude(r.onContextProgress,T)}if(U.type==="paused"){await pde({event:U,session:t,borrowedCompositor:P,pickerRef:x,completionWriter:i,disposeRendererOnce:j,setPausedState:r.setPausedState,onPauseInterrupt:()=>{v=!0}});continue}if(U.type==="resumed"){r.setPausedState?.(!1),x.abort?.abort(),x.abort=null;let le=U.hotSwapped&&U.accountId?`\u25B6 Resumed on ${U.accountId}`:"\u25B6 Resumed";u="",d=0,p=!1,f=!1,E.length=0,C.clear(),b=!1,w=void 0,g=!1,M=_(),h=!1,await O(),(i??{fn:console.log}).fn(m.success(le));continue}if(U.type==="error"){await j(),ou(Vc(U.error)),g=!0;continue}M.process(U),Q&&(c.plainHooks?.onFirstContent(process.stdout),M.notifyFirstContent()),U.type==="done"&&(b=!0,w=U.metadata)}});let ie=!1;if(b&&!S&&!v){let U=Kue(M.getPendingBuffer());U>=0?M.stripPendingTerminalState(U):_y(u)!==null&&(ie=!0)}await j();let D=i?i.fn:console.log;if(S){let U=P?P.getPendingCount():0,Q=U>0?` \xB7 ${U} queued`:"";D(m.warning(`\u23F8 Stopped${Q} \u2014 work so far kept.`)+m.dim(" Send a message to continue.")),D("")}if(v&&(D(m.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),D("")),b&&!S&&!v){Kl(n,a,u,w,E),await r.onTurnComplete?.(a,u).catch(()=>{}),fp(process.stdout),yte(process.stdout,"afk: turn complete");let U=le=>{i?i.fn(le):console.log(le)},Q=_y(u);if(Q&&!ie){U(zue(Q,{durationMs:w?.durationMs,totalCostUsd:w?.totalCostUsd,toolCount:E.length})),U("");let le=IN(E),Z=Nse(E);if(r.onTerminalState)try{r.onTerminalState(Q,{doneHasCorroboratingEvidence:Z,doneEvidenceClassification:le})}catch{}if(n.permissionMode==="autonomous"){let De=Q.kind==="done"&&Gf().verifyDone===!0&&!Z;jse(Q,void 0,{unverified:De})}}if(UB(w,n,U),HB(U,process.stdout),r.onAfterTurn){let le=r.onAfterTurn();le instanceof Promise&&await le.catch(()=>{})}}}catch(H){await j(),g||ou(Vc(H))}finally{await j(),gp(process.stdout,Ih(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setTaskViewHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),x.abort?.abort(),x.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}zs();Hm();var AA=class{onRepaint;running=!1;smoothedRate=null;lastSampleMs=null;pendingChars=0;lastRepaintMs=0;constructor(t){this.onRepaint=t}start(){this.running=!0,this.smoothedRate=null,this.lastSampleMs=null,this.pendingChars=0,this.lastRepaintMs=0}update(t){if(!this.running||t<=0)return;this.pendingChars+=t;let n=Date.now();if(this.lastSampleMs===null){this.lastSampleMs=n;return}let r=n-this.lastSampleMs;if(r<50)return;if(r>3e3){this.lastSampleMs=n,this.pendingChars=0;return}let o=this.pendingChars/4/r*1e3;this.smoothedRate=this.smoothedRate===null?o:.25*o+(1-.25)*this.smoothedRate,this.lastSampleMs=n,this.pendingChars=0,this.onRepaint&&n-this.lastRepaintMs>=300&&(this.lastRepaintMs=n,this.onRepaint(this.smoothedRate))}getCurrentRate(){return this.running?this.smoothedRate:null}stop(){this.running=!1,this.smoothedRate=null,this.lastSampleMs=null,this.pendingChars=0,this.lastRepaintMs=0,this.onRepaint?.(null)}};L();async function fde(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(m.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}var uXe=5e3,dXe=3,pXe="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function gde(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,healthRail:d,verdictLedger:p,shellPassthrough:f,bgResultNotifier:g}=s,h=null,b=[];e.session.current.waitForInitialization().then(async _=>{ze()&&(h=_R(_)),await sy(e.session.current),ze()&&(b=ZF())}).catch(()=>{});let w=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,S,v=!1,x=!1,T;e.clearPendingStopInjection=()=>{T=void 0};let E,C,I,A=(()=>{let _=parseInt(e.options.maxTurns,10);return _>0?_:void 0})(),P=0;for(g.onInjectable=()=>{P>=dXe||!o.isAwaitingInput()||!o.bufferIsEmpty()||(P++,fp(process.stdout),w={text:pXe,attachments:[]},o.abortPendingRead())};;){if(P=0,h&&(e.replRenderer.writeLine(h),e.replRenderer.writeLine(""),h=null),b.length>0){for(let D of b)e.replRenderer.writeLine(D);e.replRenderer.writeLine(""),b=[]}let _=f.drainNotifications();for(let{job:D,result:U}of _){let Q=U.errorReason===void 0?"\u2713":"\u2717",le=U.errorReason==="abort"?"killed":U.errorReason==="timeout"?"timed out":U.errorReason==="signal-killed"?"killed by signal":`exit ${U.exitCode??0}`,Z=Math.max(0,Math.round(U.durationMs/100)/10);e.replRenderer.writeLine(m.dim(` ${Q} [${D.id}] ${le} \xB7 ${Z}s \xB7 `)+D.command)}let M=g.drainNotifications();for(let{job:D}of M){let U=D.status==="completed"?"\u2713":D.status==="failed"?"\u2717":"\u2298",Q=D.endedAt!==void 0?Math.max(0,Math.round((D.endedAt-D.startedAt)/100)/10):0,le=te(D.label,60);e.replRenderer.writeLine(m.dim(` ${U} [${D.jobId}] subagent ${D.status} \xB7 ${Q}s \xB7 `)+le)}let j=l.renderIfChanged(e.stats.sessionId);if(j.length>0){for(let D of j)e.replRenderer.writeLine(D);e.replRenderer.writeLine("")}let O,H;if(w===void 0){let D=await e.session.current.takePendingPlanExitSeed();D!==void 0&&(e.stats.permissionMode=D.mode,w={text:D.message,attachments:[]})}if(w!==void 0){let D=w;w=void 0;let U=Xp(e.stats.permissionMode,D.text),Q=Yl({buffer:D.text,promptText:U,isTTY:!!process.stdout.isTTY,attachmentSummary:Rp([...D.attachments])});e.replRenderer.writeLine(Q),O=D.text.trim(),H=D.attachments}else{let D=S;S=void 0;let U=await o.readLine({promptFn:Q=>Xp(e.stats.permissionMode,Q),...D!==void 0?{initialBuffer:D}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{wA(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});O=U.text.trim(),H=U.attachments}if(!O&&H.length===0)continue;if(O.startsWith("!")){let D=/^(0|false|off|no)$/i.test(k.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!D&&(v||(v=!0,e.replRenderer.writeLine(m.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch(O))){e.statusLine.rearm();continue}}let q=!1;if(O.startsWith("/")){let D=await hL(O,e.slashCtx,H);if(D.handled){if(D.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((O==="/clear"||O.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset(),T=void 0),D.result!==null&&typeof D.result=="object"&&"kind"in D.result&&D.result.kind==="submit"){w={text:D.result.message,attachments:H??[]},e.statusLine.rearm();continue}if(D.result!==null&&typeof D.result=="object"&&"kind"in D.result&&D.result.kind==="prefill"){S=D.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}q=!0}a.push(O),await fde(e,O);let W=O;if(q){let D=qx(O);if(D){let U=D.name.replace(/^\//,"").split(":").pop()??"";if(U&&nR(U)){let Q={skillName:U,rawArgs:D.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},le=e.session.current.sessionId,Z=na(le),De=Date.now();B(`[afk trace] preflight.start commandName=${U}`);let Je=!1,Qo=await ta(Q,{cwd:e.stats.cwd??process.cwd(),artifactDir:Z},Ge=>{ze()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${U}) failed: `)+(Ge instanceof Error?Ge.message:String(Ge)))});Je=Qo!==null,B(`[afk trace] preflight.end commandName=${U} durationMs=${Date.now()-De} success=${Je}`),W=rR(Qo?.manifestBlock,O)}}}let K=f.drainInjections();K.length>0&&(W=K+W);let Y=g.drainInjections();if(Y.length>0&&(W=Y+W),T!==void 0&&(W=T+`
2353
2353
 
2354
2354
  `+W,T=void 0),e.hookRegistry)try{let D={event:"UserPromptSubmit",prompt:W,sessionId:e.stats.sessionId},U=await e.hookRegistry.dispatch(D);U.injectContext&&(W=U.injectContext+W)}catch(D){if(D instanceof _e){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+(D.reason?m.dim(`: ${se(D.reason)}`):"")),e.statusLine.rearm();continue}if(D instanceof wo){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+m.dim(`: handler timed out after ${D.timeoutMs}ms`)),e.statusLine.rearm();continue}throw D}E=C=I=void 0,C1(),M1();let ie=new AA(D=>{e.statusLine.repaint({...Zn(e.stats,e.contextSampler,e.gitStatusSampler,A),tokPerSec:D??void 0})});if(ie.start(),await mde({text:W,attachments:H},e.session.current,e.stats,{setInFlight(D){n.turnInFlight=D},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(D){await t.appendUser(D)},async onQueuedUserMessage(D){await t.appendQueuedUser(D)},async onTurnComplete(D,U){if(await t.appendTurn(D,U),e.stats.sessionId)try{qs(e.stats)}catch(Q){x||(x=!0,e.replRenderer.writeLine(m.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(Q instanceof Error?Q.message:String(Q))))}},async onAfterTurn(){ie.stop(),await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.repaint(Zn(e.stats,e.contextSampler,e.gitStatusSampler,A)),e.statusLine.rearm(),c?.repaint("observing"),d?.update(e.stats)},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(D,U)=>{p?.push(D),E=D.kind,C=U?.doneHasCorroboratingEvidence,I=U?.doneEvidenceClassification},setActiveCompositor:D=>{n.activeCompositor=D,D===null&&n.interruptPickerAbort&&(n.interruptPickerAbort.abort(),n.interruptPickerAbort=null)},setInterruptNotifier:D=>{n.notifyInterrupting=D},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:D=>o.setBackgroundHandler(D),setTaskViewHandler:D=>o.setTaskViewHandler(D),setSoftStopHandler:i,setPausedState:D=>o.setPausedState(D),setPauseInterruptHandler:D=>o.setPauseInterruptHandler(D),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(Zn(e.stats,e.contextSampler,e.gitStatusSampler,A)),d?.update(e.stats,e.contextSampler.getRatio())},...c?{onStageChange:(D,U)=>{c.repaint(D),u?.onStage(D,U)}}:{},...e.addPreviewDiffRef?{addPreviewDiffRef:e.addPreviewDiffRef}:{},bashTailSetter:e.bashTailSetter,onTextDelta:D=>ie.update(D)},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(Xp(e.stats.permissionMode))),e.hookRegistry)try{let D=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...E!==void 0?{terminalState:E}:{},...C!==void 0?{doneHasCorroboratingEvidence:C}:{},...I!==void 0?{doneEvidenceClassification:I}:{}},void 0,uXe);D.injectContext&&D.injectContext.trim().length>0&&(T=D.injectContext)}catch(D){if(D instanceof It)throw D;D instanceof wo?(B("[stop hook] handler timed out"),e.completionWriter.fn(m.dim(" [stop hook] timed out"))):D instanceof _e?e.completionWriter.fn(m.dim(` [stop hook] blocked: ${se(D.reason??"no reason given")}`)):B("[stop hook] unexpected error: "+String(D))}}}function mXe(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 hde(e,t,n,r){let o=await oue(),i=new bA({rl:e.rl,history:o,statusLine:e.statusLine}),s=mXe(k.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await Rue(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar,getMascotBar:()=>a?.mascotBar});a=Wue(e,n);let c=a;e.slashCtx.suspendFooter=()=>{c.bgStatusBar.stop(),c.mascotBar.stop(),c.healthRail.stop(),e.statusLine.stop()},e.slashCtx.resumeFooter=()=>{e.statusLine.start(),c.healthRail.start(),c.mascotBar.start(),c.bgStatusBar.start(),c.bgStatusBar.redraw()},await gde(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.healthRail.stop(),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)}}Ff();Uu();import{execFile as fXe}from"node:child_process";import{dirname as gXe,isAbsolute as hXe,resolve as yXe}from"node:path";import{promisify as bXe}from"node:util";var yde=bXe(fXe),wXe=3e3,SXe=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function vXe(){let t=(await yde("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=hXe(t)?t:yXe(process.cwd(),t);return gXe(n)}async function bde(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await vXe()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),wXe)});try{let o=pr({execFile:yde,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=>SXe.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}Qm();Ff();import{promises as kXe}from"node:fs";import{dirname as TXe,join as vde}from"node:path";import{randomBytes as xXe}from"node:crypto";var EXe=["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(`
2355
- `),wde=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,KB=30,RXe=1024,AXe=8e3,CXe="haiku";async function _Xe(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=OXe(n,RXe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??AXe),s=t.signal?DXe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await ri({token:t.token,model:t.model??CXe,system:EXe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=PXe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=TXe(t.worktreePath);return await IXe(l,c)}function PXe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(wde.test(t)&&t.length<=KB)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>KB)break;o=s}return wde.test(o)?o:null}async function IXe(e,t){if(!await MXe(vde(t,e)))return e;let n=xXe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,KB-5)}-${n}`}async function MXe(e){try{return await kXe.access(e),!0}catch{return!1}}function OXe(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 DXe(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 kde(e){let t,n,r=vde(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await _Xe(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=`${TS(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return Sde(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 Sde(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 Sde(e,t){e&&e.setCwd(t),$Xe(t)}function $Xe(e){try{process.chdir(e)}catch{}}mt();xt();zc();qo();N();import{spawn as xde}from"child_process";import{existsSync as Ede,mkdirSync as jXe,readFileSync as Rde,unlinkSync as Tde,writeFileSync as Ade}from"fs";import{get as UXe}from"https";import{join as Cde}from"path";import{readFileSync as LXe}from"fs";import{dirname as FXe,join as NXe}from"path";import{fileURLToPath as BXe}from"url";function er(){try{return"5.221.5"}catch{}try{let e=FXe(BXe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(LXe(NXe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}L();F();var HXe=64*1024,WXe=10800*1e3,KXe=800,GXe=3600*1e3,qXe="update-check.json",zXe="pending-update.json";function GB(){return Cde(xa(),qXe)}function Py(){return Cde(xa(),zXe)}function qB(){let e=xa();Ede(e)||jXe(e,{recursive:!0})}function _de(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 Pde(){try{let e=Rde(GB(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function Ide(){try{qB();let e=`
2355
+ `),wde=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,KB=30,RXe=1024,AXe=8e3,CXe="haiku";async function _Xe(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=OXe(n,RXe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??AXe),s=t.signal?DXe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await ri({token:t.token,model:t.model??CXe,system:EXe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=PXe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=TXe(t.worktreePath);return await IXe(l,c)}function PXe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(wde.test(t)&&t.length<=KB)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>KB)break;o=s}return wde.test(o)?o:null}async function IXe(e,t){if(!await MXe(vde(t,e)))return e;let n=xXe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,KB-5)}-${n}`}async function MXe(e){try{return await kXe.access(e),!0}catch{return!1}}function OXe(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 DXe(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 kde(e){let t,n,r=vde(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await _Xe(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=`${TS(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return Sde(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 Sde(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 Sde(e,t){e&&e.setCwd(t),$Xe(t)}function $Xe(e){try{process.chdir(e)}catch{}}mt();xt();zc();qo();N();import{spawn as xde}from"child_process";import{existsSync as Ede,mkdirSync as jXe,readFileSync as Rde,unlinkSync as Tde,writeFileSync as Ade}from"fs";import{get as UXe}from"https";import{join as Cde}from"path";import{readFileSync as LXe}from"fs";import{dirname as FXe,join as NXe}from"path";import{fileURLToPath as BXe}from"url";function er(){try{return"5.221.6"}catch{}try{let e=FXe(BXe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(LXe(NXe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}L();F();var HXe=64*1024,WXe=10800*1e3,KXe=800,GXe=3600*1e3,qXe="update-check.json",zXe="pending-update.json";function GB(){return Cde(xa(),qXe)}function Py(){return Cde(xa(),zXe)}function qB(){let e=xa();Ede(e)||jXe(e,{recursive:!0})}function _de(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 Pde(){try{let e=Rde(GB(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function Ide(){try{qB();let e=`
2356
2356
  const https = require('https');
2357
2357
  const fs = require('fs');
2358
2358
  const url = 'https://registry.npmjs.org/agent-afk/latest';
@@ -2816,7 +2816,7 @@ Safe to run repeatedly \u2014 replaces the index atomically.`).action(async()=>{
2816
2816
  </body>
2817
2817
  </html>`}function Lye(e){e.command("insights").description("Generate a local usage analytics report from AFK telemetry").option("--days <n>","Lookback window in days","30").option("--output <path>","Output file path for the HTML report").option("--no-open","Do not open the report in a browser after generation").action(async t=>{try{let n=Math.max(1,parseInt(t.days,10)||30),r=xa(),o=t.output??zet(r,"insights.html");Get(qet(o),{recursive:!0});let i=await Iye({days:n}),s=Oye(i),a=$ye(i,s,{days:n});Ket(o,a,"utf-8"),process.stdout.write(`\u2713 Insights report written to ${o}
2818
2818
  `),t.open!==!1&&WA(o)}catch(n){J(n)}})}N();Ne();import{readdir as Fye,stat as Jet,open as Vet}from"node:fs/promises";import{join as Nye}from"node:path";var Bye=120,jye=512,Yet=500,Xet=20;async function Qet(e){let t;try{t=await Vet(e,"r");let n=Buffer.allocUnsafe(jye),{bytesRead:r}=await t.read(n,0,jye,0);if(r===0)return"(empty capture)";let o=n.subarray(0,r).toString("utf8"),i=we(o);for(let s of i.split(`
2819
- `)){let a=s.trimEnd();if(a.length>0)return a.length<=Bye?a:`${a.slice(0,Bye-1)}\u2026`}return"(no preview)"}catch{return"(no preview)"}finally{await t?.close().catch(()=>{})}}async function Uye(e={}){let{sessionId:t}=e,n=Math.min(Yet,e.limit!==void 0&&e.limit>0?e.limit:Xet),r=_t(),o;try{o=await Fye(r)}catch(c){if(c.code==="ENOENT")return[];throw c}o=o.filter(c=>/^[a-zA-Z0-9_-]+$/.test(c)),t!==void 0&&(o=o.filter(c=>c===t));let i=[],s=20;for(let c=0;c<o.length;c+=s){let u=o.slice(c,c+s);await Promise.all(u.map(async d=>{let p=Nye(r,d,"bash-captures"),f;try{f=await Fye(p)}catch{return}await Promise.all(f.filter(g=>g.endsWith(".txt")).map(async g=>{let h=Nye(p,g),b;try{if(b=await Jet(h),!b.isFile())return}catch{return}let w=g.slice(0,-4);i.push({sessionId:d,toolUseId:w,filePath:h,mtimeMs:b.mtimeMs,sizeBytes:b.size})}))}))}i.sort((c,u)=>u.mtimeMs-c.mtimeMs);let a=i.slice(0,n),l=[];for(let c of a){let u=await Qet(c.filePath);l.push({...c,preview:u})}return l}N();L();function Zet(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ett(e){return new Date(e).toISOString().replace("T"," ").slice(0,19)}function Hye(e){e.command("captures").description(`List bash output captures \u2014 full output files written when a command
2819
+ `)){let a=s.trimEnd();if(a.length>0)return a.length<=Bye?a:`${a.slice(0,Bye-1)}\u2026`}return"(no preview)"}catch{return"(no preview)"}finally{await t?.close().catch(()=>{})}}async function Uye(e={}){let{sessionId:t}=e,n=Math.min(Yet,e.limit!==void 0&&e.limit>0?e.limit:Xet),r=_t(),o;try{o=await Fye(r)}catch(c){if(c.code==="ENOENT")return[];throw c}o=o.filter(c=>/^[a-zA-Z0-9_-]+$/.test(c)),t!==void 0&&(o=o.filter(c=>c===t));let i=[],s=20;for(let c=0;c<o.length;c+=s){let u=o.slice(c,c+s);await Promise.all(u.map(async d=>{let p=Nye(r,d,"bash-captures"),f;try{f=await Fye(p)}catch{return}await Promise.all(f.filter(g=>/^[a-zA-Z0-9._-]+\.txt$/.test(g)).map(async g=>{let h=Nye(p,g),b;try{if(b=await Jet(h),!b.isFile())return}catch{return}let w=g.slice(0,-4);i.push({sessionId:d,toolUseId:w,filePath:h,mtimeMs:b.mtimeMs,sizeBytes:b.size})}))}))}i.sort((c,u)=>u.mtimeMs-c.mtimeMs);let a=i.slice(0,n),l=[];for(let c of a){let u=await Qet(c.filePath);l.push({...c,preview:u})}return l}N();L();function Zet(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ett(e){return new Date(e).toISOString().replace("T"," ").slice(0,19)}function Hye(e){e.command("captures").description(`List bash output captures \u2014 full output files written when a command
2820
2820
  produces more than 100 KB. Captures live under the witness directory
2821
2821
  and are evicted automatically by the 30-day / 2 GiB retention sweep.`).command("list").description("List recent bash output captures, newest first").option("--session <id>","Filter to a specific session id").option("-n, --limit <number>","Maximum entries to show (default: 20)","20").option("--json","Emit raw JSON (for piping to jq)",!1).action(async n=>{try{let r=parseInt(n.limit,10),o=Number.isNaN(r)||r<=0?20:r,i=await Uye({sessionId:n.session,limit:o});if(n.json){process.stdout.write(JSON.stringify(i,null,2)+`
2822
2822
  `);return}if(i.length===0){let a=_t(),l=n.session?` for session "${n.session}"`:"";process.stdout.write(m.meta(`No bash captures found${l} under ${a}/*/bash-captures/