@kynver-app/runtime 0.2.129 → 0.2.130

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.
@@ -1,12 +1,12 @@
1
- var VU=Object.defineProperty;var p=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Lv=(e,t)=>{for(var r in t)VU(e,r,{get:t[r],enumerable:!0})};function Wv(){Co=!0}function Qe(){return Co}function Uv(e){if(!Co)throw new Error("installDesktopCredentialProvider requires desktop credential mode");if(e.kind!=="desktop")throw new Error("only a desktop credential provider may be installed");if(li)throw new Error("desktop credential provider is already installed");li=e}function Fv(){return li!==null}function Kv(e){if(!Co)return e;if(!li)throw new ai;return li}function Pe(e,t=process.env){if(Co)return;let r=t[e]?.trim();return r||void 0}function pf(){if(Co)throw new df}var Bv,ai,df,Co,li,St=p(()=>{"use strict";Bv=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN"],ai=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},df=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Co=!1,li=null});import{homedir as ff}from"node:os";import yn from"node:path";function Tl(e){return e==="~"?ff():e.startsWith("~/")||e.startsWith("~\\")?yn.join(ff(),e.slice(2)):e}function Me(e){return yn.resolve(Tl(e))}function GU(e){let t=Tl(e),r=yn.resolve(t),n=yn.resolve(ff());return r===n?"~":r.startsWith(`${n}${yn.sep}`)?`~/${yn.relative(n,r).split(yn.sep).join("/")}`:r.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function He(e){return GU(e)}var at=p(()=>{"use strict"});import{spawnSync as JU}from"node:child_process";function zU(e){return["/PID",String(e),"/T","/F"]}function XU(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===qU||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function QU(e){let t=JU("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:YU});return{status:t.status,stderr:t.stderr??"",...t.error?{error:t.error}:{}}}function ZU(e){return Number.isInteger(e)&&e>0}function fe(e,t="SIGTERM",r={}){if(!ZU(e))return{method:"none",outcome:"not_found"};if((r.platform??process.platform)==="win32"){let s=r.runTaskkill??QU;return XU(s(zU(e)))}let o=r.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,t),{method:"group",outcome:"signalled"}}catch{}try{return o(e,t),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function Re(e=process.platform){return e!=="win32"}function Ze(e,t="SIGTERM",r={}){if((r.platform??process.platform)==="win32"&&e.pid){fe(e.pid,t,r);return}try{e.kill(t)}catch{}}var qU,YU,ci=p(()=>{"use strict";qU=128,YU=15e3});import{existsSync as eF,mkdirSync as tF,readFileSync as jv,readdirSync as Noe,renameSync as rF,rmSync as nF,statSync as Vv,writeFileSync as oF}from"node:fs";import{randomBytes as sF}from"node:crypto";import iF from"node:path";function lt(e){console.error(e),process.exit(1)}function z(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function _t(e,t){return e||lt(`missing ${t}`),e}function ui(e){try{return JSON.parse(e)}catch{return null}}function F(e,t){try{return JSON.parse(jv(e,"utf8"))}catch(r){if(arguments.length>1)return t;lt(`failed to read ${e}: ${r.message}`)}}function be(e,t){tF(iF.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.${sF(4).toString("hex")}.tmp`;try{oF(r,`${JSON.stringify(t,null,2)}
2
- `),rF(r,e)}catch(n){try{nF(r,{force:!0})}catch{}throw n}}function B(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Nl(e){return B(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function kn(e){return String(e).replace(/\/+$/,"")}function Dl(e){try{return Vv(e).size}catch{return 0}}function Ml(e){try{return Vv(e).mtime.toISOString()}catch{return null}}function Eo(e,t){return eF(e)?jv(e,"utf8").split(`
1
+ var DF=Object.defineProperty;var p=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var mR=(e,t)=>{for(var r in t)DF(e,r,{get:t[r],enumerable:!0})};function hR(){Po=!0}function et(){return Po}function yR(e){if(!Po)throw new Error("installDesktopCredentialProvider requires desktop credential mode");if(e.kind!=="desktop")throw new Error("only a desktop credential provider may be installed");if(yi)throw new Error("desktop credential provider is already installed");yi=e}function kR(){return yi!==null}function bR(e){if(!Po)return e;if(!yi)throw new hi;return yi}function Pe(e,t=process.env){if(Po)return;let r=t[e]?.trim();return r||void 0}function Mf(){if(Po)throw new Df}var gR,hi,Df,Po,yi,_t=p(()=>{"use strict";gR=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN"],hi=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},Df=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Po=!1,yi=null});import{homedir as Lf}from"node:os";import wn from"node:path";function Gl(e){return e==="~"?Lf():e.startsWith("~/")||e.startsWith("~\\")?wn.join(Lf(),e.slice(2)):e}function Be(e){return wn.resolve(Gl(e))}function MF(e){let t=Gl(e),r=wn.resolve(t),n=wn.resolve(Lf());return r===n?"~":r.startsWith(`${n}${wn.sep}`)?`~/${wn.relative(n,r).split(wn.sep).join("/")}`:r.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Ve(e){return MF(e)}var ct=p(()=>{"use strict"});import{spawnSync as LF}from"node:child_process";function WF(e){return["/PID",String(e),"/T","/F"]}function FF(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===BF||/not found/i.test(e.stderr)?{method:"taskkill",outcome:"not_found"}:{method:"taskkill",outcome:"failed",detail:`taskkill exit ${e.status??"null"}: ${e.stderr.trim().slice(0,300)}`}}function $F(e){let t=LF("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:UF});return{status:t.status,stderr:t.stderr??"",...t.error?{error:t.error}:{}}}function KF(e){return Number.isInteger(e)&&e>0}function he(e,t="SIGTERM",r={}){if(!KF(e))return{method:"none",outcome:"not_found"};if((r.platform??process.platform)==="win32"){let s=r.runTaskkill??$F;return FF(s(WF(e)))}let o=r.kill??((s,i)=>{process.kill(s,i)});try{return o(-e,t),{method:"group",outcome:"signalled"}}catch{}try{return o(e,t),{method:"pid",outcome:"signalled"}}catch(s){let i=s.code;return i==="ESRCH"?{method:"pid",outcome:"not_found"}:{method:"pid",outcome:"failed",detail:i??s.message}}}function Se(e=process.platform){return e!=="win32"}function tt(e,t="SIGTERM",r={}){if((r.platform??process.platform)==="win32"&&e.pid){he(e.pid,t,r);return}try{e.kill(t)}catch{}}var BF,UF,ki=p(()=>{"use strict";BF=128,UF=15e3});import{existsSync as HF,mkdirSync as jF,readFileSync as wR,readdirSync as Ose,renameSync as VF,rmSync as GF,statSync as SR,writeFileSync as JF}from"node:fs";import{randomBytes as qF}from"node:crypto";import YF from"node:path";function ut(e){console.error(e),process.exit(1)}function Z(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function xt(e,t){return e||ut(`missing ${t}`),e}function bi(e){try{return JSON.parse(e)}catch{return null}}function $(e,t){try{return JSON.parse(wR(e,"utf8"))}catch(r){if(arguments.length>1)return t;ut(`failed to read ${e}: ${r.message}`)}}function Re(e,t){jF(YF.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.${qF(4).toString("hex")}.tmp`;try{JF(r,`${JSON.stringify(t,null,2)}
2
+ `),VF(r,e)}catch(n){try{GF(r,{force:!0})}catch{}throw n}}function L(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Jl(e){return L(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Sn(e){return String(e).replace(/\/+$/,"")}function ql(e){try{return SR(e).size}catch{return 0}}function Yl(e){try{return SR(e).mtime.toISOString()}catch{return null}}function Oo(e,t){return HF(e)?wR(e,"utf8").split(`
3
3
  `).slice(-t).join(`
4
- `):""}function Ll(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Bl(e){return new Promise(t=>setTimeout(t,e))}function re(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Gv(e){let t=null,r=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>r&&(r=o,t=n)}return t}function mf(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var M=p(()=>{"use strict";ci()});function dF(e){let t=e[yf];return t?new Set(t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean)):new Set}function pF(e,t={}){return aF.has(e)?!0:cF.has(e)||t.operatorAllow?.has(e)||uF.some(r=>e.endsWith(r))?!1:lF.some(r=>e.endsWith(r))}function di(e){let t=dF(e),r={...e};for(let n of Object.keys(r))pF(n,{operatorAllow:t})&&delete r[n];return r}var gf,aF,lF,hf,cF,uF,yf,pi=p(()=>{"use strict";gf=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],aF=new Set(gf),lF=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],hf=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],cF=new Set(hf),uF=["_PUBLIC_KEY"],yf="KYNVER_WORKER_ENV_ALLOW"});import{existsSync as fF,statSync as mF}from"node:fs";import{spawnSync as qv}from"node:child_process";function ce(e,t,r={}){let n=qv("git",t,z({cwd:e,encoding:"utf8"}));if(n.status!==0&&!r.allowFailure){let o=gF(e,t,n);if(r.throwError)throw new Error(o);lt(o)}return n.stdout||""}function gF(e,t,r){let n=typeof r.stderr=="string"&&r.stderr.trim()||typeof r.stdout=="string"&&r.stdout.trim()||r.error?.message||`exit ${r.status??"unknown"}`;return`git ${t.join(" ")} failed in ${e}: ${n}`}function hF(e){let t=e.trim();if(!t)return"git repo path is empty";let r=Me(t);if(!fF(r))return r===t?`git repo path does not exist: ${r}`:`git repo path does not exist: ${r} (from ${t})`;try{if(!mF(r).isDirectory())return`git repo path is not a directory: ${r}`}catch(n){return`git repo path is not readable: ${r} (${n.message})`}return null}function Yv(e){let t=hF(e);t&&lt(t),ce(Me(e.trim()),["rev-parse","--show-toplevel"])}function fi(e){return ce(e,["status","--short"],{allowFailure:!0}).split(`
5
- `).map(t=>t.trim()).filter(Boolean)}function ee(e,t){try{let r=qv("git",t,z({cwd:e,encoding:"utf8"}));return{status:r.status,stdout:r.stdout||"",stderr:r.stderr||"",error:r.error?r.error.message:null}}catch(r){return{status:null,stdout:"",stderr:"",error:r.message}}}function Jv(e,t,r){let n=ee(e,["merge-base","--is-ancestor",t,r]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Wl(e,t="origin/main"){let r=typeof t=="string"?{base:t}:t,n=r.baseCommit?.trim()||r.base?.trim()||"origin/main",o=r.baseCommit?.trim()||null;if(!e)return Ao(n,"missing worktree path");let s=ee(e,["rev-parse","HEAD"]);if(s.status!==0)return Ao(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=ee(e,["rev-parse",n]);if(f.status!==0)return Ao(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=Jv(e,i,a),c=Jv(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Ao(e,t,r=null){return{checked:!1,base:e,head:r,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:t}}var we=p(()=>{"use strict";at();M();pi()});import{existsSync as yF,mkdirSync as zv}from"node:fs";import{homedir as kf}from"node:os";import Po from"node:path";function Qv(e=kf()){return Po.join(e,".kynver",kF)}function Zv(e,t=kf()){return Po.resolve(e)===Po.resolve(Qv(t))}function bF(e){ee(e,["config","--get","user.email"]).status!==0&&ee(e,["config","user.email","kynver@local"]),ee(e,["config","--get","user.name"]).status!==0&&ee(e,["config","user.name","Kynver"])}function Xv(e){ee(e,["rev-parse","--verify","HEAD^{commit}"]).status!==0&&(bF(e),ee(e,["commit","--allow-empty","-m","kynver byoc workspace"]))}function eR(e=kf()){let t=Qv(e);zv(Po.dirname(t),{recursive:!0});let r=!1;yF(t)||(zv(t,{recursive:!0}),r=!0);let n=ee(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return ee(t,["init","-b","main"]),Xv(t),r=!0,{repo:Po.resolve(t),created:r};let o=Po.resolve(n.stdout.trim()||t);return Xv(o),{repo:o,created:r}}var kF,bf=p(()=>{"use strict";we();kF="workspace"});import{existsSync as Rf,readFileSync as rR}from"node:fs";import{homedir as nR}from"node:os";import ct from"node:path";import{fileURLToPath as vF}from"node:url";function wF(e){let t=ct.join(e,"package.json");if(!Rf(t))return null;try{let r=JSON.parse(rR(t,"utf8"));return typeof r.name=="string"?r.name.trim():null}catch{return null}}function oR(e){return wF(e)==="kynver"}function tR(e){let t=ct.resolve(e);if(!Rf(t))return null;let r=ee(t,["rev-parse","--show-toplevel"]);if(r.status!==0)return null;let n=r.stdout.trim();return n.length?ct.resolve(n):null}function SF(e=import.meta.url){let t=ct.dirname(vF(e));for(let r=0;r<8;r+=1){let n=ct.join(t,"package.json");if(Rf(n))try{if(JSON.parse(rR(n,"utf8")).name==="@kynver-app/runtime")return t}catch{}let o=ct.dirname(t);if(o===t)break;t=o}return null}function vf(e,t,r,n,o){if(!r)return;let s=ct.resolve(r);e.has(s)||(o?.requireMonorepo??!0)&&!oR(s)||(e.add(s),t.push({repo:s,source:n}))}function sR(e){let t=e?.cwd??process.cwd(),r=new Set,n=[];vf(r,n,tR(t),"cwd_git",{requireMonorepo:!1});let o=SF(e?.runtimeModuleUrl??import.meta.url);o&&vf(r,n,tR(o),"runtime_checkout");let s=nR();for(let a of RF)vf(r,n,Me(ct.join(s,a)),"well_known_path");let i=ct.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!oR(a.repo))return!0;let l=ct.resolve(a.repo);return i===l||i.startsWith(`${l}${ct.sep}`)})}function Ul(e){return sR(e)[0]??null}function _F(e){let t=ct.resolve(e).replace(/\\/g,"/");return t.includes("/.kynver/harness/worktrees/")||t.includes("/.openclaw/harness/worktrees/")||t.includes("/kynver-harness/")||t.includes("/openclaw/harness/worktrees/")}function Fl(e){let t=sR(e),r=t.find(o=>!_F(o.repo));if(r)return r;if(t[0])return t[0];let{repo:n}=eR(e?.home??nR());return{repo:n,source:"byoc_workspace"}}var RF,mi=p(()=>{"use strict";we();at();bf();RF=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function gi(e){let t=kn(e);try{let r=new URL(t);return r.hostname.toLowerCase()===iR?(r.hostname=`www.${iR}`,kn(r.toString())):t}catch{return t}}function or(e){if(e?.trim())return gi(kn(e.trim()))}async function ut(e,t,r=fetch){let n=gi(e),o=new Headers(t?.headers),s=0;for(;s<=aR;){let i=await r(n,{...t,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(t?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${aR} redirects for ${e}`)}var iR,aR,sr=p(()=>{"use strict";M();iR="kynver.com";aR=10});function bn(e){let t=(e??"").trim().toLowerCase();return t==="ghost"||t==="forge"||t==="box"?t:t.includes("forge")?"forge":t.includes("ghost")||t.includes("openclaw")?"ghost":"box"}function Kl(e,t){return e[t]?.trim()||null}function lR(e){let t=e?.split(":")[0]?.trim();return t?bn(t):null}function et(e=process.env,t={}){let r=[],n=lR(t.boxId),o=lR(Kl(e,"KYNVER_BOX_ID")),s=t.boxKind?.trim();if(s)return n&&n!==bn(s)&&r.push(`config.boxId=${t.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:bn(s),source:"config",slugInferenceBlocked:!1,warnings:r};let i=Kl(e,"KYNVER_BOX_KIND");if(i)return o&&o!==bn(i)&&r.push(`KYNVER_BOX_ID=${Kl(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:bn(i),source:"env",slugInferenceBlocked:!1,warnings:r};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:r};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:r};let a=Kl(e,"KYNVER_AGENT_OS_SLUG");return a&&r.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:r}}function xt(e={},t=process.env){return et(t,e).boxKind}var Le=p(()=>{"use strict"});function wf(e,t){return e==="forge"?4:Math.max(1,t)}function ir(e,t){return e==="forge"?Math.min(Math.max(1,t),4):Math.max(1,t)}function hi(e,t){return e==="forge"&&t>4}var Io=p(()=>{"use strict"});import{readFileSync as xF}from"node:fs";import cR from"node:os";function uR(e){if(e!==void 0){let t=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return t?Number(t[1])*1024:cR.freemem()}if(process.platform==="linux")try{let r=xF("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(r)return Number(r[1])*1024}catch{}return cR.freemem()}var dR=p(()=>{"use strict"});import{existsSync as CF,readFileSync as EF,statfsSync as AF}from"node:fs";function Sf(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!CF(e))continue;let t=EF(e,"utf8");if(/microsoft|wsl/i.test(t))return!0}catch{}return!1}function pR(e={}){if(!(e.forceWsl===void 0?Sf():e.forceWsl))return null;let r=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Oo,n=e.wslHostFreeWarnBytes??PF,o=e.wslHostFreeCriticalBytes??IF,s=e.statfs??AF,i;try{i=s(r)}catch(h){return{ok:!1,path:r,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${r}: ${h.message}`,probeError:h.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),g=null;return f||(g=`Windows host disk ${r} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${OF()}`),{ok:f,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:g,probeError:null}}function OF(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var PF,IF,Oo,_f=p(()=>{"use strict";PF=25*1024*1024*1024,IF=12*1024*1024*1024,Oo="/mnt/c"});import{execFileSync as fR}from"node:child_process";import{existsSync as Hl,readFileSync as mR,readdirSync as TF,statSync as NF}from"node:fs";import xf from"node:path";function $l(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function gR(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=fR("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let t=process.env.USER?.trim()||process.env.LOGNAME?.trim(),r=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Oo;return t&&Hl(xf.join(r,"Users",t))?t:null}function WF(e={}){let t=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(t)return t;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Oo,n=e.windowsUser??gR();return n?`${r.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function UF(e){let t=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!t)return{executableHint:null,signal:null,pid:null};let r=Number(t[1]),n=t[2]??"",o=Number(t[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(r)?r:null}}function FF(){try{if(Hl("/proc/sys/kernel/core_pattern"))return mR("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return fR("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function KF(e){return!!(e&&/wsl-capture-crash/i.test(e))}function $F(e,t=Oo){let r=xf.join(t,"Users",e,".wslconfig");if(!Hl(r))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=mR(r,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function HF(e){if(!Hl(e))return[];let t=TF(e,{withFileTypes:!0}),r=[];for(let n of t){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=xf.join(e,n.name);try{let s=NF(o),i=UF(n.name);r.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return r.sort((n,o)=>o.mtimeMs-n.mtimeMs),r}function To(e={}){if(!(e.forceWsl===void 0?Sf():e.forceWsl))return null;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Oo,n=e.windowsUser??gR(),o=e.warnBelowBytes??$l("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",DF),s=e.criticalBelowBytes??$l("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",MF),i=e.warnCount??$l("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",LF),a=e.criticalCount??$l("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",BF),l=(e.readCorePattern??FF)(),c=KF(l),u=null;n&&(u=(e.readWslConfig??$F)(n,r));let d=u?.maxCrashDumpCount??null,f=d===-1,m=WF({hostMount:r,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:null,probeError:"windows_user_unresolved"};let g;try{g=(e.listDumps??HF)(m)}catch(N){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:`WSL crash dump probe failed at ${m}: ${N.message}`,probeError:N.message}}let h=g.reduce((N,A)=>N+A.bytes,0),y=g.length,v=[...new Set(g.map(N=>N.executableHint).filter(N=>!!N))],k=h>=s,b=h>=o,_=y>=a,S=y>=i,w=!(k||_||b||S),L=null;if(!w){let N=k||_?"critical":"warning",A=(h/1024**3).toFixed(1),O=v.length>0?v.join(", "):"unknown";L=`WSL crash dumps ${N}: ${y} file(s), ${A} GiB at ${m} (executables: ${O}). `+jF({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:w,path:m,windowsUser:n,dumpCount:y,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:g,executables:v,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:L,probeError:null}}function jF(e={}){let t=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||t.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&t.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),t.push("More help: https://www.kynver.com/help."),t.join(" ")}var DF,MF,LF,BF,jl=p(()=>{"use strict";_f();DF=5*1024*1024*1024,MF=10*1024*1024*1024,LF=2,BF=4});import{statfsSync as VF}from"node:fs";function Br(e={}){let t=e.diskPath?.trim()||"/",r=e.diskFreeWarnBytes??GF,n=e.diskFreeCriticalBytes??JF,o=e.diskMaxUsedPercent??qF,s=e.diskHardMaxUsedPercent??YF,i=VF(t),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<r,d=a<n,f=a<r*2,m=f&&c>o,g=f&&c>s,h=!u&&!d&&!m&&!g,y=e.skipWslHostCheck?null:pR(e.wslHost),v=e.skipWslCrashDumpCheck?null:To(e.wslCrashDumps),k=h&&(y?y.ok:!0)&&(v?v.ok:!0),b=null;return k||(b=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${r} bytes`:null,g?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,y&&!y.ok?y.reason:null,v&&!v.ok?v.reason:null].filter(Boolean).join("; ")),zF({ok:k,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:r,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:b,wslHost:y,wslCrashDumps:v?{ok:v.ok,path:v.path,dumpCount:v.dumpCount,totalBytes:v.totalBytes,executables:v.executables,wslCaptureEnabled:v.wslCaptureEnabled,dumpsDisabledInWslConfig:v.dumpsDisabledInWslConfig,reason:v.reason,probeError:v.probeError}:null})}function zF(e){let t=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return t?t==="ok"||t==="open"||t==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:t==="block"||t==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var GF,JF,qF,YF,yi=p(()=>{"use strict";jl();_f();GF=30*1024*1024*1024,JF=15*1024*1024*1024,qF=80,YF=90});import{existsSync as XF,readdirSync as QF}from"node:fs";import ZF from"node:path";function Ct(e){let t=new Set;for(let n of Object.keys(e.workers||{}))t.add(B(n));let r=ZF.join(j(e.id),"workers");if(!XF(r))return[...t];for(let n of QF(r,{withFileTypes:!0}))n.isDirectory()&&t.add(B(n.name));return[...t]}var No=p(()=>{"use strict";Y();M()});function Cf(e){let t=e.trim();if(!t.startsWith("{"))return null;try{let r=JSON.parse(t);if(r&&typeof r=="object"&&!Array.isArray(r))return r}catch{return null}return null}function hR(e){let t=e.trim();if(!t)return null;let r=Cf(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let l=Cf(s[1]??"");l&&n.push(l)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let l=Cf(t.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function yR(e){let t=e.finalResult??e.final_result;if(t!=null)return typeof t=="string"?hR(t)??(t.trim()||null):t;let r=typeof e.summary=="string"?e.summary.trim():"";if(!r)return null;let n=hR(r);return n||r}var kR=p(()=>{"use strict"});import{existsSync as eK,readFileSync as tK}from"node:fs";function bR(e){return e==="complete"}function ar(e){return bR(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Ie(e){let t={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!eK(e))return t;let r=Date.now()+rK,n=new Date(r).toISOString(),o=tK(e,"utf8").split(`
6
- `).filter(Boolean);for(let s of o){let i=ui(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(t.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>r?t.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):t.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(t.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(t.lastHeartbeatSummary=String(a.summary)),bR(t.lastHeartbeatPhase)&&(t.terminalFinalResult=yR(a)),t.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(t.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(t.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return t}var rK,vn=p(()=>{"use strict";kR();M();rK=6e4});function RR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Vl(e){if(!e)return[];let t=[],r="",n,o=!1;for(let s of e){if(o){r+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:r+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){r&&(t.push(r),r="");continue}r+=s}return r&&t.push(r),t}function wR(e){let t=RR(e[0]);return!!(t&&nK.has(t))}function sK(e){let t=e.trim();return t.includes("/")?t.split("/").pop()??t:t}function iK(e){if(!e||e.includes("*"))return null;let t=sK(e);return!t||t.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(t)?t:null}function SR(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Ef(e){if(!e)return!1;let t=e.trim();return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")}function aK(e){if(!e.startsWith("--glob="))return e;let t=e.slice(7);return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")?`--glob=${t}/**`:e}function lK(e){let t=[];for(let r=1;r<e.length;r+=1){let n=e[r];if(n){if(n==="--"){t.push(...e.slice(r+1));break}if(n.startsWith("-")){if(n.includes("="))continue;vR.has(n)&&(r+=1);continue}t.push(n)}}return t}function cK(e){let t=!1,r=e.map((o,s)=>{let i=aK(o),a=e[s-1];return a&&vR.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(t=!0),i}),n=lK(r);if(n.length===2){let[o,s]=n;if(Ef(s))return{argv:[r[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=iK(s);if(i)return{argv:[r[0]??"rg","-g",i,o,"."],changed:!0}}return t&&n.length===1?{argv:[...r,"."],changed:!0}:{argv:r,changed:t}}function _R(e){for(let t=1;t<e.length;t+=1){let r=e[t];if(r&&(r==="-c"||r==="-lc"||r==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(r)))return t+1}return-1}function Gl(e){let t=e.trim();if(!t)return{command:t,wrapped:!1};let r=Vl(t);if(!r.length)return{command:t,wrapped:!1};let n=RR(r[0]);if(!n||!oK.has(n))return{command:t,wrapped:!1};let o=_R(r);if(o<0||o>=r.length)return{command:t,wrapped:!1};let s=r.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:t,wrapped:!1}}function uK(e,t){let r=e.trim(),n=Vl(r),o=_R(n);if(o<0)return t;let s=n.slice(0,o).join(" "),i=t.includes("'")?`"${t.replace(/"/g,'\\"')}"`:`'${t}'`;return`${s} ${i}`}function dK(e){let t=e.trim(),r=Gl(t),n=Vl(r.command);if(!n.length||!wR(n))return{segment:t,changed:!1};let o=cK(n);if(!o.changed)return{segment:t,changed:!1};let s=o.argv.join(" ");return r.wrapped?{segment:uK(t,s),changed:!0}:{segment:s,changed:!0}}function Af(e){let t=e.trim();if(!t)return{command:t,changed:!1};let r=t.includes("&&")?" && ":t.includes("||")?" || ":"; ",n=t.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=dK(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(r),changed:!0}:{command:t,changed:!1}}function xR(e){let t=Gl(e).command,r=Vl(t.trim());return r.length&&wR(r)?!0:/\b(rg|ripgrep)\b/i.test(t)}function CR(e){if(!e)return{};let t=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(t)return{pattern:t[1],target:t[2]?.trim()};let r=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return r?{pattern:r[1],target:r[2]?.trim()}:{}}function pK(e){let{pattern:t,target:r}=CR(e);return t?Ef(r)?{kind:"rg_exclude_syntax",pattern:t,target:r}:SR(r)?{kind:"bad_scope",pattern:t,target:r}:{kind:"not_repo_search",pattern:t,target:r}:{kind:"not_repo_search"}}function fK(e){let{pattern:t,target:r}=CR(e);if(!t)return null;if(Ef(r)){let n=`${r.trim()}/**`;return{command:`rg "${t}" -g '${n}' .`,changed:!0}}return r&&SR(r)?{command:`rg -g ${r} "${t}" .`,changed:!0}:null}function mK(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let t=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${t}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function gK(e){let t=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return t?`search "${t[1]}" in ${t[2]?.trim()}`:null}function Pf(e){let t=e.meta?.trim()||(e.command?gK(e.command):null)||null;if(t){let r=pK(t),n=mK(r);if(n)return n;let o=fK(t);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let r=Af(e.command);if(r.changed)return`Ripgrep scope may be invalid. Retry with: \`${r.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var nK,oK,vR,ER=p(()=>{"use strict";nK=new Set(["rg","ripgrep","grep"]),oK=new Set(["bash","sh","dash","zsh"]),vR=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function ki(e,t=200){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function kK(e){let t=e.trim();if(!t)return null;if(t.startsWith("{"))try{return JSON.parse(t)}catch{}let r=t.indexOf("{"),n=t.lastIndexOf("}");if(r>=0&&n>r)try{return JSON.parse(t.slice(r,n+1))}catch{return null}return null}function bi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function bK(e){let t=e.metadata;if(!bi(t))return null;let r=t.vulnerabilities;if(!bi(r))return null;let n=s=>typeof r[s]=="number"?r[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof r.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function vK(e){let t=[];e.critical&&t.push(`${e.critical} critical`),e.high&&t.push(`${e.high} high`),e.moderate&&t.push(`${e.moderate} moderate`),e.low&&t.push(`${e.low} low`),e.info&&t.push(`${e.info} info`);let r=t.length?t.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${r}) \u2014 remediation required`}function RK(e,t){let r=e.error;if(bi(r)){let s=typeof r.summary=="string"?r.summary.trim():"",i=typeof r.code=="string"?r.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=t.trim();return o?ki(o.split(`
7
- `).find(Boolean)??o,160):"npm audit failed"}function wK(e){let t=`${e.stdout}
8
- ${e.stderr}`.trim(),r=kK(t);if(!r||!bi(r)){let o=ki(t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(bi(r.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${RK(r,e.stderr)}`};let n=bK(r);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:vK(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function SK(e){return hK.test(e)}function _K(e){let t=Gl(e).command;return AR.test(e)||AR.test(t)||xR(e)}function xK(e){let t=Pf({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&yK.test(n)){let i=ki(n,160);return{kind:"command_failure",exitCode:1,summary:t??`ripgrep failed (exit 1): ${i}`}}let o=Af(e.command),s=o.changed&&!t?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:t??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let r=ki(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:t??`ripgrep failed (exit ${e.exitCode}): ${r}`}}function PR(e){let t=e.stdout??"",r=e.stderr??"",n=e.interleavedOutput??"";if(SK(e.command)){let i=t.trim()||n.trim()||r.trim();return wK({exitCode:e.exitCode,stdout:i,stderr:r})}if(_K(e.command))return xK({command:e.command,exitCode:e.exitCode,stdout:t,stderr:r,interleaved:n});let o=Pf({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=ki(n||t||r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var hK,AR,yK,IR=p(()=>{"use strict";ER();hK=/\bnpm\s+audit\b/i,AR=/\b(rg|ripgrep)\b/i,yK=/\b(error|invalid|unknown|panic|not found)\b/i});function vi(e){return typeof e=="string"&&CK.test(e.trim())}function Jl(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.is_error===!0||t.providerTerminalError===!0||typeof t.subtype=="string"&&/^error(?:_|$)/.test(t.subtype)}var CK,ql=p(()=>{"use strict";CK=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function If(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function EK(e){if(!e)return;let t=typeof e.input_tokens=="number"?e.input_tokens:void 0,r=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((t===void 0||t<0)&&(r===void 0||r<0)))return{...t!==void 0&&t>=0?{inputTokens:t}:{},...r!==void 0&&r>=0?{outputTokens:r}:{}}}function Yl(e){if(e.event==="step_update"&&If(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!If(e.result))return null;let t=e.result,r=typeof t.status=="string"?t.status.toUpperCase():"";if(r!=="SUCCESS"&&r!=="ERROR")return null;let n=If(t.usage)?EK(t.usage):void 0;if(r==="ERROR"){let s=typeof t.error=="string"&&t.error.trim()?t.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof t.response=="string"?t.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var Of=p(()=>{"use strict"});function Tf(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function OR(){return{assistantText:""}}function AK(e,t){if(!(t.role!=="assistant"||typeof t.content!="string")){if(t.delta===!0){e.assistantText+=t.content;return}e.assistantText=t.content}}function PK(e){let t=typeof e.input_tokens=="number"?e.input_tokens:void 0,r=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(Tf(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(t===void 0&&r===void 0&&!o))return{...t!==void 0&&t>=0?{inputTokens:t}:{},...r!==void 0&&r>=0?{outputTokens:r}:{},...o?{model:o}:{}}}function IK(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function TR(e,t){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return AK(t,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!IK(e))return null;let r=Tf(e.stats)?PK(e.stats):void 0;if(e.status==="error"){let o=Tf(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...r?{usage:r}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=t.assistantText.trim();return{...r?{usage:r}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var NR=p(()=>{"use strict"});import{existsSync as OK,readFileSync as TK}from"node:fs";function NK(e){let t=e.timestamp_ms;return e.timestamp||e.ts||(t?new Date(t).toISOString():void 0)}function DK(e){if(!e)return null;for(let t of Object.keys(e))if(t.endsWith("ToolCall")){let r=t.slice(0,-8);return r.length?r:t}return null}function MK(e,t){e.finalResult=t.result||t.subtype||t.terminal_reason||"completed",Jl(t)&&(e.providerTerminalError=!0,e.error=String(t.result||t.api_error_status||"stream result error"))}function Do(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function LK(e){let t=e.usage;return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function BK(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let t=e.modelUsage;if(t&&typeof t=="object"&&!Array.isArray(t)){let r=Object.keys(t)[0];if(r?.trim())return r.trim()}}function WK(e,t){let r=LK(t);if(!r)return;let n=Do(r.input_tokens)??Do(r.inputTokens)??Do(r.prompt_tokens),o=Do(r.output_tokens)??Do(r.outputTokens)??Do(r.completion_tokens);if(n===void 0&&o===void 0)return;let s=BK(t)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function UK(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let r=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!r||typeof r!="object"||Array.isArray(r))return null;let n=r,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function FK(e,t){t.kind==="success"||t.kind==="search_no_matches"||(e.lastShellOutcome=t)}function Rn(e){let t={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!OK(e))return t;let r=TK(e,"utf8").split(`
9
- `).filter(Boolean),n=null,o=OR();for(let s of r){let i=ui(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,t.finalResult=null),i.type==="item.completed"){let f=i.item;if(f&&typeof f=="object"&&!Array.isArray(f)){let m=f;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!t.providerTerminalError&&(t.finalResult=n,n=null);let a=NK(i);if(a&&(t.firstEventAt||=a,t.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let f=i.event.content_block;f?.type==="tool_use"&&(t.currentTool=String(f.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let f=i.message.content;if(Array.isArray(f)){let m=f.find(g=>g?.type==="tool_use");m&&(t.currentTool=String(m.name||t.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let f=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=DK(f);m&&(t.currentTool=m)}let l=UK(i);l&&FK(t,PR({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=Yl(i),u=c?null:TR(i,o),d=c??u;if(d?.currentTool&&(t.currentTool=d.currentTool),d?.usage&&(t.usage={...t.usage??{},...d.usage}),d?.terminal?d.terminal.ok?t.finalResult=d.terminal.finalResult:(t.finalResult=null,t.providerTerminalError=!0,t.error=d.terminal.error):i.type==="result"&&MK(t,i),i.type==="turn.failed"){n=null,t.finalResult=null,t.providerTerminalError=!0;let f=i.error;t.error=typeof f?.message=="string"?f.message:"provider turn failed"}WK(t,i)}return t}var Ri=p(()=>{"use strict";IR();M();ql();Of();NR()});import{accessSync as KK,constants as $K,existsSync as HK,readFileSync as jK}from"node:fs";import Nf from"node:path";function MR(e){return Nf.join(e,VK)}function GK(e=process.env,t=process.platform){if(t==="win32")return!1;let r=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(r==="0"||r==="false"||r==="off")}function DR(e){try{return KK(e,$K.X_OK),!0}catch{return!1}}function JK(e,t=process.env){if(!e)return!1;if(e.includes("/"))return DR(e);for(let r of(t.PATH??"").split(Nf.delimiter))if(r&&DR(Nf.join(r,e)))return!0;return!1}function tt(e,t,r,n={}){let o=n.env??process.env;return!r||!GK(o,n.platform)?[e,t]:JK(e,o)?[n.nodeExecutable??process.execPath,["-e",qK,MR(r),e,...t]]:[e,t]}function YK(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function zl(e){if(!e)return null;let t=MR(e);if(!HK(t))return null;try{let r=JSON.parse(jK(t,"utf8")),n=r.oomEvidence;return{exitCode:YK(r.exitCode),signal:typeof r.signal=="string"&&r.signal?r.signal:null,...typeof r.startedAt=="string"?{startedAt:r.startedAt}:{},...typeof r.endedAt=="string"?{endedAt:r.endedAt}:{},...typeof r.childPid=="number"?{childPid:r.childPid}:{},...typeof r.spawnError=="string"?{spawnError:r.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function LR(e){if(!e)return null;let t=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${t}`:e.exitCode===null?null:`exited with code ${e.exitCode}${t}`}var VK,qK,lr=p(()=>{"use strict";VK="exit.json";qK=String.raw`"use strict";
4
+ `):""}function zl(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Xl(e){return new Promise(t=>setTimeout(t,e))}function oe(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function _R(e){let t=null,r=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>r&&(r=o,t=n)}return t}function Bf(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var M=p(()=>{"use strict";ki()});function e$(e){let t=e[Ff];return t?new Set(t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean)):new Set}function t$(e,t={}){return zF.has(e)?!0:QF.has(e)||t.operatorAllow?.has(e)||ZF.some(r=>e.endsWith(r))?!1:XF.some(r=>e.endsWith(r))}function vi(e){let t=e$(e),r={...e};for(let n of Object.keys(r))t$(n,{operatorAllow:t})&&delete r[n];return r}var Uf,zF,XF,Wf,QF,ZF,Ff,Ri=p(()=>{"use strict";Uf=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],zF=new Set(Uf),XF=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],Wf=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],QF=new Set(Wf),ZF=["_PUBLIC_KEY"],Ff="KYNVER_WORKER_ENV_ALLOW"});import{existsSync as r$,statSync as n$}from"node:fs";import{spawnSync as CR}from"node:child_process";function ue(e,t,r={}){let n=CR("git",t,Z({cwd:e,encoding:"utf8"}));if(n.status!==0&&!r.allowFailure){let o=o$(e,t,n);if(r.throwError)throw new Error(o);ut(o)}return n.stdout||""}function o$(e,t,r){let n=typeof r.stderr=="string"&&r.stderr.trim()||typeof r.stdout=="string"&&r.stdout.trim()||r.error?.message||`exit ${r.status??"unknown"}`;return`git ${t.join(" ")} failed in ${e}: ${n}`}function s$(e){let t=e.trim();if(!t)return"git repo path is empty";let r=Be(t);if(!r$(r))return r===t?`git repo path does not exist: ${r}`:`git repo path does not exist: ${r} (from ${t})`;try{if(!n$(r).isDirectory())return`git repo path is not a directory: ${r}`}catch(n){return`git repo path is not readable: ${r} (${n.message})`}return null}function ER(e){let t=s$(e);t&&ut(t),ue(Be(e.trim()),["rev-parse","--show-toplevel"])}function wi(e){return ue(e,["status","--short"],{allowFailure:!0}).split(`
5
+ `).map(t=>t.trim()).filter(Boolean)}function re(e,t){try{let r=CR("git",t,Z({cwd:e,encoding:"utf8"}));return{status:r.status,stdout:r.stdout||"",stderr:r.stderr||"",error:r.error?r.error.message:null}}catch(r){return{status:null,stdout:"",stderr:"",error:r.message}}}function xR(e,t,r){let n=re(e,["merge-base","--is-ancestor",t,r]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Ql(e,t="origin/main"){let r=typeof t=="string"?{base:t}:t,n=r.baseCommit?.trim()||r.base?.trim()||"origin/main",o=r.baseCommit?.trim()||null;if(!e)return To(n,"missing worktree path");let s=re(e,["rev-parse","HEAD"]);if(s.status!==0)return To(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=re(e,["rev-parse",n]);if(f.status!==0)return To(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=xR(e,i,a),c=xR(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function To(e,t,r=null){return{checked:!1,base:e,head:r,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:t}}var _e=p(()=>{"use strict";ct();M();Ri()});import{existsSync as i$,mkdirSync as AR}from"node:fs";import{homedir as $f}from"node:os";import No from"node:path";function PR(e=$f()){return No.join(e,".kynver",a$)}function OR(e,t=$f()){return No.resolve(e)===No.resolve(PR(t))}function l$(e){re(e,["config","--get","user.email"]).status!==0&&re(e,["config","user.email","kynver@local"]),re(e,["config","--get","user.name"]).status!==0&&re(e,["config","user.name","Kynver"])}function IR(e){re(e,["rev-parse","--verify","HEAD^{commit}"]).status!==0&&(l$(e),re(e,["commit","--allow-empty","-m","kynver byoc workspace"]))}function TR(e=$f()){let t=PR(e);AR(No.dirname(t),{recursive:!0});let r=!1;i$(t)||(AR(t,{recursive:!0}),r=!0);let n=re(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return re(t,["init","-b","main"]),IR(t),r=!0,{repo:No.resolve(t),created:r};let o=No.resolve(n.stdout.trim()||t);return IR(o),{repo:o,created:r}}var a$,Kf=p(()=>{"use strict";_e();a$="workspace"});import{existsSync as jf,readFileSync as DR}from"node:fs";import{homedir as MR}from"node:os";import dt from"node:path";import{fileURLToPath as c$}from"node:url";function d$(e){let t=dt.join(e,"package.json");if(!jf(t))return null;try{let r=JSON.parse(DR(t,"utf8"));return typeof r.name=="string"?r.name.trim():null}catch{return null}}function LR(e){return d$(e)==="kynver"}function NR(e){let t=dt.resolve(e);if(!jf(t))return null;let r=re(t,["rev-parse","--show-toplevel"]);if(r.status!==0)return null;let n=r.stdout.trim();return n.length?dt.resolve(n):null}function p$(e=import.meta.url){let t=dt.dirname(c$(e));for(let r=0;r<8;r+=1){let n=dt.join(t,"package.json");if(jf(n))try{if(JSON.parse(DR(n,"utf8")).name==="@kynver-app/runtime")return t}catch{}let o=dt.dirname(t);if(o===t)break;t=o}return null}function Hf(e,t,r,n,o){if(!r)return;let s=dt.resolve(r);e.has(s)||(o?.requireMonorepo??!0)&&!LR(s)||(e.add(s),t.push({repo:s,source:n}))}function BR(e){let t=e?.cwd??process.cwd(),r=new Set,n=[];Hf(r,n,NR(t),"cwd_git",{requireMonorepo:!1});let o=p$(e?.runtimeModuleUrl??import.meta.url);o&&Hf(r,n,NR(o),"runtime_checkout");let s=MR();for(let a of u$)Hf(r,n,Be(dt.join(s,a)),"well_known_path");let i=dt.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!LR(a.repo))return!0;let l=dt.resolve(a.repo);return i===l||i.startsWith(`${l}${dt.sep}`)})}function Zl(e){return BR(e)[0]??null}function f$(e){let t=dt.resolve(e).replace(/\\/g,"/");return t.includes("/.kynver/harness/worktrees/")||t.includes("/.openclaw/harness/worktrees/")||t.includes("/kynver-harness/")||t.includes("/openclaw/harness/worktrees/")}function ec(e){let t=BR(e),r=t.find(o=>!f$(o.repo));if(r)return r;if(t[0])return t[0];let{repo:n}=TR(e?.home??MR());return{repo:n,source:"byoc_workspace"}}var u$,Si=p(()=>{"use strict";_e();ct();Kf();u$=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function _i(e){let t=Sn(e);try{let r=new URL(t);return r.hostname.toLowerCase()===UR?(r.hostname=`www.${UR}`,Sn(r.toString())):t}catch{return t}}function sr(e){if(e?.trim())return _i(Sn(e.trim()))}async function pt(e,t,r=fetch){let n=_i(e),o=new Headers(t?.headers),s=0;for(;s<=WR;){let i=await r(n,{...t,headers:o,redirect:"manual"});if(![301,302,303,307,308].includes(i.status))return i;let a=i.headers.get("location");if(!a)return i;let l=new URL(a,n);if(l.origin!==new URL(n).origin||l.username||l.password)throw await i.body?.cancel(),new Error("kynver API fetch refused unsafe redirect (origin change or embedded credentials)");let c=(t?.method??"GET").toUpperCase();if(!["GET","HEAD"].includes(c)&&i.status!==307&&i.status!==308)return i;await i.body?.cancel(),n=l.toString(),s+=1}throw new Error(`kynver API fetch exceeded ${WR} redirects for ${e}`)}var UR,WR,ir=p(()=>{"use strict";M();UR="kynver.com";WR=10});function _n(e){let t=(e??"").trim().toLowerCase();return t==="ghost"||t==="forge"||t==="box"?t:t.includes("forge")?"forge":t.includes("ghost")||t.includes("openclaw")?"ghost":"box"}function tc(e,t){return e[t]?.trim()||null}function FR(e){let t=e?.split(":")[0]?.trim();return t?_n(t):null}function rt(e=process.env,t={}){let r=[],n=FR(t.boxId),o=FR(tc(e,"KYNVER_BOX_ID")),s=t.boxKind?.trim();if(s)return n&&n!==_n(s)&&r.push(`config.boxId=${t.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:_n(s),source:"config",slugInferenceBlocked:!1,warnings:r};let i=tc(e,"KYNVER_BOX_KIND");if(i)return o&&o!==_n(i)&&r.push(`KYNVER_BOX_ID=${tc(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:_n(i),source:"env",slugInferenceBlocked:!1,warnings:r};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:r};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:r};let a=tc(e,"KYNVER_AGENT_OS_SLUG");return a&&r.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:r}}function Ct(e={},t=process.env){return rt(t,e).boxKind}var Ue=p(()=>{"use strict"});function Vf(e,t){return e==="forge"?4:Math.max(1,t)}function ar(e,t){return e==="forge"?Math.min(Math.max(1,t),4):Math.max(1,t)}function xi(e,t){return e==="forge"&&t>4}var Do=p(()=>{"use strict"});import{readFileSync as m$}from"node:fs";import $R from"node:os";function KR(e){if(e!==void 0){let t=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return t?Number(t[1])*1024:$R.freemem()}if(process.platform==="linux")try{let r=m$("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(r)return Number(r[1])*1024}catch{}return $R.freemem()}var HR=p(()=>{"use strict"});import{existsSync as g$,readFileSync as h$,statfsSync as y$}from"node:fs";function Gf(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!g$(e))continue;let t=h$(e,"utf8");if(/microsoft|wsl/i.test(t))return!0}catch{}return!1}function jR(e={}){if(!(e.forceWsl===void 0?Gf():e.forceWsl))return null;let r=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Mo,n=e.wslHostFreeWarnBytes??k$,o=e.wslHostFreeCriticalBytes??b$,s=e.statfs??y$,i;try{i=s(r)}catch(h){return{ok:!1,path:r,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${r}: ${h.message}`,probeError:h.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),g=null;return f||(g=`Windows host disk ${r} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${v$()}`),{ok:f,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:g,probeError:null}}function v$(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var k$,b$,Mo,Jf=p(()=>{"use strict";k$=25*1024*1024*1024,b$=12*1024*1024*1024,Mo="/mnt/c"});import{execFileSync as VR}from"node:child_process";import{existsSync as nc,readFileSync as GR,readdirSync as R$,statSync as w$}from"node:fs";import qf from"node:path";function rc(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function JR(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=VR("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let t=process.env.USER?.trim()||process.env.LOGNAME?.trim(),r=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Mo;return t&&nc(qf.join(r,"Users",t))?t:null}function E$(e={}){let t=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(t)return t;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Mo,n=e.windowsUser??JR();return n?`${r.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function A$(e){let t=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!t)return{executableHint:null,signal:null,pid:null};let r=Number(t[1]),n=t[2]??"",o=Number(t[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(r)?r:null}}function I$(){try{if(nc("/proc/sys/kernel/core_pattern"))return GR("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return VR("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function P$(e){return!!(e&&/wsl-capture-crash/i.test(e))}function O$(e,t=Mo){let r=qf.join(t,"Users",e,".wslconfig");if(!nc(r))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=GR(r,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let l=a.indexOf("=");if(l<0)continue;let c=a.slice(0,l).trim().toLowerCase(),u=a.slice(l+1).trim();if(c==="maxcrashdumpcount"){let d=Number(u);o=Number.isFinite(d)?d:null}else c==="crashdumpfolder"&&(s=u.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function T$(e){if(!nc(e))return[];let t=R$(e,{withFileTypes:!0}),r=[];for(let n of t){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=qf.join(e,n.name);try{let s=w$(o),i=A$(n.name);r.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return r.sort((n,o)=>o.mtimeMs-n.mtimeMs),r}function Lo(e={}){if(!(e.forceWsl===void 0?Gf():e.forceWsl))return null;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Mo,n=e.windowsUser??JR(),o=e.warnBelowBytes??rc("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",S$),s=e.criticalBelowBytes??rc("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",_$),i=e.warnCount??rc("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",x$),a=e.criticalCount??rc("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",C$),l=(e.readCorePattern??I$)(),c=P$(l),u=null;n&&(u=(e.readWslConfig??O$)(n,r));let d=u?.maxCrashDumpCount??null,f=d===-1,m=E$({hostMount:r,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!m)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:null,probeError:"windows_user_unresolved"};let g;try{g=(e.listDumps??T$)(m)}catch(j){return{ok:!1,path:m,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:`WSL crash dump probe failed at ${m}: ${j.message}`,probeError:j.message}}let h=g.reduce((j,O)=>j+O.bytes,0),y=g.length,b=[...new Set(g.map(j=>j.executableHint).filter(j=>!!j))],k=h>=s,v=h>=o,S=y>=a,_=y>=i,w=!(k||S||v||_),B=null;if(!w){let j=k||S?"critical":"warning",O=(h/1024**3).toFixed(1),T=b.length>0?b.join(", "):"unknown";B=`WSL crash dumps ${j}: ${y} file(s), ${O} GiB at ${m} (executables: ${T}). `+N$({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:w,path:m,windowsUser:n,dumpCount:y,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:g,executables:b,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:f,reason:B,probeError:null}}function N$(e={}){let t=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||t.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&t.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),t.push("More help: https://www.kynver.com/help."),t.join(" ")}var S$,_$,x$,C$,oc=p(()=>{"use strict";Jf();S$=5*1024*1024*1024,_$=10*1024*1024*1024,x$=2,C$=4});import{statfsSync as D$}from"node:fs";function $r(e={}){let t=e.diskPath?.trim()||"/",r=e.diskFreeWarnBytes??M$,n=e.diskFreeCriticalBytes??L$,o=e.diskMaxUsedPercent??B$,s=e.diskHardMaxUsedPercent??U$,i=D$(t),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<r,d=a<n,f=a<r*2,m=f&&c>o,g=f&&c>s,h=!u&&!d&&!m&&!g,y=e.skipWslHostCheck?null:jR(e.wslHost),b=e.skipWslCrashDumpCheck?null:Lo(e.wslCrashDumps),k=h&&(y?y.ok:!0)&&(b?b.ok:!0),v=null;return k||(v=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${r} bytes`:null,g?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,y&&!y.ok?y.reason:null,b&&!b.ok?b.reason:null].filter(Boolean).join("; ")),W$({ok:k,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:r,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:v,wslHost:y,wslCrashDumps:b?{ok:b.ok,path:b.path,dumpCount:b.dumpCount,totalBytes:b.totalBytes,executables:b.executables,wslCaptureEnabled:b.wslCaptureEnabled,dumpsDisabledInWslConfig:b.dumpsDisabledInWslConfig,reason:b.reason,probeError:b.probeError}:null})}function W$(e){let t=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return t?t==="ok"||t==="open"||t==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:t==="block"||t==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var M$,L$,B$,U$,Ci=p(()=>{"use strict";oc();Jf();M$=30*1024*1024*1024,L$=15*1024*1024*1024,B$=80,U$=90});import{existsSync as F$,readdirSync as $$}from"node:fs";import K$ from"node:path";function Et(e){let t=new Set;for(let n of Object.keys(e.workers||{}))t.add(L(n));let r=K$.join(q(e.id),"workers");if(!F$(r))return[...t];for(let n of $$(r,{withFileTypes:!0}))n.isDirectory()&&t.add(L(n.name));return[...t]}var Bo=p(()=>{"use strict";Q();M()});function Yf(e){let t=e.trim();if(!t.startsWith("{"))return null;try{let r=JSON.parse(t);if(r&&typeof r=="object"&&!Array.isArray(r))return r}catch{return null}return null}function qR(e){let t=e.trim();if(!t)return null;let r=Yf(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let l=Yf(s[1]??"");l&&n.push(l)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let l=Yf(t.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function YR(e){let t=e.finalResult??e.final_result;if(t!=null)return typeof t=="string"?qR(t)??(t.trim()||null):t;let r=typeof e.summary=="string"?e.summary.trim():"";if(!r)return null;let n=qR(r);return n||r}var zR=p(()=>{"use strict"});import{existsSync as H$,readFileSync as j$}from"node:fs";function XR(e){return e==="complete"}function lr(e){return XR(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Oe(e){let t={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!H$(e))return t;let r=Date.now()+V$,n=new Date(r).toISOString(),o=j$(e,"utf8").split(`
6
+ `).filter(Boolean);for(let s of o){let i=bi(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(t.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>r?t.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):t.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(t.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(t.lastHeartbeatSummary=String(a.summary)),XR(t.lastHeartbeatPhase)&&(t.terminalFinalResult=YR(a)),t.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(t.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(t.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return t}var V$,xn=p(()=>{"use strict";zR();M();V$=6e4});function ZR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function sc(e){if(!e)return[];let t=[],r="",n,o=!1;for(let s of e){if(o){r+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:r+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){r&&(t.push(r),r="");continue}r+=s}return r&&t.push(r),t}function ew(e){let t=ZR(e[0]);return!!(t&&G$.has(t))}function q$(e){let t=e.trim();return t.includes("/")?t.split("/").pop()??t:t}function Y$(e){if(!e||e.includes("*"))return null;let t=q$(e);return!t||t.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(t)?t:null}function tw(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function zf(e){if(!e)return!1;let t=e.trim();return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")}function z$(e){if(!e.startsWith("--glob="))return e;let t=e.slice(7);return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")?`--glob=${t}/**`:e}function X$(e){let t=[];for(let r=1;r<e.length;r+=1){let n=e[r];if(n){if(n==="--"){t.push(...e.slice(r+1));break}if(n.startsWith("-")){if(n.includes("="))continue;QR.has(n)&&(r+=1);continue}t.push(n)}}return t}function Q$(e){let t=!1,r=e.map((o,s)=>{let i=z$(o),a=e[s-1];return a&&QR.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(t=!0),i}),n=X$(r);if(n.length===2){let[o,s]=n;if(zf(s))return{argv:[r[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Y$(s);if(i)return{argv:[r[0]??"rg","-g",i,o,"."],changed:!0}}return t&&n.length===1?{argv:[...r,"."],changed:!0}:{argv:r,changed:t}}function rw(e){for(let t=1;t<e.length;t+=1){let r=e[t];if(r&&(r==="-c"||r==="-lc"||r==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(r)))return t+1}return-1}function ic(e){let t=e.trim();if(!t)return{command:t,wrapped:!1};let r=sc(t);if(!r.length)return{command:t,wrapped:!1};let n=ZR(r[0]);if(!n||!J$.has(n))return{command:t,wrapped:!1};let o=rw(r);if(o<0||o>=r.length)return{command:t,wrapped:!1};let s=r.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:t,wrapped:!1}}function Z$(e,t){let r=e.trim(),n=sc(r),o=rw(n);if(o<0)return t;let s=n.slice(0,o).join(" "),i=t.includes("'")?`"${t.replace(/"/g,'\\"')}"`:`'${t}'`;return`${s} ${i}`}function eK(e){let t=e.trim(),r=ic(t),n=sc(r.command);if(!n.length||!ew(n))return{segment:t,changed:!1};let o=Q$(n);if(!o.changed)return{segment:t,changed:!1};let s=o.argv.join(" ");return r.wrapped?{segment:Z$(t,s),changed:!0}:{segment:s,changed:!0}}function Xf(e){let t=e.trim();if(!t)return{command:t,changed:!1};let r=t.includes("&&")?" && ":t.includes("||")?" || ":"; ",n=t.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=eK(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(r),changed:!0}:{command:t,changed:!1}}function nw(e){let t=ic(e).command,r=sc(t.trim());return r.length&&ew(r)?!0:/\b(rg|ripgrep)\b/i.test(t)}function ow(e){if(!e)return{};let t=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(t)return{pattern:t[1],target:t[2]?.trim()};let r=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return r?{pattern:r[1],target:r[2]?.trim()}:{}}function tK(e){let{pattern:t,target:r}=ow(e);return t?zf(r)?{kind:"rg_exclude_syntax",pattern:t,target:r}:tw(r)?{kind:"bad_scope",pattern:t,target:r}:{kind:"not_repo_search",pattern:t,target:r}:{kind:"not_repo_search"}}function rK(e){let{pattern:t,target:r}=ow(e);if(!t)return null;if(zf(r)){let n=`${r.trim()}/**`;return{command:`rg "${t}" -g '${n}' .`,changed:!0}}return r&&tw(r)?{command:`rg -g ${r} "${t}" .`,changed:!0}:null}function nK(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let t=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${t}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function oK(e){let t=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return t?`search "${t[1]}" in ${t[2]?.trim()}`:null}function Qf(e){let t=e.meta?.trim()||(e.command?oK(e.command):null)||null;if(t){let r=tK(t),n=nK(r);if(n)return n;let o=rK(t);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let r=Xf(e.command);if(r.changed)return`Ripgrep scope may be invalid. Retry with: \`${r.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var G$,J$,QR,sw=p(()=>{"use strict";G$=new Set(["rg","ripgrep","grep"]),J$=new Set(["bash","sh","dash","zsh"]),QR=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Ei(e,t=200){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function aK(e){let t=e.trim();if(!t)return null;if(t.startsWith("{"))try{return JSON.parse(t)}catch{}let r=t.indexOf("{"),n=t.lastIndexOf("}");if(r>=0&&n>r)try{return JSON.parse(t.slice(r,n+1))}catch{return null}return null}function Ai(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function lK(e){let t=e.metadata;if(!Ai(t))return null;let r=t.vulnerabilities;if(!Ai(r))return null;let n=s=>typeof r[s]=="number"?r[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof r.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function cK(e){let t=[];e.critical&&t.push(`${e.critical} critical`),e.high&&t.push(`${e.high} high`),e.moderate&&t.push(`${e.moderate} moderate`),e.low&&t.push(`${e.low} low`),e.info&&t.push(`${e.info} info`);let r=t.length?t.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${r}) \u2014 remediation required`}function uK(e,t){let r=e.error;if(Ai(r)){let s=typeof r.summary=="string"?r.summary.trim():"",i=typeof r.code=="string"?r.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=t.trim();return o?Ei(o.split(`
7
+ `).find(Boolean)??o,160):"npm audit failed"}function dK(e){let t=`${e.stdout}
8
+ ${e.stderr}`.trim(),r=aK(t);if(!r||!Ai(r)){let o=Ei(t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Ai(r.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${uK(r,e.stderr)}`};let n=lK(r);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:cK(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function pK(e){return sK.test(e)}function fK(e){let t=ic(e).command;return iw.test(e)||iw.test(t)||nw(e)}function mK(e){let t=Qf({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&iK.test(n)){let i=Ei(n,160);return{kind:"command_failure",exitCode:1,summary:t??`ripgrep failed (exit 1): ${i}`}}let o=Xf(e.command),s=o.changed&&!t?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:t??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let r=Ei(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:t??`ripgrep failed (exit ${e.exitCode}): ${r}`}}function aw(e){let t=e.stdout??"",r=e.stderr??"",n=e.interleavedOutput??"";if(pK(e.command)){let i=t.trim()||n.trim()||r.trim();return dK({exitCode:e.exitCode,stdout:i,stderr:r})}if(fK(e.command))return mK({command:e.command,exitCode:e.exitCode,stdout:t,stderr:r,interleaved:n});let o=Qf({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Ei(n||t||r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var sK,iw,iK,lw=p(()=>{"use strict";sw();sK=/\bnpm\s+audit\b/i,iw=/\b(rg|ripgrep)\b/i,iK=/\b(error|invalid|unknown|panic|not found)\b/i});function Ii(e){return typeof e=="string"&&gK.test(e.trim())}function ac(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.is_error===!0||t.providerTerminalError===!0||typeof t.subtype=="string"&&/^error(?:_|$)/.test(t.subtype)}var gK,lc=p(()=>{"use strict";gK=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function Zf(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function hK(e){if(!e)return;let t=typeof e.input_tokens=="number"?e.input_tokens:void 0,r=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((t===void 0||t<0)&&(r===void 0||r<0)))return{...t!==void 0&&t>=0?{inputTokens:t}:{},...r!==void 0&&r>=0?{outputTokens:r}:{}}}function cc(e){if(e.event==="step_update"&&Zf(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!Zf(e.result))return null;let t=e.result,r=typeof t.status=="string"?t.status.toUpperCase():"";if(r!=="SUCCESS"&&r!=="ERROR")return null;let n=Zf(t.usage)?hK(t.usage):void 0;if(r==="ERROR"){let s=typeof t.error=="string"&&t.error.trim()?t.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof t.response=="string"?t.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var em=p(()=>{"use strict"});function tm(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function cw(){return{assistantText:""}}function yK(e,t){if(!(t.role!=="assistant"||typeof t.content!="string")){if(t.delta===!0){e.assistantText+=t.content;return}e.assistantText=t.content}}function kK(e){let t=typeof e.input_tokens=="number"?e.input_tokens:void 0,r=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(tm(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(t===void 0&&r===void 0&&!o))return{...t!==void 0&&t>=0?{inputTokens:t}:{},...r!==void 0&&r>=0?{outputTokens:r}:{},...o?{model:o}:{}}}function bK(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function uw(e,t){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return yK(t,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!bK(e))return null;let r=tm(e.stats)?kK(e.stats):void 0;if(e.status==="error"){let o=tm(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...r?{usage:r}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=t.assistantText.trim();return{...r?{usage:r}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var dw=p(()=>{"use strict"});import{existsSync as vK,readFileSync as RK}from"node:fs";function wK(e){let t=e.timestamp_ms;return e.timestamp||e.ts||(t?new Date(t).toISOString():void 0)}function SK(e){if(!e)return null;for(let t of Object.keys(e))if(t.endsWith("ToolCall")){let r=t.slice(0,-8);return r.length?r:t}return null}function _K(e,t){e.finalResult=t.result||t.subtype||t.terminal_reason||"completed",ac(t)&&(e.providerTerminalError=!0,e.error=String(t.result||t.api_error_status||"stream result error"))}function Uo(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function xK(e){let t=e.usage;return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function CK(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let t=e.modelUsage;if(t&&typeof t=="object"&&!Array.isArray(t)){let r=Object.keys(t)[0];if(r?.trim())return r.trim()}}function EK(e,t){let r=xK(t);if(!r)return;let n=Uo(r.input_tokens)??Uo(r.inputTokens)??Uo(r.prompt_tokens),o=Uo(r.output_tokens)??Uo(r.outputTokens)??Uo(r.completion_tokens);if(n===void 0&&o===void 0)return;let s=CK(t)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function AK(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let r=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!r||typeof r!="object"||Array.isArray(r))return null;let n=r,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function IK(e,t){t.kind==="success"||t.kind==="search_no_matches"||(e.lastShellOutcome=t)}function Cn(e){let t={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!vK(e))return t;let r=RK(e,"utf8").split(`
9
+ `).filter(Boolean),n=null,o=cw();for(let s of r){let i=bi(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,t.finalResult=null),i.type==="item.completed"){let f=i.item;if(f&&typeof f=="object"&&!Array.isArray(f)){let m=f;m.type==="agent_message"&&typeof m.text=="string"&&m.text.trim()&&(n=m.text)}}i.type==="turn.completed"&&n&&!t.providerTerminalError&&(t.finalResult=n,n=null);let a=wK(i);if(a&&(t.firstEventAt||=a,t.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let f=i.event.content_block;f?.type==="tool_use"&&(t.currentTool=String(f.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let f=i.message.content;if(Array.isArray(f)){let m=f.find(g=>g?.type==="tool_use");m&&(t.currentTool=String(m.name||t.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let f=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,m=SK(f);m&&(t.currentTool=m)}let l=AK(i);l&&IK(t,aw({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=cc(i),u=c?null:uw(i,o),d=c??u;if(d?.currentTool&&(t.currentTool=d.currentTool),d?.usage&&(t.usage={...t.usage??{},...d.usage}),d?.terminal?d.terminal.ok?t.finalResult=d.terminal.finalResult:(t.finalResult=null,t.providerTerminalError=!0,t.error=d.terminal.error):i.type==="result"&&_K(t,i),i.type==="turn.failed"){n=null,t.finalResult=null,t.providerTerminalError=!0;let f=i.error;t.error=typeof f?.message=="string"?f.message:"provider turn failed"}EK(t,i)}return t}var Pi=p(()=>{"use strict";lw();M();lc();em();dw()});import{accessSync as PK,constants as OK,existsSync as TK,readFileSync as NK}from"node:fs";import rm from"node:path";function fw(e){return rm.join(e,DK)}function MK(e=process.env,t=process.platform){if(t==="win32")return!1;let r=e.KYNVER_WORKER_EXIT_CAPTURE?.trim().toLowerCase();return!(r==="0"||r==="false"||r==="off")}function pw(e){try{return PK(e,OK.X_OK),!0}catch{return!1}}function LK(e,t=process.env){if(!e)return!1;if(e.includes("/"))return pw(e);for(let r of(t.PATH??"").split(rm.delimiter))if(r&&pw(rm.join(r,e)))return!0;return!1}function nt(e,t,r,n={}){let o=n.env??process.env;return!r||!MK(o,n.platform)?[e,t]:LK(e,o)?[n.nodeExecutable??process.execPath,["-e",BK,fw(r),e,...t]]:[e,t]}function UK(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function uc(e){if(!e)return null;let t=fw(e);if(!TK(t))return null;try{let r=JSON.parse(NK(t,"utf8")),n=r.oomEvidence;return{exitCode:UK(r.exitCode),signal:typeof r.signal=="string"&&r.signal?r.signal:null,...typeof r.startedAt=="string"?{startedAt:r.startedAt}:{},...typeof r.endedAt=="string"?{endedAt:r.endedAt}:{},...typeof r.childPid=="number"?{childPid:r.childPid}:{},...typeof r.spawnError=="string"?{spawnError:r.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function mw(e){if(!e)return null;let t=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${t}`:e.exitCode===null?null:`exited with code ${e.exitCode}${t}`}var DK,BK,cr=p(()=>{"use strict";DK="exit.json";BK=String.raw`"use strict";
10
10
  const cp = require("child_process"), fs = require("fs");
11
11
  const argv = process.argv.slice(1);
12
12
  const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
@@ -70,24 +70,24 @@ child.on("error", (e) => {
70
70
  if (!child.pid) finish(127, null, String(e && e.message));
71
71
  });
72
72
  child.on("exit", (code, signal) => finish(code, signal));
73
- `});import zK from"node:path";function Df(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.handoffState;return typeof t=="string"&&QK.has(t)}function Xl(e){return!!(e&&XK.test(e))}function UR(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Df(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let t=e.error?.trim()??"",r=e.exit??null;if(r?.oomEvidence||Xl(t))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":BR.test(t)||BR.test(n)?"timed_out":r&&r.exitCode===0&&!r.signal&&!r.spawnError?"no_report":r&&(r.signal||r.spawnError||r.exitCode!==null&&r.exitCode!==0)||t?"crashed":"no_report"}function FR(e){let t=[ZK(e.stopClass)],r=LR(e.exit);r&&t.push(r),e.exit?.oomEvidence&&t.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&t.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?t.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&t.push(e.reconcileReason),t.join(" \u2014 ").slice(0,600)}function ZK(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function KR(e,t=process.env){if(e<=0)return null;let r=Number.parseInt(t.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(r)&&r>0?Math.max(r,WR/2):WR/2;return Math.min(e$,n*2**e)}function $R(e,t,r){let n=0,o;try{o=ne(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(r&&s===r)continue;let i=F(zK.join(j(o.id),"workers",B(s),"worker.json"),void 0);if(!(!i||i.taskId!==t)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(zl(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&Xl(Eo(i.stderrPath,20))&&(n+=1)}}return n}function HR(e,t){if(!e)return t();let r=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return t()}finally{r===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=r,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var XK,BR,QK,WR,e$,Mf=p(()=>{"use strict";Y();M();lr();XK=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,BR=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,QK=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);WR=2048,e$=8192});function jR(e,t=240){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function wi(e){let t=(e??"").trim();if(!t)return null;if(vi(t))return{blocked:!0,reason:`provider authentication failed: ${jR(t)}`};for(let r of t$)if(r.test.test(t))return{blocked:!0,reason:`${r.label}: ${jR(t)}`};return null}var t$,Lf=p(()=>{"use strict";ql();t$=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function VR(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function r$(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function n$(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:VR(e.head)}function o$(e,t,r){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${t} uncommitted change${t===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&r){let o=r.length>12?r.slice(0,12):r;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Mo(e){if(e.alive||r$(e.finalResult))return null;let t=(e.changedFiles??[]).filter(i=>i.trim()).length,r=VR(e.headCommit)??n$(e.gitAncestry),n=t>0,o=!!r;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:t,headCommit:r,attentionReason:o$(s,t,r)}}var Ql=p(()=>{"use strict"});import{existsSync as s$,readFileSync as i$,statSync as qR}from"node:fs";import Zl from"node:path";function u$(e,t=process.env){let r=e?l$:a$,n=t.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return r;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):r}function d$(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Bf(e){try{return qR(e).mtimeMs}catch{return-1}}function p$(e){let t=Zl.join(e,".git");try{if(qR(t).isDirectory())return t;let r=/^gitdir:\s*(.+)$/m.exec(i$(t,"utf8"));return r?Zl.resolve(e,r[1].trim()):null}catch{return null}}function GR(e){let t=p$(e);return[Bf(e),t?Bf(Zl.join(t,"HEAD")):-2,t?Bf(Zl.join(t,"index")):-2].join(":")}function JR(e,t){return{changedFiles:fi(e),gitAncestry:Wl(e,{base:t.base,baseCommit:t.baseCommit})}}function f$(e,t){for(Wr.delete(e),Wr.set(e,t);Wr.size>c$;){let r=Wr.keys().next().value;if(r===void 0)break;Wr.delete(r)}}function YR(e,t,r){let n=d$(t);if(!e||!e.trim())return Si.missingWorktree++,{changedFiles:[],gitAncestry:Ao(n,"missing worktree path")};let o=`${e}\0${n}`;if(!s$(e))return Wr.delete(o),Si.missingWorktree++,{changedFiles:[],gitAncestry:Ao(n,`worktree no longer exists: ${e}`)};if(r.alive)return Wr.delete(o),Si.liveProbes++,JR(e,t);let s=r.ttlMs??u$(!!t.baseCommit?.trim()),i=r.now??Date.now(),a=GR(e),l=Wr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Si.hits++,l.probe;Si.misses++;let c=JR(e,t);if(s>0){let u=.8+.4*(r.random??Math.random)();f$(o,{fingerprint:GR(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var a$,l$,c$,Wr,Si,zR=p(()=>{"use strict";we();a$=10*6e4,l$=60*6e4,c$=2048,Wr=new Map,Si={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function _i(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function m$(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function g$(e){if(_i(e.headCommit)||_i(e.prUrl)||_i(e.artifactBundlePath)||_i(e.patchPath))return!0;let t=e.gitAncestry;return!!(t?.checked&&t.headIsAncestorOfBase===!1&&_i(t.head))}function Lo(e){return m$(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:g$(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function XR(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var ec=p(()=>{"use strict"});function Wf(e){let t=e.trim();if(!t.startsWith("{"))return null;try{let r=JSON.parse(t);if(r&&typeof r=="object"&&!Array.isArray(r))return r}catch{return null}return null}function QR(e){let t=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(t)?t.length:0}function Bo(e){let t=e.trim();if(!t)return null;let r=Wf(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let u=Wf(s[1]??"");u&&n.push(u)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let u=Wf(t.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=QR(l);for(let u of n){let d=QR(u);d>c&&(l=u,c=d)}return l}var tc=p(()=>{"use strict"});function ZR(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:e.trim()||null}function ew(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function h$(e){return new Set(e.map(t=>ew(ZR(t)??t)).filter(Boolean))}function tw(e,t,r){let n=ZR(e)??e;if(!n)return"unrelated";let o=ew(n);return h$(t).has(o)?"contract":r?(r.outcome==="skipped"||r.outcome==="blocked")&&r.reason?.trim()?"support":(r.outcome==="merged","unrelated"):"unrelated"}var rw=p(()=>{"use strict"});function Wo(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function y$(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function wn(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Wo(e)}function rc(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function nw(e){let t=null;if(typeof e=="string"){let o=Bo(e);o&&(t=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(t=e);if(!t)return[];let r=t.targetPrReconciliation??t.target_pr_reconciliation;if(!Array.isArray(r))return[];let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=wn(String(s.prUrl??s.pr_url??"")),a=Wo(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Wo(s.mergeCommit??s.merge_commit),reason:Wo(s.reason)})}return n}function ow(e,t){let r=[],n=wn(Wo(e.prUrl)??"");if(n&&r.push(n),t&&typeof t=="object"&&!Array.isArray(t)){let o=t,s=wn(String(o.prUrl??o.pr_url??""));s&&r.push(s)}return[...new Set(r)]}function sw(e){let{contract:t,snapshot:r}=e,n=e.finalResult??r.finalResult;if(!t.landingOnly&&t.targetPrUrls.length===0&&!t.repairEnforceOriginalPr)return{blocked:!1};if(!y$(n))return(t.requiresTargetPrReconciliation??(t.landingOnly||!!t.repairEnforceOriginalPr||t.targetPrUrls.length>0))&&t.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${t.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(t.requiresTargetPrReconciliation??(t.landingOnly||!!t.repairEnforceOriginalPr||t.targetPrUrls.length>0))&&!t.repairEnforceOriginalPr)return{blocked:!1};let s=t.repairEnforceOriginalPr?wn(Wo(t.targetPrUrl)??"")??(t.targetPrUrls.length===1?wn(t.targetPrUrls[0]):null):null;if(s){let d=ow(r,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let h of d)if(h!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${h} instead of canonical target ${s}`}}let g=nw(n).find(h=>h.prUrl===s);if(!g||g.outcome!=="merged"&&!(g.reason?.trim()&&(g.outcome==="skipped"||g.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=nw(n),a=new Map(i.map(d=>[rc(d.prUrl),d])),l=new Set(t.targetPrUrls.map(d=>rc(wn(d)??d)).filter(Boolean)),c=ow(r,n);if(t.landingOnly)for(let d of c){let f=a.get(rc(d)),m=tw(d,t.targetPrUrls,f);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(t.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of t.targetPrUrls){let f=rc(wn(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function iw(e){if(e.blocked)return e.detail??e.reason}var aw=p(()=>{"use strict";tc();rw()});function b$(e){let t=Date.now();if(e.providerTerminalError||Jl(e.finalResult)||e.finalResult&&e.error?.trim()||vi(e.error)||vi(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:wi(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!lw(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&R$(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Lo(o);if(s.blocked){let i=XR(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=sw({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=iw(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(v$(e))return{state:"done",reason:"empty abandoned worker record"};let o=wi(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Mo({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=Xl(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let r=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(r)&&t-r>k$)return{state:"needs_attention",reason:`no first stream event ${mf(r)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&t-n>Uf?{state:"stale",reason:`no log/event/heartbeat activity for ${mf(n)}s`}:{state:"ok",reason:"recent activity"}}function lw(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function v$(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(t=>t.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function R$(e){let t=null;if(typeof e=="string"?t=Bo(e):e&&typeof e=="object"&&!Array.isArray(e)&&(t=e),!t)return!1;let r=t.targetPrReconciliation??t.target_pr_reconciliation;return Array.isArray(r)?r.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function cw(e,t,r){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:t||(n??ar(r))}function uw(e){let t=Rn(e.stdoutPath),r=Ie(e.heartbeatPath);return cw(e,t.finalResult,r)}function ie(e,t={}){let r=Rn(e.stdoutPath),n=Ie(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=cw(e,r.finalResult,n),i=o?!1:re(e.pid),a=Dl(e.stdoutPath),l=Dl(e.stderrPath),c=Dl(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=YR(e.worktreePath,{base:t.base,baseCommit:t.baseCommit},{alive:i}),f=Gv([r.lastEventAt,n.lastHeartbeatAt,Ml(e.stdoutPath),Ml(e.stderrPath),Ml(e.heartbeatPath)]),m=i?null:zl(e.workerDir),g=s&&!Df(s)?s:null,h=r.error||!i&&!s&&Eo(e.stderrPath,10).trim()||void 0,y=h||!i&&s&&!g&&Eo(e.stderrPath,10).trim()||void 0,v=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=lw(v)?null:v,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,_=b$({alive:i,finalResult:s,firstEventAt:r.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:k,landingContract:b,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),S=k||_.state==="blocked"?"blocked":o||_.state==="done"?"done":s?"exited":i?"running":"exited",R=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,w=UR({alive:i,finalResult:s,error:y??null,stale:_.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),L=R&&!i&&!g?R:w,N=L==="running"||L==="finished"?null:(R===L?e.stopReason:void 0)??FR({stopClass:L,exit:m,error:y??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:S,stopClass:L,stopReason:N,exit:m,attention:_,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:r.firstEventAt,lastEventAt:r.lastEventAt,lastActivityAt:f,currentTool:o?null:r.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:r.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function Be(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ff(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function nc(e,t){return t.length===0?e:t.some(r=>r.attention==="needs_attention"||r.attention==="stale"||r.attention==="blocked")?"needs_attention":t.every(r=>r.status==="done")?"done":t.some(r=>r.status==="running")?"running":e}var k$,Uf,Ce=p(()=>{"use strict";vn();Ri();Mf();lr();ql();Lf();Ql();zR();ec();aw();tc();M();k$=18e4,Uf=6e5});import{readFileSync as w$}from"node:fs";function S$(e){if(!e||process.platform!=="linux")return null;try{return w$(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function dw(e){if(!e.pid||process.platform!=="linux")return!0;let t=S$(e.pid);return t?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>t.includes(n)):!1}function Ur(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!re(e.pid)||!dw(e)?!1:!uw(e)}var oc=p(()=>{"use strict";Ce();M()});import fw from"node:os";import mw from"node:path";function pw(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function _$(e=P(),t,r){let n=pw(e.perWorkerMemBytes,sc),o=pw(e.memReserveBytes,ic),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ac)),i=Ko({config:e,configuredMaxWorkersOverride:t,totalMemBytes:r??fw.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function gw(e,t={}){let r=t.perWorkerMemBytes??sc,n=t.memReserveBytes??ic,o=t.memUtilization??ac,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/r));return Math.min(i,lc)}function x$(){return uR()}function C$(e){let t=0;for(let r of Ct(e)){let n=F(mw.join(j(e.id),"workers",B(r),"worker.json"),void 0);!n||!Ur(n)||t++}return t}function Kf(){let e=0;for(let t of Se())e+=C$(t);return e}function Uo(){let e=[];for(let t of Se())for(let r of Ct(t)){let n=F(mw.join(j(t.id),"workers",B(r),"worker.json"),void 0);n&&Ur(n)&&e.push({runId:t.id,workerName:r})}return e}function xi(e){let t=e.config??P(),r=e.totalMemBytes??fw.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=_$(t,e.configuredMaxWorkersOverride,r),c=xt(t),u=e.freeMemBytes??x$(),d=e.activeWorkers??Kf(),f=Math.max(0,Math.floor(r*s)-o),m=Math.max(0,Math.floor(f/n)),g=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,y=ir(c,i??h),v=Math.max(0,Math.min(y,m)),k=Math.max(0,v-d),_=Math.min(k,g),R=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Br({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});R&&!R.ok&&(_=0);let w=null;return _<=0&&(R&&!R.ok?w=R.reason??"disk gate blocked worker admission":d>=v?w=`at worker limit (${d}/${v} running)`:g<=0?w="insufficient free memory \u2014 waiting for workers to finish":w="no worker slots available"),{ok:_>0,totalMemBytes:r,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:m,maxConcurrentWorkers:v,activeWorkers:d,slotsAvailable:_,reason:w,...R?{diskGate:R}:{}}}var sc,ic,ac,lc,Fo=p(()=>{"use strict";dR();$();Le();Io();Ci();yi();Y();No();oc();M();sc=500*1024*1024,ic=4*1024*1024*1024,ac=.85,lc=64});function Ei(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function Ko(e){let t=e.config??{},r=e.env??process.env,n=Ei(t.perWorkerMemBytes,sc),o=Ei(t.memReserveBytes,ic),s=Math.min(1,Math.max(.1,Number(t.memUtilization)>0?Number(t.memUtilization):ac)),i=gw(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ei(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(t.maxConcurrentWorkers!==void 0&&t.maxConcurrentWorkers!==null){let c=Ei(t.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,lc),autoCap:i,workerCapSource:"config"}}let l=(r.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||r.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&r.KYNVER_MAX_WORKERS&&Ei(r.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,lc),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Ci=p(()=>{"use strict";Fo()});import{existsSync as E$,mkdirSync as Yie,readFileSync as A$,writeFileSync as zie}from"node:fs";import{homedir as P$}from"node:os";import I$ from"node:path";function O$(e){let t=new Map;for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),t.set(s,i)}return t}function cc(e=Fr){return E$(e)?O$(A$(e,"utf8")):new Map}function hw(e=Fr,t={}){let r=cc(e),n=0,o=0;for(let[s,i]of r){if(!t.override&&process.env[s]!=null){o++;continue}process.env[s]=i,n++}return{path:e,loaded:n,skipped:o}}var Fr,cr=p(()=>{"use strict";Fr=I$.join(P$(),".kynver",".env")});var yw=p(()=>{"use strict"});var kw=p(()=>{"use strict";yw()});var uc=p(()=>{"use strict"});import{existsSync as T$,readFileSync as N$}from"node:fs";import{homedir as D$}from"node:os";import M$ from"node:path";function Hf(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function $f(e){return typeof e=="string"&&e.trim()?e:null}function jf(e){let t=Hf(e);if(!t)return null;let r=t.desiredState;if(r!=="running"&&r!=="paused"&&r!=="stopped")return null;let n=t.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=$f(t.requestedAt);return o?{desiredState:r,policyVersion:n,requestedAt:o,requestedByLabel:$f(t.requestedByLabel),reason:$f(t.reason)}:null}function bw(e){let t=Hf(Hf(e)?.response);return!t||t.runtimeControl===void 0?null:jf(t.runtimeControl)}function vw(e,t=D$()){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return M$.join(t,".kynver",`runtime-control-${r}.json`)}function Vf(e,t,r){try{let n=Kr(e,r);if(n&&n.policyVersion>t.policyVersion)return;be(vw(e,r),{contractVersion:1,agentOsId:e,control:t,deliveredAt:new Date().toISOString()})}catch{}}function Kr(e,t){try{let r=vw(e,t);if(!T$(r))return null;let n=JSON.parse(N$(r,"utf8"));return n.agentOsId!==e?null:jf(n.control)}catch{return null}}function $o(e){return e?.desiredState??"running"}function L$(e){return e==="keeper"||e==="desktop"}function B$(e,t,r=!1){let n=$o(e);return n==="paused"?"paused":n==="stopped"?r&&t===0?"stopped":"stopping":"running"}function pc(e){return e.control?{policyVersion:e.control.policyVersion,state:B$(e.control,e.inFlightWorkers,e.exiting),supervised:L$(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function Rw(e){let t=$o(e);return t==="paused"?"runtime_paused":t==="stopped"?"runtime_stopped":null}function ww(e,t){return $o(e)==="stopped"&&t===0}function _w(e){Sw=e}function xw(){return Sw}var dc,Sw,$r=p(()=>{"use strict";M();dc=83;Sw=null});var Ai,Ho=p(()=>{"use strict";kw();uc();$r();Ai="kynver-cron-daemon.service"});import{existsSync as W$,readFileSync as U$}from"node:fs";function Gf(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(W$("/proc/version")){let e=U$("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var fc=p(()=>{"use strict"});var Jf=p(()=>{"use strict";fc()});var Pi=p(()=>{"use strict";cr();at();$();Ho();Jf()});import H$ from"node:os";function Ii(e,t){let r=(t??H$.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${r}`}function Ew(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function mc(e,t){let r=e.trim();if(!r)return Ii(t);let n=r.indexOf(":");if(n>=0){let o=r.slice(0,n).trim().toLowerCase()||t,s=Ew(r.slice(n+1));return s?`${o}:${s}`:Ii(o)}return`${t}:${Ew(r)}`}function jo(e){let t=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return t?mc(t,e.boxKind):Ii(e.boxKind,e.hostLabel)}var Vo=p(()=>{"use strict";Le();Le()});var Aw=p(()=>{"use strict";cr();Ho();Pi()});import{existsSync as ur,mkdirSync as j$,readdirSync as gc,renameSync as Pw,statSync as V$}from"node:fs";import dr from"node:path";function Ow(e){try{return V$(e).isDirectory()}catch{return!1}}function G$(e){if(!ur(e))return!0;for(let t of Iw){let r=dr.join(e,t);if(ur(r)&&(!Ow(r)||gc(r).length>0))return!1}return!0}function J$(e){let t=dr.join(e,"runs");if(!ur(t)||!Ow(t))return!1;for(let r of gc(t,{withFileTypes:!0})){if(!r.isDirectory()||r.name==="runs")continue;let n=dr.join(t,r.name,"run.json");if(F(n,void 0)?.id)return!0}return!1}function q$(e){let t=dr.join(e,"runs");if(!ur(t))return!1;for(let r of gc(t,{withFileTypes:!0})){if(!r.isDirectory())continue;if(F(dr.join(t,r.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Y$(e){let t=dr.join(e,"ghost");return ur(t)?!ur(dr.join(t,"runs")):q$(e)}function Tw(e){return J$(e.sharedRoot)?G$(e.forgeRoot)?Y$(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function Nw(e,t){j$(t,{recursive:!0});for(let r of Iw){let n=dr.join(e,r),o=dr.join(t,r);if(ur(n)){if(ur(o)&&gc(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(ur(o)){Pw(n,o);continue}Pw(n,o)}}}var Iw,Dw=p(()=>{"use strict";M();Iw=["runs","worktrees"]});import{existsSync as Ue}from"node:fs";import{homedir as z$}from"node:os";import Oe from"node:path";function qf(e=process.env){return e.HOME?.trim()||z$()}function Yf(e=process.env){return Oe.join(qf(e),".kynver","harness")}function hc(e){let t=Oe.resolve(Me(e.trim()));for(;X$.has(Oe.basename(t));)t=Oe.dirname(t);return t}function Q$(e,t=process.env){return Oe.join(Yf(t),e)}function Z$(e=process.env){let t=Yf(e);if(Ue(Oe.join(t,"runs")))return!0;if(Ue(t)&&!Ue(Oe.join(t,"ghost"))&&!Ue(Oe.join(t,"forge")))return Ue(t);let r=Oe.join(qf(e),Mw);return Ue(r)}function yc(e){let t=e.env??process.env,r=t.KYNVER_HARNESS_ROOT?.trim()||t.OPUS_HARNESS_ROOT?.trim();if(r)return{harnessRoot:hc(r),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:hc(n),source:"config"};let o=Q$(e.boxKind,t);if(Ue(Oe.join(o,"runs"))||Ue(o)&&!eH(o))return{harnessRoot:o,source:"box_scoped"};let i=Yf(t);if(e.boxKind==="forge"){let a=Tw({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&Nw(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Z$(t)){if(Ue(Oe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Ue(i)&&!Ue(Oe.join(i,"ghost"))&&!Ue(Oe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=Oe.join(qf(t),Mw);if(Ue(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function eH(e){if(!Ue(e))return!0;for(let t of["runs","worktrees"]){let r=Oe.join(e,t);if(Ue(r))return!1}return!0}var Mw,X$,zf=p(()=>{"use strict";at();Dw();Mw=Oe.join(".openclaw","harness");X$=new Set(["runs","worktrees"])});import Lw from"node:os";function kc(e){return e?.trim()?e.trim():null}function tH(e,t){let r=t.trim().toLowerCase()||"host";return`${e}-${r}`.replace(/[^a-z0-9._-]+/g,"-")}function rH(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Wt(e=P(),t=process.env,r={}){let n=et(t,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||kc(t.KYNVER_BOX_KIND)),a=r.strict===!0||rH(t);if((r.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let h="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||r.requireExplicitBoxKind?s.push(h):o.push(`${h} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=kc(e.runnerId),c=kc(t.KYNVER_RUNTIME_ID)??kc(t.OPENCLAW_RUNTIME_ID),u=l??c??tH(n.boxKind,Lw.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let f=Ko({config:e,env:t,totalMemBytes:Lw.totalmem()}),m=ir(n.boxKind,f.configuredMaxWorkers??wf(n.boxKind,f.autoCap)),g=yc({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:t});return g.migrationBlocker&&s.push(g.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:f.workerCapSource,harnessRoot:g.harnessRoot,harnessRootSource:g.source},errors:s,warnings:o}}var Sn=p(()=>{"use strict";$();Le();Io();Ci();zf()});var Xf=p(()=>{"use strict";mi();Le();Vo();$();Pi();Aw();sr();St();Sn()});function je(e){let t=e.trim().toLowerCase();return oH[t]??t}var Uw,nH,oH,Oi=p(()=>{"use strict";Uw=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],nH=Uw.join("|"),oH={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{mkdirSync as Kw}from"node:fs";import{homedir as $w}from"node:os";import bc from"node:path";function Go(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return Hw.includes(t)?t:null}function _n(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(typeof r!="string"||!r.trim()||r.includes("\0"))continue;let n=Me(r.trim());if(t.includes(n)||t.push(n),t.length>=iH)break}return t}function vc(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.others==="default"?"default":null,n=e.byBox;if(!n||typeof n!="object"||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,t))return r;let o=n[t];if(!o||typeof o!="object")return null;let s=o,i=Go(s.access);return i?{access:i,folders:_n(s.folders)}:null}function Rc(e){return sH.has(e)?"folder":"off"}function Fw(e=$w()){let t=bc.join(e,".kynver",jw);return Kw(t,{recursive:!0}),t}function Jo(e){let t=e.home??$w(),r=Go(e.local?.chatComputerAccess),n,o;r==="off"?(n={access:"off",folders:[]},o="local_off"):e.website==="default"?(n={access:"off",folders:[]},o="default"):e.website?(n=e.website,o="website"):r?(n={access:r,folders:_n(e.local?.chatWorkFolders)},o="local"):(n={access:Rc(e.engine),folders:[]},o="default");let{access:s}=n;if(s==="off")return{access:s,folders:[],workDir:Fw(t),extraFolders:[],source:o};let i=n.folders;s==="folder"&&(i=i.slice(0,1)),i.length===0&&s!=="full"&&(i=[Fw(t)]);for(let l of i)try{Kw(l,{recursive:!0})}catch{}let a=i[0]??t;return{access:s,folders:i,workDir:a,extraFolders:s==="folders"?i.slice(1):[],source:o}}function wc(e,t){if(e.access==="off")return!1;if(e.access==="full")return!0;let r=bc.resolve(t);return e.folders.some(n=>{let o=bc.relative(n,r);return o===""||!o.startsWith("..")&&!bc.isAbsolute(o)})}var Hw,sH,iH,jw,xn=p(()=>{"use strict";at();Hw=["off","folder","folders","full"],sH=new Set(["cursor","codex","antigravity"]),iH=16,jw="chat-workspace"});var Vw=p(()=>{"use strict";xn()});import{execFileSync as aH}from"node:child_process";function em(e=process.env){let t=e[lH]?.trim().toLowerCase();return t==="file"?"file":t==="keychain"?"keychain":"auto"}function cH(e,t,r){let n={encoding:"utf8",timeout:r.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...r.input!==void 0?{input:r.input}:{}};return aH(e,t,n)}function uH(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Qf(e,t){let r=JSON.stringify(Cn),n=JSON.stringify(t),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${r}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${r}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${r}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${r}, ${n}); $v.Remove($old) } catch {}`}function Gw(e={}){if(em(e.env??process.env)==="file")return null;let r=uH(e.platform??process.platform);return r?new Zf(r,e.exec):null}var Cn,lH,pr,Zf,Jw=p(()=>{"use strict";Cn="kynver",lH="KYNVER_CREDENTIAL_STORE";pr=5e3;Zf=class{constructor(t,r=cH){this.backend=t;this.exec=r}backend;exec;get(t){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",Cn,"-a",t,"-w"],{timeoutMs:pr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",Cn,"account",t],{timeoutMs:pr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qf("get",t)],{timeoutMs:pr}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(t,r){if(!r||/[\r\n]/.test(r))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",Cn,"-a",t,"-l",`Kynver (${t})`,"-w",r],{timeoutMs:pr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${t})`,"service",Cn,"account",t],{input:`${r}
74
- `,timeoutMs:pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qf("set",t)],{input:`${r}
75
- `,timeoutMs:pr})}catch{return!1}return this.get(t)===r}delete(t){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",Cn,"-a",t],{timeoutMs:pr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",Cn,"account",t],{timeoutMs:pr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qf("delete",t)],{timeoutMs:pr})}catch{}}}});function zo(){return tm||(tm=new rm),tm}var qo,Yo,dH,Sc,rm,tm,qw=p(()=>{"use strict";Jw();qo="api-key",Yo="chat-box-credential",dH=6e4,Sc=class extends Error{constructor(t){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${t}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},rm=class{cache=new Map;keychain;env;now;constructor(t={}){this.env=t.env??process.env,this.keychain=t.keychain===void 0?Gw({env:this.env}):t.keychain,this.now=t.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(t){if(!this.keychain)return null;let r=this.cache.get(t);if(r&&this.now()-r.at<dH)return r.value;let n=this.keychain.get(t);return this.cache.set(t,{value:n,at:this.now()}),n}write(t,r){let n=em(this.env);if(!this.keychain){if(n==="keychain")throw new Sc(t);return!1}let o=this.keychain.set(t,r);if(o)this.cache.set(t,{value:r,at:this.now()});else if(this.cache.delete(t),n==="keychain")throw new Sc(t);return o}remove(t){this.cache.delete(t),this.keychain?.delete(t)}invalidate(t){t?this.cache.delete(t):this.cache.clear()}},tm=null});import{existsSync as Yw,mkdirSync as zw,readFileSync as Xw,writeFileSync as Qw}from"node:fs";import{homedir as mH,totalmem as Cle}from"node:os";import sm from"node:path";function Xo(e){let t=String(e??"").trim();if(!t)return{ok:!1,reason:"missing"};let r=t.toLowerCase();return hH.has(r)?{ok:!1,value:t,reason:"placeholder"}:gH.test(t)?{ok:!0,value:t}:{ok:!1,value:t,reason:"not a UUID"}}function im(e){let t=Xo(e),r=t.value??String(e??"").trim(),n=r?`"${r}"`:"<empty>",o=t.reason==="placeholder"?"looks like a placeholder":t.reason??"is invalid";return[`Invalid AgentOS id ${n}: ${o}.`,"AgentOS ids are UUIDs from the AgentOS registry, not slugs or examples (for example, not `aos`).","Fix: run `kynver bootstrap` to relink this runner, or run `kynver setup --agent-os-id <uuid>` / pass `--agent-os-id <uuid>` after copying the id from Command Center.","If this came from stale ~/.kynver/config.json, remove or replace the agentOsId value before starting the daemon."].join(" ")}function Zw(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Me(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Me(e.defaultRepo.trim())}:{}}}function P(){if(!Yw(nm))return{};try{return Zw(JSON.parse(Xw(nm,"utf8")))}catch{return{}}}function We(e){zw(xc,{recursive:!0}),Qw(nm,`${JSON.stringify(Ww(e),null,2)}
76
- `,{mode:384})}function Ww(e){return Zw(e)}function am(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:He(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:He(e.defaultRepo.trim())}:{},...e.chatWorkFolders?.length?{chatWorkFolders:e.chatWorkFolders.map(He)}:{}}}function fr(){if(pf(),!Yw(om))return{};try{return JSON.parse(Xw(om,"utf8"))}catch{return{}}}function Ti(e){pf(),zw(xc,{recursive:!0}),Qw(om,`${JSON.stringify(e,null,2)}
77
- `,{mode:384})}function eS(e,t,r,n={}){let o=fr();if(zo().write(e,r)){let i={...o,...n};delete i[t],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Ti(i);return}Ti({...o,...n,[t]:r})}function tS(e,t){let r=zo().read(e);return r||fr()[t]}function rS(){if(Qe())return{backend:null,moved:[],stillInFile:[]};let e=zo(),t=fr(),r=[],n=[],o=[[qo,"apiKey"],[Yo,"chatBoxCredential"]];for(let[s,i]of o){let a=t[i];a&&(e.available&&e.write(s,a)?r.push(i):n.push(i))}if(r.length>0){let s={...fr()};for(let i of r)delete s[i];s.store="keychain",s.keychainAccounts=Array.from(new Set([...s.keychainAccounts??[],...r.map(i=>i==="apiKey"?qo:Yo)])).sort(),Ti(s)}return{backend:e.backend,moved:r,stillInFile:n}}function lm(){return Kv(yH)}function _e(){return lm().getApiKey()}function Te(e){return lm().getRunnerToken(e)}function En(e,t){lm().persistRunnerToken(e,t)}function cm(e){let t=Pe("KYNVER_CHAT_BOX_CREDENTIAL");if(t)return t;if(Qe())return _c?.agentOsId===e?_c.credential:void 0;let r=fr();if(!(r.chatBoxCredentialAgentOsId&&r.chatBoxCredentialAgentOsId!==e))return tS(Yo,"chatBoxCredential")}function nS(e,t){if(Qe()){_c={agentOsId:e,credential:t};return}eS(Yo,"chatBoxCredential",t,{chatBoxCredentialAgentOsId:e})}function oS(){if(Qe()){_c=null;return}zo().remove(Yo);let e={...fr()};delete e.chatBoxCredential,delete e.chatBoxCredentialAgentOsId,Ti(e)}function sS(){let e=zo();return process.env.KYNVER_API_KEY?{backend:e.backend,apiKey:"env"}:e.read(qo)?{backend:e.backend,apiKey:"keychain"}:fr().apiKey?{backend:e.backend,apiKey:"file"}:{backend:e.backend,apiKey:"none"}}function pe(e){let t=Ni(e);return t||lS("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),t}function An(e){return Ni(e)}function Ni(e){let t=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||P().apiBaseUrl;return or(t)}function kH(e,t){let r=e||Te(t)||(t?void 0:Te(P().agentOsId));if(r)return String(r);let n=Pe("KYNVER_RUNTIME_SECRET")||Pe("KYNVER_CRON_SECRET")||Pe("OPENCLAW_CRON_SECRET");if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function Cc(e,t,r){let n=kH(e,t);if(n)return{ok:!0,secret:n};let o=_e(),s=Ni(r?.baseUrl);if(o&&t&&s)try{let i=await Pn(t,{baseUrl:s,apiKey:o});return En(t,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function me(e,t,r){let n=await Cc(e,t,r);if(n.ok)return n.secret;lS(n.reason)}async function iS(e,t){let r=_e(),n=Ni(t?.baseUrl);if(!r||!e||!n)return null;try{let o=await Pn(e,{baseUrl:n,apiKey:r});return En(e,o),o}catch{return null}}async function aS(e,t,r){let n=_e(),o=Ni(r?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!t)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Pn(t,{baseUrl:o,apiKey:n});return s&&s!==e?(En(t,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Pn(e,t){let r=t?.apiKey||_e();if(!r)throw new Error("API key required \u2014 run `kynver login` first");let o=`${pe(t?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await ut(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(t?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}function lS(e){console.error(e),process.exit(1)}var xc,nm,om,gH,hH,$le,Hle,yH,_c,$=p(()=>{"use strict";mi();at();sr();Le();Io();Ci();yi();Pi();Xf();Oi();Sn();Vw();St();qw();xc=sm.join(mH(),".kynver"),nm=sm.join(xc,"config.json"),om=sm.join(xc,"credentials"),gH=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,hH=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);$le=500*1024*1024,Hle=4*1024*1024*1024;yH={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:tS(qo,"apiKey")},getRunnerToken(e){let t=fr();if(!!t.runnerToken&&!!e&&t.runnerTokenAgentOsId===e)return t.runnerToken;let n=process.env.KYNVER_RUNNER_TOKEN?.trim();if(n)return n;if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken},persistApiKey(e){eS(qo,"apiKey",e)},persistRunnerToken(e,t){Ti({...fr(),runnerToken:t,runnerTokenAgentOsId:e})}};_c=null});import um from"node:path";function Ne(e){return hc(e)}function dt(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return Ne(e);let t=P(),r=t.harnessRoot?.trim();if(r)return Ne(r);let n=Wt(t,process.env);return n.identity?n.identity.harnessRoot:yc({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function rt(e){return um.join(Ne(e),"runs")}function Qo(e){return um.join(Ne(e),"worktrees")}function cS(){let e=dt();return{harnessRoot:e,runsDir:rt(e),worktreesDir:Qo(e)}}function mr(e,t){return um.join(e,B(t))}var Et=p(()=>{"use strict";$();zf();Sn();M()});import{existsSync as Ec,readdirSync as bH,statSync as vH}from"node:fs";import In from"node:path";function he(){return cS()}function ne(e){let{runsDir:t}=he(),r=In.join(mr(t,B(e)),"run.json");return Ec(r)||lt(`run '${e}' not found`),F(r)}function Se(){let{runsDir:e}=he();return uS(e)}function Ac(e){return uS(rt(e))}function RH(e){try{return vH(e).isDirectory()}catch{return!1}}function uS(e){if(!Ec(e))return[];let t=[];for(let r of bH(e,{withFileTypes:!0})){if(r.name==="runs")continue;let n=In.join(e,r.name);if(!RH(n))continue;let o=F(In.join(n,"run.json"),void 0);o?.id&&t.push(o)}return t}function On(e,t){let{runsDir:r}=he(),n=In.join(mr(r,B(e)),"run.json"),o=In.join(mr(r,B(e)),"workers",B(t),"worker.json");return Ec(o)||(Ec(n)||lt(`run '${e}' not found`),lt(`worker '${t}' not found in run '${e}'`)),F(o)}function Ve(e){let{runsDir:t}=he();be(In.join(mr(t,e.id),"run.json"),e)}function X(e,t){let{runsDir:r}=he();be(In.join(mr(r,e),"workers",t.name,"worker.json"),t)}function j(e){let{harnessRoot:t}=he();return Di(t,e)}function Di(e,t){return mr(rt(e),B(t))}var Y=p(()=>{"use strict";Et();M()});import wH from"node:path";function SH(e){let t=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],r=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...t.length?{ownedPaths:t}:{},...r.length?{writeSetPrefixes:r}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function Zo(e){let t=ne(e),r=[];for(let n of Object.keys(t.workers||{})){let o=F(wH.join(j(t.id),"workers",B(n),"worker.json"),void 0);!o?.taskId||!Ur(o)||r.push({runId:t.id,workerName:n,taskId:o.taskId,pid:o.pid,...SH(o)})}return r}var Pc=p(()=>{"use strict";Y();oc();M()});function dm(e){return typeof e=="object"&&e!==null&&e.type===Ic}function dS(e,t=process){let r=!1,n=a=>{r||(r=!0,e(a))},s=["SIGINT","SIGTERM","SIGBREAK","SIGHUP"].map(a=>{let l=()=>n(a);return t.on(a,l),[a,l]}),i=a=>{dm(a)&&n("ipc")};return t.on("message",i),t.channel?.unref?.(),()=>{for(let[a,l]of s)t.off(a,l);t.off("message",i)}}function pS(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return[];let n=t.collect??Zo,o=t.killTree??fe,s;try{s=n(e)}catch{return[]}let i=[];for(let a of s)a.pid&&i.push({workerName:a.workerName,pid:a.pid,result:o(a.pid,"SIGKILL")});return i}var Ic,Oc=p(()=>{"use strict";Pc();ci();Ic="kynver:daemon-stop"});import{createHash as _H}from"node:crypto";function nt(e){return JSON.stringify(pm(e))}function pm(e){if(Array.isArray(e))return e.map(pm);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=pm(e[r]);return t}return e}function fS(e){return`ib-${_H("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function es(e){if(!e)return null;let t=e.trim();if(!t)return null;if(/^[0-9a-fA-F]{64}$/.test(t))return new Uint8Array(t.match(/.{2}/g).map(r=>parseInt(r,16)));try{let r=Buffer.from(t,"base64");if(r.length===32)return new Uint8Array(r)}catch{}return null}function Mi(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.bundle;return!(!r||typeof r!="object"||typeof r.version!="string"||!r.version||typeof r.generatedAt!="string"||!Array.isArray(r.personas)||!r.instructions||typeof r.instructions!="object"||!r.policyThresholds||typeof r.policyThresholds!="object")}function Tc(e=process.env){if(e.NODE_ENV==="production")return!1;let t=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var Hr=p(()=>{"use strict"});import{createHash as xH,createPublicKey as CH,verify as EH}from"node:crypto";function IH(e){return`ca-${xH("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Tn(e,t=process.env){let r=es(t.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(r)return IH(r)!==e?null:r;let n=PH[e];return!n||e===mS&&!Tc(t)?null:es(n)}function OH(e){return CH({key:Buffer.concat([AH,Buffer.from(e)]),format:"der",type:"spki"})}function TH(e,t){return!Array.isArray(e)||e.length!==t.length?!1:e.every((r,n)=>typeof r=="string"&&r===t[n])}function NH(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||typeof r.agentOsId!="string"||!r.agentOsId||!Array.isArray(r.argv)||r.argv.some(n=>typeof n!="string")||typeof r.userId!="string"||!r.userId||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function gS(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!NH(e))return{ok:!1,reason:"malformed command authorization proof"};if(e.payload.agentOsId!==t.agentOsId)return{ok:!1,reason:"agentOsId mismatch"};if(!TH(e.payload.argv,t.argv))return{ok:!1,reason:"argv mismatch"};if(e.payload.exp<=n)return{ok:!1,reason:"proof expired"};let o=Tn(e.publicKeyId,r);if(!o)return{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let s;try{s=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(s.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let i=Buffer.from(nt(e.payload),"utf8");return EH(null,i,OH(o),s)?{ok:!0,payload:e.payload}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(i){return{ok:!1,reason:`signature verification failed: ${i.message}`}}}var AH,mS,PH,Li=p(()=>{"use strict";Hr();AH=Buffer.from("302a300506032b6570032100","hex"),mS="ca-6297fb8e1773",PH={[mS]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"}});function Nc(e){let t=typeof e.description=="string"?e.description:"",r=typeof e.executorRef=="string"?e.executorRef:"",o=[...t.matchAll(DH)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(r))return"read_only";for(let s of t.matchAll(MH))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var DH,MH,fm=p(()=>{"use strict";DH=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,MH=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi});import{createPublicKey as LH,verify as BH}from"node:crypto";function mm(e){let t=e.trim();if(!t||t.includes("\0")||/\s/.test(t))return null;let r,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(t);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let a;try{a=new URL(t)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;r=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))r=o[1],n=o[2];else return null;r=r.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${r}/${s.join("/")}`;return FH.test(i)&&i.length<=512?i:null}function hS(e){let t=e.task??{};return e.landPrDispatch===!0||t.executor==="land_pr"?"land_pr":t.executor==="verify_live"?"verify_live":Nc(t)==="read_only"?"read_only":"write"}function KH(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;if(Object.keys(t).sort().join(",")!=="payload,publicKeyId,signature"||typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;if(!r||typeof r!="object"||Array.isArray(r)||Object.keys(r).sort().join(",")!==[...UH].join(",")||r.v!==1||r.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof r[n]!="string"||!r[n])return!1;return!(typeof r.attempt!="number"||!Number.isInteger(r.attempt)||r.attempt<0||typeof r.exp!="number"||!Number.isFinite(r.exp)||!Dc.includes(r.operationClass))}function yS(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!KH(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(t))if(o[a]!==t[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+WH+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Tn(e.publicKeyId,r);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=LH({key:Buffer.concat([$H,Buffer.from(s)]),format:"der",type:"spki"});return BH(null,Buffer.from(nt(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}var WH,Dc,UH,FH,$H,kS=p(()=>{"use strict";Li();Hr();fm();WH=120,Dc=["write","read_only","land_pr","verify_live"],UH=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"],FH=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;$H=Buffer.from("302a300506032b6570032100","hex")});import{spawnSync as HH}from"node:child_process";import{randomBytes as jH}from"node:crypto";function bS(e){if(!e||typeof e!="object"||Array.isArray(e))return"policy must be an object";let t=e;if(Object.keys(t).sort().join(",")!=="accountId,agentOsId,approvedOperationClasses,repoIdentity,revision,v")return"unexpected policy fields";if(t.v!==VH)return"unsupported policy version";if(typeof t.revision!="number"||!Number.isSafeInteger(t.revision)||t.revision<1)return"invalid revision";if(typeof t.accountId!="string"||!t.accountId||t.accountId.length>128)return"invalid accountId";if(typeof t.agentOsId!="string"||!GH.test(t.agentOsId))return"invalid agentOsId";if(typeof t.repoIdentity!="string"||mm(`https://${t.repoIdentity}`)!==t.repoIdentity)return"invalid repoIdentity";let n=t.approvedOperationClasses;if(!Array.isArray(n)||n.length>Dc.length)return"invalid approvedOperationClasses";let o=new Set;for(let s of n){if(typeof s!="string"||!Dc.includes(s)||o.has(s))return"invalid approvedOperationClasses";o.add(s)}return{v:1,revision:t.revision,accountId:t.accountId,agentOsId:t.agentOsId,repoIdentity:t.repoIdentity,approvedOperationClasses:[...n]}}function JH(e){let t=(c,u)=>({allow:!1,code:c,reason:u}),{policy:r,identity:n}=e;if(!n)return t("no_identity","the desktop runtime has not been prepared");if(!r)return t("no_policy","no approved execution policy on this computer");if(r.accountId!==n.accountId||r.agentOsId!==n.agentOsId)return t("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return t("repo_identity_unavailable","the repository has no canonical remote identity");if(r.repoIdentity!==e.repoIdentity)return t("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return t("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=hS(e.decision),a=yS(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return t(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?r.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${r.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:r.repoIdentity,operationClass:i}}:t("replayed","this claim authorization was already used")}function RS(){return Qe()}function wS(e){return Bi&&e.revision<Bi.revision?!1:(Bi=e,!0)}function ym(){return Bi}function SS(e){vS=e}function _S(e){return hm.add(e),()=>hm.delete(e)}function xS(e){return{v:1,repoIdentity:e,requestNonce:jH(16).toString("base64url")}}function Mc(e){let t=HH("git",["-C",e,"remote","get-url","origin"],z({encoding:"utf8",timeout:1e4}));return t.status!==0||typeof t.stdout!="string"?null:mm(t.stdout.trim())}function CS(e){let t=JH({...e,policy:Bi,identity:vS,consumed:qH});if(!t.allow){let r=e.decision.task??{},n={taskId:typeof r.id=="string"?r.id:"",code:t.code,reason:t.reason,...t.consentRequired?{consentRequired:t.consentRequired}:{}};for(let o of hm)try{o(n)}catch{}}return t}var VH,GH,gm,Bi,vS,qH,hm,Lc=p(()=>{"use strict";St();kS();M();VH=1,GH=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;gm=class{constructor(t=4096){this.capacity=t}capacity;order=[];keys=new Set;consume(t){if(this.keys.has(t))return!1;for(this.keys.add(t),this.order.push(t);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};Bi=null,vS=null,qH=new gm,hm=new Set});import{createCipheriv as YH,createDecipheriv as zH,randomBytes as bm,scrypt as XH,timingSafeEqual as QH}from"node:crypto";function AS(){return bm(vm)}function PS(e=ZH){return{name:"scrypt",N:e.N,r:e.r,p:e.p,salt:bm(16).toString("base64")}}function wm(e,t,r=ej){if(t.name!=="scrypt"||!Number.isInteger(t.N)||t.N<r||t.r<8||t.p<1)return Promise.reject(new At("the vault file asks for an unsafe key-derivation setting; refusing"));let n=Buffer.from(t.salt,"base64");return n.length<16?Promise.reject(new At("the vault file's salt is invalid")):new Promise((o,s)=>{XH(e.normalize("NFKC"),n,vm,{N:t.N,r:t.r,p:t.p,maxmem:128*t.N*t.r*2},(i,a)=>i?s(i):o(a))})}function Wi(e,t,r){if(e.length!==vm)throw new At("bad key length");let n=bm(ES),o=YH("aes-256-gcm",e,n);o.setAAD(Buffer.from(r,"utf8"));let s=Buffer.concat([o.update(t),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Bc(e,t,r){try{let n=Buffer.from(t.n,"base64"),o=Buffer.from(t.c,"base64");if(n.length!==ES||o.length<km)throw new At;let s=zH("aes-256-gcm",e,n);return s.setAAD(Buffer.from(r,"utf8")),s.setAuthTag(o.subarray(o.length-km)),Buffer.concat([s.update(o.subarray(0,o.length-km)),s.final()])}catch(n){throw n instanceof At?n:new At}}function Sm(e){for(let t of e)if(t.includes(`
78
- `))throw new At("invalid vault field");return e.join(`
79
- `)}function xm(e){return Sm(["kynver-site-login/v1/record",e.agentOsId,e.handle,e.origin,e.label,e.username,e.hasTotp?"totp":"no-totp"])}function IS(e,t){return e.length===t.length&&QH(e,t)}var vm,ES,km,ZH,ej,Rm,At,_m,Wc,Uc,OS=p(()=>{"use strict";vm=32,ES=12,km=16,ZH={N:2**17,r:8,p:1},ej=2**14,Rm=10,At=class extends Error{constructor(t="the saved-login vault could not be decrypted"){super(t),this.name="VaultCryptoError"}};_m=e=>Sm(["kynver-site-login/v1/vault-key",e]),Wc=e=>Sm(["kynver-site-login/v1/key-check",e]),Uc=Buffer.from("kynver-site-login-key-check-v1","utf8")});function TS(e){if(typeof e!="string"||!e.trim())return{ok:!1,reason:"a site address is required"};let t=e.trim();/^[a-z][a-z0-9+.-]*:/i.test(t)||(t=`https://${t}`);let r;try{r=new URL(t)}catch{return{ok:!1,reason:"not a valid web address"}}return r.protocol!=="https:"?{ok:!1,reason:"saved logins are only used on https:// sites"}:r.username||r.password?{ok:!1,reason:"the address must not contain a username or password"}:!r.hostname.includes(".")||tj.test(r.hostname)?{ok:!1,reason:"use the site's public address (e.g. https://www.instagram.com)"}:{ok:!0,origin:r.origin,unicodeHost:r.hostname.split(".").some(n=>n.startsWith("xn--"))}}function Ui(e){if(typeof e!="string"||!e)return null;try{let t=new URL(e).origin;return t&&t!=="null"?t:null}catch{return null}}function Cm(e,t){let r=Ui(t);return r!==null&&r===e}var tj,Em=p(()=>{"use strict";tj=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[.*\]|\d{1,3}(\.\d{1,3}){3})$/i});import{createHmac as rj}from"node:crypto";function NS(e){let t=e.replace(/[\s-]/g,"").replace(/=+$/,"").toUpperCase();if(!t||!/^[A-Z2-7]+$/.test(t))return null;let r=0,n=0,o=[];for(let s of t)n=n<<5|nj.indexOf(s),r+=5,r>=8&&(o.push(n>>>r-8&255),r-=8);return o.length?Buffer.from(o):null}function Fc(e){let t=e.trim();if(!t)return null;if(/^otpauth:\/\//i.test(t)){let n;try{n=new URL(t)}catch{return null}if(n.host.toLowerCase()!=="totp")return null;let o=NS(n.searchParams.get("secret")??"");if(!o)return null;let s=(n.searchParams.get("algorithm")??"SHA1").toUpperCase(),i=Number(n.searchParams.get("digits")??"6"),a=Number(n.searchParams.get("period")??"30");return s!=="SHA1"&&s!=="SHA256"&&s!=="SHA512"||i!==6&&i!==7&&i!==8||!Number.isInteger(a)||a<10||a>300?null:{key:o,algorithm:s,digits:i,period:a}}let r=NS(t);return r?{key:r,algorithm:"SHA1",digits:6,period:30}:null}function oj(e,t,r,n){let o=Buffer.alloc(8);o.writeBigUInt64BE(t);let s=rj(n.toLowerCase(),e).update(o).digest(),i=s[s.length-1]&15,a=(s[i]&127)<<24|s[i+1]<<16|s[i+2]<<8|s[i+3];return String(a%10**r).padStart(r,"0")}function DS(e,t=Date.now()){let r=BigInt(Math.floor(t/1e3/e.period));return oj(e.key,r,e.digits,e.algorithm)}function MS(e,t=Date.now()){let r=Math.floor(t/1e3)%e.period;return e.period-r}var nj,Am=p(()=>{"use strict";nj="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"});var pt,Pm=p(()=>{"use strict";pt={maxRecords:200,maxLabel:80,maxUsername:254,maxPassword:1024,maxTotp:512}});import{createHash as sj,randomBytes as WS}from"node:crypto";import{chmodSync as LS,existsSync as ij,mkdirSync as aj,readFileSync as lj,renameSync as cj,rmSync as uj,writeFileSync as dj}from"node:fs";import{homedir as pj}from"node:os";import US from"node:path";function Fi(){return US.join(pj(),".kynver","site-logins")}function Im(e){return`${sj("sha256").update(`kynver-site-login:${e}`).digest("hex").slice(0,32)}.vault.json`}function BS(e,t,r,n=!0){let o=typeof e=="string"?e.trim():"";if(!o&&n)throw new J(`${t} is required`,"invalid");if(o.length>r)throw new J(`${t} is too long (max ${r})`,"invalid");if(FS.test(o))throw new J(`${t} contains control characters`,"invalid");return o}function fj(){let e="abcdefghijkmnpqrstuvwxyz23456789",t=WS(10);return`lg_${Array.from(t,r=>e[r%e.length]).join("")}`}var J,FS,Kc,Nn=p(()=>{"use strict";OS();Em();Am();Pm();J=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SiteLoginError"}code},FS=/[\u0000-\u001f\u007f]/;Kc=class{constructor(t){this.opts=t;let r=t.agentOsId.trim();if(!r||FS.test(r)||r.length>200)throw new J("invalid workspace id","invalid");this.agentOsId=r,this.rootDir=t.rootDir??Fi(),this.filePath=US.join(this.rootDir,Im(r)),this.now=t.now??Date.now}opts;agentOsId;filePath;rootDir;now;exists(){return ij(this.filePath)}keyMode(){return this.exists()?this.read().keyMode:null}async createWithPassphrase(t){if(this.exists())throw new J("a saved-login vault already exists on this computer","exists");if(t.length<Rm)throw new J(`the vault passphrase must be at least ${Rm} characters`,"invalid");let r=AS(),n=PS(this.opts.scryptCost),o=await wm(t,n,this.opts.minScryptN);return this.write({v:1,agentOsId:this.agentOsId,keyMode:"passphrase",kdf:n,wrappedKey:Wi(o,r,_m(this.agentOsId)),keyCheck:Wi(r,Uc,Wc(this.agentOsId)),records:[]}),o.fill(0),r}createWithKeychainKey(t){if(this.exists())throw new J("a saved-login vault already exists on this computer","exists");this.write({v:1,agentOsId:this.agentOsId,keyMode:"keychain",keyCheck:Wi(t,Uc,Wc(this.agentOsId)),records:[]})}async unlockWithPassphrase(t){let r=this.read();if(r.keyMode!=="passphrase"||!r.kdf||!r.wrappedKey)throw new J("this vault is unlocked by the Kynver desktop app, not a passphrase","invalid");let n=null;try{n=await wm(t,r.kdf,this.opts.minScryptN);let o=Bc(n,r.wrappedKey,_m(this.agentOsId));return this.verifyKey(r,o),o}catch(o){throw o instanceof J?o:o instanceof At&&/unsafe|salt/.test(o.message)?new J(o.message,"corrupt"):new J("wrong vault passphrase","bad_key")}finally{n?.fill(0)}}unlockWithKey(t){return this.verifyKey(this.read(),t),t}wipe(){return this.exists()?(uj(this.filePath,{force:!0}),!0):!1}list(){return this.exists()?this.read().records.map(({secret:t,...r})=>r):[]}get(t){return this.list().find(r=>r.handle===t)??null}add(t,r){let n=this.read();if(this.verifyKey(n,t),n.records.length>=pt.maxRecords)throw new J(`at most ${pt.maxRecords} saved logins per workspace`,"full");let o=this.buildRecord(t,r,fj(),new Date(this.now()).toISOString());n.records.push(o),this.write(n);let{secret:s,...i}=o;return i}replace(t,r,n){let o=this.read();this.verifyKey(o,t);let s=o.records.findIndex(c=>c.handle===r);if(s<0)throw new J("no saved login with that id","not_found");let i=this.buildRecord(t,n,r,o.records[s].createdAt);o.records[s]=i,this.write(o);let{secret:a,...l}=i;return l}remove(t){if(!this.exists())return!1;let r=this.read(),n=r.records.filter(o=>o.handle!==t);return n.length===r.records.length?!1:(r.records=n,this.write(r),!0)}readSecret(t,r){let n=this.read();this.verifyKey(n,t);let o=n.records.find(i=>i.handle===r);if(!o)throw new J("no saved login with that id","not_found");let s;try{s=Bc(t,o.secret,xm({agentOsId:this.agentOsId,...o}))}catch{throw new J("this saved login failed its integrity check and was not used","corrupt")}try{let i=JSON.parse(s.toString("utf8"));if(typeof i.p!="string")throw new Error("shape");let{secret:a,...l}=o;return{summary:l,secret:{password:i.p,...typeof i.t=="string"?{totp:i.t}:{}}}}catch{throw new J("this saved login failed its integrity check and was not used","corrupt")}finally{s.fill(0)}}touch(t){let r=this.read(),n=r.records.find(o=>o.handle===t);n&&(n.lastUsedAt=new Date(this.now()).toISOString(),this.write(r))}buildRecord(t,r,n,o){let s=TS(r.origin);if(!s.ok)throw new J(s.reason,"invalid");let i=BS(r.label,"label",pt.maxLabel),a=BS(r.username,"username",pt.maxUsername),l=typeof r.password=="string"?r.password:"";if(!l)throw new J("password is required","invalid");if(l.length>pt.maxPassword)throw new J("password is too long","invalid");let c=typeof r.totp=="string"&&r.totp.trim()?r.totp.trim():void 0;if(c&&(c.length>pt.maxTotp||!Fc(c)))throw new J("the authenticator key is not a valid base32 secret or otpauth://totp link","invalid");let u={handle:n,origin:s.origin,label:i,username:a,hasTotp:!!c,createdAt:o,lastUsedAt:null},d=Buffer.from(JSON.stringify(c?{p:l,t:c}:{p:l}),"utf8");try{return{...u,secret:Wi(t,d,xm({agentOsId:this.agentOsId,...u}))}}finally{d.fill(0)}}verifyKey(t,r){try{let n=Bc(r,t.keyCheck,Wc(this.agentOsId));if(!IS(n,Uc))throw new Error("mismatch")}catch{throw new J("the vault key does not open this vault","bad_key")}}read(){if(!this.exists())throw new J("no saved-login vault on this computer yet","missing");let t;try{t=JSON.parse(lj(this.filePath,"utf8"))}catch{throw new J("the saved-login vault file is unreadable","corrupt")}if(!t||t.v!==1||t.keyMode!=="passphrase"&&t.keyMode!=="keychain"||!t.keyCheck||!Array.isArray(t.records))throw new J("the saved-login vault file is not a vault Kynver understands","corrupt");if(t.agentOsId!==this.agentOsId)throw new J("this saved-login vault belongs to a different workspace","corrupt");return t.records=t.records.filter(r=>r&&typeof r.handle=="string"&&typeof r.origin=="string"&&typeof r.label=="string"&&typeof r.username=="string"&&r.secret&&typeof r.secret.n=="string"&&typeof r.secret.c=="string"),t}write(t){aj(this.rootDir,{recursive:!0,mode:448});try{LS(this.rootDir,448)}catch{}let r=`${this.filePath}.${WS(4).toString("hex")}.tmp`;dj(r,`${JSON.stringify(t)}
80
- `,{mode:384}),cj(r,this.filePath);try{LS(this.filePath,384)}catch{}}}});import{appendFileSync as hj,chmodSync as yj,existsSync as jS,mkdirSync as kj,readFileSync as VS,renameSync as bj,statSync as vj,writeFileSync as Rj}from"node:fs";import wj from"node:path";var Sj,GS,_j,$c,JS=p(()=>{"use strict";Nn();Sj=512*1024,GS=1e3,_j=10080*60*1e3,$c=class{constructor(t,r=Fi(),n=Date.now){this.rootDir=r;this.now=n;this.filePath=wj.join(r,Im(t).replace(/\.vault\.json$/,".audit.jsonl"))}rootDir;now;filePath;record(t){let r={at:new Date(this.now()).toISOString(),...t};try{kj(this.rootDir,{recursive:!0,mode:448}),this.rotateIfLarge(),hj(this.filePath,`${JSON.stringify(r)}
81
- `,{mode:384}),yj(this.filePath,384)}catch{}return r}entries(t=GS){if(!jS(this.filePath))return[];try{return VS(this.filePath,"utf8").split(`
82
- `).filter(Boolean).slice(-t).map(n=>{try{return JSON.parse(n)}catch{return null}}).filter(n=>n!==null)}catch{return[]}}lastFill(){let t=this.entries().filter(r=>r.event==="fill");return t[t.length-1]??null}originRefusalsSince(t=_j){let r=this.now()-t;return this.entries().filter(n=>n.event==="fill"&&n.code==="origin_mismatch"&&Date.parse(n.at)>=r).length}rotateIfLarge(){if(!jS(this.filePath)||vj(this.filePath).size<Sj)return;let t=VS(this.filePath,"utf8").split(`
83
- `).filter(Boolean).slice(-GS/2),r=`${this.filePath}.tmp`;Rj(r,`${t.join(`
73
+ `});import WK from"node:path";function nm(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.handoffState;return typeof t=="string"&&$K.has(t)}function dc(e){return!!(e&&FK.test(e))}function yw(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!nm(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let t=e.error?.trim()??"",r=e.exit??null;if(r?.oomEvidence||dc(t))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":gw.test(t)||gw.test(n)?"timed_out":r&&r.exitCode===0&&!r.signal&&!r.spawnError?"no_report":r&&(r.signal||r.spawnError||r.exitCode!==null&&r.exitCode!==0)||t?"crashed":"no_report"}function kw(e){let t=[KK(e.stopClass)],r=mw(e.exit);r&&t.push(r),e.exit?.oomEvidence&&t.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&t.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?t.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&t.push(e.reconcileReason),t.join(" \u2014 ").slice(0,600)}function KK(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}function bw(e,t=process.env){if(e<=0)return null;let r=Number.parseInt(t.KYNVER_NODE_OLD_SPACE_SIZE_MB??"",10),n=Number.isFinite(r)&&r>0?Math.max(r,hw/2):hw/2;return Math.min(HK,n*2**e)}function vw(e,t,r){let n=0,o;try{o=se(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(r&&s===r)continue;let i=$(WK.join(q(o.id),"workers",L(s),"worker.json"),void 0);if(!(!i||i.taskId!==t)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(uc(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&dc(Oo(i.stderrPath,20))&&(n+=1)}}return n}function Rw(e,t){if(!e)return t();let r=process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,n=process.env.NODE_OPTIONS;process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=String(e);let o=`--max-old-space-size=${e}`,s=(n??"").replace(/--max-old-space-size=\d+/g,"").trim();process.env.NODE_OPTIONS=s?`${s} ${o}`:o;try{return t()}finally{r===void 0?delete process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB:process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB=r,n===void 0?delete process.env.NODE_OPTIONS:process.env.NODE_OPTIONS=n}}var FK,gw,$K,hw,HK,om=p(()=>{"use strict";Q();M();cr();FK=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,gw=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,$K=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);hw=2048,HK=8192});function ww(e,t=240){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function Oi(e){let t=(e??"").trim();if(!t)return null;if(Ii(t))return{blocked:!0,reason:`provider authentication failed: ${ww(t)}`};for(let r of jK)if(r.test.test(t))return{blocked:!0,reason:`${r.label}: ${ww(t)}`};return null}var jK,sm=p(()=>{"use strict";lc();jK=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Sw(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function VK(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function GK(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Sw(e.head)}function JK(e,t,r){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${t} uncommitted change${t===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&r){let o=r.length>12?r.slice(0,12):r;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Wo(e){if(e.alive||VK(e.finalResult))return null;let t=(e.changedFiles??[]).filter(i=>i.trim()).length,r=Sw(e.headCommit)??GK(e.gitAncestry),n=t>0,o=!!r;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:t,headCommit:r,attentionReason:JK(s,t,r)}}var pc=p(()=>{"use strict"});import{existsSync as qK,readFileSync as YK,statSync as Cw}from"node:fs";import fc from"node:path";function ZK(e,t=process.env){let r=e?XK:zK,n=t.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return r;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):r}function eH(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function im(e){try{return Cw(e).mtimeMs}catch{return-1}}function tH(e){let t=fc.join(e,".git");try{if(Cw(t).isDirectory())return t;let r=/^gitdir:\s*(.+)$/m.exec(YK(t,"utf8"));return r?fc.resolve(e,r[1].trim()):null}catch{return null}}function _w(e){let t=tH(e);return[im(e),t?im(fc.join(t,"HEAD")):-2,t?im(fc.join(t,"index")):-2].join(":")}function xw(e,t){return{changedFiles:wi(e),gitAncestry:Ql(e,{base:t.base,baseCommit:t.baseCommit})}}function rH(e,t){for(Kr.delete(e),Kr.set(e,t);Kr.size>QK;){let r=Kr.keys().next().value;if(r===void 0)break;Kr.delete(r)}}function Ew(e,t,r){let n=eH(t);if(!e||!e.trim())return Ti.missingWorktree++,{changedFiles:[],gitAncestry:To(n,"missing worktree path")};let o=`${e}\0${n}`;if(!qK(e))return Kr.delete(o),Ti.missingWorktree++,{changedFiles:[],gitAncestry:To(n,`worktree no longer exists: ${e}`)};if(r.alive)return Kr.delete(o),Ti.liveProbes++,xw(e,t);let s=r.ttlMs??ZK(!!t.baseCommit?.trim()),i=r.now??Date.now(),a=_w(e),l=Kr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Ti.hits++,l.probe;Ti.misses++;let c=xw(e,t);if(s>0){let u=.8+.4*(r.random??Math.random)();rH(o,{fingerprint:_w(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var zK,XK,QK,Kr,Ti,Aw=p(()=>{"use strict";_e();zK=10*6e4,XK=60*6e4,QK=2048,Kr=new Map,Ti={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Ni(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function nH(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function oH(e){if(Ni(e.headCommit)||Ni(e.prUrl)||Ni(e.artifactBundlePath)||Ni(e.patchPath))return!0;let t=e.gitAncestry;return!!(t?.checked&&t.headIsAncestorOfBase===!1&&Ni(t.head))}function Fo(e){return nH(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:oH(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function Iw(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var mc=p(()=>{"use strict"});function am(e){let t=e.trim();if(!t.startsWith("{"))return null;try{let r=JSON.parse(t);if(r&&typeof r=="object"&&!Array.isArray(r))return r}catch{return null}return null}function Pw(e){let t=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(t)?t.length:0}function $o(e){let t=e.trim();if(!t)return null;let r=am(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let u=am(s[1]??"");u&&n.push(u)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let u=am(t.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Pw(l);for(let u of n){let d=Pw(u);d>c&&(l=u,c=d)}return l}var gc=p(()=>{"use strict"});function Ow(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:e.trim()||null}function Tw(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function sH(e){return new Set(e.map(t=>Tw(Ow(t)??t)).filter(Boolean))}function Nw(e,t,r){let n=Ow(e)??e;if(!n)return"unrelated";let o=Tw(n);return sH(t).has(o)?"contract":r?(r.outcome==="skipped"||r.outcome==="blocked")&&r.reason?.trim()?"support":(r.outcome==="merged","unrelated"):"unrelated"}var Dw=p(()=>{"use strict"});function Ko(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function iH(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function En(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Ko(e)}function hc(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function Mw(e){let t=null;if(typeof e=="string"){let o=$o(e);o&&(t=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(t=e);if(!t)return[];let r=t.targetPrReconciliation??t.target_pr_reconciliation;if(!Array.isArray(r))return[];let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=En(String(s.prUrl??s.pr_url??"")),a=Ko(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ko(s.mergeCommit??s.merge_commit),reason:Ko(s.reason)})}return n}function Lw(e,t){let r=[],n=En(Ko(e.prUrl)??"");if(n&&r.push(n),t&&typeof t=="object"&&!Array.isArray(t)){let o=t,s=En(String(o.prUrl??o.pr_url??""));s&&r.push(s)}return[...new Set(r)]}function Bw(e){let{contract:t,snapshot:r}=e,n=e.finalResult??r.finalResult;if(!t.landingOnly&&t.targetPrUrls.length===0&&!t.repairEnforceOriginalPr)return{blocked:!1};if(!iH(n))return(t.requiresTargetPrReconciliation??(t.landingOnly||!!t.repairEnforceOriginalPr||t.targetPrUrls.length>0))&&t.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${t.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(t.requiresTargetPrReconciliation??(t.landingOnly||!!t.repairEnforceOriginalPr||t.targetPrUrls.length>0))&&!t.repairEnforceOriginalPr)return{blocked:!1};let s=t.repairEnforceOriginalPr?En(Ko(t.targetPrUrl)??"")??(t.targetPrUrls.length===1?En(t.targetPrUrls[0]):null):null;if(s){let d=Lw(r,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let h of d)if(h!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${h} instead of canonical target ${s}`}}let g=Mw(n).find(h=>h.prUrl===s);if(!g||g.outcome!=="merged"&&!(g.reason?.trim()&&(g.outcome==="skipped"||g.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Mw(n),a=new Map(i.map(d=>[hc(d.prUrl),d])),l=new Set(t.targetPrUrls.map(d=>hc(En(d)??d)).filter(Boolean)),c=Lw(r,n);if(t.landingOnly)for(let d of c){let f=a.get(hc(d)),m=Nw(d,t.targetPrUrls,f);if(!(m==="contract"||m==="support"))return l.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(t.targetPrUrls.length===0)return{blocked:!1};let u=[];for(let d of t.targetPrUrls){let f=hc(En(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function Uw(e){if(e.blocked)return e.detail??e.reason}var Ww=p(()=>{"use strict";gc();Dw()});function lH(e){let t=Date.now();if(e.providerTerminalError||ac(e.finalResult)||e.finalResult&&e.error?.trim()||Ii(e.error)||Ii(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Oi(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Fw(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&uH(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Fo(o);if(s.blocked){let i=Iw(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Bw({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Uw(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(cH(e))return{state:"done",reason:"empty abandoned worker record"};let o=Oi(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Wo({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let l=e.error?.trim();return{state:"needs_attention",reason:l?`${s.attentionReason} (${l})`:s.attentionReason}}let i=e.error?.trim(),a=dc(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let r=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(r)&&t-r>aH)return{state:"needs_attention",reason:`no first stream event ${Bf(r)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&t-n>lm?{state:"stale",reason:`no log/event/heartbeat activity for ${Bf(n)}s`}:{state:"ok",reason:"recent activity"}}function Fw(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function cH(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(t=>t.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function uH(e){let t=null;if(typeof e=="string"?t=$o(e):e&&typeof e=="object"&&!Array.isArray(e)&&(t=e),!t)return!1;let r=t.targetPrReconciliation??t.target_pr_reconciliation;return Array.isArray(r)?r.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function $w(e,t,r){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:t||(n??lr(r))}function Kw(e){let t=Cn(e.stdoutPath),r=Oe(e.heartbeatPath);return $w(e,t.finalResult,r)}function ae(e,t={}){let r=Cn(e.stdoutPath),n=Oe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=$w(e,r.finalResult,n),i=o?!1:oe(e.pid),a=ql(e.stdoutPath),l=ql(e.stderrPath),c=ql(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=Ew(e.worktreePath,{base:t.base,baseCommit:t.baseCommit},{alive:i}),f=_R([r.lastEventAt,n.lastHeartbeatAt,Yl(e.stdoutPath),Yl(e.stderrPath),Yl(e.heartbeatPath)]),m=i?null:uc(e.workerDir),g=s&&!nm(s)?s:null,h=r.error||!i&&!s&&Oo(e.stderrPath,10).trim()||void 0,y=h||!i&&s&&!g&&Oo(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=Fw(b)?null:b,v=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,S=lH({alive:i,finalResult:s,firstEventAt:r.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:k,landingContract:v,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),_=k||S.state==="blocked"?"blocked":o||S.state==="done"?"done":s?"exited":i?"running":"exited",R=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,w=yw({alive:i,finalResult:s,error:y??null,stale:S.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),B=R&&!i&&!g?R:w,j=B==="running"||B==="finished"?null:(R===B?e.stopReason:void 0)??kw({stopClass:B,exit:m,error:y??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:_,stopClass:B,stopReason:j,exit:m,attention:S,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:r.firstEventAt,lastEventAt:r.lastEventAt,lastActivityAt:f,currentTool:o?null:r.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:r.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function We(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function cm(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function yc(e,t){return t.length===0?e:t.some(r=>r.attention==="needs_attention"||r.attention==="stale"||r.attention==="blocked")?"needs_attention":t.every(r=>r.status==="done")?"done":t.some(r=>r.status==="running")?"running":e}var aH,lm,Ae=p(()=>{"use strict";xn();Pi();om();cr();lc();sm();pc();Aw();mc();Ww();gc();M();aH=18e4,lm=6e5});import{readFileSync as dH}from"node:fs";function pH(e){if(!e||process.platform!=="linux")return null;try{return dH(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Hw(e){if(!e.pid||process.platform!=="linux")return!0;let t=pH(e.pid);return t?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>t.includes(n)):!1}function Hr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!oe(e.pid)||!Hw(e)?!1:!Kw(e)}var kc=p(()=>{"use strict";Ae();M()});import Vw from"node:os";import Gw from"node:path";function jw(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function fH(e=A(),t,r){let n=jw(e.perWorkerMemBytes,bc),o=jw(e.memReserveBytes,vc),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Rc)),i=Vo({config:e,configuredMaxWorkersOverride:t,totalMemBytes:r??Vw.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Jw(e,t={}){let r=t.perWorkerMemBytes??bc,n=t.memReserveBytes??vc,o=t.memUtilization??Rc,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/r));return Math.min(i,wc)}function mH(){return KR()}function gH(e){let t=0;for(let r of Et(e)){let n=$(Gw.join(q(e.id),"workers",L(r),"worker.json"),void 0);!n||!Hr(n)||t++}return t}function um(){let e=0;for(let t of xe())e+=gH(t);return e}function Ho(){let e=[];for(let t of xe())for(let r of Et(t)){let n=$(Gw.join(q(t.id),"workers",L(r),"worker.json"),void 0);n&&Hr(n)&&e.push({runId:t.id,workerName:r})}return e}function Di(e){let t=e.config??A(),r=e.totalMemBytes??Vw.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=fH(t,e.configuredMaxWorkersOverride,r),c=Ct(t),u=e.freeMemBytes??mH(),d=e.activeWorkers??um(),f=Math.max(0,Math.floor(r*s)-o),m=Math.max(0,Math.floor(f/n)),g=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,y=ar(c,i??h),b=Math.max(0,Math.min(y,m)),k=Math.max(0,b-d),S=Math.min(k,g),R=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:$r({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});R&&!R.ok&&(S=0);let w=null;return S<=0&&(R&&!R.ok?w=R.reason??"disk gate blocked worker admission":d>=b?w=`at worker limit (${d}/${b} running)`:g<=0?w="insufficient free memory \u2014 waiting for workers to finish":w="no worker slots available"),{ok:S>0,totalMemBytes:r,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:S,reason:w,...R?{diskGate:R}:{}}}var bc,vc,Rc,wc,jo=p(()=>{"use strict";HR();K();Ue();Do();Mi();Ci();Q();Bo();kc();M();bc=500*1024*1024,vc=4*1024*1024*1024,Rc=.85,wc=64});function Li(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function Vo(e){let t=e.config??{},r=e.env??process.env,n=Li(t.perWorkerMemBytes,bc),o=Li(t.memReserveBytes,vc),s=Math.min(1,Math.max(.1,Number(t.memUtilization)>0?Number(t.memUtilization):Rc)),i=Jw(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Li(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(t.maxConcurrentWorkers!==void 0&&t.maxConcurrentWorkers!==null){let c=Li(t.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,wc),autoCap:i,workerCapSource:"config"}}let l=(r.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||r.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&r.KYNVER_MAX_WORKERS&&Li(r.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,wc),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Mi=p(()=>{"use strict";jo()});import{existsSync as hH,mkdirSync as Jae,readFileSync as yH,writeFileSync as qae}from"node:fs";import{homedir as kH}from"node:os";import bH from"node:path";function vH(e){let t=new Map;for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),t.set(s,i)}return t}function Sc(e=jr){return hH(e)?vH(yH(e,"utf8")):new Map}function qw(e=jr,t={}){let r=Sc(e),n=0,o=0;for(let[s,i]of r){if(!t.override&&process.env[s]!=null){o++;continue}process.env[s]=i,n++}return{path:e,loaded:n,skipped:o}}var jr,ur=p(()=>{"use strict";jr=bH.join(kH(),".kynver",".env")});var Yw=p(()=>{"use strict"});var zw=p(()=>{"use strict";Yw()});var _c=p(()=>{"use strict"});import{existsSync as RH,readFileSync as wH}from"node:fs";import{homedir as SH}from"node:os";import _H from"node:path";function pm(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function dm(e){return typeof e=="string"&&e.trim()?e:null}function fm(e){let t=pm(e);if(!t)return null;let r=t.desiredState;if(r!=="running"&&r!=="paused"&&r!=="stopped")return null;let n=t.policyVersion;if(typeof n!="number"||!Number.isInteger(n)||n<0)return null;let o=dm(t.requestedAt);return o?{desiredState:r,policyVersion:n,requestedAt:o,requestedByLabel:dm(t.requestedByLabel),reason:dm(t.reason)}:null}function Xw(e){let t=pm(pm(e)?.response);return!t||t.runtimeControl===void 0?null:fm(t.runtimeControl)}function Qw(e,t=SH()){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return _H.join(t,".kynver",`runtime-control-${r}.json`)}function mm(e,t,r){try{let n=Vr(e,r);if(n&&n.policyVersion>t.policyVersion)return;Re(Qw(e,r),{contractVersion:1,agentOsId:e,control:t,deliveredAt:new Date().toISOString()})}catch{}}function Vr(e,t){try{let r=Qw(e,t);if(!RH(r))return null;let n=JSON.parse(wH(r,"utf8"));return n.agentOsId!==e?null:fm(n.control)}catch{return null}}function Go(e){return e?.desiredState??"running"}function xH(e){return e==="keeper"||e==="desktop"}function CH(e,t,r=!1){let n=Go(e);return n==="paused"?"paused":n==="stopped"?r&&t===0?"stopped":"stopping":"running"}function Cc(e){return e.control?{policyVersion:e.control.policyVersion,state:CH(e.control,e.inFlightWorkers,e.exiting),supervised:xH(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function Zw(e){let t=Go(e);return t==="paused"?"runtime_paused":t==="stopped"?"runtime_stopped":null}function eS(e,t){return Go(e)==="stopped"&&t===0}function rS(e){tS=e}function nS(){return tS}var xc,tS,Gr=p(()=>{"use strict";M();xc=83;tS=null});var Bi,Jo=p(()=>{"use strict";zw();_c();Gr();Bi="kynver-cron-daemon.service"});import{existsSync as EH,readFileSync as AH}from"node:fs";function gm(){if(process.platform==="win32")return"win32";if(process.platform==="darwin")return"darwin";if(process.platform==="linux"){if(process.env.WSL_DISTRO_NAME?.trim())return"wsl";try{if(EH("/proc/version")){let e=AH("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Ec=p(()=>{"use strict"});var hm=p(()=>{"use strict";Ec()});var Ui=p(()=>{"use strict";ur();ct();K();Jo();hm()});import TH from"node:os";function Wi(e,t){let r=(t??TH.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${r}`}function sS(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Ac(e,t){let r=e.trim();if(!r)return Wi(t);let n=r.indexOf(":");if(n>=0){let o=r.slice(0,n).trim().toLowerCase()||t,s=sS(r.slice(n+1));return s?`${o}:${s}`:Wi(o)}return`${t}:${sS(r)}`}function qo(e){let t=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return t?Ac(t,e.boxKind):Wi(e.boxKind,e.hostLabel)}var Yo=p(()=>{"use strict";Ue();Ue()});var iS=p(()=>{"use strict";ur();Jo();Ui()});import{existsSync as dr,mkdirSync as NH,readdirSync as Ic,renameSync as aS,statSync as DH}from"node:fs";import pr from"node:path";function cS(e){try{return DH(e).isDirectory()}catch{return!1}}function MH(e){if(!dr(e))return!0;for(let t of lS){let r=pr.join(e,t);if(dr(r)&&(!cS(r)||Ic(r).length>0))return!1}return!0}function LH(e){let t=pr.join(e,"runs");if(!dr(t)||!cS(t))return!1;for(let r of Ic(t,{withFileTypes:!0})){if(!r.isDirectory()||r.name==="runs")continue;let n=pr.join(t,r.name,"run.json");if($(n,void 0)?.id)return!0}return!1}function BH(e){let t=pr.join(e,"runs");if(!dr(t))return!1;for(let r of Ic(t,{withFileTypes:!0})){if(!r.isDirectory())continue;if($(pr.join(t,r.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function UH(e){let t=pr.join(e,"ghost");return dr(t)?!dr(pr.join(t,"runs")):BH(e)}function uS(e){return LH(e.sharedRoot)?MH(e.forgeRoot)?UH(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function dS(e,t){NH(t,{recursive:!0});for(let r of lS){let n=pr.join(e,r),o=pr.join(t,r);if(dr(n)){if(dr(o)&&Ic(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(dr(o)){aS(n,o);continue}aS(n,o)}}}var lS,pS=p(()=>{"use strict";M();lS=["runs","worktrees"]});import{existsSync as $e}from"node:fs";import{homedir as WH}from"node:os";import Te from"node:path";function ym(e=process.env){return e.HOME?.trim()||WH()}function km(e=process.env){return Te.join(ym(e),".kynver","harness")}function Pc(e){let t=Te.resolve(Be(e.trim()));for(;FH.has(Te.basename(t));)t=Te.dirname(t);return t}function $H(e,t=process.env){return Te.join(km(t),e)}function KH(e=process.env){let t=km(e);if($e(Te.join(t,"runs")))return!0;if($e(t)&&!$e(Te.join(t,"ghost"))&&!$e(Te.join(t,"forge")))return $e(t);let r=Te.join(ym(e),fS);return $e(r)}function Oc(e){let t=e.env??process.env,r=t.KYNVER_HARNESS_ROOT?.trim()||t.OPUS_HARNESS_ROOT?.trim();if(r)return{harnessRoot:Pc(r),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Pc(n),source:"config"};let o=$H(e.boxKind,t);if($e(Te.join(o,"runs"))||$e(o)&&!HH(o))return{harnessRoot:o,source:"box_scoped"};let i=km(t);if(e.boxKind==="forge"){let a=uS({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&dS(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&KH(t)){if($e(Te.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if($e(i)&&!$e(Te.join(i,"ghost"))&&!$e(Te.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=Te.join(ym(t),fS);if($e(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function HH(e){if(!$e(e))return!0;for(let t of["runs","worktrees"]){let r=Te.join(e,t);if($e(r))return!1}return!0}var fS,FH,bm=p(()=>{"use strict";ct();pS();fS=Te.join(".openclaw","harness");FH=new Set(["runs","worktrees"])});import mS from"node:os";function Tc(e){return e?.trim()?e.trim():null}function jH(e,t){let r=t.trim().toLowerCase()||"host";return`${e}-${r}`.replace(/[^a-z0-9._-]+/g,"-")}function VH(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Wt(e=A(),t=process.env,r={}){let n=rt(t,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Tc(t.KYNVER_BOX_KIND)),a=r.strict===!0||VH(t);if((r.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let h="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||r.requireExplicitBoxKind?s.push(h):o.push(`${h} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let l=Tc(e.runnerId),c=Tc(t.KYNVER_RUNTIME_ID)??Tc(t.OPENCLAW_RUNTIME_ID),u=l??c??jH(n.boxKind,mS.hostname()),d=l?"config":c?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${u}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let f=Vo({config:e,env:t,totalMemBytes:mS.totalmem()}),m=ar(n.boxKind,f.configuredMaxWorkers??Vf(n.boxKind,f.autoCap)),g=Oc({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:t});return g.migrationBlocker&&s.push(g.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:u,runnerIdSource:d,maxConcurrentWorkers:m,workerCapSource:f.workerCapSource,harnessRoot:g.harnessRoot,harnessRootSource:g.source},errors:s,warnings:o}}var An=p(()=>{"use strict";K();Ue();Do();Mi();bm()});var vm=p(()=>{"use strict";Si();Ue();Yo();K();Ui();iS();ir();_t();An()});function Ge(e){let t=e.trim().toLowerCase();return JH[t]??t}var yS,GH,JH,Fi=p(()=>{"use strict";yS=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],GH=yS.join("|"),JH={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{mkdirSync as bS}from"node:fs";import{homedir as vS}from"node:os";import Nc from"node:path";function zo(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return RS.includes(t)?t:null}function In(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(typeof r!="string"||!r.trim()||r.includes("\0"))continue;let n=Be(r.trim());if(t.includes(n)||t.push(n),t.length>=YH)break}return t}function Dc(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.others==="default"?"default":null,n=e.byBox;if(!n||typeof n!="object"||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,t))return r;let o=n[t];if(!o||typeof o!="object")return null;let s=o,i=zo(s.access);return i?{access:i,folders:In(s.folders)}:null}function Mc(e){return qH.has(e)?"folder":"off"}function kS(e=vS()){let t=Nc.join(e,".kynver",wS);return bS(t,{recursive:!0}),t}function Xo(e){let t=e.home??vS(),r=zo(e.local?.chatComputerAccess),n,o;r==="off"?(n={access:"off",folders:[]},o="local_off"):e.website==="default"?(n={access:"off",folders:[]},o="default"):e.website?(n=e.website,o="website"):r?(n={access:r,folders:In(e.local?.chatWorkFolders)},o="local"):(n={access:Mc(e.engine),folders:[]},o="default");let{access:s}=n;if(s==="off")return{access:s,folders:[],workDir:kS(t),extraFolders:[],source:o};let i=n.folders;s==="folder"&&(i=i.slice(0,1)),i.length===0&&s!=="full"&&(i=[kS(t)]);for(let l of i)try{bS(l,{recursive:!0})}catch{}let a=i[0]??t;return{access:s,folders:i,workDir:a,extraFolders:s==="folders"?i.slice(1):[],source:o}}function Lc(e,t){if(e.access==="off")return!1;if(e.access==="full")return!0;let r=Nc.resolve(t);return e.folders.some(n=>{let o=Nc.relative(n,r);return o===""||!o.startsWith("..")&&!Nc.isAbsolute(o)})}var RS,qH,YH,wS,Pn=p(()=>{"use strict";ct();RS=["off","folder","folders","full"],qH=new Set(["cursor","codex","antigravity"]),YH=16,wS="chat-workspace"});var SS=p(()=>{"use strict";Pn()});import{execFileSync as zH}from"node:child_process";function Sm(e=process.env){let t=e[XH]?.trim().toLowerCase();return t==="file"?"file":t==="keychain"?"keychain":"auto"}function QH(e,t,r){let n={encoding:"utf8",timeout:r.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...r.input!==void 0?{input:r.input}:{}};return zH(e,t,n)}function ZH(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Rm(e,t){let r=JSON.stringify(On),n=JSON.stringify(t),o="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${o} try { $c = $v.Retrieve(${r}, ${n}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${o} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${r}, ${n}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${r}, ${n}, $s)))`:`${o} try { $old = $v.Retrieve(${r}, ${n}); $v.Remove($old) } catch {}`}function _S(e={}){if(Sm(e.env??process.env)==="file")return null;let r=ZH(e.platform??process.platform);return r?new wm(r,e.exec):null}var On,XH,fr,wm,xS=p(()=>{"use strict";On="kynver",XH="KYNVER_CREDENTIAL_STORE";fr=5e3;wm=class{constructor(t,r=QH){this.backend=t;this.exec=r}backend;exec;get(t){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",On,"-a",t,"-w"],{timeoutMs:fr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",On,"account",t],{timeoutMs:fr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Rm("get",t)],{timeoutMs:fr}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(t,r){if(!r||/[\r\n]/.test(r))return!1;try{this.backend==="macos"?this.exec("security",["add-generic-password","-U","-s",On,"-a",t,"-l",`Kynver (${t})`,"-w",r],{timeoutMs:fr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${t})`,"service",On,"account",t],{input:`${r}
74
+ `,timeoutMs:fr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Rm("set",t)],{input:`${r}
75
+ `,timeoutMs:fr})}catch{return!1}return this.get(t)===r}delete(t){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",On,"-a",t],{timeoutMs:fr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",On,"account",t],{timeoutMs:fr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Rm("delete",t)],{timeoutMs:fr})}catch{}}}});function es(){return _m||(_m=new xm),_m}var Qo,Zo,ej,Bc,xm,_m,CS=p(()=>{"use strict";xS();Qo="api-key",Zo="chat-box-credential",ej=6e4,Bc=class extends Error{constructor(t){super(`KYNVER_CREDENTIAL_STORE=keychain but the OS keychain could not store "${t}"; refusing to write the secret to disk`),this.name="KeychainUnavailableError"}},xm=class{cache=new Map;keychain;env;now;constructor(t={}){this.env=t.env??process.env,this.keychain=t.keychain===void 0?_S({env:this.env}):t.keychain,this.now=t.now??Date.now}get available(){return this.keychain!==null}get backend(){return this.keychain?.backend??null}read(t){if(!this.keychain)return null;let r=this.cache.get(t);if(r&&this.now()-r.at<ej)return r.value;let n=this.keychain.get(t);return this.cache.set(t,{value:n,at:this.now()}),n}write(t,r){let n=Sm(this.env);if(!this.keychain){if(n==="keychain")throw new Bc(t);return!1}let o=this.keychain.set(t,r);if(o)this.cache.set(t,{value:r,at:this.now()});else if(this.cache.delete(t),n==="keychain")throw new Bc(t);return o}remove(t){this.cache.delete(t),this.keychain?.delete(t)}invalidate(t){t?this.cache.delete(t):this.cache.clear()}},_m=null});import{existsSync as ES,mkdirSync as AS,readFileSync as IS,writeFileSync as PS}from"node:fs";import{homedir as nj,totalmem as _ce}from"node:os";import Am from"node:path";function ts(e){let t=String(e??"").trim();if(!t)return{ok:!1,reason:"missing"};let r=t.toLowerCase();return sj.has(r)?{ok:!1,value:t,reason:"placeholder"}:oj.test(t)?{ok:!0,value:t}:{ok:!1,value:t,reason:"not a UUID"}}function Im(e){let t=ts(e),r=t.value??String(e??"").trim(),n=r?`"${r}"`:"<empty>",o=t.reason==="placeholder"?"looks like a placeholder":t.reason??"is invalid";return[`Invalid AgentOS id ${n}: ${o}.`,"AgentOS ids are UUIDs from the AgentOS registry, not slugs or examples (for example, not `aos`).","Fix: run `kynver bootstrap` to relink this runner, or run `kynver setup --agent-os-id <uuid>` / pass `--agent-os-id <uuid>` after copying the id from Command Center.","If this came from stale ~/.kynver/config.json, remove or replace the agentOsId value before starting the daemon."].join(" ")}function OS(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Be(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Be(e.defaultRepo.trim())}:{}}}function A(){if(!ES(Cm))return{};try{return OS(JSON.parse(IS(Cm,"utf8")))}catch{return{}}}function Fe(e){AS(Wc,{recursive:!0}),PS(Cm,`${JSON.stringify(hS(e),null,2)}
76
+ `,{mode:384})}function hS(e){return OS(e)}function Pm(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Ve(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Ve(e.defaultRepo.trim())}:{},...e.chatWorkFolders?.length?{chatWorkFolders:e.chatWorkFolders.map(Ve)}:{}}}function mr(){if(Mf(),!ES(Em))return{};try{return JSON.parse(IS(Em,"utf8"))}catch{return{}}}function $i(e){Mf(),AS(Wc,{recursive:!0}),PS(Em,`${JSON.stringify(e,null,2)}
77
+ `,{mode:384})}function TS(e,t,r,n={}){let o=mr();if(es().write(e,r)){let i={...o,...n};delete i[t],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),$i(i);return}$i({...o,...n,[t]:r})}function NS(e,t){let r=es().read(e);return r||mr()[t]}function DS(){if(et())return{backend:null,moved:[],stillInFile:[]};let e=es(),t=mr(),r=[],n=[],o=[[Qo,"apiKey"],[Zo,"chatBoxCredential"]];for(let[s,i]of o){let a=t[i];a&&(e.available&&e.write(s,a)?r.push(i):n.push(i))}if(r.length>0){let s={...mr()};for(let i of r)delete s[i];s.store="keychain",s.keychainAccounts=Array.from(new Set([...s.keychainAccounts??[],...r.map(i=>i==="apiKey"?Qo:Zo)])).sort(),$i(s)}return{backend:e.backend,moved:r,stillInFile:n}}function Om(){return bR(ij)}function Ce(){return Om().getApiKey()}function Ne(e){return Om().getRunnerToken(e)}function Tn(e,t){Om().persistRunnerToken(e,t)}function Tm(e){let t=Pe("KYNVER_CHAT_BOX_CREDENTIAL");if(t)return t;if(et())return Uc?.agentOsId===e?Uc.credential:void 0;let r=mr();if(!(r.chatBoxCredentialAgentOsId&&r.chatBoxCredentialAgentOsId!==e))return NS(Zo,"chatBoxCredential")}function MS(e,t){if(et()){Uc={agentOsId:e,credential:t};return}TS(Zo,"chatBoxCredential",t,{chatBoxCredentialAgentOsId:e})}function LS(){if(et()){Uc=null;return}es().remove(Zo);let e={...mr()};delete e.chatBoxCredential,delete e.chatBoxCredentialAgentOsId,$i(e)}function BS(){let e=es();return process.env.KYNVER_API_KEY?{backend:e.backend,apiKey:"env"}:e.read(Qo)?{backend:e.backend,apiKey:"keychain"}:mr().apiKey?{backend:e.backend,apiKey:"file"}:{backend:e.backend,apiKey:"none"}}function me(e){let t=Ki(e);return t||FS("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),t}function Nn(e){return Ki(e)}function Ki(e){let t=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||A().apiBaseUrl;return sr(t)}function aj(e,t){let r=e||Ne(t)||(t?void 0:Ne(A().agentOsId));if(r)return String(r);let n=Pe("KYNVER_RUNTIME_SECRET")||Pe("KYNVER_CRON_SECRET")||Pe("OPENCLAW_CRON_SECRET");if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function Fc(e,t,r){let n=aj(e,t);if(n)return{ok:!0,secret:n};let o=Ce(),s=Ki(r?.baseUrl);if(o&&t&&s)try{let i=await Dn(t,{baseUrl:s,apiKey:o});return Tn(t,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function ye(e,t,r){let n=await Fc(e,t,r);if(n.ok)return n.secret;FS(n.reason)}async function US(e,t){let r=Ce(),n=Ki(t?.baseUrl);if(!r||!e||!n)return null;try{let o=await Dn(e,{baseUrl:n,apiKey:r});return Tn(e,o),o}catch{return null}}async function WS(e,t,r){let n=Ce(),o=Ki(r?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!t)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Dn(t,{baseUrl:o,apiKey:n});return s&&s!==e?(Tn(t,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Dn(e,t){let r=t?.apiKey||Ce();if(!r)throw new Error("API key required \u2014 run `kynver login` first");let o=`${me(t?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await pt(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(t?.enableMcpUpdates?{enableMcpUpdates:!0}:{})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}function FS(e){console.error(e),process.exit(1)}var Wc,Cm,Em,oj,sj,Fce,$ce,ij,Uc,K=p(()=>{"use strict";Si();ct();ir();Ue();Do();Mi();Ci();Ui();vm();Fi();An();SS();_t();CS();Wc=Am.join(nj(),".kynver"),Cm=Am.join(Wc,"config.json"),Em=Am.join(Wc,"credentials"),oj=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,sj=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);Fce=500*1024*1024,$ce=4*1024*1024*1024;ij={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:NS(Qo,"apiKey")},getRunnerToken(e){let t=mr();if(!!t.runnerToken&&!!e&&t.runnerTokenAgentOsId===e)return t.runnerToken;let n=process.env.KYNVER_RUNNER_TOKEN?.trim();if(n)return n;if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken},persistApiKey(e){TS(Qo,"apiKey",e)},persistRunnerToken(e,t){$i({...mr(),runnerToken:t,runnerTokenAgentOsId:e})}};Uc=null});import Nm from"node:path";function De(e){return Pc(e)}function ft(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return De(e);let t=A(),r=t.harnessRoot?.trim();if(r)return De(r);let n=Wt(t,process.env);return n.identity?n.identity.harnessRoot:Oc({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function ot(e){return Nm.join(De(e),"runs")}function rs(e){return Nm.join(De(e),"worktrees")}function $S(){let e=ft();return{harnessRoot:e,runsDir:ot(e),worktreesDir:rs(e)}}function gr(e,t){return Nm.join(e,L(t))}var At=p(()=>{"use strict";K();bm();An();M()});import{existsSync as $c,readdirSync as lj,statSync as cj}from"node:fs";import Mn from"node:path";function ke(){return $S()}function se(e){let{runsDir:t}=ke(),r=Mn.join(gr(t,L(e)),"run.json");return $c(r)||ut(`run '${e}' not found`),$(r)}function xe(){let{runsDir:e}=ke();return KS(e)}function Kc(e){return KS(ot(e))}function uj(e){try{return cj(e).isDirectory()}catch{return!1}}function KS(e){if(!$c(e))return[];let t=[];for(let r of lj(e,{withFileTypes:!0})){if(r.name==="runs")continue;let n=Mn.join(e,r.name);if(!uj(n))continue;let o=$(Mn.join(n,"run.json"),void 0);o?.id&&t.push(o)}return t}function Ln(e,t){let{runsDir:r}=ke(),n=Mn.join(gr(r,L(e)),"run.json"),o=Mn.join(gr(r,L(e)),"workers",L(t),"worker.json");return $c(o)||($c(n)||ut(`run '${e}' not found`),ut(`worker '${t}' not found in run '${e}'`)),$(o)}function Je(e){let{runsDir:t}=ke();Re(Mn.join(gr(t,e.id),"run.json"),e)}function ee(e,t){let{runsDir:r}=ke();Re(Mn.join(gr(r,e),"workers",t.name,"worker.json"),t)}function q(e){let{harnessRoot:t}=ke();return Hi(t,e)}function Hi(e,t){return gr(ot(e),L(t))}var Q=p(()=>{"use strict";At();M()});import dj from"node:path";function pj(e){let t=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],r=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...t.length?{ownedPaths:t}:{},...r.length?{writeSetPrefixes:r}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function ns(e){let t=se(e),r=[];for(let n of Object.keys(t.workers||{})){let o=$(dj.join(q(t.id),"workers",L(n),"worker.json"),void 0);!o?.taskId||!Hr(o)||r.push({runId:t.id,workerName:n,taskId:o.taskId,pid:o.pid,...pj(o)})}return r}var Hc=p(()=>{"use strict";Q();kc();M()});function Dm(e){return typeof e=="object"&&e!==null&&e.type===jc}function HS(e,t=process){let r=!1,n=a=>{r||(r=!0,e(a))},s=["SIGINT","SIGTERM","SIGBREAK","SIGHUP"].map(a=>{let l=()=>n(a);return t.on(a,l),[a,l]}),i=a=>{Dm(a)&&n("ipc")};return t.on("message",i),t.channel?.unref?.(),()=>{for(let[a,l]of s)t.off(a,l);t.off("message",i)}}function jS(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return[];let n=t.collect??ns,o=t.killTree??he,s;try{s=n(e)}catch{return[]}let i=[];for(let a of s)a.pid&&i.push({workerName:a.workerName,pid:a.pid,result:o(a.pid,"SIGKILL")});return i}var jc,Vc=p(()=>{"use strict";Hc();ki();jc="kynver:daemon-stop"});import{createHash as fj}from"node:crypto";function st(e){return JSON.stringify(Mm(e))}function Mm(e){if(Array.isArray(e))return e.map(Mm);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=Mm(e[r]);return t}return e}function VS(e){return`ib-${fj("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function os(e){if(!e)return null;let t=e.trim();if(!t)return null;if(/^[0-9a-fA-F]{64}$/.test(t))return new Uint8Array(t.match(/.{2}/g).map(r=>parseInt(r,16)));try{let r=Buffer.from(t,"base64");if(r.length===32)return new Uint8Array(r)}catch{}return null}function ji(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.bundle;return!(!r||typeof r!="object"||typeof r.version!="string"||!r.version||typeof r.generatedAt!="string"||!Array.isArray(r.personas)||!r.instructions||typeof r.instructions!="object"||!r.policyThresholds||typeof r.policyThresholds!="object")}function Gc(e=process.env){if(e.NODE_ENV==="production")return!1;let t=e.KYNVER_ALLOW_DEV_SIGNING_KEYS?.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"?!0:e.NODE_ENV==="test"||e.VITEST==="true"}var Jr=p(()=>{"use strict"});import{createHash as mj,createPublicKey as gj,verify as hj}from"node:crypto";function bj(e){return`ca-${mj("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Bn(e,t=process.env){let r=os(t.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(r)return bj(r)!==e?null:r;let n=kj[e];return!n||e===GS&&!Gc(t)?null:os(n)}function vj(e){return gj({key:Buffer.concat([yj,Buffer.from(e)]),format:"der",type:"spki"})}function Rj(e,t){return!Array.isArray(e)||e.length!==t.length?!1:e.every((r,n)=>typeof r=="string"&&r===t[n])}function wj(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||typeof r.agentOsId!="string"||!r.agentOsId||!Array.isArray(r.argv)||r.argv.some(n=>typeof n!="string")||typeof r.userId!="string"||!r.userId||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function JS(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!wj(e))return{ok:!1,reason:"malformed command authorization proof"};if(e.payload.agentOsId!==t.agentOsId)return{ok:!1,reason:"agentOsId mismatch"};if(!Rj(e.payload.argv,t.argv))return{ok:!1,reason:"argv mismatch"};if(e.payload.exp<=n)return{ok:!1,reason:"proof expired"};let o=Bn(e.publicKeyId,r);if(!o)return{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let s;try{s=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(s.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let i=Buffer.from(st(e.payload),"utf8");return hj(null,i,vj(o),s)?{ok:!0,payload:e.payload}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(i){return{ok:!1,reason:`signature verification failed: ${i.message}`}}}var yj,GS,kj,Vi=p(()=>{"use strict";Jr();yj=Buffer.from("302a300506032b6570032100","hex"),GS="ca-6297fb8e1773",kj={[GS]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"}});function Jc(e){let t=typeof e.description=="string"?e.description:"",r=typeof e.executorRef=="string"?e.executorRef:"",o=[...t.matchAll(Sj)].at(-1)?.[1]?.toLowerCase();if(o)return o==="write"?"write":"read_only";if(/(?:^|:)read[_-]?only(?:$|:)/i.test(r))return"read_only";for(let s of t.matchAll(_j))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var Sj,_j,Lm=p(()=>{"use strict";Sj=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,_j=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi});import{createPublicKey as xj,verify as Cj}from"node:crypto";function Bm(e){let t=e.trim();if(!t||t.includes("\0")||/\s/.test(t))return null;let r,n,o=/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.+)$/.exec(t);if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let a;try{a=new URL(t)}catch{return null}if(!["https:","http:","ssh:","git:","git+ssh:","ssh+git:"].includes(a.protocol))return null;r=a.port?`${a.hostname}:${a.port}`:a.hostname,n=decodeURIComponent(a.pathname)}else if(o&&!/^[A-Za-z]$/.test(o[1]))r=o[1],n=o[2];else return null;r=r.toLowerCase().replace(/\.$/,"");let s=n.replace(/\/+$/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(s.length<2||s.some(a=>a==="."||a===".."))return null;let i=`${r}/${s.join("/")}`;return Ij.test(i)&&i.length<=512?i:null}function qS(e){let t=e.task??{};return e.landPrDispatch===!0||t.executor==="land_pr"?"land_pr":t.executor==="verify_live"?"verify_live":Jc(t)==="read_only"?"read_only":"write"}function Pj(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;if(Object.keys(t).sort().join(",")!=="payload,publicKeyId,signature"||typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;if(!r||typeof r!="object"||Array.isArray(r)||Object.keys(r).sort().join(",")!==[...Aj].join(",")||r.v!==1||r.kind!=="dispatch_claim")return!1;for(let n of["tenantId","agentOsId","taskId","leaseOwner","leaseToken","repoIdentity","requestNonce"])if(typeof r[n]!="string"||!r[n])return!1;return!(typeof r.attempt!="number"||!Number.isInteger(r.attempt)||r.attempt<0||typeof r.exp!="number"||!Number.isFinite(r.exp)||!qc.includes(r.operationClass))}function YS(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!Pj(e))return{ok:!1,code:"malformed",reason:"malformed dispatch claim authorization"};let o=e.payload;for(let a of Object.keys(t))if(o[a]!==t[a])return{ok:!1,code:"binding_mismatch",reason:`${a} mismatch`};if(o.exp<=n)return{ok:!1,code:"expired",reason:"authorization expired"};if(o.exp>n+Ej+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=Bn(e.publicKeyId,r);if(!s)return{ok:!1,code:"unknown_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let i=Buffer.from(e.signature,"base64url");if(i.length!==64)return{ok:!1,code:"bad_signature",reason:"not a 64-byte Ed25519 signature"};try{let a=xj({key:Buffer.concat([Oj,Buffer.from(s)]),format:"der",type:"spki"});return Cj(null,Buffer.from(st(o),"utf8"),a,i)?{ok:!0,payload:o}:{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"}}catch(a){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${a.message}`}}}var Ej,qc,Aj,Ij,Oj,zS=p(()=>{"use strict";Vi();Jr();Lm();Ej=120,qc=["write","read_only","land_pr","verify_live"],Aj=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"],Ij=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;Oj=Buffer.from("302a300506032b6570032100","hex")});import{spawnSync as Tj}from"node:child_process";import{randomBytes as Nj}from"node:crypto";function XS(e){if(!e||typeof e!="object"||Array.isArray(e))return"policy must be an object";let t=e;if(Object.keys(t).sort().join(",")!=="accountId,agentOsId,approvedOperationClasses,repoIdentity,revision,v")return"unexpected policy fields";if(t.v!==Dj)return"unsupported policy version";if(typeof t.revision!="number"||!Number.isSafeInteger(t.revision)||t.revision<1)return"invalid revision";if(typeof t.accountId!="string"||!t.accountId||t.accountId.length>128)return"invalid accountId";if(typeof t.agentOsId!="string"||!Mj.test(t.agentOsId))return"invalid agentOsId";if(typeof t.repoIdentity!="string"||Bm(`https://${t.repoIdentity}`)!==t.repoIdentity)return"invalid repoIdentity";let n=t.approvedOperationClasses;if(!Array.isArray(n)||n.length>qc.length)return"invalid approvedOperationClasses";let o=new Set;for(let s of n){if(typeof s!="string"||!qc.includes(s)||o.has(s))return"invalid approvedOperationClasses";o.add(s)}return{v:1,revision:t.revision,accountId:t.accountId,agentOsId:t.agentOsId,repoIdentity:t.repoIdentity,approvedOperationClasses:[...n]}}function Lj(e){let t=(c,u)=>({allow:!1,code:c,reason:u}),{policy:r,identity:n}=e;if(!n)return t("no_identity","the desktop runtime has not been prepared");if(!r)return t("no_policy","no approved execution policy on this computer");if(r.accountId!==n.accountId||r.agentOsId!==n.agentOsId)return t("policy_mismatch","the approved policy is for another account or workspace");if(!e.repoIdentity)return t("repo_identity_unavailable","the repository has no canonical remote identity");if(r.repoIdentity!==e.repoIdentity)return t("policy_mismatch","the approved policy is for another repository");let o=e.decision.claimAuthorization;if(o==null||!e.requestNonce)return t("missing_authorization","the claim carries no server authorization; the Kynver server must sign Desktop claims (KYNVER_COMMAND_AUTH_KEY, dispatch-claim-authorization diagnostic) and this runtime must be 0.2.87 or newer");let s=e.decision.task??{},i=qS(e.decision),a=YS(o,{tenantId:n.accountId,agentOsId:n.agentOsId,taskId:typeof s.id=="string"?s.id:"",attempt:typeof s.attempt=="number"?s.attempt:-1,leaseOwner:e.leaseOwner,leaseToken:typeof s.leaseToken=="string"?s.leaseToken:"",operationClass:i,repoIdentity:e.repoIdentity,requestNonce:e.requestNonce},e.env??process.env,e.nowSec);if(!a.ok)return t(a.code,a.reason);let l=a.payload;return e.consumed.consume(`${l.taskId}\0${l.leaseToken}\0${l.requestNonce}`)?r.approvedOperationClasses.includes(i)?{allow:!0,operationClass:i}:{allow:!1,code:"operation_not_approved",reason:`${i} work in ${r.repoIdentity} has not been approved on this computer`,consentRequired:{repoIdentity:r.repoIdentity,operationClass:i}}:t("replayed","this claim authorization was already used")}function ZS(){return et()}function e_(e){return Gi&&e.revision<Gi.revision?!1:(Gi=e,!0)}function Fm(){return Gi}function t_(e){QS=e}function r_(e){return Wm.add(e),()=>Wm.delete(e)}function n_(e){return{v:1,repoIdentity:e,requestNonce:Nj(16).toString("base64url")}}function Yc(e){let t=Tj("git",["-C",e,"remote","get-url","origin"],Z({encoding:"utf8",timeout:1e4}));return t.status!==0||typeof t.stdout!="string"?null:Bm(t.stdout.trim())}function o_(e){let t=Lj({...e,policy:Gi,identity:QS,consumed:Bj});if(!t.allow){let r=e.decision.task??{},n={taskId:typeof r.id=="string"?r.id:"",code:t.code,reason:t.reason,...t.consentRequired?{consentRequired:t.consentRequired}:{}};for(let o of Wm)try{o(n)}catch{}}return t}var Dj,Mj,Um,Gi,QS,Bj,Wm,zc=p(()=>{"use strict";_t();zS();M();Dj=1,Mj=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;Um=class{constructor(t=4096){this.capacity=t}capacity;order=[];keys=new Set;consume(t){if(this.keys.has(t))return!1;for(this.keys.add(t),this.order.push(t);this.order.length>this.capacity;)this.keys.delete(this.order.shift());return!0}};Gi=null,QS=null,Bj=new Um,Wm=new Set});import{createCipheriv as Uj,createDecipheriv as Wj,randomBytes as Km,scrypt as Fj,timingSafeEqual as $j}from"node:crypto";function i_(){return Km(Hm)}function a_(e=Kj){return{name:"scrypt",N:e.N,r:e.r,p:e.p,salt:Km(16).toString("base64")}}function Vm(e,t,r=Hj){if(t.name!=="scrypt"||!Number.isInteger(t.N)||t.N<r||t.r<8||t.p<1)return Promise.reject(new It("the vault file asks for an unsafe key-derivation setting; refusing"));let n=Buffer.from(t.salt,"base64");return n.length<16?Promise.reject(new It("the vault file's salt is invalid")):new Promise((o,s)=>{Fj(e.normalize("NFKC"),n,Hm,{N:t.N,r:t.r,p:t.p,maxmem:128*t.N*t.r*2},(i,a)=>i?s(i):o(a))})}function Ji(e,t,r){if(e.length!==Hm)throw new It("bad key length");let n=Km(s_),o=Uj("aes-256-gcm",e,n);o.setAAD(Buffer.from(r,"utf8"));let s=Buffer.concat([o.update(t),o.final(),o.getAuthTag()]);return{n:n.toString("base64"),c:s.toString("base64")}}function Xc(e,t,r){try{let n=Buffer.from(t.n,"base64"),o=Buffer.from(t.c,"base64");if(n.length!==s_||o.length<$m)throw new It;let s=Wj("aes-256-gcm",e,n);return s.setAAD(Buffer.from(r,"utf8")),s.setAuthTag(o.subarray(o.length-$m)),Buffer.concat([s.update(o.subarray(0,o.length-$m)),s.final()])}catch(n){throw n instanceof It?n:new It}}function Gm(e){for(let t of e)if(t.includes(`
78
+ `))throw new It("invalid vault field");return e.join(`
79
+ `)}function qm(e){return Gm(["kynver-site-login/v1/record",e.agentOsId,e.handle,e.origin,e.label,e.username,e.hasTotp?"totp":"no-totp"])}function l_(e,t){return e.length===t.length&&$j(e,t)}var Hm,s_,$m,Kj,Hj,jm,It,Jm,Qc,Zc,c_=p(()=>{"use strict";Hm=32,s_=12,$m=16,Kj={N:2**17,r:8,p:1},Hj=2**14,jm=10,It=class extends Error{constructor(t="the saved-login vault could not be decrypted"){super(t),this.name="VaultCryptoError"}};Jm=e=>Gm(["kynver-site-login/v1/vault-key",e]),Qc=e=>Gm(["kynver-site-login/v1/key-check",e]),Zc=Buffer.from("kynver-site-login-key-check-v1","utf8")});function u_(e){if(typeof e!="string"||!e.trim())return{ok:!1,reason:"a site address is required"};let t=e.trim();/^[a-z][a-z0-9+.-]*:/i.test(t)||(t=`https://${t}`);let r;try{r=new URL(t)}catch{return{ok:!1,reason:"not a valid web address"}}return r.protocol!=="https:"?{ok:!1,reason:"saved logins are only used on https:// sites"}:r.username||r.password?{ok:!1,reason:"the address must not contain a username or password"}:!r.hostname.includes(".")||jj.test(r.hostname)?{ok:!1,reason:"use the site's public address (e.g. https://www.instagram.com)"}:{ok:!0,origin:r.origin,unicodeHost:r.hostname.split(".").some(n=>n.startsWith("xn--"))}}function qi(e){if(typeof e!="string"||!e)return null;try{let t=new URL(e).origin;return t&&t!=="null"?t:null}catch{return null}}function Ym(e,t){let r=qi(t);return r!==null&&r===e}var jj,zm=p(()=>{"use strict";jj=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[.*\]|\d{1,3}(\.\d{1,3}){3})$/i});import{createHmac as Vj}from"node:crypto";function d_(e){let t=e.replace(/[\s-]/g,"").replace(/=+$/,"").toUpperCase();if(!t||!/^[A-Z2-7]+$/.test(t))return null;let r=0,n=0,o=[];for(let s of t)n=n<<5|Gj.indexOf(s),r+=5,r>=8&&(o.push(n>>>r-8&255),r-=8);return o.length?Buffer.from(o):null}function eu(e){let t=e.trim();if(!t)return null;if(/^otpauth:\/\//i.test(t)){let n;try{n=new URL(t)}catch{return null}if(n.host.toLowerCase()!=="totp")return null;let o=d_(n.searchParams.get("secret")??"");if(!o)return null;let s=(n.searchParams.get("algorithm")??"SHA1").toUpperCase(),i=Number(n.searchParams.get("digits")??"6"),a=Number(n.searchParams.get("period")??"30");return s!=="SHA1"&&s!=="SHA256"&&s!=="SHA512"||i!==6&&i!==7&&i!==8||!Number.isInteger(a)||a<10||a>300?null:{key:o,algorithm:s,digits:i,period:a}}let r=d_(t);return r?{key:r,algorithm:"SHA1",digits:6,period:30}:null}function Jj(e,t,r,n){let o=Buffer.alloc(8);o.writeBigUInt64BE(t);let s=Vj(n.toLowerCase(),e).update(o).digest(),i=s[s.length-1]&15,a=(s[i]&127)<<24|s[i+1]<<16|s[i+2]<<8|s[i+3];return String(a%10**r).padStart(r,"0")}function p_(e,t=Date.now()){let r=BigInt(Math.floor(t/1e3/e.period));return Jj(e.key,r,e.digits,e.algorithm)}function f_(e,t=Date.now()){let r=Math.floor(t/1e3)%e.period;return e.period-r}var Gj,Xm=p(()=>{"use strict";Gj="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"});var mt,Qm=p(()=>{"use strict";mt={maxRecords:200,maxLabel:80,maxUsername:254,maxPassword:1024,maxTotp:512}});import{createHash as qj,randomBytes as h_}from"node:crypto";import{chmodSync as m_,existsSync as Yj,mkdirSync as zj,readFileSync as Xj,renameSync as Qj,rmSync as Zj,writeFileSync as e1}from"node:fs";import{homedir as t1}from"node:os";import y_ from"node:path";function Yi(){return y_.join(t1(),".kynver","site-logins")}function Zm(e){return`${qj("sha256").update(`kynver-site-login:${e}`).digest("hex").slice(0,32)}.vault.json`}function g_(e,t,r,n=!0){let o=typeof e=="string"?e.trim():"";if(!o&&n)throw new z(`${t} is required`,"invalid");if(o.length>r)throw new z(`${t} is too long (max ${r})`,"invalid");if(k_.test(o))throw new z(`${t} contains control characters`,"invalid");return o}function r1(){let e="abcdefghijkmnpqrstuvwxyz23456789",t=h_(10);return`lg_${Array.from(t,r=>e[r%e.length]).join("")}`}var z,k_,tu,Un=p(()=>{"use strict";c_();zm();Xm();Qm();z=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SiteLoginError"}code},k_=/[\u0000-\u001f\u007f]/;tu=class{constructor(t){this.opts=t;let r=t.agentOsId.trim();if(!r||k_.test(r)||r.length>200)throw new z("invalid workspace id","invalid");this.agentOsId=r,this.rootDir=t.rootDir??Yi(),this.filePath=y_.join(this.rootDir,Zm(r)),this.now=t.now??Date.now}opts;agentOsId;filePath;rootDir;now;exists(){return Yj(this.filePath)}keyMode(){return this.exists()?this.read().keyMode:null}async createWithPassphrase(t){if(this.exists())throw new z("a saved-login vault already exists on this computer","exists");if(t.length<jm)throw new z(`the vault passphrase must be at least ${jm} characters`,"invalid");let r=i_(),n=a_(this.opts.scryptCost),o=await Vm(t,n,this.opts.minScryptN);return this.write({v:1,agentOsId:this.agentOsId,keyMode:"passphrase",kdf:n,wrappedKey:Ji(o,r,Jm(this.agentOsId)),keyCheck:Ji(r,Zc,Qc(this.agentOsId)),records:[]}),o.fill(0),r}createWithKeychainKey(t){if(this.exists())throw new z("a saved-login vault already exists on this computer","exists");this.write({v:1,agentOsId:this.agentOsId,keyMode:"keychain",keyCheck:Ji(t,Zc,Qc(this.agentOsId)),records:[]})}async unlockWithPassphrase(t){let r=this.read();if(r.keyMode!=="passphrase"||!r.kdf||!r.wrappedKey)throw new z("this vault is unlocked by the Kynver desktop app, not a passphrase","invalid");let n=null;try{n=await Vm(t,r.kdf,this.opts.minScryptN);let o=Xc(n,r.wrappedKey,Jm(this.agentOsId));return this.verifyKey(r,o),o}catch(o){throw o instanceof z?o:o instanceof It&&/unsafe|salt/.test(o.message)?new z(o.message,"corrupt"):new z("wrong vault passphrase","bad_key")}finally{n?.fill(0)}}unlockWithKey(t){return this.verifyKey(this.read(),t),t}wipe(){return this.exists()?(Zj(this.filePath,{force:!0}),!0):!1}list(){return this.exists()?this.read().records.map(({secret:t,...r})=>r):[]}get(t){return this.list().find(r=>r.handle===t)??null}add(t,r){let n=this.read();if(this.verifyKey(n,t),n.records.length>=mt.maxRecords)throw new z(`at most ${mt.maxRecords} saved logins per workspace`,"full");let o=this.buildRecord(t,r,r1(),new Date(this.now()).toISOString());n.records.push(o),this.write(n);let{secret:s,...i}=o;return i}replace(t,r,n){let o=this.read();this.verifyKey(o,t);let s=o.records.findIndex(c=>c.handle===r);if(s<0)throw new z("no saved login with that id","not_found");let i=this.buildRecord(t,n,r,o.records[s].createdAt);o.records[s]=i,this.write(o);let{secret:a,...l}=i;return l}remove(t){if(!this.exists())return!1;let r=this.read(),n=r.records.filter(o=>o.handle!==t);return n.length===r.records.length?!1:(r.records=n,this.write(r),!0)}readSecret(t,r){let n=this.read();this.verifyKey(n,t);let o=n.records.find(i=>i.handle===r);if(!o)throw new z("no saved login with that id","not_found");let s;try{s=Xc(t,o.secret,qm({agentOsId:this.agentOsId,...o}))}catch{throw new z("this saved login failed its integrity check and was not used","corrupt")}try{let i=JSON.parse(s.toString("utf8"));if(typeof i.p!="string")throw new Error("shape");let{secret:a,...l}=o;return{summary:l,secret:{password:i.p,...typeof i.t=="string"?{totp:i.t}:{}}}}catch{throw new z("this saved login failed its integrity check and was not used","corrupt")}finally{s.fill(0)}}touch(t){let r=this.read(),n=r.records.find(o=>o.handle===t);n&&(n.lastUsedAt=new Date(this.now()).toISOString(),this.write(r))}buildRecord(t,r,n,o){let s=u_(r.origin);if(!s.ok)throw new z(s.reason,"invalid");let i=g_(r.label,"label",mt.maxLabel),a=g_(r.username,"username",mt.maxUsername),l=typeof r.password=="string"?r.password:"";if(!l)throw new z("password is required","invalid");if(l.length>mt.maxPassword)throw new z("password is too long","invalid");let c=typeof r.totp=="string"&&r.totp.trim()?r.totp.trim():void 0;if(c&&(c.length>mt.maxTotp||!eu(c)))throw new z("the authenticator key is not a valid base32 secret or otpauth://totp link","invalid");let u={handle:n,origin:s.origin,label:i,username:a,hasTotp:!!c,createdAt:o,lastUsedAt:null},d=Buffer.from(JSON.stringify(c?{p:l,t:c}:{p:l}),"utf8");try{return{...u,secret:Ji(t,d,qm({agentOsId:this.agentOsId,...u}))}}finally{d.fill(0)}}verifyKey(t,r){try{let n=Xc(r,t.keyCheck,Qc(this.agentOsId));if(!l_(n,Zc))throw new Error("mismatch")}catch{throw new z("the vault key does not open this vault","bad_key")}}read(){if(!this.exists())throw new z("no saved-login vault on this computer yet","missing");let t;try{t=JSON.parse(Xj(this.filePath,"utf8"))}catch{throw new z("the saved-login vault file is unreadable","corrupt")}if(!t||t.v!==1||t.keyMode!=="passphrase"&&t.keyMode!=="keychain"||!t.keyCheck||!Array.isArray(t.records))throw new z("the saved-login vault file is not a vault Kynver understands","corrupt");if(t.agentOsId!==this.agentOsId)throw new z("this saved-login vault belongs to a different workspace","corrupt");return t.records=t.records.filter(r=>r&&typeof r.handle=="string"&&typeof r.origin=="string"&&typeof r.label=="string"&&typeof r.username=="string"&&r.secret&&typeof r.secret.n=="string"&&typeof r.secret.c=="string"),t}write(t){zj(this.rootDir,{recursive:!0,mode:448});try{m_(this.rootDir,448)}catch{}let r=`${this.filePath}.${h_(4).toString("hex")}.tmp`;e1(r,`${JSON.stringify(t)}
80
+ `,{mode:384}),Qj(r,this.filePath);try{m_(this.filePath,384)}catch{}}}});import{appendFileSync as s1,chmodSync as i1,existsSync as w_,mkdirSync as a1,readFileSync as S_,renameSync as l1,statSync as c1,writeFileSync as u1}from"node:fs";import d1 from"node:path";var p1,__,f1,ru,x_=p(()=>{"use strict";Un();p1=512*1024,__=1e3,f1=10080*60*1e3,ru=class{constructor(t,r=Yi(),n=Date.now){this.rootDir=r;this.now=n;this.filePath=d1.join(r,Zm(t).replace(/\.vault\.json$/,".audit.jsonl"))}rootDir;now;filePath;record(t){let r={at:new Date(this.now()).toISOString(),...t};try{a1(this.rootDir,{recursive:!0,mode:448}),this.rotateIfLarge(),s1(this.filePath,`${JSON.stringify(r)}
81
+ `,{mode:384}),i1(this.filePath,384)}catch{}return r}entries(t=__){if(!w_(this.filePath))return[];try{return S_(this.filePath,"utf8").split(`
82
+ `).filter(Boolean).slice(-t).map(n=>{try{return JSON.parse(n)}catch{return null}}).filter(n=>n!==null)}catch{return[]}}lastFill(){let t=this.entries().filter(r=>r.event==="fill");return t[t.length-1]??null}originRefusalsSince(t=f1){let r=this.now()-t;return this.entries().filter(n=>n.event==="fill"&&n.code==="origin_mismatch"&&Date.parse(n.at)>=r).length}rotateIfLarge(){if(!w_(this.filePath)||c1(this.filePath).size<p1)return;let t=S_(this.filePath,"utf8").split(`
83
+ `).filter(Boolean).slice(-__/2),r=`${this.filePath}.tmp`;u1(r,`${t.join(`
84
84
  `)}
85
- `,{mode:384}),bj(r,this.filePath)}}});import{randomBytes as xj}from"node:crypto";import{existsSync as Cj,rmSync as Ej}from"node:fs";function qS(e,t){return{id:e.id,origin:e.origin,prompt:e.prompt,conversationId:e.conversationId,expiresInSec:Math.max(0,Math.round((e.expiresAt-t)/1e3))}}function Pt(){return YS??=new Om,YS}var Aj,Pj,Om,YS,Ki=p(()=>{"use strict";JS();Nn();Aj=720*60*1e3,Pj=300*1e3,Om=class{rootDir;now;idleMs;keys=new Map;codes=new Map;codeListeners=new Set;constructor(t={}){this.rootDir=t.rootDir??Fi(),this.now=t.now??Date.now,this.idleMs=t.idleMs??Aj}store(t){return new Kc({agentOsId:t,rootDir:this.rootDir,now:this.now})}audit(t){return new $c(t,this.rootDir,this.now)}unlock(t,r,n={}){this.lock(t),this.keys.set(t,{key:Buffer.from(r),lastUsedAt:this.now(),keychain:n.keychain===!0})}lock(t){for(let[r,n]of this.keys)t&&r!==t||(n.key.fill(0),this.keys.delete(r))}key(t){let r=this.keys.get(t);return r?!r.keychain&&this.now()-r.lastUsedAt>this.idleMs?(this.lock(t),null):(r.lastUsedAt=this.now(),r.key):null}isUnlocked(t){return this.key(t)!==null}wipe(t){this.lock(t);for(let[s,i]of this.codes)i.agentOsId===t&&this.codes.delete(s);let n=this.store(t).wipe(),o=this.audit(t).filePath;return Cj(o)&&Ej(o,{force:!0}),n}addCodeRequest(t){this.pruneCodes();for(let[s,i]of this.codes)i.agentOsId===t.agentOsId&&i.conversationId===t.conversationId&&this.codes.delete(s);let r=this.now(),n={...t,id:`cr_${xj(6).toString("hex")}`,createdAt:r,expiresAt:r+Pj};this.codes.set(n.id,n);let o=qS(n,r);for(let s of this.codeListeners)try{s({...o,agentOsId:n.agentOsId})}catch{}return o}onCodeRequest(t){return this.codeListeners.add(t),()=>this.codeListeners.delete(t)}listCodeRequests(t){this.pruneCodes();let r=this.now();return[...this.codes.values()].filter(n=>!t||n.agentOsId===t).sort((n,o)=>o.createdAt-n.createdAt).map(n=>qS(n,r))}async submitCode(t,r,n){this.pruneCodes();let o=t?this.codes.get(t):[...this.codes.values()].filter(a=>!n||a.agentOsId===n).sort((a,l)=>l.createdAt-a.createdAt)[0];if(!o||n&&o.agentOsId!==n)return{ok:!1,text:"No page is waiting for a code right now (requests expire after 5 minutes)."};let s=r.replace(/\s+/g,"");if(!/^[A-Za-z0-9-]{3,12}$/.test(s))return{ok:!1,text:"That doesn't look like a verification code."};this.codes.delete(o.id);let i=await o.fill(s);return this.audit(o.agentOsId).record({event:"code",ok:i.ok,code:i.ok?null:"fill_failed",origin:o.origin,conversationId:o.conversationId}),i}report(t){let r=this.store(t),n=0,o=null,s=!1;try{s=r.exists(),s&&(o=r.keyMode(),n=r.list().length)}catch{}let i=this.audit(t),a=i.lastFill();return{state:s?this.isUnlocked(t)?"unlocked":"locked":"none",keyMode:o,count:n,lastFill:a?{ok:a.ok,code:a.code??null,at:a.at}:null,originRefusals7d:i.originRefusalsSince()}}pruneCodes(){let t=this.now();for(let[r,n]of this.codes)n.expiresAt<=t&&this.codes.delete(r)}};YS=null});var zS=p(()=>{"use strict";M()});var XS=p(()=>{"use strict";$();zS();sr()});function Oj(e){return(e.accessibleItems??[]).filter(t=>t.access?.isOwner).map(t=>({id:typeof t.agentOs?.id=="string"?t.agentOs.id:"",slug:typeof t.agentOs?.slug=="string"?t.agentOs.slug.trim():""})).filter(t=>t.slug)}function Tm(e){if(!e)return null;let t=Oj(e),r=typeof e.primarySlug=="string"?e.primarySlug.trim():"",n=typeof e.primaryAgentOsId=="string"?e.primaryAgentOsId.trim():"";if(t.length>0){if(n){let s=t.find(i=>i.id===n);if(s)return s}if(r){let s=t.find(i=>i.slug===r);if(s)return s}return t[0]??null}if(Array.isArray(e.accessibleItems)&&e.accessibleItems.length>0)return null;if(n&&r)return{id:n,slug:r};if(!r)return null;let o=e.items?.find(s=>s.slug===r);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:r}}var Nm=p(()=>{"use strict"});function QS(e){return/\((?:401|403)\)/.test(e)?"access_denied":"transient"}var Dm=p(()=>{"use strict";$();sr();M();XS();Nm()});import{existsSync as Tj}from"node:fs";import{homedir as Nj}from"node:os";import Dj from"node:path";function ZS(e,t){let r=process.env[e]?.trim().toLowerCase();return r?r==="0"||r==="false"||r==="no"||r==="off"?!1:r==="1"||r==="true"||r==="yes"||r==="on"?!0:t:t}function $i(e,t,r=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<r?t:Math.floor(n)}function jr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Dj.join(Nj(),".kynver","agent-os-cron.json")}function Mj(e=jr()){let t=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return t||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Lj(){let e=P();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function e_(){let e=P();return Pe("KYNVER_CRON_SECRET")||Pe("OPENCLAW_CRON_SECRET")||Pe("KYNVER_RUNTIME_SECRET")||Te(e.agentOsId)?.trim()||Te()?.trim()||null}function rs(){let e=jr(),t=Mj(e),r=Lj(),n=e_(),o=!!(r&&n),s=Tj(e),i=o&&(s||ZS("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:t,lockPath:`${t}.lock`,fireBaseUrl:r,secret:n,tickEnabled:ZS("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:$i("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:$i("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:$i("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:$i("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:$i("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}var gr=p(()=>{"use strict";$();St()});import{promises as Bj}from"node:fs";async function t_(e){try{return await Bj.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function Wj(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t.entries)?t.entries:[]}catch{return[]}}async function Hc(e=jr()){let t=await t_(e);return Wj(t)}async function Uj(e,t){let{mkdir:r,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await r(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:t},null,2);await n(a,l,"utf8"),await o(a,e)}async function Mm(e=jr()){return await t_(e)!==null?{created:!1}:(await Uj(e,[]),{created:!0})}var ns=p(()=>{"use strict";gr()});import{existsSync as Fj,readFileSync as Kj}from"node:fs";import{dirname as Lm,join as n_}from"node:path";import{fileURLToPath as r_}from"node:url";function $j(e){let t=Lm(r_(e));for(let r=0;r<6;r+=1){if(Fj(n_(t,"package.json")))return t;let n=Lm(t);if(n===t)break;t=n}throw new Error(`package.json not found above ${Lm(r_(e))}`)}function Hj(e=import.meta.url){let t=n_($j(e),"package.json"),r=JSON.parse(Kj(t,"utf8"));if(typeof r.version!="string"||!r.version.trim())throw new Error(`Missing package.json version at ${t}`);return r.version}var Ge,Vr=p(()=>{"use strict";Ge=Hj()});import{spawnSync as jj}from"node:child_process";import{readFileSync as Vj}from"node:fs";function Gj(e,t){let r=jj(e,t,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:15e3});return{status:r.status,stdout:r.stdout??""}}function Jj(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:null}function qj(e){return Number.isInteger(e)&&e>0}function o_(e,t={}){if(!qj(e))return null;let r=t.platform??process.platform,n=t.readText??(s=>Vj(s,"utf8")),o=t.run??Gj;try{if(r==="linux"){let s=Jj(n(`/proc/${e}/stat`));if(!s)return null;let i="";try{i=n("/proc/sys/kernel/random/boot_id").trim()}catch{}return`linux:${i}:${s}`}if(r==="darwin"){let s=o("ps",["-o","lstart=","-p",String(e)]),i=s.stdout.trim();return s.status===0&&i?`darwin:${i}`:null}if(r==="win32"){let s=`$p = Get-CimInstance Win32_Process -Filter "ProcessId=${e}"; if ($p) { $p.CreationDate.ToUniversalTime().ToString('o') }`,i=o("powershell.exe",["-NoProfile","-NonInteractive","-Command",s]),a=i.stdout.trim();return i.status===0&&a?`win32:${a}`:null}}catch{return null}return null}var Bm=p(()=>{"use strict"});import{createHash as zj,randomUUID as u_}from"node:crypto";import{closeSync as Xj,constants as Wm,existsSync as Qj,mkdirSync as Um,openSync as Zj,readFileSync as e1,renameSync as Fm,rmSync as jc,writeFileSync as t1}from"node:fs";import{createConnection as r1,createServer as s_}from"node:net";import{homedir as n1,tmpdir as o1}from"node:os";import Ut from"node:path";function s1(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function d_(e){let t=e.stateRoot??Ut.join(n1(),".kynver"),r=e.platform??process.platform,n=zj("sha256").update(`${Ut.resolve(t)}\0${e.agentOsId}`).digest("hex").slice(0,24),o=Ut.join(t,"locks"),s=Ut.join(o,`${n.slice(0,16)}.sock`);r==="linux"?s=`\0kynver-daemon-owner-${n}`:Buffer.byteLength(s)>100&&(s=Ut.join(o1(),`kynver-owner-${n.slice(0,16)}.sock`));let i=Ut.join(t,`daemon-owner-${s1(e.agentOsId)}.json`);return{lockKey:n,lockFile:Ut.join(o,`daemon-owner-${n}.lock`),metadataFile:i,quarantineFile:i.replace(/\.json$/,".stale.json"),socketAddress:s}}function a1(e){Um(Ut.dirname(e),{recursive:!0});let t;try{t=Zj(e,Wm.O_RDWR|Wm.O_CREAT|i1)}catch(n){let o=n.code;if(o==="EBUSY"||o==="EACCES"||o==="EPERM")return{busy:!0};throw n}let r=!0;return{held:{isHeld:()=>r,release:()=>{if(r){r=!1;try{Xj(t)}catch{}}}}}}function i_(e,t){return new Promise((r,n)=>{let o=i=>{e.off("listening",s),i.code==="EADDRINUSE"?r("in_use"):n(i)},s=()=>{e.off("error",o),r("listening")};e.once("error",o),e.once("listening",s),e.listen({path:t,exclusive:!0})})}function l1(e,t=2e3){return new Promise(r=>{let n=r1({path:e}),o=i=>{clearTimeout(s),n.removeAllListeners(),n.destroy(),r(i)},s=setTimeout(()=>o(!0),t);n.once("connect",()=>o(!0)),n.once("error",()=>o(!1))})}async function c1(e,t){e.startsWith("\0")||Um(Ut.dirname(e),{recursive:!0,mode:448});let r=s_(a=>a.destroy());if(await i_(r,e)==="listening")return{held:a_(r,e)};if(!t||e.startsWith("\0"))return{busy:!0};if(await l1(e))return{busy:!0};let o=`${e}.stale-${process.pid}-${u_().slice(0,8)}`;try{Fm(e,o),jc(o,{force:!0})}catch{}let s=s_(a=>a.destroy());return await i_(s,e).catch(()=>"in_use")==="listening"?{held:a_(s,e)}:{busy:!0}}function a_(e,t){e.unref();let r=!0;return{isHeld:()=>r&&e.listening,release:()=>{r&&(r=!1,e.close(),t.startsWith("\0")||jc(t,{force:!0}))}}}async function u1(e,t){return t==="win32"?a1(e.lockFile):c1(e.socketAddress,t!=="linux")}function d1(e){let t=e;return!!t&&t.version===1&&typeof t.agentOsId=="string"&&typeof t.instanceId=="string"&&typeof t.pid=="number"&&typeof t.ownerKind=="string"}function l_(e){try{let t=JSON.parse(e1(d_(e).metadataFile,"utf8"));return d1(t)?t:null}catch{return null}}function c_(e,t){Um(Ut.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;t1(r,`${JSON.stringify(t,null,2)}
86
- `,{mode:384}),Fm(r,e)}function p1(e){if(!Qj(e.metadataFile))return null;try{return Fm(e.metadataFile,e.quarantineFile),e.quarantineFile}catch{return jc(e.metadataFile,{force:!0}),null}}function p_(e){return`This AgentOS already has a running daemon on this machine: ${e?`${e.ownerKind} daemon pid ${e.pid} (runtime ${e.runtimeVersion}, since ${e.acquiredAt})`:"another daemon"}. Stop it first (Ctrl-C in its window, \`systemctl --user stop kynver-cron-daemon\` for a systemd-owned one, or quit the Desktop app), then start again.`}async function Vc(e){let t=e.platform??process.platform,r=d_(e),n=await u1(r,t);if("busy"in n){let u=l_(e);return{ok:!1,reason:"owner_conflict",holder:u,remedy:p_(u)}}let o=p1(r),s=(e.now??new Date).toISOString(),i={version:1,agentOsId:e.agentOsId,ownerKind:e.ownerKind,instanceId:u_(),pid:process.pid,processStart:e.processStart!==void 0?e.processStart:o_(process.pid),runtimeVersion:Ge,platform:t,acquiredAt:s,lastRenewedAt:s};try{c_(r.metadataFile,i)}catch{}let a=n.held,l=!1;return{ok:!0,lease:{get metadata(){return i},get released(){return l},isHeld:()=>!l&&a.isHeld(),renew(u=new Date){if(!l){i.lastRenewedAt=u.toISOString();try{c_(r.metadataFile,i)}catch{}}},release(){if(l)return;l=!0,l_(e)?.instanceId===i.instanceId&&jc(r.metadataFile,{force:!0}),a.release()}},quarantinedMetadata:o}}var i1,Gc=p(()=>{"use strict";Vr();Bm();i1=Wm.UV_FS_O_EXLOCK??268435456});var f1,m1,g1,h1,os,Km=p(()=>{"use strict";f1="embedded-1",m1=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],g1={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
85
+ `,{mode:384}),l1(r,this.filePath)}}});import{randomBytes as m1}from"node:crypto";import{existsSync as g1,rmSync as h1}from"node:fs";function C_(e,t){return{id:e.id,origin:e.origin,prompt:e.prompt,conversationId:e.conversationId,expiresInSec:Math.max(0,Math.round((e.expiresAt-t)/1e3))}}function Pt(){return E_??=new eg,E_}var y1,k1,eg,E_,zi=p(()=>{"use strict";x_();Un();y1=720*60*1e3,k1=300*1e3,eg=class{rootDir;now;idleMs;keys=new Map;codes=new Map;codeListeners=new Set;constructor(t={}){this.rootDir=t.rootDir??Yi(),this.now=t.now??Date.now,this.idleMs=t.idleMs??y1}store(t){return new tu({agentOsId:t,rootDir:this.rootDir,now:this.now})}audit(t){return new ru(t,this.rootDir,this.now)}unlock(t,r,n={}){this.lock(t),this.keys.set(t,{key:Buffer.from(r),lastUsedAt:this.now(),keychain:n.keychain===!0})}lock(t){for(let[r,n]of this.keys)t&&r!==t||(n.key.fill(0),this.keys.delete(r))}key(t){let r=this.keys.get(t);return r?!r.keychain&&this.now()-r.lastUsedAt>this.idleMs?(this.lock(t),null):(r.lastUsedAt=this.now(),r.key):null}isUnlocked(t){return this.key(t)!==null}wipe(t){this.lock(t);for(let[s,i]of this.codes)i.agentOsId===t&&this.codes.delete(s);let n=this.store(t).wipe(),o=this.audit(t).filePath;return g1(o)&&h1(o,{force:!0}),n}addCodeRequest(t){this.pruneCodes();for(let[s,i]of this.codes)i.agentOsId===t.agentOsId&&i.conversationId===t.conversationId&&this.codes.delete(s);let r=this.now(),n={...t,id:`cr_${m1(6).toString("hex")}`,createdAt:r,expiresAt:r+k1};this.codes.set(n.id,n);let o=C_(n,r);for(let s of this.codeListeners)try{s({...o,agentOsId:n.agentOsId})}catch{}return o}onCodeRequest(t){return this.codeListeners.add(t),()=>this.codeListeners.delete(t)}listCodeRequests(t){this.pruneCodes();let r=this.now();return[...this.codes.values()].filter(n=>!t||n.agentOsId===t).sort((n,o)=>o.createdAt-n.createdAt).map(n=>C_(n,r))}async submitCode(t,r,n){this.pruneCodes();let o=t?this.codes.get(t):[...this.codes.values()].filter(a=>!n||a.agentOsId===n).sort((a,l)=>l.createdAt-a.createdAt)[0];if(!o||n&&o.agentOsId!==n)return{ok:!1,text:"No page is waiting for a code right now (requests expire after 5 minutes)."};let s=r.replace(/\s+/g,"");if(!/^[A-Za-z0-9-]{3,12}$/.test(s))return{ok:!1,text:"That doesn't look like a verification code."};this.codes.delete(o.id);let i=await o.fill(s);return this.audit(o.agentOsId).record({event:"code",ok:i.ok,code:i.ok?null:"fill_failed",origin:o.origin,conversationId:o.conversationId}),i}report(t){let r=this.store(t),n=0,o=null,s=!1;try{s=r.exists(),s&&(o=r.keyMode(),n=r.list().length)}catch{}let i=this.audit(t),a=i.lastFill();return{state:s?this.isUnlocked(t)?"unlocked":"locked":"none",keyMode:o,count:n,lastFill:a?{ok:a.ok,code:a.code??null,at:a.at}:null,originRefusals7d:i.originRefusalsSince()}}pruneCodes(){let t=this.now();for(let[r,n]of this.codes)n.expiresAt<=t&&this.codes.delete(r)}};E_=null});var A_=p(()=>{"use strict";M()});var I_=p(()=>{"use strict";K();A_();ir()});function v1(e){return(e.accessibleItems??[]).filter(t=>t.access?.isOwner).map(t=>({id:typeof t.agentOs?.id=="string"?t.agentOs.id:"",slug:typeof t.agentOs?.slug=="string"?t.agentOs.slug.trim():""})).filter(t=>t.slug)}function tg(e){if(!e)return null;let t=v1(e),r=typeof e.primarySlug=="string"?e.primarySlug.trim():"",n=typeof e.primaryAgentOsId=="string"?e.primaryAgentOsId.trim():"";if(t.length>0){if(n){let s=t.find(i=>i.id===n);if(s)return s}if(r){let s=t.find(i=>i.slug===r);if(s)return s}return t[0]??null}if(Array.isArray(e.accessibleItems)&&e.accessibleItems.length>0)return null;if(n&&r)return{id:n,slug:r};if(!r)return null;let o=e.items?.find(s=>s.slug===r);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:r}}var rg=p(()=>{"use strict"});function P_(e){return/\((?:401|403)\)/.test(e)?"access_denied":"transient"}var ng=p(()=>{"use strict";K();ir();M();I_();rg()});import{existsSync as R1}from"node:fs";import{homedir as w1}from"node:os";import S1 from"node:path";function O_(e,t){let r=process.env[e]?.trim().toLowerCase();return r?r==="0"||r==="false"||r==="no"||r==="off"?!1:r==="1"||r==="true"||r==="yes"||r==="on"?!0:t:t}function Xi(e,t,r=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<r?t:Math.floor(n)}function qr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||S1.join(w1(),".kynver","agent-os-cron.json")}function _1(e=qr()){let t=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return t||`${e.replace(/\.json$/i,"")}.tick-state.json`}function x1(){let e=A();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function T_(){let e=A();return Pe("KYNVER_CRON_SECRET")||Pe("OPENCLAW_CRON_SECRET")||Pe("KYNVER_RUNTIME_SECRET")||Ne(e.agentOsId)?.trim()||Ne()?.trim()||null}function is(){let e=qr(),t=_1(e),r=x1(),n=T_(),o=!!(r&&n),s=R1(e),i=o&&(s||O_("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:t,lockPath:`${t}.lock`,fireBaseUrl:r,secret:n,tickEnabled:O_("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Xi("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Xi("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Xi("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Xi("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Xi("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}var hr=p(()=>{"use strict";K();_t()});import{promises as C1}from"node:fs";async function N_(e){try{return await C1.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function E1(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t.entries)?t.entries:[]}catch{return[]}}async function nu(e=qr()){let t=await N_(e);return E1(t)}async function A1(e,t){let{mkdir:r,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await r(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:t},null,2);await n(a,l,"utf8"),await o(a,e)}async function og(e=qr()){return await N_(e)!==null?{created:!1}:(await A1(e,[]),{created:!0})}var as=p(()=>{"use strict";hr()});import{existsSync as I1,readFileSync as P1}from"node:fs";import{dirname as sg,join as M_}from"node:path";import{fileURLToPath as D_}from"node:url";function O1(e){let t=sg(D_(e));for(let r=0;r<6;r+=1){if(I1(M_(t,"package.json")))return t;let n=sg(t);if(n===t)break;t=n}throw new Error(`package.json not found above ${sg(D_(e))}`)}function T1(e=import.meta.url){let t=M_(O1(e),"package.json"),r=JSON.parse(P1(t,"utf8"));if(typeof r.version!="string"||!r.version.trim())throw new Error(`Missing package.json version at ${t}`);return r.version}var qe,Yr=p(()=>{"use strict";qe=T1()});import{spawnSync as N1}from"node:child_process";import{readFileSync as D1}from"node:fs";function M1(e,t){let r=N1(e,t,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:15e3});return{status:r.status,stdout:r.stdout??""}}function L1(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:null}function B1(e){return Number.isInteger(e)&&e>0}function L_(e,t={}){if(!B1(e))return null;let r=t.platform??process.platform,n=t.readText??(s=>D1(s,"utf8")),o=t.run??M1;try{if(r==="linux"){let s=L1(n(`/proc/${e}/stat`));if(!s)return null;let i="";try{i=n("/proc/sys/kernel/random/boot_id").trim()}catch{}return`linux:${i}:${s}`}if(r==="darwin"){let s=o("ps",["-o","lstart=","-p",String(e)]),i=s.stdout.trim();return s.status===0&&i?`darwin:${i}`:null}if(r==="win32"){let s=`$p = Get-CimInstance Win32_Process -Filter "ProcessId=${e}"; if ($p) { $p.CreationDate.ToUniversalTime().ToString('o') }`,i=o("powershell.exe",["-NoProfile","-NonInteractive","-Command",s]),a=i.stdout.trim();return i.status===0&&a?`win32:${a}`:null}}catch{return null}return null}var ig=p(()=>{"use strict"});import{createHash as W1,randomUUID as K_}from"node:crypto";import{closeSync as F1,constants as ag,existsSync as $1,mkdirSync as lg,openSync as K1,readFileSync as H1,renameSync as cg,rmSync as ou,writeFileSync as j1}from"node:fs";import{createConnection as V1,createServer as B_}from"node:net";import{homedir as G1,tmpdir as J1}from"node:os";import Ft from"node:path";function q1(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function H_(e){let t=e.stateRoot??Ft.join(G1(),".kynver"),r=e.platform??process.platform,n=W1("sha256").update(`${Ft.resolve(t)}\0${e.agentOsId}`).digest("hex").slice(0,24),o=Ft.join(t,"locks"),s=Ft.join(o,`${n.slice(0,16)}.sock`);r==="linux"?s=`\0kynver-daemon-owner-${n}`:Buffer.byteLength(s)>100&&(s=Ft.join(J1(),`kynver-owner-${n.slice(0,16)}.sock`));let i=Ft.join(t,`daemon-owner-${q1(e.agentOsId)}.json`);return{lockKey:n,lockFile:Ft.join(o,`daemon-owner-${n}.lock`),metadataFile:i,quarantineFile:i.replace(/\.json$/,".stale.json"),socketAddress:s}}function z1(e){lg(Ft.dirname(e),{recursive:!0});let t;try{t=K1(e,ag.O_RDWR|ag.O_CREAT|Y1)}catch(n){let o=n.code;if(o==="EBUSY"||o==="EACCES"||o==="EPERM")return{busy:!0};throw n}let r=!0;return{held:{isHeld:()=>r,release:()=>{if(r){r=!1;try{F1(t)}catch{}}}}}}function U_(e,t){return new Promise((r,n)=>{let o=i=>{e.off("listening",s),i.code==="EADDRINUSE"?r("in_use"):n(i)},s=()=>{e.off("error",o),r("listening")};e.once("error",o),e.once("listening",s),e.listen({path:t,exclusive:!0})})}function X1(e,t=2e3){return new Promise(r=>{let n=V1({path:e}),o=i=>{clearTimeout(s),n.removeAllListeners(),n.destroy(),r(i)},s=setTimeout(()=>o(!0),t);n.once("connect",()=>o(!0)),n.once("error",()=>o(!1))})}async function Q1(e,t){e.startsWith("\0")||lg(Ft.dirname(e),{recursive:!0,mode:448});let r=B_(a=>a.destroy());if(await U_(r,e)==="listening")return{held:W_(r,e)};if(!t||e.startsWith("\0"))return{busy:!0};if(await X1(e))return{busy:!0};let o=`${e}.stale-${process.pid}-${K_().slice(0,8)}`;try{cg(e,o),ou(o,{force:!0})}catch{}let s=B_(a=>a.destroy());return await U_(s,e).catch(()=>"in_use")==="listening"?{held:W_(s,e)}:{busy:!0}}function W_(e,t){e.unref();let r=!0;return{isHeld:()=>r&&e.listening,release:()=>{r&&(r=!1,e.close(),t.startsWith("\0")||ou(t,{force:!0}))}}}async function Z1(e,t){return t==="win32"?z1(e.lockFile):Q1(e.socketAddress,t!=="linux")}function eV(e){let t=e;return!!t&&t.version===1&&typeof t.agentOsId=="string"&&typeof t.instanceId=="string"&&typeof t.pid=="number"&&typeof t.ownerKind=="string"}function F_(e){try{let t=JSON.parse(H1(H_(e).metadataFile,"utf8"));return eV(t)?t:null}catch{return null}}function $_(e,t){lg(Ft.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;j1(r,`${JSON.stringify(t,null,2)}
86
+ `,{mode:384}),cg(r,e)}function tV(e){if(!$1(e.metadataFile))return null;try{return cg(e.metadataFile,e.quarantineFile),e.quarantineFile}catch{return ou(e.metadataFile,{force:!0}),null}}function j_(e){return`This AgentOS already has a running daemon on this machine: ${e?`${e.ownerKind} daemon pid ${e.pid} (runtime ${e.runtimeVersion}, since ${e.acquiredAt})`:"another daemon"}. Stop it first (Ctrl-C in its window, \`systemctl --user stop kynver-cron-daemon\` for a systemd-owned one, or quit the Desktop app), then start again.`}async function su(e){let t=e.platform??process.platform,r=H_(e),n=await Z1(r,t);if("busy"in n){let u=F_(e);return{ok:!1,reason:"owner_conflict",holder:u,remedy:j_(u)}}let o=tV(r),s=(e.now??new Date).toISOString(),i={version:1,agentOsId:e.agentOsId,ownerKind:e.ownerKind,instanceId:K_(),pid:process.pid,processStart:e.processStart!==void 0?e.processStart:L_(process.pid),runtimeVersion:qe,platform:t,acquiredAt:s,lastRenewedAt:s};try{$_(r.metadataFile,i)}catch{}let a=n.held,l=!1;return{ok:!0,lease:{get metadata(){return i},get released(){return l},isHeld:()=>!l&&a.isHeld(),renew(u=new Date){if(!l){i.lastRenewedAt=u.toISOString();try{$_(r.metadataFile,i)}catch{}}},release(){if(l)return;l=!0,F_(e)?.instanceId===i.instanceId&&ou(r.metadataFile,{force:!0}),a.release()}},quarantinedMetadata:o}}var Y1,iu=p(()=>{"use strict";Yr();ig();Y1=ag.UV_FS_O_EXLOCK??268435456});var rV,nV,oV,sV,ls,ug=p(()=>{"use strict";rV="embedded-1",nV=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],oV={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result. Prefer `gh pr view` / `gh pr diff`; if a local checkout is needed, use a disposable ref or detached worktree, not a checked-out `pr-*` branch.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
87
87
  `),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
88
88
  `),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
89
89
  `),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
90
- `)},h1={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},os={version:f1,generatedAt:"1970-01-01T00:00:00.000Z",personas:m1,instructions:g1,policyThresholds:h1}});function m_(){return ss}function Mn(){return ss.version}function Ft(){return f_}function g_(e,t){ss=e,f_=t}function Hi(e){let t=ss.instructions[e];if(typeof t=="string"&&t.trim())return t;let r=os.instructions[e];return typeof r=="string"?r:""}function is(e,t){let r=ss.policyThresholds[e];if(typeof r=="number"&&Number.isFinite(r))return r;let n=os.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:t}function h_(e){if(!e)return null;let t=e.trim().toLowerCase();return ss.personas.find(r=>r.slug===t)??null}var ss,f_,Gr=p(()=>{"use strict";Km();ss=os,f_="embedded"});import y_ from"node:os";function hr(e){return e?.trim()?e.trim():null}function De(e={}){let t=e.env??process.env,r=P();return{runnerId:hr(r.runnerId)??hr(t.KYNVER_RUNTIME_ID)??hr(t.OPENCLAW_RUNTIME_ID)??hr(t.HOSTNAME)??y_.hostname(),hostname:hr(t.HOSTNAME)??y_.hostname(),profile:hr(t.KYNVER_RUNNER_PROFILE)??hr(t.OPENCLAW_RUNNER_PROFILE),harnessRepo:hr(t.KYNVER_HARNESS_REPO)??hr(t.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Mn()}}var yr=p(()=>{"use strict";$();Gr();Le()});import y1 from"node:os";function $m(e=P(),t=process.env){let r=et(t,e),n=[...r.warnings],o=e.maxConcurrentWorkers,s=!1,i={...e};e.boxKind?.trim()||(i.boxKind=r.boxKind,s=!0,n.push(`persisted boxKind=${r.boxKind} to ~/.kynver/config.json \u2014 customers use box; operators set \`kynver setup --box-kind forge|ghost\``));let a=Wt(i,t);a.identity&&(i.runnerId?.trim()||(i.runnerId=a.identity.runnerId,s=!0,n.push(`persisted runnerId=${a.identity.runnerId} to ~/.kynver/config.json`)),!i.harnessRoot?.trim()&&(a.identity.harnessRootSource==="box_scoped"||a.identity.harnessRootSource==="legacy_migrated")&&(i.harnessRoot=a.identity.harnessRoot,s=!0,n.push(`persisted harnessRoot=${a.identity.harnessRoot} for ${r.boxKind} pool isolation`)));let l=t.KYNVER_BOX_ID?.trim();if(!e.boxId?.trim()&&l?(i.boxId=mc(l,r.boxKind),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json \u2014 set explicitly via kynver setup --box-id`)):!e.boxId?.trim()&&!l&&(i.boxId=Ii(r.boxKind,y1.hostname()),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json`)),hi(r.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let c=ir(r.boxKind,o);c!==o&&(o=c,i.maxConcurrentWorkers=c,s=!0,n.push(`clamped maxConcurrentWorkers to ${c} for ${r.boxKind} pool`))}return s&&We(i),{repaired:s,boxKind:r.boxKind,maxConcurrentWorkers:o??4,warnings:n}}var Hm=p(()=>{"use strict";$();Le();Vo();Io();Sn()});function It(e){let t=String(e).trim();return t.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":t}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":t,"X-OpenClaw-Cron-Secret":t,"X-Kynver-Runtime-Secret":t}}var as=p(()=>{"use strict"});function k1(e){let t=e.runnerId??De().runnerId;return`${e.baseUrl.replace(/\/+$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime-control/runner?runnerId=${encodeURIComponent(t)}`}async function k_(e,t){try{return(await(e.fetchImpl??fetch)(k1(e),{method:"POST",headers:It(e.secret),body:JSON.stringify({ack:t})})).ok}catch{return!1}}var jm=p(()=>{"use strict";as();yr();$r()});var b_=p(()=>{"use strict";$();M();jm();$r()});function v_(){let e=process.env.KYNVER_GIT_COMMIT_SHA?.trim();return{contractVersion:1,nodeVersion:process.versions.node,runtimePackageVersion:Ge,buildIdentity:e&&b1.test(e)?e.toLowerCase():null,platform:process.platform,arch:process.arch}}var b1,R_=p(()=>{"use strict";Vr();b1=/^[0-9a-f]{7,40}$/i});import{mkdirSync as v1,readFileSync as gde,renameSync as R1,writeFileSync as w1}from"node:fs";import{homedir as S1}from"node:os";import w_ from"node:path";function _1(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return w_.join(S1(),".kynver",`daemon-heartbeat-${t}.json`)}function S_(e){try{let t=_1(e.agentOsId);v1(w_.dirname(t),{recursive:!0});let r={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{},runtimeIdentity:v_(),...e.owner?{owner:e.owner}:{}},n=`${t}.tmp-${process.pid}`;w1(n,JSON.stringify(r),"utf8"),R1(n,t)}catch{}}var Vm=p(()=>{"use strict";R_();Bm()});function Gm(e,t,r=6e4){let n=t-e;return n>r?n:null}var Jm=p(()=>{"use strict"});function C1(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let r=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!r?.value)return null;let n=Number.parseInt(r.value,10);return Number.isFinite(n)?n:null}function __(e,t){let r=C1(e);if(r!==null&&r>1)throw new qm(r,1);e.exec("BEGIN IMMEDIATE");try{for(let n of x1)e.exec(n);e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(1)),e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_applied_at', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(t),e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}var qm,x1,x_=p(()=>{"use strict";qm=class extends Error{constructor(t,r){super(`local-run-store schema version ${t} is newer than this runtime supports (${r}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},x1=[`CREATE TABLE IF NOT EXISTS local_meta (
90
+ `)},sV={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},ls={version:rV,generatedAt:"1970-01-01T00:00:00.000Z",personas:nV,instructions:oV,policyThresholds:sV}});function G_(){return cs}function Fn(){return cs.version}function $t(){return V_}function J_(e,t){cs=e,V_=t}function Qi(e){let t=cs.instructions[e];if(typeof t=="string"&&t.trim())return t;let r=ls.instructions[e];return typeof r=="string"?r:""}function us(e,t){let r=cs.policyThresholds[e];if(typeof r=="number"&&Number.isFinite(r))return r;let n=ls.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:t}function q_(e){if(!e)return null;let t=e.trim().toLowerCase();return cs.personas.find(r=>r.slug===t)??null}var cs,V_,zr=p(()=>{"use strict";ug();cs=ls,V_="embedded"});import Y_ from"node:os";function yr(e){return e?.trim()?e.trim():null}function Me(e={}){let t=e.env??process.env,r=A();return{runnerId:yr(r.runnerId)??yr(t.KYNVER_RUNTIME_ID)??yr(t.OPENCLAW_RUNTIME_ID)??yr(t.HOSTNAME)??Y_.hostname(),hostname:yr(t.HOSTNAME)??Y_.hostname(),profile:yr(t.KYNVER_RUNNER_PROFILE)??yr(t.OPENCLAW_RUNNER_PROFILE),harnessRepo:yr(t.KYNVER_HARNESS_REPO)??yr(t.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Fn()}}var kr=p(()=>{"use strict";K();zr();Ue()});import iV from"node:os";function dg(e=A(),t=process.env){let r=rt(t,e),n=[...r.warnings],o=e.maxConcurrentWorkers,s=!1,i={...e};e.boxKind?.trim()||(i.boxKind=r.boxKind,s=!0,n.push(`persisted boxKind=${r.boxKind} to ~/.kynver/config.json \u2014 customers use box; operators set \`kynver setup --box-kind forge|ghost\``));let a=Wt(i,t);a.identity&&(i.runnerId?.trim()||(i.runnerId=a.identity.runnerId,s=!0,n.push(`persisted runnerId=${a.identity.runnerId} to ~/.kynver/config.json`)),!i.harnessRoot?.trim()&&(a.identity.harnessRootSource==="box_scoped"||a.identity.harnessRootSource==="legacy_migrated")&&(i.harnessRoot=a.identity.harnessRoot,s=!0,n.push(`persisted harnessRoot=${a.identity.harnessRoot} for ${r.boxKind} pool isolation`)));let l=t.KYNVER_BOX_ID?.trim();if(!e.boxId?.trim()&&l?(i.boxId=Ac(l,r.boxKind),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json \u2014 set explicitly via kynver setup --box-id`)):!e.boxId?.trim()&&!l&&(i.boxId=Wi(r.boxKind,iV.hostname()),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json`)),xi(r.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let c=ar(r.boxKind,o);c!==o&&(o=c,i.maxConcurrentWorkers=c,s=!0,n.push(`clamped maxConcurrentWorkers to ${c} for ${r.boxKind} pool`))}return s&&Fe(i),{repaired:s,boxKind:r.boxKind,maxConcurrentWorkers:o??4,warnings:n}}var pg=p(()=>{"use strict";K();Ue();Yo();Do();An()});function Ot(e){let t=String(e).trim();return t.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":t}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":t,"X-OpenClaw-Cron-Secret":t,"X-Kynver-Runtime-Secret":t}}var ds=p(()=>{"use strict"});function aV(e){let t=e.runnerId??Me().runnerId;return`${e.baseUrl.replace(/\/+$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime-control/runner?runnerId=${encodeURIComponent(t)}`}async function z_(e,t){try{return(await(e.fetchImpl??fetch)(aV(e),{method:"POST",headers:Ot(e.secret),body:JSON.stringify({ack:t})})).ok}catch{return!1}}var fg=p(()=>{"use strict";ds();kr();Gr()});var X_=p(()=>{"use strict";K();M();fg();Gr()});function Q_(){let e=process.env.KYNVER_GIT_COMMIT_SHA?.trim();return{contractVersion:1,nodeVersion:process.versions.node,runtimePackageVersion:qe,buildIdentity:e&&lV.test(e)?e.toLowerCase():null,platform:process.platform,arch:process.arch}}var lV,Z_=p(()=>{"use strict";Yr();lV=/^[0-9a-f]{7,40}$/i});import{mkdirSync as cV,readFileSync as fpe,renameSync as uV,writeFileSync as dV}from"node:fs";import{homedir as pV}from"node:os";import ex from"node:path";function fV(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return ex.join(pV(),".kynver",`daemon-heartbeat-${t}.json`)}function tx(e){try{let t=fV(e.agentOsId);cV(ex.dirname(t),{recursive:!0});let r={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{},runtimeIdentity:Q_(),...e.owner?{owner:e.owner}:{}},n=`${t}.tmp-${process.pid}`;dV(n,JSON.stringify(r),"utf8"),uV(n,t)}catch{}}var mg=p(()=>{"use strict";Z_();ig()});function gg(e,t,r=6e4){let n=t-e;return n>r?n:null}var hg=p(()=>{"use strict"});function gV(e){if(!e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'local_meta'").get())return null;let r=e.prepare("SELECT value FROM local_meta WHERE key = 'schema_version'").get();if(!r?.value)return null;let n=Number.parseInt(r.value,10);return Number.isFinite(n)?n:null}function rx(e,t){let r=gV(e);if(r!==null&&r>1)throw new yg(r,1);e.exec("BEGIN IMMEDIATE");try{for(let n of mV)e.exec(n);e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(1)),e.prepare("INSERT INTO local_meta (key, value) VALUES ('schema_applied_at', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(t),e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}var yg,mV,nx=p(()=>{"use strict";yg=class extends Error{constructor(t,r){super(`local-run-store schema version ${t} is newer than this runtime supports (${r}); refusing to open. Upgrade the runtime or quarantine the database deliberately.`),this.name="SchemaDowngradeRefusedError"}},mV=[`CREATE TABLE IF NOT EXISTS local_meta (
91
91
  key TEXT PRIMARY KEY,
92
92
  value TEXT NOT NULL
93
93
  ) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
@@ -113,8 +113,8 @@ child.on("exit", (code, signal) => finish(code, signal));
113
113
  payload_json TEXT NOT NULL,
114
114
  created_at TEXT NOT NULL,
115
115
  PRIMARY KEY (scope, seq)
116
- ) STRICT`]});import{existsSync as E1,realpathSync as A1,readFileSync as P1}from"node:fs";import C_ from"node:path";function T1(){try{return P1("/proc/self/mounts","utf8")}catch{return null}}function N1(e){let t=C_.resolve(e);for(let r=0;r<64;r+=1){if(E1(t))try{return A1.native(t)}catch{return t}let n=C_.dirname(t);if(n===t)return t;t=n}return t}function D1(e){return e.replace(/\\(\d{3})/g,(t,r)=>String.fromCharCode(Number.parseInt(r,8)))}function M1(e){let t=[];for(let r of e.split(`
117
- `)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:D1(n[1]),fsType:n[2]})}return t}function E_(e,t=process.platform){return t==="win32"?e.replace(/\\/g,"/"):e}function L1(e,t){let r=null,n=E_(e);for(let o of t){let s=E_(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!r||o.mountPoint.length>r.mountPoint.length)&&(r=o)}return r}function A_(e,t){let n=(t?.resolveRealPath??N1)(e),o=(t?.mountsSource??T1)();if(o===null)return{verdict:"rejected",reason:"Mount information unavailable \u2014 the filesystem type cannot be established safely, so WAL mode is refused (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let s=L1(n,M1(o));if(!s)return{verdict:"rejected",reason:"No mount entry covers the resolved database path \u2014 refusing WAL mode (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let i=s.fsType.toLowerCase();return O1.has(i)||i.startsWith("fuse.")?{verdict:"rejected",reason:`Filesystem '${i}' is network-like or crosses an OS boundary; SQLite WAL locking is not safe there.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:I1.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var I1,O1,P_=p(()=>{"use strict";I1=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),O1=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"])});import{mkdirSync as W1}from"node:fs";import U1 from"node:path";import{DatabaseSync as F1}from"node:sqlite";var qc,K1,$1,ji,I_=p(()=>{"use strict";x_();P_();qc=class extends Error{constructor(t){super(`local-run-store refused: ${t}`),this.name="FilesystemPolicyError"}},K1="local-run-store.sqlite",$1=5e3,ji=class e{db;now;databasePath;constructor(t,r,n){this.db=t,this.databasePath=r,this.now=n}static open(t){let r=A_(t.directory,t.classifyOptions);if(r.verdict!=="accepted")throw new qc(r.reason);W1(t.directory,{recursive:!0,mode:448});let n=U1.join(t.directory,t.filename??K1),o=new F1(n,{timeout:t.busyTimeoutMs??$1}),s=t.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new qc(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),__(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(t){this.db.exec("BEGIN IMMEDIATE");try{let r=t();return this.db.exec("COMMIT"),r}catch(r){throw this.db.exec("ROLLBACK"),r}}registerProcessIdentity(t){let r=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
116
+ ) STRICT`]});import{existsSync as hV,realpathSync as yV,readFileSync as kV}from"node:fs";import ox from"node:path";function RV(){try{return kV("/proc/self/mounts","utf8")}catch{return null}}function wV(e){let t=ox.resolve(e);for(let r=0;r<64;r+=1){if(hV(t))try{return yV.native(t)}catch{return t}let n=ox.dirname(t);if(n===t)return t;t=n}return t}function SV(e){return e.replace(/\\(\d{3})/g,(t,r)=>String.fromCharCode(Number.parseInt(r,8)))}function _V(e){let t=[];for(let r of e.split(`
117
+ `)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:SV(n[1]),fsType:n[2]})}return t}function sx(e,t=process.platform){return t==="win32"?e.replace(/\\/g,"/"):e}function xV(e,t){let r=null,n=sx(e);for(let o of t){let s=sx(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!r||o.mountPoint.length>r.mountPoint.length)&&(r=o)}return r}function ix(e,t){let n=(t?.resolveRealPath??wV)(e),o=(t?.mountsSource??RV)();if(o===null)return{verdict:"rejected",reason:"Mount information unavailable \u2014 the filesystem type cannot be established safely, so WAL mode is refused (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let s=xV(n,_V(o));if(!s)return{verdict:"rejected",reason:"No mount entry covers the resolved database path \u2014 refusing WAL mode (fail closed).",filesystemType:null,mountPoint:null,resolvedPath:n};let i=s.fsType.toLowerCase();return vV.has(i)||i.startsWith("fuse.")?{verdict:"rejected",reason:`Filesystem '${i}' is network-like or crosses an OS boundary; SQLite WAL locking is not safe there.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:bV.has(i)?{verdict:"accepted",reason:`Local filesystem '${i}' accepted for WAL mode.`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}:{verdict:"rejected",reason:`Filesystem '${i}' is unknown to the qualification policy; WAL mode is refused rather than guessed (fail closed).`,filesystemType:i,mountPoint:s.mountPoint,resolvedPath:n}}var bV,vV,ax=p(()=>{"use strict";bV=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),vV=new Set(["9p","drvfs","nfs","nfs4","cifs","smb","smbfs","smb3","sshfs","fuse.sshfs","davfs","davfs2","glusterfs","ceph","lustre","afs","vboxsf","prl_fs","virtiofs"])});import{mkdirSync as EV}from"node:fs";import AV from"node:path";import{DatabaseSync as IV}from"node:sqlite";var lu,PV,OV,Zi,lx=p(()=>{"use strict";nx();ax();lu=class extends Error{constructor(t){super(`local-run-store refused: ${t}`),this.name="FilesystemPolicyError"}},PV="local-run-store.sqlite",OV=5e3,Zi=class e{db;now;databasePath;constructor(t,r,n){this.db=t,this.databasePath=r,this.now=n}static open(t){let r=ix(t.directory,t.classifyOptions);if(r.verdict!=="accepted")throw new lu(r.reason);EV(t.directory,{recursive:!0,mode:448});let n=AV.join(t.directory,t.filename??PV),o=new IV(n,{timeout:t.busyTimeoutMs??OV}),s=t.now??(()=>new Date);try{o.exec("PRAGMA journal_mode = WAL");let i=o.prepare("PRAGMA journal_mode").get();if(i?.journal_mode?.toLowerCase()!=="wal")throw new lu(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),rx(o,s().toISOString())}catch(i){throw o.close(),i}return new e(o,n,s)}inImmediateTransaction(t){this.db.exec("BEGIN IMMEDIATE");try{let r=t();return this.db.exec("COMMIT"),r}catch(r){throw this.db.exec("ROLLBACK"),r}}registerProcessIdentity(t){let r=this.now().toISOString();return this.inImmediateTransaction(()=>{this.db.prepare(`INSERT INTO process_identity
118
118
  (process_key, pid, runtime_version, node_version, started_at, registered_at)
119
119
  VALUES (?, ?, ?, ?, ?, ?)
120
120
  ON CONFLICT(process_key) DO UPDATE SET
@@ -138,134 +138,162 @@ child.on("exit", (code, signal) => finish(code, signal));
138
138
  LIMIT ?`).all(...s,n).map(l=>({idempotencyKey:l.idempotency_key,operation:l.operation,resultJson:l.result_json,recordedAt:l.recorded_at}))}deleteOperationReceiptsByKeys(t){return t.length===0?0:this.inImmediateTransaction(()=>{let r=this.db.prepare("DELETE FROM operation_receipts WHERE idempotency_key = ?"),n=0;for(let o of t)n+=Number(r.run(o).changes);return n})}getOperationReceipt(t){let r=this.db.prepare(`SELECT idempotency_key, operation, result_json, recorded_at
139
139
  FROM operation_receipts WHERE idempotency_key = ?`).get(t);return r?{idempotencyKey:r.idempotency_key,operation:r.operation,resultJson:r.result_json,recordedAt:r.recorded_at}:null}saveRecoveryCheckpoint(t){return this.inImmediateTransaction(()=>{let r=this.db.prepare("SELECT COALESCE(MAX(seq), 0) AS max_seq FROM recovery_checkpoints WHERE scope = ?").get(t.scope),n=Number(r.max_seq)+1;return this.db.prepare(`INSERT INTO recovery_checkpoints (scope, seq, payload_json, created_at)
140
140
  VALUES (?, ?, ?, ?)`).run(t.scope,n,t.payloadJson,this.now().toISOString()),{seq:n}})}latestRecoveryCheckpoint(t){let r=this.db.prepare(`SELECT scope, seq, payload_json, created_at FROM recovery_checkpoints
141
- WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(t);return r?{scope:r.scope,seq:r.seq,payloadJson:r.payload_json,createdAt:r.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(t){let r=this.db.prepare(`PRAGMA ${t}`).get();return String(Object.values(r)[0])}close(){this.db.close()}}});import{existsSync as H1,renameSync as j1}from"node:fs";function V1(e,t){let r=`${e}.quarantine-${t}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;H1(o)&&j1(o,`${r}${n}`)}return r}function O_(e){let t=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),r=null;try{let s=ji.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;r=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=V1(n,t);try{return{store:ji.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([r,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}var T_=p(()=>{"use strict";I_()});function G1(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function J1(){return q1.classifyOptions??G1()}function z1(e){Yc+=1;try{let t=J1(),r=O_({directory:e,...t?{classifyOptions:t}:{}});return{store:r.store,status:{state:"open",harnessRoot:e,databasePath:r.store.databasePath,schemaVersion:r.store.localSchemaVersion(),recovered:r.recovered,quarantinedTo:r.quarantinedTo,reason:null,openAttempts:Yc},failedAtMs:null,permanentRefusal:!1}}catch(t){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${t.name}: ${t.message}`,openAttempts:Yc},failedAtMs:Date.now(),permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function X1(e,t){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:t-e.failedAtMs>=Y1}function ue(e=Date.now()){let t=dt();return(!kr||kr.status.harnessRoot!==t||X1(kr,e))&&(Z1(),kr=z1(t)),kr.store}function Q1(){return kr?kr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Yc}}function N_(){return ue(),Q1()}function Z1(){try{kr?.store?.close()}catch{}kr=null}var q1,Y1,kr,Yc,Jr=p(()=>{"use strict";Et();T_();q1={},Y1=300*1e3,kr=null,Yc=0});import{existsSync as eV,readFileSync as tV}from"node:fs";import{homedir as rV}from"node:os";import nV from"node:path";function D_(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return nV.join(rV(),".kynver",`local-run-store-flags-${t}.json`)}function Ym(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t=e,r={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=t[o];(s==="off"||s==="shadow"||s==="enforce")&&(r[o]=s)}return r}function M_(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.response;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t.localRunStoreFlags;return r===void 0?null:Ym(r)}function L_(e,t){try{let r=D_(e),n={contractVersion:1,agentOsId:e,flags:Ym(t),deliveredAt:new Date().toISOString()};be(r,n),Ot={flags:n.flags,loadedAtMs:Date.now(),file:r}}catch{}}function B_(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(Ot&&e-Ot.loadedAtMs<oV)return Ot.flags;try{let t=P().agentOsId?.trim();if(!t)return Ot={flags:{},loadedAtMs:e,file:null},Ot.flags;let r=D_(t);if(!eV(r))return Ot={flags:{},loadedAtMs:e,file:r},Ot.flags;let n=JSON.parse(tV(r,"utf8")),o=n?.contractVersion===1?Ym(n.flags):{};return Ot={flags:o,loadedAtMs:e,file:r},o}catch{return Ot={flags:{},loadedAtMs:e,file:null},Ot.flags}}var oV,Ot,zm=p(()=>{"use strict";$();M();oV=3e4,Ot=null});function iV(e){let t=e?.trim().toLowerCase()??"";return t===""?{mode:"off",unknown:!1}:t==="off"||t==="shadow"||t==="enforce"?{mode:t,unknown:!1}:{mode:"off",unknown:!0}}function br(e=process.env){let t={},r={},n=[],o=B_();for(let s of sV){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=iV(i);t[s.key]=c.mode,r[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){t[s.key]=l,r[s.key]="server";continue}t[s.key]="off",r[s.key]="default"}return{flags:t,sources:r,warnings:n}}var sV,ls=p(()=>{"use strict";zm();sV=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}]});function Vi(e){return br(process.env).flags[e]}function Xm(e){return`mesh-cron-lease:${e}`}function W_(e,t){if(Vi("meshLease")==="off")return;let r=ue();if(r)try{let n=r.latestRecoveryCheckpoint(Xm(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(t.leaseToken??null)&&(o.holderBoxId??null)===(t.holderBoxId??null)&&o.authorized===t.authorized)return}r.saveRecoveryCheckpoint({scope:Xm(e),payloadJson:JSON.stringify(t)})}catch{Je.meshStoreFailures+=1}}function U_(e,t){let r=Vi("meshLease");if(r==="off")return null;let n=ue();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(Xm(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(t?.leaseToken??null)||(s.holderBoxId??null)!==(t?.holderBoxId??null)||(s.authorized??null)!==(t?.authorized??null));return i&&(Je.meshLeaseDivergences+=1),r!=="enforce"?null:i&&t?.updatedAt&&s?.updatedAt&&Date.parse(t.updatedAt)>Date.parse(s.updatedAt)?(Je.meshEnforceStaleInversions+=1,null):s}catch{return Je.meshStoreFailures+=1,null}}function zc(e){return`quota-cooldown:${e}`}function K_(e,t){if(Vi("quota")==="off")return;let r=ue();if(r)try{r.tryReserveAdmission(zc(e),F_,t)}catch{Je.quotaStoreFailures+=1}}function $_(e){if(Vi("quota")==="off")return;let t=ue();if(t)try{t.releaseAdmission(zc(e),F_)}catch{Je.quotaStoreFailures+=1}}function H_(e,t){let r=Vi("quota");if(r==="off")return null;let n=ue();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:zc(e),limit:50}).find(i=>i.key===zc(e)),s=!!o;return s!==t&&(Je.quotaVerdictDivergences+=1),r==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return Je.quotaStoreFailures+=1,null}}function j_(){return{"keeper.storeFailures":Je.keeperStoreFailures,"meshLease.storeFailures":Je.meshStoreFailures,"meshLease.divergences":Je.meshLeaseDivergences,"meshLease.enforceStaleInversions":Je.meshEnforceStaleInversions,"quota.storeFailures":Je.quotaStoreFailures,"quota.verdictDivergences":Je.quotaVerdictDivergences}}var Je,qde,F_,Gi=p(()=>{"use strict";Jr();ls();Je={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};qde=1800*1e3;F_="quota-preflight"});function Qm(e){let t=e==="--run"?"no harness run id was passed and none could be resolved":"no AgentOS workspace id was passed and none is configured",r=e==="--run"?"`kynver start` creates or reuses a run automatically and passes it to the daemon":"the daemon reads agentOsId from ~/.kynver/config.json when the flag is omitted";return[`missing ${e}: ${t}.`,`Config file: ~/.kynver/config.json (${r}).`,`Fix: run \`kynver start\` (or \`kynver bootstrap\` first on a fresh machine) to set this up automatically, or pass ${e} explicitly.`,"Diagnose: run `kynver doctor runner-install`."].join(`
142
- `)}var ppe,fpe,mpe,gpe,Zm=p(()=>{"use strict";$r();b_();$();Vm();M();Oc();Jm();Gi();ppe=15*6e4,fpe=2*6e4,mpe=5*6e4,gpe=30*6e4});import aV from"node:path";function lV(e){return aV.resolve(Me(e.trim()))}function cs(e,t,r){let n=e?.trim();return n?{repo:lV(n),source:t,persistedInConfig:r}:null}function V_(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ji(e={}){let t=e.env??process.env,r=e.config??P(),n=cs(r.defaultRepo,"config",!0);if(n)return n;let o=cs(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=cs(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||V_(Ul({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function G_(e={}){let t=e.env??process.env,r=e.config??P(),n=cs(r.defaultRepo,"config",!0);if(n)return n;let o=cs(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=cs(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||V_(Fl({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl,home:e.home}))}function J_(e,t){let r={...t??P(),defaultRepo:Me(e),...Zv(e)&&!t?.defaultBase?.trim()?{defaultBase:"main"}:{}};return We(r),r}function eg(e){return{defaultRepo:He(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var us=p(()=>{"use strict";$();mi();at();bf()});import cV from"node:path";import{homedir as uV}from"node:os";function q_(e){let t=P(),r=G_({...e,config:t});if(!r)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:He(tg),resolved:null,reason:"No git checkout found. Run this command from inside the repo you want the daemon to work on, or pass `kynver setup --repo /path/to/repo` (or export KYNVER_DEFAULT_REPO). On a fresh BYOC machine, `kynver start` creates ~/.kynver/workspace automatically.",remediation:"Run `kynver start` (creates ~/.kynver/workspace), or `kynver config ensure-default-repo` from a checkout (or `kynver setup --repo /path/to/repo`)."};if(r.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:He(tg),resolved:eg(r),config:am(t)};let n=J_(r.repo,t),o=eg({...r,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:He(tg),resolved:o,config:am(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}var tg,Y_=p(()=>{"use strict";at();$();us();tg=cV.join(uV(),".kynver","config.json")});import{mkdirSync as dV,readFileSync as pV,renameSync as fV,writeFileSync as mV}from"node:fs";import{homedir as gV}from"node:os";import z_ from"node:path";function X_(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return z_.join(gV(),".kynver",`instruction-bundle-${t}.json`)}function Q_(e,t){try{let r=X_(e);dV(z_.dirname(r),{recursive:!0});let n=`${r}.tmp-${process.pid}`;mV(n,JSON.stringify(t),{encoding:"utf8",mode:384}),fV(n,r)}catch{}}function Z_(e){try{let t=pV(X_(e),"utf8"),r=JSON.parse(t);return Mi(r)?r:null}catch{return null}}var ex=p(()=>{"use strict";Hr()});function tx(e,t=process.env){let r=es(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(r&&fS(r)===e)return r;if(e===hV&&!Tc(t))return null;let n=yV[e];return n?es(n):null}var hV,yV,rx=p(()=>{"use strict";Hr();hV="ib-3bab6314f0ba",yV={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38","ib-49e76cb8052c":"8fc646b5c4f8f402120477452608398f035c3cddd2e7aa8bb328e97b84dcf6d8"}});import{createPublicKey as kV,verify as bV}from"node:crypto";function RV(e){return kV({key:Buffer.concat([vV,Buffer.from(e)]),format:"der",type:"spki"})}function wV(e,t){if(!Mi(e))return{ok:!1,reason:"malformed signed bundle payload"};let r;try{r=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(r.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(nt(e.bundle),"utf8");return bV(null,n,RV(t),r)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function nx(e,t=process.env){if(!Mi(e))return{ok:!1,reason:"malformed signed bundle payload"};let r=tx(e.publicKeyId,t);return r?wV(e,r):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var vV,ox=p(()=>{"use strict";rx();Hr();vV=Buffer.from("302a300506032b6570032100","hex")});function Yi(e,t){console.error(JSON.stringify({event:e,...t}))}function sx(e,t,r){let n=nx(e);return n.ok?(g_(n.bundle,t),t==="server"&&Q_(r,e),!0):(Yi("instruction_bundle_signature_invalid",{agentOsId:r,source:t,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function qi(e){if(vr.diskCacheTried)return!1;vr.diskCacheTried=!0;let t=Z_(e);return t?sx(t,"disk",e):!1}async function ix(e){let t=e.nowMs??Date.now(),r=()=>({source:Ft(),version:Mn(),updated:!1});if(!e.force&&t-vr.lastAttemptAtMs<SV)return r();vr.lastAttemptAtMs=t;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return Ft()==="embedded"&&qi(e.agentOsId)?{...r(),updated:!0}:r();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),_V);try{let l=It(o);delete l["Content-Type"],vr.etag&&Ft()==="server"&&(l["If-None-Match"]=vr.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return r();if(c.status===404)return vr.routeMissingLogged||(vr.routeMissingLogged=!0,Yi("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),Ft()==="embedded"&&qi(e.agentOsId)?{...r(),updated:!0}:r();if(!c.ok)return Yi("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),Ft()==="embedded"&&qi(e.agentOsId)?{...r(),updated:!0}:r();let u=await c.json().catch(()=>null);return!u||!sx(u,"server",e.agentOsId)?Ft()==="embedded"&&qi(e.agentOsId)?{...r(),updated:!0}:r():(vr.etag=c.headers.get("etag"),Yi("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Mn(),publicKeyId:u.publicKeyId}),{...r(),updated:!0})}catch(l){return Yi("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),Ft()==="embedded"&&qi(e.agentOsId)?{...r(),updated:!0}:r()}finally{clearTimeout(a)}}var SV,_V,vr,ax=p(()=>{"use strict";as();ex();Gr();ox();SV=15*6e4,_V=1e4,vr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1}});import xV from"node:os";function lx(e,t){console.error(JSON.stringify({event:"daemon_identity",level:e,message:t}))}function cx(e=P(),t=process.env){let r=et(t,e),n=Ko({config:e,totalMemBytes:xV.totalmem(),env:t}),o=[...r.warnings],s=[];if(!e.boxKind?.trim()&&!t.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers get boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before starting the daemon"),r.slugInferenceBlocked){let c=t.KYNVER_DAEMON_STRICT_IDENTITY==="1"||t.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as a customer box (boxKind=box), not forge/ghost";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=ir(r.boxKind,i);hi(r.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)lx("warn",c);for(let c of s)lx("error",c);return{ok:l,box:r,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}var ux=p(()=>{"use strict";$();Le();Io();Ci()});import{spawnSync as CV}from"node:child_process";import{existsSync as EV,readFileSync as AV}from"node:fs";import PV from"node:path";function OV(e,t,r){let n=new Map(e.map(s=>[s.pid,s])),o=[];for(let s of t)if(!(r(s.pid)||n.has(s.pid)))for(let i of e)i.parentPid===s.pid&&(i.createdAtMs+IV<s.startedAtMs||o.push({workerName:s.workerName,workerPid:s.pid,orphanPid:i.pid}));return o}function TV(e){let t=e.trim();if(!t)return[];let r=JSON.parse(t),n=Array.isArray(r)?r:[r],o=[];for(let s of n){let i=Number(s.ProcessId),a=Number(s.ParentProcessId),l=Date.parse(String(s.Created??""));Number.isInteger(i)&&Number.isInteger(a)&&Number.isFinite(l)&&o.push({pid:i,parentPid:a,createdAtMs:l})}return o}function NV(e){let t=e.filter(s=>Number.isInteger(s)&&s>0);if(t.length===0)return[];let n=`Get-CimInstance Win32_Process -Filter "${t.map(s=>`ParentProcessId=${s}`).join(" OR ")}" | Select-Object ProcessId,ParentProcessId,@{n='Created';e={$_.CreationDate.ToUniversalTime().ToString('o')}} | ConvertTo-Json -Compress`,o=CV("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:3e4});if(o.status!==0)return[];try{return TV(o.stdout??"")}catch{return[]}}function DV(e,t=re){try{let r=Se().find(o=>o.id===e);if(!r)return[];let n=[];for(let o of Object.keys(r.workers||{})){let s=PV.join(j(r.id),"workers",B(o),"worker.json");if(!EV(s))continue;let i=JSON.parse(AV(s,"utf8")),a=Date.parse(i.startedAt??"");!i.pid||!Number.isFinite(a)||t(i.pid)||n.push({workerName:o,pid:i.pid,startedAtMs:a})}return n}catch{return[]}}function dx(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return{checkedWorkers:0,killed:[]};let n=t.isAlive??re,o=(t.collect??(l=>DV(l,n)))(e);if(o.length===0)return{checkedWorkers:0,killed:[]};let s=(t.query??NV)(o.map(l=>l.pid)),i=t.killTree??fe,a=OV(s,o,n).map(l=>({...l,result:i(l.orphanPid,"SIGKILL")}));return{checkedWorkers:o.length,killed:a}}var IV,px=p(()=>{"use strict";Y();M();ci();IV=5e3});import{mkdirSync as MV,readFileSync as LV,renameSync as BV,writeFileSync as WV}from"node:fs";import{homedir as UV}from"node:os";import Xc from"node:path";function fx(){return Xc.join(UV(),".kynver")}function FV(e=fx()){return Xc.join(e,"doctor-native-windows.json")}function mx(e=fx()){return Xc.join(e,"native-windows-state.json")}function KV(e,t){MV(Xc.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;WV(r,`${JSON.stringify(t,null,2)}
143
- `,{mode:384}),BV(r,e)}function ng(e){try{return JSON.parse(LV(e,"utf8"))}catch{return null}}function $V(e){let t=ng(FV(e));return!t||typeof t.checkedAt!="string"||typeof t.verdict!="string"?null:{checkedAt:t.checkedAt,runtimeVersion:typeof t.runtimeVersion=="string"?t.runtimeVersion:"unknown",verdict:t.verdict,failing:Array.isArray(t.failing)?t.failing.filter(r=>typeof r=="string"):[],warnings:Array.isArray(t.warnings)?t.warnings.filter(r=>typeof r=="string"):[],providers:t.providers&&typeof t.providers=="object"?Object.fromEntries(Object.entries(t.providers).filter(r=>typeof r[1]=="string")):{},orphanedProcesses:typeof t.orphanedProcesses=="number"?t.orphanedProcesses:0}}function gx(e=new Date,t){try{let r=mx(t),n=ng(r)??{};KV(r,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function HV(e){let t=ng(mx(e));return typeof t?.lastWorkerCompletedAt=="string"?t.lastWorkerCompletedAt:null}function yx(e){rg=e.admission,hx=e.ownerKind}function kx(e={}){let t=e.platform??process.platform,r=e.hostKind??Gf(),n=r==="win32";return{hostKind:r,wsl:r==="wsl",platform:t,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:Ge,ownerKind:hx,nativeWindows:n?{admission:rg?.basis??null,hostCapability:rg?.hostCapability??null,lastDoctor:$V(e.root),lastWorkerCompletedAt:HV(e.root)}:null}}var rg,hx,Qc=p(()=>{"use strict";fc();Vr();rg=null,hx=null});function jV(e){return typeof e=="string"&&bx.includes(e)}function VV(e,t){let r=e[t]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function JV(e={}){let t=e.platform??process.platform,r=e.env??process.env;return e.hostCapability!==void 0&&!jV(e.hostCapability)?{allowed:!1,reason:"invalid_host_capability",remedy:"hostCapability must be one of: "+bx.join(", ")}:t!=="win32"?{allowed:!0,basis:"not_native_windows",hostCapability:e.hostCapability??null}:e.hostCapability?{allowed:!0,basis:"host_capability",hostCapability:e.hostCapability}:VV(r,og)?{allowed:!0,basis:"experimental_env_override",hostCapability:null}:{allowed:!1,reason:"native_windows_unqualified",remedy:GV}}function sg(e={}){let t=JV(e);return t.allowed?(t.basis==="experimental_env_override"&&console.error(JSON.stringify({event:"daemon_native_windows_experimental",override:og,note:"Native Windows is not yet qualified for this runtime release; WSL remains the supported path."})),t):(console.error(JSON.stringify({event:"daemon_start_blocked",reason:t.reason,remedy:t.remedy})),process.exit(1),t)}var bx,og,GV,ig=p(()=>{"use strict";bx=["desktop-supervised","native-windows-qualified"],og="KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS";GV=`Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set ${og}=1 for the experimental native path (not yet qualified; \`kynver doctor runner-install\` reports the host).`});function qV(e){return e.replace(/\/+$/,"")}async function vx(e){let t=e.fetchFn??fetch,r=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${qV(e.baseUrl)}${r}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await t(n,{method:"POST",headers:It(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a,url:n}}var Rx=p(()=>{"use strict";as()});import{closeSync as YV,existsSync as ag,openSync as zV,readFileSync as XV,unlinkSync as wx,writeFileSync as QV}from"node:fs";function Sx(e){if(!ag(e))return null;try{let t=JSON.parse(XV(e,"utf8"));if(typeof t.pid=="number"&&typeof t.at=="string")return t}catch{return null}return null}function eG(e){let t=Sx(e);if(!t||!re(t.pid))return!0;let r=Date.parse(t.at);return Number.isNaN(r)?!0:Date.now()-r>ZV}function _x(e){if(ag(e)&&!eG(e)){let t=Sx(e);return{acquired:!1,reason:t?`held by pid ${t.pid}`:"held by another process"}}if(ag(e))try{wx(e)}catch{}try{let t=zV(e,"wx");return QV(t,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),YV(t),{acquired:!0}}catch(t){if(t.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw t}}function xx(e){try{wx(e)}catch{}}var ZV,Cx=p(()=>{"use strict";M();ZV=10*6e4});function rG(e){return tG.test(e.trim())}function nG(e,t,r){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=t;d<=r;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=t;d<=r;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(t,Number(c[1])),f=Math.min(r,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=t&&u<=r&&n.add(u)}return n}function zi(e,t,r,n){let o=e.trim();return o==="*"?!0:nG(o,r,n).has(t)}function oG(e,t){let r=e.trim().split(/\s+/);if(r.length!==5)return!1;let[n,o,s,i,a]=r;return zi(n,t.getUTCMinutes(),0,59)&&zi(o,t.getUTCHours(),0,23)&&zi(s,t.getUTCDate(),1,31)&&zi(i,t.getUTCMonth()+1,1,12)&&zi(a,t.getUTCDay(),0,6)}function iG(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Ex(e,t){if(!rG(e))return null;let r=iG(t);r=new Date(r.getTime()+6e4);for(let n=0;n<sG;n++){if(oG(e,r))return r;r=new Date(r.getTime()+6e4)}return null}function Ax(e,t){if(e.scheduleKind==="runAt"&&e.runAt){let r=Date.parse(e.runAt);return Number.isNaN(r)?null:new Date(r).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let r=Ex(e.cron.trim(),t);return r?r.toISOString():null}return null}function lg(e,t){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let r=Ex(e.cron.trim(),t);return r?r.toISOString():null}var tG,sG,Px=p(()=>{"use strict";tG=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;sG=366*24*60});import{randomBytes as aG}from"node:crypto";import{promises as Xi}from"node:fs";import lG from"node:path";async function cG(e){try{return await Xi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function uG(e){if(!e)return{...Zc,jobs:{...Zc.jobs}};try{let t=JSON.parse(e);return t?.version!==1||typeof t.jobs!="object"||!t.jobs?{...Zc,jobs:{}}:t}catch{return{...Zc,jobs:{}}}}async function cg(e){let t=await cG(e);return uG(t)}async function dG(e,t){await Xi.mkdir(lG.dirname(e),{recursive:!0});let r=aG(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${r}`;await Xi.writeFile(n,`${JSON.stringify(t,null,2)}
144
- `,"utf8");try{await Xi.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await Xi.unlink(n).catch(()=>{})}}async function Ix(e,t){await dG(e,t)}function Ox(e,t){let r=e.jobs[t];if(r)return r;let n={providerScheduleId:t,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[t]=n,n}var Zc,ug=p(()=>{"use strict";Zc={version:1,jobs:{}}});function pG(e,t){if(!e.inflightUntil)return!1;let r=Date.parse(e.inflightUntil);return!Number.isNaN(r)&&r>t}function fG(e){return!!e.completedAt}function mG(e,t,r,n){if(t.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&t.consecutiveFailures>r.maxRetries)return!1;if(!t.lastAttemptAt)return!0;let o=Date.parse(t.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=r.retryBackoffMs}function gG(e,t,r){if(t.nextFireAt)return t.nextFireAt;let n=Ax(e.spec,r);return t.nextFireAt=n,n}function hG(e,t,r,n){if(e.paused||fG(t)||pG(t,r)||!mG(e,t,n,r))return!1;let o=t.nextFireAt?Date.parse(t.nextFireAt):NaN;return Number.isNaN(o)?!1:r>=o}function yG(e,t,r){e.spec.scheduleKind==="cron"&&(t.nextFireAt=lg(e.spec,r))}async function dg(e={}){let t=e.env??rs(),r=e.now??new Date,n=r.getTime(),o=e.agentOsIdFilter?Te(e.agentOsIdFilter):Te();if(!t.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!t.fireBaseUrl||!t.secret&&!o)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let s=_x(t.lockPath);if(!s.acquired)return{enabled:!0,skipped:s.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let i=await Hc(t.storePath),a=e.agentOsIdFilter?i.filter(h=>h.spec.target.agentOsId===e.agentOsIdFilter):i,l=await cg(t.statePath),c=[];for(let h of a){let y=Ox(l,h.providerScheduleId);gG(h,y,r),hG(h,y,n,t)&&c.push({entry:h,job:y})}c.sort((h,y)=>{let v=Date.parse(h.job.nextFireAt??"")||0,k=Date.parse(y.job.nextFireAt??"")||0;return v-k});let u=0,d=0,f=0,m=t.maxCatchUpPerTick,g=[];for(let{entry:h,job:y}of c){if(t.missedRunPolicy==="skip"&&h.spec.scheduleKind==="cron"){let v=Date.parse(y.nextFireAt??"");if(!Number.isNaN(v)&&v<n-t.tickIntervalMs*2){y.nextFireAt=lg(h.spec,r),f++;continue}}if(m<=0){f++;continue}y.inflightUntil=new Date(n+t.inflightLeaseMs).toISOString(),y.lastAttemptAt=r.toISOString(),yG(h,y,r);try{let v=Te(h.spec.target.agentOsId)||t.secret;if(!v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:"missing_fire_credentials"});continue}let k=await vx({entry:h,baseUrl:t.fireBaseUrl,secret:v,fetchFn:e.fetchFn});y.inflightUntil=null,k.ok?(y.lastFiredAt=r.toISOString(),y.consecutiveFailures=0,h.spec.scheduleKind==="runAt"&&(y.completedAt=r.toISOString(),y.nextFireAt=null),u++,m--):(y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:v instanceof Error?v.message:String(v)})}}return await Ix(t.statePath,l),{enabled:!0,scanned:a.length,due:c.length,fired:u,skippedJobs:f,errors:d,...g.length?{errorDetails:g}:{}}}finally{xx(t.lockPath)}}var pg=p(()=>{"use strict";gr();Rx();Cx();$();Px();ns();ug()});import Tx from"node:path";function eu(e){let t=F(Tx.join(j(e),Nx),null);return U_(e,t)??t}function Dx(e,t){let r={...t,updatedAt:new Date().toISOString()};be(Tx.join(j(e),Nx),r),W_(e,r)}function Mx(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.response;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t.meshLiveness;if(!r||typeof r!="object"||Array.isArray(r))return null;let n=r.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}var Nx,fg=p(()=>{"use strict";M();Y();Gi();Nx="mesh-cron-lease.json"});function Wx(e){Qi=e}function Ux(e=Date.now()){return!Qi||Qi.stallCount===Lx&&e-Bx<9e5?null:(Lx=Qi.stallCount,Bx=e,Qi)}var Qi,Lx,Bx,mg=p(()=>{"use strict";Qi=null,Lx=-1,Bx=0});function Kx(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let t=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(t)&&t>0?Math.floor(t):3e4}function Fx(e){return new Error(`callback timeout after ${e}ms`)}async function $x(e,t){let r=Kx(t),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(Fx(r))},r)})])}catch(i){throw s?Fx(r):i}finally{o&&clearTimeout(o)}}function Hx(e,t){let r=Kx(t);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:r}}}async function Ln(e,t,r,n){try{return await $x(async o=>{let s=await ut(e,{method:"POST",headers:It(t),body:JSON.stringify(r),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return Hx(o,n?.timeoutMs)}}async function de(e,t,r,n){let o=await Ln(e,t,r,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await aS(t,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Ln(e,s.token,r,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function gg(e,t,r){try{return await $x(async n=>{let o=await ut(e,{method:"GET",headers:It(t),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},r?.timeoutMs)}catch(n){return Hx(n,r?.timeoutMs)}}var Fe=p(()=>{"use strict";as();sr();$()});function jx(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}var Vx=p(()=>{"use strict"});function Zi(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function Gx(e){if(!e||typeof e!="object")return!1;let t=e;if(t.timeout===!0||t.timeoutMs!==void 0)return!0;let r=t.error;if(typeof r!="string"||!r.trim())return!1;let n=r.toLowerCase();return n.includes("abort")||n.includes("timeout")}function hg(e){if(!e||typeof e!="object")return!1;let t=e;return t.timeout===!0?!0:(typeof t.error=="string"?t.error.toLowerCase():"").includes("timeout")}var Jx=p(()=>{"use strict"});function vG(e){return kG.includes(e)}function RG(e){return bG.includes(e)}function qx(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||vG(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:RG(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}function SG(e){if(!e)return null;let t=e.trim().toLowerCase(),r=wG.get(t)??null,n=h_(t);if(!n)return r;let o=qx(n);return r?{...o,dispatchLane:r.dispatchLane,defaultRoleLane:r.defaultRoleLane}:o}function yg(e){return SG(e)?.defaultRoleLane??null}function zx(){return Yx.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}var kG,bG,Yx,wG,tu=p(()=>{"use strict";Km();Gr();kG=["implementation","review","landing"],bG=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];Yx=os.personas.map(qx),wG=new Map(Yx.map(e=>[e.slug,e]))});function Xx(e){return(e??"").trim().toLowerCase()}function _G(e){switch(Xx(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function xG(e){let t=Xx(e);if(!t)return;if(t==="implementation"||t==="review"||t==="landing"||t==="any")return t;let r=_G(t);if(r)return r;if(t==="implement"||t==="repair"||t==="coding")return"implementation";if(t==="land"||t==="merge")return"landing"}function Qx(e){return xG(e)??"any"}var Zx=p(()=>{"use strict";tu()});function CG(e=process.env){let t=P();return xt(t,e)!=="forge"}function ru(e,t=process.env){if(CG(t))return e?.maxConcurrentWorkers??void 0}async function nu(e,t){let r=pe(t.baseUrl?String(t.baseUrl):void 0),n=await me(t.secret?String(t.secret):void 0,e,{baseUrl:r}),o=`${r}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await gg(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}var kg=p(()=>{"use strict";Fe();$();Le()});async function eC(e,t=EG){let r=await t.fetchPreferences(e.agentOsId,e.args),n=t.configuredOverride(r,e.env);return t.observe({runId:e.runId,configuredMaxWorkersOverride:n})}var EG,tC=p(()=>{"use strict";kg();Fo();EG={fetchPreferences:nu,configuredOverride:ru,observe:xi}});function ou(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function bg(e){return e.toLowerCase()}function AG(e){let t=ou(e,"roleLane");if(t)return t;let r=bg(ou(e,"executorRef")),n=bg(ou(e,"title")),o=bg(ou(e,"personaSlug")),s=`${r} ${n}`;if(s.includes("deep review")||s.includes("security review")||r.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||r.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||r.includes("repair"))return"repair_implementer";if(r.includes("cursor")||r.includes("codex")||r.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=yg(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function rC(e){let t=AG(e);return t?{...e,roleLane:t}:e}var nC=p(()=>{"use strict";tu()});function oC(e){let t=e.trim();return PG.test(t)||IG.test(t)}function sC(e){let t=e.trim().toLowerCase();return t.startsWith("gpt-")||t.startsWith("gpt5")||t.includes("codex")}function vg(e){let t=e.trim().toLowerCase();return t.includes("composer")||t.includes("cursor")}function iC(e){return e.trim().toLowerCase().startsWith("gemini-")}function OG(e){return sC(e)?"codex":oC(e)?"claude":iC(e)?"gemini":(vg(e),"cursor")}function TG(e){if(!e.startsWith("provider:"))return null;let t=e.slice(9),r=t.indexOf(":"),n=(r>=0?t.slice(0,r):t).trim().toLowerCase(),o=r>=0&&t.slice(r+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function NG(e){if(!e.startsWith("harness-lane:"))return null;let t=e.split(":").map(o=>o.trim()).filter(Boolean);if(t.length<2)return null;let r=t[1],n=t.slice(2).join(":");return n?oC(n)||sC(n)||vg(n)||iC(n)?{lane:r,model:n,provider:OG(n),rule:"executor_ref:harness_lane_model"}:{lane:r,rule:"executor_ref:harness_lane"}:{lane:r,rule:"executor_ref:harness_lane"}}function ft(e){let t=typeof e=="string"?e.trim():"";return t?TG(t)??NG(t):null}function aC(e){let t=ft(e);return t?!!(t.provider&&t.provider!=="cursor"||t.model&&!vg(t.model)):!1}var PG,IG,su=p(()=>{"use strict";PG=/^claude[-_]/i,IG=/^(?:opus|sonnet|haiku)\b/i});function ea(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Rr(e){if(!e?.trim())return!1;let t=e.trim().toLowerCase();return DG.has(t)?!0:t.includes("claude")||t.includes("opus")}function iu(e){if(!e)return!1;let t=e.workerProviderOverride;if(typeof t=="string"&&Rr(t))return!0;let r=ea(e,"executorRef").toLowerCase();if(r==="provider:claude"||r.startsWith("provider:claude:")||r.includes("claude-worker-override")||r.includes("operator-claude"))return!0;let n=ft(ea(e,"executorRef"));if(n?.provider&&Rr(n.provider)||n?.model&&Rr(LG(n.model)))return!0;let o=ea(e,"description");if(MG.some(i=>i.test(o)))return!0;let s=ea(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function LG(e){let t=e.trim().toLowerCase();return/^claude[-_]/.test(t)||/^(?:opus|sonnet|haiku)\b/.test(t)?"claude":t}function BG(e,t){return{provider:wr,model:au,rule:`policy:cursor_default${t}`,requestedModel:e}}function UG(e){return WG.some(t=>e.startsWith(t))}function Rg(e){if(!e)return!1;let t=e.workerProviderOverride;return typeof t=="string"&&t.trim()||ft(ea(e,"executorRef"))?.provider?!0:iu(e)}function lC(e){let{routing:t,task:r}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Rr(n))return{...t,provider:"claude",rule:t.rule.startsWith("explicit:")?t.rule:"explicit:operator_provider"};if(n||UG(t.rule)||Rg(r)||!Rr(t.provider))return t;let o=t.rule&&t.rule!=="default:global"?`:${t.rule.replace(/:/g,"_")}`:"";return BG(t.model,o)}function cC(e,t=wr){let r=e?.trim();return r?je(r):t}var wr,DG,MG,WG,Bn=p(()=>{"use strict";su();lu();Oi();Oi();wr="cursor",DG=new Set(["claude","opus","anthropic"]),MG=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];WG=["explicit:","executor_ref:","factory:","task:"]});function ds(e){return uC[e]}function dC(){return Object.values(uC)}var uC,wg=p(()=>{"use strict";uC={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}}});import{existsSync as mC,readFileSync as FG}from"node:fs";import Wn from"node:path";function $G(e){return e.includes("/")||e.includes("\\")}function HG(e){return(e.PATHEXT||KG).split(";").map(t=>t.trim().toLowerCase()).filter(t=>t.startsWith("."))}function jG(e){let t=Object.keys(e).find(r=>r.toUpperCase()==="PATH");return t?e[t]??"":""}function VG(e,t={}){let r=t.env??process.env,n=t.exists??mC,o=HG(r),s=Wn.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if($G(e)||Wn.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of jG(r).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(Wn.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function fC(e){return e.replace(/^[\\/]+/,"")}function JG(e){let t=e.split(/\r?\n/),r=new Map;for(let s of t){let i=GG.exec(s);i&&r.set(i[1].toUpperCase(),i[2])}let n=t.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=pC.exec(n);if(o)return fC(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=r.get(s[1].toUpperCase()),a=i?pC.exec(i):null;if(a)return fC(a[1])}return null}function qG(e,t={}){if((t.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=VG(e,t);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=Wn.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=t.readText??(m=>FG(m,"utf8")),i=t.exists??mC,a;try{a=s(n)}catch{throw new ta(n)}let l=JG(a);if(!l)throw new ta(n);let c=Wn.win32.dirname(n),u=Wn.win32.join(c,l);if(!i(u))throw new ta(n);let d=Wn.win32.join(c,"node.exe");return{executable:i(d)?d:t.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function ae(e,t,r={}){let n=qG(e,r);return[n.executable,[...n.prefixArgs,...t]]}var ta,KG,pC,GG,qe=p(()=>{"use strict";ta=class extends Error{constructor(r){super(`${r} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=r;this.name="UnresolvableWindowsShimError"}shimPath},KG=".COM;.EXE;.BAT;.CMD";pC=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,GG=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});import{createHash as gC}from"node:crypto";import{statSync as YG}from"node:fs";import{spawnSync as hC}from"node:child_process";function Kt(e){try{let t=YG(e),r=`${e}|${t.size}|${t.mtimeMs}`;return gC("sha256").update(r).digest("hex").slice(0,16)}catch{return}}function ps(e){return gC("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function mt(e,t){for(let r of t){let n=process.env[r]?.trim();if(n)return n}return e}function Tt(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=ae(e,t),i=hC(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...r.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:r.okNote??`${e} ${t.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=r.failPrefix??`${e} ${t.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function cu(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=ae(e,t);return hC(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:r.okNote??`${e} authenticated`}:{ok:!1,note:r.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var Un=p(()=>{"use strict";qe()});import{existsSync as zG}from"node:fs";import{homedir as XG}from"node:os";import ra from"node:path";function ZG(){let e=XG();return[process.env.CODEX_HOME?.trim()?ra.join(ra.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,ra.join(e,".codex","auth.json"),ra.join(e,".config","codex","auth.json")].filter(r=>!!r)}function eJ(e){return ra.dirname(e)}function tJ(e){let t,r;for(let n of ZG()){if(!zG(n))continue;t??=n;let o=Tt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:eJ(n)}});if(r??=o,o.ok)return{authPath:n,login:o}}return{authPath:t,login:r??Tt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function yC(e=new Date().toISOString()){let t=mt(QG,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:ps("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:r,login:n}=tJ(t),o=!!r&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:r?Kt(r):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,r?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}var QG,kC=p(()=>{"use strict";Un();QG="codex"});import{existsSync as rJ}from"node:fs";import{homedir as nJ}from"node:os";import Sg from"node:path";function oJ(){let e=process.env.HERMES_HOME?.trim(),t=e?Sg.resolve(e):Sg.join(nJ(),".hermes");return Sg.join(t,"auth.json")}function uu(e=new Date().toISOString()){let t=mt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Tt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=oJ(),o=rJ(n),s=cu(t,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=r.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?Kt(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[r.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}var _g=p(()=>{"use strict";Un()});function fs(e=new Date().toISOString()){let t=yC(e);if(t.ready)return{...t,path:"codex_cli"};let r=uu(e);return r.ready?{providerId:"codex",ready:!0,authSource:r.authSource,sessionFingerprint:r.sessionFingerprint,checkedAt:r.checkedAt,note:r.note,path:"hermes_openai_codex",hermesOpenAiCodex:r}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:r,note:[t.note,r.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var du=p(()=>{"use strict";kC();_g()});function RC(e,t){let r=ds(e);return t==="privileged"?r.supportsPrivilegedPlatformActions:t==="low"?r.supportsLowRiskOrchestration:!0}function sJ(e,t){let r=ds(e.providerId),n=ds(t.providerId),o=bC.indexOf(r.costTier)-bC.indexOf(n.costTier);if(o!==0)return o;let s=vC[e.binding.authSource]-vC[t.binding.authSource];return s!==0?s:e.providerId.localeCompare(t.providerId)}function xg(e){let t=dC().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&RC(a.providerId,e.riskClass));if(t.length===0)return null;let n=[...t].sort(sJ)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return RC(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}var bC,vC,wC=p(()=>{"use strict";wg();bC=["low","medium","high"],vC={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3}});import{existsSync as iJ}from"node:fs";import{homedir as aJ}from"node:os";import lJ from"node:path";function uJ(){let e=aJ();return[lJ.join(e,".claude",".credentials.json")]}function SC(e=new Date().toISOString()){let t=mt(cJ,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:ps("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let r=Tt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=uJ().find(i=>iJ(i)),o=cu(t,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=r.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?Kt(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[r.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}var cJ,_C=p(()=>{"use strict";Un();cJ="claude"});function gt(e,t={}){let r=di(e);if(!t.reviewWorker)return r;let n={...r,[dJ]:"1"};for(let o of pJ)delete n[o];return n}var dJ,pJ,Fn=p(()=>{"use strict";pi();dJ="KYNVER_NO_PROD_DB_CREDENTIALS",pJ=["KYNVER_ENV_FILE"]});function xC(e){return e.replace(fJ,"")}function pu(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function mJ(e){let t=e.trim().toLowerCase();return t.startsWith("gemini-")||t==="auto"||t==="pro"||t==="flash"||t==="flash-lite"}function hJ(e){let t=e.trim().toLowerCase();return gJ.has(t)?"auto":null}function Cg(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=xC(r).trim()||t;return CC.test(o)||!pu(o)&&o!==t?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==r?{ok:!0,model:o,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function ms(e,t){let r=(e??"").trim();return r?pu(r)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:r,normalized:!1}:{ok:!0,model:t,normalized:!1}}function Eg(e,t){let r=(e??"").trim();if(r)return{ok:!0,model:r,normalized:!1};let n=(t??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function gs(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=xC(r).trim()||t;return pu(o)||!mJ(o)&&CC.test(o)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==r?{ok:!0,model:o,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function hs(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let n=hJ(r);return n?{ok:!0,model:n,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:pu(r)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:r,normalized:!1}}var fJ,CC,gJ,$t=p(()=>{"use strict";fJ=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;CC=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;gJ=new Set(["cursor"])});import{existsSync as na,readdirSync as yJ}from"node:fs";import Kn from"node:path";function bJ(e){let r=e.split("-")[0].split(".");if(r.length!==3)return null;let[n,o,s]=r;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function vJ(e){let t=Kn.join(e,"versions");if(!na(t))return null;let r=null,n=-1;for(let o of yJ(t,{withFileTypes:!0})){if(!o.isDirectory()||!kJ.test(o.name))continue;let s=bJ(o.name);s==null||s<=n||(n=s,r=Kn.join(t,o.name))}return r}function fu(e){let t=e?.trim()||Kn.join(process.env.LOCALAPPDATA||"","cursor-agent"),r=Kn.join(t,"node.exe"),n=Kn.join(t,"index.js");if(na(r)&&na(n))return{nodeExe:r,indexJs:n,versionDir:t};let o=vJ(t);if(!o)return null;let s=Kn.join(o,"node.exe"),i=Kn.join(o,"index.js");return!na(s)||!na(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var kJ,EC=p(()=>{"use strict";kJ=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i});import{closeSync as Pg,existsSync as IC,mkdirSync as RJ,openSync as Ig,statSync as wJ,unlinkSync as AC}from"node:fs";import{spawn as SJ}from"node:child_process";import _J from"node:os";import Ht from"node:path";function AJ(e,t,r){return{executable:e,prefixArgs:[t],shell:!1,detached:Re(),bundledVersionDir:r}}function oa(e){if(process.platform==="win32"){let t=/\.(cmd|bat)$/i.test(e),r=/node\.exe$/i.test(e)&&IC(Ht.join(Ht.dirname(e),"index.js"));if(t||r||e==="agent"){let o=t?fu(Ht.dirname(e)):r?{nodeExe:e,indexJs:Ht.join(Ht.dirname(e),"index.js"),versionDir:Ht.dirname(e)}:fu();if(o)return AJ(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:Re()}}function PJ(e,t,r){return gt({...process.env,CI:"1",NO_COLOR:"1",...t.bundledVersionDir?{CURSOR_INVOKED_AS:Ht.basename(e)||"agent.cmd"}:{}},{reviewWorker:r})}function OC(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Og(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function IJ(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Ht.join(_J.homedir(),".kynver","locks");return RJ(e,{recursive:!0}),Ht.join(e,"cursor-agent-start.lock")}function OJ(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=IJ(),t=Og("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",CJ),r=Og("KYNVER_CURSOR_START_LOCK_STALE_MS",EJ),n=Date.now();for(;;)try{let o=Ig(e,"wx");return Pg(o),()=>{try{AC(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-wJ(e).mtimeMs>r){AC(e);continue}}catch{continue}if(Date.now()-n>t)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);OC(250)}}function $n(e=process.env){let t=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(t)return t;if(process.platform==="win32"){let r=fu(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let n=Ht.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(IC(n))return n}return"agent"}function TJ(){return $n(process.env)}function PC(e,t,r=[]){return[...r,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt]}var Ag,xJ,CJ,EJ,TC,ys=p(()=>{"use strict";lr();M();Fn();$t();EC();Ag="composer-2.5",xJ=15e3,CJ=6e4,EJ=3e4;TC={name:"cursor",defaultModel:Ag,preflightModel(e){return hs(e,Ag)},start(e){let t=hs(e.model,Ag);if(!t.ok)throw new Error(`cursor provider model preflight failed: ${t.note}`);let r=t.model,n=Ig(e.stdoutPath,"a"),o=Ig(e.stderrPath,"a"),s=["ignore",n,o],i=TJ(),a=oa(i),l=OJ(),c;try{let[u,d]=a.shell?[a.executable,PC(e,r,a.prefixArgs)]:tt(a.executable,PC(e,r,a.prefixArgs),e.workerDir);c=SJ(u,d,z({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:PJ(i,a,e.reviewWorker)})),OC(Og("KYNVER_CURSOR_START_LOCK_HOLD_MS",xJ))}finally{l(),Pg(n),Pg(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:r}}}});import{spawnSync as NJ}from"node:child_process";function mu(e,t=process.env){try{let r;try{r=oa(e)}catch{r={executable:e,prefixArgs:[]}}let n=NJ(r.executable,[...r.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...t,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(r){return{ok:!1,note:r instanceof Error?r.message:"agent status probe failed"}}}var Tg=p(()=>{"use strict";ks();ys()});import{existsSync as NC}from"node:fs";import{homedir as DJ}from"node:os";import Hn from"node:path";import{spawnSync as MJ}from"node:child_process";function LJ(e){if(Hn.isAbsolute(e)||e.includes("/")||e.includes("\\"))return NC(e);try{let t=MJ(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function gu(e=process.env){let t=[],r=e.KYNVER_CURSOR_AUTH_HOME?.trim();r&&(t.push(Hn.join(r,".config","cursor","auth.json")),t.push(Hn.join(r,".cursor-agent","auth.json")));let n=DJ();if(t.push(Hn.join(n,".config","cursor","auth.json")),t.push(Hn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&t.push(Hn.join(o,"cursor-agent","auth.json")),s&&t.push(Hn.join(s,"cursor","auth.json"))}return t}function DC(e){return`${e.error}: ${e.detail}`}function yu(e=process.env){let t=$n(e);return LJ(t)?e.CURSOR_API_KEY?.trim()?{ok:!0,creds:{agentBin:t,authSource:"api_key_env"}}:gu(e).find(n=>NC(n))?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:mu(t,e).ok?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:{ok:!1,error:Ng,detail:"Run `agent login` on this computer, or set CURSOR_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:hu,detail:"`agent` CLI not found. Install the Cursor Agent CLI (https://cursor.com/docs/cli/headless) and keep it on PATH."}}var hu,Ng,ks=p(()=>{"use strict";ys();Tg();hu="cursor_cli_unavailable",Ng="cursor_not_logged_in"});import{existsSync as BJ}from"node:fs";function MC(e=new Date().toISOString()){let t=mt(WJ,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:ps("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let r=Tt(t,["-v"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=gu().find(a=>BJ(a)),o=mu(t),s=!!n||o.ok,i=r.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?Kt(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[r.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}var WJ,LC=p(()=>{"use strict";ks();Tg();Un();WJ="agent"});import{existsSync as UJ,readFileSync as FJ}from"node:fs";import{homedir as KJ}from"node:os";import Dg from"node:path";function HJ(){let e=process.env.HERMES_HOME?.trim(),t=e?Dg.resolve(e):Dg.join(KJ(),".hermes");return Dg.join(t,".env")}function jJ(e){try{let t=FJ(e,"utf8"),r=[];for(let n of $J)new RegExp(`^${n}=`,"m").test(t)&&r.push(n);return r}catch{return[]}}function BC(e=new Date().toISOString()){let t=mt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Tt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=HJ(),o=UJ(n),s=o?jJ(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=r.ok&&o;return{adapterId:"hermes",cliAvailable:r.ok,profileBound:o,authSource:a,sessionFingerprint:o?Kt(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[r.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}var $J,WC=p(()=>{"use strict";Un();$J=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"]});function UC(e={}){let t=e.nowIso?.()??new Date().toISOString(),r=fs(t),n={codex:r,cursor:MC(t),claude:SC(t)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:t,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:BC(t),hermesOpenAiCodex:uu(t),codexAdapterPath:r.path,readyCount:o}}var FC=p(()=>{"use strict";_C();du();LC();WC();_g()});function Mg(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function JJ(e){let t=Mg(e,"executorRef").toLowerCase(),r=Mg(e,"title").toLowerCase(),n=Mg(e,"description").toLowerCase(),o=`${t}
141
+ WHERE scope = ? ORDER BY seq DESC LIMIT 1`).get(t);return r?{scope:r.scope,seq:r.seq,payloadJson:r.payload_json,createdAt:r.created_at}:null}localSchemaVersion(){return 1}checkpointTruncate(){this.db.exec("PRAGMA wal_checkpoint(TRUNCATE)")}integrityCheck(){return this.db.prepare("PRAGMA integrity_check").get()?.integrity_check==="ok"}pragma(t){let r=this.db.prepare(`PRAGMA ${t}`).get();return String(Object.values(r)[0])}close(){this.db.close()}}});import{existsSync as TV,renameSync as NV}from"node:fs";function DV(e,t){let r=`${e}.quarantine-${t}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;TV(o)&&NV(o,`${r}${n}`)}return r}function cx(e){let t=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),r=null;try{let s=Zi.open(e);if(s.integrityCheck())return{store:s,recovered:!1,quarantinedTo:null};s.close()}catch(s){if(s.name==="SchemaDowngradeRefusedError"||s.name==="FilesystemPolicyError")throw s;r=s}let n=`${e.directory}/${e.filename??"local-run-store.sqlite"}`,o=DV(n,t);try{return{store:Zi.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([r,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}var ux=p(()=>{"use strict";lx()});function MV(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function LV(){return BV.classifyOptions??MV()}function WV(e){cu+=1;try{let t=LV(),r=cx({directory:e,...t?{classifyOptions:t}:{}});return{store:r.store,status:{state:"open",harnessRoot:e,databasePath:r.store.databasePath,schemaVersion:r.store.localSchemaVersion(),recovered:r.recovered,quarantinedTo:r.quarantinedTo,reason:null,openAttempts:cu},failedAtMs:null,permanentRefusal:!1}}catch(t){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${t.name}: ${t.message}`,openAttempts:cu},failedAtMs:Date.now(),permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function FV(e,t){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:t-e.failedAtMs>=UV}function de(e=Date.now()){let t=ft();return(!br||br.status.harnessRoot!==t||FV(br,e))&&(KV(),br=WV(t)),br.store}function $V(){return br?br.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:cu}}function dx(){return de(),$V()}function KV(){try{br?.store?.close()}catch{}br=null}var BV,UV,br,cu,Xr=p(()=>{"use strict";At();ux();BV={},UV=300*1e3,br=null,cu=0});import{existsSync as HV,readFileSync as jV}from"node:fs";import{homedir as VV}from"node:os";import GV from"node:path";function px(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return GV.join(VV(),".kynver",`local-run-store-flags-${t}.json`)}function kg(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t=e,r={},n=["dispatchReceipts","admission","planOutbox","keeper","meshLease","quota"];for(let o of n){let s=t[o];(s==="off"||s==="shadow"||s==="enforce")&&(r[o]=s)}return r}function fx(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.response;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t.localRunStoreFlags;return r===void 0?null:kg(r)}function mx(e,t){try{let r=px(e),n={contractVersion:1,agentOsId:e,flags:kg(t),deliveredAt:new Date().toISOString()};Re(r,n),Tt={flags:n.flags,loadedAtMs:Date.now(),file:r}}catch{}}function gx(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(Tt&&e-Tt.loadedAtMs<JV)return Tt.flags;try{let t=A().agentOsId?.trim();if(!t)return Tt={flags:{},loadedAtMs:e,file:null},Tt.flags;let r=px(t);if(!HV(r))return Tt={flags:{},loadedAtMs:e,file:r},Tt.flags;let n=JSON.parse(jV(r,"utf8")),o=n?.contractVersion===1?kg(n.flags):{};return Tt={flags:o,loadedAtMs:e,file:r},o}catch{return Tt={flags:{},loadedAtMs:e,file:null},Tt.flags}}var JV,Tt,bg=p(()=>{"use strict";K();M();JV=3e4,Tt=null});function YV(e){let t=e?.trim().toLowerCase()??"";return t===""?{mode:"off",unknown:!1}:t==="off"||t==="shadow"||t==="enforce"?{mode:t,unknown:!1}:{mode:"off",unknown:!0}}function vr(e=process.env){let t={},r={},n=[],o=gx();for(let s of qV){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=YV(i);t[s.key]=c.mode,r[s.key]="env",c.unknown&&n.push(`${s.env}='${i}' is not off|shadow|enforce \u2014 treating as off`);continue}let l=o[s.key];if(l){t[s.key]=l,r[s.key]="server";continue}t[s.key]="off",r[s.key]="default"}return{flags:t,sources:r,warnings:n}}var qV,ps=p(()=>{"use strict";bg();qV=[{key:"dispatchReceipts",env:"KYNVER_LRS_DISPATCH_RECEIPTS",milestone:"D1"},{key:"admission",env:"KYNVER_LRS_ADMISSION",milestone:"D2"},{key:"planOutbox",env:"KYNVER_LRS_PLAN_OUTBOX",milestone:"D3"},{key:"keeper",env:"KYNVER_LRS_KEEPER",milestone:"D4"},{key:"meshLease",env:"KYNVER_LRS_MESH_LEASE",milestone:"D4"},{key:"quota",env:"KYNVER_LRS_QUOTA",milestone:"D4"}]});function ea(e){return vr(process.env).flags[e]}function vg(e){return`mesh-cron-lease:${e}`}function hx(e,t){if(ea("meshLease")==="off")return;let r=de();if(r)try{let n=r.latestRecoveryCheckpoint(vg(e));if(n){let o=JSON.parse(n.payloadJson);if((o.leaseToken??null)===(t.leaseToken??null)&&(o.holderBoxId??null)===(t.holderBoxId??null)&&o.authorized===t.authorized)return}r.saveRecoveryCheckpoint({scope:vg(e),payloadJson:JSON.stringify(t)})}catch{Ye.meshStoreFailures+=1}}function yx(e,t){let r=ea("meshLease");if(r==="off")return null;let n=de();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(vg(e)),s=o?JSON.parse(o.payloadJson):null,i=s!==null&&((s.leaseToken??null)!==(t?.leaseToken??null)||(s.holderBoxId??null)!==(t?.holderBoxId??null)||(s.authorized??null)!==(t?.authorized??null));return i&&(Ye.meshLeaseDivergences+=1),r!=="enforce"?null:i&&t?.updatedAt&&s?.updatedAt&&Date.parse(t.updatedAt)>Date.parse(s.updatedAt)?(Ye.meshEnforceStaleInversions+=1,null):s}catch{return Ye.meshStoreFailures+=1,null}}function uu(e){return`quota-cooldown:${e}`}function bx(e,t){if(ea("quota")==="off")return;let r=de();if(r)try{r.tryReserveAdmission(uu(e),kx,t)}catch{Ye.quotaStoreFailures+=1}}function vx(e){if(ea("quota")==="off")return;let t=de();if(t)try{t.releaseAdmission(uu(e),kx)}catch{Ye.quotaStoreFailures+=1}}function Rx(e,t){let r=ea("quota");if(r==="off")return null;let n=de();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:uu(e),limit:50}).find(i=>i.key===uu(e)),s=!!o;return s!==t&&(Ye.quotaVerdictDivergences+=1),r==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return Ye.quotaStoreFailures+=1,null}}function wx(){return{"keeper.storeFailures":Ye.keeperStoreFailures,"meshLease.storeFailures":Ye.meshStoreFailures,"meshLease.divergences":Ye.meshLeaseDivergences,"meshLease.enforceStaleInversions":Ye.meshEnforceStaleInversions,"quota.storeFailures":Ye.quotaStoreFailures,"quota.verdictDivergences":Ye.quotaVerdictDivergences}}var Ye,Gpe,kx,ta=p(()=>{"use strict";Xr();ps();Ye={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};Gpe=1800*1e3;kx="quota-preflight"});function Rg(e){let t=e==="--run"?"no harness run id was passed and none could be resolved":"no AgentOS workspace id was passed and none is configured",r=e==="--run"?"`kynver start` creates or reuses a run automatically and passes it to the daemon":"the daemon reads agentOsId from ~/.kynver/config.json when the flag is omitted";return[`missing ${e}: ${t}.`,`Config file: ~/.kynver/config.json (${r}).`,`Fix: run \`kynver start\` (or \`kynver bootstrap\` first on a fresh machine) to set this up automatically, or pass ${e} explicitly.`,"Diagnose: run `kynver doctor runner-install`."].join(`
142
+ `)}var ufe,dfe,pfe,ffe,wg=p(()=>{"use strict";Gr();X_();K();mg();M();Vc();hg();ta();ufe=15*6e4,dfe=2*6e4,pfe=5*6e4,ffe=30*6e4});import zV from"node:path";function XV(e){return zV.resolve(Be(e.trim()))}function fs(e,t,r){let n=e?.trim();return n?{repo:XV(n),source:t,persistedInConfig:r}:null}function Sx(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function ra(e={}){let t=e.env??process.env,r=e.config??A(),n=fs(r.defaultRepo,"config",!0);if(n)return n;let o=fs(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=fs(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||Sx(Zl({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function _x(e={}){let t=e.env??process.env,r=e.config??A(),n=fs(r.defaultRepo,"config",!0);if(n)return n;let o=fs(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=fs(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||Sx(ec({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl,home:e.home}))}function xx(e,t){let r={...t??A(),defaultRepo:Be(e),...OR(e)&&!t?.defaultBase?.trim()?{defaultBase:"main"}:{}};return Fe(r),r}function Sg(e){return{defaultRepo:Ve(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var ms=p(()=>{"use strict";K();Si();ct();Kf()});import QV from"node:path";import{homedir as ZV}from"node:os";function Cx(e){let t=A(),r=_x({...e,config:t});if(!r)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Ve(_g),resolved:null,reason:"No git checkout found. Run this command from inside the repo you want the daemon to work on, or pass `kynver setup --repo /path/to/repo` (or export KYNVER_DEFAULT_REPO). On a fresh BYOC machine, `kynver start` creates ~/.kynver/workspace automatically.",remediation:"Run `kynver start` (creates ~/.kynver/workspace), or `kynver config ensure-default-repo` from a checkout (or `kynver setup --repo /path/to/repo`)."};if(r.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:Ve(_g),resolved:Sg(r),config:Pm(t)};let n=xx(r.repo,t),o=Sg({...r,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Ve(_g),resolved:o,config:Pm(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}var _g,Ex=p(()=>{"use strict";ct();K();ms();_g=QV.join(ZV(),".kynver","config.json")});import{mkdirSync as eG,readFileSync as tG,renameSync as rG,writeFileSync as nG}from"node:fs";import{homedir as oG}from"node:os";import Ax from"node:path";function Ix(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return Ax.join(oG(),".kynver",`instruction-bundle-${t}.json`)}function Px(e,t){try{let r=Ix(e);eG(Ax.dirname(r),{recursive:!0});let n=`${r}.tmp-${process.pid}`;nG(n,JSON.stringify(t),{encoding:"utf8",mode:384}),rG(n,r)}catch{}}function Ox(e){try{let t=tG(Ix(e),"utf8"),r=JSON.parse(t);return ji(r)?r:null}catch{return null}}var Tx=p(()=>{"use strict";Jr()});function Nx(e,t=process.env){let r=os(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(r&&VS(r)===e)return r;if(e===sG&&!Gc(t))return null;let n=iG[e];return n?os(n):null}var sG,iG,Dx=p(()=>{"use strict";Jr();sG="ib-3bab6314f0ba",iG={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38","ib-49e76cb8052c":"8fc646b5c4f8f402120477452608398f035c3cddd2e7aa8bb328e97b84dcf6d8"}});import{createPublicKey as aG,verify as lG}from"node:crypto";function uG(e){return aG({key:Buffer.concat([cG,Buffer.from(e)]),format:"der",type:"spki"})}function dG(e,t){if(!ji(e))return{ok:!1,reason:"malformed signed bundle payload"};let r;try{r=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(r.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(st(e.bundle),"utf8");return lG(null,n,uG(t),r)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function Mx(e,t=process.env){if(!ji(e))return{ok:!1,reason:"malformed signed bundle payload"};let r=Nx(e.publicKeyId,t);return r?dG(e,r):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var cG,Lx=p(()=>{"use strict";Dx();Jr();cG=Buffer.from("302a300506032b6570032100","hex")});function oa(e,t){console.error(JSON.stringify({event:e,...t}))}function Bx(e,t,r){let n=Mx(e);return n.ok?(J_(n.bundle,t),t==="server"&&Px(r,e),!0):(oa("instruction_bundle_signature_invalid",{agentOsId:r,source:t,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function na(e){if(Rr.diskCacheTried)return!1;Rr.diskCacheTried=!0;let t=Ox(e);return t?Bx(t,"disk",e):!1}async function Ux(e){let t=e.nowMs??Date.now(),r=()=>({source:$t(),version:Fn(),updated:!1});if(!e.force&&t-Rr.lastAttemptAtMs<pG)return r();Rr.lastAttemptAtMs=t;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return $t()==="embedded"&&na(e.agentOsId)?{...r(),updated:!0}:r();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),fG);try{let l=Ot(o);delete l["Content-Type"],Rr.etag&&$t()==="server"&&(l["If-None-Match"]=Rr.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return r();if(c.status===404)return Rr.routeMissingLogged||(Rr.routeMissingLogged=!0,oa("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),$t()==="embedded"&&na(e.agentOsId)?{...r(),updated:!0}:r();if(!c.ok)return oa("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),$t()==="embedded"&&na(e.agentOsId)?{...r(),updated:!0}:r();let u=await c.json().catch(()=>null);return!u||!Bx(u,"server",e.agentOsId)?$t()==="embedded"&&na(e.agentOsId)?{...r(),updated:!0}:r():(Rr.etag=c.headers.get("etag"),oa("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Fn(),publicKeyId:u.publicKeyId}),{...r(),updated:!0})}catch(l){return oa("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),$t()==="embedded"&&na(e.agentOsId)?{...r(),updated:!0}:r()}finally{clearTimeout(a)}}var pG,fG,Rr,Wx=p(()=>{"use strict";ds();Tx();zr();Lx();pG=15*6e4,fG=1e4,Rr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1}});import mG from"node:os";function Fx(e,t){console.error(JSON.stringify({event:"daemon_identity",level:e,message:t}))}function $x(e=A(),t=process.env){let r=rt(t,e),n=Vo({config:e,totalMemBytes:mG.totalmem(),env:t}),o=[...r.warnings],s=[];if(!e.boxKind?.trim()&&!t.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers get boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before starting the daemon"),r.slugInferenceBlocked){let c=t.KYNVER_DAEMON_STRICT_IDENTITY==="1"||t.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as a customer box (boxKind=box), not forge/ghost";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=ar(r.boxKind,i);xi(r.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Fx("warn",c);for(let c of s)Fx("error",c);return{ok:l,box:r,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}var Kx=p(()=>{"use strict";K();Ue();Do();Mi()});import{spawnSync as gG}from"node:child_process";import{existsSync as hG,readFileSync as yG}from"node:fs";import kG from"node:path";function vG(e,t,r){let n=new Map(e.map(s=>[s.pid,s])),o=[];for(let s of t)if(!(r(s.pid)||n.has(s.pid)))for(let i of e)i.parentPid===s.pid&&(i.createdAtMs+bG<s.startedAtMs||o.push({workerName:s.workerName,workerPid:s.pid,orphanPid:i.pid}));return o}function RG(e){let t=e.trim();if(!t)return[];let r=JSON.parse(t),n=Array.isArray(r)?r:[r],o=[];for(let s of n){let i=Number(s.ProcessId),a=Number(s.ParentProcessId),l=Date.parse(String(s.Created??""));Number.isInteger(i)&&Number.isInteger(a)&&Number.isFinite(l)&&o.push({pid:i,parentPid:a,createdAtMs:l})}return o}function wG(e){let t=e.filter(s=>Number.isInteger(s)&&s>0);if(t.length===0)return[];let n=`Get-CimInstance Win32_Process -Filter "${t.map(s=>`ParentProcessId=${s}`).join(" OR ")}" | Select-Object ProcessId,ParentProcessId,@{n='Created';e={$_.CreationDate.ToUniversalTime().ToString('o')}} | ConvertTo-Json -Compress`,o=gG("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:3e4});if(o.status!==0)return[];try{return RG(o.stdout??"")}catch{return[]}}function SG(e,t=oe){try{let r=xe().find(o=>o.id===e);if(!r)return[];let n=[];for(let o of Object.keys(r.workers||{})){let s=kG.join(q(r.id),"workers",L(o),"worker.json");if(!hG(s))continue;let i=JSON.parse(yG(s,"utf8")),a=Date.parse(i.startedAt??"");!i.pid||!Number.isFinite(a)||t(i.pid)||n.push({workerName:o,pid:i.pid,startedAtMs:a})}return n}catch{return[]}}function Hx(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return{checkedWorkers:0,killed:[]};let n=t.isAlive??oe,o=(t.collect??(l=>SG(l,n)))(e);if(o.length===0)return{checkedWorkers:0,killed:[]};let s=(t.query??wG)(o.map(l=>l.pid)),i=t.killTree??he,a=vG(s,o,n).map(l=>({...l,result:i(l.orphanPid,"SIGKILL")}));return{checkedWorkers:o.length,killed:a}}var bG,jx=p(()=>{"use strict";Q();M();ki();bG=5e3});import{mkdirSync as _G,readFileSync as xG,renameSync as CG,writeFileSync as EG}from"node:fs";import{homedir as AG}from"node:os";import du from"node:path";function Vx(){return du.join(AG(),".kynver")}function IG(e=Vx()){return du.join(e,"doctor-native-windows.json")}function Gx(e=Vx()){return du.join(e,"native-windows-state.json")}function PG(e,t){_G(du.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;EG(r,`${JSON.stringify(t,null,2)}
143
+ `,{mode:384}),CG(r,e)}function Cg(e){try{return JSON.parse(xG(e,"utf8"))}catch{return null}}function OG(e){let t=Cg(IG(e));return!t||typeof t.checkedAt!="string"||typeof t.verdict!="string"?null:{checkedAt:t.checkedAt,runtimeVersion:typeof t.runtimeVersion=="string"?t.runtimeVersion:"unknown",verdict:t.verdict,failing:Array.isArray(t.failing)?t.failing.filter(r=>typeof r=="string"):[],warnings:Array.isArray(t.warnings)?t.warnings.filter(r=>typeof r=="string"):[],providers:t.providers&&typeof t.providers=="object"?Object.fromEntries(Object.entries(t.providers).filter(r=>typeof r[1]=="string")):{},orphanedProcesses:typeof t.orphanedProcesses=="number"?t.orphanedProcesses:0}}function Jx(e=new Date,t){try{let r=Gx(t),n=Cg(r)??{};PG(r,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function TG(e){let t=Cg(Gx(e));return typeof t?.lastWorkerCompletedAt=="string"?t.lastWorkerCompletedAt:null}function Yx(e){xg=e.admission,qx=e.ownerKind}function zx(e={}){let t=e.platform??process.platform,r=e.hostKind??gm(),n=r==="win32";return{hostKind:r,wsl:r==="wsl",platform:t,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:qe,ownerKind:qx,nativeWindows:n?{admission:xg?.basis??null,hostCapability:xg?.hostCapability??null,lastDoctor:OG(e.root),lastWorkerCompletedAt:TG(e.root)}:null}}var xg,qx,pu=p(()=>{"use strict";Ec();Yr();xg=null,qx=null});function NG(e){return typeof e=="string"&&Xx.includes(e)}function DG(e,t){let r=e[t]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function LG(e={}){let t=e.platform??process.platform,r=e.env??process.env;return e.hostCapability!==void 0&&!NG(e.hostCapability)?{allowed:!1,reason:"invalid_host_capability",remedy:"hostCapability must be one of: "+Xx.join(", ")}:t!=="win32"?{allowed:!0,basis:"not_native_windows",hostCapability:e.hostCapability??null}:e.hostCapability?{allowed:!0,basis:"host_capability",hostCapability:e.hostCapability}:DG(r,Eg)?{allowed:!0,basis:"experimental_env_override",hostCapability:null}:{allowed:!1,reason:"native_windows_unqualified",remedy:MG}}function Ag(e={}){let t=LG(e);return t.allowed?(t.basis==="experimental_env_override"&&console.error(JSON.stringify({event:"daemon_native_windows_experimental",override:Eg,note:"Native Windows is not yet qualified for this runtime release; WSL remains the supported path."})),t):(console.error(JSON.stringify({event:"daemon_start_blocked",reason:t.reason,remedy:t.remedy})),process.exit(1),t)}var Xx,Eg,MG,Ig=p(()=>{"use strict";Xx=["desktop-supervised","native-windows-qualified"],Eg="KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS";MG=`Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set ${Eg}=1 for the experimental native path (not yet qualified; \`kynver doctor runner-install\` reports the host).`});function BG(e){return e.replace(/\/+$/,"")}async function Qx(e){let t=e.fetchFn??fetch,r=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${BG(e.baseUrl)}${r}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await t(n,{method:"POST",headers:Ot(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a,url:n}}var Zx=p(()=>{"use strict";ds()});import{closeSync as UG,existsSync as Pg,openSync as WG,readFileSync as FG,unlinkSync as eC,writeFileSync as $G}from"node:fs";function tC(e){if(!Pg(e))return null;try{let t=JSON.parse(FG(e,"utf8"));if(typeof t.pid=="number"&&typeof t.at=="string")return t}catch{return null}return null}function HG(e){let t=tC(e);if(!t||!oe(t.pid))return!0;let r=Date.parse(t.at);return Number.isNaN(r)?!0:Date.now()-r>KG}function rC(e){if(Pg(e)&&!HG(e)){let t=tC(e);return{acquired:!1,reason:t?`held by pid ${t.pid}`:"held by another process"}}if(Pg(e))try{eC(e)}catch{}try{let t=WG(e,"wx");return $G(t,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),UG(t),{acquired:!0}}catch(t){if(t.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw t}}function nC(e){try{eC(e)}catch{}}var KG,oC=p(()=>{"use strict";M();KG=10*6e4});function VG(e){return jG.test(e.trim())}function GG(e,t,r){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=t;d<=r;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=t;d<=r;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(t,Number(c[1])),f=Math.min(r,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=t&&u<=r&&n.add(u)}return n}function sa(e,t,r,n){let o=e.trim();return o==="*"?!0:GG(o,r,n).has(t)}function JG(e,t){let r=e.trim().split(/\s+/);if(r.length!==5)return!1;let[n,o,s,i,a]=r;return sa(n,t.getUTCMinutes(),0,59)&&sa(o,t.getUTCHours(),0,23)&&sa(s,t.getUTCDate(),1,31)&&sa(i,t.getUTCMonth()+1,1,12)&&sa(a,t.getUTCDay(),0,6)}function YG(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function sC(e,t){if(!VG(e))return null;let r=YG(t);r=new Date(r.getTime()+6e4);for(let n=0;n<qG;n++){if(JG(e,r))return r;r=new Date(r.getTime()+6e4)}return null}function iC(e,t){if(e.scheduleKind==="runAt"&&e.runAt){let r=Date.parse(e.runAt);return Number.isNaN(r)?null:new Date(r).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let r=sC(e.cron.trim(),t);return r?r.toISOString():null}return null}function Og(e,t){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let r=sC(e.cron.trim(),t);return r?r.toISOString():null}var jG,qG,aC=p(()=>{"use strict";jG=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;qG=366*24*60});import{randomBytes as zG}from"node:crypto";import{promises as ia}from"node:fs";import XG from"node:path";async function QG(e){try{return await ia.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function ZG(e){if(!e)return{...fu,jobs:{...fu.jobs}};try{let t=JSON.parse(e);return t?.version!==1||typeof t.jobs!="object"||!t.jobs?{...fu,jobs:{}}:t}catch{return{...fu,jobs:{}}}}async function Tg(e){let t=await QG(e);return ZG(t)}async function eJ(e,t){await ia.mkdir(XG.dirname(e),{recursive:!0});let r=zG(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${r}`;await ia.writeFile(n,`${JSON.stringify(t,null,2)}
144
+ `,"utf8");try{await ia.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await ia.unlink(n).catch(()=>{})}}async function lC(e,t){await eJ(e,t)}function cC(e,t){let r=e.jobs[t];if(r)return r;let n={providerScheduleId:t,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[t]=n,n}var fu,Ng=p(()=>{"use strict";fu={version:1,jobs:{}}});function tJ(e,t){if(!e.inflightUntil)return!1;let r=Date.parse(e.inflightUntil);return!Number.isNaN(r)&&r>t}function rJ(e){return!!e.completedAt}function nJ(e,t,r,n){if(t.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&t.consecutiveFailures>r.maxRetries)return!1;if(!t.lastAttemptAt)return!0;let o=Date.parse(t.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=r.retryBackoffMs}function oJ(e,t,r){if(t.nextFireAt)return t.nextFireAt;let n=iC(e.spec,r);return t.nextFireAt=n,n}function sJ(e,t,r,n){if(e.paused||rJ(t)||tJ(t,r)||!nJ(e,t,n,r))return!1;let o=t.nextFireAt?Date.parse(t.nextFireAt):NaN;return Number.isNaN(o)?!1:r>=o}function iJ(e,t,r){e.spec.scheduleKind==="cron"&&(t.nextFireAt=Og(e.spec,r))}async function Dg(e={}){let t=e.env??is(),r=e.now??new Date,n=r.getTime(),o=e.agentOsIdFilter?Ne(e.agentOsIdFilter):Ne();if(!t.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!t.fireBaseUrl||!t.secret&&!o)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let s=rC(t.lockPath);if(!s.acquired)return{enabled:!0,skipped:s.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let i=await nu(t.storePath),a=e.agentOsIdFilter?i.filter(h=>h.spec.target.agentOsId===e.agentOsIdFilter):i,l=await Tg(t.statePath),c=[];for(let h of a){let y=cC(l,h.providerScheduleId);oJ(h,y,r),sJ(h,y,n,t)&&c.push({entry:h,job:y})}c.sort((h,y)=>{let b=Date.parse(h.job.nextFireAt??"")||0,k=Date.parse(y.job.nextFireAt??"")||0;return b-k});let u=0,d=0,f=0,m=t.maxCatchUpPerTick,g=[];for(let{entry:h,job:y}of c){if(t.missedRunPolicy==="skip"&&h.spec.scheduleKind==="cron"){let b=Date.parse(y.nextFireAt??"");if(!Number.isNaN(b)&&b<n-t.tickIntervalMs*2){y.nextFireAt=Og(h.spec,r),f++;continue}}if(m<=0){f++;continue}y.inflightUntil=new Date(n+t.inflightLeaseMs).toISOString(),y.lastAttemptAt=r.toISOString(),iJ(h,y,r);try{let b=Ne(h.spec.target.agentOsId)||t.secret;if(!b){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:"missing_fire_credentials"});continue}let k=await Qx({entry:h,baseUrl:t.fireBaseUrl,secret:b,fetchFn:e.fetchFn});y.inflightUntil=null,k.ok?(y.lastFiredAt=r.toISOString(),y.consecutiveFailures=0,h.spec.scheduleKind==="runAt"&&(y.completedAt=r.toISOString(),y.nextFireAt=null),u++,m--):(y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(b){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:b instanceof Error?b.message:String(b)})}}return await lC(t.statePath,l),{enabled:!0,scanned:a.length,due:c.length,fired:u,skippedJobs:f,errors:d,...g.length?{errorDetails:g}:{}}}finally{nC(t.lockPath)}}var Mg=p(()=>{"use strict";hr();Zx();oC();K();aC();as();Ng()});import uC from"node:path";function mu(e){let t=$(uC.join(q(e),dC),null);return yx(e,t)??t}function pC(e,t){let r={...t,updatedAt:new Date().toISOString()};Re(uC.join(q(e),dC),r),hx(e,r)}function fC(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.response;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t.meshLiveness;if(!r||typeof r!="object"||Array.isArray(r))return null;let n=r.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}var dC,Lg=p(()=>{"use strict";M();Q();ta();dC="mesh-cron-lease.json"});function hC(e){aa=e}function yC(e=Date.now()){return!aa||aa.stallCount===mC&&e-gC<9e5?null:(mC=aa.stallCount,gC=e,aa)}var aa,mC,gC,Bg=p(()=>{"use strict";aa=null,mC=-1,gC=0});function bC(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let t=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(t)&&t>0?Math.floor(t):3e4}function kC(e){return new Error(`callback timeout after ${e}ms`)}async function vC(e,t){let r=bC(t),n=new AbortController,o,s=!1;try{return await Promise.race([e(n.signal),new Promise((i,a)=>{o=setTimeout(()=>{s=!0,n.abort(),a(kC(r))},r)})])}catch(i){throw s?kC(r):i}finally{o&&clearTimeout(o)}}function RC(e,t){let r=bC(t);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:r}}}async function $n(e,t,r,n){try{return await vC(async o=>{let s=await pt(e,{method:"POST",headers:Ot(t),body:JSON.stringify(r),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return RC(o,n?.timeoutMs)}}async function fe(e,t,r,n){let o=await $n(e,t,r,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await WS(t,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await $n(e,s.token,r,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ug(e,t,r){try{return await vC(async n=>{let o=await pt(e,{method:"GET",headers:Ot(t),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},r?.timeoutMs)}catch(n){return RC(n,r?.timeoutMs)}}var Ke=p(()=>{"use strict";ds();ir();K()});function wC(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}var SC=p(()=>{"use strict"});function la(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function _C(e){if(!e||typeof e!="object")return!1;let t=e;if(t.timeout===!0||t.timeoutMs!==void 0)return!0;let r=t.error;if(typeof r!="string"||!r.trim())return!1;let n=r.toLowerCase();return n.includes("abort")||n.includes("timeout")}function Wg(e){if(!e||typeof e!="object")return!1;let t=e;return t.timeout===!0?!0:(typeof t.error=="string"?t.error.toLowerCase():"").includes("timeout")}var xC=p(()=>{"use strict"});function cJ(e){return aJ.includes(e)}function uJ(e){return lJ.includes(e)}function CC(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||cJ(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:uJ(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}function pJ(e){if(!e)return null;let t=e.trim().toLowerCase(),r=dJ.get(t)??null,n=q_(t);if(!n)return r;let o=CC(n);return r?{...o,dispatchLane:r.dispatchLane,defaultRoleLane:r.defaultRoleLane}:o}function Fg(e){return pJ(e)?.defaultRoleLane??null}function AC(){return EC.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}var aJ,lJ,EC,dJ,gu=p(()=>{"use strict";ug();zr();aJ=["implementation","review","landing"],lJ=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];EC=ls.personas.map(CC),dJ=new Map(EC.map(e=>[e.slug,e]))});function IC(e){return(e??"").trim().toLowerCase()}function fJ(e){switch(IC(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function mJ(e){let t=IC(e);if(!t)return;if(t==="implementation"||t==="review"||t==="landing"||t==="any")return t;let r=fJ(t);if(r)return r;if(t==="implement"||t==="repair"||t==="coding")return"implementation";if(t==="land"||t==="merge")return"landing"}function PC(e){return mJ(e)??"any"}var OC=p(()=>{"use strict";gu()});function gJ(e=process.env){let t=A();return Ct(t,e)!=="forge"}function hu(e,t=process.env){if(gJ(t))return e?.maxConcurrentWorkers??void 0}async function yu(e,t){let r=me(t.baseUrl?String(t.baseUrl):void 0),n=await ye(t.secret?String(t.secret):void 0,e,{baseUrl:r}),o=`${r}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Ug(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}var $g=p(()=>{"use strict";Ke();K();Ue()});async function TC(e,t=hJ){let r=await t.fetchPreferences(e.agentOsId,e.args),n=t.configuredOverride(r,e.env);return t.observe({runId:e.runId,configuredMaxWorkersOverride:n})}var hJ,NC=p(()=>{"use strict";$g();jo();hJ={fetchPreferences:yu,configuredOverride:hu,observe:Di}});function ku(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Kg(e){return e.toLowerCase()}function yJ(e){let t=ku(e,"roleLane");if(t)return t;let r=Kg(ku(e,"executorRef")),n=Kg(ku(e,"title")),o=Kg(ku(e,"personaSlug")),s=`${r} ${n}`;if(s.includes("deep review")||s.includes("security review")||r.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||r.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||r.includes("repair"))return"repair_implementer";if(r.includes("cursor")||r.includes("codex")||r.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=Fg(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function DC(e){let t=yJ(e);return t?{...e,roleLane:t}:e}var MC=p(()=>{"use strict";gu()});function LC(e){let t=e.trim();return kJ.test(t)||bJ.test(t)}function BC(e){let t=e.trim().toLowerCase();return t.startsWith("gpt-")||t.startsWith("gpt5")||t.includes("codex")}function Hg(e){let t=e.trim().toLowerCase();return t.includes("composer")||t.includes("cursor")}function UC(e){return e.trim().toLowerCase().startsWith("gemini-")}function vJ(e){return BC(e)?"codex":LC(e)?"claude":UC(e)?"gemini":(Hg(e),"cursor")}function RJ(e){if(!e.startsWith("provider:"))return null;let t=e.slice(9),r=t.indexOf(":"),n=(r>=0?t.slice(0,r):t).trim().toLowerCase(),o=r>=0&&t.slice(r+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function wJ(e){if(!e.startsWith("harness-lane:"))return null;let t=e.split(":").map(o=>o.trim()).filter(Boolean);if(t.length<2)return null;let r=t[1],n=t.slice(2).join(":");return n?LC(n)||BC(n)||Hg(n)||UC(n)?{lane:r,model:n,provider:vJ(n),rule:"executor_ref:harness_lane_model"}:{lane:r,rule:"executor_ref:harness_lane"}:{lane:r,rule:"executor_ref:harness_lane"}}function gt(e){let t=typeof e=="string"?e.trim():"";return t?RJ(t)??wJ(t):null}function WC(e){let t=gt(e);return t?!!(t.provider&&t.provider!=="cursor"||t.model&&!Hg(t.model)):!1}var kJ,bJ,bu=p(()=>{"use strict";kJ=/^claude[-_]/i,bJ=/^(?:opus|sonnet|haiku)\b/i});function ca(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function wr(e){if(!e?.trim())return!1;let t=e.trim().toLowerCase();return SJ.has(t)?!0:t.includes("claude")||t.includes("opus")}function vu(e){if(!e)return!1;let t=e.workerProviderOverride;if(typeof t=="string"&&wr(t))return!0;let r=ca(e,"executorRef").toLowerCase();if(r==="provider:claude"||r.startsWith("provider:claude:")||r.includes("claude-worker-override")||r.includes("operator-claude"))return!0;let n=gt(ca(e,"executorRef"));if(n?.provider&&wr(n.provider)||n?.model&&wr(xJ(n.model)))return!0;let o=ca(e,"description");if(_J.some(i=>i.test(o)))return!0;let s=ca(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function xJ(e){let t=e.trim().toLowerCase();return/^claude[-_]/.test(t)||/^(?:opus|sonnet|haiku)\b/.test(t)?"claude":t}function CJ(e,t){return{provider:Sr,model:Ru,rule:`policy:cursor_default${t}`,requestedModel:e}}function AJ(e){return EJ.some(t=>e.startsWith(t))}function jg(e){if(!e)return!1;let t=e.workerProviderOverride;return typeof t=="string"&&t.trim()||gt(ca(e,"executorRef"))?.provider?!0:vu(e)}function FC(e){let{routing:t,task:r}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&wr(n))return{...t,provider:"claude",rule:t.rule.startsWith("explicit:")?t.rule:"explicit:operator_provider"};if(n||AJ(t.rule)||jg(r)||!wr(t.provider))return t;let o=t.rule&&t.rule!=="default:global"?`:${t.rule.replace(/:/g,"_")}`:"";return CJ(t.model,o)}function $C(e,t=Sr){let r=e?.trim();return r?Ge(r):t}var Sr,SJ,_J,EJ,Kn=p(()=>{"use strict";bu();wu();Fi();Fi();Sr="cursor",SJ=new Set(["claude","opus","anthropic"]),_J=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];EJ=["explicit:","executor_ref:","factory:","task:"]});function gs(e){return KC[e]}function HC(){return Object.values(KC)}var KC,Vg=p(()=>{"use strict";KC={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1,workerMcpTools:"supported"},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0,workerMcpTools:"supported"}}});import{existsSync as GC,readFileSync as IJ}from"node:fs";import Hn from"node:path";function OJ(e){return e.includes("/")||e.includes("\\")}function TJ(e){return(e.PATHEXT||PJ).split(";").map(t=>t.trim().toLowerCase()).filter(t=>t.startsWith("."))}function NJ(e){let t=Object.keys(e).find(r=>r.toUpperCase()==="PATH");return t?e[t]??"":""}function DJ(e,t={}){let r=t.env??process.env,n=t.exists??GC,o=TJ(r),s=Hn.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(OJ(e)||Hn.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of NJ(r).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(Hn.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function VC(e){return e.replace(/^[\\/]+/,"")}function LJ(e){let t=e.split(/\r?\n/),r=new Map;for(let s of t){let i=MJ.exec(s);i&&r.set(i[1].toUpperCase(),i[2])}let n=t.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=jC.exec(n);if(o)return VC(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=r.get(s[1].toUpperCase()),a=i?jC.exec(i):null;if(a)return VC(a[1])}return null}function BJ(e,t={}){if((t.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=DJ(e,t);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=Hn.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=t.readText??(m=>IJ(m,"utf8")),i=t.exists??GC,a;try{a=s(n)}catch{throw new ua(n)}let l=LJ(a);if(!l)throw new ua(n);let c=Hn.win32.dirname(n),u=Hn.win32.join(c,l);if(!i(u))throw new ua(n);let d=Hn.win32.join(c,"node.exe");return{executable:i(d)?d:t.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function le(e,t,r={}){let n=BJ(e,r);return[n.executable,[...n.prefixArgs,...t]]}var ua,PJ,jC,MJ,ze=p(()=>{"use strict";ua=class extends Error{constructor(r){super(`${r} is a batch file that is not a Node CLI shim; it cannot be spawned without a shell. Point the matching KYNVER_*_BIN setting at the real .exe or the CLI's JS entry, or run the daemon inside WSL.`);this.shimPath=r;this.name="UnresolvableWindowsShimError"}shimPath},PJ=".COM;.EXE;.BAT;.CMD";jC=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,MJ=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});import{createHash as JC}from"node:crypto";import{statSync as UJ}from"node:fs";import{spawnSync as qC}from"node:child_process";function Kt(e){try{let t=UJ(e),r=`${e}|${t.size}|${t.mtimeMs}`;return JC("sha256").update(r).digest("hex").slice(0,16)}catch{return}}function hs(e){return JC("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function ht(e,t){for(let r of t){let n=process.env[r]?.trim();if(n)return n}return e}function Nt(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=le(e,t),i=qC(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...r.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:r.okNote??`${e} ${t.join(" ")}: ok`};let a=(i.stderr||i.stdout||"").trim(),l=r.failPrefix??`${e} ${t.join(" ")} failed`;return{ok:!1,note:a?`${l}: ${a.slice(0,200)}`:l}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Su(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=le(e,t);return qC(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:r.okNote??`${e} authenticated`}:{ok:!1,note:r.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var jn=p(()=>{"use strict";ze()});import{existsSync as WJ}from"node:fs";import{homedir as FJ}from"node:os";import da from"node:path";function KJ(){let e=FJ();return[process.env.CODEX_HOME?.trim()?da.join(da.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,da.join(e,".codex","auth.json"),da.join(e,".config","codex","auth.json")].filter(r=>!!r)}function HJ(e){return da.dirname(e)}function jJ(e){let t,r;for(let n of KJ()){if(!WJ(n))continue;t??=n;let o=Nt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:HJ(n)}});if(r??=o,o.ok)return{authPath:n,login:o}}return{authPath:t,login:r??Nt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function YC(e=new Date().toISOString()){let t=ht($J,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:hs("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:r,login:n}=jJ(t),o=!!r&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:r?Kt(r):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,r?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}var $J,zC=p(()=>{"use strict";jn();$J="codex"});import{existsSync as VJ}from"node:fs";import{homedir as GJ}from"node:os";import Gg from"node:path";function JJ(){let e=process.env.HERMES_HOME?.trim(),t=e?Gg.resolve(e):Gg.join(GJ(),".hermes");return Gg.join(t,"auth.json")}function _u(e=new Date().toISOString()){let t=ht("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Nt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=JJ(),o=VJ(n),s=Su(t,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=r.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?Kt(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[r.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}var Jg=p(()=>{"use strict";jn()});function ys(e=new Date().toISOString()){let t=YC(e);if(t.ready)return{...t,path:"codex_cli"};let r=_u(e);return r.ready?{providerId:"codex",ready:!0,authSource:r.authSource,sessionFingerprint:r.sessionFingerprint,checkedAt:r.checkedAt,note:r.note,path:"hermes_openai_codex",hermesOpenAiCodex:r}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:r,note:[t.note,r.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var xu=p(()=>{"use strict";zC();Jg()});function ZC(e,t){let r=gs(e);return t==="privileged"?r.supportsPrivilegedPlatformActions:t==="low"?r.supportsLowRiskOrchestration:!0}function qJ(e,t){let r=gs(e.providerId),n=gs(t.providerId),o=XC.indexOf(r.costTier)-XC.indexOf(n.costTier);if(o!==0)return o;let s=QC[e.binding.authSource]-QC[t.binding.authSource];return s!==0?s:e.providerId.localeCompare(t.providerId)}function qg(e){let t=HC().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&ZC(a.providerId,e.riskClass));if(t.length===0)return null;let n=[...t].sort(qJ)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return ZC(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}var XC,QC,eE=p(()=>{"use strict";Vg();XC=["low","medium","high"],QC={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3}});import{existsSync as YJ}from"node:fs";import{homedir as zJ}from"node:os";import XJ from"node:path";function ZJ(){let e=zJ();return[XJ.join(e,".claude",".credentials.json")]}function tE(e=new Date().toISOString()){let t=ht(QJ,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:hs("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `claude` CLI login (OAuth) for harness workers"};let r=Nt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=ZJ().find(i=>YJ(i)),o=Su(t,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=r.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?Kt(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[r.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}var QJ,rE=p(()=>{"use strict";jn();QJ="claude"});function yt(e,t={}){let r=vi(e);if(!t.reviewWorker)return r;let n={...r,[e2]:"1"};for(let o of t2)delete n[o];return n}var e2,t2,Vn=p(()=>{"use strict";Ri();e2="KYNVER_NO_PROD_DB_CREDENTIALS",t2=["KYNVER_ENV_FILE"]});function nE(e){return e.replace(r2,"")}function Cu(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function n2(e){let t=e.trim().toLowerCase();return t.startsWith("gemini-")||t==="auto"||t==="pro"||t==="flash"||t==="flash-lite"}function s2(e){let t=e.trim().toLowerCase();return o2.has(t)?"auto":null}function Yg(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=nE(r).trim()||t;return oE.test(o)||!Cu(o)&&o!==t?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==r?{ok:!0,model:o,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function ks(e,t){let r=(e??"").trim();return r?Cu(r)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:r,normalized:!1}:{ok:!0,model:t,normalized:!1}}function zg(e,t){let r=(e??"").trim();if(r)return{ok:!0,model:r,normalized:!1};let n=(t??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function bs(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=nE(r).trim()||t;return Cu(o)||!n2(o)&&oE.test(o)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is not a Gemini model \u2014 the gemini / gemini-api providers drive Google Gemini (got "${o}"). Pick a gemini-* model or an alias (auto, pro, flash, flash-lite), or switch the worker provider.`}:o!==r?{ok:!0,model:o,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${o}"`}:{ok:!0,model:o,normalized:!1}}function vs(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let n=s2(r);return n?{ok:!0,model:n,normalized:!0,requested:r,note:`normalized model "${r}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Cu(r)?{ok:!1,model:r,normalized:!1,requested:r,note:`model "${r}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:r,normalized:!1}}var r2,oE,o2,Ht=p(()=>{"use strict";r2=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;oE=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;o2=new Set(["cursor"])});import{existsSync as pa,readdirSync as i2}from"node:fs";import Gn from"node:path";function l2(e){let r=e.split("-")[0].split(".");if(r.length!==3)return null;let[n,o,s]=r;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function c2(e){let t=Gn.join(e,"versions");if(!pa(t))return null;let r=null,n=-1;for(let o of i2(t,{withFileTypes:!0})){if(!o.isDirectory()||!a2.test(o.name))continue;let s=l2(o.name);s==null||s<=n||(n=s,r=Gn.join(t,o.name))}return r}function Eu(e){let t=e?.trim()||Gn.join(process.env.LOCALAPPDATA||"","cursor-agent"),r=Gn.join(t,"node.exe"),n=Gn.join(t,"index.js");if(pa(r)&&pa(n))return{nodeExe:r,indexJs:n,versionDir:t};let o=c2(t);if(!o)return null;let s=Gn.join(o,"node.exe"),i=Gn.join(o,"index.js");return!pa(s)||!pa(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var a2,sE=p(()=>{"use strict";a2=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i});import{closeSync as Qg,existsSync as lE,mkdirSync as u2,openSync as Zg,statSync as d2,unlinkSync as iE}from"node:fs";import{spawn as p2}from"node:child_process";import f2 from"node:os";import jt from"node:path";function y2(e,t,r){return{executable:e,prefixArgs:[t],shell:!1,detached:Se(),bundledVersionDir:r}}function fa(e){if(process.platform==="win32"){let t=/\.(cmd|bat)$/i.test(e),r=/node\.exe$/i.test(e)&&lE(jt.join(jt.dirname(e),"index.js"));if(t||r||e==="agent"){let o=t?Eu(jt.dirname(e)):r?{nodeExe:e,indexJs:jt.join(jt.dirname(e),"index.js"),versionDir:jt.dirname(e)}:Eu();if(o)return y2(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:Se()}}function k2(e,t,r){return yt({...process.env,CI:"1",NO_COLOR:"1",...t.bundledVersionDir?{CURSOR_INVOKED_AS:jt.basename(e)||"agent.cmd"}:{}},{reviewWorker:r})}function cE(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function eh(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function b2(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||jt.join(f2.homedir(),".kynver","locks");return u2(e,{recursive:!0}),jt.join(e,"cursor-agent-start.lock")}function v2(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=b2(),t=eh("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",g2),r=eh("KYNVER_CURSOR_START_LOCK_STALE_MS",h2),n=Date.now();for(;;)try{let o=Zg(e,"wx");return Qg(o),()=>{try{iE(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-d2(e).mtimeMs>r){iE(e);continue}}catch{continue}if(Date.now()-n>t)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);cE(250)}}function Jn(e=process.env){let t=e.KYNVER_CURSOR_AGENT_BIN?.trim()||e.CURSOR_AGENT_BIN?.trim();if(t)return t;if(process.platform==="win32"){let r=Eu(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let n=jt.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(lE(n))return n}return"agent"}function R2(){return Jn(process.env)}function aE(e,t,r=[]){return[...r,"-p",...e.executionMode==="read_only"?["--mode","plan"]:["--force"],...e.mcpConfigPath?["--approve-mcps"]:[],"--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt]}var Xg,m2,g2,h2,uE,Rs=p(()=>{"use strict";cr();M();Vn();Ht();sE();Xg="composer-2.5",m2=15e3,g2=6e4,h2=3e4;uE={name:"cursor",defaultModel:Xg,preflightModel(e){return vs(e,Xg)},start(e){let t=vs(e.model,Xg);if(!t.ok)throw new Error(`cursor provider model preflight failed: ${t.note}`);let r=t.model,n=Zg(e.stdoutPath,"a"),o=Zg(e.stderrPath,"a"),s=["ignore",n,o],i=R2(),a=fa(i),l=v2(),c;try{let[u,d]=a.shell?[a.executable,aE(e,r,a.prefixArgs)]:nt(a.executable,aE(e,r,a.prefixArgs),e.workerDir);c=p2(u,d,Z({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:k2(i,a,e.reviewWorker)})),cE(eh("KYNVER_CURSOR_START_LOCK_HOLD_MS",m2))}finally{l(),Qg(n),Qg(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:r}}}});import{spawnSync as w2}from"node:child_process";function Au(e,t=process.env){try{let r;try{r=fa(e)}catch{r={executable:e,prefixArgs:[]}}let n=w2(r.executable,[...r.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...t,CI:"1",NO_COLOR:"1"}});if(n.status!==0)return{ok:!1,note:"agent status: not authenticated"};let o=(n.stdout||"").trim();if(!o)return{ok:!1,note:"agent status: empty response"};let s;try{s=JSON.parse(o)}catch{return{ok:!1,note:"agent status: unparseable response"}}return typeof s=="object"&&s!==null&&s.isAuthenticated===!0?{ok:!0,note:"agent status: authenticated"}:{ok:!1,note:"agent status: not authenticated"}}catch(r){return{ok:!1,note:r instanceof Error?r.message:"agent status probe failed"}}}var th=p(()=>{"use strict";ws();Rs()});import{existsSync as dE}from"node:fs";import{homedir as S2}from"node:os";import qn from"node:path";import{spawnSync as _2}from"node:child_process";function x2(e){if(qn.isAbsolute(e)||e.includes("/")||e.includes("\\"))return dE(e);try{let t=_2(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function Iu(e=process.env){let t=[],r=e.KYNVER_CURSOR_AUTH_HOME?.trim();r&&(t.push(qn.join(r,".config","cursor","auth.json")),t.push(qn.join(r,".cursor-agent","auth.json")));let n=S2();if(t.push(qn.join(n,".config","cursor","auth.json")),t.push(qn.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&t.push(qn.join(o,"cursor-agent","auth.json")),s&&t.push(qn.join(s,"cursor","auth.json"))}return t}function pE(e){return`${e.error}: ${e.detail}`}function Ou(e=process.env){let t=Jn(e);return x2(t)?e.CURSOR_API_KEY?.trim()?{ok:!0,creds:{agentBin:t,authSource:"api_key_env"}}:Iu(e).find(n=>dE(n))?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:Au(t,e).ok?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:{ok:!1,error:rh,detail:"Run `agent login` on this computer, or set CURSOR_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Pu,detail:"`agent` CLI not found. Install the Cursor Agent CLI (https://cursor.com/docs/cli/headless) and keep it on PATH."}}var Pu,rh,ws=p(()=>{"use strict";Rs();th();Pu="cursor_cli_unavailable",rh="cursor_not_logged_in"});import{existsSync as C2}from"node:fs";function fE(e=new Date().toISOString()){let t=ht(E2,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:hs("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present but scrubbed from worker env (deployment secret) \u2014 use `agent login` (OAuth) for harness workers"};let r=Nt(t,["-v"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Iu().find(a=>C2(a)),o=Au(t),s=!!n||o.ok,i=r.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?Kt(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[r.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}var E2,mE=p(()=>{"use strict";ws();th();jn();E2="agent"});import{existsSync as A2,readFileSync as I2}from"node:fs";import{homedir as P2}from"node:os";import nh from"node:path";function T2(){let e=process.env.HERMES_HOME?.trim(),t=e?nh.resolve(e):nh.join(P2(),".hermes");return nh.join(t,".env")}function N2(e){try{let t=I2(e,"utf8"),r=[];for(let n of O2)new RegExp(`^${n}=`,"m").test(t)&&r.push(n);return r}catch{return[]}}function gE(e=new Date().toISOString()){let t=ht("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Nt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=T2(),o=A2(n),s=o?N2(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=r.ok&&o;return{adapterId:"hermes",cliAvailable:r.ok,profileBound:o,authSource:a,sessionFingerprint:o?Kt(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[r.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}var O2,hE=p(()=>{"use strict";jn();O2=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"]});function yE(e={}){let t=e.nowIso?.()??new Date().toISOString(),r=ys(t),n={codex:r,cursor:fE(t),claude:tE(t)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:t,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},workerEndpoint:{baseUrlConfigured:!!process.env.KYNVER_WORKER_BASE_URL?.trim(),apiKeyConfigured:!!process.env.KYNVER_WORKER_API_KEY?.trim()},hermes:gE(t),hermesOpenAiCodex:_u(t),codexAdapterPath:r.path,readyCount:o}}var kE=p(()=>{"use strict";rE();xu();mE();hE();Jg()});function oh(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function L2(e){let t=oh(e,"executorRef").toLowerCase(),r=oh(e,"title").toLowerCase(),n=oh(e,"description").toLowerCase(),o=`${t}
145
145
  ${r}
146
- ${n}`;return VJ.some(s=>s.test(o))?"privileged":t.includes("provider:claude")||t.includes("deep_review")||t.includes("security")||t.includes("landing")||t.includes("review")||r.startsWith("land:")||t.includes("implementer")||t.includes("repair")||r.includes("implement")?"elevated":GJ.some(s=>s.test(o))?"low":"elevated"}function qJ(e){let t=ds(e.provider),r=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${t.displayName} (${t.costTier} tier)`:`${t.displayName} selected for ${e.riskClass} orchestration (${t.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:t.costTier,riskClass:e.riskClass,costRationale:r,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function YJ(e){let t=e.inventory??UC();return e.codexBinding?{...t,bindings:{...t.bindings,codex:e.codexBinding}}:t}function jn(e){let t=qJ({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:t.routingRule,audit:t}}function KC(e){let t=e.task??{},r=JJ(t),n=YJ({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:fs())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=wr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=xg({inventory:n,riskClass:r});return jn(u?{providerId:u.providerId,binding:u.binding,riskClass:r,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:r,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return jn({providerId:"codex",binding:c,riskClass:r,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return jn({providerId:"cursor",binding:c,riskClass:r,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return jn({providerId:"claude",binding:c,riskClass:r,routingRule:"orchestration:explicit_claude",model:s})}let a=xg({inventory:n,riskClass:r});if(a)return jn({providerId:a.providerId,binding:a.binding,riskClass:r,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return jn({providerId:i,binding:n.bindings[i],riskClass:r,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}var VJ,GJ,$C=p(()=>{"use strict";Bn();wg();du();wC();FC();VJ=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],GJ=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i]});function Lg(e){return`${JSON.stringify(e)}
147
- `}function Bg(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let r=t,n=typeof r.id=="string"?r.id:"";if(r.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(r.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(r.op==="call_tool"){if(typeof r.name!="string"||!r.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=r.args&&typeof r.args=="object"&&!Array.isArray(r.args)?r.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:r.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var Nt,Sr=p(()=>{"use strict";Nt="KYNVER_WORKER_BROKER_SOCKET"});import{unlinkSync as zJ,writeFileSync as XJ}from"node:fs";import QJ from"node:path";function ia(e){if(!e||e.length===0)return[...sa];let t=new Set;for(let r of e)for(let n of t2[r]??[])t.add(n);return sa.filter(r=>t.has(r))}function jC(e){return ia(e).map(t=>`mcp__${ye}__${t}`)}function o2(e){return r2.includes(e)}function Wg(e){return n2.includes(e)}function VC(e){return o2(e)&&!Wg(e)}function aa(e=process.env){let t=e[ZJ]?.trim().toLowerCase();return t?t==="1"||t==="true"||t==="yes"||t==="on":!0}function GC(e){return QJ.join(e,e2)}function JC(e){let t=GC(e.workerDir),r={mcpServers:{[ye]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Nt]:e.brokerSocketPath}}}};return XJ(t,`${JSON.stringify(r,null,2)}
148
- `,{mode:384}),t}function ku(e){try{return zJ(GC(e)),!0}catch{return!1}}var ZJ,e2,ye,sa,HC,t2,r2,n2,ot=p(()=>{"use strict";Sr();ZJ="KYNVER_WORKER_MCP_TOOLS",e2="mcp-config.json",ye="kynver",sa=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],HC=sa.map(e=>`mcp__${ye}__${e}`),t2={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};r2=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],n2=["openai-compatible","gemini-api"]});import{closeSync as qC,openSync as YC}from"node:fs";import{spawn as s2}from"node:child_process";function i2(e,t){let n=XC(e,t).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}function XC(e,t){return["--model",t,"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:HC).join(",")}`]:[],"--",e.prompt]}var qr,la,zC,Ug=p(()=>{"use strict";lr();Fn();M();qe();$t();ot();qr="claude-sonnet-4-6",la="claude-opus-4-8";zC={name:"claude",defaultModel:qr,preflightModel(e){return Cg(e,qr)},start(e){let t=Cg(e.model,qr);if(!t.ok)throw new Error(`claude provider model preflight failed: ${t.note}`);let r=t.model;i2(e,r);let[n,o]=ae("claude",XC(e,r)),s=YC(e.stdoutPath,"a"),i=YC(e.stderrPath,"a"),a=["ignore",s,i],[l,c]=tt(n,o,e.workerDir),u=s2(l,c,z({cwd:e.worktreePath,detached:Re(),stdio:a,env:gt(process.env,{reviewWorker:e.reviewWorker})}));if(qC(s),qC(i),!u.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return u.unref(),{pid:u.pid,model:r}}}});import{closeSync as QC,openSync as ZC}from"node:fs";import{spawn as a2}from"node:child_process";function l2(e,t){return gt({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function c2(e,t){let r=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",t,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",r,"--toolsets","hermes-cli"]}var Fg,eE,tE=p(()=>{"use strict";lr();Fn();M();qe();Un();$t();Fg=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";eE={name:"hermes-codex",defaultModel:Fg,preflightModel(e){return ms(e,Fg)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let t=ms(e.model,Fg);if(!t.ok)throw new Error(`hermes-codex provider model preflight failed: ${t.note}`);let r=t.model,n=mt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=ae(n,c2(r,e.prompt)),i=ZC(e.stdoutPath,"a"),a=ZC(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=tt(o,s,e.workerDir),d=a2(c,u,z({cwd:e.worktreePath,detached:Re(),shell:!1,stdio:l,env:l2(e.reviewWorker,e.codexHome)}));if(QC(i),QC(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:r}}}});function p2(e=process.env){return e[u2]?.trim().toLowerCase()==="elevated"?"elevated":d2}function bu(e=process.platform,t=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${p2(t)}"`]}var u2,d2,Kg=p(()=>{"use strict";u2="KYNVER_CODEX_WINDOWS_SANDBOX",d2="unelevated"});import{closeSync as rE,existsSync as f2,openSync as nE}from"node:fs";import{spawn as $g}from"node:child_process";function m2(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}function xr(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function g2(e,t){return gt({...process.env,CI:"1",NO_COLOR:"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function h2(e,t,r,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...bu(n,o),"--json","--sandbox",r==="read_only"?"read-only":"workspace-write","--model",e,t]}function y2(e,t,r,n){if(process.platform==="win32"){let[l,c]=ae(e,t);return $g(l,c,r)}if(!f2("/usr/bin/script")){let[l,c]=tt(e,t,n);return $g(l,c,r)}let s=[e,...t].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=tt("script",["-qfc",s,"/dev/null"],n);return $g(i,a,r)}var _r,oE,Vn=p(()=>{"use strict";lr();Fn();M();qe();du();$t();tE();Kg();_r=m2();oE={name:"codex",defaultModel:_r,preflightModel(e){return ms(e,_r)},start(e){if(fs().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return eE.start(e);let r=ms(e.model,_r);if(!r.ok)throw new Error(`codex provider model preflight failed: ${r.note}`);let n=r.model,o=nE(e.stdoutPath,"a"),s=nE(e.stderrPath,"a"),i=["ignore",o,s],a=xr(),l=h2(n,e.prompt,e.executionMode),c;try{c=y2(a,l,z({cwd:e.worktreePath,detached:Re(),shell:!1,stdio:i,env:g2(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{rE(o),rE(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}}});import{existsSync as vu}from"node:fs";import Gn from"node:path";import{fileURLToPath as k2}from"node:url";function b2(e,t){let r=Gn.resolve(e);for(;;){let n=Gn.join(r,t);if(vu(n))return n;let o=Gn.dirname(r);if(o===r)return null;r=o}}function v2(e){return b2(e,Gn.join("node_modules",".bin","tsx"))??"npx"}function Hg(e,t){if(e.endsWith(".ts")){let r=v2(Gn.dirname(e));return{command:r,argsPrefix:r==="npx"?["tsx",e]:[e],cliPath:e}}return{command:t,argsPrefix:[e],cliPath:e}}function Ru(e){if(e.explicitCliPath)return vu(e.explicitCliPath)?Hg(e.explicitCliPath,e.nodeExecutable):null;let t=k2(new URL(".",e.importMetaUrl)),r=Gn.join(t,"cli.js");if(vu(r))return Hg(r,e.nodeExecutable);let n=Gn.join(t,"cli.ts");return vu(n)?Hg(n,e.nodeExecutable):null}var jg=p(()=>{"use strict"});function w2(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function ca(e,t,r){let n=await e.fetchImpl(`${e.apiBaseUrl}${t}`,{method:r?.method??"GET",headers:{[R2]:e.token,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function ua(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function wu(e,t,r){let n=w2(e);switch(t){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=ua(r.memoryQuery);s&&o.set("memoryQuery",s);let i=ua(r.mode);return i&&o.set("mode",i),ca(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(r.query??"")});return typeof r.k=="number"&&o.set("k",String(r.k)),ca(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=ua(r.query);s&&o.set("q",s),typeof r.limit=="number"&&o.set("limit",String(r.limit));let i=o.toString();return ca(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return ca(e,`${n}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return ca(e,`${n}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...ua(r.eventKey)?{eventKey:ua(r.eventKey)}:{}}})}}function bs(e){return sa.includes(e)}var R2,da,Su=p(()=>{"use strict";ot();R2="X-Kynver-Job-Token",da={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}}});function pa(e){return ia(e).filter(bs).map(t=>{let r=da[t];return{type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema}}})}var _u=p(()=>{"use strict";Su();ot()});import{closeSync as sE,openSync as iE}from"node:fs";import S2 from"node:path";import{fileURLToPath as _2}from"node:url";import{spawn as x2}from"node:child_process";function Vg(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}function E2(e=process.env){let t=e.KYNVER_WORKER_BASE_URL?.trim();if(!t)throw new fa(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let r;try{r=new URL(t)}catch{throw new fa(`KYNVER_WORKER_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. http://localhost:11434/v1`)}if(r.protocol!=="http:"&&r.protocol!=="https:")throw new fa(`KYNVER_WORKER_BASE_URL must be http(s), got "${r.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):C2;return{baseUrl:t.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}function xu(e,t,r,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:t,temperature:0,stream:!1,messages:[{role:"system",content:A2},{role:"user",content:r}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function P2(){let e=_2(new URL(".",import.meta.url)),t=import.meta.url.endsWith(".ts"),r=S2.join(e,t?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Ru({importMetaUrl:import.meta.url,explicitCliPath:r,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${r} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function I2(e,t,r){let n=e.workerToolGrant,o=n?pa(n.capabilities):void 0;return{provider:Jn,model:r,request:xu(t,r,e.prompt,o),timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Cu(e,t,r){let n=P2(),o=iE(e.stdoutPath,"a"),s=iE(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=tt(n.command,n.argsPrefix,e.workerDir),c=x2(a,l,z({cwd:e.worktreePath,detached:Re(),shell:!1,stdio:i,env:gt(process.env,{reviewWorker:e.reviewWorker})}));if(sE(o),sE(s),!c.pid)throw new Error(`failed to spawn ${t.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(t)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${t.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:r}}var Jn,C2,fa,A2,aE,ma=p(()=>{"use strict";lr();Fn();M();jg();$t();_u();Jn="openai-compatible",C2=600*1e3;fa=class extends Error{};A2="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";aE={name:Jn,get defaultModel(){return Vg()},preflightModel(e){return Eg(e,Vg())},start(e){let t=Eg(e.model,Vg());if(!t.ok)throw new Error(`openai-compatible provider model preflight failed: ${t.note}`);let r=t.model,n=E2(process.env),o=I2(e,n,r);return Cu(e,o,r)}}});import O2 from"node:path";function ht(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function vs(e){let t=O2.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return t==="agy"||t==="antigravity"?"antigravity":"gemini"}function lE(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function cE(e){let t=e.trim().toLowerCase();return!t||T2.has(t)?[]:["--model",e.trim()]}function Eu(e,t){return[...cE(t),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function uE(e,t){return["--model",t,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",ye]:[],"--prompt",e.prompt]}var T2,qn=p(()=>{"use strict";ot();T2=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"])});import{closeSync as dE,openSync as pE}from"node:fs";import{spawn as N2}from"node:child_process";function Ke(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function D2(e,t){return gt({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...t?{GEMINI_CLI_HOME:t}:{}},{reviewWorker:e})}var jt,fE,ga=p(()=>{"use strict";lr();Fn();M();qe();qn();$t();jt="gemini";fE={name:jt,get defaultModel(){return Ke()},preflightModel(e){return gs(e,Ke())},start(e){let t=gs(e.model,Ke());if(!t.ok)throw new Error(`gemini provider model preflight failed: ${t.note}`);let r=ht(),n=vs(r),o=n==="antigravity"?lE(t):t.model,s=n==="antigravity"?Eu(e,o):uE(e,o),[i,a]=ae(r,s),l=pE(e.stdoutPath,"a"),c=pE(e.stderrPath,"a"),u=["ignore",l,c],[d,f]=tt(i,a,e.workerDir),m=N2(d,f,z({cwd:e.worktreePath,detached:Re(),shell:!1,stdio:u,env:D2(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(dE(l),dE(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${r}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}}});function L2(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function B2(e=process.env){let t=L2(e);if(!t)throw new ha('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let r=e.KYNVER_GEMINI_BASE_URL?.trim()||mE,n;try{n=new URL(r)}catch{throw new ha(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${mE}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ha(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):M2;return{baseUrl:r.replace(/\/+$/,""),apiKey:t,timeoutMs:s}}function W2(e,t,r){let n=e.workerToolGrant,o=n?pa(n.capabilities):void 0,s=xu(t,r,e.prompt,o);return{provider:Vt,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Vt,mE,M2,ha,gE,Gg=p(()=>{"use strict";ma();_u();$t();ga();Vt="gemini-api",mE="https://generativelanguage.googleapis.com/v1beta/openai",M2=600*1e3,ha=class extends Error{};gE={name:Vt,get defaultModel(){return Ke()},preflightModel(e){return gs(e,Ke())},start(e){let t=gs(e.model,Ke());if(!t.ok)throw new Error(`gemini-api provider model preflight failed: ${t.note}`);let r=t.model,n=B2(process.env),o=W2(e,n,r);return Cu(e,o,r)}}});function Ye(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function F2(e){if(!e)return;let t=Ye(e,"workerModelOverride")||Ye(e,"modelOverride");return t||`${Ye(e,"title")}
149
- ${Ye(e,"description")}
150
- ${Ye(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function hE(e){return e.toLowerCase()}function qg(e=P()){let t=e.defaultModel?.trim();if(t)return t;let r=process.env.KYNVER_DEFAULT_MODEL?.trim();return r||U2}function Au(e){let t=(e??"").toLowerCase();return!t||t.includes("composer")||t.includes("cursor")||t.includes("codex")||t.startsWith("gpt-")||t.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(t)||/^(?:opus|sonnet|haiku)\b/i.test(t)?"claude":t.startsWith("gemini-")?jt:"cursor"}function K2(e,t){let r=e.trim().toLowerCase(),n=t?.trim();return r==="cursor"?{model:au,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="claude"||r==="anthropic"?{model:qr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini"||r==="google"?{model:Ke(),provider:jt,rule:n&&n!==jt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini-api"||r==="gemini_api"||r==="google-api"?{model:Ke(),provider:Vt,rule:n&&n!==Vt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function yE(e,t){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||t.includes("deep review")||t.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function kE(e,t,r){return $2.has(e)?la:t.includes("review")||/^review[\s:]/.test(r)||r.includes("critique")?la:qr}function H2(e){let t=hE(Ye(e,"executorRef")),r=Ye(e,"title").toLowerCase(),n=Ye(e,"priority")||"normal",o=hE(Ye(e,"roleLane"));if(t.includes("provider:claude")||t.startsWith("claude:")){let i=kE(o,t,r);return{provider:"claude",model:i,rule:i===la?"factory:claude_review":"factory:claude_implementation"}}if(t.includes("provider:codex")||t.startsWith("codex:"))return{provider:"codex",model:_r,rule:"lane:codex_orchestration"};if(t.includes("provider:chatgpt")||t.startsWith("chatgpt:")||t.includes("provider:gpt")||t.startsWith("gpt:")){let i=ft(Ye(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:_r},rule:"lane:codex_orchestration"}}if(t.includes("provider:openai")||t.startsWith("openai-compatible:")){let i=ft(Ye(e,"executorRef"));return{provider:Jn,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(t.includes("provider:gemini-api")||t.startsWith("gemini-api:")){let i=ft(Ye(e,"executorRef"));return{provider:Vt,...i?.model?{model:i.model}:{model:Ke()},rule:"lane:gemini_api"}}if(t.includes("provider:gemini")||t.startsWith("gemini:")){let i=ft(Ye(e,"executorRef"));return{provider:jt,...i?.model?{model:i.model}:{model:Ke()},rule:"lane:gemini"}}if(t.includes("cursor")||t.includes("composer")||t.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(t.includes("codex"))return{provider:"codex",model:_r,rule:"lane:codex_orchestration"};if(t.includes("landing")||r.startsWith("land:")||r.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(t.includes("review")||/^review[\s:]/.test(r)||o.includes("review"))return yE(t,r)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(yE(t,r)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=qg();return{model:s,provider:Au(s),rule:"default:global"}}function j2(e){return e?ft(Ye(e,"executorRef")):null}function V2(e){switch(je(e)){case jt:case Vt:return Ke();case"claude":return qr;case"codex":return _r;case"cursor":return au;default:return}}function vE(e,t,r){let n=je(t);return n===e.provider&&e.rule===r?e:{...e,provider:n,model:V2(n)??e.model,rule:r}}function G2(e,t){let r=t?.trim();return!r||e.rule.startsWith("explicit:")&&e.rule!==Jg?e:vE(e,r,Jg)}function J2(e,t){if(t.explicitProvider?.trim()||Rg(t.task))return e;let r=t.configuredProvider?.trim();if(!r)return e;let n=je(r);return n===wr||n===e.provider?e:vE(e,n,bE)}function Pu(e){let t,r=j2(e.task),n=e.explicitModel?.trim()?void 0:r?.model?.trim(),o=!e.explicitProvider?.trim()&&r?.provider?.trim()?r.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=K2(l,e.explicitProvider);c?t=c:t={model:l,provider:e.explicitProvider?.trim()||Au(l),rule:"explicit:cli",requestedModel:l}}else if(n)t={model:n,provider:o||Au(n),rule:r?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&iu(e.task)){let l=F2(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",f=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=kE(d,f,m),u=c===la?"factory:claude_review":"factory:claude_implementation"}t={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=H2(e.task);t={...l,requestedModel:l.model}}else{let l=qg();t={model:l,provider:e.explicitProvider?.trim()||Au(l),rule:"default:global",requestedModel:l}}t=G2(t,e.explicitProvider),t=J2(t,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&je(e.configuredProvider)!==wr&&t.rule==="config:worker_provider",i=lC({routing:t,task:e.task,explicitProvider:e.explicitProvider??(s?t.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===Jg||i.rule===bE||Rr(i.provider)&&(e.explicitProviderIsOperatorOverride||iu(e.task))||i.provider===Jn||i.provider===jt||i.provider===Vt||i.provider==="codex")return i;let a=KC({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??_r:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function RE(e,t,r){return e||t||r||qg()||qr}var U2,au,$2,Jg,bE,lu=p(()=>{"use strict";$();su();$C();Ug();Vn();ma();ga();Gg();Bn();U2="claude-sonnet-4-6",au="composer-2.5";$2=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);Jg="explicit:cli_provider",bE="config:worker_provider"});function q2(e){let t=e?.executorRef;return typeof t=="string"?t.trim():""}function wE(e){return e?.trim()||void 0}function SE(e){let t=q2(e.task),r=ft(t),n=e.explicitProvider?.trim().toLowerCase(),o=wE(e.explicitModel??void 0),s=n||r?.provider,i=o||r?.model,a=n||o?"cli":r?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=wE(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||t&&aC(t)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!Rr(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}var _E=p(()=>{"use strict";su();Bn()});function xE(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function CE(){return{maxTaskAttempts:xE(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(is("harness.maxTaskAttempts",4))),dispatchCooldownMs:xE(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(is("harness.dispatchCooldownMs",5e3)))}}var EE=p(()=>{"use strict";Gr()});function zg(e){return e?.trim()?e.trim():null}function Y2(e){let t=zg(e);if(!t?.startsWith(Yg))return null;let r=t.slice(Yg.length),n=r.indexOf(AE);return n>=0?r.slice(0,n).trim()||null:r.trim()||null}function ya(e,t){let r=e.trim(),n=t.trim();return`${Yg}${r}${AE}${n}`}function z2(e,t){let r=zg(t);return r?Y2(e)===r:!1}function Iu(e){let t=zg(e.workerLeaseOwner);return t&&z2(t,e.runId)?t:ya(e.runId,e.runnerId)}var Yg,AE,ka=p(()=>{"use strict";Yg="kynver-harness:",AE="@runner:"});async function Ou(e){let t=new Map,r=e.agentOsId?.trim();if(!r||e.taskIds.length===0)return t;let n=pe(e.baseUrl);try{let o=await me(e.secret,r,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(r)}/harness/monitor/task-leases`,i=await de(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:r,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return t;let a=i.response.tasks;if(!Array.isArray(a))return t;for(let l of a)l?.taskId&&t.set(l.taskId,l)}catch{}return t}var Xg=p(()=>{"use strict";$();Fe()});async function Tu(e){let t=e.worker.leaseOwner?.trim()??null,r=e.worker.leaseToken?.trim()??null;if(r)return{leaseOwner:t,leaseToken:r};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:t,leaseToken:null};let s=(await Ou({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:t??i,leaseToken:null};let l=t??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&X(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}var Qg=p(()=>{"use strict";Xg();Y()});import X2 from"node:path";function PE(e,t){return F(X2.join(j(e),"workers",B(t),"worker.json"),void 0)}async function IE(e,t){let r=ne(e),n=String(t.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=pe(t.baseUrl?String(t.baseUrl):void 0),s=await me(t.secret?String(t.secret):void 0,n,{baseUrl:o}),i=Number(t.leaseMs)>0?Math.floor(Number(t.leaseMs)):eh,a=De({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(r.workers||{})){let f=PE(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!re(f.pid)){u.push(d);continue}if(ie(f).status==="done"){u.push(d);continue}let g=Iu({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await Tu({worker:f,agentOsId:n,baseUrl:o,secret:s}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,v=await de(y,s,{leaseOwner:h.leaseOwner??g,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(v.ok){l.push(d);continue}let k=v.response&&typeof v.response=="object"&&"reason"in v.response?String(v.response.reason??`http ${v.status}`):`http ${v.status}`;c.push({worker:d,reason:k})}return{renewed:l,failed:c,skipped:u}}function OE(e,t){let r=ne(e);for(let n of Object.keys(r.workers||{})){let o=PE(e,n);if(!(!o||o.taskId!==t||!re(o.pid)||ie(o).status==="done"))return!0}return!1}var Zg=p(()=>{"use strict";$();Fe();Y();Ce();M();Nu();ka();yr();Qg()});import Q2 from"node:path";function TE(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function NE(e,t,r,n){return TE(t)||(t.noRestartAt=new Date().toISOString(),t.noRestartSource=r,n&&(t.noRestartReason=n),t.steerRestartRequired=!1,X(e,t)),t}function Du(e,t={}){let r=t.isAlive??re,n=t.kill??fe,o=t.sleep??Ll;return!e||!r(e)?null:(n(e,"SIGTERM"),o(1e3),r(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function th(e,t,r,n,o={}){NE(e,t,r,n);let s=Du(t.pid,o),i=Du(t.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function DE(e,t,r={}){let n=r.isAlive??re,o=ne(e),s=[];for(let i of Object.keys(o.workers||{})){if(r.except&&i===r.except)continue;let a=F(Q2.join(j(o.id),"workers",B(i),"worker.json"),void 0);!a||a.taskId!==t||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(Du(a.completionSidecarPid,r),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),X(o.id,a),s.push(i))}return s}function Z2(e=process.env){let t=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function ME(e,t,r,n={}){if(!Z2(n.env))throw th(e,t,"watcher_attach_failed",r,n.deps),t.status="failed",X(e,t),new Error(`watcher_attach_failed: ${r}; worker stopped instead of running unwatched`)}var Rs=p(()=>{"use strict";Y();M()});function BE(e){let t=e.baseCommit?.trim()??"",r=[];t&&t!==LE&&r.push({ref:t,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==LE&&r.push({ref:n,source:"base"}),r.push({ref:"origin/main",source:"origin/main"}),r.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of r)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${t||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var LE,WE=p(()=>{"use strict";LE="unknown"});function Mu(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function UE(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Mu(e)}function rq(e){let t=(e.title??"").trim().toLowerCase();if(t.startsWith("fix:")||t.startsWith("repair:"))return!0;let r=(e.executorRef??"").toLowerCase();return!!(r.startsWith(tq)||r.includes("repair")||r.includes("unblock"))}function nq(e){let t={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return t;let r=e.match(eq);if(!r?.[1])return t;try{let n=JSON.parse(r[1]),o=Mu(String(n.targetPrUrl??n.target_pr_url??"")),s=Mu(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?UE(o):null,targetPrBranch:s}}catch{return t}}function FE(e){if(!rq(e))return null;let t=nq(e.description),r=e.prUrl?UE(e.prUrl):null,n=t.targetPrUrl??r;return n?{targetPrUrl:n,targetPrBranch:t.targetPrBranch??Mu(e.branch)}:null}function KE(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}var eq,tq,rh=p(()=>{"use strict";eq=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,tq="next-action-fix:"});var $E=p(()=>{"use strict"});function HE(e){let t=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",r=!!e.model?.toLowerCase().includes("haiku"),n=r?"compact":"full",o=r?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Hi(`worker.prompt.progress.${n}`).split(`
151
- `),o],i=Hi(`worker.prompt.merge_gate.${n}`).split(`
152
- `),a=Hi(`worker.prompt.plan_artifacts.${n}`).split(`
153
- `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",t,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...Hi("worker.prompt.core_rules").split(`
154
- `),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...KE({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
155
- `)}var jE=p(()=>{"use strict";rh();Gr();$E()});function GE(e){if(VE)return VE;let t=e?.trim();if(t){let o=Lu[je(t)];if(!o)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Lu).join(", ")}`);return o}let r=cC(P().workerProvider),n=Lu[r];if(!n)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Lu).join(", ")}`);return n}var Lu,VE,JE=p(()=>{"use strict";$();Bn();Ug();Vn();ys();ga();Gg();ma();Lu={claude:zC,codex:oE,cursor:TC,[jt]:fE,[Vt]:gE,[Jn]:aE},VE=null});function qE(e){return!!e.completionReportedAt?.trim()}function Bu(e,t,r){e.completionReportedAt=r.completionReportedAt,e.completionOutcome=r.completionOutcome,r.completionResponse!==void 0&&(e.completionResponse=r.completionResponse),X(t,e)}var nh=p(()=>{"use strict";Y()});function oq(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function oh(e){return!!(oq(e.completionBlocker)||e.completionOutcome==="rejected")}function ba(e){return qE(e)&&!oh(e)}var Wu=p(()=>{"use strict";nh()});function sh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function va(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function zE(e){let t=sh(e);if(!t)return{routeOutcome:null,taskAdvanced:!1,detail:null};let r=va(t.outcome),n=va(t.detail)??va(t.error),o=sh(t.task),s=sh(t.closedTask),i=o?va(o.status):null,a=s?va(s.status):null,c=r==="skipped_terminal_task"&&(i!==null&&YE.has(i)||a!==null&&YE.has(a))||r!==null&&sq.has(r)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:r,taskAdvanced:c,detail:n}}function XE(e){return e.taskAdvanced}var sq,YE,QE=p(()=>{"use strict";sq=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),YE=new Set(["done","failed","cancelled"])});var ZE=p(()=>{"use strict"});function cq(e){if(!e)return null;let t=e.trim().toLowerCase();return t.length?t:null}function ih(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function uq(e,t){return e.startsWith("factory:")?e.includes("lb")||ih(t):!1}function Fu(e){let t=(e.executorRef??"").toLowerCase(),r=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${r}
156
- ${n}`,s=cq(e.personaSlug);return t.startsWith("harness-lane:blocked-lane-unblock:")||t==="lane:over_attempt_recovery"||t.startsWith("next-action-fix:")||t.startsWith("next-action-landing:")||t.startsWith("code-work-lane-chain:release:")?!1:!!(t.startsWith(iq)||t===aq||t.startsWith("daemon-review:")||s&&Uu.has(s)&&(t.includes("evidence")||t.includes("validate")||t.includes("review")||uq(t,o)||ih(o))||t.startsWith(lq)&&e.parentTaskId&&s&&Uu.has(s)||e.planId&&!e.parentTaskId&&s&&Uu.has(s)&&ih(o)||r.includes("expert pr review")||e.parentTaskId&&(r.startsWith("review:")||r.includes("review required")||r.includes("runtime review"))&&s&&Uu.has(s))}var iq,aq,lq,Uu,ah=p(()=>{"use strict";iq="expert-lane-pr-review:",aq="plan-review-task",lq="scheduledjob:",Uu=new Set(["lorentz","dalton","rhea","sentinel"])});function tA(e){return!!(e&&pq.test(e))}function $e(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function rA(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:$e(e.head)}function nA(e){if(e==null)return null;let r=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return r?$e(r[0]):null}function fq(e,t,r){let n=t.trim();if(!n)return null;let o=r.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function mq(e,t){if(t.changedFiles.length>0)return!1;let r=$e(e.personaSlug)?.toLowerCase();if(r&&dq.has(r))return!0;let n=$e(e.routingRule)??"";return!!(n&&eA.test(n))}function gq(e,t){if(e.changedFiles.length>0)return!0;let r=$e(t?.baseRef);if(r&&t?.exec&&t.worktreePath){let n=fq(t.worktreePath,r,t.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!($e(e.headCommit)||rA(e.gitAncestry))}function oA(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(Fu({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let t=$e(e.routingRule)??"";if(t&&eA.test(t))return{required:!1,reason:"review_lane"};let r=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(mq(r,e.snapshot))return{required:!1,reason:"review_artifact"};if($e(e.patchPath)||$e(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if($e(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if($e(e.prUrl)??$e(e.taskPrUrl)??$e(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return gq(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function sA(e,t){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:$e(t?.headCommit)??rA(e.gitAncestry),prUrl:$e(t?.prUrl)??null}}var eA,dq,pq,lh=p(()=>{"use strict";ah();tu();eA=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,dq=new Set(zx()),pq=/no commits between/i});function aA(e){let t=e.trim();if(!t)return null;let r=t.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(r)return iA(r[1]);let n=t.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return iA(n[1]);try{let o=new URL(t.includes("://")?t:`https://${t}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function iA(e){let t=e.split("/").filter(Boolean);if(t.length<2)return null;let r=t[0],n=t[1].replace(/\.git$/i,"");return r&&n?`${r}/${n}`:null}var lA=p(()=>{"use strict"});import{spawnSync as hq}from"node:child_process";function yq(e,t,r){try{let n=hq(e,r,{windowsHide:!0,cwd:t,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function kq(e){return e.split(`
157
- `).map(t=>t.trim()).find(Boolean)??""}function cA(e,t){let r=t.git(e,["remote","get-url","origin"]);return r.status!==0?null:aA(r.stdout)}function Yn(e,t){let r=t.git(e,["rev-parse","HEAD"]);return r.status!==0?null:r.stdout.trim()||null}function Ku(e,t,r,n){let o=n.gh(e,["pr","list","--repo",t,"--head",r,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function Ra(e){let{worktreePath:t,branch:r,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(t,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(t,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(t,["push","-u","origin",r]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=Yn(t,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function uA(e){let t=e.remoteBranch.trim();if(!t)return{ok:!1,detail:"missing remote branch"};let r=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${t}`]);return r.status!==0&&!/already up to date/i.test(r.stderr||r.stdout)?{ok:!1,detail:r.stderr||r.stdout||r.error||"git push to PR branch failed"}:{ok:!0}}function dA(e){let t=Ku(e.worktreePath,e.repo,e.branch,e.exec);if(t)return{ok:!0,prUrl:t,created:!1};let r=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(r.status!==0)return{ok:!1,detail:r.stderr||r.stdout||r.error||"gh pr create failed"};let n=bq(r.stdout)??Ku(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function bq(e){let r=kq(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return r?r[0]:null}var $u,Hu=p(()=>{"use strict";lA();we();$u={git:(e,t)=>ee(e,t),gh:(e,t)=>yq("gh",e,t)}});function pA(e){return`t-${B(e)}-a`}function fA(e,t){let r=pA(t);if(e.headRefName.toLowerCase().includes(r))return!0;let n=t.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function wa(e){return e.trim().toLowerCase()}function mA(e,t){if(!e.length)return null;if(t){let r=wa(t),n=e.find(o=>wa(o.url)===r);if(n)return n}return[...e].sort((r,n)=>n.number-r.number)[0]??null}function gA(e,t){let r=wa(t);return e.filter(n=>wa(n.url)!==r).map(n=>n.url)}function hA(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.map(r=>({url:r.url?.trim()??"",number:Number(r.number)||0,headRefName:r.headRefName?.trim()??"",createdAt:r.createdAt?.trim()??"",body:r.body,title:r.title})).filter(r=>r.url&&r.number>0&&r.headRefName):[]}catch{return[]}}function vq(e){let t=new Set,r=[];for(let n of e){let o=wa(n.url);t.has(o)||(t.add(o),r.push(n))}return r}function Rq(e,t,r,n){let o=n.gh(e,["search","prs",r,"--repo",t,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:hA(o.stdout).filter(s=>fA(s,r))}function wq(e,t,r,n){let o=n.gh(e,["pr","list","--repo",t,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=pA(r);return hA(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||fA(i,r))}function ch(e,t,r,n){let o=r.trim();if(!o)return[];let s=Rq(e,t,o,n),i=wq(e,t,o,n);return vq([...s,...i])}var ju=p(()=>{"use strict";M()});function Sq(e){let t=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function uh(e){let t=gA(e.rows,e.canonicalPrUrl),r=[],n=[];for(let o of t){let s=Sq(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?r.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:r,failed:n}}var dh=p(()=>{"use strict";ju()});function yA(e,t,r,n){let o=r.trim();if(!o||!t.trim())return null;let s=n.gh(e,["api",`repos/${t}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}var kA=p(()=>{"use strict"});function _q(e){return e.gh(process.cwd(),["--version"]).status===0}function xq(e,t){return`AgentOS harness: ${e} (${t})`}function Cq(e,t,r){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${t}\` \xB7 run \`${r}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
158
- `)}function fh(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Eq(e){return fh(e.prUrlHint)??nA(e.status.finalResult)??fh(e.worker.taskPrUrl)??null}function Aq(e){let{snapshot:t,canonical:r,workerName:n,exec:o}=e,s=!1,i=!1,a=t.headCommit??Yn(t.worktreePath,o)??void 0;if(t.changedFiles.length>0){let l=Ra({worktreePath:t.worktreePath,branch:t.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(r.headRefName!==t.branch){let l=uA({worktreePath:t.worktreePath,remoteBranch:r.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=Yn(t.worktreePath,o)??a}return{ok:!0,prUrl:r.url,headCommit:a,committed:s,pushed:i}}function ph(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Yn(e.snapshot.worktreePath,e.exec)??void 0};let t=Ra({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return t.ok?{ok:!0,prUrl:e.prUrl,headCommit:t.headCommit??e.snapshot.headCommit??void 0,committed:t.committed,pushed:t.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${t.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function mh(e,t=$u){let r=Eq(e),n=sA(e.status,{prUrl:r,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!oA({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:r,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:t,worker:e.worker,snapshot:n}).required)return r?ph({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t}):{ok:!0};if(r)return ph({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t});if(!_q(t)){let b=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${b?`${b} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=cA(n.worktreePath,t);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let b=!1,_=!1,S=n.headCommit??Yn(n.worktreePath,t)??void 0;if(n.changedFiles.length>0){let R=Ra({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:t});if(!R.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${R.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};b=R.committed,_=R.pushed,S=R.headCommit??S}else{let R=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(R.status!==0&&!/already up to date/i.test(R.stderr||R.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${R.stderr||R.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};_=R.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:b,pushed:_}}let l=fh(e.worker.taskId),c=[];if(l){c=ch(n.worktreePath,i,l,t);let b=mA(c);if(b){let _=Aq({snapshot:n,canonical:b,workerName:e.worker.name,exec:t});return _.ok&&_.prUrl&&uh({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:_.prUrl,exec:t}),_}}let u=Ku(n.worktreePath,i,n.branch,t);if(u)return ph({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t});let d=n.changedFiles.length>0,f=!1,m=!1,g=n.headCommit??void 0,h=Ra({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:t});if(d&&!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(f=h.committed,m=h.pushed,!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let b=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(b.status!==0&&!/already up to date/i.test(b.stderr||b.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${b.stderr||b.stdout||b.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=b.status===0}g=h.headCommit??g??Yn(n.worktreePath,t)??void 0;let y=g?yA(n.worktreePath,i,g,t):null;if(y)return{ok:!0,prUrl:y.prUrl,headCommit:g,committed:f,pushed:m,created:!1};let v=e.run.base?.trim()||"main",k=dA({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:v.replace(/^origin\//,""),title:xq(e.worker.name,e.worker.runId),body:Cq(e.worker.taskId,e.worker.name,e.worker.runId),exec:t});if(!k.ok||!k.prUrl){if(tA(k.detail))return{ok:!0,headCommit:g??void 0,committed:f,pushed:m};let b=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${b?`${b} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${k.detail?` (${k.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}if(l&&k.prUrl){let _=[...c.length>0?c:ch(n.worktreePath,i,l,t),{url:k.prUrl,number:Number.parseInt(k.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];uh({worktreePath:n.worktreePath,repo:i,rows:_,canonicalPrUrl:k.prUrl,exec:t})}return{ok:!0,prUrl:k.prUrl,headCommit:g??void 0,committed:f,pushed:m,created:k.created}}var bA=p(()=>{"use strict";lh();ju();dh();Hu();kA()});var vA=p(()=>{"use strict";ZE();lh();Hu();ju();dh();bA()});import Pq from"node:path";function hh(e){clearInterval(gh.get(e)),gh.delete(e)}function yh(e,t){if(hh(e),!Sa.has(e))return;let r=setInterval(()=>{(F(Pq.join(e,"worker.json"),null)?.completionReportedAt||!re(t))&&ws(e)},1e3);r.unref(),gh.set(e,r)}function kh(e,t){hh(e);let r=Sa.get(e);r&&r.close(),Sa.set(e,t)}async function Yr(e){hh(e);let t=Sa.get(e);return t?(Sa.delete(e),await t.close(),!0):!1}function ws(e){Yr(e).catch(()=>{})}var Sa,gh,bh=p(()=>{"use strict";M();Sa=new Map,gh=new Map});import{appendFileSync as Iq,existsSync as wA,mkdirSync as SA,readFileSync as Oq,rmSync as RA,writeFileSync as Tq}from"node:fs";import Cr from"node:path";function xA(e){return Cr.join(e,_A)}function Nq(e){return ce(e,["ls-files","--error-unmatch",_A.split(Cr.sep).join("/")],{allowFailure:!0}).trim().length>0}function Dq(e){let t=ce(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Cr.isAbsolute(t)?t:Cr.join(e,t),n=Cr.join(r,"info","exclude"),o=".cursor/mcp.json";try{SA(Cr.dirname(n),{recursive:!0});let s=wA(n)?Oq(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;Iq(n,`${s.endsWith(`
146
+ ${n}`;return D2.some(s=>s.test(o))?"privileged":t.includes("provider:claude")||t.includes("deep_review")||t.includes("security")||t.includes("landing")||t.includes("review")||r.startsWith("land:")||t.includes("implementer")||t.includes("repair")||r.includes("implement")?"elevated":M2.some(s=>s.test(o))?"low":"elevated"}function B2(e){let t=gs(e.provider),r=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${t.displayName} (${t.costTier} tier)`:`${t.displayName} selected for ${e.riskClass} orchestration (${t.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:t.costTier,riskClass:e.riskClass,costRationale:r,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function U2(e){let t=e.inventory??yE();return e.codexBinding?{...t,bindings:{...t.bindings,codex:e.codexBinding}}:t}function Yn(e){let t=B2({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:t.routingRule,audit:t}}function bE(e){let t=e.task??{},r=L2(t),n=U2({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:ys())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Sr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=qg({inventory:n,riskClass:r});return Yn(u?{providerId:u.providerId,binding:u.binding,riskClass:r,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:r,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Yn({providerId:"codex",binding:c,riskClass:r,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Yn({providerId:"cursor",binding:c,riskClass:r,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Yn({providerId:"claude",binding:c,riskClass:r,routingRule:"orchestration:explicit_claude",model:s})}let a=qg({inventory:n,riskClass:r});if(a)return Yn({providerId:a.providerId,binding:a.binding,riskClass:r,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Yn({providerId:i,binding:n.bindings[i],riskClass:r,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}var D2,M2,vE=p(()=>{"use strict";Kn();Vg();xu();eE();kE();D2=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],M2=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i]});function sh(e){return`${JSON.stringify(e)}
147
+ `}function ih(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,reason:"malformed_request",error:"request was not valid JSON",id:""}}if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,reason:"malformed_request",error:"request must be a JSON object",id:""};let r=t,n=typeof r.id=="string"?r.id:"";if(r.v!==1)return{ok:!1,reason:"unsupported_protocol",error:"unsupported protocol version (expected 1)",id:n};if(!n)return{ok:!1,reason:"malformed_request",error:"request id must be a non-empty string",id:""};if(r.op==="list_tools")return{ok:!0,request:{v:1,id:n,op:"list_tools"}};if(r.op==="call_tool"){if(typeof r.name!="string"||!r.name)return{ok:!1,reason:"malformed_request",error:"call_tool requires a tool name",id:n};let o=r.args&&typeof r.args=="object"&&!Array.isArray(r.args)?r.args:{};return{ok:!0,request:{v:1,id:n,op:"call_tool",name:r.name,args:o}}}return{ok:!1,reason:"malformed_request",error:"unknown op",id:n}}var Dt,_r=p(()=>{"use strict";Dt="KYNVER_WORKER_BROKER_SOCKET"});import{unlinkSync as W2,writeFileSync as F2}from"node:fs";import $2 from"node:path";function ga(e){if(!e||e.length===0)return[...ma];let t=new Set;for(let r of e)for(let n of j2[r]??[])t.add(n);return ma.filter(r=>t.has(r))}function wE(e){return ga(e).map(t=>`mcp__${be}__${t}`)}function J2(e){return V2.includes(e)}function ah(e){return G2.includes(e)}function SE(e){return J2(e)&&!ah(e)}function ha(e=process.env){let t=e[K2]?.trim().toLowerCase();return t?t==="1"||t==="true"||t==="yes"||t==="on":!0}function _E(e){return $2.join(e,H2)}function xE(e){let t=_E(e.workerDir),r={mcpServers:{[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Dt]:e.brokerSocketPath}}}};return F2(t,`${JSON.stringify(r,null,2)}
148
+ `,{mode:384}),t}function Tu(e){try{return W2(_E(e)),!0}catch{return!1}}var K2,H2,be,ma,RE,j2,V2,G2,it=p(()=>{"use strict";_r();K2="KYNVER_WORKER_MCP_TOOLS",H2="mcp-config.json",be="kynver",ma=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],RE=ma.map(e=>`mcp__${be}__${e}`),j2={"worker.context":["agent_os_context_envelope"],"worker.memory.read":["agent_os_search_memory"],"worker.skills.read":["agent_os_search_skills","agent_os_get_skill"],"worker.progress.report":["agent_os_progress_note"]};V2=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],G2=["openai-compatible","gemini-api"]});import{closeSync as CE,openSync as EE}from"node:fs";import{spawn as q2}from"node:child_process";function Y2(e,t){let n=IE(e,t).at(-1);if(typeof n!="string"||!n.trim())throw new Error("claude provider refuses to spawn: worker prompt is empty after argv assembly (stdin is ignored \u2014 fix prompt delivery before retrying)")}function IE(e,t){return["--model",t,"-p","--verbose","--permission-mode",e.executionMode==="read_only"?"plan":"bypassPermissions","--output-format","stream-json","--include-partial-messages",...e.mcpConfigPath?["--mcp-config",e.mcpConfigPath,`--allowedTools=${(e.mcpAllowedTools?.length?e.mcpAllowedTools:RE).join(",")}`]:[],"--",e.prompt]}var Qr,ya,AE,lh=p(()=>{"use strict";cr();Vn();M();ze();Ht();it();Qr="claude-sonnet-4-6",ya="claude-opus-4-8";AE={name:"claude",defaultModel:Qr,preflightModel(e){return Yg(e,Qr)},start(e){let t=Yg(e.model,Qr);if(!t.ok)throw new Error(`claude provider model preflight failed: ${t.note}`);let r=t.model;Y2(e,r);let[n,o]=le("claude",IE(e,r)),s=EE(e.stdoutPath,"a"),i=EE(e.stderrPath,"a"),a=["ignore",s,i],[l,c]=nt(n,o,e.workerDir),u=q2(l,c,Z({cwd:e.worktreePath,detached:Se(),stdio:a,env:yt(process.env,{reviewWorker:e.reviewWorker})}));if(CE(s),CE(i),!u.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return u.unref(),{pid:u.pid,model:r}}}});import{closeSync as PE,openSync as OE}from"node:fs";import{spawn as z2}from"node:child_process";function X2(e,t){return yt({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function Q2(e,t){let r=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",t,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",r,"--toolsets","hermes-cli"]}var ch,TE,NE=p(()=>{"use strict";cr();Vn();M();ze();jn();Ht();ch=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";TE={name:"hermes-codex",defaultModel:ch,preflightModel(e){return ks(e,ch)},start(e){if(e.executionMode==="read_only")throw new Error("hermes-codex provider cannot enforce read_only execution mode (no sandbox flag); route read_only tasks to the direct codex exec path or another provider");let t=ks(e.model,ch);if(!t.ok)throw new Error(`hermes-codex provider model preflight failed: ${t.note}`);let r=t.model,n=ht("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=le(n,Q2(r,e.prompt)),i=OE(e.stdoutPath,"a"),a=OE(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=nt(o,s,e.workerDir),d=z2(c,u,Z({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:l,env:X2(e.reviewWorker,e.codexHome)}));if(PE(i),PE(a),!d.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return d.unref(),{pid:d.pid,model:r}}}});function tq(e=process.env){return e[Z2]?.trim().toLowerCase()==="elevated"?"elevated":eq}function Nu(e=process.platform,t=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${tq(t)}"`]}var Z2,eq,uh=p(()=>{"use strict";Z2="KYNVER_CODEX_WINDOWS_SANDBOX",eq="unelevated"});import{closeSync as DE,existsSync as rq,openSync as ME}from"node:fs";import{spawn as dh}from"node:child_process";function nq(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}function Cr(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function oq(e,t){return yt({...process.env,CI:"1",NO_COLOR:"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function sq(e,t,r,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Nu(n,o),"--json","--sandbox",r==="read_only"?"read-only":"workspace-write","--model",e,t]}function iq(e,t,r,n){if(process.platform==="win32"){let[l,c]=le(e,t);return dh(l,c,r)}if(!rq("/usr/bin/script")){let[l,c]=nt(e,t,n);return dh(l,c,r)}let s=[e,...t].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=nt("script",["-qfc",s,"/dev/null"],n);return dh(i,a,r)}var xr,LE,zn=p(()=>{"use strict";cr();Vn();M();ze();xu();Ht();NE();uh();xr=nq();LE={name:"codex",defaultModel:xr,preflightModel(e){return ks(e,xr)},start(e){if(ys().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return TE.start(e);let r=ks(e.model,xr);if(!r.ok)throw new Error(`codex provider model preflight failed: ${r.note}`);let n=r.model,o=ME(e.stdoutPath,"a"),s=ME(e.stderrPath,"a"),i=["ignore",o,s],a=Cr(),l=sq(n,e.prompt,e.executionMode),c;try{c=iq(a,l,Z({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:i,env:oq(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{DE(o),DE(s)}if(!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}}});import{existsSync as Du}from"node:fs";import Xn from"node:path";import{fileURLToPath as aq}from"node:url";function lq(e,t){let r=Xn.resolve(e);for(;;){let n=Xn.join(r,t);if(Du(n))return n;let o=Xn.dirname(r);if(o===r)return null;r=o}}function cq(e){return lq(e,Xn.join("node_modules",".bin","tsx"))??"npx"}function ph(e,t){if(e.endsWith(".ts")){let r=cq(Xn.dirname(e));return{command:r,argsPrefix:r==="npx"?["tsx",e]:[e],cliPath:e}}return{command:t,argsPrefix:[e],cliPath:e}}function Mu(e){if(e.explicitCliPath)return Du(e.explicitCliPath)?ph(e.explicitCliPath,e.nodeExecutable):null;let t=aq(new URL(".",e.importMetaUrl)),r=Xn.join(t,"cli.js");if(Du(r))return ph(r,e.nodeExecutable);let n=Xn.join(t,"cli.ts");return Du(n)?ph(n,e.nodeExecutable):null}var fh=p(()=>{"use strict"});function dq(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function ka(e,t,r){let n=await e.fetchImpl(`${e.apiBaseUrl}${t}`,{method:r?.method??"GET",headers:{[uq]:e.token,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r.body)}:{}});if(!n.ok)throw new Error(`request failed (${n.status})`);return n.json()}function ba(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Lu(e,t,r){let n=dq(e);switch(t){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=ba(r.memoryQuery);s&&o.set("memoryQuery",s);let i=ba(r.mode);return i&&o.set("mode",i),ka(e,`${n}/context-envelope?${o.toString()}`)}case"agent_os_search_memory":{let o=new URLSearchParams({q:String(r.query??"")});return typeof r.k=="number"&&o.set("k",String(r.k)),ka(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=ba(r.query);s&&o.set("q",s),typeof r.limit=="number"&&o.set("limit",String(r.limit));let i=o.toString();return ka(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return ka(e,`${n}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return ka(e,`${n}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...ba(r.eventKey)?{eventKey:ba(r.eventKey)}:{}}})}}function Ss(e){return ma.includes(e)}var uq,va,Bu=p(()=>{"use strict";it();uq="X-Kynver-Job-Token",va={agent_os_context_envelope:{name:"agent_os_context_envelope",description:"Fetch the context envelope for YOUR OWN task: goal/plan/task summaries, relevant memory, and recent session context. Optional memoryQuery focuses the memory portion.",inputSchema:{type:"object",properties:{memoryQuery:{type:"string",description:"Focus the memory portion of the envelope."},mode:{type:"string",description:"Envelope mode hint."}},additionalProperties:!1}},agent_os_search_memory:{name:"agent_os_search_memory",description:"Semantic search over the workspace's long-term memory. Returns a bounded top-N of relevant entries.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for."},k:{type:"integer",minimum:1,maximum:20,description:"How many entries to return."}},required:["query"],additionalProperties:!1}},agent_os_search_skills:{name:"agent_os_search_skills",description:"Search the workspace's skill library (bounded, metadata-only index). Use agent_os_get_skill to fetch one full skill by slug.",inputSchema:{type:"object",properties:{query:{type:"string"},limit:{type:"integer",minimum:1,maximum:25}},additionalProperties:!1}},agent_os_get_skill:{name:"agent_os_get_skill",description:"Fetch ONE full skill (including instructions) by slug.",inputSchema:{type:"object",properties:{slug:{type:"string"}},required:["slug"],additionalProperties:!1}},agent_os_progress_note:{name:"agent_os_progress_note",description:"Append a progress or blocker note to YOUR OWN task's journal. kind: 'progress' (default) or 'blocked'.",inputSchema:{type:"object",properties:{note:{type:"string"},kind:{type:"string",enum:["progress","blocked"]},eventKey:{type:"string"}},required:["note"],additionalProperties:!1}}}});function Ra(e){return ga(e).filter(Ss).map(t=>{let r=va[t];return{type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema}}})}var Uu=p(()=>{"use strict";Bu();it()});import{closeSync as BE,openSync as UE}from"node:fs";import pq from"node:path";import{fileURLToPath as fq}from"node:url";import{spawn as mq}from"node:child_process";function mh(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}function hq(e=process.env){let t=e.KYNVER_WORKER_BASE_URL?.trim();if(!t)throw new wa(`the "openai-compatible" worker provider requires KYNVER_WORKER_BASE_URL on the daemon host \u2014 point it at any OpenAI-compatible chat-completions endpoint (e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM, or your gateway's /v1 URL). Set KYNVER_WORKER_API_KEY too when the endpoint requires auth.`);let r;try{r=new URL(t)}catch{throw new wa(`KYNVER_WORKER_BASE_URL is not a valid URL: "${t}" \u2014 expected e.g. http://localhost:11434/v1`)}if(r.protocol!=="http:"&&r.protocol!=="https:")throw new wa(`KYNVER_WORKER_BASE_URL must be http(s), got "${r.protocol}//" \u2014 e.g. http://localhost:11434/v1`);let n=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),o=Number.isFinite(n)&&n>0?Math.floor(n):gq;return{baseUrl:t.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}function Wu(e,t,r,n){return{url:`${e.baseUrl}/chat/completions`,headers:{"content-type":"application/json",...e.apiKey?{authorization:`Bearer ${e.apiKey}`}:{}},body:{model:t,temperature:0,stream:!1,messages:[{role:"system",content:yq},{role:"user",content:r}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function kq(){let e=fq(new URL(".",import.meta.url)),t=import.meta.url.endsWith(".ts"),r=pq.join(e,t?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Mu({importMetaUrl:import.meta.url,explicitCliPath:r,nodeExecutable:process.execPath});if(!n)throw new Error(`openai-compatible runner script not found at ${r} \u2014 is the @kynver-app/runtime install complete?`);return{command:n.command,argsPrefix:n.argsPrefix}}function bq(e,t,r){let n=e.workerToolGrant,o=n?Ra(n.capabilities):void 0;return{provider:Qn,model:r,request:Wu(t,r,e.prompt,o),timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Fu(e,t,r){let n=kq(),o=UE(e.stdoutPath,"a"),s=UE(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=nt(n.command,n.argsPrefix,e.workerDir),c=mq(a,l,Z({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:i,env:yt(process.env,{reviewWorker:e.reviewWorker})}));if(BE(o),BE(s),!c.pid)throw new Error(`failed to spawn ${t.provider} worker runner (node executable unavailable?)`);try{c.stdin?.on("error",()=>{}),c.stdin?.write(JSON.stringify(t)),c.stdin?.end()}catch(u){throw new Error(`failed to hand request config to ${t.provider} runner: ${u.message}`)}return c.unref(),{pid:c.pid,model:r}}var Qn,gq,wa,yq,WE,Sa=p(()=>{"use strict";cr();Vn();M();fh();Ht();Uu();Qn="openai-compatible",gq=600*1e3;wa=class extends Error{};yq="You are a Kynver harness worker executing one work unit end to end. Follow the task instructions exactly and produce the complete deliverable (analysis, answer, or unified diff as the task requires) in a single response. Be precise and complete \u2014 your response is recorded verbatim as the work unit's final result.";WE={name:Qn,get defaultModel(){return mh()},preflightModel(e){return zg(e,mh())},start(e){let t=zg(e.model,mh());if(!t.ok)throw new Error(`openai-compatible provider model preflight failed: ${t.note}`);let r=t.model,n=hq(process.env),o=bq(e,n,r);return Fu(e,o,r)}}});import vq from"node:path";function kt(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function _s(e){let t=vq.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return t==="agy"||t==="antigravity"?"antigravity":"gemini"}function FE(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function $E(e){let t=e.trim().toLowerCase();return!t||Rq.has(t)?[]:["--model",e.trim()]}function $u(e,t){return[...$E(t),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function KE(e,t){return["--model",t,"--approval-mode",e.executionMode==="read_only"?"plan":"yolo","--output-format","stream-json","--skip-trust",...e.mcpConfigPath?["--allowed-mcp-server-names",be]:[],"--prompt",e.prompt]}var Rq,Zn=p(()=>{"use strict";it();Rq=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"])});import{closeSync as HE,openSync as jE}from"node:fs";import{spawn as wq}from"node:child_process";function He(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function Sq(e,t){return yt({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...t?{GEMINI_CLI_HOME:t}:{}},{reviewWorker:e})}var Vt,VE,_a=p(()=>{"use strict";cr();Vn();M();ze();Zn();Ht();Vt="gemini";VE={name:Vt,get defaultModel(){return He()},preflightModel(e){return bs(e,He())},start(e){let t=bs(e.model,He());if(!t.ok)throw new Error(`gemini provider model preflight failed: ${t.note}`);let r=kt(),n=_s(r),o=n==="antigravity"?FE(t):t.model,s=n==="antigravity"?$u(e,o):KE(e,o),[i,a]=le(r,s),l=jE(e.stdoutPath,"a"),c=jE(e.stderrPath,"a"),u=["ignore",l,c],[d,f]=nt(i,a,e.workerDir),m=wq(d,f,Z({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:u,env:Sq(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(HE(l),HE(c),!m.pid)throw new Error(`failed to spawn Google Antigravity worker (is \`${r}\` on PATH? install Google Antigravity and run \`agy\` once to sign in`+(n==="antigravity"?'; GEMINI_API_KEY is used only when ~/.gemini/antigravity-cli/settings.json sets "modelProvider": "gemini")':", or set GEMINI_API_KEY)"));return m.unref(),{pid:m.pid,model:o}}}});function xq(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function Cq(e=process.env){let t=xq(e);if(!t)throw new xa('the "gemini-api" worker provider requires KYNVER_GEMINI_API_KEY or GEMINI_API_KEY on the daemon host \u2014 create a key at https://aistudio.google.com/apikey. To use Google Antigravity instead, set workerProvider / --provider gemini and run `agy` once to sign in.');let r=e.KYNVER_GEMINI_BASE_URL?.trim()||GE,n;try{n=new URL(r)}catch{throw new xa(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${GE}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new xa(`KYNVER_GEMINI_BASE_URL must be http(s), got "${n.protocol}//"`);let o=Number(e.KYNVER_WORKER_TIMEOUT_MS??""),s=Number.isFinite(o)&&o>0?Math.floor(o):_q;return{baseUrl:r.replace(/\/+$/,""),apiKey:t,timeoutMs:s}}function Eq(e,t,r){let n=e.workerToolGrant,o=n?Ra(n.capabilities):void 0,s=Wu(t,r,e.prompt,o);return{provider:Gt,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Gt,GE,_q,xa,JE,gh=p(()=>{"use strict";Sa();Uu();Ht();_a();Gt="gemini-api",GE="https://generativelanguage.googleapis.com/v1beta/openai",_q=600*1e3,xa=class extends Error{};JE={name:Gt,get defaultModel(){return He()},preflightModel(e){return bs(e,He())},start(e){let t=bs(e.model,He());if(!t.ok)throw new Error(`gemini-api provider model preflight failed: ${t.note}`);let r=t.model,n=Cq(process.env),o=Eq(e,n,r);return Fu(e,o,r)}}});function Xe(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Iq(e){if(!e)return;let t=Xe(e,"workerModelOverride")||Xe(e,"modelOverride");return t||`${Xe(e,"title")}
149
+ ${Xe(e,"description")}
150
+ ${Xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function qE(e){return e.toLowerCase()}function yh(e=A()){let t=e.defaultModel?.trim();if(t)return t;let r=process.env.KYNVER_DEFAULT_MODEL?.trim();return r||Aq}function Ku(e){let t=(e??"").toLowerCase();return!t||t.includes("composer")||t.includes("cursor")||t.includes("codex")||t.startsWith("gpt-")||t.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(t)||/^(?:opus|sonnet|haiku)\b/i.test(t)?"claude":t.startsWith("gemini-")?Vt:"cursor"}function Pq(e,t){let r=e.trim().toLowerCase(),n=t?.trim();return r==="cursor"?{model:Ru,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="claude"||r==="anthropic"?{model:Qr,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini"||r==="google"?{model:He(),provider:Vt,rule:n&&n!==Vt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini-api"||r==="gemini_api"||r==="google-api"?{model:He(),provider:Gt,rule:n&&n!==Gt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function YE(e,t){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||t.includes("deep review")||t.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function zE(e,t,r){return Oq.has(e)?ya:t.includes("review")||/^review[\s:]/.test(r)||r.includes("critique")?ya:Qr}function Tq(e){let t=qE(Xe(e,"executorRef")),r=Xe(e,"title").toLowerCase(),n=Xe(e,"priority")||"normal",o=qE(Xe(e,"roleLane"));if(t.includes("provider:claude")||t.startsWith("claude:")){let i=zE(o,t,r);return{provider:"claude",model:i,rule:i===ya?"factory:claude_review":"factory:claude_implementation"}}if(t.includes("provider:codex")||t.startsWith("codex:"))return{provider:"codex",model:xr,rule:"lane:codex_orchestration"};if(t.includes("provider:chatgpt")||t.startsWith("chatgpt:")||t.includes("provider:gpt")||t.startsWith("gpt:")){let i=gt(Xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:xr},rule:"lane:codex_orchestration"}}if(t.includes("provider:openai")||t.startsWith("openai-compatible:")){let i=gt(Xe(e,"executorRef"));return{provider:Qn,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(t.includes("provider:gemini-api")||t.startsWith("gemini-api:")){let i=gt(Xe(e,"executorRef"));return{provider:Gt,...i?.model?{model:i.model}:{model:He()},rule:"lane:gemini_api"}}if(t.includes("provider:gemini")||t.startsWith("gemini:")){let i=gt(Xe(e,"executorRef"));return{provider:Vt,...i?.model?{model:i.model}:{model:He()},rule:"lane:gemini"}}if(t.includes("cursor")||t.includes("composer")||t.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(t.includes("codex"))return{provider:"codex",model:xr,rule:"lane:codex_orchestration"};if(t.includes("landing")||r.startsWith("land:")||r.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(t.includes("review")||/^review[\s:]/.test(r)||o.includes("review"))return YE(t,r)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(YE(t,r)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=yh();return{model:s,provider:Ku(s),rule:"default:global"}}function Nq(e){return e?gt(Xe(e,"executorRef")):null}function Dq(e){switch(Ge(e)){case Vt:case Gt:return He();case"claude":return Qr;case"codex":return xr;case"cursor":return Ru;default:return}}function QE(e,t,r){let n=Ge(t);return n===e.provider&&e.rule===r?e:{...e,provider:n,model:Dq(n)??e.model,rule:r}}function Mq(e,t){let r=t?.trim();return!r||e.rule.startsWith("explicit:")&&e.rule!==hh?e:QE(e,r,hh)}function Lq(e,t){if(t.explicitProvider?.trim()||jg(t.task))return e;let r=t.configuredProvider?.trim();if(!r)return e;let n=Ge(r);return n===Sr||n===e.provider?e:QE(e,n,XE)}function Hu(e){let t,r=Nq(e.task),n=e.explicitModel?.trim()?void 0:r?.model?.trim(),o=!e.explicitProvider?.trim()&&r?.provider?.trim()?r.provider.trim():void 0;if(e.explicitModel?.trim()){let l=e.explicitModel.trim(),c=Pq(l,e.explicitProvider);c?t=c:t={model:l,provider:e.explicitProvider?.trim()||Ku(l),rule:"explicit:cli",requestedModel:l}}else if(n)t={model:n,provider:o||Ku(n),rule:r?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&vu(e.task)){let l=Iq(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",f=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",m=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=zE(d,f,m),u=c===ya?"factory:claude_review":"factory:claude_implementation"}t={model:c,provider:"claude",rule:u,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let l=Tq(e.task);t={...l,requestedModel:l.model}}else{let l=yh();t={model:l,provider:e.explicitProvider?.trim()||Ku(l),rule:"default:global",requestedModel:l}}t=Mq(t,e.explicitProvider),t=Lq(t,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&Ge(e.configuredProvider)!==Sr&&t.rule==="config:worker_provider",i=FC({routing:t,task:e.task,explicitProvider:e.explicitProvider??(s?t.provider:void 0),explicitProviderIsOperatorOverride:!!e.explicitProviderIsOperatorOverride||s});if(!e.task||Object.keys(e.task).length===0||i.rule==="explicit:model_provider_alias"||i.rule==="explicit:model_provider_alias_overrode_provider"||i.rule==="explicit:cli"||i.rule===hh||i.rule===XE||wr(i.provider)&&(e.explicitProviderIsOperatorOverride||vu(e.task))||i.provider===Qn||i.provider===Vt||i.provider===Gt||i.provider==="codex")return i;let a=bE({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:a.provider,model:a.provider==="codex"?a.model??i.model??xr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function ZE(e,t,r){return e||t||r||yh()||Qr}var Aq,Ru,Oq,hh,XE,wu=p(()=>{"use strict";K();bu();vE();lh();zn();Sa();_a();gh();Kn();Aq="claude-sonnet-4-6",Ru="composer-2.5";Oq=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);hh="explicit:cli_provider",XE="config:worker_provider"});function Bq(e){let t=e?.executorRef;return typeof t=="string"?t.trim():""}function eA(e){return e?.trim()||void 0}function tA(e){let t=Bq(e.task),r=gt(t),n=e.explicitProvider?.trim().toLowerCase(),o=eA(e.explicitModel??void 0),s=n||r?.provider,i=o||r?.model,a=n||o?"cli":r?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let l=e.routing.provider,c=eA(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||t&&WC(t)||n&&n!=="cursor"?l==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${a}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:i&&c&&i!==c&&!wr(l)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${a}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,requested:{provider:s,model:i,source:a},resolved:u}:{ok:!0,resolved:u}}var rA=p(()=>{"use strict";bu();Kn()});function nA(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function oA(){return{maxTaskAttempts:nA(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(us("harness.maxTaskAttempts",4))),dispatchCooldownMs:nA(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(us("harness.dispatchCooldownMs",5e3)))}}var sA=p(()=>{"use strict";zr()});function bh(e){return e?.trim()?e.trim():null}function Uq(e){let t=bh(e);if(!t?.startsWith(kh))return null;let r=t.slice(kh.length),n=r.indexOf(iA);return n>=0?r.slice(0,n).trim()||null:r.trim()||null}function Ca(e,t){let r=e.trim(),n=t.trim();return`${kh}${r}${iA}${n}`}function Wq(e,t){let r=bh(t);return r?Uq(e)===r:!1}function ju(e){let t=bh(e.workerLeaseOwner);return t&&Wq(t,e.runId)?t:Ca(e.runId,e.runnerId)}var kh,iA,Ea=p(()=>{"use strict";kh="kynver-harness:",iA="@runner:"});async function Vu(e){let t=new Map,r=e.agentOsId?.trim();if(!r||e.taskIds.length===0)return t;let n=me(e.baseUrl);try{let o=await ye(e.secret,r,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(r)}/harness/monitor/task-leases`,i=await fe(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:r,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return t;let a=i.response.tasks;if(!Array.isArray(a))return t;for(let l of a)l?.taskId&&t.set(l.taskId,l)}catch{}return t}var vh=p(()=>{"use strict";K();Ke()});async function Gu(e){let t=e.worker.leaseOwner?.trim()??null,r=e.worker.leaseToken?.trim()??null;if(r)return{leaseOwner:t,leaseToken:r};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:t,leaseToken:null};let s=(await Vu({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:t??i,leaseToken:null};let l=t??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&ee(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}var Rh=p(()=>{"use strict";vh();Q()});import Fq from"node:path";function aA(e,t){return $(Fq.join(q(e),"workers",L(t),"worker.json"),void 0)}async function lA(e,t){let r=se(e),n=String(t.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=me(t.baseUrl?String(t.baseUrl):void 0),s=await ye(t.secret?String(t.secret):void 0,n,{baseUrl:o}),i=Number(t.leaseMs)>0?Math.floor(Number(t.leaseMs)):Sh,a=Me({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(r.workers||{})){let f=aA(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!oe(f.pid)){u.push(d);continue}if(ae(f).status==="done"){u.push(d);continue}let g=ju({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await Gu({worker:f,agentOsId:n,baseUrl:o,secret:s}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,b=await fe(y,s,{leaseOwner:h.leaseOwner??g,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(b.ok){l.push(d);continue}let k=b.response&&typeof b.response=="object"&&"reason"in b.response?String(b.response.reason??`http ${b.status}`):`http ${b.status}`;c.push({worker:d,reason:k})}return{renewed:l,failed:c,skipped:u}}function cA(e,t){let r=se(e);for(let n of Object.keys(r.workers||{})){let o=aA(e,n);if(!(!o||o.taskId!==t||!oe(o.pid)||ae(o).status==="done"))return!0}return!1}var wh=p(()=>{"use strict";K();Ke();Q();Ae();M();Ju();Ea();kr();Rh()});import $q from"node:path";function uA(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function dA(e,t,r,n){return uA(t)||(t.noRestartAt=new Date().toISOString(),t.noRestartSource=r,n&&(t.noRestartReason=n),t.steerRestartRequired=!1,ee(e,t)),t}function qu(e,t={}){let r=t.isAlive??oe,n=t.kill??he,o=t.sleep??zl;return!e||!r(e)?null:(n(e,"SIGTERM"),o(1e3),r(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function _h(e,t,r,n,o={}){dA(e,t,r,n);let s=qu(t.pid,o),i=qu(t.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function pA(e,t,r={}){let n=r.isAlive??oe,o=se(e),s=[];for(let i of Object.keys(o.workers||{})){if(r.except&&i===r.except)continue;let a=$($q.join(q(o.id),"workers",L(i),"worker.json"),void 0);!a||a.taskId!==t||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(qu(a.completionSidecarPid,r),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),ee(o.id,a),s.push(i))}return s}function Kq(e=process.env){let t=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function fA(e,t,r,n={}){if(!Kq(n.env))throw _h(e,t,"watcher_attach_failed",r,n.deps),t.status="failed",ee(e,t),new Error(`watcher_attach_failed: ${r}; worker stopped instead of running unwatched`)}var xs=p(()=>{"use strict";Q();M()});function gA(e){let t=e.baseCommit?.trim()??"",r=[];t&&t!==mA&&r.push({ref:t,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==mA&&r.push({ref:n,source:"base"}),r.push({ref:"origin/main",source:"origin/main"}),r.push({ref:"origin/HEAD",source:"origin/HEAD"});let o=new Set;for(let s of r)if(!o.has(s.ref)&&(o.add(s.ref),e.verifyRef(s.ref)))return{ref:s.ref,repaired:s.source!=="baseCommit",source:s.source};throw new Error(`worktree base ref unresolvable: baseCommit=${t||"<empty>"} base=${n||"<empty>"} \u2014 origin/main and origin/HEAD also failed verification`)}var mA,hA=p(()=>{"use strict";mA="unknown"});function Yu(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function yA(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Yu(e)}function Vq(e){let t=(e.title??"").trim().toLowerCase();if(t.startsWith("fix:")||t.startsWith("repair:"))return!0;let r=(e.executorRef??"").toLowerCase();return!!(r.startsWith(jq)||r.includes("repair")||r.includes("unblock"))}function Gq(e){let t={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return t;let r=e.match(Hq);if(!r?.[1])return t;try{let n=JSON.parse(r[1]),o=Yu(String(n.targetPrUrl??n.target_pr_url??"")),s=Yu(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?yA(o):null,targetPrBranch:s}}catch{return t}}function kA(e){if(!Vq(e))return null;let t=Gq(e.description),r=e.prUrl?yA(e.prUrl):null,n=t.targetPrUrl??r;return n?{targetPrUrl:n,targetPrBranch:t.targetPrBranch??Yu(e.branch)}:null}function bA(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}var Hq,jq,xh=p(()=>{"use strict";Hq=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,jq="next-action-fix:"});var vA=p(()=>{"use strict"});function RA(e){let t=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",r=!!e.model?.toLowerCase().includes("haiku"),n=r?"compact":"full",o=r?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...Qi(`worker.prompt.progress.${n}`).split(`
151
+ `),o],i=Qi(`worker.prompt.merge_gate.${n}`).split(`
152
+ `),a=Qi(`worker.prompt.plan_artifacts.${n}`).split(`
153
+ `);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",t,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Before exiting, append a terminal heartbeat with phase `complete` and a structured finalResult object; if you cannot complete, append blocker plus the recovery next action instead of exiting silently.","Final response must include files changed, verification commands, and unresolved risks.","Also include a JSON code block containing the structured finalResult object itself (not a wrapper): summary, verification (actual commands and observed results), scope, risks, and changedFiles. This is required even if the heartbeat path is read-only or a terminal heartbeat cannot be written. Never invent verification evidence; disclose unverified surfaces and blockers.",...Qi("worker.prompt.core_rules").split(`
154
+ `),"",...s,"",...i,"",...a,"",...e.runtimeEnvelopeMarkdown?.trim()?[e.runtimeEnvelopeMarkdown.trim(),""]:[],...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...bA({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
155
+ `)}var wA=p(()=>{"use strict";xh();zr();vA()});function _A(e){if(SA)return SA;let t=e?.trim();if(t){let o=zu[Ge(t)];if(!o)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(zu).join(", ")}`);return o}let r=$C(A().workerProvider),n=zu[r];if(!n)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(zu).join(", ")}`);return n}var zu,SA,xA=p(()=>{"use strict";K();Kn();lh();zn();Rs();_a();gh();Sa();zu={claude:AE,codex:LE,cursor:uE,[Vt]:VE,[Gt]:JE,[Qn]:WE},SA=null});function CA(e){return!!e.completionReportedAt?.trim()}function Xu(e,t,r){e.completionReportedAt=r.completionReportedAt,e.completionOutcome=r.completionOutcome,r.completionResponse!==void 0&&(e.completionResponse=r.completionResponse),ee(t,e)}var Ch=p(()=>{"use strict";Q()});function Jq(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Eh(e){return!!(Jq(e.completionBlocker)||e.completionOutcome==="rejected")}function Aa(e){return CA(e)&&!Eh(e)}var Qu=p(()=>{"use strict";Ch()});function Ah(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ia(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function AA(e){let t=Ah(e);if(!t)return{routeOutcome:null,taskAdvanced:!1,detail:null};let r=Ia(t.outcome),n=Ia(t.detail)??Ia(t.error),o=Ah(t.task),s=Ah(t.closedTask),i=o?Ia(o.status):null,a=s?Ia(s.status):null,c=r==="skipped_terminal_task"&&(i!==null&&EA.has(i)||a!==null&&EA.has(a))||r!==null&&qq.has(r)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:r,taskAdvanced:c,detail:n}}function IA(e){return e.taskAdvanced}var qq,EA,PA=p(()=>{"use strict";qq=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),EA=new Set(["done","failed","cancelled"])});var OA=p(()=>{"use strict"});function Qq(e){if(!e)return null;let t=e.trim().toLowerCase();return t.length?t:null}function Ih(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function Zq(e,t){return e.startsWith("factory:")?e.includes("lb")||Ih(t):!1}function ed(e){let t=(e.executorRef??"").toLowerCase(),r=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${r}
156
+ ${n}`,s=Qq(e.personaSlug);return t.startsWith("harness-lane:blocked-lane-unblock:")||t==="lane:over_attempt_recovery"||t.startsWith("next-action-fix:")||t.startsWith("next-action-landing:")||t.startsWith("code-work-lane-chain:release:")?!1:!!(t.startsWith(Yq)||t===zq||t.startsWith("daemon-review:")||s&&Zu.has(s)&&(t.includes("evidence")||t.includes("validate")||t.includes("review")||Zq(t,o)||Ih(o))||t.startsWith(Xq)&&e.parentTaskId&&s&&Zu.has(s)||e.planId&&!e.parentTaskId&&s&&Zu.has(s)&&Ih(o)||r.includes("expert pr review")||e.parentTaskId&&(r.startsWith("review:")||r.includes("review required")||r.includes("runtime review"))&&s&&Zu.has(s))}var Yq,zq,Xq,Zu,Ph=p(()=>{"use strict";Yq="expert-lane-pr-review:",zq="plan-review-task",Xq="scheduledjob:",Zu=new Set(["lorentz","dalton","rhea","sentinel"])});function NA(e){return!!(e&&tY.test(e))}function je(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function DA(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:je(e.head)}function MA(e){if(e==null)return null;let r=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return r?je(r[0]):null}function rY(e,t,r){let n=t.trim();if(!n)return null;let o=r.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function nY(e,t){if(t.changedFiles.length>0)return!1;let r=je(e.personaSlug)?.toLowerCase();if(r&&eY.has(r))return!0;let n=je(e.routingRule)??"";return!!(n&&TA.test(n))}function oY(e,t){if(e.changedFiles.length>0)return!0;let r=je(t?.baseRef);if(r&&t?.exec&&t.worktreePath){let n=rY(t.worktreePath,r,t.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(je(e.headCommit)||DA(e.gitAncestry))}function LA(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(ed({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let t=je(e.routingRule)??"";if(t&&TA.test(t))return{required:!1,reason:"review_lane"};let r=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(nY(r,e.snapshot))return{required:!1,reason:"review_artifact"};if(je(e.patchPath)||je(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(je(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(je(e.prUrl)??je(e.taskPrUrl)??je(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return oY(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function BA(e,t){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:je(t?.headCommit)??DA(e.gitAncestry),prUrl:je(t?.prUrl)??null}}var TA,eY,tY,Oh=p(()=>{"use strict";Ph();gu();TA=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,eY=new Set(AC()),tY=/no commits between/i});function WA(e){let t=e.trim();if(!t)return null;let r=t.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(r)return UA(r[1]);let n=t.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return UA(n[1]);try{let o=new URL(t.includes("://")?t:`https://${t}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function UA(e){let t=e.split("/").filter(Boolean);if(t.length<2)return null;let r=t[0],n=t[1].replace(/\.git$/i,"");return r&&n?`${r}/${n}`:null}var FA=p(()=>{"use strict"});import{spawnSync as sY}from"node:child_process";function iY(e,t,r){try{let n=sY(e,r,{windowsHide:!0,cwd:t,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function aY(e){return e.split(`
157
+ `).map(t=>t.trim()).find(Boolean)??""}function $A(e,t){let r=t.git(e,["remote","get-url","origin"]);return r.status!==0?null:WA(r.stdout)}function eo(e,t){let r=t.git(e,["rev-parse","HEAD"]);return r.status!==0?null:r.stdout.trim()||null}function td(e,t,r,n){let o=n.gh(e,["pr","list","--repo",t,"--head",r,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function Pa(e){let{worktreePath:t,branch:r,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(t,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(t,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(t,["push","-u","origin",r]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=eo(t,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function KA(e){let t=e.remoteBranch.trim();if(!t)return{ok:!1,detail:"missing remote branch"};let r=e.exec.git(e.worktreePath,["push","-u","origin",`HEAD:refs/heads/${t}`]);return r.status!==0&&!/already up to date/i.test(r.stderr||r.stdout)?{ok:!1,detail:r.stderr||r.stdout||r.error||"git push to PR branch failed"}:{ok:!0}}function HA(e){let t=td(e.worktreePath,e.repo,e.branch,e.exec);if(t)return{ok:!0,prUrl:t,created:!1};let r=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(r.status!==0)return{ok:!1,detail:r.stderr||r.stdout||r.error||"gh pr create failed"};let n=lY(r.stdout)??td(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function lY(e){let r=aY(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return r?r[0]:null}var rd,nd=p(()=>{"use strict";FA();_e();rd={git:(e,t)=>re(e,t),gh:(e,t)=>iY("gh",e,t)}});function jA(e){return`t-${L(e)}-a`}function VA(e,t){let r=jA(t);if(e.headRefName.toLowerCase().includes(r))return!0;let n=t.trim();if(!n)return!1;let o=e.body??"",s=e.title??"";return o.includes(n)||o.includes(`\`${n}\``)||s.includes(n)}function Oa(e){return e.trim().toLowerCase()}function GA(e,t){if(!e.length)return null;if(t){let r=Oa(t),n=e.find(o=>Oa(o.url)===r);if(n)return n}return[...e].sort((r,n)=>n.number-r.number)[0]??null}function JA(e,t){let r=Oa(t);return e.filter(n=>Oa(n.url)!==r).map(n=>n.url)}function qA(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.map(r=>({url:r.url?.trim()??"",number:Number(r.number)||0,headRefName:r.headRefName?.trim()??"",createdAt:r.createdAt?.trim()??"",body:r.body,title:r.title})).filter(r=>r.url&&r.number>0&&r.headRefName):[]}catch{return[]}}function cY(e){let t=new Set,r=[];for(let n of e){let o=Oa(n.url);t.has(o)||(t.add(o),r.push(n))}return r}function uY(e,t,r,n){let o=n.gh(e,["search","prs",r,"--repo",t,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","20"]);return o.status!==0?[]:qA(o.stdout).filter(s=>VA(s,r))}function dY(e,t,r,n){let o=n.gh(e,["pr","list","--repo",t,"--state","open","--json","url,number,headRefName,createdAt,body,title","--limit","100"]);if(o.status!==0)return[];let s=jA(r);return qA(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||VA(i,r))}function Th(e,t,r,n){let o=r.trim();if(!o)return[];let s=uY(e,t,o,n),i=dY(e,t,o,n);return cY([...s,...i])}var od=p(()=>{"use strict";M()});function pY(e){let t=e.trim().match(/\/pull\/(\d+)(?:$|[?#])/i);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function Nh(e){let t=JA(e.rows,e.canonicalPrUrl),r=[],n=[];for(let o of t){let s=pY(o);if(!s){n.push({prUrl:o,detail:"could not parse PR number from URL"});continue}let i=`Superseded by ${e.canonicalPrUrl} (harness task retry dedupe).`,a=e.exec.gh(e.worktreePath,["pr","close",String(s),"--repo",e.repo,"--comment",i]);a.status===0?r.push(o):n.push({prUrl:o,detail:a.stderr||a.stdout||a.error||"gh pr close failed"})}return{closed:r,failed:n}}var Dh=p(()=>{"use strict";od()});function YA(e,t,r,n){let o=r.trim();if(!o||!t.trim())return null;let s=n.gh(e,["api",`repos/${t}/commits/${o}/pulls`]);if(s.status!==0||!s.stdout)return null;try{let l=JSON.parse(s.stdout).filter(c=>c.merged_at&&c.html_url?.trim()).sort((c,u)=>(typeof c.number=="number"?c.number:Number.MAX_SAFE_INTEGER)-(typeof u.number=="number"?u.number:Number.MAX_SAFE_INTEGER))[0];return l?.html_url?.trim()?{prUrl:l.html_url.trim(),number:typeof l.number=="number"?l.number:null}:null}catch{return null}}var zA=p(()=>{"use strict"});function fY(e){return e.gh(process.cwd(),["--version"]).status===0}function mY(e,t){return`AgentOS harness: ${e} (${t})`}function gY(e,t,r){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${t}\` \xB7 run \`${r}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
158
+ `)}function Lh(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function hY(e){return Lh(e.prUrlHint)??MA(e.status.finalResult)??Lh(e.worker.taskPrUrl)??null}function yY(e){let{snapshot:t,canonical:r,workerName:n,exec:o}=e,s=!1,i=!1,a=t.headCommit??eo(t.worktreePath,o)??void 0;if(t.changedFiles.length>0){let l=Pa({worktreePath:t.worktreePath,branch:t.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,hasDirtyFiles:!0,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."};s=l.committed,i=l.pushed,a=l.headCommit??a}if(r.headRefName!==t.branch){let l=KA({worktreePath:t.worktreePath,remoteBranch:r.headRefName,exec:o});if(!l.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${l.detail??"git push to canonical PR branch failed"}`,nextAction:"Push worker commits to the canonical PR branch, then rerun `kynver worker complete`."};i=!0,a=eo(t.worktreePath,o)??a}return{ok:!0,prUrl:r.url,headCommit:a,committed:s,pushed:i}}function Mh(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??eo(e.snapshot.worktreePath,e.exec)??void 0};let t=Pa({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return t.ok?{ok:!0,prUrl:e.prUrl,headCommit:t.headCommit??e.snapshot.headCommit??void 0,committed:t.committed,pushed:t.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${t.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Bh(e,t=rd){let r=hY(e),n=BA(e.status,{prUrl:r,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!LA({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:r,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:t,worker:e.worker,snapshot:n}).required)return r?Mh({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t}):{ok:!0};if(r)return Mh({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t});if(!fY(t)){let v=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${v?`${v} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=$A(n.worktreePath,t);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let v=!1,S=!1,_=n.headCommit??eo(n.worktreePath,t)??void 0;if(n.changedFiles.length>0){let R=Pa({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:t});if(!R.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${R.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};v=R.committed,S=R.pushed,_=R.headCommit??_}else{let R=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(R.status!==0&&!/already up to date/i.test(R.stderr||R.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${R.stderr||R.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};S=R.status===0}return{ok:!0,prUrl:a,headCommit:_,committed:v,pushed:S}}let l=Lh(e.worker.taskId),c=[];if(l){c=Th(n.worktreePath,i,l,t);let v=GA(c);if(v){let S=yY({snapshot:n,canonical:v,workerName:e.worker.name,exec:t});return S.ok&&S.prUrl&&Nh({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:S.prUrl,exec:t}),S}}let u=td(n.worktreePath,i,n.branch,t);if(u)return Mh({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t});let d=n.changedFiles.length>0,f=!1,m=!1,g=n.headCommit??void 0,h=Pa({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:d,exec:t});if(d&&!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(d){if(f=h.committed,m=h.pushed,!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let v=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(v.status!==0&&!/already up to date/i.test(v.stderr||v.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${v.stderr||v.stdout||v.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};m=v.status===0}g=h.headCommit??g??eo(n.worktreePath,t)??void 0;let y=g?YA(n.worktreePath,i,g,t):null;if(y)return{ok:!0,prUrl:y.prUrl,headCommit:g,committed:f,pushed:m,created:!1};let b=e.run.base?.trim()||"main",k=HA({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:mY(e.worker.name,e.worker.runId),body:gY(e.worker.taskId,e.worker.name,e.worker.runId),exec:t});if(!k.ok||!k.prUrl){if(NA(k.detail))return{ok:!0,headCommit:g??void 0,committed:f,pushed:m};let v=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${v?`${v} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${k.detail?` (${k.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}if(l&&k.prUrl){let S=[...c.length>0?c:Th(n.worktreePath,i,l,t),{url:k.prUrl,number:Number.parseInt(k.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];Nh({worktreePath:n.worktreePath,repo:i,rows:S,canonicalPrUrl:k.prUrl,exec:t})}return{ok:!0,prUrl:k.prUrl,headCommit:g??void 0,committed:f,pushed:m,created:k.created}}var XA=p(()=>{"use strict";Oh();od();Dh();nd();zA()});var QA=p(()=>{"use strict";OA();Oh();nd();od();Dh();XA()});import kY from"node:path";function Wh(e){clearInterval(Uh.get(e)),Uh.delete(e)}function Fh(e,t){if(Wh(e),!Ta.has(e))return;let r=setInterval(()=>{($(kY.join(e,"worker.json"),null)?.completionReportedAt||!oe(t))&&Cs(e)},1e3);r.unref(),Uh.set(e,r)}function $h(e,t){Wh(e);let r=Ta.get(e);r&&r.close(),Ta.set(e,t)}async function Zr(e){Wh(e);let t=Ta.get(e);return t?(Ta.delete(e),await t.close(),!0):!1}function Cs(e){Zr(e).catch(()=>{})}var Ta,Uh,Kh=p(()=>{"use strict";M();Ta=new Map,Uh=new Map});import{appendFileSync as bY,existsSync as eI,mkdirSync as tI,readFileSync as vY,rmSync as ZA,writeFileSync as RY}from"node:fs";import Er from"node:path";function nI(e){return Er.join(e,rI)}function wY(e){return ue(e,["ls-files","--error-unmatch",rI.split(Er.sep).join("/")],{allowFailure:!0}).trim().length>0}function SY(e){let t=ue(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Er.isAbsolute(t)?t:Er.join(e,t),n=Er.join(r,"info","exclude"),o=".cursor/mcp.json";try{tI(Er.dirname(n),{recursive:!0});let s=eI(n)?vY(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;bY(n,`${s.endsWith(`
159
159
  `)||!s?"":`
160
160
  `}${o}
161
- `)}catch{}}function CA(e){if(Nq(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let t=xA(e.worktreePath);SA(Cr.dirname(t),{recursive:!0});let r={mcpServers:{[ye]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Nt]:e.brokerSocketPath}}}};return Tq(t,`${JSON.stringify(r,null,2)}
162
- `,{mode:384}),Dq(e.worktreePath),{ok:!0,configPath:t}}function Vu(e){let t=xA(e);if(!wA(t))return!1;try{RA(t,{force:!0});let r=Cr.dirname(t);return RA(r,{recursive:!1}),!0}catch{return!0}}var _A,vh=p(()=>{"use strict";we();Sr();ot();_A=Cr.join(".cursor","mcp.json")});import{copyFileSync as Mq,existsSync as Gu,mkdirSync as Lq,readFileSync as Bq,rmSync as Wq,symlinkSync as Uq,writeFileSync as Fq}from"node:fs";import{spawnSync as Kq}from"node:child_process";import{homedir as $q}from"node:os";import zr from"node:path";function EA(e){return zr.join(e,Hq)}function jq(e=process.env){let t=e.CODEX_HOME?.trim();if(t)return zr.resolve(t);let r=$q();for(let n of[zr.join(r,".codex"),zr.join(r,".config","codex")])if(Gu(n))return n;return null}function Vq(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${ye}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${ye}.env]`,`${Nt} = ${JSON.stringify(e)}`,""].join(`
163
- `)}function Gq(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${ye}"?\s*[\].]`,"m").test(e)}function AA(e){let t=jq(e.env??process.env),r=t?zr.join(t,"config.toml"):null,n=r&&Gu(r)?Bq(r,"utf8"):"";if(n&&Gq(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${ye}" MCP server \u2014 refusing to write a duplicate stanza`};let o=EA(e.workerDir);Lq(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
161
+ `)}catch{}}function oI(e){if(wY(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .cursor/mcp.json \u2014 refusing to modify a tracked file in the worker's worktree"};let t=nI(e.worktreePath);tI(Er.dirname(t),{recursive:!0});let r={mcpServers:{[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Dt]:e.brokerSocketPath}}}};return RY(t,`${JSON.stringify(r,null,2)}
162
+ `,{mode:384}),SY(e.worktreePath),{ok:!0,configPath:t}}function sd(e){let t=nI(e);if(!eI(t))return!1;try{ZA(t,{force:!0});let r=Er.dirname(t);return ZA(r,{recursive:!1}),!0}catch{return!0}}var rI,Hh=p(()=>{"use strict";_e();_r();it();rI=Er.join(".cursor","mcp.json")});import{copyFileSync as _Y,existsSync as id,mkdirSync as xY,readFileSync as CY,rmSync as EY,symlinkSync as AY,writeFileSync as IY}from"node:fs";import{spawnSync as PY}from"node:child_process";import{homedir as OY}from"node:os";import en from"node:path";function sI(e){return en.join(e,TY)}function NY(e=process.env){let t=e.CODEX_HOME?.trim();if(t)return en.resolve(t);let r=OY();for(let n of[en.join(r,".codex"),en.join(r,".config","codex")])if(id(n))return n;return null}function DY(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${be}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${be}.env]`,`${Dt} = ${JSON.stringify(e)}`,""].join(`
163
+ `)}function MY(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${be}"?\s*[\].]`,"m").test(e)}function iI(e){let t=NY(e.env??process.env),r=t?en.join(t,"config.toml"):null,n=r&&id(r)?CY(r,"utf8"):"";if(n&&MY(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${be}" MCP server \u2014 refusing to write a duplicate stanza`};let o=sI(e.workerDir);xY(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
164
164
  `)?"":`
165
- `;return Fq(zr.join(o,"config.toml"),`${n}${s}${Vq(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:Jq(t,o)}}function Jq(e,t){let r=e?zr.join(e,"auth.json"):null;if(!r||!Gu(r))return"none";let n=zr.join(t,"auth.json");try{return Uq(r,n,"file"),"symlink"}catch{try{return Mq(r,n),"copy"}catch{return"none"}}}function _a(e){let t=EA(e);if(!Gu(t))return!1;try{return Wq(t,{recursive:!0,force:!0}),!0}catch{return!1}}function PA(e,t,r=1e4){try{let[n,o]=ae(t,["--version"]),s=Kq(n,o,{env:{...process.env,CODEX_HOME:e},encoding:"utf8",timeout:r,windowsHide:!0});return s.error&&s.error.code==="ENOENT"?{ok:!0}:s.status===0?{ok:!0}:{ok:!1,detail:(s.stderr||s.stdout||`exit ${s.status??"unknown"}`).toString().replace(/\s+/g," ").trim().slice(0,200)}}catch{return{ok:!0}}}var Hq,Rh=p(()=>{"use strict";qe();Sr();ot();Hq="codex-home"});import{appendFileSync as qq,existsSync as wh,mkdirSync as OA,readFileSync as TA,rmSync as IA,writeFileSync as Yq}from"node:fs";import Er from"node:path";function DA(e){return Er.join(e,NA)}function zq(e){return ce(e,["ls-files","--error-unmatch",NA.split(Er.sep).join("/")],{allowFailure:!0}).trim().length>0}function Xq(e){if(!wh(e))return{};try{let t=JSON.parse(TA(e,"utf8"));if(!t||typeof t!="object"||Array.isArray(t))return{};let r=t.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?{}:r}catch{return{}}}function Qq(e){let t=ce(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Er.isAbsolute(t)?t:Er.join(e,t),n=Er.join(r,"info","exclude"),o=".agents/mcp_config.json";try{OA(Er.dirname(n),{recursive:!0});let s=wh(n)?TA(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;qq(n,`${s.endsWith(`
165
+ `;return IY(en.join(o,"config.toml"),`${n}${s}${DY(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:LY(t,o)}}function LY(e,t){let r=e?en.join(e,"auth.json"):null;if(!r||!id(r))return"none";let n=en.join(t,"auth.json");try{return AY(r,n,"file"),"symlink"}catch{try{return _Y(r,n),"copy"}catch{return"none"}}}function Na(e){let t=sI(e);if(!id(t))return!1;try{return EY(t,{recursive:!0,force:!0}),!0}catch{return!1}}function aI(e,t,r=1e4){try{let[n,o]=le(t,["--version"]),s=PY(n,o,{env:{...process.env,CODEX_HOME:e},encoding:"utf8",timeout:r,windowsHide:!0});return s.error&&s.error.code==="ENOENT"?{ok:!0}:s.status===0?{ok:!0}:{ok:!1,detail:(s.stderr||s.stdout||`exit ${s.status??"unknown"}`).toString().replace(/\s+/g," ").trim().slice(0,200)}}catch{return{ok:!0}}}var TY,jh=p(()=>{"use strict";ze();_r();it();TY="codex-home"});import{appendFileSync as BY,existsSync as Vh,mkdirSync as cI,readFileSync as uI,rmSync as lI,writeFileSync as UY}from"node:fs";import Ar from"node:path";function pI(e){return Ar.join(e,dI)}function WY(e){return ue(e,["ls-files","--error-unmatch",dI.split(Ar.sep).join("/")],{allowFailure:!0}).trim().length>0}function FY(e){if(!Vh(e))return{};try{let t=JSON.parse(uI(e,"utf8"));if(!t||typeof t!="object"||Array.isArray(t))return{};let r=t.mcpServers;return!r||typeof r!="object"||Array.isArray(r)?{}:r}catch{return{}}}function $Y(e){let t=ue(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Ar.isAbsolute(t)?t:Ar.join(e,t),n=Ar.join(r,"info","exclude"),o=".agents/mcp_config.json";try{cI(Ar.dirname(n),{recursive:!0});let s=Vh(n)?uI(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;BY(n,`${s.endsWith(`
166
166
  `)||!s?"":`
167
167
  `}${o}
168
- `)}catch{}}function MA(e){if(zq(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let t=DA(e.worktreePath),r=Xq(t);if(ye in r)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${ye}" server \u2014 refusing to overwrite it`};OA(Er.dirname(t),{recursive:!0});let n={mcpServers:{...r,[ye]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Nt]:e.brokerSocketPath}}}};return Yq(t,`${JSON.stringify(n,null,2)}
169
- `,{mode:384}),Qq(e.worktreePath),{ok:!0,configPath:t}}function Ju(e){let t=DA(e);if(!wh(t))return!1;try{return IA(t,{force:!0}),IA(Er.dirname(t),{recursive:!1}),!0}catch{return!0}}var NA,Sh=p(()=>{"use strict";we();Sr();ot();NA=Er.join(".agents","mcp_config.json")});import{copyFileSync as Zq,existsSync as _h,mkdirSync as eY,readFileSync as tY,rmSync as rY,symlinkSync as nY,writeFileSync as oY}from"node:fs";import{homedir as sY}from"node:os";import Ar from"node:path";function LA(e){return Ar.join(e,iY)}function aY(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||sY()}function lY(e=process.env){let t=e.GEMINI_CLI_HOME?.trim();return t?Ar.join(Ar.resolve(t),".gemini"):Ar.join(aY(e),".gemini")}function cY(e){if(!_h(e))return{};try{let t=JSON.parse(tY(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function uY(e){let t=e.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?!1:ye in t}function dY(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function pY(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Nt]:e},trust:!0}}function BA(e){let t=e.env??process.env,r=lY(t),n=cY(Ar.join(r,"settings.json"));if(uY(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${ye}" MCP server \u2014 refusing to write a duplicate stanza`};let o=LA(e.workerDir),s=Ar.join(o,".gemini");eY(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...dY(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[ye]:pY(e.brokerSocketPath)}};return oY(Ar.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
170
- `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:fY(r,s)}}function fY(e,t){let r=["oauth_creds.json","google_accounts.json"],n="none";for(let o of r){let s=Ar.join(e,o);if(!_h(s))continue;let i=Ar.join(t,o);try{nY(s,i,"file"),n==="none"&&(n="symlink")}catch{try{Zq(s,i),n="copy"}catch{}}}return n}function qu(e){let t=LA(e);if(!_h(t))return!1;try{return rY(t,{recursive:!0,force:!0}),!0}catch{return!1}}var iY,xh=p(()=>{"use strict";Sr();ot();iY="gemini-home"});import mY from"node:path";function WA(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function hY(e){if(typeof e=="string"){let t=e.trim();return t.length?t:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,r=t.summary??t.finalSummary??t.message;if(typeof r=="string"&&r.trim())return r.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Xr(e){let t=e.finalResult??null,r=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:hY(t);return{finalResult:t??r??"completed",summary:r}}function Yu(e,t,r){if(WA(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Xr(t),s=r?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),X(e.runId,e),e.workerDir&&(ws(e.workerDir),ku(e.workerDir),_a(e.workerDir),qu(e.workerDir)),e.worktreePath&&(Vu(e.worktreePath),Ju(e.worktreePath))}function yY(e){let t=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return t;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&t.set(o.id,s)}return t}function UA(e,t,r={}){let n=yY(t);if(n.size===0)return[];let o=ne(e),s=[];for(let i of Object.keys(o.workers||{})){let a=F(mY.join(j(o.id),"workers",B(i),"worker.json"),void 0);if(!a?.taskId||WA(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!gY.has(l))continue;let c=ie(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=th(o.id,a,"board_task_cancelled","board task cancelled",r);u=!!(d.workerSignal||d.sidecarSignal)}Yu(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}var gY,zu=p(()=>{"use strict";Y();Ce();M();ot();bh();vh();Rh();Sh();xh();Rs();gY=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"])});function Xu(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function kY(e){let t=e.lastHeartbeatPhase?.trim();if(!t||t==="complete")return null;let r=e.lastHeartbeatSummary?.trim();return r?{summary:r,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:t,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function bY(e){let t=wi(e);return t?{summary:t.reason,handoffState:"exit_failure",blocked:t.blocked}:null}function vY(e){let t=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${t}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:t,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function Qu(e){let{worker:t,status:r}=e;if(Xu(r.finalResult)){let u=Ie(t.heartbeatPath),d=ar(u),f=Xu(d)&&JSON.stringify(d)===JSON.stringify(r.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:r.finalResult,source:f,snapshot:Xr(r)}}if(r.alive)return null;let n=Rn(t.stdoutPath);if(Xu(n.finalResult)){let u={...r,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:Xr(u)}}let o=Ie(t.heartbeatPath),s=ar(o);if(Xu(s)){let u={...r,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:Xr(u)}}let i=bY(r.error??n.error);if(i){let u={...r,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:Xr(u)}}let a=kY(o);if(a){let u={...r,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:Xr(u)}}let l=vY({status:r,heartbeat:o}),c={...r,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:Xr(c)}}function Zu(e,t){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=t.snapshot,e.completionHandoffSource=t.source,!0)}var Ch=p(()=>{"use strict";vn();Lf();zu();Ri()});function ed(e){return e.filter(t=>{let r=t.trim(),n=r.startsWith("??")?r.slice(2).trim():r.length>3?r.slice(3).trim():r;return n!=="node_modules"&&!n.startsWith("node_modules/")})}function FA(e){let t=e.trim();return t.startsWith("??")?t.slice(2).trim():t.length>3&&/^[ MADRCU?!]{2} /.test(t.slice(0,3))?t.slice(3).trim():t}var Eh=p(()=>{"use strict"});function KA(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function $A(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function jA(e){let t=$A(e);if(!t)return[];let r=$A(t.worktreeHandoff),n=KA(r?.disposableArtifactsRemoved);return n.length?n:KA(t.disposableArtifactsRemoved)}function HA(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function VA(e,t){let r=ed(e);if(r.length===0)return!0;if(t.length===0)return!1;let n=new Set(t.map(o=>HA(o)));return r.every(o=>{let s=HA(FA(o));return n.has(s)})}var GA=p(()=>{"use strict";Eh()});function td(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function JA(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function RY(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function wY(e){let t=JA(e.disposableArtifactsRemoved),r=jA(e.finalResult);return[...new Set([...t,...r])]}function qA(e){let t=JA(e.changedFiles),r=ed(t),n=wY(e),o=r.length===0||VA(t,n);return td(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:td(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:td(e.artifactBundlePath)||td(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:RY(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with no final result`}}var YA=p(()=>{"use strict";GA();Eh()});function Pr(e=process.env){return br(e).flags.dispatchReceipts}function Ah(e){return Pr(e)!=="off"}function Ph(e,t){return`dispatch:${e}:${t.taskId}:${t.leaseToken}`}function Ca(e,t,r){if(!Ah())return;let n=ue();if(n)try{n.recordOperationReceipt({idempotencyKey:Ph(e,t),operation:`dispatch-${e}`,resultJson:r===void 0?null:JSON.stringify(r)})}catch{st.storeFailures+=1}}function XA(e){Ca("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function rd(e){Ca("spawned",e)}function Ss(e,t){Ca("released",e,{reasonClass:t})}function QA(e){Ca("completion-sent",e)}function Ih(e,t){Ca("completion-acked",e,{outcome:t})}function ZA(e){if(!Ah())return!1;let t=ue();if(!t)return!1;try{let r=t.getOperationReceipt(Ph("completion-acked",e));if(r){let n=null;try{n=r.resultJson?JSON.parse(r.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return st.completionReplaysObserved+=1,!0}}catch{st.storeFailures+=1}return!1}function Oh(e){let t=String(e??"").split(":")[0]?.trim()??"";return t.length>0?t.slice(0,64):"unknown"}function eP(e){if(Pr()!=="enforce")return!1;let t=ue();if(!t)return!1;try{let r=t.getOperationReceipt(Ph("completion-acked",e));if(!r)return!1;let n=null;try{n=r.resultJson?JSON.parse(r.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(st.completionReplaysShortCircuited+=1,!0):!1}catch{return st.storeFailures+=1,!1}}function tP(e,t){if(Pr()!=="enforce")return;let r=ue();if(r)try{r.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${t}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:t})})}catch{st.storeFailures+=1}}function rP(e,t){if(Pr()!=="enforce")return[];let r=ue();if(!r)return[];let n=t?.nowMs??Date.now(),o=t?.windowMs??SY;try{return r.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return st.storeFailures+=1,[]}}function xa(e){let t=e.split(":")[0]??"",r=Number(t);return Number.isInteger(r)&&r>=0?r:null}function nP(e){let t={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Ah())return t;let r=ue();if(!r)return t;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??_Y;try{let s=r.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-zA).toISOString(),limit:CY}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let f=r.getOperationReceipt(`dispatch:spawned:${u}`),m=r.getOperationReceipt(`dispatch:released:${u}`);if(f||m){n-d>=xY&&a.length+5<=EY&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let g=u.split(":")[0]??"",h=xa(u.slice(g.length+1));if((g?r.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${g}:`,limit:10}):[]).some(b=>{if(h===null)return!0;let _=b.idempotencyKey.slice(`dispatch:completion-acked:${g}:`.length),S=xa(_);return S===null||S>=h}))continue;let k=!1;if(e?.hasLiveWorker&&c.resultJson)try{let b=JSON.parse(c.resultJson);b.runId&&b.workerName&&(k=e.hasLiveWorker({runId:b.runId,workerName:b.workerName}))}catch{k=!1}k||(i+=1)}let l=a.length>0?r.deleteOperationReceiptsByKeys(a):0;if(Pr()==="enforce"){let c=r.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=zA}).map(u=>u.idempotencyKey);if(c.length>0){let u=r.deleteOperationReceiptsByKeys(c);l+=u,st.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return st.storeFailures+=1,t}}function oP(){return{"dispatchReceipts.storeFailures":st.storeFailures,"dispatchReceipts.completionReplaysObserved":st.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":st.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":st.agedReceiptsPruned}}var st,SY,_Y,zA,xY,CY,EY,_s=p(()=>{"use strict";Jr();ls();st={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};SY=600*1e3;_Y=900*1e3,zA=10080*60*1e3,xY=1440*60*1e3,CY=500,EY=300});function sP(){Nh=!1}function Ir(e=process.env){return br(e).flags.admission}function nd(e,t){return`${Th}${e}:${t}`}function iP(e,t){if(Ir()==="off")return;let r=ue();if(r)try{r.tryReserveAdmission(nd(e,t),Dh,xs)}catch{Qr.storeFailures+=1}}function Ea(e,t){if(Ir()==="off")return;let r=ue();if(r)try{r.releaseAdmission(nd(e,t),Dh)}catch{Qr.storeFailures+=1}}function aP(e){let t={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ir()==="off")return t;let r=ue();if(!r)return t;try{let n=new Set(e.liveWorkers.map(f=>nd(f.runId,f.workerName))),o=r.listAdmissionReservations({keyPrefix:Th,limit:500}),s=new Set(o.map(f=>f.key)),i=[...n].filter(f=>!s.has(f)).length,a=o.filter(f=>!n.has(f.key)).length,l=!Nh;Nh=!0,!l&&i>0&&(Qr.missingForLive+=i);let c=0;for(let f of e.liveWorkers)r.tryReserveAdmission(nd(f.runId,f.workerName),Dh,xs),c+=1;let u=0;for(let f of o)n.has(f.key)||r.releaseAdmission(f.key,f.owner)&&(u+=1,Qr.deadSlotsReleased+=1);return{liveReservations:r.listAdmissionReservations({keyPrefix:Th,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return Qr.storeFailures+=1,t}}function lP(){return{"admission.storeFailures":Qr.storeFailures,"admission.missingForLive":Qr.missingForLive,"admission.deadSlotsReleased":Qr.deadSlotsReleased}}var xs,Dh,Th,Qr,Nh,zn=p(()=>{"use strict";Jr();ls();xs=900*1e3,Dh="admission-shadow",Th="worker-slot:",Qr={storeFailures:0,missingForLive:0,deadSlotsReleased:0},Nh=!1});function cP(e){return`${Mh}${e}`}function sd(e,t){return`${e}:${t}`}function uP(e){if(Ir()!=="enforce")return{admitted:!0};let t=ue();if(!t)return{admitted:!0};let r=Math.max(0,Math.min(od,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=r)return Zr.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=sd(e.runId,e.workerName);for(let o=0;o<r;o+=1)if(t.tryReserveAdmission(cP(o),n,xs).acquired)return{admitted:!0,slot:o};return Zr.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Zr.enforceStoreFailures+=1,{admitted:!0}}}function en(e,t){if(Ir()==="off")return;let r=ue();if(r)try{let n=sd(e,t),o=r.listAdmissionReservations({keyPrefix:Mh,limit:od});for(let s of o)s.owner===n&&r.releaseAdmission(s.key,n)}catch{Zr.enforceStoreFailures+=1}}function dP(e){let t={refreshed:0,deadReleased:0,adopted:0};if(Ir()!=="enforce")return t;let r=ue();if(!r)return t;try{let n=new Set(e.liveWorkers.map(c=>sd(c.runId,c.workerName))),o=r.listAdmissionReservations({keyPrefix:Mh,limit:od}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(r.tryReserveAdmission(c.key,c.owner,xs),a.add(c.owner),s+=1):r.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=sd(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<od;d+=1)if(r.tryReserveAdmission(cP(d),u,xs).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Zr.enforceStoreFailures+=1,t}}function pP(){return{"admission.enforceStoreFailures":Zr.enforceStoreFailures,"admission.refusedSlotsExhausted":Zr.admissionsRefusedSlots,"admission.refusedDiskBackstop":Zr.admissionsRefusedDiskBackstop}}var Mh,od,Zr,Cs=p(()=>{"use strict";Jr();zn();Mh="worker-slot-n:",od=64;Zr={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0}});import AY from"node:path";function Lh(e){let t=e.trim();if(!PY.test(t))throw new Error(`invalid run id: ${e}`);return t}function OY(e){let t=e.trim();if(!IY.test(t))throw new Error(`invalid worker name: ${e}`);return t}function gP(e){return typeof e=="string"?e.trim():""}function id(e){let t=gP(e.run),r=gP(e.name);return(!t||fP.has(t))&&lt(`missing --run RUN_ID (${mP})`),(!r||fP.has(r))&&lt(`missing --name WORKER_NAME (${mP})`),{runId:Lh(t),workerName:OY(r)}}function hP(e){let t=AY.resolve(e);if(t.includes(".."))throw new Error("repo path must not contain .. segments");return t}var PY,IY,fP,mP,ad=p(()=>{"use strict";M();PY=/^[a-z0-9][a-z0-9._-]{0,127}$/i,IY=/^[a-z0-9][a-z0-9._-]{0,63}$/i,fP=new Set(["undefined","null"]),mP="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME"});import{existsSync as TY,mkdirSync as NY,readFileSync as DY,writeFileSync as MY}from"node:fs";import{homedir as LY}from"node:os";import yP from"node:path";function KY(e){let t=e?.trim();return!!(t&&BY.test(t))}function $Y(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function Bh(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(FY,Math.max(UY,e)):WY}function kP(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||yP.join(LY(),".kynver","provider-quota-cooldowns.json")}function Aa(e){return(e??"").trim().toLowerCase()}function Wh(){let e=kP();if(!TY(e))return{};try{let t=JSON.parse(DY(e,"utf8"));if(!t||typeof t!="object"||Array.isArray(t))return{};let r={};for(let[n,o]of Object.entries(t)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(r[Aa(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return r}catch{return{}}}function Uh(e){let t=kP();try{NY(yP.dirname(t),{recursive:!0}),MY(t,`${JSON.stringify(e,null,2)}
171
- `,"utf8")}catch{}}function HY(e,t,r=Date.now()){let n=Aa(e);if(!n)return;let o=Wh();o[n]={lastExhaustedAt:new Date(r).toISOString(),reason:t.trim().slice(0,500)},Uh(o),K_(n,Bh()*6e4)}function jY(e){let t=Aa(e);if(!t)return!1;$_(t);let r=Wh();return t in r?(delete r[t],Uh(r),!0):!1}function bP(e,t=Date.now()){if(!$Y())return{ok:!0};let r=Aa(e);if(!r)return{ok:!0};let n=Wh(),o=n[r],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+Bh()*6e4>t),i=H_(r,s);if(i)return i.blocked?{ok:!1,provider:r,reason:`provider "${r}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(t).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+Bh()*6e4;if(!Number.isFinite(a)||l<=t)return delete n[r],Uh(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:r,reason:`provider "${r}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function VY(e){if(typeof e=="string"){let t=e.trim();return t.length?t:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e;for(let r of["result","summary","error"]){let n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function vP(e){let t=Aa(e.provider);if(!t)return"none";let r=VY(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return r?KY(r)?(HY(t,r,e.nowMs??Date.now()),"recorded"):jY(t)?"cleared":"none":"none"}var BY,WY,UY,FY,Fh=p(()=>{"use strict";Gi();BY=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,WY=30,UY=5,FY=240});function RP(e){let t=e.usage;return!t||t.inputTokens===void 0&&t.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:t.model?.trim()||e.model?.trim()||null,inputTokens:t.inputTokens??null,outputTokens:t.outputTokens??null}}var wP=p(()=>{"use strict"});import cd from"node:path";async function SP(e,t,r){let n=await fetch(e,{method:"POST",headers:It(t),body:JSON.stringify(r)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function GY(e){if(e&&typeof e=="object"){let t=e.error;if(typeof t=="string"&&t.trim())return t.trim()}}function _P(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Pa(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function JY(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function qY(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function CP(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function YY(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Es(e,t){(e.completionBlocker??void 0)!==(t??void 0)&&(t?e.completionBlocker=t:delete e.completionBlocker,X(e.runId,e))}function zY(e){e.completionBlocker&&(delete e.completionBlocker,X(e.runId,e))}function ld(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function XY(e,t){return{...e,...t.prUrl?{prUrl:t.prUrl}:{},...t.headCommit?{headCommit:t.headCommit}:{}}}async function As(e){let{runId:t,workerName:r}=id(e),n=On(t,r),o=ne(n.runId),s=ie(n,ld(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Be(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&ba(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&oh(n)&&zY(n),!s.finalResult&&s.alive===!1){let w=Qu({worker:n,status:s});w&&Zu(n,w)&&(X(n.runId,n),n=On(t,r),s=ie(n,ld(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let w=mh({worker:n,run:o,status:s});if(!w.ok)return Es(n,w.reason),{ok:!1,reason:w.reason,nextAction:w.nextAction,completionBlocked:!0};(w.prUrl||w.headCommit)&&(s=ie(n,ld(o)),s=XY(s,w))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let w=qA({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!w.allowed){let L=w.detail??`worktree completion blocked (${w.state})`;return Es(n,L),{ok:!1,reason:L,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{vP({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=pe(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await me(f,i,{baseUrl:d});a&&(await Tu({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=On(t,r));let g=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,h={...s};n.disposableArtifactsRemoved?.length&&(h.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(h.steerRestartRequired=!0,h.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(h.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let y=RP({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),v={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...y?{workerUsage:y}:{},status:n.leaseToken?{...h,leaseToken:n.leaseToken}:h,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},k=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(k){if(ZA(k),eP(k)){let w={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return Bu(n,n.runId,w),Yu(n,s,{source:"harness-completion"}),Es(n,void 0),Ea(n.runId,n.name),en(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}QA(k)}let b=await SP(g,m,v);if((b.status===401||b.status===403)&&!f){let w=await iS(i,{baseUrl:d});w&&w!==m&&(m=w,b=await SP(g,m,v))}if(b.ok){let w=zE(b.parsed);if(!XE(w)){let W=`completion acknowledged but board not advanced: ${w.detail??(w.routeOutcome?`harness completion returned ${w.routeOutcome}`:"harness completion did not advance the linked task")}`;Es(n,W);let D={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:b.parsed};return Bu(n,n.runId,D),k&&Ih(k,"rejected"),{ok:!1,httpStatus:b.status,response:b.parsed,reason:W,completionBlocked:!0}}Es(n,void 0);let L=w.routeOutcome??"acknowledged",N={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:b.parsed};Bu(n,n.runId,N),Yu(n,s,{source:"harness-completion"}),k&&Ih(k,"acknowledged"),Ea(n.runId,n.name),en(n.runId,n.name);let A=s.prUrl;return{ok:!0,httpStatus:b.status,response:b.parsed,reason:L,...A?{prHandoff:{prUrl:A}}:{}}}let _=b.status===401||b.status===403,S=GY(b.parsed)??(_?"runner token unauthorized":"non-2xx response"),R=_?`completion replay rejected (${b.status}): ${S}`:`completion replay failed (${b.status}): ${S}`;return Es(n,R),{ok:!1,httpStatus:b.status,response:b.parsed,completionBlocked:!0}}async function EP(e){try{let{runId:t,workerName:r}=id(e),n=On(t,r),o=ne(n.runId),s=ie(n,ld(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Be(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await As(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(t){console.error(`worker complete failed: ${t.message}`),process.exit(1)}}function AP(e){let{run:t,workerName:r,worker:n}=e,o=ie(n,{base:t.base,baseCommit:t.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Mo({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=CP(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=_P(n.completionResponse),m=_P(f?.task),g=Pa(f?.outcome),h=Pa(f?.status),y=Array.isArray(f?.warnings)?f.warnings.filter(R=>typeof R=="string"&&R.trim().length>0):[],v=Pa(m?.prUrl)??Pa(f?.prUrl),k=Pa(n.completionReportedAt),b=JY({finished:Be(o),completionBlocker:c,completionOutcome:g,completionReportedAt:k}),_=qY({completionBlocker:c,completionOutcome:g,completionReportedAt:k,finished:Be(o)}),S=YY({changedFiles:o.changedFiles,headCommit:s,prUrl:v??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let R=n.instructionPolicyEvidence;if(!R||typeof R!="object")return null;let w=R.ruleSlugs;return Array.isArray(w)?w.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:v,handoffState:S,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:b,completionReportedAt:k,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:g,completionWarnings:y,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:_,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function QY(e){let t=typeof e.status=="string"?e.status:"",r=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return r&&!CP(r)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:t==="done"}function ZY(e,t){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof t.pid=="number"?t.pid:void 0,branch:typeof t.branch=="string"?t.branch:void 0,taskId:t.taskId??null,planId:t.planId??null,model:typeof t.model=="string"?t.model:void 0,routingRule:typeof t.routingRule=="string"?t.routingRule:void 0,requestedModel:typeof t.requestedModel=="string"?t.requestedModel:void 0,lifecycleStage:t.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof t.completionReportedAt=="string"?t.completionReportedAt:null,completionOutcome:t.completionOutcome??null,localOnly:t.localOnly===!0,compactStatus:!0}}function Ia(e,t){let r={};for(let n of e){let o=n[t],s=typeof o=="string"&&o.trim()?o:"unknown";r[s]=(r[s]??0)+1}return r}function xP(e){if(e.attention!=="blocked")return!1;let t=typeof e.attentionReason=="string"?e.attentionReason:"";return t.includes("cli-config.json.tmp")||t.includes("Invalid authentication credentials")||t.includes("provider CLI is missing or not on PATH")||t.includes("unknown command:")}function ez(e){let t=e.filter(xP),r=e.filter(n=>{if(xP(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:r.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:t.length,systemHealthBlockers:t.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:r.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function PP(e,t,r){let n={runId:e.id,name:e.name,status:nc(e.status,t),repo:e.repo,workerCount:t.length,needsAttention:t.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:t};return r&&(n.summary={statusCounts:Ia(t,"status"),attentionCounts:Ia(t,"attention"),lifecycleCounts:Ia(t,"lifecycleStage")},n.controller=ez(t)),n}function tz(e){return e.status==="done"&&e.attention==="done"}function Kh(e){let t=ne(e),n=Object.keys(t.workers||{}).map(s=>{let i=F(cd.join(j(t.id),"workers",B(s),"worker.json"),void 0);return i?AP({run:t,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=PP(t,n,!1);return be(cd.join(j(t.id),"last-board.json"),o),o}function $h(e){let t=ne(e),n=Object.keys(t.workers||{}).map(i=>{let a=F(cd.join(j(t.id),"workers",B(i),"worker.json"),void 0);return a?QY(a)?ZY(i,a):AP({run:t,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!tz(i)),s=PP(t,o,!0);return s.status=nc(t.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Ia(n,"status"),allAttentionCounts:Ia(n,"attention")},be(cd.join(j(t.id),"last-board-compact.json"),s),s}async function IP(e,t){let r=String(e.run||""),n=String(e.agentOsId||"");if(!r||!n)return null;let o=Kh(r),s=pe(e.baseUrl?String(e.baseUrl):void 0),i=await me(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await de(a,i,{agentOsId:n,runId:r,source:t,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}var Ps=p(()=>{"use strict";$();Rs();as();QE();Fe();Y();Ql();vA();Ce();Ch();Ri();YA();nh();Wu();_s();zn();Cs();zu();M();ad();Qg();Fh();wP()});var OP=p(()=>{"use strict";Fe();Y();Rs();M()});import{spawn as rz}from"node:child_process";import{existsSync as nz,openSync as oz,closeSync as TP}from"node:fs";import sz from"node:path";function NP(e){let t=e.nodeExecutable??process.execPath,r=Ru({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:t});if(!r)return;let n=r.cliPath;if(!nz(n))return;let o=sz.join(e.workerDir,"auto-complete.log"),s;try{s=oz(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...r.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=rz(r.command,a,z({detached:Re(),stdio:i,env:process.env}));return s!==void 0&&TP(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{TP(s)}catch{}return}}var Bve,DP=p(()=>{"use strict";M();Wu();Y();Ce();Ps();M();ad();jg();$();OP();Bve=360*60*1e3});var MP=p(()=>{"use strict"});function LP(e,t,r){ce(e,["fetch","origin",r,"--prune"],{allowFailure:!0});let n=`origin/${r}`,o=ee(e,["worktree","add","-B",r,t,n]);if(o.status===0)return;let s=ee(e,["worktree","add","-b",r,t,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}var BP=p(()=>{"use strict";we()});import{createHash as iz}from"node:crypto";import{chmodSync as az,mkdirSync as lz}from"node:fs";import WP from"node:os";import cz from"node:path";function UP(e,t){return iz("sha256").update(e).digest("hex").slice(0,t)}function Hh(e){let t=e.platform??process.platform,r=UP(e.agentOsId,12),n=UP(e.workerKey,16);if(t==="win32")return{socketPath:`${dz}kynver-worker-${r}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=cz.posix,s=e.homeDir??WP.homedir(),i=o.join(s,".kynver","brokers",r),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=uz)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??WP.tmpdir(),`kynver-brokers-${r}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function jh(e){e.socketDir&&(lz(e.socketDir,{recursive:!0,mode:448}),az(e.socketDir,448))}var uz,dz,Vh=p(()=>{"use strict";uz=100,dz="\\\\.\\pipe\\"});import pz from"node:net";import{chmodSync as fz,unlinkSync as mz}from"node:fs";var Oa,HP=p(()=>{"use strict";Sr();Su();Vh();ot();Oa=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(t){if(typeof t.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=t,this.now=t.now??Date.now,this.fetchImpl=t.fetchImpl??fetch,this.grantedTools=ia(t.capabilities),this.server=pz.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(t){let r=new e(t);if(jh(t.address),await new Promise((n,o)=>{r.server.once("error",o),r.server.listen(t.address.socketPath,()=>{r.server.removeListener("error",o),n()})}),!t.address.isNamedPipe)try{fz(t.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(bs).map(t=>da[t])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let t of this.sockets)t.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(t=>this.server.close(()=>t())),!this.opts.address.isNamedPipe)try{mz(this.opts.address.socketPath)}catch{}}}refuse(t,r){this.opts.onRefusal?.(t,r)}async handleConnection(t){this.sockets.add(t),t.on("close",()=>{this.sockets.delete(t),this.connections.delete(t)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(t,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),t.end();return}this.connections.add(t);let r=await this.opts.identity.verify({socket:t,workerPid:this.opts.workerPid});if(!r.ok){this.refuse("identity_refused",r.detail),this.write(t,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),t.end();return}let n="";t.setEncoding("utf8"),t.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(t,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),t.end();return}let s=n.indexOf(`
168
+ `)}catch{}}function fI(e){if(WY(e.worktreePath))return{ok:!1,reason:"repo_owns_config",detail:"the repository tracks .agents/mcp_config.json \u2014 refusing to modify a tracked file in the worker's worktree"};let t=pI(e.worktreePath),r=FY(t);if(be in r)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${be}" server \u2014 refusing to overwrite it`};cI(Ar.dirname(t),{recursive:!0});let n={mcpServers:{...r,[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Dt]:e.brokerSocketPath}}}};return UY(t,`${JSON.stringify(n,null,2)}
169
+ `,{mode:384}),$Y(e.worktreePath),{ok:!0,configPath:t}}function ad(e){let t=pI(e);if(!Vh(t))return!1;try{return lI(t,{force:!0}),lI(Ar.dirname(t),{recursive:!1}),!0}catch{return!0}}var dI,Gh=p(()=>{"use strict";_e();_r();it();dI=Ar.join(".agents","mcp_config.json")});import{copyFileSync as KY,existsSync as Jh,mkdirSync as HY,readFileSync as jY,rmSync as VY,symlinkSync as GY,writeFileSync as JY}from"node:fs";import{homedir as qY}from"node:os";import Ir from"node:path";function mI(e){return Ir.join(e,YY)}function zY(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||qY()}function XY(e=process.env){let t=e.GEMINI_CLI_HOME?.trim();return t?Ir.join(Ir.resolve(t),".gemini"):Ir.join(zY(e),".gemini")}function QY(e){if(!Jh(e))return{};try{let t=JSON.parse(jY(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function ZY(e){let t=e.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?!1:be in t}function ez(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function tz(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Dt]:e},trust:!0}}function gI(e){let t=e.env??process.env,r=XY(t),n=QY(Ir.join(r,"settings.json"));if(ZY(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${be}" MCP server \u2014 refusing to write a duplicate stanza`};let o=mI(e.workerDir),s=Ir.join(o,".gemini");HY(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...ez(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[be]:tz(e.brokerSocketPath)}};return JY(Ir.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
170
+ `,{mode:384}),{ok:!0,geminiCliHome:o,authMode:rz(r,s)}}function rz(e,t){let r=["oauth_creds.json","google_accounts.json"],n="none";for(let o of r){let s=Ir.join(e,o);if(!Jh(s))continue;let i=Ir.join(t,o);try{GY(s,i,"file"),n==="none"&&(n="symlink")}catch{try{KY(s,i),n="copy"}catch{}}}return n}function ld(e){let t=mI(e);if(!Jh(t))return!1;try{return VY(t,{recursive:!0,force:!0}),!0}catch{return!1}}var YY,qh=p(()=>{"use strict";_r();it();YY="gemini-home"});import nz from"node:path";function hI(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function sz(e){if(typeof e=="string"){let t=e.trim();return t.length?t:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,r=t.summary??t.finalSummary??t.message;if(typeof r=="string"&&r.trim())return r.trim();try{return JSON.stringify(e)}catch{return null}}return null}function tn(e){let t=e.finalResult??null,r=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:sz(t);return{finalResult:t??r??"completed",summary:r}}function cd(e,t,r){if(hI(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=tn(t),s=r?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),ee(e.runId,e),e.workerDir&&(Cs(e.workerDir),Tu(e.workerDir),Na(e.workerDir),ld(e.workerDir)),e.worktreePath&&(sd(e.worktreePath),ad(e.worktreePath))}function iz(e){let t=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return t;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&t.set(o.id,s)}return t}function yI(e,t,r={}){let n=iz(t);if(n.size===0)return[];let o=se(e),s=[];for(let i of Object.keys(o.workers||{})){let a=$(nz.join(q(o.id),"workers",L(i),"worker.json"),void 0);if(!a?.taskId||hI(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!oz.has(l))continue;let c=ae(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=_h(o.id,a,"board_task_cancelled","board task cancelled",r);u=!!(d.workerSignal||d.sidecarSignal)}cd(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}var oz,ud=p(()=>{"use strict";Q();Ae();M();it();Kh();Hh();jh();Gh();qh();xs();oz=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"])});function dd(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"&&!Array.isArray(e)?Object.keys(e).length>0:!0}function az(e){let t=e.lastHeartbeatPhase?.trim();if(!t||t==="complete")return null;let r=e.lastHeartbeatSummary?.trim();return r?{summary:r,handoffState:"exited_without_complete_heartbeat",lastHeartbeatPhase:t,...e.heartbeatBlocker?{blocker:e.heartbeatBlocker}:{}}:null}function lz(e){let t=Oi(e);return t?{summary:t.reason,handoffState:"exit_failure",blocked:t.blocked}:null}function cz(e){let t=e.status.attention.reason?.trim()||e.status.error?.trim()||"process exited without a final result";return{summary:`Worker exited with an error: ${t}`,handoffState:"exited_without_final_result",blocked:!0,attentionState:e.status.attention.state,attentionReason:t,...e.heartbeat.lastHeartbeatPhase?{lastHeartbeatPhase:e.heartbeat.lastHeartbeatPhase}:{},...e.heartbeat.lastHeartbeatSummary?{lastHeartbeatSummary:e.heartbeat.lastHeartbeatSummary}:{},...e.heartbeat.heartbeatBlocker?{blocker:e.heartbeat.heartbeatBlocker}:{}}}function pd(e){let{worker:t,status:r}=e;if(dd(r.finalResult)){let u=Oe(t.heartbeatPath),d=lr(u),f=dd(d)&&JSON.stringify(d)===JSON.stringify(r.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:r.finalResult,source:f,snapshot:tn(r)}}if(r.alive)return null;let n=Cn(t.stdoutPath);if(dd(n.finalResult)){let u={...r,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:tn(u)}}let o=Oe(t.heartbeatPath),s=lr(o);if(dd(s)){let u={...r,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:tn(u)}}let i=lz(r.error??n.error);if(i){let u={...r,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:tn(u)}}let a=az(o);if(a){let u={...r,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:tn(u)}}let l=cz({status:r,heartbeat:o}),c={...r,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:tn(c)}}function fd(e,t){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=t.snapshot,e.completionHandoffSource=t.source,!0)}var Yh=p(()=>{"use strict";xn();sm();ud();Pi()});function md(e){return e.filter(t=>{let r=t.trim(),n=r.startsWith("??")?r.slice(2).trim():r.length>3?r.slice(3).trim():r;return n!=="node_modules"&&!n.startsWith("node_modules/")})}function kI(e){let t=e.trim();return t.startsWith("??")?t.slice(2).trim():t.length>3&&/^[ MADRCU?!]{2} /.test(t.slice(0,3))?t.slice(3).trim():t}var zh=p(()=>{"use strict"});function bI(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function vI(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function wI(e){let t=vI(e);if(!t)return[];let r=vI(t.worktreeHandoff),n=bI(r?.disposableArtifactsRemoved);return n.length?n:bI(t.disposableArtifactsRemoved)}function RI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function SI(e,t){let r=md(e);if(r.length===0)return!0;if(t.length===0)return!1;let n=new Set(t.map(o=>RI(o)));return r.every(o=>{let s=RI(kI(o));return n.has(s)})}var _I=p(()=>{"use strict";zh()});function gd(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function xI(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function uz(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function dz(e){let t=xI(e.disposableArtifactsRemoved),r=wI(e.finalResult);return[...new Set([...t,...r])]}function CI(e){let t=xI(e.changedFiles),r=md(t),n=dz(e),o=r.length===0||SI(t,n);return gd(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:gd(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:gd(e.artifactBundlePath)||gd(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:uz(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:r.length,detail:`Worktree has ${r.length} uncommitted change(s) with no final result`}}var EI=p(()=>{"use strict";_I();zh()});function Pr(e=process.env){return vr(e).flags.dispatchReceipts}function Xh(e){return Pr(e)!=="off"}function Qh(e,t){return`dispatch:${e}:${t.taskId}:${t.leaseToken}`}function Ma(e,t,r){if(!Xh())return;let n=de();if(n)try{n.recordOperationReceipt({idempotencyKey:Qh(e,t),operation:`dispatch-${e}`,resultJson:r===void 0?null:JSON.stringify(r)})}catch{at.storeFailures+=1}}function II(e){Ma("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function hd(e){Ma("spawned",e)}function Es(e,t){Ma("released",e,{reasonClass:t})}function PI(e){Ma("completion-sent",e)}function Zh(e,t){Ma("completion-acked",e,{outcome:t})}function OI(e){if(!Xh())return!1;let t=de();if(!t)return!1;try{let r=t.getOperationReceipt(Qh("completion-acked",e));if(r){let n=null;try{n=r.resultJson?JSON.parse(r.resultJson).outcome??null:null}catch{n=null}if(n==="acknowledged")return at.completionReplaysObserved+=1,!0}}catch{at.storeFailures+=1}return!1}function ey(e){let t=String(e??"").split(":")[0]?.trim()??"";return t.length>0?t.slice(0,64):"unknown"}function TI(e){if(Pr()!=="enforce")return!1;let t=de();if(!t)return!1;try{let r=t.getOperationReceipt(Qh("completion-acked",e));if(!r)return!1;let n=null;try{n=r.resultJson?JSON.parse(r.resultJson).outcome??null:null}catch{n=null}return n==="acknowledged"?(at.completionReplaysShortCircuited+=1,!0):!1}catch{return at.storeFailures+=1,!1}}function NI(e,t){if(Pr()!=="enforce")return;let r=de();if(r)try{r.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${t}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:t})})}catch{at.storeFailures+=1}}function DI(e,t){if(Pr()!=="enforce")return[];let r=de();if(!r)return[];let n=t?.nowMs??Date.now(),o=t?.windowMs??pz;try{return r.listOperationReceipts({operation:"dispatch-start-failed",recordedAfter:new Date(n-o).toISOString(),limit:200}).filter(s=>{try{return s.resultJson?JSON.parse(s.resultJson).runId===e:!1}catch{return!1}}).map(s=>{let i=s.idempotencyKey.slice(22);return i.slice(0,i.length-(e.length+1))}).filter(s=>s.length>0)}catch{return at.storeFailures+=1,[]}}function Da(e){let t=e.split(":")[0]??"",r=Number(t);return Number.isInteger(r)&&r>=0?r:null}function MI(e){let t={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Xh())return t;let r=de();if(!r)return t;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??fz;try{let s=r.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-AI).toISOString(),limit:gz}),i=0,a=[];for(let c of s){let u=c.idempotencyKey.slice(15),d=Date.parse(c.recordedAt);if(!Number.isFinite(d)||n-d<o)continue;let f=r.getOperationReceipt(`dispatch:spawned:${u}`),m=r.getOperationReceipt(`dispatch:released:${u}`);if(f||m){n-d>=mz&&a.length+5<=hz&&a.push(c.idempotencyKey,`dispatch:spawned:${u}`,`dispatch:released:${u}`,`dispatch:completion-sent:${u}`,`dispatch:completion-acked:${u}`);continue}let g=u.split(":")[0]??"",h=Da(u.slice(g.length+1));if((g?r.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${g}:`,limit:10}):[]).some(v=>{if(h===null)return!0;let S=v.idempotencyKey.slice(`dispatch:completion-acked:${g}:`.length),_=Da(S);return _===null||_>=h}))continue;let k=!1;if(e?.hasLiveWorker&&c.resultJson)try{let v=JSON.parse(c.resultJson);v.runId&&v.workerName&&(k=e.hasLiveWorker({runId:v.runId,workerName:v.workerName}))}catch{k=!1}k||(i+=1)}let l=a.length>0?r.deleteOperationReceiptsByKeys(a):0;if(Pr()==="enforce"){let c=r.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=AI}).map(u=>u.idempotencyKey);if(c.length>0){let u=r.deleteOperationReceiptsByKeys(c);l+=u,at.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return at.storeFailures+=1,t}}function LI(){return{"dispatchReceipts.storeFailures":at.storeFailures,"dispatchReceipts.completionReplaysObserved":at.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":at.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":at.agedReceiptsPruned}}var at,pz,fz,AI,mz,gz,hz,As=p(()=>{"use strict";Xr();ps();at={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};pz=600*1e3;fz=900*1e3,AI=10080*60*1e3,mz=1440*60*1e3,gz=500,hz=300});function BI(){ry=!1}function Or(e=process.env){return vr(e).flags.admission}function yd(e,t){return`${ty}${e}:${t}`}function UI(e,t){if(Or()==="off")return;let r=de();if(r)try{r.tryReserveAdmission(yd(e,t),ny,Is)}catch{rn.storeFailures+=1}}function La(e,t){if(Or()==="off")return;let r=de();if(r)try{r.releaseAdmission(yd(e,t),ny)}catch{rn.storeFailures+=1}}function WI(e){let t={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Or()==="off")return t;let r=de();if(!r)return t;try{let n=new Set(e.liveWorkers.map(f=>yd(f.runId,f.workerName))),o=r.listAdmissionReservations({keyPrefix:ty,limit:500}),s=new Set(o.map(f=>f.key)),i=[...n].filter(f=>!s.has(f)).length,a=o.filter(f=>!n.has(f.key)).length,l=!ry;ry=!0,!l&&i>0&&(rn.missingForLive+=i);let c=0;for(let f of e.liveWorkers)r.tryReserveAdmission(yd(f.runId,f.workerName),ny,Is),c+=1;let u=0;for(let f of o)n.has(f.key)||r.releaseAdmission(f.key,f.owner)&&(u+=1,rn.deadSlotsReleased+=1);return{liveReservations:r.listAdmissionReservations({keyPrefix:ty,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return rn.storeFailures+=1,t}}function FI(){return{"admission.storeFailures":rn.storeFailures,"admission.missingForLive":rn.missingForLive,"admission.deadSlotsReleased":rn.deadSlotsReleased}}var Is,ny,ty,rn,ry,to=p(()=>{"use strict";Xr();ps();Is=900*1e3,ny="admission-shadow",ty="worker-slot:",rn={storeFailures:0,missingForLive:0,deadSlotsReleased:0},ry=!1});function $I(e){return`${oy}${e}`}function bd(e,t){return`${e}:${t}`}function KI(e){if(Or()!=="enforce")return{admitted:!0};let t=de();if(!t)return{admitted:!0};let r=Math.max(0,Math.min(kd,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=r)return nn.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=bd(e.runId,e.workerName);for(let o=0;o<r;o+=1)if(t.tryReserveAdmission($I(o),n,Is).acquired)return{admitted:!0,slot:o};return nn.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return nn.enforceStoreFailures+=1,{admitted:!0}}}function on(e,t){if(Or()==="off")return;let r=de();if(r)try{let n=bd(e,t),o=r.listAdmissionReservations({keyPrefix:oy,limit:kd});for(let s of o)s.owner===n&&r.releaseAdmission(s.key,n)}catch{nn.enforceStoreFailures+=1}}function HI(e){let t={refreshed:0,deadReleased:0,adopted:0};if(Or()!=="enforce")return t;let r=de();if(!r)return t;try{let n=new Set(e.liveWorkers.map(c=>bd(c.runId,c.workerName))),o=r.listAdmissionReservations({keyPrefix:oy,limit:kd}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(r.tryReserveAdmission(c.key,c.owner,Is),a.add(c.owner),s+=1):r.releaseAdmission(c.key,c.owner)&&(i+=1);let l=0;for(let c of e.liveWorkers){let u=bd(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<kd;d+=1)if(r.tryReserveAdmission($I(d),u,Is).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return nn.enforceStoreFailures+=1,t}}function jI(){return{"admission.enforceStoreFailures":nn.enforceStoreFailures,"admission.refusedSlotsExhausted":nn.admissionsRefusedSlots,"admission.refusedDiskBackstop":nn.admissionsRefusedDiskBackstop}}var oy,kd,nn,Ps=p(()=>{"use strict";Xr();to();oy="worker-slot-n:",kd=64;nn={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0}});import yz from"node:path";function sy(e){let t=e.trim();if(!kz.test(t))throw new Error(`invalid run id: ${e}`);return t}function vz(e){let t=e.trim();if(!bz.test(t))throw new Error(`invalid worker name: ${e}`);return t}function JI(e){return typeof e=="string"?e.trim():""}function vd(e){let t=JI(e.run),r=JI(e.name);return(!t||VI.has(t))&&ut(`missing --run RUN_ID (${GI})`),(!r||VI.has(r))&&ut(`missing --name WORKER_NAME (${GI})`),{runId:sy(t),workerName:vz(r)}}function qI(e){let t=yz.resolve(e);if(t.includes(".."))throw new Error("repo path must not contain .. segments");return t}var kz,bz,VI,GI,Rd=p(()=>{"use strict";M();kz=/^[a-z0-9][a-z0-9._-]{0,127}$/i,bz=/^[a-z0-9][a-z0-9._-]{0,63}$/i,VI=new Set(["undefined","null"]),GI="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME"});import{existsSync as Rz,mkdirSync as wz,readFileSync as Sz,writeFileSync as _z}from"node:fs";import{homedir as xz}from"node:os";import YI from"node:path";function Pz(e){let t=e?.trim();return!!(t&&Cz.test(t))}function Oz(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function iy(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(Iz,Math.max(Az,e)):Ez}function zI(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||YI.join(xz(),".kynver","provider-quota-cooldowns.json")}function Ba(e){return(e??"").trim().toLowerCase()}function ay(){let e=zI();if(!Rz(e))return{};try{let t=JSON.parse(Sz(e,"utf8"));if(!t||typeof t!="object"||Array.isArray(t))return{};let r={};for(let[n,o]of Object.entries(t)){if(!o||typeof o!="object")continue;let{lastExhaustedAt:s,reason:i}=o;typeof s!="string"||!Number.isFinite(Date.parse(s))||(r[Ba(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return r}catch{return{}}}function ly(e){let t=zI();try{wz(YI.dirname(t),{recursive:!0}),_z(t,`${JSON.stringify(e,null,2)}
171
+ `,"utf8")}catch{}}function Tz(e,t,r=Date.now()){let n=Ba(e);if(!n)return;let o=ay();o[n]={lastExhaustedAt:new Date(r).toISOString(),reason:t.trim().slice(0,500)},ly(o),bx(n,iy()*6e4)}function Nz(e){let t=Ba(e);if(!t)return!1;vx(t);let r=ay();return t in r?(delete r[t],ly(r),!0):!1}function XI(e,t=Date.now()){if(!Oz())return{ok:!0};let r=Ba(e);if(!r)return{ok:!0};let n=ay(),o=n[r],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+iy()*6e4>t),i=Rx(r,s);if(i)return i.blocked?{ok:!1,provider:r,reason:`provider "${r}" is inside its local quota cooldown`+(i.retryAtIso?` \u2014 preflight declines spawn until ${i.retryAtIso}`:""),retryAtIso:i.retryAtIso??new Date(t).toISOString()}:{ok:!0};if(!o)return{ok:!0};let a=Date.parse(o.lastExhaustedAt),l=a+iy()*6e4;if(!Number.isFinite(a)||l<=t)return delete n[r],ly(n),{ok:!0};let c=new Date(l).toISOString();return{ok:!1,provider:r,reason:`provider "${r}" reported quota exhaustion at ${o.lastExhaustedAt} \u2014 local preflight declines spawn until ${c}`+(o.reason?` (${o.reason.slice(0,160)})`:""),retryAtIso:c}}function Dz(e){if(typeof e=="string"){let t=e.trim();return t.length?t:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e;for(let r of["result","summary","error"]){let n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function QI(e){let t=Ba(e.provider);if(!t)return"none";let r=Dz(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return r?Pz(r)?(Tz(t,r,e.nowMs??Date.now()),"recorded"):Nz(t)?"cleared":"none":"none"}var Cz,Ez,Az,Iz,cy=p(()=>{"use strict";ta();Cz=/\b(out of usage|increase limits?|switch to auto|ask your admin to increase your limit|(?:hit|reached|exceeded|over) (?:your |the )?usage limits?|usage limits? (?:hit|reached|exceeded)|exceeded your (?:current )?quota|quota (?:exceeded|exhausted)|insufficient_quota|insufficient (?:credits?|quota)|credits? exhausted|credit balance is too low|billing hard limit|check your plan and billing|402 payment required|provider quota exhausted|provider_quota_exhausted)\b/i,Ez=30,Az=5,Iz=240});function ZI(e){let t=e.usage;return!t||t.inputTokens===void 0&&t.outputTokens===void 0?null:{provider:e.provider?.trim()||"unknown",model:t.model?.trim()||e.model?.trim()||null,inputTokens:t.inputTokens??null,outputTokens:t.outputTokens??null}}var eP=p(()=>{"use strict"});import Sd from"node:path";async function tP(e,t,r){let n=await fetch(e,{method:"POST",headers:Ot(t),body:JSON.stringify(r)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function Mz(e){if(e&&typeof e=="object"){let t=e.error;if(typeof t=="string"&&t.trim())return t.trim()}}function rP(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ua(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Lz(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function Bz(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function oP(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function Uz(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Os(e,t){(e.completionBlocker??void 0)!==(t??void 0)&&(t?e.completionBlocker=t:delete e.completionBlocker,ee(e.runId,e))}function Wz(e){e.completionBlocker&&(delete e.completionBlocker,ee(e.runId,e))}function wd(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function Fz(e,t){return{...e,...t.prUrl?{prUrl:t.prUrl}:{},...t.headCommit?{headCommit:t.headCommit}:{}}}async function Ts(e){let{runId:t,workerName:r}=vd(e),n=Ln(t,r),o=se(n.runId),s=ae(n,wd(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!We(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Aa(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Eh(n)&&Wz(n),!s.finalResult&&s.alive===!1){let w=pd({worker:n,status:s});w&&fd(n,w)&&(ee(n.runId,n),n=Ln(t,r),s=ae(n,wd(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let w=Bh({worker:n,run:o,status:s});if(!w.ok)return Os(n,w.reason),{ok:!1,reason:w.reason,nextAction:w.nextAction,completionBlocked:!0};(w.prUrl||w.headCommit)&&(s=ae(n,wd(o)),s=Fz(s,w))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let w=CI({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!w.allowed){let B=w.detail??`worktree completion blocked (${w.state})`;return Os(n,B),{ok:!1,reason:B,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{QI({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=me(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await ye(f,i,{baseUrl:d});a&&(await Gu({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Ln(t,r));let g=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,h={...s};n.disposableArtifactsRemoved?.length&&(h.disposableArtifactsRemoved=n.disposableArtifactsRemoved),n.steerRestartRequired&&(h.steerRestartRequired=!0,h.pendingSteerEventIds=n.pendingSteerEventIds??[],n.dispatchSteerFenceEventId!=null&&(h.dispatchSteerFenceEventId=n.dispatchSteerFenceEventId));let y=ZI({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),...y?{workerUsage:y}:{},status:n.leaseToken?{...h,leaseToken:n.leaseToken}:h,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},k=a&&n.leaseToken?{taskId:a,leaseToken:n.leaseToken}:null;if(k){if(OI(k),TI(k)){let w={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return Xu(n,n.runId,w),cd(n,s,{source:"harness-completion"}),Os(n,void 0),La(n.runId,n.name),on(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}PI(k)}let v=await tP(g,m,b);if((v.status===401||v.status===403)&&!f){let w=await US(i,{baseUrl:d});w&&w!==m&&(m=w,v=await tP(g,m,b))}if(v.ok){let w=AA(v.parsed);if(!IA(w)){let U=`completion acknowledged but board not advanced: ${w.detail??(w.routeOutcome?`harness completion returned ${w.routeOutcome}`:"harness completion did not advance the linked task")}`;Os(n,U);let N={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:v.parsed};return Xu(n,n.runId,N),k&&Zh(k,"rejected"),{ok:!1,httpStatus:v.status,response:v.parsed,reason:U,completionBlocked:!0}}Os(n,void 0);let B=w.routeOutcome??"acknowledged",j={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:v.parsed};Xu(n,n.runId,j),cd(n,s,{source:"harness-completion"}),k&&Zh(k,"acknowledged"),La(n.runId,n.name),on(n.runId,n.name);let O=s.prUrl;return{ok:!0,httpStatus:v.status,response:v.parsed,reason:B,...O?{prHandoff:{prUrl:O}}:{}}}let S=v.status===401||v.status===403,_=Mz(v.parsed)??(S?"runner token unauthorized":"non-2xx response"),R=S?`completion replay rejected (${v.status}): ${_}`:`completion replay failed (${v.status}): ${_}`;return Os(n,R),{ok:!1,httpStatus:v.status,response:v.parsed,completionBlocked:!0}}async function sP(e){try{let{runId:t,workerName:r}=vd(e),n=Ln(t,r),o=se(n.runId),s=ae(n,wd(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!We(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await Ts(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(t){console.error(`worker complete failed: ${t.message}`),process.exit(1)}}function iP(e){let{run:t,workerName:r,worker:n}=e,o=ae(n,{base:t.base,baseCommit:t.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Wo({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=oP(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=rP(n.completionResponse),m=rP(f?.task),g=Ua(f?.outcome),h=Ua(f?.status),y=Array.isArray(f?.warnings)?f.warnings.filter(R=>typeof R=="string"&&R.trim().length>0):[],b=Ua(m?.prUrl)??Ua(f?.prUrl),k=Ua(n.completionReportedAt),v=Lz({finished:We(o),completionBlocker:c,completionOutcome:g,completionReportedAt:k}),S=Bz({completionBlocker:c,completionOutcome:g,completionReportedAt:k,finished:We(o)}),_=Uz({changedFiles:o.changedFiles,headCommit:s,prUrl:b??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let R=n.instructionPolicyEvidence;if(!R||typeof R!="object")return null;let w=R.ruleSlugs;return Array.isArray(w)?w.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:b,handoffState:_,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:v,completionReportedAt:k,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:g,completionWarnings:y,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:S,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function $z(e){let t=typeof e.status=="string"?e.status:"",r=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return r&&!oP(r)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:t==="done"}function Kz(e,t){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof t.pid=="number"?t.pid:void 0,branch:typeof t.branch=="string"?t.branch:void 0,taskId:t.taskId??null,planId:t.planId??null,model:typeof t.model=="string"?t.model:void 0,routingRule:typeof t.routingRule=="string"?t.routingRule:void 0,requestedModel:typeof t.requestedModel=="string"?t.requestedModel:void 0,lifecycleStage:t.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof t.completionReportedAt=="string"?t.completionReportedAt:null,completionOutcome:t.completionOutcome??null,localOnly:t.localOnly===!0,compactStatus:!0}}function Wa(e,t){let r={};for(let n of e){let o=n[t],s=typeof o=="string"&&o.trim()?o:"unknown";r[s]=(r[s]??0)+1}return r}function nP(e){if(e.attention!=="blocked")return!1;let t=typeof e.attentionReason=="string"?e.attentionReason:"";return t.includes("cli-config.json.tmp")||t.includes("Invalid authentication credentials")||t.includes("provider CLI is missing or not on PATH")||t.includes("unknown command:")}function Hz(e){let t=e.filter(nP),r=e.filter(n=>{if(nP(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:r.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:t.length,systemHealthBlockers:t.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:r.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function aP(e,t,r){let n={runId:e.id,name:e.name,status:yc(e.status,t),repo:e.repo,workerCount:t.length,needsAttention:t.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:t};return r&&(n.summary={statusCounts:Wa(t,"status"),attentionCounts:Wa(t,"attention"),lifecycleCounts:Wa(t,"lifecycleStage")},n.controller=Hz(t)),n}function jz(e){return e.status==="done"&&e.attention==="done"}function uy(e){let t=se(e),n=Object.keys(t.workers||{}).map(s=>{let i=$(Sd.join(q(t.id),"workers",L(s),"worker.json"),void 0);return i?iP({run:t,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=aP(t,n,!1);return Re(Sd.join(q(t.id),"last-board.json"),o),o}function dy(e){let t=se(e),n=Object.keys(t.workers||{}).map(i=>{let a=$(Sd.join(q(t.id),"workers",L(i),"worker.json"),void 0);return a?$z(a)?Kz(i,a):iP({run:t,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!jz(i)),s=aP(t,o,!0);return s.status=yc(t.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Wa(n,"status"),allAttentionCounts:Wa(n,"attention")},Re(Sd.join(q(t.id),"last-board-compact.json"),s),s}async function lP(e,t){let r=String(e.run||""),n=String(e.agentOsId||"");if(!r||!n)return null;let o=uy(r),s=me(e.baseUrl?String(e.baseUrl):void 0),i=await ye(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await fe(a,i,{agentOsId:n,runId:r,source:t,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}var Ns=p(()=>{"use strict";K();xs();ds();PA();Ke();Q();pc();QA();Ae();Yh();Pi();EI();Ch();Qu();As();to();Ps();ud();M();Rd();Rh();cy();eP()});var cP=p(()=>{"use strict";Ke();Q();xs();M()});import{spawn as Vz}from"node:child_process";import{existsSync as Gz,openSync as Jz,closeSync as uP}from"node:fs";import qz from"node:path";function dP(e){let t=e.nodeExecutable??process.execPath,r=Mu({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:t});if(!r)return;let n=r.cliPath;if(!Gz(n))return;let o=qz.join(e.workerDir,"auto-complete.log"),s;try{s=Jz(o,"a")}catch{s=void 0}let i=["ignore",s??"ignore",s??"ignore"],a=[...r.argsPrefix,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&a.push("--agent-os-id",e.agentOsId),e.baseUrl&&a.push("--base-url",e.baseUrl),e.secret&&a.push("--secret",e.secret);try{let l=Vz(r.command,a,Z({detached:Se(),stdio:i,env:process.env}));return s!==void 0&&uP(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{uP(s)}catch{}return}}var MRe,pP=p(()=>{"use strict";M();Qu();Q();Ae();Ns();M();Rd();fh();K();cP();MRe=360*60*1e3});var fP=p(()=>{"use strict"});function mP(e,t,r){ue(e,["fetch","origin",r,"--prune"],{allowFailure:!0});let n=`origin/${r}`,o=re(e,["worktree","add","-B",r,t,n]);if(o.status===0)return;let s=re(e,["worktree","add","-b",r,t,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}var gP=p(()=>{"use strict";_e()});import{createHash as Yz}from"node:crypto";import{chmodSync as zz,mkdirSync as Xz}from"node:fs";import hP from"node:os";import Qz from"node:path";function yP(e,t){return Yz("sha256").update(e).digest("hex").slice(0,t)}function py(e){let t=e.platform??process.platform,r=yP(e.agentOsId,12),n=yP(e.workerKey,16);if(t==="win32")return{socketPath:`${e4}kynver-worker-${r}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=Qz.posix,s=e.homeDir??hP.homedir(),i=o.join(s,".kynver","brokers",r),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=Zz)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??hP.tmpdir(),`kynver-brokers-${r}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function fy(e){e.socketDir&&(Xz(e.socketDir,{recursive:!0,mode:448}),zz(e.socketDir,448))}var Zz,e4,my=p(()=>{"use strict";Zz=100,e4="\\\\.\\pipe\\"});import t4 from"node:net";import{chmodSync as r4,unlinkSync as n4}from"node:fs";var Fa,RP=p(()=>{"use strict";_r();Bu();my();it();Fa=class e{server;opts;now;fetchImpl;grantedTools;connections=new Set;sockets=new Set;revoked=!1;closed=!1;constructor(t){if(typeof t.identity?.verify!="function")throw new Error("WorkerBroker requires an explicit identity posture (S11) \u2014 see worker-broker/identity.ts");this.opts=t,this.now=t.now??Date.now,this.fetchImpl=t.fetchImpl??fetch,this.grantedTools=ga(t.capabilities),this.server=t4.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(t){let r=new e(t);if(fy(t.address),await new Promise((n,o)=>{r.server.once("error",o),r.server.listen(t.address.socketPath,()=>{r.server.removeListener("error",o),n()})}),!t.address.isNamedPipe)try{r4(t.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Ss).map(t=>va[t])}async revoke(){this.revoked=!0,await this.close()}async close(){if(!this.closed){this.closed=!0;for(let t of this.sockets)t.destroy();if(this.sockets.clear(),this.connections.clear(),await new Promise(t=>this.server.close(()=>t())),!this.opts.address.isNamedPipe)try{n4(this.opts.address.socketPath)}catch{}}}refuse(t,r){this.opts.onRefusal?.(t,r)}async handleConnection(t){this.sockets.add(t),t.on("close",()=>{this.sockets.delete(t),this.connections.delete(t)});for(let o of this.connections)(o.destroyed||o.readableEnded)&&this.connections.delete(o);if(this.connections.size>=1){this.refuse("concurrent_connection","a second concurrent connection was attempted while the worker's own connection was open"),this.write(t,{id:"",ok:!1,reason:"concurrent_connection",error:"worker tools are already in use for this task"}),t.end();return}this.connections.add(t);let r=await this.opts.identity.verify({socket:t,workerPid:this.opts.workerPid});if(!r.ok){this.refuse("identity_refused",r.detail),this.write(t,{id:"",ok:!1,reason:"identity_refused",error:"caller could not be identified as this worker"}),t.end();return}let n="";t.setEncoding("utf8"),t.on("data",o=>{if(n+=o,Buffer.byteLength(n,"utf8")>1048576){this.refuse("request_too_large","request exceeded the line cap"),this.write(t,{id:"",ok:!1,reason:"request_too_large",error:"request exceeded the maximum size"}),t.end();return}let s=n.indexOf(`
172
172
  `);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(t,i),s=n.indexOf(`
173
- `)}})}write(t,r){if(!t.destroyed)try{t.write(Lg(r))}catch{}}async handleLine(t,r){let n=Bg(r);if(!n.ok){this.refuse(n.reason,n.error),this.write(t,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(t,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(t,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(t,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!bs(o.name)){this.refuse("unknown_tool",o.name),this.write(t,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(t,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await wu({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(t,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(t,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}}});function Gh(){return jP}var jP,VP=p(()=>{"use strict";jP={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})}});var GP=p(()=>{"use strict";Sr()});var JP=p(()=>{"use strict";HP();VP();Sr();Su();GP();bh();Vh()});import{existsSync as gz,mkdirSync as hz}from"node:fs";import Is from"node:path";async function qP(e,t){let r=typeof t.name=="string"?t.name.trim():"";if(!r||r==="undefined"||r==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(t.name)})`);let n=B(r);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!t.task)throw new Error(`missing task text for worker ${n}`);let o=t.routingRule||t.requestedModel?{provider:t.provider||wr,model:t.model,rule:t.routingRule||"explicit:spawn",requestedModel:t.requestedModel??t.model}:Pu({explicitModel:t.model,explicitProvider:t.provider,explicitProviderIsOperatorOverride:!!t.provider?.trim(),configuredProvider:P().workerProvider}),s=GE(o.provider),i=o.model;if(s.preflightModel){let E=s.preflightModel(t.model);if(!E.ok)throw new Error(`model preflight failed for provider "${s.name}": ${E.note??"invalid model/provider combination"}`);E.normalized&&console.error(`[supervisor] ${n}: ${E.note}`),i=E.model}let{worktreesDir:a}=he(),l=Is.join(j(e.id),"workers",n);hz(l,{recursive:!0});let c=Is.join(a,e.id,n),u=t.repairTargetBranch?.trim()||void 0,d=u||t.branch||`agent/${e.id}/${n}`;if(gz(c))throw new Error(`worktree path already exists: ${c}`);if(ce(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)LP(e.repo,c,u);else{let E=BE({baseCommit:e.baseCommit,base:e.base,verifyRef:V=>ce(e.repo,["rev-parse","--verify","--quiet",`${V}^{commit}`],{allowFailure:!0}).trim().length>0});E.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${E.ref} (${E.source})`),e.baseCommit=ce(e.repo,["rev-parse",E.ref],{allowFailure:!0}).trim()||E.ref,Ve(e)),ce(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let f=Is.join(l,"stdout.jsonl"),m=Is.join(l,"stderr.log"),g=Is.join(l,"heartbeat.jsonl"),h=HE({task:t.task,ownedPaths:t.ownedPaths||[],worktreePath:c,heartbeatPath:g,planId:t.planId,taskId:t.taskId,instructionPolicyMarkdown:t.instructionPolicyMarkdown,memoryQualityMarkdown:t.memoryQualityPromptMarkdown??t.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:t.personaMarkdown,contextEnvelopeMarkdown:t.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:t.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:t.repairTargetPrUrl,repairTargetBranch:t.repairTargetBranch??(u||void 0)}),y=process.env.KYNVER_HARNESS_TASK_ID,v=process.env.KYNVER_HARNESS_AGENT_OS_ID;t.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(t.taskId)),t.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(t.agentOsId));let k=Fu({title:t.taskTitle,personaSlug:t.personaSlug,parentTaskId:t.parentTaskId,executorRef:t.executorRef}),b,_,S,R,w=t.workerMcpToken?.trim();if(w&&Wg(s.name)&&aa()){let E=An();E&&t.agentOsId&&t.taskId?(_={apiBaseUrl:E,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:w,capabilities:t.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let L=VC(s.name);if(w&&L&&aa()){let E=An();if(E&&t.agentOsId&&t.taskId){let V=Hh({agentOsId:String(t.agentOsId),workerKey:l}),x=await Oa.start({address:V,apiBaseUrl:E,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:w,capabilities:t.workerMcpCapabilities??null,expiresAt:t.workerMcpExpiresAt??Date.now()+yz,workerPid:process.pid,identity:Gh(),onRefusal:T=>console.error(`[supervisor] ${n}: worker tools refused a call (${T})`)});if(kh(l,x),s.name==="codex"){let T=AA({workerDir:l,brokerSocketPath:V.socketPath});if(T.ok){let U=PA(T.codexHome,xr());U.ok?(S=T.codexHome,b=S):(_a(l),await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${U.detail}); spawning with the normal environment`))}else await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`)}else if(s.name==="cursor"){let T=CA({worktreePath:c,brokerSocketPath:V.socketPath});T.ok?b=T.configPath:(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else if(s.name==="gemini"&&vs(ht())==="antigravity"){let T=MA({worktreePath:c,brokerSocketPath:V.socketPath});T.ok?b=T.configPath:(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else if(s.name==="gemini"){let T=BA({workerDir:l,brokerSocketPath:V.socketPath});T.ok?(R=T.geminiCliHome,b=R):(await Yr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${T.detail}`))}else b=JC({workerDir:l,brokerSocketPath:V.socketPath});b&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${x.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let N=t.taskId?KR($R(e.id,String(t.taskId),n)):null,A;try{A=HR(N,()=>s.start({name:n,task:t.task,ownedPaths:t.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:g,prompt:h,reviewWorker:k,executionMode:t.executionMode??"write",..._?{workerToolGrant:_}:{},...S?{codexHome:S}:{},...R?{geminiCliHome:R}:{},...b?{mcpConfigPath:b,mcpAllowedTools:jC(t.workerMcpCapabilities)}:{}}))}catch(E){throw b&&(ku(l),Vu(c),_a(l),qu(l),Ju(c),ws(l)),ce(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ce(e.repo,["branch","-D",d],{allowFailure:!0}),E}finally{y===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=y,v===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=v}let O=RE(A.model,i,s.defaultModel),W=P(),D=et(process.env,W),G=De().runnerId,Q=jo({boxKind:D.boxKind,config:W,env:process.env}),H={name:n,runId:e.id,status:"running",pid:A.pid,model:O,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:g,ownedPaths:t.ownedPaths,...t.agentOsId?{agentOsId:String(t.agentOsId)}:{},...t.taskId?{taskId:String(t.taskId)}:{},...t.planId?{planId:String(t.planId)}:{},...t.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(t.instructionPolicyFingerprint)}:{},...t.instructionPolicyEvidence?{instructionPolicyEvidence:t.instructionPolicyEvidence}:{},...t.memoryQualityCapture?{memoryQualityCapture:t.memoryQualityCapture}:{},...t.personaSlug?{personaSlug:String(t.personaSlug)}:{},...t.personaEvidence?{personaEvidence:t.personaEvidence}:{},...t.contextEnvelopeEvidence?{contextEnvelopeEvidence:t.contextEnvelopeEvidence}:{},...t.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:t.runtimeEnvelopeEvidence}:{},...t.leaseOwner?{leaseOwner:String(t.leaseOwner)}:{},...t.leaseToken?{leaseToken:String(t.leaseToken)}:{},...t.dispatched?{dispatched:!0}:{},...!t.agentOsId||!t.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...t.executorRef?{executorRef:String(t.executorRef)}:{},...t.parentTaskId?{parentTaskId:String(t.parentTaskId)}:{},...t.taskTitle?{taskTitle:String(t.taskTitle)}:{},...t.taskPrUrl?{taskPrUrl:String(t.taskPrUrl)}:{},...t.repairTargetPrUrl?{repairTargetPrUrl:String(t.repairTargetPrUrl)}:{},...t.repairTargetBranch?{repairTargetBranch:String(t.repairTargetBranch)}:{},executionMode:t.executionMode??"write",boxKind:D.boxKind,boxId:Q,runtimeId:G,startedAt:new Date().toISOString(),...N?{oomRetryHeapMb:N}:{}};if(X(e.id,H),yh(l,A.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Is.join(l,"worker.json")}},e.status="running",Ve(e),H.agentOsId&&H.taskId){let E;try{E=NP({runId:e.id,workerName:n,workerDir:l,agentOsId:H.agentOsId})}catch(V){let x=`completion sidecar failed to spawn: ${V.message}`;H.completionBlocker=x,X(e.id,H)}if(E)E.pid&&(H.completionSidecarPid=E.pid,X(e.id,H));else{let V=H.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";H.completionBlocker=V,H.completionSidecarSpawnFailedAt=new Date().toISOString(),X(e.id,H),ME(e.id,H,V)}}return H}var yz,YP=p(()=>{"use strict";Rs();Mf();we();Y();Y();WE();jE();M();lu();Bn();JE();DP();MP();BP();Le();Vo();$();ot();vh();Rh();Vn();xh();qn();Sh();JP();yr();ah();yz=7200*1e3});function kz(e,t){let r=Te(t)?.trim();return r||Pe("KYNVER_RUNNER_TOKEN",e)||Pe("OPENCLAW_RUNNER_TOKEN",e)||null}function bz(e){let t=_e()?.trim();return t||Pe("KYNVER_API_KEY",e)||Pe("KYNVER_RUNTIME_SECRET",e)||Pe("KYNVER_CRON_SECRET",e)||Pe("OPENCLAW_CRON_SECRET",e)||null}async function zP(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.timeoutMs??8e3,s=new Date(n).toISOString(),i=t.fetcher??fetch,a=kz(r,e.agentOsId),l=bz(r),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,f=Date.now();try{let m=AbortSignal.timeout(o),g=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),h=Date.now()-f,y=g.status<500;return{reachable:y,authSource:c,endpoint:d,httpStatus:g.status,responseMs:h,probedAt:s,error:y?null:`MCP endpoint returned HTTP ${g.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let g=Date.now()-f,h=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:g,probedAt:s,error:`MCP endpoint unreachable: ${h}`}}}var XP=p(()=>{"use strict";$();St()});function vz(e,t){let r=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||t.apiBaseUrl?.trim()||null;return r?or(r)??null:null}function Rz(e,t){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||t.defaultRepo?.trim()||null)??null}function wz(e,t,r){let n=e.KYNVER_HARNESS_ROOT?.trim()||t.harnessRoot?.trim()||null;return n||r||null}function QP(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.config??{},s=vz(r,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(r.KYNVER_AGENT_OS_ID??r.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=Rz(r,o),l=wz(r,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}var ZP=p(()=>{"use strict";sr()});var Ta=p(()=>{"use strict"});var Na=p(()=>{"use strict"});var qh=p(()=>{"use strict";$();Na()});var zh=p(()=>{"use strict";Ta()});import{mkdirSync as tI}from"node:fs";import{homedir as Sz,tmpdir as fwe}from"node:os";import ud from"node:path";function rI(){let e=process.env.KYNVER_STATE_ROOT;return e?ud.resolve(e):ud.join(Sz(),".kynver","state")}function dd(){return ud.join(rI(),"plan-outbox")}function _z(){return ud.join(rI(),"plan-outbox-archive")}function nI(){let e=dd(),t=_z();return tI(e,{recursive:!0}),tI(t,{recursive:!0}),{outboxDir:e,archiveDir:t}}var Da=p(()=>{"use strict"});function oI(){return{"planOutbox.storeFailures":Ma.storeFailures,"planOutbox.corruptItemsSeen":Ma.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Ma.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Ma.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Ma.halfArchivesCompleted}}var kwe,Ma,La=p(()=>{"use strict";Jr();ls();kwe=600*1e3,Ma={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0}});import{existsSync as Ez,readFileSync as Az,renameSync as wwe,readdirSync as Swe,rmSync as _we,writeFileSync as xwe,unlinkSync as Cwe}from"node:fs";import sI from"node:path";function iI(e){if(!Ez(e))return null;try{return JSON.parse(Az(e,"utf8"))}catch{return null}}function pd(e){let{outboxDir:t}=nI();return{jsonPath:sI.join(t,`${e.id}.json`),bodyPath:sI.join(t,e.bodyPath)}}var Ba=p(()=>{"use strict";La();Ta();zh();Da()});var aI=p(()=>{"use strict";Ta();Na();qh()});var Xh=p(()=>{"use strict";qh();Na();zh();Da();La();Ba();aI()});import Dz from"node:path";function Qh(e){let t=Dz.join(dd(),`${e}.json`);return iI(t)}var lI=p(()=>{"use strict";Ba();La();Xh();Da()});function Zh(e){let t=pd(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${t.jsonPath}\``,`- body: \`${t.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
174
- `)}function ey(e){let t=e.metadata&&typeof e.metadata=="object"?e.metadata:null,r=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(t&&typeof t.planPersistenceOutboxId=="string"?t.planPersistenceOutboxId:void 0);return r?{outboxId:r,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:t&&typeof t.planPersistenceOutboxPath=="string"?t.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:t&&typeof t.planPersistenceBodyPath=="string"?t.planPersistenceBodyPath:void 0}:null}var cI=p(()=>{"use strict";Ba()});var uI=p(()=>{"use strict";Ta();Xh();lI();Ba();cI();Da();Na()});function ty(e){return e?.trim()?e.trim():null}function dI(e,t){let r=ty(e.boxKind),n=ty(e.runnerId),o=ty(e.harnessRoot);return r&&r!==t.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${r}" but this host is "${t.boxKind}" \u2014 use a run under ${t.harnessRoot}`}:n&&n!==t.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${t.runnerId}"`}:o&&o!==t.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${t.harnessRoot}"`}:!r||!n||!o?(e.boxKind=t.boxKind,e.runnerId=t.runnerId,e.harnessRoot=t.harnessRoot,Ve(e),{ok:!0,stamped:!0}):{ok:!0}}var pI=p(()=>{"use strict";Y()});function fI(e=process.env){return Wt(P(),e,{requireExplicitBoxKind:!0})}function mI(e){return[...e.errors,...e.warnings].join("; ")}var gI=p(()=>{"use strict";$();Sn()});async function Wa(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,r;try{r=await de(t,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=r.response;return{released:r.ok===!0||n?.ok===!0,httpOk:r.ok===!0,transportError:!1,releaseResponse:r.response??r}}var ry=p(()=>{"use strict";Fe()});function Os(e){if(!e||typeof e!="object")return!1;let t=e;return[t.agentOsId,t.subjectTaskId,t.reviewTaskId,t.signature].every(r=>typeof r=="string"&&!!r)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(t.prUrl)&&/^[a-f0-9]{40}$/.test(t.headSha)&&/^[a-f0-9]{64}$/.test(t.reviewGenerationSha256)&&Number.isSafeInteger(t.reviewAttempt)&&t.reviewAttempt>0&&typeof t.acceptedAt=="string"&&Number.isFinite(Date.parse(t.acceptedAt))}function hI(e,t){return e.signature===t.signature&&e.agentOsId===t.agentOsId&&e.subjectTaskId===t.subjectTaskId&&e.prUrl===t.prUrl&&e.reviewTaskId===t.reviewTaskId&&e.reviewAttempt===t.reviewAttempt&&e.reviewGenerationSha256===t.reviewGenerationSha256&&e.headSha===t.headSha&&e.acceptedAt===t.acceptedAt}var ny=p(()=>{"use strict"});function tn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function kI(e){let t=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!t)return 0;let r=Date.parse(t);return Number.isFinite(r)?r:0}function bI(e){let t=Array.isArray(e)?e:[],r=new Map;for(let n of t){let o=n&&typeof n=="object"?n:{},s=tn(o),i=r.get(s);(!i||kI(o)>=kI(i))&&r.set(s,o)}return[...r.values()]}function Mz(e){let t=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",r=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return r.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(t)}function vI(e){let t=bI(e),r=[],n=[],o=[];for(let s of t){if(Mz(s)){o.push(tn(s));continue}let i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&yI.has(i))){if(i){n.push(`${tn(s)}=${i}`);continue}if(!(l&&yI.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${tn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){r.push(`${tn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){r.push(`${tn(s)}=${a}`);continue}r.push(`${tn(s)}=PENDING`)}}}return{pending:r,failed:n,ignoredActions:o}}function RI(e){return bI(e).some(r=>{let n=tn(r),o=typeof r.conclusion=="string"?r.conclusion.toUpperCase():"",s=typeof r.state=="string"?r.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}function wI(e,t){let r=e==="UNSTABLE"&&t.ignoredActions.length>0;return!Lz.has(e)&&!r?`mergeStateStatus is ${e}`:null}var yI,Lz,SI=p(()=>{"use strict";yI=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);Lz=new Set(["CLEAN","HAS_HOOKS"])});import{spawnSync as Bz}from"node:child_process";function _I(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=Bz("gh",["auth","token"],{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return{source:"missing",configured:!1,reason:typeof e.stderr=="string"&&e.stderr.trim()?e.stderr.trim():"gh auth token failed; run `gh auth login` on this machine"};let t=typeof e.stdout=="string"?e.stdout.trim():"";return t?(process.env.GH_TOKEN=t,{source:"gh-cli",configured:!0,reason:"Using local GitHub CLI auth for daemon land_pr merge"}):{source:"missing",configured:!1,reason:"gh auth token returned an empty token; run `gh auth login` on this machine"}}var xI=p(()=>{"use strict"});import{createHash as Wz,randomUUID as Uz}from"node:crypto";import{closeSync as CI,fsyncSync as EI,mkdirSync as Fz,openSync as AI,realpathSync as Kz,writeFileSync as $z}from"node:fs";import oy from"node:path";function II(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(t=>typeof t=="string"&&!!t.trim())}function PI(e,t,r,n){Fz(e,{recursive:!0,mode:448});let o=Kz(e),s=AI(oy.join(o,`${t}.${r}.json`),"wx",384);try{$z(s,JSON.stringify({...n,phase:r},null,2)+`
175
- `),EI(s)}finally{CI(s)}for(let i=o;;i=oy.dirname(i)){let a=AI(i,"r");try{EI(a)}catch(l){if(!Hz(l))throw l}finally{CI(a)}if(i===oy.dirname(i))break}}function Hz(e,t=process.platform){return t==="win32"&&e?.code==="EPERM"}function OI(e,t,r,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:Wz("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:t,invocationId:Uz(),startedAt:new Date().toISOString(),finishedAt:null,headSha:r,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return PI(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return PI(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}var TI=p(()=>{"use strict"});import{spawnSync as NI}from"node:child_process";function iy(e){return e?.trim()?["--repo",e.trim()]:[]}function DI(e){let t=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}function MI(e,t,r){let n=e.gh(t,r);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${r.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}function qz(e){let t=typeof e.title=="string"?e.title.trim():"",r=typeof e.body=="string"?e.body.trim():"",n=Gz.test(t)||Jz.test(r),o=jz.test(r),s=Vz.test(r);return n||o||s||e.vercelCheckSuccess===!0}function Yz(e){if(!qz({title:e.title,body:e.body,vercelCheckSuccess:RI(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function zz(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);let t=vI(e.statusCheckRollup);if(t.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${t.failed.join(", ")}`);if(t.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${t.pending.join(", ")}`);let r=wI(e.mergeStateStatus,t);if(r)throw new Error(`PR #${e.number} ${r}`)}function Xz(e){zz(e),Yz(e)}function Qz(e){try{return Xz(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function Zz(e,t,r,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(t,["api","-X","DELETE",`repos/${r}/git/refs/${o}`])}function e6(e,t,r){if(r?.trim())return r.trim();let n=e.gh(t,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function t6(e,t){if(!t?.trim())return;let r=NI("git",["worktree","list","--porcelain"],{windowsHide:!0,cwd:e,encoding:"utf8"});if(r.status!==0)return;let n=String(r.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${t}`)&&NI("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function LI(e){let t=e.cwd??process.cwd(),r=e.exec??$u,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!Os(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=_I();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=MI(r,t,["pr","view",n,...iy(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=Qz(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!II(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!Os(u)||!hI(o,u))return s();let d=OI(e.operation,n,o.headSha,o),f;try{f=r.gh(t,["pr","merge",c,...iy(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let y=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:y}}let m=(y,v)=>d.finish({attribution:v,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:y?.mergedAt??null,mergeCommit:y?.mergeCommit?.oid??null,mergeExitCode:f.status});if(f.status!==0){let y=sy(r,t,c,e.repo);return y?{prUrl:y.url||a.url||n,outcome:"skipped",mergeCommit:y.mergeCommit?.oid??null,provenance:m(y,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:f.stderr||f.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let g=sy(r,t,c,e.repo);if(g||(g=sy(r,t,c,e.repo)),!g)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let h=m(g,"invoked_merge_observed");try{let y=e6(r,t,e.repo);Zz(r,t,y,a.headRefName),t6(t,a.headRefName)}catch{}return{prUrl:g?.url||a.url||n,outcome:"merged",provenance:h,mergeCommit:g?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function sy(e,t,r,n){try{let o=MI(e,t,["pr","view",r,...iy(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}var jz,Vz,Gz,Jz,BI=p(()=>{"use strict";ny();Hu();SI();xI();TI();jz=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,Vz=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,Gz=/^docs[(:]/i,Jz=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i});async function WI(e){let t=e.decision.task,r=e.decision.acceptedReview,n=String(t.prUrl??"");return LI({prUrl:n,cwd:e.cwd,repo:DI(n),exec:e.exec,operation:e.operation,acceptedReview:Os(r)?r:void 0,revalidateAcceptedReview:async()=>{let o=await de(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(t.id))}/landing-review`,e.secret,{leaseToken:t.leaseToken,leaseOwner:t.leaseOwner,attempt:t.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&Os(s.acceptedReview)?s.acceptedReview:null}})}var UI=p(()=>{"use strict";Fe();ny();BI()});async function FI(e){let t=await me(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),r=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=e.report.provenance?.finishedAt??new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${r}`,taskId:r,leaseToken:e.task.leaseToken??null,startedAt:e.report.provenance?.startedAt??o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await de(n,t,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}var KI=p(()=>{"use strict";$();Fe()});function $I(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
176
- `)}var HI=p(()=>{"use strict"});function Xn(e){return`${r6} ${e.trim()}`}function n6(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function o6(e){let{snapshot:t,leaseOwner:r,expectedLeaseToken:n,worker:o}=e;if(!t)return{ok:!1,error:Xn("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:r,expectedLeaseToken:n}};if(t.status!=="running")return{ok:!1,error:Xn(`AgentOS task status=${t.status} (expected running)`),detail:{taskId:t.taskId,status:t.status,leaseOwner:t.leaseOwner,blocker:t.blocker},snapshot:t};let s=t.leaseOwner?.trim()??"";if(!s||s!==r.trim())return{ok:!1,error:Xn(`leaseOwner mismatch (board=${s||"null"}, expected=${r})`),detail:{taskId:t.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:r},snapshot:t};let i=t.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:Xn(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:t.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:t};let a=n6(o);return a?{ok:!1,error:Xn(a),detail:{taskId:o.taskId,worker:o.name},snapshot:t}:t.heartbeatAt?.trim()?o.executorRef?.trim()&&t.executorRef?.trim()&&o.executorRef.trim()!==t.executorRef.trim()?{ok:!1,error:Xn(`executorRef mismatch (board=${t.executorRef}, worker=${o.executorRef})`),detail:{taskId:t.taskId,boardExecutorRef:t.executorRef,workerExecutorRef:o.executorRef},snapshot:t}:{ok:!0,snapshot:t}:{ok:!1,error:Xn("AgentOS heartbeatAt missing after claim"),detail:{taskId:t.taskId},snapshot:t}}async function jI(e){let t=await Ou({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return o6({snapshot:t.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}var r6,VI=p(()=>{"use strict";Xg();r6="dispatch_start_readback_failed:"});function GI(e,t,r){t.pid&&re(t.pid)&&(fe(t.pid,"SIGTERM"),re(t.pid)&&fe(t.pid,"SIGKILL"));let n={...t,status:"failed",pid:void 0,completionBlocker:r,dispatchStartReadbackFailed:!0};return X(e,n),n}var JI=p(()=>{"use strict";M();Y()});function qI(e){let t=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(t==="dalton"||t==="lorentz")return!0;let r=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(r.startsWith("expert-lane-pr-review:")||r.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function YI(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,r=await de(t,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!r.ok)return null;let n=r.response;return n&&typeof n=="object"?n:null}var zI=p(()=>{"use strict";Fe()});function XI(e){let t=e.admissionExhaustion;return!t||typeof t!="object"?null:t}function QI(e){let t=e.dispatchSkipDrain;return!t||typeof t!="object"?null:t}function s6(e){let t=e.harnessWorkerContext;if(!t||typeof t!="object")return null;let r=t,n=typeof r.instructionPolicyMarkdown=="string"?r.instructionPolicyMarkdown:null,o=typeof r.instructionPolicyFingerprint=="string"?r.instructionPolicyFingerprint:null,s=r.instructionPolicyEvidence&&typeof r.instructionPolicyEvidence=="object"?r.instructionPolicyEvidence:null,i=typeof r.personaMarkdown=="string"?r.personaMarkdown:null,a=typeof r.personaEvidence=="object"&&r.personaEvidence&&typeof r.personaEvidence.injectedPersonaSlug=="string"?r.personaEvidence.injectedPersonaSlug:null,l=r.personaEvidence&&typeof r.personaEvidence=="object"?r.personaEvidence:null,c=r.personaInjectionReady===!0,u=typeof r.contextEnvelopeMarkdown=="string"?r.contextEnvelopeMarkdown:null,d=r.contextEnvelopeEvidence&&typeof r.contextEnvelopeEvidence=="object"?r.contextEnvelopeEvidence:null,f=r.contextEnvelopeReady===!0,m=typeof r.runtimeEnvelopeMarkdown=="string"?r.runtimeEnvelopeMarkdown:null,g=a6(r.runtimeEnvelopeReceipt),h=r.runtimeEnvelopeReady===!0,y=r.memoryQualityCapture&&typeof r.memoryQualityCapture=="object"?r.memoryQualityCapture:null,v=typeof r.memoryQualityPromptMarkdown=="string"?r.memoryQualityPromptMarkdown:typeof y?.promptMarkdown=="string"?y.promptMarkdown:null,k=r.workerMcpToolGrant&&typeof r.workerMcpToolGrant=="object"?r.workerMcpToolGrant:null,b=k&&typeof k.token=="string"&&k.token.trim()?k.token.trim():null,_=b&&Array.isArray(k?.capabilities)?k.capabilities.filter(R=>typeof R=="string"&&R.trim().length>0):null,S=b&&typeof k?.exp=="number"&&Number.isFinite(k.exp)?k.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:y,memoryQualityPromptMarkdown:v,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:g,runtimeEnvelopeReady:h,workerMcpToken:b,workerMcpCapabilities:_,workerMcpExpiresAt:S}}function i6(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return t.length?t:null}function a6(e){if(!e||typeof e!="object")return null;let t=e;return typeof t.envelopeId!="string"||!t.envelopeId.trim()?null:{envelopeId:t.envelopeId,envelopeSchemaVersion:typeof t.envelopeSchemaVersion=="string"?t.envelopeSchemaVersion:void 0,generatedAt:typeof t.generatedAt=="string"?t.generatedAt:void 0,injectedAt:typeof t.injectedAt=="string"?t.injectedAt:void 0,mode:typeof t.mode=="string"?t.mode:void 0,memoryIncludedCount:typeof t.memoryIncludedCount=="number"?t.memoryIncludedCount:void 0,memoryOmittedCount:typeof t.memoryOmittedCount=="number"?t.memoryOmittedCount:void 0,degraded:typeof t.degraded=="boolean"?t.degraded:void 0,degradedReason:typeof t.degradedReason=="string"?t.degradedReason:t.degradedReason===null?null:void 0,auditFingerprint:typeof t.auditFingerprint=="string"?t.auditFingerprint:void 0,promptMarkdownChars:typeof t.promptMarkdownChars=="number"?t.promptMarkdownChars:void 0}}function l6(e,t){let r=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${t}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&r.push("",$I());let n=ey(e);if(n?.outboxId){let o=Qh(n.outboxId);o?r.push("",Zh(o)):r.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return r.join(`
177
- `)}function c6(e){let t=new Set;if(e.targetTaskId)return t.add(String(e.targetTaskId)),t;if(e.targetTaskIds)for(let r of String(e.targetTaskIds).split(",")){let n=r.trim();n&&t.add(n)}return t}async function Ts(e){let t=e.pipeline===!0||e.pipeline==="true";try{let oe=function(){return x.filter(I=>I.started).length},ge=function(I,C){Zi({runId:l.id,agentOsId:u,phase:I,startedCount:oe(),outcomeCount:x.length,cappedStarts:A,...C})},Ae=function(){return x.some(I=>(typeof I.error=="string"?I.error:"").startsWith("dispatch_start_readback_failed:"))},Av=function(I){return I.landPrDispatch===!0?!0:I.task?.executor==="land_pr"};var r=oe,n=ge,o=Ae,s=Av;let i=fI();if(!i.ok||!i.identity){let I=mI(i);if(t)return{ok:!1,error:I,boundary:i};console.error(`run dispatch failed: ${I}`),process.exit(1)}let a=i.identity;for(let I of i.warnings)console.error(`[dispatch] runner-boundary warning: ${I}`);let l=ne(String(_t(String(e.run||""),"--run"))),c=dI(l,a);if(!c.ok){let I=c.reason??"run does not belong to this runner boundary";if(t)return{ok:!1,error:I,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${I}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(_t(String(e.agentOsId||""),"--agent-os-id")),d=pe(e.baseUrl?String(e.baseUrl):void 0),f=await me(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",g=!m,h=De({runId:l.id}),y=ya(l.id,h.runnerId),v=RS(),k=v?Mc(l.repo):null,b=new WeakMap;if(v&&m&&!k){let I="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(t)return{ok:!1,error:I,runId:l.id};console.error(`run dispatch failed: ${I}`),process.exit(1)}let _=e.diskPath?Br({diskPath:String(e.diskPath)}):Br({diskPath:l.repo}),S=await eC({runId:l.id,agentOsId:u,args:e}),R=c6(e),w=R.size>0,L=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,N=w?Math.min(L,R.size):L;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let I=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await de(I,f,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(C){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${C.message}`)}}let A=g?N:Math.min(N,S.slotsAvailable);if(!g&&A<=0){let I={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:S.reason??"no resource slots",resourceGate:S};if(t)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let O=Zo(l.id),W=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,D=(I,C)=>({agentOsId:u,...C?{claimAuthorization:C}:{},dryRun:g,maxStarts:I,leaseOwner:y,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):eh,runnerDiskGate:_,runnerResourceGate:S,activeHarnessWorkers:O,runnerPresence:h,harnessBoardSnapshot:Kh(l.id),...e.lane?{lane:Qx(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(K=>K.trim()).filter(Boolean)}:{}}),G=jx(),Q=async I=>{let C=v&&k?xS(k):void 0,K=await de(W,f,D(I,C),{agentOsId:u,baseUrl:d,timeoutMs:G})??{ok:!1,status:0,response:null},q=K.response;if(C&&Array.isArray(q?.result?.started))for(let se of q.result.started)se&&typeof se=="object"&&b.set(se,C.requestNonce);return{dispatch:K,result:q?.result}};g||Zi({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:G});let H=await Q(w||g?A:1);if(!H.dispatch.ok||!H.result){let I=hg(H.dispatch.response),C={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:H.dispatch.status,response:H.dispatch.response,authRefreshed:H.dispatch.refreshedAuth===!0,authRefreshFailure:H.dispatch.authRefreshFailure,...I?{timeout:!0}:{}};if(I&&Zi({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:H.dispatch.status}),t)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=H.result;if(g){let I=XI(E),C=QI(E),K={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:E.started.map(q=>({taskId:q.task.id,title:q.task.title,reason:q.reason})),skipped:E.skipped.map(q=>({taskId:q.task.id,skipReason:q.skipReason,reason:q.reason})),diskGate:E.diskGate,resourceGate:E.resourceGate,inspected:E.inspected,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,capacityIdle:I?.capacityIdle===!0,admissionExhaustion:I,dispatchSkipDrain:C};if(t)return{ok:!0,...K};console.log(JSON.stringify(K,null,2));return}let V=CE(),x=[],T=[],U=Number(E.inspected)||0,te=!1;async function Z(I,C,K){let q=await Wa({baseUrl:d,secret:f,agentOsId:u,taskId:String(I.id),leaseOwner:y,leaseToken:I.leaseToken?String(I.leaseToken):null,failureDetail:C});I.leaseToken&&Ss({taskId:String(I.id),leaseToken:String(I.leaseToken).trim()},Oh(C));let se={taskId:I.id,started:!1,error:C,released:q.released,releaseResponse:q.releaseResponse,...K};return x.push(se),ge("outcome",{lastOutcome:se}),!1}async function KU(I){let C=I.task,K=String(C.id);if(w&&!R.has(K))return Z(C,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...R]});if(!(C.prUrl?String(C.prUrl):""))return Z(C,"land_pr task missing prUrl");try{let se=await WI({decision:I,baseUrl:d,secret:f,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:K,runId:l.id,workerName:`land-pr-${K}`,leaseOwner:y,leaseToken:typeof C.leaseToken=="string"?C.leaseToken:"",receiptDir:`${j(l.id)}/land-pr-operations`}}),wt=await FI({baseUrl:d,secret:f,agentOsId:u,runId:l.id,task:C,report:se});return wt.ok?(x.push({taskId:K,started:!0,landPr:!0,outcome:se.outcome,completionStatus:wt.status}),!0):Z(C,`land_pr completion POST failed (HTTP ${wt.status})`,{landPr:!0,outcome:se.outcome})}catch(se){return Z(C,se.message)}}async function $U(I){let C="duplicate_dispatch_prevented: live local worker already owns this task",K=await Wa({baseUrl:d,secret:f,agentOsId:u,taskId:String(I.id),leaseOwner:y,leaseToken:I.leaseToken?String(I.leaseToken):null,failureDetail:C});I.leaseToken&&Ss({taskId:String(I.id),leaseToken:String(I.leaseToken).trim()},Oh(C));let q={taskId:I.id,started:!1,error:C,alreadyRunning:!0,nonFatal:!0,released:K.released,releaseResponse:K.releaseResponse};return x.push(q),ge("outcome",{lastOutcome:q}),!1}async function HU(I){let C=I.task,K=s6(I),q=String(C.id);if(w&&!R.has(q))return Z(C,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...R]});let se=i6(C.personaSlug);if(se&&(!K?.personaInjectionReady||!K.personaMarkdown))return Z(C,`persona_injection_required: missing anchored context-envelope persona block for "${se}"`);if(se&&!K?.runtimeEnvelopeReady)return Z(C,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${se}"`);if(OE(l.id,q))return $U(C);let wt=Number(C.attempt)||1;if(wt>V.maxTaskAttempts)return Z(C,`task attempt ${wt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${V.maxTaskAttempts})`);let gn=C.leaseToken?String(C.leaseToken).trim():"";if(!gn)return Z(C,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let hn=B(`t-${C.id}-a${C.attempt}`),nr=Pu({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:P().workerProvider,task:rC(C)});XA({taskId:q,leaseToken:gn,runId:l.id,workerName:hn,provider:nr.provider??null});let cf=SE({task:C,routing:nr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!cf.ok)return Z(C,cf.error??"model_routing_mismatch",{modelRoutingGuard:cf});if(qI(C)){let Xe=await YI({agentOsId:u,taskId:q,baseUrl:d,secret:f});if(Xe&&Xe.dispatchable===!1)return Z(C,`pr_review_head_reconcile_blocked: ${Xe.reason??Xe.outcome??"stale PR head"}`,{headReconcile:Xe});if(Xe?.activeReviewTaskId&&Xe.activeReviewTaskId!==q)return Z(C,`pr_review_head_reconcile_retargeted: active review is ${Xe.activeReviewTaskId}`,{headReconcile:Xe})}let Al=bP(nr.provider);if(!Al.ok)return Z(C,`provider_quota_exhausted: ${Al.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Al.provider,retryAt:Al.retryAtIso}});try{let Xe=C.planId?String(C.planId):void 0,Pl=FE({title:C.title?String(C.title):void 0,description:C.description?String(C.description):null,executorRef:C.executorRef?String(C.executorRef):null,prUrl:C.prUrl?String(C.prUrl):null,branch:C.branch?String(C.branch):null}),Dv=uP({runId:l.id,workerName:hn,maxSlots:S.maxConcurrentWorkers,diskActiveWorkers:Kf()});if(!Dv.admitted)return Z(C,`admission_refused: ${Dv.reason}`,{nonFatal:!0});let Il=K?.workerMcpToken??null;if(Il&&aa()){let xo=QP({jobId:`dispatch:${String(C.id)}`,agentOsId:u,taskId:String(C.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!xo.ok)console.error(`[dispatch] worker tools skipped for task ${String(C.id)}: context hydration failed (${xo.code}: ${xo.detail}) \u2014 spawning without tools`),Il=null;else{let uf=await zP(xo.context);uf.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(C.id)}: tool endpoint probe failed (${uf.error??`HTTP ${uf.httpStatus}`}) \u2014 spawning without tools`),Il=null)}}DE(l.id,String(C.id),{except:hn});let Bt=await qP(l,{name:hn,task:l6(C,u),ownedPaths:e.owned?String(e.owned).split(",").map(xo=>xo.trim()).filter(Boolean):[],model:nr.model,provider:nr.provider,routingRule:nr.rule,requestedModel:nr.requestedModel,agentOsId:u,taskId:String(C.id),planId:Xe,branch:Pl?.targetPrBranch??void 0,executorRef:C.executorRef?String(C.executorRef):void 0,parentTaskId:C.parentTaskId?String(C.parentTaskId):void 0,taskTitle:C.title?String(C.title):void 0,taskPrUrl:Pl?.targetPrUrl??(C.prUrl?String(C.prUrl):void 0),repairTargetPrUrl:Pl?.targetPrUrl,repairTargetBranch:Pl?.targetPrBranch??void 0,instructionPolicyMarkdown:K?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:K?.instructionPolicyFingerprint??null,instructionPolicyEvidence:K?.instructionPolicyEvidence??null,memoryQualityCapture:K?.memoryQualityCapture??null,memoryQualityPromptMarkdown:K?.memoryQualityPromptMarkdown??null,personaMarkdown:K?.personaMarkdown??null,personaSlug:K?.personaSlug??se,personaEvidence:K?.personaEvidence??null,contextEnvelopeMarkdown:K?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:K?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:K?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:K?.runtimeEnvelopeEvidence??null,workerMcpToken:Il,workerMcpCapabilities:K?.workerMcpCapabilities??null,workerMcpExpiresAt:K?.workerMcpExpiresAt??null,leaseOwner:y,leaseToken:gn,dispatched:!0,executionMode:Nc(C)}),Ol=await jI({agentOsId:u,taskId:String(C.id),leaseOwner:y,expectedLeaseToken:gn,worker:Bt,baseUrl:d,secret:f});if(!Ol.ok)return GI(l.id,Bt,Ol.error??"dispatch_start_readback_failed"),en(l.id,hn),Z(C,Ol.error??"dispatch_start_readback_failed",{readback:Ol.detail??null});Bt.leaseToken!==gn&&(Bt.leaseToken=gn,Bt.leaseOwner=y,X(l.id,Bt)),rd({taskId:q,leaseToken:gn}),iP(l.id,hn);let Mv={taskId:C.id,started:!0,worker:Bt.name,pid:Bt.pid,branch:Bt.branch,model:Bt.model,provider:nr.provider,routingRule:nr.rule,instructionPolicyFingerprint:K?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(K?.instructionPolicyEvidence?.ruleSlugs)?K.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:K?.personaSlug??se,personaOperatingRuleCount:K?.personaEvidence?.operatingRuleCount??null};return x.push(Mv),ge("worker_started",{lastOutcome:Mv}),K?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${q}: instruction policy injected fingerprint=${K.instructionPolicyFingerprint}`),K?.personaSlug&&console.error(`[dispatch] task ${q}: persona context injected slug=${K.personaSlug}`),K?.contextEnvelopeReady&&console.error(`[dispatch] task ${q}: context envelope injected anchor=${K.contextEnvelopeEvidence?.anchorTaskId??q}`),K?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${q}: runtime envelope injected id=${K.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Xe){return en(l.id,hn),Z(C,Xe.message)}}let lf=new Set;for(let I of rP(l.id))lf.add(I);async function Pv(I){let C=I.task,K=String(C.id);if(lf.has(K))return Z(C,"dispatch_retry_loop_prevented: task already failed to start this tick");let q=v?CS({decision:I,leaseOwner:y,repoIdentity:k,requestNonce:b.get(I)??null}):null,se=q&&!q.allow?await Z(C,`desktop_execution_policy_denied:${q.code}: ${q.reason}`,{desktopPolicyDenied:q.code,...q.code==="operation_not_approved"?{nonFatal:!0}:{}}):Av(I)?await KU(I):await HU(I);return se||(lf.add(K),tP(K,l.id)),se}for(let I of E.started)await Pv(I);if(T.push(...E.skipped??[]),w)for(let I of T){let C=String(I.task.id);R.has(C)&&x.push({taskId:C,started:!1,error:`exact_target_not_started:${I.skipReason}`,skipReason:I.skipReason,detail:I.reason??null,requestedTargetTaskIds:[...R]})}for(;!w&&x.length<A;){if(Ae()){let K={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};x.push(K),ge("circuit_breaker",{lastOutcome:K});break}let I=await Q(1);if(!I.dispatch.ok||!I.result){let K=Gx(I.dispatch.response),q=oe();te=K&&q>0;let se=hg(I.dispatch.response),wt={started:!1,error:se?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:I.dispatch.status,response:I.dispatch.response,...se?{timeout:!0}:{},...te?{nonFatal:!0,partialTopUp:!0}:{}};x.push(wt),ge("top_up_failed",{partialTopUpInterrupted:te,lastOutcome:wt});break}U+=Number(I.result.inspected)||0,T.push(...I.result.skipped??[]);let C=I.result.started??[];if(C.length===0)break;for(let K of C){if(x.length>=A)break;await Pv(K)}}let El=x.filter(I=>I.started).length,Lr=XI(E),_o=QI(E),Iv=El===0&&(Lr?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(Iv&&Lr?.summary){let I=Lr.skipReasonCounts?.retry_ceiling_exceeded??0,C=E.overAttemptIdleRecovery??Lr.overAttemptIdleRecovery,K=C?.attempted===!0?`; over_attempt_recovery minted=${C.minted??0} started=${C.started??0}`:I>0?"; over_attempt_recovery not attempted":"",q=_o?`; dispatch_skip_drain scanned=${_o.scanned??0} advanced=${_o.advanced??0}`:"",se=Lr.progressionReport?.summary?`; ${Lr.progressionReport.summary}`:"",wt=_o?.prLifecycleAttempt?.summary?`; ${_o.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Lr.summary}${I>0?`; retry_ceiling_exceeded=${I}`:""}${K}${q}${se}${wt}`)}let Ov={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:y,startedCount:El,capacityIdle:Iv,admissionExhaustion:Lr,dispatchSkipDrain:_o,outcomes:x,skipped:T.map(I=>({taskId:I.task.id,skipReason:I.skipReason})),inspected:U,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate,...te?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:G},Tv=I=>!I.started&&I.nonFatal!==!0,jU=x.some(Tv),Nv=te&&El>0?!0:!jU;if(Zi({runId:l.id,agentOsId:u,phase:"complete",partial:te,startedCount:El,ok:Nv}),t)return{ok:Nv,...Ov};console.log(JSON.stringify(Ov,null,2)),x.some(Tv)&&process.exit(1)}catch(i){if(t)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var eh,Nu=p(()=>{"use strict";$();Lc();Fe();Vx();Jx();Zx();yi();tC();Fo();Y();Y();nC();lu();_E();EE();Zg();YP();Rs();XP();ZP();ot();Pc();Ps();M();uI();rh();ka();yr();pI();gI();ry();Fh();UI();KI();HI();VI();JI();Y();zI();fm();_s();zn();Cs();eh=3600*1e3});function Ns(e){if(!e||typeof e!="object")return 0;let t=e.startedCount;if(typeof t=="number")return t;let r=e.outcomes;return Array.isArray(r)?r.filter(n=>n.started).length:0}function d6(e){let{maxStarts:t,...r}=e;return r}async function ay(e,t){if(t<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let r=d6(e);if(r.targetTaskId||r.targetTaskIds){let u=await Ts({...r,execute:!0,pipeline:!0,maxStarts:String(t)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Ns(u)}}let n=Math.min(t,u6),o=Math.max(0,t-n),s=await Ts({...r,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Ns(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ts({...r,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Ns(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}var u6,ZI=p(()=>{"use strict";Nu();u6=1});function eO(e){if(!e||typeof e!="object")return[];let r=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(r))return[];let n=new Set,o=[];for(let s of r){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}var tO=p(()=>{"use strict"});function p6(e){let r=e.response?.dispatch;return r&&typeof r=="object"?r:null}function Ua(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function f6(e){let t=Number(process.env[e]);return!Number.isFinite(t)||t<=0?null:Math.floor(t)}function rO(e,t){let r=p6(t),n=Ua(r?.recommendedMaxStarts),o=Ua(r?.actionableReady),s=Ua(r?.queuedTasks),i=Ua(r?.boardAdvancedThisTick)??0,a=Ua(r?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=r?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let g=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,g))}let f=f6("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,f));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}var nO=p(()=>{"use strict"});import m6 from"node:path";function Qn(e){let t=Ct(e);if(t.length===0)return"failed";let r=!1,n=!1,o=!1,s=!1;for(let i of t){let a=F(m6.join(j(e.id),"workers",B(i),"worker.json"),void 0);if(!a)continue;let l=ie(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){r=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Ff(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return r||o||s?null:n?"completed":"failed"}function Fa(){let e=[];for(let t of Se()){if(!g6.has(t.status))continue;let r=Qn(t);if(!r||r===t.status)continue;let n=t.status;t.status=r,Ve(t),e.push({runId:t.id,from:n,to:r})}return e}var g6,Or,rn=p(()=>{"use strict";Y();No();Ce();M();g6=new Set(["running","dispatching","pending","queued","needs_attention"]),Or=new Set(["completed","failed","cancelled","done"])});import Dt from"node:path";function fd(e){return e.includes(h6)}function ly(e,t){return Dt.join(rt(Ne(e)),B(t))}function nn(e,t,r){return Dt.join(ly(e,t),"workers",B(r))}function oO(e,t,r){let n=Ne(e);return Dt.join(n,"runs","runs",B(t),"workers",B(r))}function cy(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Zn(e){return{workerJsonPath:Dt.join(e,"worker.json"),stdoutPath:Dt.join(e,"stdout.jsonl"),stderrPath:Dt.join(e,"stderr.log"),heartbeatPath:Dt.join(e,"heartbeat.jsonl"),lastStatusPath:Dt.join(e,"last-status.json")}}function sO(e){let t=Zn(nn(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!fd(e.statusPath)?e.statusPath:t}var h6,uy=p(()=>{"use strict";Et();M();h6=`${Dt.sep}runs${Dt.sep}runs${Dt.sep}`});import{existsSync as y6,readFileSync as k6,readdirSync as b6,statSync as v6,writeFileSync as R6}from"node:fs";import w6 from"node:path";function A6(e,t=[]){if(!e)return e;let r=e,n=[...new Set(t.map(o=>o?.trim()).filter(o=>!!o&&o.length>=_6))].sort((o,s)=>s.length-o.length);for(let o of n){r.includes(o)&&(r=r.split(o).join(it));let s=JSON.stringify(o).slice(1,-1);s!==o&&r.includes(s)&&(r=r.split(s).join(it))}for(let[o,s]of S6)r=r.replace(o,s);return r}function iO(e=process.env,t=[]){let r=[];for(let[n,o]of Object.entries(e))o&&x6.test(n)&&r.push(o);for(let n of t)try{let o=n();o&&r.push(o)}catch{}return r}function aO(e,t=0){if(t>3||!y6(e))return[];let r=[];for(let n of b6(e,{withFileTypes:!0})){let o=w6.join(e,n.name);n.isDirectory()?r.push(...aO(o,t+1)):n.isFile()&&C6.test(n.name)&&r.push(o)}return r}function lO(e,t=[]){let r={masked:[],clean:0,failed:[]},n;try{n=aO(e)}catch{return r}for(let o of n)try{if(v6(o).size>E6){r.failed.push(o);continue}let s=k6(o,"utf8"),i=A6(s,t);if(i===s){r.clean+=1;continue}R6(o,i,"utf8"),r.masked.push(o)}catch{r.failed.push(o)}return r}var it,dy,S6,_6,x6,C6,E6,cO=p(()=>{"use strict";it="<redacted>",dy=`[^\\s"'\\\\,}\\]]`,S6=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${dy}+`,"gi"),it],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${dy}+`,"gi"),it],[/\bkynver_u_[A-Za-z0-9_-]+/g,it],[/\bkyn_[A-Za-z0-9]{12,}/g,it],[/\bsk-ant-[A-Za-z0-9_-]+/g,it],[/\bsk-[A-Za-z0-9_-]{8,}/g,it],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,it],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,it],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,it],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${it}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${dy}+`,"g"),`$1${it}`]],_6=12,x6=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,C6=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,E6=256*1024*1024});import{existsSync as on,mkdirSync as P6,readdirSync as dO,renameSync as I6,statSync as py}from"node:fs";import ke from"node:path";function pO(e,t){let r=ke.resolve(e),n=ke.resolve(rt(t)),o=ke.relative(n,r);return o!==".."&&!o.startsWith("..")&&!ke.isAbsolute(o)}function fy(e){if(!on(e))return[];try{return dO(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&t.name!=="runs").map(t=>t.name)}catch{return[]}}function my(e){let t=ke.join(e,"workers");if(!on(t))return[];try{return dO(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name)}catch{return[]}}function fO(e){return ke.join(e,"archived-workers")}function T6(e,t){let r=ke.join(fO(e),B(t));return on(r)?`${r}-${Date.now()}`:r}function uO(e,t,r){if(!on(e))return!1;try{let n=t-py(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function mO(e,t=Date.now(),r=Ka){if(!on(e))return!1;let n=Zn(e),o=F(n.workerJsonPath,void 0);if(o?.status==="running"&&re(o.pid))return!0;let s=Ie(n.heartbeatPath);if(s.lastHeartbeatAt){let i=t-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<r)return!0}return!!(uO(n.stdoutPath,t,r)||uO(n.heartbeatPath,t,r))}function N6(e,t,r){let n=typeof t.completionReportedAt=="string"?Date.parse(t.completionReportedAt):NaN;if(Number.isFinite(n))return r-n;let o=(()=>{let s=t.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return r-o;try{return r-py(ke.join(e,"worker.json")).mtimeMs}catch{return 0}}function D6(e,t,r,n){if(mO(e,r))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof t.status=="string"?t.status:"";if(typeof t.completionBlocker=="string"&&t.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof t.completionReportedAt=="string"||t.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=N6(e,t,r);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function Ds(e,t=Date.now(),r=Ka){for(let n of my(e))if(mO(ke.join(e,"workers",n),t,r))return!0;return!1}function M6(){let t=Ji()?.repo??"",r="unknown";if(t)try{let n=ce(t,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(r=n)}catch{}return{repo:t,base:"origin/main",baseCommit:r}}function L6(e,t){let r=ke.join(rt(e),B(t));if(!on(r))return null;let n=my(r);if(n.length===0)return null;let o;try{o=py(r).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=nn(e,t,a);s[a]={workerDir:l,statusPath:ke.join(l,"worker.json")}}let i=Ds(r);return{id:t,name:t,...M6(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function gy(e){let t=Ne(e??dt()),r=rt(t),n=[];for(let o of fy(r)){let s=ke.join(r,o,"run.json");if(on(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=L6(t,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ve(i),n.push({runId:o,action:"repaired_run_json",reason:Ds(ke.join(r,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function hy(e,t={}){let r=Ne(e??dt()),n=rt(r),o=t.now??Date.now(),s=t.archiveAgeMs??O6,i=[],a=null,l=()=>a??=(t.knownSecrets??(()=>iO(process.env,[_e,()=>Te()])))();gy(r);for(let c of fy(n)){let u=ke.join(n,c),d=ke.join(u,"run.json"),f=F(d,void 0);if(!f?.id)continue;let m=new Set([...Object.keys(f.workers||{}),...my(u)]),g=!1;for(let h of m){let y=ke.join(u,"workers",B(h)),v=ke.join(y,"worker.json"),k=F(v,void 0);if(!k){let S=ke.join(fO(u),B(h));if(on(S)&&(f.workers[B(h)]||f.workers[h])){delete f.workers[B(h)],delete f.workers[h],g=!0,i.push({runId:f.id,worker:h,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:S});continue}i.push({runId:f.id,worker:h,action:"skipped",reason:"worker.json missing"});continue}let b=D6(y,k,o,s);if(!b.eligible){i.push({runId:f.id,worker:h,action:"skipped",reason:b.reason});continue}let _=T6(u,h);P6(ke.dirname(_),{recursive:!0}),I6(y,_),lO(_,l()),delete f.workers[B(h)],delete f.workers[h],g=!0,i.push({runId:f.id,worker:h,action:"archived",reason:b.reason,archivePath:_})}g&&Ve(f)}return{workers:i}}function gO(e,t=Date.now()){let r=new Set,n=rt(e);for(let o of fy(n)){let s=ke.join(n,o);Ds(s,t)&&r.add(`${e}\0${o}`)}return r}var Ka,O6,Ms=p(()=>{"use strict";us();we();vn();Et();Y();uy();M();$();cO();Ka=900*1e3,O6=3600*1e3});import{existsSync as sn,lstatSync as B6,readdirSync as W6,readlinkSync as U6,renameSync as yy,unlinkSync as F6}from"node:fs";import Gt from"node:path";function K6(e,t){let r=ly(e,t),n;try{n=B6(r)}catch{return null}if(!n.isSymbolicLink())return null;let o=Gt.resolve(Gt.dirname(r),U6(r));if(Ds(o)||Ds(r))return null;let s=`${r}.materialize-${Date.now()}`;return yy(o,s),F6(r),yy(s,r),o}function $6(e){let t=[];for(let r of cy()){let n=Gt.join(e.fromDir,r),o=Gt.join(e.toDir,r);!sn(n)||sn(o)||(yy(n,o),t.push(r))}return t}function hO(e,t){let r=Zn(t),n=!1;return e.workerDir!==t&&(e.workerDir=t,n=!0),e.stdoutPath!==r.stdoutPath&&(e.stdoutPath=r.stdoutPath,n=!0),e.stderrPath!==r.stderrPath&&(e.stderrPath=r.stderrPath,n=!0),e.heartbeatPath!==r.heartbeatPath&&(e.heartbeatPath=r.heartbeatPath,n=!0),n}function H6(e){let t=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,r=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return t==="done"||r==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":t==="blocked"?"blocked":t==="running"?"exited":t??"exited"}function j6(e){let t=Zn(e.canonicalDir),r=F(t.lastStatusPath,void 0),n=sn(t.stdoutPath),o=sn(t.heartbeatPath);if(!(n||o||r!=null))return null;let i=n?Rn(t.stdoutPath):{finalResult:null},a=o?Ie(t.heartbeatPath):Ie(""),l=ar(a),c=H6({lastStatus:r,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof r?.branch=="string"?r.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof r?.worktreePath=="string"?r.worktreePath:Gt.join(he().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:t.stdoutPath,stderrPath:t.stderrPath,heartbeatPath:t.heartbeatPath,startedAt:typeof r?.startedAt=="string"?r.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof r?.taskId=="string"&&(u.taskId=r.taskId),typeof r?.agentOsId=="string"&&(u.agentOsId=r.agentOsId),typeof r?.planId=="string"&&(u.planId=r.planId),typeof r?.pid=="number"&&(u.pid=r.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),hO(u,e.canonicalDir),u}function V6(e,t){let r=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=nn(t,e.id,o),a=Gt.join(i,"worker.json");(fd(s.workerDir)||fd(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},r=!0)}return r&&(e.workers=n,Ve(e)),r}function G6(e){let t=[],r=nn(e.harnessRoot,e.run.id,e.workerName),n=oO(e.harnessRoot,e.run.id,e.workerName),o=Zn(r),s=$6({fromDir:n,toDir:r});s.length>0&&t.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=sO({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=F(i,void 0);if(!a&&sn(o.workerJsonPath)&&(a=F(o.workerJsonPath,void 0)),!a){let l=j6({run:e.run,workerName:e.workerName,canonicalDir:r,harnessRoot:e.harnessRoot});if(l)return X(e.run.id,l),t.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),t;let c=sn(r),u=cy().some(d=>sn(Gt.join(r,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:Gt.join(he().worktreesDir,e.run.id,e.workerName),workerDir:r,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return X(e.run.id,d),t.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),t}return t.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),t}return hO(a,r)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",X(e.run.id,a),t.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):t.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),t}function J6(e,t){let r=Gt.join(j(e.id),"workers");if(!sn(r))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of W6(r,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function yO(){let{harnessRoot:e}=he(),t=gy(e),r=[];for(let n of Se()){let o=K6(e,n.id);o&&r.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),V6(n,e)&&r.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of J6(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:nn(e,n.id,i),statusPath:Gt.join(nn(e,n.id,i),"worker.json")}},Ve(n),r.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];r.push(...G6({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:r,runMetadataRetention:t}}var kO=p(()=>{"use strict";vn();Ri();uy();Ms();Y();M()});import{execFileSync as bO}from"node:child_process";import vO from"node:path";function ky(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:null}function q6(e){let t=ky(e)?.match(/\/pull\/(\d+)$/);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function Y6(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function z6(e){let t=new Set;for(let r of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}for(let r of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}for(let r of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}return[...t]}function X6(e){let t=null;if(typeof e=="string"?t=Bo(e):e&&typeof e=="object"&&!Array.isArray(e)&&(t=e),!t)return[];let r=t.targetPrReconciliation??t.target_pr_reconciliation;if(!Array.isArray(r))return[];let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=ky(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function Q6(e){try{let n=bO("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=bO("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:ky(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function Z6(e){let t=Ie(e.heartbeatPath);return e.completionSnapshot?.finalResult??ar(t)}function e4(e){let t=new Map,r=j(e.id);for(let n of Ct(e)){let o=F(vO.join(r,"workers",B(n),"worker.json"),void 0);if(o)for(let s of X6(Z6(o))){let i=q6(s.prUrl);i!=null&&!t.has(i)&&t.set(i,s)}}return t}function t4(e,t){let r=Ie(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,r.lastHeartbeatSummary,Y6(t)].filter(Boolean).join(`
178
- `);return z6(n)}function r4(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function by(e={}){let t=e.lookupPr??Q6,r=[],n=new Map;for(let o of Se()){let s=e4(o),i=j(o.id);for(let a of Ct(o)){let l=vO.join(i,"workers",B(a),"worker.json"),c=F(l,void 0);if(!c||!r4(c))continue;let u=ie(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of t4(c,u.finalResult)){if(d=s.get(m)??null,!d){let g=o.repo||c.worktreePath,h=`${g}#${m}`,y=n.has(h)?n.get(h)??null:t({repoDir:g,prNumber:m});n.has(h)||n.set(h,y),y&&(y.state==="MERGED"||y.mergedAt)&&(d={prUrl:y.prUrl,mergeCommit:y.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){r.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",X(o.id,c),r.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:r}}var RO=p(()=>{"use strict";vn();tc();Ce();Y();No();M()});import n4 from"node:path";function s4(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function wO(e,t){let r=Qu({worker:e,status:t}),n=r?Zu(e,r):!1,o=t.attention.state==="blocked"?"blocked":t.attention.state==="done"||t.status==="done"||r?"done":"exited",s=r&&n?`captured exited-worker handoff (${r.source})`:r?"synced finished worker record after terminal stdout/heartbeat":t.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function i4(e,t){t.stopClass&&(e.stopClass=t.stopClass),t.stopReason&&(e.stopReason=t.stopReason),t.exit&&(e.exitCode=t.exit.exitCode,e.exitSignal=t.exit.signal,e.oomEvidence=t.exit.oomEvidence??null);let r=t.error?.trim();r&&(e.exitStderrTail=r.slice(-1e3))}function vy(){let e=yO();if(s4()){let s=by(),i=hy();return{workers:[],finalizedRuns:Fa(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let t=[],r=Date.now();for(let s of Se())for(let i of Ct(s)){let a=n4.join(j(s.id),"workers",B(i),"worker.json"),l=F(a,void 0);if(!l||l.status!=="running"){t.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=ie(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=wO(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",X(s.id,l),t.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else t.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=wO(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,i4(l,c),X(s.id,l),t.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&re(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||r-u>o4,m=Number.isFinite(d)&&r-d>Uf;if(f&&m){fe(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,X(s.id,l),t.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}t.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=by(),o=hy();return{workers:t,finalizedRuns:Fa(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}var o4,Ry=p(()=>{"use strict";rn();Y();No();Ch();Ce();M();kO();RO();Ms();o4=900*1e3});import{readdirSync as a4,readFileSync as l4}from"node:fs";function f4(e){if(process.platform!=="linux"||!e.trim())return null;let t=[];try{t=a4("/proc")}catch{return null}for(let r of t)if(/^\d+$/.test(r)&&Number(r)!==process.pid)try{if(l4(`/proc/${r}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(r)}catch{}return null}async function SO(e){let t=Pr(),r={mode:t,scanned:0,outcomes:[]};if(t!=="enforce")return r;let n=ue();if(!n)return r;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??u4,i=e.findOrphanPid??f4,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-d4).toISOString(),limit:p4})}catch{return eo.recoveryStoreFailures+=1,r}for(let c of l){let u=c.idempotencyKey.slice(c4.length),d=u.split(":")[0]??"",f=u.slice(d.length+1);if(!(!d||!f))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let g=xa(f);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(S=>{if(g===null)return!0;let R=xa(S.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return R===null||R>=g}))continue;let v={};try{v=c.resultJson?JSON.parse(c.resultJson):{}}catch{v={}}let k=v.runId??null,b=v.workerName??null;if(k&&b&&e.hasLiveWorker({runId:k,workerName:b})){rd({taskId:d,leaseToken:f}),a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"finalized_late"});continue}if(k&&b){let S=e.worktreePathFor({runId:k,workerName:b}),R=S?i(S):null;if(R!==null){eo.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"deferred_orphan",detail:`live pid ${R} references ${S}`});continue}}if(!k){a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let _=await e.releaseClaim({taskId:d,leaseToken:f,runId:k});_.released?(Ss({taskId:d,leaseToken:f},"restart_recovery"),b&&(Ea(k,b),en(k,b)),eo.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"released"})):_.transportError?a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"deferred_transport",detail:_.detail}):(Ss({taskId:d,leaseToken:f},"restart_recovery_refused"),a.push({taskId:d,leaseToken:f,runId:k,workerName:b,action:"release_refused",detail:_.detail}))}catch{eo.recoveryStoreFailures+=1}}return{mode:t,scanned:l.length,outcomes:a}}function _O(){return{"dispatchReceipts.recoveredStrandedClaims":eo.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":eo.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":eo.recoveryStoreFailures}}var c4,u4,d4,p4,eo,wy=p(()=>{"use strict";Jr();_s();zn();Cs();c4="dispatch:claim:",u4=900*1e3,d4=10080*60*1e3,p4=200,eo={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0}});import m4 from"node:path";async function CO(e){if(xO||Pr()!=="enforce")return null;xO=!0;try{let t=De().runnerId,r=await SO({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>m4.join(he().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Wa({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:ya(s,t),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return r.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${r.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),r}catch{return null}}var xO,EO=p(()=>{"use strict";Y();ka();yr();ry();wy();_s();xO=!1});import g4 from"node:os";function AO(e,t={}){let r=P(),n=(t.boxKind??xt(r)).trim().toLowerCase()||"forge",o=t.hostLabel??g4.hostname();return{boxId:jo({boxKind:n,hostLabel:o,explicitBoxId:t.boxId,config:r,env:process.env}),boxKind:n,displayName:t.displayName??null,hostLabel:o,observedAt:t.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:t.harnessRunId??null,queuedTasks:t.queuedTasks??null,reason:e.reason,...t.prEvidence?.length?{prEvidence:t.prEvidence}:{},host:kx()}}var PO=p(()=>{"use strict";$();Le();Vo();Qc()});import h4 from"node:path";async function md(e){let t=e.pipeline===!0||e.pipeline==="true";try{let r=ne(String(_t(String(e.run||""),"--run"))),n=String(_t(String(e.agentOsId||""),"--agent-os-id")),o=pe(e.baseUrl?String(e.baseUrl):void 0),s=await me(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=De({runId:r.id}).runnerId,a=await IP({run:r.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(r.workers||{})){let m=F(h4.join(j(r.id),"workers",B(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let g=ie(m);if(g.alive||g.finalResult||m.completionReportedAt)continue;try{let k=await As({run:r.id,name:f,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(k.ok&&!k.skipped){l.push({worker:f,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:g.stopClass??null});continue}}catch{}let h=Iu({runId:r.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,v;try{v=await de(y,s,{agentOsId:n,leaseOwner:h,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(k){v={ok:!1,error:k.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:v.ok===!0||v.response?.ok===!0,response:v.response??v})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await de(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:r.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(t)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(r){if(t)return{ok:!1,error:r.message};console.error(`run sweep failed: ${r.message}`),process.exit(1)}}var Sy=p(()=>{"use strict";$();Fe();Y();Ce();M();ka();yr();Ps()});async function IO(e){let t=pe(e.baseUrl),r=await me(e.secret,e.agentOsId,{baseUrl:t}),n=`${t}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await de(n,r,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:t});return{ok:o.ok,status:o.status,response:o.response}}var OO=p(()=>{"use strict";$();Fe()});import y4 from"node:path";async function TO(e,t){let r=ne(e),n=String(t.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(r.workers||{})){let i=F(y4.join(j(r.id),"workers",B(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=ie(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await IO({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:t.baseUrl?String(t.baseUrl):void 0,secret:t.secret?String(t.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,X(r.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}var NO=p(()=>{"use strict";Ce();Y();M();OO()});function DO(e){let t=e.replace(/\\/g,"/").replace(/\/+$/,"");if(t==="node_modules"||t.startsWith("node_modules/"))return!0;for(let r of _y)if(t===r||t.startsWith(`${r}/`))return!0;return!1}var _y,xy=p(()=>{"use strict";_y=[".next",".turbo","dist","build",".cache","node_modules/.cache"]});function yt(e){return e.filter(t=>{let r=t.trim(),n=r.startsWith("??")?r.slice(2).trim():r.length>3?r.slice(3).trim():r;return!DO(n)})}var to=p(()=>{"use strict";xy()});function ro(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let t=e;for(let r of["prUrl","pr_url","pullRequestUrl"]){let n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function $a(e){let t=e.gitAncestry?.relation;return t==="merged"||t==="synced"?yt(e.changedFiles).length>0:!!(ro(e.finalResult)||t==="ahead"||t==="diverged"||e.changedFiles.length>0&&e.finalResult)}var Ha=p(()=>{"use strict";to()});function ja(e){return e.status||(e.status=ie(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Cy(e,t){if(e.status)return yt(e.status.changedFiles).length>0;let r=t?t.porcelain(e.worktreePath):fi(e.worktreePath);return yt(r).length>0}function k4(e){let t=e.worker.completionSnapshot?.finalResult;return t??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Ey(e,t){if(e.status)return e.status;let r=e.worker,n=typeof r.completionReportedAt=="string"&&r.completionReportedAt.trim().length>0,o=!!(r.status&&["done","exited","blocked","failed","abandoned"].includes(r.status))||n,s=k4(e);if(o&&!re(r.pid)){let i=t?.gitStatusCache?t.gitStatusCache.porcelain(e.worktreePath):fi(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=t?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Wl(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={runId:e.runId,worker:e.workerName,pid:r.pid,alive:!1,status:r.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:r.branch,worktreePath:e.worktreePath,ownedPaths:r.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:r.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:c,finalResult:s,completionBlocker:typeof r.completionBlocker=="string"&&r.completionBlocker.trim()||null,prUrl:r.repairTargetPrUrl??r.taskPrUrl??ro(s)};return e.status=u,u}return ja(e)}var gd=p(()=>{"use strict";we();Ce();to();Ha();M()});function b4(e,t=Date.now(),r=Ka){let n=Ie(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=t-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<r}function Ls(e,t=Date.now(),r=Ka){return re(e.pid)?!0:b4(e,t,r)}var hd=p(()=>{"use strict";vn();Ms();M()});function v4(e,t){return t?t.runTerminalCache.derive(e.run):Qn(e.run)}function Tr(e,t=Date.now()){return Ls(e.worker,t)}function Ay(e,t){return Or.has(e.run.status)?!1:v4(e,t)!==null}function MO(e,t,r=Date.now()){if(Tr(e,r))return!0;if(Or.has(e.run.status)||Ay(e,t))return!1;let n=ja(e);return Be(n)?!1:!!Tr(e,r)}var Py=p(()=>{"use strict";rn();Ce();gd();hd()});function LO(e,t){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Tr(e))return!0;let n=t??ja(e);return!!(!Be(n)||$a(n)||yt(n.changedFiles).length>0||Lo({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:ro(n.finalResult)}).blocked)}var BO=p(()=>{"use strict";ec();gd();to();Py();Ce();Ha()});import{existsSync as UO,mkdirSync as R4,writeFileSync as WO}from"node:fs";import yd from"node:path";function FO(e,t,r){return yd.join(e,"salvage",B(t),B(r))}function KO(e){return UO(yd.join(FO(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function $O(e){let t=FO(e.harnessRoot,e.indexed.runId,e.indexed.workerName);R4(t,{recursive:!0});let r=yd.join(t,"salvage.patch"),n=!1;if(UO(e.indexed.worktreePath)){let s=ee(e.indexed.worktreePath,["diff","HEAD"]),i=ee(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
179
- `);a.trim()&&(WO(r,a.endsWith(`
173
+ `)}})}write(t,r){if(!t.destroyed)try{t.write(sh(r))}catch{}}async handleLine(t,r){let n=ih(r);if(!n.ok){this.refuse(n.reason,n.error),this.write(t,{id:n.id,ok:!1,reason:n.reason,error:n.error});return}let{request:o}=n;if(this.revoked||this.closed){this.refuse("revoked","grant revoked"),this.write(t,{id:o.id,ok:!1,reason:"revoked",error:"worker tools are no longer available for this task"});return}if(this.now()>=this.opts.expiresAt){this.refuse("grant_expired","grant expired"),this.write(t,{id:o.id,ok:!1,reason:"grant_expired",error:"worker tools are no longer available for this task"});return}if(o.op==="list_tools"){this.write(t,{id:o.id,ok:!0,tools:this.toolDescriptors});return}if(!Ss(o.name)){this.refuse("unknown_tool",o.name),this.write(t,{id:o.id,ok:!1,reason:"unknown_tool",error:`unknown tool: ${o.name}`});return}if(!this.grantedTools.includes(o.name)){this.refuse("capability_not_granted",o.name),this.write(t,{id:o.id,ok:!1,reason:"capability_not_granted",error:`tool not granted for this task: ${o.name}`});return}try{let s=await Lu({apiBaseUrl:this.opts.apiBaseUrl,agentOsId:this.opts.agentOsId,taskId:this.opts.taskId,token:this.opts.token,fetchImpl:this.fetchImpl},o.name,o.args??{});this.write(t,{id:o.id,ok:!0,result:s})}catch(s){let i=s instanceof Error?s.message:"request failed";this.refuse("upstream_error",i),this.write(t,{id:o.id,ok:!1,reason:"upstream_error",error:i})}}}});function gy(){return wP}var wP,SP=p(()=>{"use strict";wP={posture:"scoped",summary:"scoped: per-worker endpoint in an owner-only (0700) directory, one connection at a time. Peer identity is not observed \u2014 another process of the same OS user is not excluded.",verify:async()=>({ok:!0})}});var _P=p(()=>{"use strict";_r()});var xP=p(()=>{"use strict";RP();SP();_r();Bu();_P();Kh();my()});import{existsSync as o4,mkdirSync as s4}from"node:fs";import Ds from"node:path";async function CP(e,t){let r=typeof t.name=="string"?t.name.trim():"";if(!r||r==="undefined"||r==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(t.name)})`);let n=L(r);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!t.task)throw new Error(`missing task text for worker ${n}`);let o=t.routingRule||t.requestedModel?{provider:t.provider||Sr,model:t.model,rule:t.routingRule||"explicit:spawn",requestedModel:t.requestedModel??t.model}:Hu({explicitModel:t.model,explicitProvider:t.provider,explicitProviderIsOperatorOverride:!!t.provider?.trim(),configuredProvider:A().workerProvider}),s=_A(o.provider),i=o.model;if(s.preflightModel){let x=s.preflightModel(t.model);if(!x.ok)throw new Error(`model preflight failed for provider "${s.name}": ${x.note??"invalid model/provider combination"}`);x.normalized&&console.error(`[supervisor] ${n}: ${x.note}`),i=x.model}let{worktreesDir:a}=ke(),l=Ds.join(q(e.id),"workers",n);s4(l,{recursive:!0});let c=Ds.join(a,e.id,n),u=t.repairTargetBranch?.trim()||void 0,d=u||t.branch||`agent/${e.id}/${n}`;if(o4(c))throw new Error(`worktree path already exists: ${c}`);if(ue(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)mP(e.repo,c,u);else{let x=gA({baseCommit:e.baseCommit,base:e.base,verifyRef:G=>ue(e.repo,["rev-parse","--verify","--quiet",`${G}^{commit}`],{allowFailure:!0}).trim().length>0});x.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${x.ref} (${x.source})`),e.baseCommit=ue(e.repo,["rev-parse",x.ref],{allowFailure:!0}).trim()||x.ref,Je(e)),ue(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let f=Ds.join(l,"stdout.jsonl"),m=Ds.join(l,"stderr.log"),g=Ds.join(l,"heartbeat.jsonl"),h=RA({task:t.task,ownedPaths:t.ownedPaths||[],worktreePath:c,heartbeatPath:g,planId:t.planId,taskId:t.taskId,instructionPolicyMarkdown:t.instructionPolicyMarkdown,memoryQualityMarkdown:t.memoryQualityPromptMarkdown??t.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:t.personaMarkdown,contextEnvelopeMarkdown:t.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:t.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:t.repairTargetPrUrl,repairTargetBranch:t.repairTargetBranch??(u||void 0)}),y=process.env.KYNVER_HARNESS_TASK_ID,b=process.env.KYNVER_HARNESS_AGENT_OS_ID;t.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(t.taskId)),t.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(t.agentOsId));let k=ed({title:t.taskTitle,personaSlug:t.personaSlug,parentTaskId:t.parentTaskId,executorRef:t.executorRef}),v,S,_,R,w=t.workerMcpToken?.trim();if(w&&ah(s.name)&&ha()){let x=Nn();x&&t.agentOsId&&t.taskId?(S={apiBaseUrl:x,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:w,capabilities:t.workerMcpCapabilities??null},console.error(`[supervisor] ${n}: worker tools enabled (in-process, no config on disk)`)):console.error(`[supervisor] ${n}: worker tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let B=SE(s.name);if(w&&B&&ha()){let x=Nn();if(x&&t.agentOsId&&t.taskId){let G=py({agentOsId:String(t.agentOsId),workerKey:l}),C=await Fa.start({address:G,apiBaseUrl:x,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:w,capabilities:t.workerMcpCapabilities??null,expiresAt:t.workerMcpExpiresAt??Date.now()+i4,workerPid:process.pid,identity:gy(),onRefusal:P=>console.error(`[supervisor] ${n}: worker tools refused a call (${P})`)});if($h(l,C),s.name==="codex"){let P=iI({workerDir:l,brokerSocketPath:G.socketPath});if(P.ok){let D=aI(P.codexHome,Cr());D.ok?(_=P.codexHome,v=_):(Na(l),await Zr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${D.detail}); spawning with the normal environment`))}else await Zr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${P.detail}`)}else if(s.name==="cursor"){let P=oI({worktreePath:c,brokerSocketPath:G.socketPath});P.ok?v=P.configPath:(await Zr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${P.detail}`))}else if(s.name==="gemini"&&_s(kt())==="antigravity"){let P=fI({worktreePath:c,brokerSocketPath:G.socketPath});P.ok?v=P.configPath:(await Zr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${P.detail}`))}else if(s.name==="gemini"){let P=gI({workerDir:l,brokerSocketPath:G.socketPath});P.ok?(R=P.geminiCliHome,v=R):(await Zr(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${P.detail}`))}else v=xE({workerDir:l,brokerSocketPath:G.socketPath});v&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${C.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let j=t.taskId?bw(vw(e.id,String(t.taskId),n)):null,O;try{O=Rw(j,()=>s.start({name:n,task:t.task,ownedPaths:t.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:g,prompt:h,reviewWorker:k,executionMode:t.executionMode??"write",...S?{workerToolGrant:S}:{},..._?{codexHome:_}:{},...R?{geminiCliHome:R}:{},...v?{mcpConfigPath:v,mcpAllowedTools:wE(t.workerMcpCapabilities)}:{}}))}catch(x){throw v&&(Tu(l),sd(c),Na(l),ld(l),ad(c),Cs(l)),ue(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ue(e.repo,["branch","-D",d],{allowFailure:!0}),x}finally{y===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=y,b===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=b}let T=ZE(O.model,i,s.defaultModel),U=A(),N=rt(process.env,U),J=Me().runnerId,F=qo({boxKind:N.boxKind,config:U,env:process.env}),W={name:n,runId:e.id,status:"running",pid:O.pid,model:T,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:g,ownedPaths:t.ownedPaths,...t.agentOsId?{agentOsId:String(t.agentOsId)}:{},...t.taskId?{taskId:String(t.taskId)}:{},...t.planId?{planId:String(t.planId)}:{},...t.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(t.instructionPolicyFingerprint)}:{},...t.instructionPolicyEvidence?{instructionPolicyEvidence:t.instructionPolicyEvidence}:{},...t.memoryQualityCapture?{memoryQualityCapture:t.memoryQualityCapture}:{},...t.personaSlug?{personaSlug:String(t.personaSlug)}:{},...t.personaEvidence?{personaEvidence:t.personaEvidence}:{},...t.contextEnvelopeEvidence?{contextEnvelopeEvidence:t.contextEnvelopeEvidence}:{},...t.runtimeEnvelopeEvidence?{runtimeEnvelopeEvidence:t.runtimeEnvelopeEvidence}:{},...t.leaseOwner?{leaseOwner:String(t.leaseOwner)}:{},...t.leaseToken?{leaseToken:String(t.leaseToken)}:{},...t.dispatched?{dispatched:!0}:{},...!t.agentOsId||!t.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...t.executorRef?{executorRef:String(t.executorRef)}:{},...t.parentTaskId?{parentTaskId:String(t.parentTaskId)}:{},...t.taskTitle?{taskTitle:String(t.taskTitle)}:{},...t.taskPrUrl?{taskPrUrl:String(t.taskPrUrl)}:{},...t.repairTargetPrUrl?{repairTargetPrUrl:String(t.repairTargetPrUrl)}:{},...t.repairTargetBranch?{repairTargetBranch:String(t.repairTargetBranch)}:{},executionMode:t.executionMode??"write",boxKind:N.boxKind,boxId:F,runtimeId:J,startedAt:new Date().toISOString(),...j?{oomRetryHeapMb:j}:{}};if(ee(e.id,W),Fh(l,O.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Ds.join(l,"worker.json")}},e.status="running",Je(e),W.agentOsId&&W.taskId){let x;try{x=dP({runId:e.id,workerName:n,workerDir:l,agentOsId:W.agentOsId})}catch(G){let C=`completion sidecar failed to spawn: ${G.message}`;W.completionBlocker=C,ee(e.id,W)}if(x)x.pid&&(W.completionSidecarPid=x.pid,ee(e.id,W));else{let G=W.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";W.completionBlocker=G,W.completionSidecarSpawnFailedAt=new Date().toISOString(),ee(e.id,W),fA(e.id,W,G)}}return W}var i4,EP=p(()=>{"use strict";xs();om();_e();Q();Q();hA();wA();M();wu();Kn();xA();pP();fP();gP();Ue();Yo();K();it();Hh();jh();zn();qh();Zn();Gh();xP();kr();Ph();i4=7200*1e3});function a4(e,t){let r=Ne(t)?.trim();return r||Pe("KYNVER_RUNNER_TOKEN",e)||Pe("OPENCLAW_RUNNER_TOKEN",e)||null}function l4(e){let t=Ce()?.trim();return t||Pe("KYNVER_API_KEY",e)||Pe("KYNVER_RUNTIME_SECRET",e)||Pe("KYNVER_CRON_SECRET",e)||Pe("OPENCLAW_CRON_SECRET",e)||null}async function AP(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.timeoutMs??8e3,s=new Date(n).toISOString(),i=t.fetcher??fetch,a=a4(r,e.agentOsId),l=l4(r),c="none",u={};if(a)c="runner_token",u["X-Kynver-Runner-Token"]=a;else if(l)c="api_key",u["X-Kynver-Service-Secret"]=l;else return{reachable:!1,authSource:"none",endpoint:null,httpStatus:null,responseMs:null,probedAt:s,error:"No runner token or API key found \u2014 set KYNVER_RUNNER_TOKEN, store runnerToken in ~/.kynver/credentials, or complete M0.3 install"};let d=`${e.apiBaseUrl}/api/agent-os/runner-token/verify`,f=Date.now();try{let m=AbortSignal.timeout(o),g=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:m}),h=Date.now()-f,y=g.status<500;return{reachable:y,authSource:c,endpoint:d,httpStatus:g.status,responseMs:h,probedAt:s,error:y?null:`MCP endpoint returned HTTP ${g.status} \u2014 server error or misconfigured KYNVER_API_URL`}}catch(m){let g=Date.now()-f,h=m instanceof Error?m.message:String(m);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:g,probedAt:s,error:`MCP endpoint unreachable: ${h}`}}}var IP=p(()=>{"use strict";K();_t()});function c4(e,t){let r=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||t.apiBaseUrl?.trim()||null;return r?sr(r)??null:null}function u4(e,t){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||t.defaultRepo?.trim()||null)??null}function d4(e,t,r){let n=e.KYNVER_HARNESS_ROOT?.trim()||t.harnessRoot?.trim()||null;return n||r||null}function PP(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.config??{},s=c4(r,o);if(!s)return{ok:!1,code:"missing_api_base_url",detail:"No API base URL found. Set KYNVER_API_URL, or run `kynver setup --api-base-url <url>`."};let i=(r.KYNVER_AGENT_OS_ID??r.OPENCLAW_AGENT_OS_ID??o.agentOsId??"").trim();if(i&&i!==e.agentOsId)return{ok:!1,code:"workspace_mismatch",detail:`envelope workspace "${e.agentOsId}" does not match local config "${i}"`};let a=u4(r,o),l=d4(r,o,a);return{ok:!0,context:{jobId:e.jobId,agentOsId:e.agentOsId,taskId:e.taskId,repoPath:a,worktreeBase:l,apiBaseUrl:s,hydratedAt:new Date(n).toISOString()}}}var OP=p(()=>{"use strict";ir()});var $a=p(()=>{"use strict"});var Ka=p(()=>{"use strict"});var yy=p(()=>{"use strict";K();Ka()});var by=p(()=>{"use strict";$a()});import{mkdirSync as NP}from"node:fs";import{homedir as p4,tmpdir as dSe}from"node:os";import _d from"node:path";function DP(){let e=process.env.KYNVER_STATE_ROOT;return e?_d.resolve(e):_d.join(p4(),".kynver","state")}function xd(){return _d.join(DP(),"plan-outbox")}function f4(){return _d.join(DP(),"plan-outbox-archive")}function MP(){let e=xd(),t=f4();return NP(e,{recursive:!0}),NP(t,{recursive:!0}),{outboxDir:e,archiveDir:t}}var Ha=p(()=>{"use strict"});function LP(){return{"planOutbox.storeFailures":ja.storeFailures,"planOutbox.corruptItemsSeen":ja.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":ja.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":ja.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":ja.halfArchivesCompleted}}var hSe,ja,Va=p(()=>{"use strict";Xr();ps();hSe=600*1e3,ja={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0}});import{existsSync as h4,readFileSync as y4,renameSync as vSe,readdirSync as RSe,rmSync as wSe,writeFileSync as SSe,unlinkSync as _Se}from"node:fs";import BP from"node:path";function UP(e){if(!h4(e))return null;try{return JSON.parse(y4(e,"utf8"))}catch{return null}}function Cd(e){let{outboxDir:t}=MP();return{jsonPath:BP.join(t,`${e.id}.json`),bodyPath:BP.join(t,e.bodyPath)}}var Ga=p(()=>{"use strict";Va();$a();by();Ha()});var WP=p(()=>{"use strict";$a();Ka();yy()});var vy=p(()=>{"use strict";yy();Ka();by();Ha();Va();Ga();WP()});import S4 from"node:path";function Ry(e){let t=S4.join(xd(),`${e}.json`);return UP(t)}var FP=p(()=>{"use strict";Ga();Va();vy();Ha()});function wy(e){let t=Cd(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${t.jsonPath}\``,`- body: \`${t.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
174
+ `)}function Sy(e){let t=e.metadata&&typeof e.metadata=="object"?e.metadata:null,r=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(t&&typeof t.planPersistenceOutboxId=="string"?t.planPersistenceOutboxId:void 0);return r?{outboxId:r,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:t&&typeof t.planPersistenceOutboxPath=="string"?t.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:t&&typeof t.planPersistenceBodyPath=="string"?t.planPersistenceBodyPath:void 0}:null}var $P=p(()=>{"use strict";Ga()});var KP=p(()=>{"use strict";$a();vy();FP();Ga();$P();Ha();Ka()});function _y(e){return e?.trim()?e.trim():null}function HP(e,t){let r=_y(e.boxKind),n=_y(e.runnerId),o=_y(e.harnessRoot);return r&&r!==t.boxKind?{ok:!1,reason:`run ${e.id} belongs to box "${r}" but this host is "${t.boxKind}" \u2014 use a run under ${t.harnessRoot}`}:n&&n!==t.runnerId?{ok:!1,reason:`run ${e.id} is bound to runner "${n}" but this host is "${t.runnerId}"`}:o&&o!==t.harnessRoot?{ok:!1,reason:`run ${e.id} harness root "${o}" does not match this host "${t.harnessRoot}"`}:!r||!n||!o?(e.boxKind=t.boxKind,e.runnerId=t.runnerId,e.harnessRoot=t.harnessRoot,Je(e),{ok:!0,stamped:!0}):{ok:!0}}var jP=p(()=>{"use strict";Q()});function VP(e=process.env){return Wt(A(),e,{requireExplicitBoxKind:!0})}function GP(e){return[...e.errors,...e.warnings].join("; ")}var JP=p(()=>{"use strict";K();An()});async function Ja(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,r;try{r=await fe(t,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.leaseToken?.trim()?{leaseToken:e.leaseToken.trim()}:{},...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,transportError:!0,releaseResponse:{ok:!1,error:s.message}}}let n=r.response;return{released:r.ok===!0||n?.ok===!0,httpOk:r.ok===!0,transportError:!1,releaseResponse:r.response??r}}var xy=p(()=>{"use strict";Ke()});function Ms(e){if(!e||typeof e!="object")return!1;let t=e;return[t.agentOsId,t.subjectTaskId,t.reviewTaskId,t.signature].every(r=>typeof r=="string"&&!!r)&&/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/[1-9]\d*$/.test(t.prUrl)&&/^[a-f0-9]{40}$/.test(t.headSha)&&/^[a-f0-9]{64}$/.test(t.reviewGenerationSha256)&&Number.isSafeInteger(t.reviewAttempt)&&t.reviewAttempt>0&&typeof t.acceptedAt=="string"&&Number.isFinite(Date.parse(t.acceptedAt))}function qP(e,t){return e.signature===t.signature&&e.agentOsId===t.agentOsId&&e.subjectTaskId===t.subjectTaskId&&e.prUrl===t.prUrl&&e.reviewTaskId===t.reviewTaskId&&e.reviewAttempt===t.reviewAttempt&&e.reviewGenerationSha256===t.reviewGenerationSha256&&e.headSha===t.headSha&&e.acceptedAt===t.acceptedAt}var Cy=p(()=>{"use strict"});function sn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function zP(e){let t=typeof e.completedAt=="string"&&e.completedAt||typeof e.startedAt=="string"&&e.startedAt;if(!t)return 0;let r=Date.parse(t);return Number.isFinite(r)?r:0}function XP(e){let t=Array.isArray(e)?e:[],r=new Map;for(let n of t){let o=n&&typeof n=="object"?n:{},s=sn(o),i=r.get(s);(!i||zP(o)>=zP(i))&&r.set(s,o)}return[...r.values()]}function _4(e){let t=typeof e.detailsUrl=="string"&&e.detailsUrl||typeof e.details_url=="string"&&e.details_url||typeof e.html_url=="string"&&e.html_url||"",r=typeof e.workflowName=="string"?e.workflowName.trim():"",n=e.app&&typeof e.app=="object"?e.app:null,o=typeof n?.slug=="string"?n.slug:"";return r.length>0||o==="github-actions"||/^https:\/\/github\.com\/[^/]+\/[^/]+\/actions\//i.test(t)}function QP(e){let t=XP(e),r=[],n=[],o=[];for(let s of t){if(_4(s)){o.push(sn(s));continue}let i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&YP.has(i))){if(i){n.push(`${sn(s)}=${i}`);continue}if(!(l&&YP.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${sn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){r.push(`${sn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){r.push(`${sn(s)}=${a}`);continue}r.push(`${sn(s)}=PENDING`)}}}return{pending:r,failed:n,ignoredActions:o}}function ZP(e){return XP(e).some(r=>{let n=sn(r),o=typeof r.conclusion=="string"?r.conclusion.toUpperCase():"",s=typeof r.state=="string"?r.state.toUpperCase():"";return/^vercel/i.test(n)&&(o==="SUCCESS"||s==="SUCCESS")})}function eO(e,t){let r=e==="UNSTABLE"&&t.ignoredActions.length>0;return!x4.has(e)&&!r?`mergeStateStatus is ${e}`:null}var YP,x4,tO=p(()=>{"use strict";YP=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);x4=new Set(["CLEAN","HAS_HOOKS"])});import{spawnSync as C4}from"node:child_process";function rO(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=C4("gh",["auth","token"],{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return{source:"missing",configured:!1,reason:typeof e.stderr=="string"&&e.stderr.trim()?e.stderr.trim():"gh auth token failed; run `gh auth login` on this machine"};let t=typeof e.stdout=="string"?e.stdout.trim():"";return t?(process.env.GH_TOKEN=t,{source:"gh-cli",configured:!0,reason:"Using local GitHub CLI auth for daemon land_pr merge"}):{source:"missing",configured:!1,reason:"gh auth token returned an empty token; run `gh auth login` on this machine"}}var nO=p(()=>{"use strict"});import{createHash as E4,randomUUID as A4}from"node:crypto";import{closeSync as oO,fsyncSync as sO,mkdirSync as I4,openSync as iO,realpathSync as P4,writeFileSync as O4}from"node:fs";import Ey from"node:path";function lO(e){return!!e&&[e.agentOsId,e.taskId,e.runId,e.workerName,e.leaseOwner,e.leaseToken,e.receiptDir].every(t=>typeof t=="string"&&!!t.trim())}function aO(e,t,r,n){I4(e,{recursive:!0,mode:448});let o=P4(e),s=iO(Ey.join(o,`${t}.${r}.json`),"wx",384);try{O4(s,JSON.stringify({...n,phase:r},null,2)+`
175
+ `),sO(s)}finally{oO(s)}for(let i=o;;i=Ey.dirname(i)){let a=iO(i,"r");try{sO(a)}catch(l){if(!T4(l))throw l}finally{oO(a)}if(i===Ey.dirname(i))break}}function T4(e,t=process.platform){return t==="win32"&&e?.code==="EPERM"}function cO(e,t,r,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:E4("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:t,invocationId:A4(),startedAt:new Date().toISOString(),finishedAt:null,headSha:r,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return aO(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return aO(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}var uO=p(()=>{"use strict"});import{spawnSync as dO}from"node:child_process";function Iy(e){return e?.trim()?["--repo",e.trim()]:[]}function pO(e){let t=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}function fO(e,t,r){let n=e.gh(t,r);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${r.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}function B4(e){let t=typeof e.title=="string"?e.title.trim():"",r=typeof e.body=="string"?e.body.trim():"",n=M4.test(t)||L4.test(r),o=N4.test(r),s=D4.test(r);return n||o||s||e.vercelCheckSuccess===!0}function U4(e){if(!B4({title:e.title,body:e.body,vercelCheckSuccess:ZP(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function W4(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);let t=QP(e.statusCheckRollup);if(t.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${t.failed.join(", ")}`);if(t.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${t.pending.join(", ")}`);let r=eO(e.mergeStateStatus,t);if(r)throw new Error(`PR #${e.number} ${r}`)}function F4(e){W4(e),U4(e)}function $4(e){try{return F4(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function K4(e,t,r,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(t,["api","-X","DELETE",`repos/${r}/git/refs/${o}`])}function H4(e,t,r){if(r?.trim())return r.trim();let n=e.gh(t,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function j4(e,t){if(!t?.trim())return;let r=dO("git",["worktree","list","--porcelain"],{windowsHide:!0,cwd:e,encoding:"utf8"});if(r.status!==0)return;let n=String(r.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${t}`)&&dO("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function mO(e){let t=e.cwd??process.cwd(),r=e.exec??rd,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=e.acceptedReview,s=()=>({prUrl:n,outcome:"blocked",reason:"accepted_review_required: missing, stale or changed head; fresh independent review required"});if(!Ms(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=rO();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=fO(r,t,["pr","view",n,...Iy(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","headRefOid","mergedAt","mergeCommit"].join(",")]);if(a.state==="MERGED")return{prUrl:a.url||n,outcome:"skipped",mergeCommit:a.mergeCommit?.oid??null,provenance:{attribution:"preexisting_merge",mergeInvoked:!1,headSha:a.headRefOid??null,mergedAt:a.mergedAt??null,mergeCommit:a.mergeCommit?.oid??null},reason:`PR #${a.number} is already merged \u2014 land_pr no-op (redelivery)`};if(a.headRefOid?.toLowerCase()!==o.headSha)return s();let l=$4(a);if(l)return e.skipNotReady?{prUrl:a.url||n,outcome:"skipped",reason:l}:{prUrl:a.url||n,outcome:"blocked",reason:l};if(e.dryRun)return{prUrl:a.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};if(!a.headRefOid||!/^[a-f0-9]{40}$/i.test(a.headRefOid)||!lO(e.operation))return{prUrl:n,outcome:"blocked",reason:"land_pr requires observed headRefOid and claimed dispatch operation identity"};let c=String(a.number),u=await e.revalidateAcceptedReview().catch(()=>null);if(!Ms(u)||!qP(o,u))return s();let d=cO(e.operation,n,o.headSha,o),f;try{f=r.gh(t,["pr","merge",c,...Iy(e.repo),"--squash","--match-head-commit",o.headSha])}catch{let y=d.finish({attribution:"unconfirmed",mergeInvoked:!0,headSha:a.headRefOid,mergedAt:null,mergeCommit:null,mergeExitCode:null});return{prUrl:n,outcome:"blocked",reason:"merge invocation threw; outcome unconfirmed",provenance:y}}let m=(y,b)=>d.finish({attribution:b,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:y?.mergedAt??null,mergeCommit:y?.mergeCommit?.oid??null,mergeExitCode:f.status});if(f.status!==0){let y=Ay(r,t,c,e.repo);return y?{prUrl:y.url||a.url||n,outcome:"skipped",mergeCommit:y.mergeCommit?.oid??null,provenance:m(y,"external_merge_observed"),reason:`PR #${a.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:a.url||n,outcome:"blocked",reason:f.stderr||f.stdout||"gh pr merge failed",provenance:m(null,"unconfirmed")}}let g=Ay(r,t,c,e.repo);if(g||(g=Ay(r,t,c,e.repo)),!g)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:m(null,"unconfirmed")};let h=m(g,"invoked_merge_observed");try{let y=H4(r,t,e.repo);K4(r,t,y,a.headRefName),j4(t,a.headRefName)}catch{}return{prUrl:g?.url||a.url||n,outcome:"merged",provenance:h,mergeCommit:g?.mergeCommit?.oid??null,reason:`Daemon land_pr invoked merge; PR #${a.number} read back merged`}}function Ay(e,t,r,n){try{let o=fO(e,t,["pr","view",r,...Iy(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}var N4,D4,M4,L4,gO=p(()=>{"use strict";Cy();nd();tO();nO();uO();N4=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,D4=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,M4=/^docs[(:]/i,L4=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i});async function hO(e){let t=e.decision.task,r=e.decision.acceptedReview,n=String(t.prUrl??"");return mO({prUrl:n,cwd:e.cwd,repo:pO(n),exec:e.exec,operation:e.operation,acceptedReview:Ms(r)?r:void 0,revalidateAcceptedReview:async()=>{let o=await fe(`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(String(t.id))}/landing-review`,e.secret,{leaseToken:t.leaseToken,leaseOwner:t.leaseOwner,attempt:t.attempt},{agentOsId:e.agentOsId,baseUrl:e.baseUrl}),s=o.response;return o.ok&&s?.ok===!0&&Ms(s.acceptedReview)?s.acceptedReview:null}})}var yO=p(()=>{"use strict";Ke();Cy();gO()});async function kO(e){let t=await ye(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),r=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=e.report.provenance?.finishedAt??new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${r}`,taskId:r,leaseToken:e.task.leaseToken??null,startedAt:e.report.provenance?.startedAt??o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await fe(n,t,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}var bO=p(()=>{"use strict";K();Ke()});function vO(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "liveReadback": "<prod readback string from acceptance.liveReadbackQuery>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface.","When the subject carries an acceptance snapshot, include liveReadback \u2014 the server oracle rejects passed if the original symptom still appears."].join(`
176
+ `)}var RO=p(()=>{"use strict"});function ro(e){return`${V4} ${e.trim()}`}function G4(e){return e.branch?.trim()?e.worktreePath?.trim()?e.heartbeatPath?.trim()?e.startedAt?.trim()?null:"missing local worker startedAt":"missing local worker heartbeatPath":"missing local worker worktreePath":"missing local worker branch"}function J4(e){let{snapshot:t,leaseOwner:r,expectedLeaseToken:n,worker:o}=e;if(!t)return{ok:!1,error:ro("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:r,expectedLeaseToken:n}};if(t.status!=="running")return{ok:!1,error:ro(`AgentOS task status=${t.status} (expected running)`),detail:{taskId:t.taskId,status:t.status,leaseOwner:t.leaseOwner,blocker:t.blocker},snapshot:t};let s=t.leaseOwner?.trim()??"";if(!s||s!==r.trim())return{ok:!1,error:ro(`leaseOwner mismatch (board=${s||"null"}, expected=${r})`),detail:{taskId:t.taskId,boardLeaseOwner:s||null,expectedLeaseOwner:r},snapshot:t};let i=t.leaseToken?.trim()??"";if(!i||i!==n.trim())return{ok:!1,error:ro(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:t.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:t};let a=G4(o);return a?{ok:!1,error:ro(a),detail:{taskId:o.taskId,worker:o.name},snapshot:t}:t.heartbeatAt?.trim()?o.executorRef?.trim()&&t.executorRef?.trim()&&o.executorRef.trim()!==t.executorRef.trim()?{ok:!1,error:ro(`executorRef mismatch (board=${t.executorRef}, worker=${o.executorRef})`),detail:{taskId:t.taskId,boardExecutorRef:t.executorRef,workerExecutorRef:o.executorRef},snapshot:t}:{ok:!0,snapshot:t}:{ok:!1,error:ro("AgentOS heartbeatAt missing after claim"),detail:{taskId:t.taskId},snapshot:t}}async function wO(e){let t=await Vu({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return J4({snapshot:t.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}var V4,SO=p(()=>{"use strict";vh();V4="dispatch_start_readback_failed:"});function _O(e,t,r){t.pid&&oe(t.pid)&&(he(t.pid,"SIGTERM"),oe(t.pid)&&he(t.pid,"SIGKILL"));let n={...t,status:"failed",pid:void 0,completionBlocker:r,dispatchStartReadbackFailed:!0};return ee(e,n),n}var xO=p(()=>{"use strict";M();Q()});function CO(e){let t=typeof e.personaSlug=="string"?e.personaSlug.trim().toLowerCase():"";if(t==="dalton"||t==="lorentz")return!0;let r=typeof e.executorRef=="string"?e.executorRef.trim().toLowerCase():"";if(r.startsWith("expert-lane-pr-review:")||r.startsWith("scheduledjob:")&&e.parentTaskId)return!0;let n=typeof e.title=="string"?e.title.toLowerCase():"";return n.includes("expert pr review")||n.startsWith("[dalton] review")||n.startsWith("[lorentz] review")}async function EO(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,r=await fe(t,e.secret,{phase:"worker_start"},{agentOsId:e.agentOsId,baseUrl:e.baseUrl});if(!r.ok)return null;let n=r.response;return n&&typeof n=="object"?n:null}var AO=p(()=>{"use strict";Ke()});function IO(e){let t=e.admissionExhaustion;return!t||typeof t!="object"?null:t}function PO(e){let t=e.dispatchSkipDrain;return!t||typeof t!="object"?null:t}function q4(e){let t=e.harnessWorkerContext;if(!t||typeof t!="object")return null;let r=t,n=typeof r.instructionPolicyMarkdown=="string"?r.instructionPolicyMarkdown:null,o=typeof r.instructionPolicyFingerprint=="string"?r.instructionPolicyFingerprint:null,s=r.instructionPolicyEvidence&&typeof r.instructionPolicyEvidence=="object"?r.instructionPolicyEvidence:null,i=typeof r.personaMarkdown=="string"?r.personaMarkdown:null,a=typeof r.personaEvidence=="object"&&r.personaEvidence&&typeof r.personaEvidence.injectedPersonaSlug=="string"?r.personaEvidence.injectedPersonaSlug:null,l=r.personaEvidence&&typeof r.personaEvidence=="object"?r.personaEvidence:null,c=r.personaInjectionReady===!0,u=typeof r.contextEnvelopeMarkdown=="string"?r.contextEnvelopeMarkdown:null,d=r.contextEnvelopeEvidence&&typeof r.contextEnvelopeEvidence=="object"?r.contextEnvelopeEvidence:null,f=r.contextEnvelopeReady===!0,m=typeof r.runtimeEnvelopeMarkdown=="string"?r.runtimeEnvelopeMarkdown:null,g=z4(r.runtimeEnvelopeReceipt),h=r.runtimeEnvelopeReady===!0,y=r.memoryQualityCapture&&typeof r.memoryQualityCapture=="object"?r.memoryQualityCapture:null,b=typeof r.memoryQualityPromptMarkdown=="string"?r.memoryQualityPromptMarkdown:typeof y?.promptMarkdown=="string"?y.promptMarkdown:null,k=r.workerMcpToolGrant&&typeof r.workerMcpToolGrant=="object"?r.workerMcpToolGrant:null,v=k&&typeof k.token=="string"&&k.token.trim()?k.token.trim():null,S=v&&Array.isArray(k?.capabilities)?k.capabilities.filter(R=>typeof R=="string"&&R.trim().length>0):null,_=v&&typeof k?.exp=="number"&&Number.isFinite(k.exp)?k.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:y,memoryQualityPromptMarkdown:b,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f,runtimeEnvelopeMarkdown:m,runtimeEnvelopeEvidence:g,runtimeEnvelopeReady:h,workerMcpToken:v,workerMcpCapabilities:S,workerMcpExpiresAt:_}}function Y4(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return t.length?t:null}function z4(e){if(!e||typeof e!="object")return null;let t=e;return typeof t.envelopeId!="string"||!t.envelopeId.trim()?null:{envelopeId:t.envelopeId,envelopeSchemaVersion:typeof t.envelopeSchemaVersion=="string"?t.envelopeSchemaVersion:void 0,generatedAt:typeof t.generatedAt=="string"?t.generatedAt:void 0,injectedAt:typeof t.injectedAt=="string"?t.injectedAt:void 0,mode:typeof t.mode=="string"?t.mode:void 0,memoryIncludedCount:typeof t.memoryIncludedCount=="number"?t.memoryIncludedCount:void 0,memoryOmittedCount:typeof t.memoryOmittedCount=="number"?t.memoryOmittedCount:void 0,degraded:typeof t.degraded=="boolean"?t.degraded:void 0,degradedReason:typeof t.degradedReason=="string"?t.degradedReason:t.degradedReason===null?null:void 0,auditFingerprint:typeof t.auditFingerprint=="string"?t.auditFingerprint:void 0,promptMarkdownChars:typeof t.promptMarkdownChars=="number"?t.promptMarkdownChars:void 0}}function X4(e,t){let r=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${t}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&r.push("",vO());let n=Sy(e);if(n?.outboxId){let o=Ry(n.outboxId);o?r.push("",wy(o)):r.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return r.join(`
177
+ `)}function Q4(e){let t=new Set;if(e.targetTaskId)return t.add(String(e.targetTaskId)),t;if(e.targetTaskIds)for(let r of String(e.targetTaskIds).split(",")){let n=r.trim();n&&t.add(n)}return t}async function Ls(e){let t=e.pipeline===!0||e.pipeline==="true";try{let V=function(){return C.filter(I=>I.started).length},te=function(I,E){la({runId:l.id,agentOsId:u,phase:I,startedCount:V(),outcomeCount:C.length,cappedStarts:O,...E})},pe=function(){return C.some(I=>(typeof I.error=="string"?I.error:"").startsWith("dispatch_start_readback_failed:"))},ge=function(I){return I.landPrDispatch===!0?!0:I.task?.executor==="land_pr"};var r=V,n=te,o=pe,s=ge;let i=VP();if(!i.ok||!i.identity){let I=GP(i);if(t)return{ok:!1,error:I,boundary:i};console.error(`run dispatch failed: ${I}`),process.exit(1)}let a=i.identity;for(let I of i.warnings)console.error(`[dispatch] runner-boundary warning: ${I}`);let l=se(String(xt(String(e.run||""),"--run"))),c=HP(l,a);if(!c.ok){let I=c.reason??"run does not belong to this runner boundary";if(t)return{ok:!1,error:I,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${I}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(xt(String(e.agentOsId||""),"--agent-os-id")),d=me(e.baseUrl?String(e.baseUrl):void 0),f=await ye(e.secret?String(e.secret):void 0,u,{baseUrl:d}),m=e.execute===!0||e.execute==="true",g=!m,h=Me({runId:l.id}),y=Ca(l.id,h.runnerId),b=ZS(),k=b?Yc(l.repo):null,v=new WeakMap;if(b&&m&&!k){let I="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(t)return{ok:!1,error:I,runId:l.id};console.error(`run dispatch failed: ${I}`),process.exit(1)}let S=e.diskPath?$r({diskPath:String(e.diskPath)}):$r({diskPath:l.repo}),_=await TC({runId:l.id,agentOsId:u,args:e}),R=Q4(e),w=R.size>0,B=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,j=w?Math.min(B,R.size):B;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let I=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await fe(I,f,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(E){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${E.message}`)}}let O=g?j:Math.min(j,_.slotsAvailable);if(!g&&O<=0){let I={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:_.reason??"no resource slots",resourceGate:_};if(t)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let T=ns(l.id),U=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,N=(I,E)=>({agentOsId:u,...E?{claimAuthorization:E}:{},dryRun:g,maxStarts:I,leaseOwner:y,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Sh,runnerDiskGate:S,runnerResourceGate:_,activeHarnessWorkers:T,runnerPresence:h,harnessBoardSnapshot:uy(l.id),...e.lane?{lane:PC(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(H=>H.trim()).filter(Boolean)}:{}}),J=wC(),F=async I=>{let E=b&&k?n_(k):void 0,H=await fe(U,f,N(I,E),{agentOsId:u,baseUrl:d,timeoutMs:J})??{ok:!1,status:0,response:null},X=H.response;if(E&&Array.isArray(X?.result?.started))for(let ie of X.result.started)ie&&typeof ie=="object"&&v.set(ie,E.requestNonce);return{dispatch:H,result:X?.result}};g||la({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:J});let W=await F(w||g?O:1);if(!W.dispatch.ok||!W.result){let I=Wg(W.dispatch.response),E={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:W.dispatch.status,response:W.dispatch.response,authRefreshed:W.dispatch.refreshedAuth===!0,authRefreshFailure:W.dispatch.authRefreshFailure,...I?{timeout:!0}:{}};if(I&&la({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:W.dispatch.status}),t)return{ok:!1,...E};console.log(JSON.stringify(E,null,2)),process.exit(1)}let x=W.result;if(g){let I=IO(x),E=PO(x),H={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:x.started.map(X=>({taskId:X.task.id,title:X.task.title,reason:X.reason})),skipped:x.skipped.map(X=>({taskId:X.task.id,skipReason:X.skipReason,reason:X.reason})),diskGate:x.diskGate,resourceGate:x.resourceGate,inspected:x.inspected,pagesScanned:x.pagesScanned??null,candidatesExhausted:x.candidatesExhausted??null,capacityIdle:I?.capacityIdle===!0,admissionExhaustion:I,dispatchSkipDrain:E};if(t)return{ok:!0,...H};console.log(JSON.stringify(H,null,2));return}let G=oA(),C=[],P=[],D=Number(x.inspected)||0,ne=!1;async function Y(I,E,H){let X=await Ja({baseUrl:d,secret:f,agentOsId:u,taskId:String(I.id),leaseOwner:y,leaseToken:I.leaseToken?String(I.leaseToken):null,failureDetail:E});I.leaseToken&&Es({taskId:String(I.id),leaseToken:String(I.leaseToken).trim()},ey(E));let ie={taskId:I.id,started:!1,error:E,released:X.released,releaseResponse:X.releaseResponse,...H};return C.push(ie),te("outcome",{lastOutcome:ie}),!1}async function PF(I){let E=I.task,H=String(E.id);if(w&&!R.has(H))return Y(E,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...R]});if(!(E.prUrl?String(E.prUrl):""))return Y(E,"land_pr task missing prUrl");try{let ie=await hO({decision:I,baseUrl:d,secret:f,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:H,runId:l.id,workerName:`land-pr-${H}`,leaseOwner:y,leaseToken:typeof E.leaseToken=="string"?E.leaseToken:"",receiptDir:`${q(l.id)}/land-pr-operations`}}),St=await kO({baseUrl:d,secret:f,agentOsId:u,runId:l.id,task:E,report:ie});return St.ok?(C.push({taskId:H,started:!0,landPr:!0,outcome:ie.outcome,completionStatus:St.status}),!0):Y(E,`land_pr completion POST failed (HTTP ${St.status})`,{landPr:!0,outcome:ie.outcome})}catch(ie){return Y(E,ie.message)}}async function OF(I){let E="duplicate_dispatch_prevented: live local worker already owns this task",H=await Ja({baseUrl:d,secret:f,agentOsId:u,taskId:String(I.id),leaseOwner:y,leaseToken:I.leaseToken?String(I.leaseToken):null,failureDetail:E});I.leaseToken&&Es({taskId:String(I.id),leaseToken:String(I.leaseToken).trim()},ey(E));let X={taskId:I.id,started:!1,error:E,alreadyRunning:!0,nonFatal:!0,released:H.released,releaseResponse:H.releaseResponse};return C.push(X),te("outcome",{lastOutcome:X}),!1}async function TF(I){let E=I.task,H=q4(I),X=String(E.id);if(w&&!R.has(X))return Y(E,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...R]});let ie=Y4(E.personaSlug);if(ie&&(!H?.personaInjectionReady||!H.personaMarkdown))return Y(E,`persona_injection_required: missing anchored context-envelope persona block for "${ie}"`);if(ie&&!H?.runtimeEnvelopeReady)return Y(E,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${ie}"`);if(cA(l.id,X))return OF(E);let St=Number(E.attempt)||1;if(St>G.maxTaskAttempts)return Y(E,`task attempt ${St} exceeds KYNVER_MAX_TASK_ATTEMPTS (${G.maxTaskAttempts})`);let vn=E.leaseToken?String(E.leaseToken).trim():"";if(!vn)return Y(E,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Rn=L(`t-${E.id}-a${E.attempt}`),or=Hu({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:A().workerProvider,task:DC(E)});II({taskId:X,leaseToken:vn,runId:l.id,workerName:Rn,provider:or.provider??null});let Tf=tA({task:E,routing:or,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!Tf.ok)return Y(E,Tf.error??"model_routing_mismatch",{modelRoutingGuard:Tf});if(CO(E)){let Ze=await EO({agentOsId:u,taskId:X,baseUrl:d,secret:f});if(Ze&&Ze.dispatchable===!1)return Y(E,`pr_review_head_reconcile_blocked: ${Ze.reason??Ze.outcome??"stale PR head"}`,{headReconcile:Ze});if(Ze?.activeReviewTaskId&&Ze.activeReviewTaskId!==X)return Y(E,`pr_review_head_reconcile_retargeted: active review is ${Ze.activeReviewTaskId}`,{headReconcile:Ze})}let Kl=XI(or.provider);if(!Kl.ok)return Y(E,`provider_quota_exhausted: ${Kl.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Kl.provider,retryAt:Kl.retryAtIso}});try{let Ze=E.planId?String(E.planId):void 0,Hl=kA({title:E.title?String(E.title):void 0,description:E.description?String(E.description):null,executorRef:E.executorRef?String(E.executorRef):null,prUrl:E.prUrl?String(E.prUrl):null,branch:E.branch?String(E.branch):null}),pR=KI({runId:l.id,workerName:Rn,maxSlots:_.maxConcurrentWorkers,diskActiveWorkers:um()});if(!pR.admitted)return Y(E,`admission_refused: ${pR.reason}`,{nonFatal:!0});let jl=H?.workerMcpToken??null;if(jl&&ha()){let Io=PP({jobId:`dispatch:${String(E.id)}`,agentOsId:u,taskId:String(E.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Io.ok)console.error(`[dispatch] worker tools skipped for task ${String(E.id)}: context hydration failed (${Io.code}: ${Io.detail}) \u2014 spawning without tools`),jl=null;else{let Nf=await AP(Io.context);Nf.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(E.id)}: tool endpoint probe failed (${Nf.error??`HTTP ${Nf.httpStatus}`}) \u2014 spawning without tools`),jl=null)}}pA(l.id,String(E.id),{except:Rn});let Ut=await CP(l,{name:Rn,task:X4(E,u),ownedPaths:e.owned?String(e.owned).split(",").map(Io=>Io.trim()).filter(Boolean):[],model:or.model,provider:or.provider,routingRule:or.rule,requestedModel:or.requestedModel,agentOsId:u,taskId:String(E.id),planId:Ze,branch:Hl?.targetPrBranch??void 0,executorRef:E.executorRef?String(E.executorRef):void 0,parentTaskId:E.parentTaskId?String(E.parentTaskId):void 0,taskTitle:E.title?String(E.title):void 0,taskPrUrl:Hl?.targetPrUrl??(E.prUrl?String(E.prUrl):void 0),repairTargetPrUrl:Hl?.targetPrUrl,repairTargetBranch:Hl?.targetPrBranch??void 0,instructionPolicyMarkdown:H?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:H?.instructionPolicyFingerprint??null,instructionPolicyEvidence:H?.instructionPolicyEvidence??null,memoryQualityCapture:H?.memoryQualityCapture??null,memoryQualityPromptMarkdown:H?.memoryQualityPromptMarkdown??null,personaMarkdown:H?.personaMarkdown??null,personaSlug:H?.personaSlug??ie,personaEvidence:H?.personaEvidence??null,contextEnvelopeMarkdown:H?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:H?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:H?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:H?.runtimeEnvelopeEvidence??null,workerMcpToken:jl,workerMcpCapabilities:H?.workerMcpCapabilities??null,workerMcpExpiresAt:H?.workerMcpExpiresAt??null,leaseOwner:y,leaseToken:vn,dispatched:!0,executionMode:Jc(E)}),Vl=await wO({agentOsId:u,taskId:String(E.id),leaseOwner:y,expectedLeaseToken:vn,worker:Ut,baseUrl:d,secret:f});if(!Vl.ok)return _O(l.id,Ut,Vl.error??"dispatch_start_readback_failed"),on(l.id,Rn),Y(E,Vl.error??"dispatch_start_readback_failed",{readback:Vl.detail??null});Ut.leaseToken!==vn&&(Ut.leaseToken=vn,Ut.leaseOwner=y,ee(l.id,Ut)),hd({taskId:X,leaseToken:vn}),UI(l.id,Rn);let fR={taskId:E.id,started:!0,worker:Ut.name,pid:Ut.pid,branch:Ut.branch,model:Ut.model,provider:or.provider,routingRule:or.rule,instructionPolicyFingerprint:H?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(H?.instructionPolicyEvidence?.ruleSlugs)?H.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:H?.personaSlug??ie,personaOperatingRuleCount:H?.personaEvidence?.operatingRuleCount??null};return C.push(fR),te("worker_started",{lastOutcome:fR}),H?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${X}: instruction policy injected fingerprint=${H.instructionPolicyFingerprint}`),H?.personaSlug&&console.error(`[dispatch] task ${X}: persona context injected slug=${H.personaSlug}`),H?.contextEnvelopeReady&&console.error(`[dispatch] task ${X}: context envelope injected anchor=${H.contextEnvelopeEvidence?.anchorTaskId??X}`),H?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${X}: runtime envelope injected id=${H.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(Ze){return on(l.id,Rn),Y(E,Ze.message)}}let Of=new Set;for(let I of DI(l.id))Of.add(I);async function aR(I){let E=I.task,H=String(E.id);if(Of.has(H))return Y(E,"dispatch_retry_loop_prevented: task already failed to start this tick");let X=b?o_({decision:I,leaseOwner:y,repoIdentity:k,requestNonce:v.get(I)??null}):null,ie=X&&!X.allow?await Y(E,`desktop_execution_policy_denied:${X.code}: ${X.reason}`,{desktopPolicyDenied:X.code,...X.code==="operation_not_approved"?{nonFatal:!0}:{}}):ge(I)?await PF(I):await TF(I);return ie||(Of.add(H),NI(H,l.id)),ie}for(let I of x.started)await aR(I);if(P.push(...x.skipped??[]),w)for(let I of P){let E=String(I.task.id);R.has(E)&&C.push({taskId:E,started:!1,error:`exact_target_not_started:${I.skipReason}`,skipReason:I.skipReason,detail:I.reason??null,requestedTargetTaskIds:[...R]})}for(;!w&&C.length<O;){if(pe()){let H={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};C.push(H),te("circuit_breaker",{lastOutcome:H});break}let I=await F(1);if(!I.dispatch.ok||!I.result){let H=_C(I.dispatch.response),X=V();ne=H&&X>0;let ie=Wg(I.dispatch.response),St={started:!1,error:ie?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:I.dispatch.status,response:I.dispatch.response,...ie?{timeout:!0}:{},...ne?{nonFatal:!0,partialTopUp:!0}:{}};C.push(St),te("top_up_failed",{partialTopUpInterrupted:ne,lastOutcome:St});break}D+=Number(I.result.inspected)||0,P.push(...I.result.skipped??[]);let E=I.result.started??[];if(E.length===0)break;for(let H of E){if(C.length>=O)break;await aR(H)}}let $l=C.filter(I=>I.started).length,Fr=IO(x),Ao=PO(x),lR=$l===0&&(Fr?.capacityIdle===!0||Number(x.resourceGate?.slotsAvailable)>0);if(lR&&Fr?.summary){let I=Fr.skipReasonCounts?.retry_ceiling_exceeded??0,E=x.overAttemptIdleRecovery??Fr.overAttemptIdleRecovery,H=E?.attempted===!0?`; over_attempt_recovery minted=${E.minted??0} started=${E.started??0}`:I>0?"; over_attempt_recovery not attempted":"",X=Ao?`; dispatch_skip_drain scanned=${Ao.scanned??0} advanced=${Ao.advanced??0}`:"",ie=Fr.progressionReport?.summary?`; ${Fr.progressionReport.summary}`:"",St=Ao?.prLifecycleAttempt?.summary?`; ${Ao.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Fr.summary}${I>0?`; retry_ceiling_exceeded=${I}`:""}${H}${X}${ie}${St}`)}let cR={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:y,startedCount:$l,capacityIdle:lR,admissionExhaustion:Fr,dispatchSkipDrain:Ao,outcomes:C,skipped:P.map(I=>({taskId:I.task.id,skipReason:I.skipReason})),inspected:D,pagesScanned:x.pagesScanned??null,candidatesExhausted:x.candidatesExhausted??null,diskGate:x.diskGate,resourceGate:x.resourceGate,...ne?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:J},uR=I=>!I.started&&I.nonFatal!==!0,NF=C.some(uR),dR=ne&&$l>0?!0:!NF;if(la({runId:l.id,agentOsId:u,phase:"complete",partial:ne,startedCount:$l,ok:dR}),t)return{ok:dR,...cR};console.log(JSON.stringify(cR,null,2)),C.some(uR)&&process.exit(1)}catch(i){if(t)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var Sh,Ju=p(()=>{"use strict";K();zc();Ke();SC();xC();OC();Ci();NC();jo();Q();Q();MC();wu();rA();sA();wh();EP();xs();IP();OP();it();Hc();Ns();M();KP();xh();Ea();kr();jP();JP();xy();cy();yO();bO();RO();SO();xO();Q();AO();Lm();As();to();Ps();Sh=3600*1e3});function Bs(e){if(!e||typeof e!="object")return 0;let t=e.startedCount;if(typeof t=="number")return t;let r=e.outcomes;return Array.isArray(r)?r.filter(n=>n.started).length:0}function e6(e){let{maxStarts:t,...r}=e;return r}async function Py(e,t){if(t<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let r=e6(e);if(r.targetTaskId||r.targetTaskIds){let u=await Ls({...r,execute:!0,pipeline:!0,maxStarts:String(t)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Bs(u)}}let n=Math.min(t,Z4),o=Math.max(0,t-n),s=await Ls({...r,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Bs(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ls({...r,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Bs(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}var Z4,OO=p(()=>{"use strict";Ju();Z4=1});function TO(e){if(!e||typeof e!="object")return[];let r=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(r))return[];let n=new Set,o=[];for(let s of r){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}var NO=p(()=>{"use strict"});function t6(e){let r=e.response?.dispatch;return r&&typeof r=="object"?r:null}function qa(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function r6(e){let t=Number(process.env[e]);return!Number.isFinite(t)||t<=0?null:Math.floor(t)}function DO(e,t){let r=t6(t),n=qa(r?.recommendedMaxStarts),o=qa(r?.actionableReady),s=qa(r?.queuedTasks),i=qa(r?.boardAdvancedThisTick)??0,a=qa(r?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=r?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let g=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,g))}let f=r6("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,f));let m=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:m,boardAdvancedThisTick:i,leaseReapedThisTick:a}}var MO=p(()=>{"use strict"});import n6 from"node:path";function no(e){let t=Et(e);if(t.length===0)return"failed";let r=!1,n=!1,o=!1,s=!1;for(let i of t){let a=$(n6.join(q(e.id),"workers",L(i),"worker.json"),void 0);if(!a)continue;let l=ae(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){r=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),cm(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return r||o||s?null:n?"completed":"failed"}function Ya(){let e=[];for(let t of xe()){if(!o6.has(t.status))continue;let r=no(t);if(!r||r===t.status)continue;let n=t.status;t.status=r,Je(t),e.push({runId:t.id,from:n,to:r})}return e}var o6,Tr,an=p(()=>{"use strict";Q();Bo();Ae();M();o6=new Set(["running","dispatching","pending","queued","needs_attention"]),Tr=new Set(["completed","failed","cancelled","done"])});import Mt from"node:path";function Ed(e){return e.includes(s6)}function Oy(e,t){return Mt.join(ot(De(e)),L(t))}function ln(e,t,r){return Mt.join(Oy(e,t),"workers",L(r))}function LO(e,t,r){let n=De(e);return Mt.join(n,"runs","runs",L(t),"workers",L(r))}function Ty(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function oo(e){return{workerJsonPath:Mt.join(e,"worker.json"),stdoutPath:Mt.join(e,"stdout.jsonl"),stderrPath:Mt.join(e,"stderr.log"),heartbeatPath:Mt.join(e,"heartbeat.jsonl"),lastStatusPath:Mt.join(e,"last-status.json")}}function BO(e){let t=oo(ln(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Ed(e.statusPath)?e.statusPath:t}var s6,Ny=p(()=>{"use strict";At();M();s6=`${Mt.sep}runs${Mt.sep}runs${Mt.sep}`});import{existsSync as i6,readFileSync as a6,readdirSync as l6,statSync as c6,writeFileSync as u6}from"node:fs";import d6 from"node:path";function y6(e,t=[]){if(!e)return e;let r=e,n=[...new Set(t.map(o=>o?.trim()).filter(o=>!!o&&o.length>=f6))].sort((o,s)=>s.length-o.length);for(let o of n){r.includes(o)&&(r=r.split(o).join(lt));let s=JSON.stringify(o).slice(1,-1);s!==o&&r.includes(s)&&(r=r.split(s).join(lt))}for(let[o,s]of p6)r=r.replace(o,s);return r}function UO(e=process.env,t=[]){let r=[];for(let[n,o]of Object.entries(e))o&&m6.test(n)&&r.push(o);for(let n of t)try{let o=n();o&&r.push(o)}catch{}return r}function WO(e,t=0){if(t>3||!i6(e))return[];let r=[];for(let n of l6(e,{withFileTypes:!0})){let o=d6.join(e,n.name);n.isDirectory()?r.push(...WO(o,t+1)):n.isFile()&&g6.test(n.name)&&r.push(o)}return r}function FO(e,t=[]){let r={masked:[],clean:0,failed:[]},n;try{n=WO(e)}catch{return r}for(let o of n)try{if(c6(o).size>h6){r.failed.push(o);continue}let s=a6(o,"utf8"),i=y6(s,t);if(i===s){r.clean+=1;continue}u6(o,i,"utf8"),r.masked.push(o)}catch{r.failed.push(o)}return r}var lt,Dy,p6,f6,m6,g6,h6,$O=p(()=>{"use strict";lt="<redacted>",Dy=`[^\\s"'\\\\,}\\]]`,p6=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Dy}+`,"gi"),lt],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Dy}+`,"gi"),lt],[/\bkynver_u_[A-Za-z0-9_-]+/g,lt],[/\bkyn_[A-Za-z0-9]{12,}/g,lt],[/\bsk-ant-[A-Za-z0-9_-]+/g,lt],[/\bsk-[A-Za-z0-9_-]{8,}/g,lt],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,lt],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,lt],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,lt],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${lt}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Dy}+`,"g"),`$1${lt}`]],f6=12,m6=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,g6=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,h6=256*1024*1024});import{existsSync as cn,mkdirSync as k6,readdirSync as HO,renameSync as b6,statSync as My}from"node:fs";import ve from"node:path";function jO(e,t){let r=ve.resolve(e),n=ve.resolve(ot(t)),o=ve.relative(n,r);return o!==".."&&!o.startsWith("..")&&!ve.isAbsolute(o)}function Ly(e){if(!cn(e))return[];try{return HO(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&t.name!=="runs").map(t=>t.name)}catch{return[]}}function By(e){let t=ve.join(e,"workers");if(!cn(t))return[];try{return HO(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name)}catch{return[]}}function VO(e){return ve.join(e,"archived-workers")}function R6(e,t){let r=ve.join(VO(e),L(t));return cn(r)?`${r}-${Date.now()}`:r}function KO(e,t,r){if(!cn(e))return!1;try{let n=t-My(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function GO(e,t=Date.now(),r=za){if(!cn(e))return!1;let n=oo(e),o=$(n.workerJsonPath,void 0);if(o?.status==="running"&&oe(o.pid))return!0;let s=Oe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=t-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<r)return!0}return!!(KO(n.stdoutPath,t,r)||KO(n.heartbeatPath,t,r))}function w6(e,t,r){let n=typeof t.completionReportedAt=="string"?Date.parse(t.completionReportedAt):NaN;if(Number.isFinite(n))return r-n;let o=(()=>{let s=t.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return r-o;try{return r-My(ve.join(e,"worker.json")).mtimeMs}catch{return 0}}function S6(e,t,r,n){if(GO(e,r))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof t.status=="string"?t.status:"";if(typeof t.completionBlocker=="string"&&t.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof t.completionReportedAt=="string"||t.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=w6(e,t,r);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function Us(e,t=Date.now(),r=za){for(let n of By(e))if(GO(ve.join(e,"workers",n),t,r))return!0;return!1}function _6(){let t=ra()?.repo??"",r="unknown";if(t)try{let n=ue(t,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(r=n)}catch{}return{repo:t,base:"origin/main",baseCommit:r}}function x6(e,t){let r=ve.join(ot(e),L(t));if(!cn(r))return null;let n=By(r);if(n.length===0)return null;let o;try{o=My(r).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=ln(e,t,a);s[a]={workerDir:l,statusPath:ve.join(l,"worker.json")}}let i=Us(r);return{id:t,name:t,..._6(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Uy(e){let t=De(e??ft()),r=ot(t),n=[];for(let o of Ly(r)){let s=ve.join(r,o,"run.json");if(cn(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=x6(t,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Je(i),n.push({runId:o,action:"repaired_run_json",reason:Us(ve.join(r,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Wy(e,t={}){let r=De(e??ft()),n=ot(r),o=t.now??Date.now(),s=t.archiveAgeMs??v6,i=[],a=null,l=()=>a??=(t.knownSecrets??(()=>UO(process.env,[Ce,()=>Ne()])))();Uy(r);for(let c of Ly(n)){let u=ve.join(n,c),d=ve.join(u,"run.json"),f=$(d,void 0);if(!f?.id)continue;let m=new Set([...Object.keys(f.workers||{}),...By(u)]),g=!1;for(let h of m){let y=ve.join(u,"workers",L(h)),b=ve.join(y,"worker.json"),k=$(b,void 0);if(!k){let _=ve.join(VO(u),L(h));if(cn(_)&&(f.workers[L(h)]||f.workers[h])){delete f.workers[L(h)],delete f.workers[h],g=!0,i.push({runId:f.id,worker:h,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:_});continue}i.push({runId:f.id,worker:h,action:"skipped",reason:"worker.json missing"});continue}let v=S6(y,k,o,s);if(!v.eligible){i.push({runId:f.id,worker:h,action:"skipped",reason:v.reason});continue}let S=R6(u,h);k6(ve.dirname(S),{recursive:!0}),b6(y,S),FO(S,l()),delete f.workers[L(h)],delete f.workers[h],g=!0,i.push({runId:f.id,worker:h,action:"archived",reason:v.reason,archivePath:S})}g&&Je(f)}return{workers:i}}function JO(e,t=Date.now()){let r=new Set,n=ot(e);for(let o of Ly(n)){let s=ve.join(n,o);Us(s,t)&&r.add(`${e}\0${o}`)}return r}var za,v6,Ws=p(()=>{"use strict";ms();_e();xn();At();Q();Ny();M();K();$O();za=900*1e3,v6=3600*1e3});import{existsSync as un,lstatSync as C6,readdirSync as E6,readlinkSync as A6,renameSync as Fy,unlinkSync as I6}from"node:fs";import Jt from"node:path";function P6(e,t){let r=Oy(e,t),n;try{n=C6(r)}catch{return null}if(!n.isSymbolicLink())return null;let o=Jt.resolve(Jt.dirname(r),A6(r));if(Us(o)||Us(r))return null;let s=`${r}.materialize-${Date.now()}`;return Fy(o,s),I6(r),Fy(s,r),o}function O6(e){let t=[];for(let r of Ty()){let n=Jt.join(e.fromDir,r),o=Jt.join(e.toDir,r);!un(n)||un(o)||(Fy(n,o),t.push(r))}return t}function qO(e,t){let r=oo(t),n=!1;return e.workerDir!==t&&(e.workerDir=t,n=!0),e.stdoutPath!==r.stdoutPath&&(e.stdoutPath=r.stdoutPath,n=!0),e.stderrPath!==r.stderrPath&&(e.stderrPath=r.stderrPath,n=!0),e.heartbeatPath!==r.heartbeatPath&&(e.heartbeatPath=r.heartbeatPath,n=!0),n}function T6(e){let t=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,r=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return t==="done"||r==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":t==="blocked"?"blocked":t==="running"?"exited":t??"exited"}function N6(e){let t=oo(e.canonicalDir),r=$(t.lastStatusPath,void 0),n=un(t.stdoutPath),o=un(t.heartbeatPath);if(!(n||o||r!=null))return null;let i=n?Cn(t.stdoutPath):{finalResult:null},a=o?Oe(t.heartbeatPath):Oe(""),l=lr(a),c=T6({lastStatus:r,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof r?.branch=="string"?r.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof r?.worktreePath=="string"?r.worktreePath:Jt.join(ke().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:t.stdoutPath,stderrPath:t.stderrPath,heartbeatPath:t.heartbeatPath,startedAt:typeof r?.startedAt=="string"?r.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof r?.taskId=="string"&&(u.taskId=r.taskId),typeof r?.agentOsId=="string"&&(u.agentOsId=r.agentOsId),typeof r?.planId=="string"&&(u.planId=r.planId),typeof r?.pid=="number"&&(u.pid=r.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),qO(u,e.canonicalDir),u}function D6(e,t){let r=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=ln(t,e.id,o),a=Jt.join(i,"worker.json");(Ed(s.workerDir)||Ed(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},r=!0)}return r&&(e.workers=n,Je(e)),r}function M6(e){let t=[],r=ln(e.harnessRoot,e.run.id,e.workerName),n=LO(e.harnessRoot,e.run.id,e.workerName),o=oo(r),s=O6({fromDir:n,toDir:r});s.length>0&&t.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=BO({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=$(i,void 0);if(!a&&un(o.workerJsonPath)&&(a=$(o.workerJsonPath,void 0)),!a){let l=N6({run:e.run,workerName:e.workerName,canonicalDir:r,harnessRoot:e.harnessRoot});if(l)return ee(e.run.id,l),t.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),t;let c=un(r),u=Ty().some(d=>un(Jt.join(r,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:Jt.join(ke().worktreesDir,e.run.id,e.workerName),workerDir:r,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return ee(e.run.id,d),t.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),t}return t.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),t}return qO(a,r)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",ee(e.run.id,a),t.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):t.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),t}function L6(e,t){let r=Jt.join(q(e.id),"workers");if(!un(r))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of E6(r,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function YO(){let{harnessRoot:e}=ke(),t=Uy(e),r=[];for(let n of xe()){let o=P6(e,n.id);o&&r.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),D6(n,e)&&r.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of L6(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:ln(e,n.id,i),statusPath:Jt.join(ln(e,n.id,i),"worker.json")}},Je(n),r.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];r.push(...M6({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:r,runMetadataRetention:t}}var zO=p(()=>{"use strict";xn();Pi();Ny();Ws();Q();M()});import{execFileSync as XO}from"node:child_process";import QO from"node:path";function $y(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:null}function B6(e){let t=$y(e)?.match(/\/pull\/(\d+)$/);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function U6(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function W6(e){let t=new Set;for(let r of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}for(let r of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}for(let r of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(r[1],10);Number.isFinite(n)&&t.add(n)}return[...t]}function F6(e){let t=null;if(typeof e=="string"?t=$o(e):e&&typeof e=="object"&&!Array.isArray(e)&&(t=e),!t)return[];let r=t.targetPrReconciliation??t.target_pr_reconciliation;if(!Array.isArray(r))return[];let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=$y(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function $6(e){try{let n=XO("git",["config","--get","remote.origin.url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=XO("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{windowsHide:!0,cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:$y(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function K6(e){let t=Oe(e.heartbeatPath);return e.completionSnapshot?.finalResult??lr(t)}function H6(e){let t=new Map,r=q(e.id);for(let n of Et(e)){let o=$(QO.join(r,"workers",L(n),"worker.json"),void 0);if(o)for(let s of F6(K6(o))){let i=B6(s.prUrl);i!=null&&!t.has(i)&&t.set(i,s)}}return t}function j6(e,t){let r=Oe(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,r.lastHeartbeatSummary,U6(t)].filter(Boolean).join(`
178
+ `);return W6(n)}function V6(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Ky(e={}){let t=e.lookupPr??$6,r=[],n=new Map;for(let o of xe()){let s=H6(o),i=q(o.id);for(let a of Et(o)){let l=QO.join(i,"workers",L(a),"worker.json"),c=$(l,void 0);if(!c||!V6(c))continue;let u=ae(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of j6(c,u.finalResult)){if(d=s.get(m)??null,!d){let g=o.repo||c.worktreePath,h=`${g}#${m}`,y=n.has(h)?n.get(h)??null:t({repoDir:g,prNumber:m});n.has(h)||n.set(h,y),y&&(y.state==="MERGED"||y.mergedAt)&&(d={prUrl:y.prUrl,mergeCommit:y.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){r.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",ee(o.id,c),r.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:r}}var ZO=p(()=>{"use strict";xn();gc();Ae();Q();Bo();M()});import G6 from"node:path";function q6(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function eT(e,t){let r=pd({worker:e,status:t}),n=r?fd(e,r):!1,o=t.attention.state==="blocked"?"blocked":t.attention.state==="done"||t.status==="done"||r?"done":"exited",s=r&&n?`captured exited-worker handoff (${r.source})`:r?"synced finished worker record after terminal stdout/heartbeat":t.attention.reason;return{nextStatus:o,reason:s,handoffCaptured:n}}function Y6(e,t){t.stopClass&&(e.stopClass=t.stopClass),t.stopReason&&(e.stopReason=t.stopReason),t.exit&&(e.exitCode=t.exit.exitCode,e.exitSignal=t.exit.signal,e.oomEvidence=t.exit.oomEvidence??null);let r=t.error?.trim();r&&(e.exitStderrTail=r.slice(-1e3))}function Hy(){let e=YO();if(q6()){let s=Ky(),i=Wy();return{workers:[],finalizedRuns:Ya(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let t=[],r=Date.now();for(let s of xe())for(let i of Et(s)){let a=G6.join(q(s.id),"workers",L(i),"worker.json"),l=$(a,void 0);if(!l||l.status!=="running"){t.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=ae(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=eT(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",ee(s.id,l),t.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else t.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=eT(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,Y6(l,c),ee(s.id,l),t.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&oe(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||r-u>J6,m=Number.isFinite(d)&&r-d>lm;if(f&&m){he(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,l.stopClass="stuck",l.stopReason=`stuck (no progress) \u2014 ${c.attention.reason}`,ee(s.id,l),t.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}t.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=Ky(),o=Wy();return{workers:t,finalizedRuns:Ya(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}var J6,jy=p(()=>{"use strict";an();Q();Bo();Yh();Ae();M();zO();ZO();Ws();J6=900*1e3});import{readdirSync as z6,readFileSync as X6}from"node:fs";function rX(e){if(process.platform!=="linux"||!e.trim())return null;let t=[];try{t=z6("/proc")}catch{return null}for(let r of t)if(/^\d+$/.test(r)&&Number(r)!==process.pid)try{if(X6(`/proc/${r}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(r)}catch{}return null}async function tT(e){let t=Pr(),r={mode:t,scanned:0,outcomes:[]};if(t!=="enforce")return r;let n=de();if(!n)return r;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??Z6,i=e.findOrphanPid??rX,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-eX).toISOString(),limit:tX})}catch{return so.recoveryStoreFailures+=1,r}for(let c of l){let u=c.idempotencyKey.slice(Q6.length),d=u.split(":")[0]??"",f=u.slice(d.length+1);if(!(!d||!f))try{let m=Date.parse(c.recordedAt);if(!Number.isFinite(m)||o-m<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let g=Da(f);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(_=>{if(g===null)return!0;let R=Da(_.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return R===null||R>=g}))continue;let b={};try{b=c.resultJson?JSON.parse(c.resultJson):{}}catch{b={}}let k=b.runId??null,v=b.workerName??null;if(k&&v&&e.hasLiveWorker({runId:k,workerName:v})){hd({taskId:d,leaseToken:f}),a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"finalized_late"});continue}if(k&&v){let _=e.worktreePathFor({runId:k,workerName:v}),R=_?i(_):null;if(R!==null){so.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"deferred_orphan",detail:`live pid ${R} references ${_}`});continue}}if(!k){a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let S=await e.releaseClaim({taskId:d,leaseToken:f,runId:k});S.released?(Es({taskId:d,leaseToken:f},"restart_recovery"),v&&(La(k,v),on(k,v)),so.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"released"})):S.transportError?a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"deferred_transport",detail:S.detail}):(Es({taskId:d,leaseToken:f},"restart_recovery_refused"),a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"release_refused",detail:S.detail}))}catch{so.recoveryStoreFailures+=1}}return{mode:t,scanned:l.length,outcomes:a}}function rT(){return{"dispatchReceipts.recoveredStrandedClaims":so.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":so.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":so.recoveryStoreFailures}}var Q6,Z6,eX,tX,so,Vy=p(()=>{"use strict";Xr();As();to();Ps();Q6="dispatch:claim:",Z6=900*1e3,eX=10080*60*1e3,tX=200,so={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0}});import nX from"node:path";async function oT(e){if(nT||Pr()!=="enforce")return null;nT=!0;try{let t=Me().runnerId,r=await tT({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>nX.join(ke().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Ja({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:Ca(s,t),leaseToken:o});return{released:i.released,transportError:i.transportError,detail:i.httpOk?void 0:JSON.stringify(i.releaseResponse).slice(0,200)}}});return r.outcomes.length>0&&console.error(`[daemon] D1b claim recovery: ${r.outcomes.map(n=>`${n.taskId}:${n.action}`).join(", ")}`),r}catch{return null}}var nT,sT=p(()=>{"use strict";Q();Ea();kr();xy();Vy();As();nT=!1});import oX from"node:os";function iT(e,t={}){let r=A(),n=(t.boxKind??Ct(r)).trim().toLowerCase()||"forge",o=t.hostLabel??oX.hostname();return{boxId:qo({boxKind:n,hostLabel:o,explicitBoxId:t.boxId,config:r,env:process.env}),boxKind:n,displayName:t.displayName??null,hostLabel:o,observedAt:t.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:t.harnessRunId??null,queuedTasks:t.queuedTasks??null,reason:e.reason,...t.prEvidence?.length?{prEvidence:t.prEvidence}:{},host:zx()}}var aT=p(()=>{"use strict";K();Ue();Yo();pu()});import sX from"node:path";async function Ad(e){let t=e.pipeline===!0||e.pipeline==="true";try{let r=se(String(xt(String(e.run||""),"--run"))),n=String(xt(String(e.agentOsId||""),"--agent-os-id")),o=me(e.baseUrl?String(e.baseUrl):void 0),s=await ye(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Me({runId:r.id}).runnerId,a=await lP({run:r.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(r.workers||{})){let m=$(sX.join(q(r.id),"workers",L(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let g=ae(m);if(g.alive||g.finalResult||m.completionReportedAt)continue;try{let k=await Ts({run:r.id,name:f,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(k.ok&&!k.skipped){l.push({worker:f,taskId:m.taskId,pid:m.pid,released:!1,deathReported:!0,stopClass:g.stopClass??null});continue}}catch{}let h=ju({runId:r.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,b;try{b=await fe(y,s,{agentOsId:n,leaseOwner:h,...m.leaseToken?.trim()?{leaseToken:m.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(k){b={ok:!1,error:k.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:b.ok===!0||b.response?.ok===!0,response:b.response??b})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await fe(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:r.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(t)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(r){if(t)return{ok:!1,error:r.message};console.error(`run sweep failed: ${r.message}`),process.exit(1)}}var Gy=p(()=>{"use strict";K();Ke();Q();Ae();M();Ea();kr();Ns()});async function lT(e){let t=me(e.baseUrl),r=await ye(e.secret,e.agentOsId,{baseUrl:t}),n=`${t}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await fe(n,r,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:t});return{ok:o.ok,status:o.status,response:o.response}}var cT=p(()=>{"use strict";K();Ke()});import iX from"node:path";async function uT(e,t){let r=se(e),n=String(t.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(r.workers||{})){let i=$(iX.join(q(r.id),"workers",L(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=ae(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await lT({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:t.baseUrl?String(t.baseUrl):void 0,secret:t.secret?String(t.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,ee(r.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}var dT=p(()=>{"use strict";Ae();Q();M();cT()});function pT(e){let t=e.replace(/\\/g,"/").replace(/\/+$/,"");if(t==="node_modules"||t.startsWith("node_modules/"))return!0;for(let r of Jy)if(t===r||t.startsWith(`${r}/`))return!0;return!1}var Jy,qy=p(()=>{"use strict";Jy=[".next",".turbo","dist","build",".cache","node_modules/.cache"]});function bt(e){return e.filter(t=>{let r=t.trim(),n=r.startsWith("??")?r.slice(2).trim():r.length>3?r.slice(3).trim():r;return!pT(n)})}var io=p(()=>{"use strict";qy()});function ao(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let t=e;for(let r of["prUrl","pr_url","pullRequestUrl"]){let n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Xa(e){let t=e.gitAncestry?.relation;return t==="merged"||t==="synced"?bt(e.changedFiles).length>0:!!(ao(e.finalResult)||t==="ahead"||t==="diverged"||e.changedFiles.length>0&&e.finalResult)}var Qa=p(()=>{"use strict";io()});function Za(e){return e.status||(e.status=ae(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Yy(e,t){if(e.status)return bt(e.status.changedFiles).length>0;let r=t?t.porcelain(e.worktreePath):wi(e.worktreePath);return bt(r).length>0}function aX(e){let t=e.worker.completionSnapshot?.finalResult;return t??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function zy(e,t){if(e.status)return e.status;let r=e.worker,n=typeof r.completionReportedAt=="string"&&r.completionReportedAt.trim().length>0,o=!!(r.status&&["done","exited","blocked","failed","abandoned"].includes(r.status))||n,s=aX(e);if(o&&!oe(r.pid)){let i=t?.gitStatusCache?t.gitStatusCache.porcelain(e.worktreePath):wi(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=t?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Ql(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={runId:e.runId,worker:e.workerName,pid:r.pid,alive:!1,status:r.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:r.branch,worktreePath:e.worktreePath,ownedPaths:r.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:r.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:c,finalResult:s,completionBlocker:typeof r.completionBlocker=="string"&&r.completionBlocker.trim()||null,prUrl:r.repairTargetPrUrl??r.taskPrUrl??ao(s)};return e.status=u,u}return Za(e)}var Id=p(()=>{"use strict";_e();Ae();io();Qa();M()});function lX(e,t=Date.now(),r=za){let n=Oe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=t-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<r}function Fs(e,t=Date.now(),r=za){return oe(e.pid)?!0:lX(e,t,r)}var Pd=p(()=>{"use strict";xn();Ws();M()});function cX(e,t){return t?t.runTerminalCache.derive(e.run):no(e.run)}function Nr(e,t=Date.now()){return Fs(e.worker,t)}function Xy(e,t){return Tr.has(e.run.status)?!1:cX(e,t)!==null}function fT(e,t,r=Date.now()){if(Nr(e,r))return!0;if(Tr.has(e.run.status)||Xy(e,t))return!1;let n=Za(e);return We(n)?!1:!!Nr(e,r)}var Qy=p(()=>{"use strict";an();Ae();Id();Pd()});function mT(e,t){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Nr(e))return!0;let n=t??Za(e);return!!(!We(n)||Xa(n)||bt(n.changedFiles).length>0||Fo({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:ao(n.finalResult)}).blocked)}var gT=p(()=>{"use strict";mc();Id();io();Qy();Ae();Qa()});import{existsSync as yT,mkdirSync as uX,writeFileSync as hT}from"node:fs";import Od from"node:path";function kT(e,t,r){return Od.join(e,"salvage",L(t),L(r))}function bT(e){return yT(Od.join(kT(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function vT(e){let t=kT(e.harnessRoot,e.indexed.runId,e.indexed.workerName);uX(t,{recursive:!0});let r=Od.join(t,"salvage.patch"),n=!1;if(yT(e.indexed.worktreePath)){let s=re(e.indexed.worktreePath,["diff","HEAD"]),i=re(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
179
+ `);a.trim()&&(hT(r,a.endsWith(`
180
180
  `)?a:`${a}
181
- `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:r}:{}};return WO(yd.join(t,"evidence.json"),`${JSON.stringify(o,null,2)}
182
- `),o}var HO=p(()=>{"use strict";we();M()});import kd from"node:path";function S4(e){e.writeSalvageEvidence&&w4.has(e.skipReason)&&(Tr(e.indexed,e.now)||KO({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||$O({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function _4(e){let{indexed:t,worktreesAgeMs:r,terminalWorktreesAgeMs:n}=e;return t&&(Or.has(t.run.status)||e.liveness&&Ay(t,e.liveness)||e.liveness&&Be(Ey(t,e.liveness))&&!Tr(t))?n:r}function x4(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:_4(e)}function C4(e,t){if(e.harnessRoot?.trim())return kd.resolve(e.harnessRoot);let r=t.worker.workerDir;if(!r)return null;let n=`${kd.sep}runs${kd.sep}`,o=r.indexOf(n);return o<0?null:r.slice(0,o+n.length-1)}function jO(e){let{indexed:t,includeOrphans:r,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!t)return r?s??null:"orphan_without_flag";let l=x4(e);if(n<=0&&!r&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Tr(t,a))return"active_worker";let c=Ey(t,e.liveness),u=C4(e,t),d=g=>{if(u)try{S4({indexed:t,harnessRoot:u,skipReason:g,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return g};if(LO(t,c)){let g=d("completion_blocked");if(g)return g}if(Cy(t,e.liveness?.gitStatusCache)){let g=d("dirty_worktree");if(g)return g}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let g=d("pr_or_unmerged_commits");if(g)return g}if(MO(t,e.liveness,a)||!Be(c))return"run_still_active";if($a(c)){let g=d("pr_or_unmerged_commits");if(g)return g}if(yt(c.changedFiles).length>0){let g=d("dirty_worktree");if(g)return g}if(Lo({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:ro(c.finalResult)}).blocked){let g=d("landing_blocked");if(g)return g}if(i&&e.worktreePath){let g=i({worktreePath:e.worktreePath,indexed:!!t,runId:t?.runId,worker:t?.workerName});if(g)return g.detail?{reason:g.reason,detail:g.detail}:g.reason}return null}function Iy(e){let{indexed:t,nodeModulesAgeMs:r,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<r?"below_age_threshold":i||s.has(kd.resolve(o))||t&&Tr(t)?"active_worker":t&&Cy(t,e.gitStatusCache)?"dirty_worktree":null}function VO(e){return Iy(e)}var w4,GO=p(()=>{"use strict";ec();gd();Ce();rn();Py();BO();HO();to();Ha();to();Ha();w4=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"])});var bd=p(()=>{"use strict"});function qO(e,t){let r=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||r.length>=24||(n.add(l),r.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of t)JO.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||JO.has(s.skipReason)&&o(s.path,s.skipReason);return r}var JO,YO=p(()=>{"use strict";bd();JO=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"])});import zO from"node:path";function A4(e,t){return Ls(e,t)}function XO(e,t=Date.now()){let r=new Set,n=new Set;for(let o of e){for(let s of Ac(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=F(zO.join(Di(o,s.id),"workers",B(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=zO.resolve(l.worktreePath);A4(l,t)&&(i=!0,r.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of gO(o))n.add(s)}return{activeWorktreePaths:r,liveRunKeys:n}}function QO(e,t,r,n){return r?n.has(`${t}\0${r}`):!1}var Oy=p(()=>{"use strict";Y();Et();Ms();hd();M()});import{existsSync as ZO,readdirSync as eT,statSync as P4}from"node:fs";import tT from"node:path";function I4(e,t){try{let r=P4(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function O4(e,t){let r=tT.join(e,"runs",t,"run.json");return ZO(r)?F(r,null):null}function rT(e){try{return eT(e).length===0}catch{return!1}}function nT(e){let{harnessRoot:t,runId:r,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(QO(n,t,r,i.liveRunKeys)||!rT(n))return"run_still_active";let a=O4(t,r);return a&&!Or.has(a.status)&&!Qn(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function oT(e){if(!ZO(e.worktreesDir))return[];let t=[],r;try{r=eT(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of r){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=tT.join(e.worktreesDir,o);rT(s)&&t.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:I4(s,e.now)})}return t}var sT=p(()=>{"use strict";Oy();rn();M()});import{execFileSync as T4}from"node:child_process";import{existsSync as iT,readdirSync as N4,statSync as D4}from"node:fs";import M4 from"node:path";function B4(e,t=L4){if(!iT(e))return 0;try{let n=T4("du",["-sb",e],{encoding:"utf8",timeout:t,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Nr(e,t=5e4){if(!iT(e))return 0;let r=B4(e);if(r!==null)return r;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=N4(i)}catch{continue}for(let l of a){if(o++>t)return null;let c=M4.join(i,l),u;try{u=D4(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}var L4,Va=p(()=>{"use strict";L4=2500});import{lstatSync as W4,readdirSync as U4}from"node:fs";function aT(e){try{let t=W4(e),r=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=r!==null&&(t.uid!==r||n!==null&&t.gid!==n);return{uid:t.uid,gid:t.gid,foreign:o}}catch{return null}}function lT(e,t=32){let r=aT(e);if(!r)return!1;if(r.foreign)return!0;try{let n=U4(e),o=0;for(let s of n){if(o>=t)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=aT(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}var cT=p(()=>{"use strict"});import kt from"node:path";function uT(e,t,r,n){let o=kt.resolve(e),s=`${kt.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=kt.relative(r,i);if(a.startsWith("..")||kt.isAbsolute(a))return"path_outside_harness";let l=a.split(kt.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(kt.resolve(t))?"path_outside_harness":null}function vd(e,t,r){return uT(e,t,r,"node_modules")}function Rd(e,t,r){return uT(e,t,r,".next")}function wd(e,t,r){let n=kt.resolve(e),o=kt.relative(r,n);return o.startsWith("..")||kt.isAbsolute(o)||o.split(kt.sep).length<3||!n.startsWith(kt.resolve(t))?"path_outside_harness":null}function dT(e,t,r){let n=kt.resolve(e);return vd(n,t,r)===null||Rd(n,t,r)===null||wd(n,t,r)===null}var Ty=p(()=>{"use strict"});import{spawnSync as F4}from"node:child_process";import pT from"node:path";function mT(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function fT(e){let t=F4("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:t.status===0,stderr:`${t.stderr??""}${t.stdout??""}`.trim()}}function gT(e,t,r){if(!dT(e,t,r))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=fT(["chown","-R",`${n}:${o}`,pT.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=fT(["rm","-rf",pT.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var Ny,hT=p(()=>{"use strict";Ty();Ny="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help."});import{existsSync as K4,rmSync as $4}from"node:fs";function H4(e){let t=e?.code;return t==="EACCES"||t==="EPERM"}function yT(e,t,r={}){if(!K4(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?Qo(n):null,i=e.bytes??Nr(e.path)??void 0,a=r.removePath??$4,l=r.hasForeignOwnedEntry??lT;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!H4(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=mT();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Ny}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=gT(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(g){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${g.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${Ny}`}}}var kT=p(()=>{"use strict";Va();Et();cT();hT()});import{existsSync as Dy,rmSync as bT}from"node:fs";function My(e){let t=e.harnessRoot;return!t||!pO(e.path,t)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ly(e,t){let r=My(e);if(r)return r;let n=yT(e,t);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function vT(e,t){return Ly(e,t)}function RT(e,t){return Ly(e,t)}function wT(e,t){return Ly(e,t)}function ST(e,t){let r=My(e);if(r)return r;if(!Dy(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Nr(e.path);return bT(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function _T(e,t){let r=My(e);if(r)return r;if(!Dy(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Nr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Dy(e.path)&&bT(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}var xT=p(()=>{"use strict";we();Va();kT();Ms();Ty()});import{existsSync as Sd,readdirSync as _d,statSync as j4}from"node:fs";import Jt from"node:path";function By(e,t){try{let r=j4(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function ET(e,t){let r=Jt.relative(t,e);return r===""||!r.startsWith("..")&&!Jt.isAbsolute(r)}function CT(e,t,r,n){let o=[];for(let s of _y){if(s===".next")continue;let i=Jt.join(e,s);if(!Sd(i))continue;let a=Jt.resolve(i);r.has(a)||ET(a,t.harnessRoot)&&(r.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:By(a,t.now)}))}return o}function AT(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||t.push(...CT(n.worktreePath,e,r,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Sd(e.worktreesDir))return t;for(let n of _d(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Jt.join(e.worktreesDir,n.name);for(let s of _d(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Jt.join(o,s.name);t.push(...CT(i,e,r,{runId:n.name,worker:s.name}))}}return t}function PT(e){let t=e.worktreesAgeMs>0||e.includeOrphans,r=e.includeOrphans;if(!t&&!r)return[];let n=[],o=new Set;if(t)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Sd(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:By(a,e.now)})))}if(!r||!Sd(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Jt.resolve(i.worktreePath));for(let i of _d(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Jt.join(e.worktreesDir,i.name),l;try{l=_d(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Jt.resolve(Jt.join(a,c.name));o.has(u)||s.has(u)||ET(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:By(u,e.now)}))}}return n}var IT=p(()=>{"use strict";xy()});import{existsSync as NT,readdirSync as OT,statSync as V4}from"node:fs";import Bs from"node:path";function J4(e,t){try{let r=V4(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function q4(e,t){let r=Bs.relative(t,e);return r===""||!r.startsWith("..")&&!Bs.isAbsolute(r)}function Y4(e,t,r,n,o,s){if(!NT(n))return;let i=Bs.resolve(n);t.has(i)||q4(i,r.harnessRoot)&&(t.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:r.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:J4(i,r.now)}))}function TT(e,t,r,n,o){for(let s of G4)Y4(e,t,r,Bs.join(n,s.dirName),s.kind,o)}function DT(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||TT(t,r,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!NT(e.worktreesDir))return t;for(let n of OT(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Bs.join(e.worktreesDir,n.name),s;try{s=OT(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Bs.join(o,i.name);TT(t,r,e,a,{runId:n.name,worker:i.name})}}return t}var G4,MT=p(()=>{"use strict";G4=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}]});import{existsSync as LT,statSync as z4}from"node:fs";import qt from"node:path";function X4(e,t){try{let r=z4(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function Q4(e){let t=[],r=null;for(let n of e.split(`
183
- `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){r&&t.push(r),r={path:i};continue}r&&(o==="branch"&&(r.branch=i),o==="HEAD"&&(r.head=i),o==="bare"&&(r.bare=!0))}return r&&t.push(r),t}function Z4(e,t){let r=qt.relative(qt.resolve(t),qt.resolve(e));return r!==""&&!r.startsWith("..")&&!qt.isAbsolute(r)}function BT(e){if(!e.includeOrphans||!LT(e.worktreesDir))return[];let t=new Set;for(let s of e.index.values())s.run.repo&&t.add(qt.resolve(s.run.repo));let r=new Set;for(let s of e.index.values())r.add(qt.resolve(s.worktreePath));let n=[],o=new Set;for(let s of t){let i=0,a;try{a=ce(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=Q4(a);for(let c of l){if(i>=eX)break;let u=qt.resolve(c.path);if(u===qt.resolve(s)||!Z4(u,e.worktreesDir)||r.has(u)||o.has(u)||!LT(u))continue;let f=qt.relative(e.worktreesDir,u).split(qt.sep),m=f[0],g=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:g,repo:s,ageMs:X4(u,e.now)})}}return n}var eX,WT=p(()=>{"use strict";we();eX=200});import Ga from"node:path";function UT(e,t){let r=Ga.resolve(t),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ga.resolve(s.harnessRoot):null;i&&i!==r||n.set(o,s)}return n}function FT(e){let t=new Map;for(let r of Ac(e))for(let n of Object.keys(r.workers||{})){let o=Ga.join(Di(e,r.id),"workers",B(n),"worker.json"),s=F(o,void 0);s?.worktreePath&&t.set(Ga.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ga.resolve(s.worktreePath),runId:r.id,workerName:n,run:r,worker:s})}return t}var KT=p(()=>{"use strict";Y();M()});function Ja(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function no(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?n:t}function Uy(e={}){let t=e.execute===!0||e.execute!==!1&&Ja("KYNVER_CLEANUP_EXECUTE"),r=e.finalizeStaleRuns!==!1&&!Ja("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??no("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??no("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??no("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??no("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??no("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Ja("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Ja("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!Ja("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=no("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),g=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,h=no("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),y=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):2e3);return{execute:t,finalizeStaleRuns:r,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:g,byteAccountingEntryCap:y}}function VT(e){let t=process.env.KYNVER_CLEANUP_SCOPE==="all",r=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=t?Number.isFinite(r)&&r>0?r:6048e5:Number.isFinite(r)&&r>0?r:0;return Uy({runIdFilter:t?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:t?216e5:void 0,runDirectoriesAgeMs:t?36e5:void 0,includeOrphans:t?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}var GT=p(()=>{"use strict";bd()});import{existsSync as Fy,statSync as rX}from"node:fs";import oo from"node:path";function nX(e,t){let r=oo.relative(t,e);return r===""||!r.startsWith("..")&&!oo.isAbsolute(r)}function oX(e,t,r){if(!Fy(e))return!1;try{let n=t-rX(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function Ky(e){if(!e.runId||!e.workerName)return!1;let t=e.now??Date.now(),r=e.heartbeatFreshMs??JT,n=oo.resolve(e.harnessRoot,"runs"),o=oo.resolve(n,e.runId,"workers",e.workerName);if(!nX(o,n))return!1;let s=F(oo.join(o,"worker.json"),void 0);return s&&Ls(s,t,r)?!0:s?!1:oX(oo.join(o,"heartbeat.jsonl"),t,r)}function qT(e){let t=e.now??Date.now(),r=e.heartbeatFreshMs??JT;if(!Fy(e.worktreePath))return null;if(e.runId&&e.workerName&&Ky(e))return"active_worker";let n=oo.join(e.worktreePath,".git");if(!Fy(n))return null;let o=ee(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
184
- `).map(c=>c.trim()).filter(c=>c.length>0);if(yt(s).length>0)return"dirty_worktree";let i=ee(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ee(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}var JT,YT=p(()=>{"use strict";we();to();hd();M();JT=1800*1e3});import{existsSync as sX,readdirSync as zT,statSync as iX}from"node:fs";import aX from"node:path";function XT(e={}){let t=Ne(e.harnessRoot??dt()),r=Qo(t),n=e.now??Date.now(),o=new Date(n).toISOString();if(!sX(r))return{harnessRoot:t,worktreesDir:r,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=zT(r,{withFileTypes:!0})}catch{return{harnessRoot:t,worktreesDir:r,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=aX.join(r,u.name);try{let f=iX(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of zT(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let m=Nr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:t,worktreesDir:r,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}var QT=p(()=>{"use strict";Et();Va()});import{existsSync as lX}from"node:fs";import{homedir as cX}from"node:os";import ZT from"node:path";function $y(e,t,r){if(!r?.trim())return;let n=Ne(r.trim());e.has(n)||(e.add(n),t.push(n))}function dX(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function eN(e={}){let t=new Set,r=[];$y(t,r,e.harnessRoot??dt());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])$y(t,r,o);if(dX(e))for(let o of uX){let s=ZT.resolve(o);!t.has(s)&&lX(s)&&$y(t,r,s)}return r}var uX,tN=p(()=>{"use strict";Et();uX=["/var/tmp/kynver-harness",ZT.join(cX(),".openclaw","harness")]});function pX(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function fX(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function rN(e={}){let t=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",r=fX("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Br({...e,diskPath:t,diskMaxUsedPercent:e.diskMaxUsedPercent??r}),o=!n.ok||n.usedPercent>=r,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:r}}function nN(e,t){if(!t.pressured)return e;let r=e.execute||!pX("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:r,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:t.diskGate}}var oN=p(()=>{"use strict";yi();bd()});import{unlinkSync as mX}from"node:fs";function xd(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function sN(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function gX(e,t,r){return e.length===0?[]:r?[...e]:e.length<=t?[]:e.slice(t)}function iN(e={}){let t=e.execute===!0||xd("KYNVER_WSL_CRASH_DUMP_EXECUTE")||xd("KYNVER_CLEANUP_EXECUTE"),r=e.purgeAll===!0||xd("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??sN("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",r?0:1)),o=To({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:t,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=gX(o.dumps,n,r),i=[],a=[],l=0;for(let c of s){if(!t){a.push({path:c.path,reason:"dry_run"});continue}try{mX(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:t,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function aN(e){return e?xd("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>sN("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}var lN=p(()=>{"use strict";jl()});function bt(e,t){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let r=t?`: ${t}`:"";console.error(`[kynver cleanup] ${e}${r}`)}var cN=p(()=>{"use strict"});var Cd,uN=p(()=>{"use strict";we();Cd=class{aheadOfMain=new Map;countAheadOfMain(t,r="origin/main"){let n=`${t}\0${r}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ee(t,["rev-list","--count",`${r}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}}});import{spawnSync as hX}from"node:child_process";import{existsSync as yX}from"node:fs";import kX from"node:path";function vX(e,t){if(!yX(kX.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let r=hX("git",t,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:bX}),n=r.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:r.status,stdout:r.stdout||"",stderr:r.stderr||"",error:n?"git_timeout":r.error?r.error.message:null}}catch(r){return{status:null,stdout:"",stderr:"",error:r.message}}}function dN(e){let t=vX(e,["status","--short"]);return t.error==="not_a_git_repo"?[]:t.error==="git_timeout"||t.status!==0?null:t.stdout.split(`
185
- `).map(r=>r.trim()).filter(Boolean)}var bX,pN=p(()=>{"use strict";bX=5e3});var Ed,fN=p(()=>{"use strict";pN();Ed=class{cache=new Map;porcelain(t){let r=t,n=this.cache.get(r);if(n!==void 0)return n;let o=dN(r)??[];return this.cache.set(r,o),o}}});var Ad,mN=p(()=>{"use strict";rn();Ad=class{cache=new Map;derive(t){let r=this.cache.get(t.id);if(r!==void 0)return r;let n=Qn(t);return this.cache.set(t.id,n),n}}});function RX(e){let t={};for(let r of e)t[r.kind]=(t[r.kind]??0)+1;return t}function gN(e,t={}){let r=t.maxSampleActions??12,n=t.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:RX(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,r).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}var hN=p(()=>{"use strict"});import vt from"node:path";function wX(e={}){let t=e.harnessRoot?Ne(e.harnessRoot):dt(),r=eN({harnessRoot:t}),n=e.now??Date.now();return{harnessRoot:t,scanRoots:r,now:n}}function SX(e){return typeof e=="string"?{reason:e}:e}function Ws(e,t,r,n){e.push({path:t,reason:r,...n?{detail:n}:{}})}function Pd(e,t,r){return!t||e.bytes!=null?e:{...e,bytes:Nr(e.path,r)}}function yN(e,t){let r={};for(let n of t)r[n.reason]=(r[n.reason]??0)+1;for(let n of e)n.skipReason&&(r[n.skipReason]=(r[n.skipReason]??0)+1);return r}function _X(e,t){return e.kind==="remove_next_cache"?RT(e,t):vT(e,t)}function xX(e,t,r){return e.kind==="remove_next_cache"?Rd(e.path,t,r):vd(e.path,t,r)}function CX(e){let t=new Map;for(let r of e)for(let[n,o]of FT(r))t.set(n,o);return t}function kN(e,t){return e.runId&&e.worker?vt.join(t,e.runId,e.worker):vt.resolve(e.path,"..")}function bN(e){return e.indexed?!1:Ky({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function EX(e={}){let t=Uy(e),r=rN();t=nN(t,r);let n=wX(e);bt("scan",`${n.scanRoots.length} harness root(s)`);let o=XO(n.scanRoots,n.now),s=t.finalizeStaleRuns?Fa().map(A=>({runId:A.runId,from:A.from,to:A.to})):[];s.length>0&&bt("finalize",`${s.length} stale run(s) marked terminal`),bt("index","building worktree index");let i=CX(n.scanRoots);bt("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Ad,gitStatusCache:new Ed,gitRevCache:new Cd},l=[],c=[],u=new Set,d=t.maxActionsPerSweep,f=()=>c.length>=d;for(let A of n.scanRoots){if(f())break;bt("root",A);let O=vt.join(A,"worktrees"),W=UT(i,A),D={harnessRoot:A,worktreesDir:O,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter,index:W,now:n.now},G=t.scanDependencyCaches?DT(D):[];bt("dependency",t.scanDependencyCaches?`${G.length} cache candidate(s) at ${A}`:"skipped (worktree-only sweep)");let Q=0;for(let x of G){if(f())break;Q+=1,Q%50===0&&bt("dependency",`${Q}/${G.length} evaluated`);let T=vt.resolve(x.path);if(u.has(T))continue;u.add(T);let U={...x,path:T},te=xX(U,A,O);if(te){Ws(l,U.path,te),c.push({...U,executed:!1,skipped:!0,skipReason:te});continue}let oe=kN(U,O),ge=W.get(vt.resolve(oe))??null,Ae=bN({candidate:U,indexed:ge,harnessRoot:A,now:n.now}),Z=Iy({indexed:ge,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:U.ageMs,worktreePath:oe,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Ae,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Z){Ws(l,U.path,Z),c.push({...U,executed:!1,skipped:!0,skipReason:Z});continue}c.push(_X(Pd(U,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(t.scanDependencyCaches)for(let x of AT(D)){if(f())break;let T=vt.resolve(x.path);if(u.has(T))continue;u.add(T);let U={...x,path:T},te=wd(U.path,A,O);if(te){Ws(l,U.path,te),c.push({...U,executed:!1,skipped:!0,skipReason:te});continue}let oe=kN(U,O),ge=W.get(vt.resolve(oe))??null,Ae=bN({candidate:U,indexed:ge,harnessRoot:A,now:n.now}),Z=VO({indexed:ge,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:U.ageMs,worktreePath:oe,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Ae,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Z){Ws(l,U.path,Z),c.push({...U,executed:!1,skipped:!0,skipReason:Z});continue}c.push(wT(Pd(U,t.accountBytes,t.byteAccountingEntryCap),t.execute))}let H=[...PT(D),...BT(D)];bt("worktrees",`${H.length} candidate(s) at ${A}`);let E=new Set,V=0;for(let x of H){if(f())break;V+=1,V%50===0&&bt("worktrees",`${V}/${H.length} evaluated`);let T=vt.resolve(x.path);if(E.has(T))continue;E.add(T);let U={...x,path:T},te=W.get(vt.resolve(U.path))??null,oe=te?null:qT({worktreePath:U.path,harnessRoot:A,runId:U.runId,workerName:U.worker,now:n.now}),ge=jO({indexed:te,worktreePath:vt.resolve(U.path),includeOrphans:t.includeOrphans,worktreesAgeMs:t.worktreesAgeMs,terminalWorktreesAgeMs:t.terminalWorktreesAgeMs,ageMs:U.ageMs,orphanSafety:oe,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:A,writeSalvageEvidence:t.execute});if(ge){let{reason:Ae,detail:Z}=SX(ge);Ws(l,U.path,Ae,Z),c.push({...U,executed:!1,skipped:!0,skipReason:Ae});continue}c.push(_T(Pd(U,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(!f()&&t.runDirectoriesAgeMs>=0)for(let x of oT({harnessRoot:A,worktreesDir:O,runDirectoriesAgeMs:t.runDirectoriesAgeMs,runIdFilter:t.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let T=vt.resolve(x.path);if(u.has(T))continue;u.add(T);let U={...x,path:T},te=U.runId??vt.basename(T),oe=nT({harnessRoot:A,runId:te,runPath:T,ageMs:U.ageMs,runDirectoriesAgeMs:t.runDirectoriesAgeMs,activeGuards:o});if(oe){Ws(l,U.path,oe),c.push({...U,executed:!1,skipped:!0,skipReason:oe});continue}c.push(ST(Pd(U,t.accountBytes,t.byteAccountingEntryCap),t.execute))}}let m=0,g=0,h=0,y=0,v=0,k=0;for(let A of c)A.bytes&&(m+=A.bytes),!A.skipped&&!A.executed&&A.bytes&&(h+=A.bytes),A.executed?(v+=1,y+=A.bytes??0,A.kind==="remove_run_directory"&&(g+=1)):A.skipped&&(k+=1,A.skipReason==="dry_run"&&A.bytes&&(h+=A.bytes));let b=t.accountBytes?XT({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:t.storagePerRunEntryCap}):void 0,_=To(),S=t.execute&&aN(_),R=S?iN({execute:!0}):null,w=_?{observed:!0,execute:S,dumpCount:_.dumpCount,totalBytes:_.totalBytes,removedCount:R?.removed.length??0,removedBytes:R?.removedBytes??0,executables:_.executables,path:_.path,reason:_.reason}:void 0;R&&R.removed.length>0&&(y+=R.removedBytes,v+=R.removed.length,bt("wsl-crashes",`removed ${R.removed.length} dump(s), ${R.removedBytes} bytes`)),bt("complete",`${c.length} action(s), ${k} skipped, ${v} removed`);let L=qO(c,l),N=gN({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!t.execute,execute:t.execute,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,diskPressure:t.diskPressure,diskGate:t.diskGate?{ok:t.diskGate.ok,path:t.diskGate.path,freeBytes:t.diskGate.freeBytes,usedPercent:t.diskGate.usedPercent,reason:t.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:yN(c,l)},...b?{storage:b}:{},...L.length>0?{preservedLivePaths:L}:{},...g>0?{removedRunDirectories:g}:{},...w?{wslCrashDumps:w}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!t.execute,execute:t.execute,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,diskPressure:t.diskPressure,diskGate:t.diskGate?{ok:t.diskGate.ok,path:t.diskGate.path,freeBytes:t.diskGate.freeBytes,usedPercent:t.diskGate.usedPercent,reason:t.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:yN(c,l)},...b?{storage:b}:{},...L.length>0?{preservedLivePaths:L}:{},...g>0?{removedRunDirectories:g}:{},...w?{wslCrashDumps:w}:{},compactSummary:N}}function vN(e){let t=VT(e);return EX({execute:t.execute,finalizeStaleRuns:t.finalizeStaleRuns,accountBytes:t.accountBytes,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter})}function RN(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}var wN=p(()=>{"use strict";Et();GO();YO();sT();xT();IT();MT();WT();KT();rn();Va();GT();YT();QT();tN();Oy();oN();lN();jl();cN();uN();fN();mN();hN()});function SN(e){let t=e.trim().split("-")[0]?.split("+")[0];if(!t)return null;let r=t.split(".");if(r.length<1||r.length>3)return null;let n=r.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function Id(e,t){let r=SN(e),n=SN(t);if(!r||!n)return 0;for(let o=0;o<3;o+=1){if(r[o]>n[o])return 1;if(r[o]<n[o])return-1}return 0}var AX,JPe,Hy=p(()=>{"use strict";mi();AX={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},JPe=Object.keys(AX)});import{readFile as PX}from"node:fs/promises";import{homedir as IX}from"node:os";import an from"node:path";function Us(e){let t=e?.trim();return t||null}function TX(e){return[...new Set(e.filter(t=>!!t))]}function _N(){let e=IX(),t=Us(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Us(process.env.OPENCLAW_NPM_ROOT)??an.join(e,".openclaw","npm"),r=Us(process.env.KYNVER_NPM_GLOBAL_ROOT)??Us(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Us(process.env.NPM_CONFIG_PREFIX)?an.join(Us(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):an.join(e,".npm-global","lib","node_modules"));return TX([an.join(t,"lib","node_modules"),an.join(t,"node_modules"),r.endsWith("node_modules")?r:an.join(r,"lib","node_modules")])}async function NX(e){try{let t=JSON.parse(await PX(e,"utf8"));return typeof t.version=="string"&&t.version.trim()?t.version.trim():null}catch{return null}}function xN(){return _N().map(e=>an.join(e,"@kynver-app"))}function jy(e){let t=_N(),r=new Set,n=[];for(let o of t){let s=an.join(o,e,"package.json");r.has(s)||(r.add(s),n.push(s))}return n}async function CN(e=new Date().toISOString()){let t={};for(let r of OX){let n=null;for(let o of jy(r)){let s=await NX(o);s&&(!n||Id(s,n.version)>0)&&(n={version:s,path:o})}n&&(t[r]={version:n.version,observedAt:e,path:n.path})}return t}var OX,Vy=p(()=>{"use strict";Hy();OX=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"]});import{spawnSync as DX}from"node:child_process";var MX,LX,EN,AN=p(()=>{"use strict";MX=1e4,LX=4*1024*1024,EN=(e,t,r)=>{try{let n=DX(e,t,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:r?.timeoutMs??MX,maxBuffer:LX});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}}});function Od(e,t,r){return`${e} ${t} ${r}`}function Gy(e){let t=e.lastIndexOf("@");if(t<=0||t===e.length-1)return null;let r=e.slice(0,t),n=e.slice(t+1);return!/^[^/\s]+\/[^/\s]+$/.test(r)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:r,sha:n}}function PN(e){let t=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!t)return null;let r=Number(t[2]);return!Number.isFinite(r)||r<=0?null:{repo:t[1],number:r}}var Td=p(()=>{"use strict"});function Yy(){return Date.now()<Jy}function $X(e){let t=`${e.stdout}
186
- ${e.stderr}`.toLowerCase();return t.includes("api rate limit exceeded")||t.includes("rate limit exceeded")||t.includes("secondary rate limit")}function IN(e){$X(e)&&(Jy=Math.max(Jy,Date.now()+KX))}function qy(e,t){if(Yy())return null;let r=e("gh",["api",...t]);if(!r.ok||!r.stdout.trim())return IN(r),null;try{return JSON.parse(r.stdout)}catch{return null}}function HX(e,t,r,n){if(Yy())return null;let o=e("gh",["pr","view",String(r),"--repo",t,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return IN(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function zy(e){return Yy()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Fs(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function jX(e){return Array.isArray(e)?e.map(t=>Fs(t)).filter(t=>t!==null).slice(0,WX).map(t=>({context:t.context??null,state:t.state??null,target_url:t.target_url??null,description:t.description??null})):[]}function VX(e,t,r){let n=qy(e,[`repos/${t}/commits/${r}/status`]);return n?{state:n.state??null,statuses:jX(n.statuses)}:null}var BX,WX,UX,FX,KX,Jy,ON,TN,NN,DN=p(()=>{"use strict";Td();BX=8e3,WX=30,UX=100,FX=400,KX=3600*1e3,Jy=0;ON={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:zy,collect(e,t){let r=PN(e);if(!r)return null;let n=HX(t,r.repo,r.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=Fs(n.author),s=Fs(n.mergeCommit),i=Fs(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,BX):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Fs(u)).filter(u=>u!==null).slice(0,UX).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>Fs(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,FX):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},TN={provider:"github",kind:"commit_status",version:"1",isAvailable:zy,collect(e,t){let r=Gy(e);return r?VX(t,r.repo,r.sha):null}},NN={provider:"github",kind:"branch_reachability",version:"1",isAvailable:zy,collect(e,t){let r=Gy(e);if(!r)return null;let n=qy(t,[`repos/${r.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=qy(t,[`repos/${r.repo}/compare/${encodeURIComponent(o)}...${r.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}}});function Xy(e){Qy.some(t=>t.provider===e.provider&&t.kind===e.kind)||Qy.push(e)}function MN(e,t){return Qy.find(r=>r.provider===e&&r.kind===t)??null}function LN(){Xy(ON),Xy(TN),Xy(NN)}var Qy,BN=p(()=>{"use strict";DN();Qy=[]});function WN(e,t={}){LN();let r=t.run??EN,n=t.now??(()=>new Date),o=t.maxSubjects??GX,s=Date.now()+(t.deadlineMs??JX),i=new Set,a=e.filter(m=>{let g=Od(m.provider,m.kind,m.subject);return i.has(g)?!1:(i.add(g),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,g)=>a[(l+g)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let m of u){let g=Od(m.provider,m.kind,m.subject),h=n(),y=t.cache?.get(g,h)??null;if(y){d.cached+=1,d.collected+=1,d.items.push(y);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let v=MN(m.provider,m.kind);if(!v){d.skipped.push({...m,reason:"no_recipe"});continue}let k=`${v.provider} ${v.kind}`,b=f.get(k);if(b===void 0&&(b=v.isAvailable(r),f.set(k,b)),!b){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(t.cache?.reserve?.(m,g,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let _=v.collect(m.subject,r);if(_==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let S={provider:m.provider,kind:m.kind,subject:m.subject,payload:_,observedAt:n().toISOString(),collectorVersion:v.version};d.items.push(S),t.cache?.set(g,S,n())}return d}var GX,JX,UN=p(()=>{"use strict";AN();BN();Td();GX=1,JX=25e3});import FN from"node:path";function KN(e){return FN.join(j(e),qX)}function XX(e){return FN.join(j(e),YX)}function $N(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||t.push({provider:o,kind:s,subject:i})}return t}function HN(e){let t=F(KN(e),null);return $N(t?.wanted)}function jN(e,t){be(KN(e),{savedAt:new Date().toISOString(),wanted:t})}function VN(e,t={}){let r=t.ttlMs??zX,n=XX(e),s={...F(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>r?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(be(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function GN(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.providerEvidenceWanted;return Array.isArray(t)?$N(t):null}var qX,YX,zX,Zy=p(()=>{"use strict";Y();M();Td();qX="provider-evidence-wanted.json",YX="provider-evidence-cache.json",zX=600*1e3});import QX from"node:path";function ek(e,t){let r=process.env[e];if(!r)return t;let n=Number.parseInt(r,10);return Number.isFinite(n)&&n>=0?n:t}function n3(){return QX.join(he().harnessRoot,ZX)}function o3(e){let t=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),r=e==="github"?t3:r3;return ek(`KYNVER_PROVIDER_EVIDENCE_${t}_PER_MINUTE`,ek("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",r))}function JN(){return ek("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",e3)}function s3(e){return Math.floor(e.getTime()/6e4)*6e4}function i3(e){return`${e.provider}:${e.kind}`}function qN(e,t={}){let r=VN(e,{ttlMs:t.ttlMs??JN()}),n=t.file??n3(),o=F(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=t.ttlMs??JN(),l=!1;return{get(u,d){let f=r.get(u,d);if(f)return f;let m=s[u];if(!m)return null;let g=Date.parse(m.observedAt);return!Number.isFinite(g)||d.getTime()-g>a?(delete s[u],l=!0,null):(r.set(u,m,d),m)},set(u,d,f){r.set(u,d,f),s[u]=d,l=!0},reserve(u,d,f){let m=o3(u.provider);if(m===0)return!0;let g=i3(u),h=s3(f),y=i[g];return!y||y.windowStartMs!==h?(i[g]={windowStartMs:h,used:1},l=!0,!0):y.used>=m?!1:(y.used+=1,l=!0,!0)},flush(){r.flush(),l&&(be(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}var ZX,e3,t3,r3,YN=p(()=>{"use strict";Y();M();Zy();ZX="provider-evidence-shared-cache.json",e3=6e4,t3=1,r3=1});function zN(e){let t=N_(),r=br(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(r.flags.dispatchReceipts!=="off"){Object.assign(o,oP());let s=nP({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,r.flags.dispatchReceipts==="enforce"&&Object.assign(o,_O())}return r.flags.planOutbox!=="off"&&Object.assign(o,oI()),r.flags.admission!=="off"&&(Object.assign(o,lP()),r.flags.admission==="enforce"&&Object.assign(o,pP())),(r.flags.keeper!=="off"||r.flags.meshLease!=="off"||r.flags.quota!=="off")&&Object.assign(o,j_()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:t.state,schemaVersion:t.schemaVersion,recovered:t.recovered,unavailableClass:t.reason?t.reason.split(":")[0]??null:null,flags:r.flags,flagSources:r.sources,flagWarningCount:r.warnings.length,divergenceCounters:o}}var XN=p(()=>{"use strict";Jr();ls();_s();wy();La();zn();Cs();Gi()});import{createHash as QN}from"node:crypto";import{access as a3,mkdir as TIe,readFile as ZN,rename as NIe,writeFile as DIe}from"node:fs/promises";import{constants as l3}from"node:fs";import{homedir as tk}from"node:os";import ze from"node:path";function d3(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||ze.join(tk(),".kynver","mcp-installations.json")}function p3(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||ze.join(tk(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||ze.join(tk(),".npm-global")}function f3(e){let t=ze.resolve(e);if(ze.basename(t)!=="node_modules")return t;let r=ze.dirname(t);return ze.basename(r)==="lib"?ze.dirname(r):r}function m3(e,t){return[ze.join(e,"lib","node_modules",t,"package.json"),ze.join(e,"node_modules",t,"package.json")]}async function g3(e){try{return await a3(e,l3.R_OK),!0}catch{return!1}}async function rk(e=d3()){let t;try{t=JSON.parse(await ZN(e,"utf8"))}catch{return[]}if(t.version!==1||!Array.isArray(t.installations)||t.installations.length>100)throw new Error("invalid MCP installation inventory");return t.installations.map(r=>{if(!r||!u3.test(r.inventoryKey)||!c3.test(r.packageName)||!["kynver","openclaw"].includes(r.prefix))throw new Error("invalid adopted MCP installation");if(r.packageName.includes("..")||r.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(r.connectionId&&r.connectionId.length>128)throw new Error("invalid connection identity");if(r.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(r.binName))throw new Error("invalid MCP bin name");let n=r.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...r,envAllowlist:[...new Set(n)],lifecycle:r.lifecycle??"runtime_stdio"}})}function h3(e,t,r){if(typeof e.bin=="string")return ze.join(r,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=t.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!ze.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?ze.join(r,s):null}function y3(e){return QN("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function k3(e){let t=[];for(let r of e){let n=f3(p3(r.prefix)),o=(await Promise.all(m3(n,r.packageName).map(async m=>({candidate:m,ok:await g3(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await ZN(o,"utf8"));if(s.name!==r.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=ze.dirname(o),a=h3(s,r,i),l=r.packageName==="@kynver-app/runtime",c=r.lifecycle??"runtime_stdio",u=QN("sha256").update(JSON.stringify({prefix:n,binName:r.binName??null,envAllowlist:[...r.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],f={inventoryKey:r.inventoryKey,connectionId:r.connectionId??null,packageName:r.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};t.push({report:{...f,displayName:r.displayName?.trim()||r.packageName,inventoryFingerprint:y3(f),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:r.envAllowlist??[],lifecycle:c}})}return t}async function e0(){return k3(await rk())}var c3,u3,nk=p(()=>{"use strict";c3=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,u3=/^[A-Za-z0-9._:-]{8,128}$/});import{createHash as b3,createHmac as v3,timingSafeEqual as R3}from"node:crypto";function ok(e){let t=e.trim().split(".");return t.length!==3||t[0]!=="krc1"||!t[1]||!t[2]?null:{tokenId:t[1],tokenHash:b3("sha256").update(`krc1.${t[1]}.${t[2]}`,"utf8").digest("hex")}}function t0(e,t,r){let n=ok(t);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==r||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=v3("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&R3(i,s)}var sk=p(()=>{"use strict"});import{createHash as w3}from"node:crypto";import{access as ik,mkdtemp as S3,readFile as i0,rm as _3}from"node:fs/promises";import{constants as ak}from"node:fs";import{tmpdir as x3}from"node:os";import Ks from"node:path";import{spawn as C3}from"node:child_process";import{Client as E3}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as A3}from"@modelcontextprotocol/sdk/client/stdio.js";function a0(){return"npm"}function n0(e,t){return Buffer.byteLength(e)>=r0?e:(e+t.toString("utf8")).slice(0,r0)}function I3(e){let t=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),r=t&&Ks.isAbsolute(t)?t:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:lk,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:r};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function l0(e,t,r=ck,n){return new Promise((o,s)=>{let i,a;try{[i,a]=ae(e,t)}catch(m){s(m);return}let l=C3(i,a,{shell:!1,windowsHide:!0,detached:Re(),env:I3(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=n0(c,m)}),l.stderr.on("data",m=>{u=n0(u,m)});let f=setTimeout(()=>{d=!0,l.pid&&fe(l.pid,"SIGKILL")},r);l.once("error",m=>{clearTimeout(f),s(m)}),l.once("close",m=>{clearTimeout(f),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function O3(e,t){let[r,n]=t.split("-",2);return!n||!["sha256","sha384","sha512"].includes(r)?!1:w3(r).update(e).digest("base64")===n}async function T3(e,t,r,n){let o=await l0(a0(),["pack",`${e}@${t}`,"--json","--pack-destination",n,`--registry=${lk}`,"--ignore-scripts"],ck,Ks.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||Ks.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Ks.join(n,i);if(!O3(await i0(a),r))throw new Error("artifact_integrity_mismatch");return a}async function N3(e,t,r){if((await l0(a0(),["install","--global","--prefix",e,t,`--registry=${lk}`,"--no-audit","--fund=false"],ck,r)).code!==0)throw new Error("package_install_failed")}async function c0(e){let t=JSON.parse(await i0(e.local.packageJsonPath,"utf8"));if(t.name!==e.report.packageName||typeof t.version!="string")throw new Error("installed_identity_mismatch");return t.version}function D3(e){let t={};for(let r of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[r];n!==void 0&&(t[r]=n)}return t}async function o0(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await ik(e.local.binPath,ak.X_OK).catch(async()=>ik(e.local.binPath,ak.R_OK));let t=new A3({command:e.local.binPath,args:[],env:D3(e.local.envAllowlist),stderr:"pipe"}),r=new E3({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([r.connect(t),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),P3)})]);let o=await r.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await r.close().catch(()=>{})}}async function s0(e,t,r,n,o){let s=await S3(Ks.join(x3(),"kynver-mcp-update-"));try{let i=await T3(t,r,n,s);if(await o(),await N3(e.local.prefix,i,Ks.join(s,"npm-cache")),await c0(e)!==r)throw new Error("installed_version_mismatch")}finally{await _3(s,{recursive:!0,force:!0})}}async function u0(e,t,r,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==t.inventoryKey||e.report.inventoryFingerprint!==t.inventoryFingerprint||e.report.packageName!==t.packageName)throw new Error("local_inventory_mismatch");if(t.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await r("preflight"),await ik(e.local.prefix,ak.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await c0(e),s=t.resumePhase!==null&&o===t.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==t.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await r("installing"):(await s0(e,t.packageName,t.targetVersion,t.targetIntegrity,async()=>{await r("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:t.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await r("restarting"),await r("verifying");let a=await o0(e);return{outcome:"succeeded",observedVersion:t.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!t.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await s0(e,t.packageName,t.installedVersion,t.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await o0(e);return{outcome:"rollback_succeeded",observedVersion:t.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:t.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}var lk,r0,ck,P3,d0=p(()=>{"use strict";ci();qe();lk="https://registry.npmjs.org",r0=512*1024,ck=2*6e4,P3=2e4});import{createHmac as M3,timingSafeEqual as L3}from"node:crypto";import{mkdir as B3,readFile as W3,rename as U3,writeFile as F3}from"node:fs/promises";import{homedir as K3}from"node:os";import uk from"node:path";function qa(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||uk.join(K3(),".kynver","state","mcp-updates")}function p0(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return uk.join(qa(),`${e}.json`)}function f0(e,t){let r=ok(t);return r?M3("sha256",Buffer.from(r.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function m0(e,t){try{let r=JSON.parse(await W3(p0(e),"utf8"));if(r.version!==2||r.operationId!==e||typeof r.integrityMac!="string")return null;let{integrityMac:n,...o}=r,s=f0(o,t);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!L3(i,a)?null:r}catch{return null}}async function g0(e,t){let r=f0(e,t);if(!r)throw new Error("invalid_runner_credential_for_receipt");let n=p0(e.operationId);await B3(uk.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await F3(o,`${JSON.stringify({...e,integrityMac:r},null,2)}
187
- `,{mode:384}),await U3(o,n)}var Nd=p(()=>{"use strict";sk()});import{randomBytes as dk}from"node:crypto";import{mkdir as pk,readFile as fk,rename as $3,rm as Dd,stat as H3,writeFile as h0}from"node:fs/promises";import so from"node:path";function y0(){return so.join(qa(),j3)}async function k0(){try{let e=JSON.parse(await fk(so.join(y0(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:b0(e.pid)}}catch{return null}}function b0(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function V3(e){try{return await H3(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function v0(){return G3("mcp_update")}async function G3(e){let t=y0(),r=`${t}.reclaiming`;await pk(so.dirname(t),{recursive:!0,mode:448});let n=!1;try{if(await V3(r))return null;for(let o=0;o<2;o+=1)try{await pk(t,{mode:448});let s={pid:process.pid,nonce:dk(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await h0(so.join(t,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Dd(r,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await fk(so.join(t,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Dd(t,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await pk(r,{mode:448}),n=!0,await h0(so.join(r,"owner.json"),JSON.stringify({pid:process.pid,nonce:dk(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await fk(so.join(t,"owner.json"),"utf8"))}catch{return null}if(b0(i.pid))return null;let a=`${t}.stale-${process.pid}-${dk(8).toString("hex")}`;await $3(t,a),await Dd(a,{recursive:!0,force:!0})}return null}finally{n&&await Dd(r,{recursive:!0,force:!0})}}var j3,R0=p(()=>{"use strict";Nd();j3="host-mutation.lock"});function Md(e,t,r){return`${e}/api/agent-os/by-id/${encodeURIComponent(t)}/mcp-updates/${r}`}function J3(e){if(!e||typeof e!="object")return null;let t=e.claim;if(!t||typeof t!="object"||t.waitingForIdle!==!1)return null;let r=t.command;return r&&typeof r=="object"?r:null}function w0(e,t){let r=t.claims;return e.inventoryKey===r.inventoryKey&&e.packageName===r.packageName&&e.installedVersion===r.installedVersion&&e.targetVersion===r.targetVersion&&e.targetIntegrity===r.targetIntegrity&&e.rollbackIntegrity===r.rollbackIntegrity&&e.item.report.inventoryKey===r.inventoryKey&&e.item.report.packageName===r.packageName}function q3(e,t){return{inventoryKey:t.claims.inventoryKey,packageName:t.claims.packageName,installedVersion:t.claims.installedVersion,targetVersion:t.claims.targetVersion,targetIntegrity:t.claims.targetIntegrity,rollbackIntegrity:t.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function S0(e){let t=pe(e.baseUrl),r=await e0();if(r.length===0)return{ok:!0,stage:"not_configured"};let n=await Ln(Md(t,e.agentOsId,"inventory"),e.secret,{items:r.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await v0();if(!o){let s=await k0();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await Ln(Md(t,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=J3(s.response);if(!i)return{ok:!0,stage:"idle"};if(!t0(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await m0(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!w0(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let k=r.find(b=>b.report.inventoryKey===i.claims.inventoryKey);if(!k||k.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=k,c=a&&w0(a.recovery,i)?a.recovery:q3(k,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(k,b,_)=>{await g0({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:k,terminal:b,..._?{outcome:_}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let f="claimed",m=async k=>{if(!(await Ln(Md(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:k})).ok)throw new Error("progress_rejected");f=k,await d(k,!1)},g=k=>m(k),h=()=>m(f),y;try{y=await u0(l,i.claims,g,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:h,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(k){y={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:k instanceof Error?k.message:"update_failed"}}let v=await Ln(Md(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...y});return v.ok?(await d(y.outcome,!0,y.outcome),{ok:y.outcome==="succeeded",stage:"complete",outcome:y.outcome}):{ok:!1,stage:"complete",status:v.status,outcome:y.outcome}}finally{await o.release()}}var _0=p(()=>{"use strict";$();Fe();nk();sk();d0();R0();Nd()});import x0 from"node:path";function Y3(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function z3(e,t){let r=ne(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(r.workers||{})){let a=F(x0.join(j(r.id),"workers",B(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Ur(a))continue;if(ba(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=ie(a);if(!Be(l))continue;let c=Mo({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await As({run:e,name:i,agentOsId:String(t.agentOsId||a.agentOsId||""),...t});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function X3(e,t,r,n,o){let s=pe(n.baseUrl?String(n.baseUrl):void 0),i=await me(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await CN(),c=Zo(t),u=null;try{let S=HN(t);if(S.length>0){let R=qN(t);u=WN(S,{cache:R}),R.flush?.()}else u=null}catch{u=null}try{if(Ir()!=="off"){let S=Uo();aP({liveWorkers:S}),dP({liveWorkers:S})}else sP()}catch{}let d=({runId:S,workerName:R})=>{try{let{runsDir:w}=he(),L=x0.join(mr(w,B(S)),"workers",B(R),"worker.json"),N=F(L,null);return N?Ur(N):!1}catch{return!1}};await CO({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let f=null;try{f=zN({hasLiveWorker:d})}catch{f=null}let m=null;try{m=pc({control:Kr(e),supervisor:xw(),inFlightWorkers:Uo().length})}catch{m=null}let g=eu(t),h=Ux(),y=await de(a,i,{agentOsId:e,runId:t,ingestHarness:!0,harnessBoardSnapshot:$h(t),resourceGate:r,boxResourceSnapshot:AO(r,{harnessRunId:t,boxKind:xt(P())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:De({runId:t}),activeHarnessWorkers:c,...g?.leaseToken?{meshCronLeaseToken:g.leaseToken}:{},...f?{localRunStore:f}:{},...m?{runtimeControlAck:m}:{},...h?{daemonEventLoop:h}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),v=GN(y.response);if(v)try{jN(t,v)}catch{}let k=Mx(y);if(k)try{Dx(t,k)}catch{}let b=M_(y);b&&L_(e,b);let _=bw(y);return _&&Vf(e,_),{ok:y.ok,httpStatus:y.status,response:y.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Ld(e){let t=String(_t(String(e.run||""),"--run")),r=String(_t(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";$h(t);let o=await nu(r,e),s=ru(o),i=xi({runId:t,configuredMaxWorkersOverride:s}),a=RN()?vN(t):void 0,l=await X3(r,t,i,e,a),c;if(n)try{let A=pe(e.baseUrl?String(e.baseUrl):void 0),O=await me(e.secret?String(e.secret):void 0,r,{baseUrl:A});c=await S0({agentOsId:r,secret:O,baseUrl:A,activeOwnedSessions:Uo().length})}catch(A){c={ok:!1,stage:"cycle",error:A instanceof Error?A.message:"update cycle failed"}}let u=UA(t,l),d=await IE(t,e),f=await z3(t,e);f.some(A=>A.ok&&!A.skipped)&&gx();let m=xi({runId:t,configuredMaxWorkersOverride:s}),g=vy(),h=await TO(t,e),y=rO(m,l),v=y.maxStarts,k=Kr(r),b=Rw(k);b&&(v=0);let _=Y3()?await md({run:t,agentOsId:r,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},S=null,R=0,w=eO(l),L=v;if(n&&L>0&&w.length>0){let A=Math.min(L,w.length),O=await ay({...e,run:t,agentOsId:r,targetTaskIds:w.join(",")},A),W=Ns(O);R+=W,L=Math.max(0,L-W),S={exactTargetTaskIds:w,exact:O,startedCount:R}}if(n&&L>0){let A=await ay({...e,run:t,agentOsId:r},L),O=Ns(A);R+=O,S=S&&typeof S=="object"?{...S,broad:A,startedCount:R}:A}else!n||v<=0?S||(S={ok:!0,skipped:!0,reason:b??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:y,...w.length?{exactTargetTaskIds:w,exactOnly:!0}:{}}):S&&typeof S=="object"&&(S={...S,broadSkipped:!0,startedCount:R});let N=!y.underutilized&&v===0&&f.length===0&&R===0;return{runId:t,agentOsId:r,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:f,staleReconcile:g,harnessCleanup:a,planProgressSync:h,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:_,dispatchAdvice:y,dispatch:S,idle:N,runtimeControl:k?{desiredState:k.desiredState,policyVersion:k.policyVersion}:null}}var mk=p(()=>{"use strict";$r();Pc();$();Fe();ZI();tO();nO();Ry();Fo();zn();EO();Cs();PO();Qc();Y();Et();Ql();Ce();Sy();M();NO();Zg();Ps();Wu();oc();kg();$();Le();wN();zu();Vy();yr();UN();YN();Zy();fg();XN();zm();_0();mg()});function Bd(e){return $o(Kr(e))!=="stopped"?null:Uo().length}var gk=p(()=>{"use strict";Fo();$r()});function C0(e){if(!e||typeof e!="object")return!1;let t=e;return t.type==="result"&&typeof t.id=="number"&&typeof t.ok=="boolean"}var E0=p(()=>{"use strict"});import{existsSync as Q3}from"node:fs";import{fileURLToPath as Z3}from"node:url";import{SHARE_ENV as e8,Worker as t8}from"node:worker_threads";function n8(e=import.meta.url){for(let t of[`./${A0}`,`../${A0}`]){let r=new URL(t,e);try{if(Q3(Z3(r)))return r}catch{}}return null}function o8(e){let t=(e.env??process.env).KYNVER_DAEMON_TICK_THREAD?.trim().toLowerCase();return t==="0"||t==="false"||t==="off"?{mode:"inline",reason:"disabled_by_env"}:e.desktopMode??Qe()?{mode:"inline",reason:"desktop_sidecar"}:e.script?{mode:"thread",reason:"default"}:{mode:"inline",reason:"thread_entry_not_built"}}var A0,r8,s8,Wd,P0=p(()=>{"use strict";St();mg();Gr();mk();gk();E0();A0="daemon-tick-thread.js",r8=3;s8=(e,t)=>new t8(e,{workerData:t,env:e8,name:"kynver-pipeline-tick"}),Wd=class{constructor(t){this.options=t;this.script=t.script===void 0?n8():t.script;let r=o8({env:t.env,desktopMode:t.desktopMode,script:this.script});this.modeValue=r.mode,this.reason=r.reason,this.createWorker=t.createWorker??s8,this.log=t.log??(n=>console.error(n))}options;modeValue;reason;script;createWorker;log;worker=null;online=!1;pending=null;nextId=1;startFailures=0;sentBundleKey=null;get mode(){return this.modeValue}async runTick(t,r){if(this.modeValue==="inline")return this.runInline(t,r);let n=await this.request(()=>({type:"tick",id:this.nextId++,args:t,agentOsId:this.options.agentOsId,...this.bundleIfChanged(),eventLoopReport:r}));if(!n.ok)throw new Error(n.error);return{tick:n.tick,inFlightWorkers:n.inFlightWorkers,isolation:"thread"}}async close(){let t=this.worker;this.worker=null,t&&await t.terminate().catch(()=>{})}async runInline(t,r){return Wx(r),{tick:await Ld(t),inFlightWorkers:Bd(this.options.agentOsId),isolation:"inline"}}bundleIfChanged(){let t=m_(),r=Ft(),n=`${t.version}\0${r}`;return n===this.sentBundleKey?{}:(this.sentBundleKey=n,{instructionBundle:{bundle:t,source:r}})}ensureWorker(){if(this.worker)return this.worker;if(!this.script)throw new Error("tick thread entry not found");let t=this.createWorker(this.script,this.options.init);return this.worker=t,this.online=!1,this.sentBundleKey=null,t.on("online",()=>{this.online=!0,this.startFailures=0}),t.on("message",r=>{if(!C0(r)||!this.pending||r.id!==this.pending.id)return;let n=this.pending;this.pending=null,n.resolve(r)}),t.on("error",r=>this.onWorkerGone(t,r)),t.on("exit",r=>this.onWorkerGone(t,new Error(`tick thread exited with code ${r}`))),t}onWorkerGone(t,r){if(this.worker!==t)return;this.worker=null,this.online||(this.startFailures+=1,this.startFailures>=r8&&(this.modeValue="inline",this.log(JSON.stringify({event:"daemon_tick_thread_fallback",level:"error",reason:"thread_failed_to_start",attempts:this.startFailures,error:r.message})))),this.log(JSON.stringify({event:"daemon_tick_thread_exit",level:"warn",error:r.message}));let n=this.pending;this.pending=null,n?.reject(r)}request(t){if(this.pending)return Promise.reject(new Error("a pipeline tick is already running"));let r;try{r=this.ensureWorker()}catch(o){return Promise.reject(o instanceof Error?o:new Error(String(o)))}let n=t();return new Promise((o,s)=>{this.pending={id:n.id,resolve:o,reject:s};try{r.postMessage(n)}catch(i){this.pending=null,s(i instanceof Error?i:new Error(String(i)))}})}}});import{monitorEventLoopDelay as i8,performance as a8}from"node:perf_hooks";var l8,c8,u8,d8,I0,Ud,O0=p(()=>{"use strict";l8=1e3,c8=250,u8=5,d8=5e3,I0=e=>Number.isFinite(e)?Math.round(e/1e6):0,Ud=class{thresholdMs;sampleIntervalMs;now;monotonicNow;log;histogram;timer=null;lastSampleAt=0;lastSampleWallAt=0;startedAt=0;phase="starting";phasesInWindow=new Set(["starting"]);stallCount=0;maxLagMs=0;recent=[];tickIsolation="inline";constructor(t={}){this.thresholdMs=t.thresholdMs??l8,this.sampleIntervalMs=t.sampleIntervalMs??c8,this.now=t.now??Date.now,this.monotonicNow=t.monotonicNow??t.now??(()=>a8.now()),this.log=t.log??(r=>console.error(r)),this.histogram=t.histogram??i8({resolution:20})}setPhase(t){this.phase=t,this.phasesInWindow.add(t)}setTickIsolation(t){this.tickIsolation=t}start(){this.timer||(this.startedAt=this.now(),this.lastSampleWallAt=this.startedAt,this.lastSampleAt=this.monotonicNow(),this.histogram.enable(),this.timer=setInterval(()=>this.sample(),this.sampleIntervalMs),this.timer.unref?.())}stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.histogram.disable()}sample(){let t=this.now(),r=this.monotonicNow(),n=r-this.lastSampleAt,o=t-this.lastSampleWallAt;if(this.lastSampleAt=r,this.lastSampleWallAt=t,o-n>d8)return this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),null;let s=Math.max(0,Math.round(n-this.sampleIntervalMs)),i=I0(this.histogram.max),a=I0(this.histogram.percentile(99)),l=Math.max(s,i),c=null;return(l>=this.thresholdMs||a>=this.thresholdMs)&&(c={at:new Date(t).toISOString(),lagMs:l,p99Ms:a,phase:this.phase,phasesInWindow:[...this.phasesInWindow]},this.stallCount+=1,this.maxLagMs=Math.max(this.maxLagMs,l),this.recent=[...this.recent,c].slice(-u8),this.log(JSON.stringify({event:"daemon_event_loop_stall",level:"warn",lagMs:l,p99Ms:a,maxMs:i,thresholdMs:this.thresholdMs,phase:c.phase,phasesInWindow:c.phasesInWindow,tickIsolation:this.tickIsolation}))),this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),c}report(){return{contractVersion:1,observedAt:new Date(this.now()).toISOString(),monitorStartedAt:new Date(this.startedAt||this.now()).toISOString(),thresholdMs:this.thresholdMs,tickIsolation:this.tickIsolation,stallCount:this.stallCount,maxLagMs:this.maxLagMs,lastStall:this.recent.length?this.recent[this.recent.length-1]:null,recentStalls:[...this.recent]}}}});var p8,f8,m8,Fd,T0=p(()=>{"use strict";sr();p8=5*6e4,f8=5*6e4,m8=2160*60*60,Fd=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.fetchImpl=t.fetchImpl??fetch,this.log=t.log??(r=>console.error(JSON.stringify(r)))}deps;token=null;lastMintFailureAt=0;minting=null;refreshing=null;lastRefreshFailureAt=0;now;fetchImpl;log;async authorization(){let t=this.token&&this.token.expiresAtMs-this.now()>p8?this.token:null;if(t)return{kind:"box_token",bearer:t.token,boxId:t.boxId};let r=this.deps.loadBoxCredential();if(r||(r=await this.mintOnce()),r){let o=await this.refreshOnce(r);if(o)return{kind:"box_token",bearer:o.token,boxId:o.boxId};if(this.token&&this.token.expiresAtMs>this.now())return{kind:"box_token",bearer:this.token.token,boxId:this.token.boxId}}let n=this.deps.loadApiKey();return n?{kind:"api_key",bearer:n,boxId:null}:null}invalidateToken(){this.token=null}describe(){return{kind:this.token?"box_token":this.deps.loadApiKey()?"api_key":"none",boxId:this.token?.boxId??null,tokenExpiresAt:this.token?new Date(this.token.expiresAtMs).toISOString():null,hasBoxCredential:!!this.deps.loadBoxCredential()}}mintOnce(){return this.minting||(this.minting=this.mintBoxCredential().finally(()=>{this.minting=null})),this.minting}async mintBoxCredential(){let t=this.deps.loadApiKey();if(!t||this.now()-this.lastMintFailureAt<f8)return;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/runner-credentials`;try{let n=await ut(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({capabilities:["chat.relay"],ttlSeconds:m8,name:`chat-box:${this.deps.boxLabel()}`}),signal:AbortSignal.timeout(1e4)},this.fetchImpl),o=await n.json().catch(()=>null);if(!n.ok||typeof o?.token!="string"||!o.token){this.lastMintFailureAt=this.now(),this.log({event:"chat_box_credential_mint_failed",status:n.status,detail:typeof o?.error=="string"?o.error.slice(0,200):null});return}return this.deps.saveBoxCredential(o.token),this.log({event:"chat_box_credential_minted",agentOsId:this.deps.agentOsId}),o.token}catch(n){this.lastMintFailureAt=this.now(),this.log({event:"chat_box_credential_mint_failed",error:n instanceof Error?n.message:String(n)});return}}refreshOnce(t){return this.refreshing||(this.refreshing=this.refreshToken(t).finally(()=>{this.refreshing=null})),this.refreshing}async refreshToken(t){if(this.now()-this.lastRefreshFailureAt<15e3&&this.token===null)return null;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/chat-box-token`;try{let n=await ut(r,{method:"POST",headers:{"Content-Type":"application/json","X-Kynver-Runner-Token":t},body:JSON.stringify({boxLabel:this.deps.boxLabel()}),signal:AbortSignal.timeout(1e4)},this.fetchImpl);if(n.status===401||n.status===403)return this.log({event:"chat_box_credential_rejected",status:n.status}),this.deps.clearBoxCredential(),this.token=null,null;let o=await n.json().catch(()=>null);if(!n.ok||typeof o?.token!="string"||typeof o.boxId!="string")return this.lastRefreshFailureAt=this.now(),this.log({event:"chat_box_token_refresh_failed",status:n.status,detail:typeof o?.error=="string"?o.error.slice(0,200):null}),null;let s=typeof o.expiresAt=="string"&&!Number.isNaN(Date.parse(o.expiresAt))?Date.parse(o.expiresAt):this.now()+10*6e4;return this.token={token:o.token,expiresAtMs:s,boxId:o.boxId},this.token}catch(n){return this.lastRefreshFailureAt=this.now(),this.log({event:"chat_box_token_refresh_failed",error:n instanceof Error?n.message:String(n)}),null}}}});async function $s(e){if(e.auth){let t=await e.auth.authorization();if(t)return{bearer:t.bearer,kind:t.kind,boxId:t.boxId??e.boxId}}return{bearer:e.apiKey,kind:"api_key",boxId:e.boxId}}function io(e,t,r){r===401&&t.kind==="box_token"&&e.auth?.invalidateToken()}var Kd=p(()=>{"use strict"});import{createHash as g8,verify as h8,createPublicKey as y8}from"node:crypto";function yk(e){if(!e||typeof e!="object"||Array.isArray(e))return e;let t={...e};return delete t[N0],t}function b8(e){return g8("sha256").update(nt(yk(e)),"utf8").digest("hex")}function kk(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[N0]??null}function v8(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||r.kind!=="chat-turn"||typeof r.turnId!="string"||!r.turnId||typeof r.agentOsId!="string"||!r.agentOsId||r.userId!==null&&(typeof r.userId!="string"||!r.userId)||r.boxId!==null&&typeof r.boxId!="string"||r.access!==null&&(!r.access||typeof r.access!="object"||Array.isArray(r.access))||typeof r.payloadHash!="string"||!/^[0-9a-f]{64}$/.test(r.payloadHash)||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function R8(e,t){let r=e&&typeof e=="object"&&!Array.isArray(e)?e.computerAccess??null:null;return r===null&&t===null?!0:r===null||t===null?!1:nt(r)===nt(t)}function hk(e,t){return{state:t,firstSeenAt:new Date(e.firstSeenSec*1e3).toISOString(),turnId:e.turnId}}function w8(e){return y8({key:Buffer.concat([k8,Buffer.from(e)]),format:"der",type:"spki"})}function D0(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3),s=kk(e);if(s===null)return{ok:!1,code:"unsigned",reason:"turn carries no signed envelope"};if(!v8(s))return{ok:!1,code:"malformed",reason:"malformed chat-turn envelope"};let i=s;if(i.payload.agentOsId!==t.agentOsId)return{ok:!1,code:"agent_os_mismatch",reason:"envelope is for another workspace"};if(i.payload.turnId!==t.turnId)return{ok:!1,code:"turn_id_mismatch",reason:"envelope is for another turn"};if(i.payload.exp<=o)return{ok:!1,code:"expired",reason:"envelope expired"};let a=Tn(i.publicKeyId,n);if(!a)return{ok:!1,code:"no_verification_key",reason:`no verification key for publicKeyId "${i.publicKeyId}"`};let l;try{l=Buffer.from(i.signature,"base64url")}catch{return{ok:!1,code:"bad_signature",reason:"signature is not base64url"}}if(l.length!==64)return{ok:!1,code:"bad_signature",reason:"signature is not a 64-byte Ed25519 signature"};let c=!1;try{let d=Buffer.from(nt(i.payload),"utf8");c=h8(null,d,w8(a),l)}catch(d){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${d.message}`}}if(!c)return{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"};if(b8(e)!==i.payload.payloadHash)return{ok:!1,code:"payload_tampered",reason:"turn payload does not match its signed hash"};if(!R8(e,i.payload.access))return{ok:!1,code:"access_mismatch",reason:"computer access on the turn differs from the signed setting"};if(!r.nonces)return{ok:!0,payload:i.payload,redelivered:!1};let u=r.nonces.consume({nonce:i.payload.nonce,turnId:i.payload.turnId,expSec:i.payload.exp,nowSec:o});return u.ok?{ok:!0,payload:i.payload,redelivered:u.redelivered}:{ok:!1,code:"replayed",reason:`envelope nonce already used on this computer (${S8(u.replay)})`,replay:u.replay}}function S8(e){return`${e.state==="in_flight"?"this computer is running that turn now":e.state==="already_ran"?"that turn already ran here":`the nonce belongs to turn ${e.turnId}`}; first seen ${e.firstSeenAt}`}var N0,k8,$d,bk=p(()=>{"use strict";Hr();Li();N0="turnEnvelope",k8=Buffer.from("302a300506032b6570032100","hex");$d=class{constructor(t=1e4){this.maxEntries=t}maxEntries;byNonce=new Map;byTurn=new Map;consume(t){let r=t.nowSec??Math.floor(Date.now()/1e3);this.purge(r);let n=this.byNonce.get(t.nonce);if(n)return n.turnId!==t.turnId?{ok:!1,replay:hk(n,"turn_mismatch")}:n.state==="verified"?{ok:!0,redelivered:!0}:{ok:!1,replay:hk(n,n.state==="started"?"in_flight":"already_ran")};let o=this.byTurn.get(t.turnId);if(o){if(o.state!=="verified")return{ok:!1,replay:hk(o,o.state==="started"?"in_flight":"already_ran")};this.byNonce.delete(o.nonce);let i={...o,nonce:t.nonce,untilSec:Math.max(o.untilSec,t.expSec+60)};return this.byNonce.set(t.nonce,i),this.byTurn.set(t.turnId,i),{ok:!0,redelivered:!0}}if(this.byNonce.size>=this.maxEntries){let i=this.byNonce.values().next().value;i&&this.forget(i)}let s={nonce:t.nonce,turnId:t.turnId,firstSeenSec:r,state:"verified",untilSec:t.expSec+60};return this.byNonce.set(t.nonce,s),this.byTurn.set(t.turnId,s),{ok:!0,redelivered:!1}}markStarted(t){let r=this.byTurn.get(t);return r?(r.state==="verified"&&(r.state="started"),!0):!1}markFinished(t){let r=this.byTurn.get(t);return r?(r.state="finished",!0):!1}stateOf(t){return this.byTurn.get(t)?.state??null}purge(t=Math.floor(Date.now()/1e3)){for(let r of[...this.byNonce.values()])r.untilSec<=t&&this.forget(r)}forget(t){this.byNonce.delete(t.nonce),this.byTurn.get(t.turnId)===t&&this.byTurn.delete(t.turnId)}get size(){return this.byNonce.size}}});function M0(e=process.env,t={}){let r=(e[_8]??t.chatTurnSignature??"").toString().trim().toLowerCase();return r==="optional"||r==="off"||r==="0"||r==="false"?"optional":"required"}function L0(e,t){return t?`turn_rejected_${e}: ${t}`:`turn_rejected_${e}`}function B0(e,t){if(!(kk(e.payload)!==null)&&t.policy==="optional"){let o=e.payload&&typeof e.payload=="object"&&!Array.isArray(e.payload)?e.payload.computerAccess??null:null;return{ok:!0,access:x8(o)?o:null,signed:!1,userId:null,redelivered:!1}}let n=D0(e.payload,{agentOsId:t.agentOsId,turnId:e.turnId},{env:t.env,nowSec:t.nowSec,nonces:t.nonces});return n.ok?{ok:!0,access:n.payload.access,signed:!0,userId:n.payload.userId,redelivered:n.redelivered}:{ok:!1,code:n.code,reason:n.reason,...n.replay?{replay:n.replay}:{}}}function x8(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.byBox;return!!t&&typeof t=="object"&&!Array.isArray(t)}var _8,W0=p(()=>{"use strict";bk();_8="KYNVER_CHAT_TURN_SIGNATURE"});var Hd,U0=p(()=>{"use strict";Hd=class{rejects=new Map;duplicateOffers=0;childEnv=null;noteRejected(t){this.rejects.set(t,(this.rejects.get(t)??0)+1)}noteDuplicateOffer(){this.duplicateOffers+=1}report(t){return{signedTurns:!0,signaturePolicy:t.policy,accessRaiseGuard:!0,auth:t.auth,credentialStore:t.credentialStore,childEnvSafe:this.childEnv?this.childEnv.ok:null,...this.childEnv&&this.childEnv.leaked.length?{childEnvLeaked:this.childEnv.leaked}:{},rejectedTurns:Object.fromEntries(this.rejects),...this.duplicateOffers>0?{duplicateOffers:this.duplicateOffers}:{},...t.folderSandbox?{folderSandbox:t.folderSandbox}:{}}}}});import{lookup as C8}from"node:dns/promises";import{createServer as E8,request as A8}from"node:http";import{connect as P8,isIP as $0,isIPv4 as I8}from"node:net";function H0(e){let t=e.split(".");if(t.length!==4)return null;let r=t.map(n=>Number(n));return r.every(n=>Number.isInteger(n)&&n>=0&&n<=255)?r:null}function Ya(e){let t=H0(e);if(!t)return!0;let[r,n]=t;return r===0||r===10||r===127||r===169&&n===254||r===172&&n>=16&&n<=31||r===192&&n===168||r===100&&n>=64&&n<=127||r===192&&n===0&&t[2]===0||r>=224}function T8(e){let t=e,r=t.indexOf("%");r!==-1&&(t=t.slice(0,r));let n=t.lastIndexOf(":"),o=t.slice(n+1);if(o.includes(".")){let u=H0(o);if(!u)return null;t=`${t.slice(0,n+1)}${(u[0]<<8|u[1]).toString(16)}:${(u[2]<<8|u[3]).toString(16)}`}let s=t.split("::");if(s.length>2)return null;let i=u=>u===""?[]:u.split(":").map(d=>/^[0-9a-f]{1,4}$/i.test(d)?parseInt(d,16):NaN),a=i(s[0]),l=s.length===2?i(s[1]):[];if([...a,...l].some(u=>Number.isNaN(u)))return null;let c=8-a.length-l.length;return(s.length===2?c<0:c!==0)?null:[...a,...new Array(Math.max(0,c)).fill(0),...l]}function N8(e){let t=T8(e);if(!t||t.every(s=>s===0)||t.slice(0,7).every(s=>s===0)&&t[7]===1)return!0;let n=(s,i)=>`${s>>8}.${s&255}.${i>>8}.${i&255}`;if(t.slice(0,5).every(s=>s===0)&&t[5]===65535||t.slice(0,6).every(s=>s===0)||t[0]===100&&t[1]===65435&&t.slice(2,6).every(s=>s===0))return Ya(n(t[6],t[7]));if(t[0]===8194)return Ya(n(t[1],t[2]));let o=t[0];return(o&65024)===64512||(o&65472)===65152||(o&65472)===65216||(o&65280)===65280||o===8193&&t[1]===3512}function F0(e){let t=$0(e);return t===4?Ya(e):t===6?N8(e):!0}function D8(e){return e==="localhost"||e.endsWith(".localhost")||e==="localhost6"||e==="ip6-localhost"}function M8(e){let t=e.trim().toLowerCase();for(t.startsWith("[")&&t.endsWith("]")&&(t=t.slice(1,-1));t.endsWith(".");)t=t.slice(0,-1);return t}async function j0(e){return(await C8(e,{all:!0})).map(r=>r.address)}async function K0(e,t=j0){let r=M8(e);if(!r||r.length>O8)return{allowed:!1,host:r,reason:"invalid host"};if(D8(r))return{allowed:!1,host:r,reason:`${r} is this computer (loopback): local services are not reachable from a folder step`};if($0(r))return F0(r)?{allowed:!1,host:r,reason:`${r} is a private, loopback, link-local or metadata address: not reachable from a folder step`}:{allowed:!0,host:r,address:r};let n;try{n=await t(r)}catch(s){return{allowed:!1,host:r,reason:`${r} could not be resolved (${s?.message??String(s)})`}}if(!n.length)return{allowed:!1,host:r,reason:`${r} could not be resolved`};let o=n.find(s=>F0(s));return o?{allowed:!1,host:r,reason:`${r} resolves to ${o}, a private, loopback, link-local or metadata address: not reachable from a folder step`}:{allowed:!0,host:r,address:n.find(s=>I8(s))??n[0]}}function vk(e,t,r){let n=`Kynver folder sandbox: ${r}
188
- `;e.write(`HTTP/1.1 ${t} ${t===Rk?"Forbidden":"Bad Gateway"}\r
189
- Content-Type: text/plain\r
190
- Content-Length: ${Buffer.byteLength(n)}\r
191
- Connection: close\r
192
- \r
193
- ${n}`),e.end()}function B8(e){if(!e)return null;let t=e.lastIndexOf(":");if(t<=0)return null;let r=e.slice(0,t),n=Number(e.slice(t+1));return!Number.isInteger(n)||n<1||n>65535?null:{host:r,port:n}}async function W8(e={}){let t=e.lookup??j0,r=e.dial??((m,g)=>P8({host:m,port:g})),n=e.idleMs??L8,o={allowed:0,denied:0},s=(m,g,h)=>{let y=B8(m.url);if(g.on("error",()=>g.destroy()),!y){o.denied+=1,vk(g,400,"CONNECT needs host:port");return}K0(y.host,t).then(v=>{if(!v.allowed){o.denied+=1,vk(g,Rk,v.reason);return}o.allowed+=1;let k=r(v.address,y.port,v.host),b=!1;k.setTimeout(n,()=>k.destroy()),k.once("connect",()=>{b=!0,g.write(`HTTP/1.1 200 Connection Established\r
194
- \r
195
- `),h.length&&k.write(h),k.pipe(g),g.pipe(k)}),k.on("error",_=>{if(b){g.destroy();return}vk(g,502,`could not connect to ${v.host}:${y.port} (${_.code??_.message})`)}),k.on("close",()=>g.end()),g.on("close",()=>k.destroy())})},i=(m,g)=>{let h;try{h=new URL(m.url??"")}catch{g.writeHead(400,{"Content-Type":"text/plain"}).end(`Kynver folder sandbox: this is an HTTP proxy; send an absolute URL or CONNECT
196
- `);return}if(h.protocol!=="http:"){g.writeHead(400,{"Content-Type":"text/plain"}).end(`Kynver folder sandbox: only http:// requests are forwarded here; https goes through CONNECT
197
- `);return}let y=h.port?Number(h.port):80;K0(h.hostname,t).then(v=>{if(!v.allowed){o.denied+=1,g.writeHead(Rk,{"Content-Type":"text/plain",Connection:"close"}).end(`Kynver folder sandbox: ${v.reason}
198
- `);return}o.allowed+=1;let k={...m.headers};delete k["proxy-connection"],delete k["proxy-authorization"];let b=A8({host:v.address,port:y,method:m.method,path:`${h.pathname}${h.search}`,headers:k,setHost:!1,createConnection:()=>r(v.address,y,v.host)},_=>{g.writeHead(_.statusCode??502,_.headers),_.pipe(g)});b.setTimeout(n,()=>b.destroy(new Error("idle"))),b.on("error",_=>{g.headersSent||g.writeHead(502,{"Content-Type":"text/plain"}),g.end(`Kynver folder sandbox: could not reach ${v.host}:${y} (${_.code??_.message})
199
- `)}),m.pipe(b)})},a=()=>{let m=E8(i);return m.on("connect",s),m.on("clientError",(g,h)=>h.destroy()),m.unref(),m},l=a(),c=await new Promise((m,g)=>{l.once("error",g),l.listen(0,"127.0.0.1",()=>{let h=l.address();if(!h||typeof h!="object"){g(new Error("egress proxy bound no port"));return}m(h.port)})}),u=a(),f=await new Promise(m=>{u.once("error",()=>m(!1)),u.listen(c,"::1",()=>m(!0))})?[l,u]:[l];return{port:c,listening:()=>l.listening,counts:()=>({...o}),close:()=>Promise.all(f.map(m=>new Promise(g=>m.close(()=>g())))).then(()=>{})}}async function V0(e={}){return Hs?.listening()?Hs:(jd||(jd=W8(e).then(t=>(Hs=t,za=null,t)).catch(t=>{throw Hs=null,za=`egress proxy could not start: ${t?.message??String(t)}`.slice(0,240),new Error(za)}).finally(()=>{jd=null})),jd)}function G0(){return Hs?.listening()?{status:"running",port:Hs.port}:za?{status:"failed",reason:za}:{status:"not_started"}}var O8,L8,Rk,Hs,jd,za,wk=p(()=>{"use strict";O8=253;L8=10*6e4,Rk=403;Hs=null,jd=null,za=null});import{existsSync as U8}from"node:fs";import Gd from"node:path";function _k(e=process.env,t={}){let r=(e[F8]??t.chatFolderSandbox??"").toString().trim().toLowerCase();return r==="best-effort"||r==="best_effort"||r==="optional"?"best_effort":"required"}function z0(e=process.env,t={}){let r=[],n=e[K8];n&&r.push(...n.split(/[\s,]+/)),Array.isArray(t.chatFolderSandboxDomains)&&r.push(...t.chatFolderSandboxDomains.filter(s=>typeof s=="string"));let o=[...$8];for(let s of r){let i=s.trim().toLowerCase();i&&/^[a-z0-9*][a-z0-9.*-]*$/.test(i)&&!o.includes(i)&&o.push(i)}return o}function Vd(e){return`~/${e}`}function V8(){let e=[];for(let t of Jd)e.push(`Read(${Vd(t)}/**)`,`Edit(${Vd(t)}/**)`);for(let t of qd)e.push(`Read(${Vd(t)})`,`Edit(${Vd(t)})`);for(let t of js)e.push(`Read(//**/${t})`,`Edit(//**/${t})`);return e}function G8(e,t=[],r={}){let n=["~/",...j8];for(let o of Jd)n.push(`~/${o}`);for(let o of qd)n.push(`~/${o}`);for(let o of t)n.push(Sk(o));if(r.scanComplete!==!0)for(let o of e)for(let s of js)n.push(Gd.posix.join(Sk(o),"**",s));return n}function J8(e){return[...e.map(Sk),...H8.map(t=>`~/${t}`)]}function Sk(e){return e.split(Gd.sep).join("/")}function J0(e){let t={deny:V8(),blockReadsOutsideWorkingDirectories:!0};if(!e.sandbox)return{permissions:t,sandbox:{enabled:!1}};let r=e.egressProxyPort;return{permissions:t,sandbox:{enabled:!0,autoAllowBashIfSandboxed:!0,allowUnsandboxedCommands:!1,failIfUnavailable:!0,filesystem:{denyRead:G8(e.folders,e.sensitiveFiles,{scanComplete:e.sensitiveScanComplete}),allowRead:J8(e.folders)},network:{allowedDomains:e.domains,allowLocalBinding:!0,...typeof r=="number"&&r>0?{httpProxyPort:r}:{}}}}}function X0(e){return!!e&&q8.test(e)}function Y8(e,t,r){return(t.PATH??"").split(Gd.delimiter).filter(Boolean).some(o=>r(Gd.join(o,e)))}function z8(e={}){let t=e.platform??process.platform,r=e.env??process.env,n=e.exists??U8;if(t==="darwin")return{kind:"seatbelt",available:!0,missing:[]};if(t==="linux"){let o=["bwrap","socat"].filter(s=>!Y8(s,r,n));return o.length?{kind:"bubblewrap",available:!1,missing:o,reason:`Linux needs bubblewrap and socat on PATH to confine shell commands (missing: ${o.join(", ")})`}:{kind:"bubblewrap",available:!0,missing:[]}}return{kind:"none",available:!1,missing:[],reason:t==="win32"?"native Windows cannot confine shell commands (use WSL2 with bubblewrap and socat)":`no command sandbox on ${t}`}}function xk(){return q0??=z8(),q0}function Z0(e){Q0=e.trim().slice(0,240)||"sandbox failed to start"}function Ck(){return Q0}function eD(e){return e.streamed.trim()||e.exitCode===0||e.numTurns!==null&&e.numTurns>0?!1:X8.test(e.detail)&&Q8.test(e.detail)}function tD(e){if(e.access.access!=="folder"&&e.access.access!=="folders")throw new Error(`folder_sandbox_not_applicable: ${e.access.access}`);let t=e.access.folders.length?e.access.folders:[],r=e.runtime.available?e.startupFailure??null:e.runtime.reason??"no command sandbox";if(!r){let o=e.egress&&typeof e.egress.port=="number"&&e.egress.port>0?e.egress.port:null,s=o?void 0:e.egress&&"reason"in e.egress&&e.egress.reason||"egress proxy not started";return{shell:"sandboxed",policy:e.policy,runtime:e.runtime,network:o?"public":"domain-list",...s?{networkReason:s}:{},settings:J0({folders:t,sandbox:!0,domains:e.domains,egressProxyPort:o,sensitiveFiles:e.sensitiveFiles,sensitiveScanComplete:e.sensitiveScanComplete}),note:o?`${Y0} ${Z8}`:`${Y0} ${e5}`}}let n=J0({folders:t,sandbox:!1,domains:e.domains});return e.policy==="best_effort"?{shell:"unconfined",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:r5}:{shell:"disabled",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:t5}}function Ek(e=process.env,t={},r={}){let n=r.runtime??xk(),o=r.startupFailure===void 0?Ck():r.startupFailure,s=_k(e,t),i=n.available?o??void 0:n.reason,a=i?s==="best_effort"?"unconfined":"disabled":"sandboxed",l=r.egress??G0(),c=a!=="sandboxed"?{}:l.status==="failed"?{network:"domain-list",networkReason:l.reason}:{network:"public"};return{policy:s,runtime:n.kind,available:n.available&&!o,shell:a,...i?{reason:i}:{},...c}}var F8,K8,$8,Jd,qd,js,H8,j8,ao,q8,q0,Q0,X8,Q8,Y0,Z8,e5,t5,r5,Yd=p(()=>{"use strict";wk();F8="KYNVER_CHAT_FOLDER_SANDBOX",K8="KYNVER_CHAT_FOLDER_SANDBOX_DOMAINS";$8=["registry.npmjs.org","*.npmjs.org","registry.yarnpkg.com","*.pnpm.io","pypi.org","*.pypi.org","files.pythonhosted.org","github.com","*.github.com","*.githubusercontent.com","gitlab.com","*.gitlab.com","bitbucket.org","crates.io","*.crates.io","static.crates.io","index.crates.io","proxy.golang.org","sum.golang.org","storage.googleapis.com","rubygems.org","*.rubygems.org","repo1.maven.org","*.maven.org","*.gradle.org","api.nuget.org","*.nuget.org","registry-1.docker.io","*.docker.io","*.docker.com","ghcr.io","deb.debian.org","*.debian.org","*.ubuntu.com","*.alpinelinux.org","*.fedoraproject.org","huggingface.co","*.huggingface.co","*.hf.co","nodejs.org","*.nodejs.org","deno.land","bun.sh","*.rustup.rs","sh.rustup.rs","go.dev","*.golang.org"];Jd=[".ssh","private",".private",".config",".aws",".railway",".gnupg",".kube",".docker",".azure",".terraform.d",".1password",".password-store",".local/share/keyrings",".claude",".codex",".cursor",".gemini",".antigravity",".kynver/credentials.d",".kynver/site-logins","Library/Keychains","Library/Application Support","Library/Cookies",".mozilla"],qd=[".netrc",".npmrc",".pypirc",".git-credentials",".bash_history",".zsh_history",".python_history",".bashrc",".bash_profile",".profile",".zshrc",".zshenv",".zprofile",".claude.json",".vault-token",".m2/settings.xml",".gradle/gradle.properties",".cache/huggingface/token",".kynver/credentials",".kynver/credentials.json",".kynver/chat-box-credential",".kynver/config.json"],js=[".env",".env.*","*.env",".envrc","credentials","credentials.json","*credentials*.json","*service-account*.json","*service_account*.json","*.pem","*.p12","*.pfx","id_rsa","id_rsa.*","id_ed25519","id_ed25519.*","id_ecdsa","id_ecdsa.*"],H8=[".nvm",".npm",".cache",".local/bin",".local/lib",".local/share",".local/state",".cargo",".rustup",".pyenv",".rbenv",".bun",".deno",".volta",".fnm",".sdkman",".yarn",".pnpm-store",".conda","miniconda3","anaconda3",".gem",".m2",".gradle",".nuget",".dotnet",".go","go",".gitconfig"],j8=["/home","/root","/Users","/mnt","/media","/Volumes"];ao=3128,q8=new RegExp([`failed to connect to (?:localhost|127\\.0\\.0\\.1|::1|\\[::1\\]) port ${ao}\\b`,`(?:localhost|127\\.0\\.0\\.1|\\[::1\\]|::1):${ao}\\b[^\\n]{0,80}?(?:connection refused|econnrefused)`,`(?:connection refused|econnrefused)[^\\n]{0,80}?(?:localhost|127\\.0\\.0\\.1|::1):${ao}\\b`,`(?:cannot|could not|unable to) connect to proxy[^\\n]{0,80}?${ao}\\b`,`proxyerror[^\\n]{0,120}?${ao}\\b`].join("|"),"i");q0=null;Q0=null;X8=/sandbox/i,Q8=/unavailable|not available|not supported|unsupported|bubblewrap|bwrap|socat|failIfUnavailable|seccomp|could not (?:be )?(?:start|initiali[sz]e)|failed to (?:start|initiali[sz]e)/i;Y0="Your shell and file tools are confined to the chosen folder(s) this turn: other folders, dotfiles, ~/.ssh, ~/private, ~/.config, credential and .env files are not readable, writes stay in the folder, and the environment carries no secrets. Work inside the folder; if something is refused, say so.",Z8="The folder limits files, not the internet: shell downloads (curl, wget, pip, npm, git \u2026) reach any public website through the sandbox's HTTP proxy. Only private, loopback, link-local and cloud-metadata addresses are refused (a 403 'Kynver folder sandbox' from the proxy says so). The sandbox's proxy bridge takes a moment to start in each new shell command: curl and wget here already retry a refused connection; in Python or other clients, retry a connection refused on localhost:3128 a few times (or `sleep 1` first). If a command still fails with 'Failed to connect to localhost port 3128', retry the command once; if it fails the same way again, the sandbox network proxy is not running on this computer: say exactly that. Never report such a failure as a blocked website or ask the user to allow a host.",e5="Shell network this turn is limited to package registries and code hosts (the computer's sandbox egress proxy is not running); fetch other websites with WebFetch, and say so when a shell download is refused.",t5="Shell commands are OFF this turn: this computer cannot confine them to the chosen folder, so only the file tools are available (reads and edits inside the folder). If the job needs commands, tell the user: on Linux/WSL2 install bubblewrap and socat, or choose full computer access in Kynver's Computers settings. Never claim to have run a command.",r5="Shell commands are NOT confined to the chosen folder on this computer (folder sandbox set to best-effort). Treat the folder boundary as a rule you follow yourself: do not read or change anything outside the chosen folder(s), and never look for credentials elsewhere on the computer."});function s5(e){let t=e[yf];return new Set(t?t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean):[])}function Ak(e,t={}){return o5.has(e)||t.operatorAllow?.has(e)||e===Ik?!1:n5.some(r=>r.test(e))}function Yt(e=process.env){let t=di(e);for(let n of Pk)delete t[n];let r=s5(e);for(let n of Object.keys(t))Ak(n,{operatorAllow:r})&&delete t[n];return t[Ik]="1",t}function rD(e){let t=e.toUpperCase();return c5.has(t)||t===Ik?!0:a5.has(t)?!Ak(t):l5.some(r=>t.startsWith(r))?!Ak(t)&&!/(_KEY|_TOKEN|_SECRET|_PASSWORD)$/i.test(t):!1}function u5(e=process.env){let t={};for(let[n,o]of Object.entries(e))typeof o=="string"&&rD(n)&&(t[n]=o);let r=Yt(t);for(let n of Object.keys(r))rD(n)||delete r[n];return r}function nD(e,t){return t==="folder"||t==="folders"?u5(e):Yt(e)}function Ok(){return[`--disallowedTools=${d5.join(",")}`]}var Pk,Ik,n5,o5,i5,a5,l5,c5,d5,lo=p(()=>{"use strict";pi();Pk=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_CHAT_BOX_TOKEN","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN","KYNVER_WORKER_API_KEY","KYNVER_GEMINI_API_KEY","KYNVER_OPENAI_API_KEY"],Ik="KYNVER_CHAT_CHILD",n5=[/_URL$/i,/SECRET/i,/CREDENTIAL/i,/DATABASE/i,/ACCESS_KEY/i,/PASSWORD|PASSWD|_PWD$|^PGPASS/i,/_DSN$/i,/CONNECTION_STRING|CONN_STR/i,/PRIVATE_KEY/i,/SERVICE_ACCOUNT/i,/AUTHTOKEN|_AUTH$/i,/_API_KEY_|APIKEY/i],o5=new Set(hf);i5=["PATH","HOME","USER","LOGNAME","SHELL","PWD","TMPDIR","TMP","TEMP","TZ","LANG","LANGUAGE","TERM","COLORTERM","NO_COLOR","FORCE_COLOR","HTTP_PROXY","HTTPS_PROXY","NO_PROXY","ALL_PROXY","SSL_CERT_FILE","SSL_CERT_DIR","NODE_EXTRA_CA_CERTS","REQUESTS_CA_BUNDLE","CURL_CA_BUNDLE","XDG_CACHE_HOME","XDG_DATA_HOME","NVM_DIR","NVM_BIN","NVM_INC","VOLTA_HOME","FNM_DIR","N_PREFIX","PNPM_HOME","BUN_INSTALL","DENO_INSTALL","PYENV_ROOT","VIRTUAL_ENV","CONDA_PREFIX","PYTHONIOENCODING","GOPATH","GOROOT","CARGO_HOME","RUSTUP_HOME","JAVA_HOME","DOTNET_ROOT","HOMEBREW_PREFIX","HOMEBREW_CELLAR","HOMEBREW_REPOSITORY","AWS_REGION","AWS_DEFAULT_REGION","AWS_PROFILE","GOOGLE_CLOUD_PROJECT","CLOUD_ML_REGION","SYSTEMROOT","WINDIR","SYSTEMDRIVE","COMSPEC","PATHEXT","USERPROFILE","HOMEDRIVE","HOMEPATH","USERNAME","APPDATA","LOCALAPPDATA","PROGRAMDATA","PROGRAMFILES","PROGRAMFILES(X86)","PROGRAMW6432","COMMONPROGRAMFILES","COMMONPROGRAMFILES(X86)","ALLUSERSPROFILE","PUBLIC","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE","OS"],a5=new Set(i5.map(e=>e.toUpperCase())),l5=["LC_","CLAUDE_CODE_","CLAUDE_","ANTHROPIC_","DISABLE_","MAX_THINKING_","BASH_DEFAULT_","BASH_MAX_"],c5=new Set(["CLAUDE_CODE_OAUTH_TOKEN"]);d5=["Read(~/.kynver/credentials)","Read(~/.kynver/credentials.*)","Read(~/.kynver/chat-box-credential)","Read(~/.kynver/site-logins/**)"]});import{spawn as p5}from"node:child_process";async function oD(e=process.env,t={}){let r=t.now??(()=>new Date),n="KYNVER_API_KEY",o={...e,[n]:e[n]??"canary-not-a-real-key"},s=Yt(o),i=new Set([...Pk,...gf]);return new Promise(a=>{let l="",c=!1,u=m=>{c||(c=!0,clearTimeout(f),a({...m,at:r().toISOString()}))},d;try{d=p5(t.execPath??process.execPath,["-e",f5],z({env:s,stdio:["ignore","pipe","ignore"]}))}catch(m){u({ok:!1,leaked:[],error:m instanceof Error?m.message:String(m)});return}let f=setTimeout(()=>{d.kill("SIGKILL"),u({ok:!1,leaked:[],error:"self-test timed out"})},t.timeoutMs??1e4);d.stdout?.on("data",m=>{l+=m.toString("utf8")}),d.on("error",m=>u({ok:!1,leaked:[],error:m.message})),d.on("close",()=>{let m;try{m=JSON.parse(l)}catch{u({ok:!1,leaked:[],error:"self-test child printed no env listing"});return}let g=Array.isArray(m)?m.filter(h=>typeof h=="string"&&i.has(h)).sort():[];u({ok:g.length===0,leaked:g})})})}var f5,sD=p(()=>{"use strict";M();lo();pi();f5="process.stdout.write(JSON.stringify(Object.keys(process.env)))"});import{existsSync as m5,mkdirSync as g5,readFileSync as h5,writeFileSync as y5}from"node:fs";import{homedir as k5}from"node:os";import Tk from"node:path";function Nk(e=k5()){return Tk.join(e,b5)}function iD(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function v5(e){return typeof e.access!="string"?null:{access:e.access,folders:iD(e.folders),source:e.source??"default",signed:e.signed===!0,at:typeof e.at=="string"?e.at:""}}function R5(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;if(typeof r.access=="string")return{access:r.access,folders:iD(r.folders),changedAt:typeof r.changedAt=="string"?r.changedAt:"",nonce:typeof r.nonce=="string"?r.nonce:"",at:typeof r.at=="string"?r.at:""}}return t&&t.source==="website"?{access:t.access,folders:[...t.folders],changedAt:t.at,nonce:"",at:t.at}:null}function zd(e=Nk()){try{if(!m5(e))return{applied:null,website:null};let t=JSON.parse(h5(e,"utf8"));if(!t||typeof t!="object")return{applied:null,website:null};let r=v5(t);return{applied:r,website:R5(t.website,r)}}catch{return{applied:null,website:null}}}function aD(e,t){try{g5(Tk.dirname(e),{recursive:!0});let r={...t.applied??{},...t.website?{website:t.website}:{}};y5(e,`${JSON.stringify(r,null,2)}
200
- `,{mode:384})}catch{}}function w5(e,t){return e?e.access===t.access&&e.source===t.source&&e.folders.length===t.folders.length&&e.folders.every((r,n)=>r===t.folders[n]):!1}function lD(e,t={signed:!1}){let r=t.file??Nk(),n=t.now??(()=>new Date),o={access:e.access,folders:[...e.folders],source:e.source,signed:t.signed,at:n().toISOString()},s=zd(r);return w5(s.applied,o)?null:(aD(r,{applied:o,website:s.website}),{from:s.applied,to:o})}function cD(e,t={}){let r=t.file??Nk(),n=t.now??(()=>new Date),o=zd(r),s={access:e.access,folders:[...e.folders],changedAt:e.changedAt,nonce:e.nonce,at:n().toISOString()},i=o.website;return i&&i.access===s.access&&i.changedAt===s.changedAt&&i.nonce===s.nonce&&i.folders.length===s.folders.length&&i.folders.every((l,c)=>l===s.folders[c])?i:(aD(r,{applied:o.applied,website:s}),s)}function Xa(e){switch(e){case"off":return"off";case"folder":return"one folder";case"folders":return"chosen folders";case"full":return"full computer";default:return String(e)}}var b5,uD=p(()=>{"use strict";b5=Tk.join(".kynver","chat-access-state.json")});import{verify as S5,createPublicKey as _5}from"node:crypto";function E5(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||r.kind!=="chat-access-change"||typeof r.agentOsId!="string"||!r.agentOsId||typeof r.boxId!="string"||!r.boxId||typeof r.access!="string"||!r.access||!Array.isArray(r.folders)||!r.folders.every(n=>typeof n=="string")||typeof r.changedAt!="string"||Number.isNaN(Date.parse(r.changedAt))||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function dD(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[x5]??null}function A5(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function P5(e,t){let r=Date.parse(e),n=Date.parse(t);return Number.isNaN(r)?!1:Number.isNaN(n)?!0:r>n}function Dk(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3);if(e==null)return{ok:!1,code:"missing",reason:"the turn carries no signed settings-change record for this raise"};if(!E5(e))return{ok:!1,code:"malformed",reason:"malformed settings-change record"};let{payload:s}=e;if(s.agentOsId!==t.agentOsId)return{ok:!1,code:"mismatch",reason:"settings-change record is for another workspace"};if(s.boxId!==t.boxId)return{ok:!1,code:"mismatch",reason:"settings-change record is for another computer"};if(s.access!==t.access||!A5(s.folders,t.folders))return{ok:!1,code:"mismatch",reason:"settings-change record does not match the access the turn asks for"};if(s.exp<=o)return{ok:!1,code:"expired",reason:"settings-change record expired \u2014 save the setting again in Computers settings"};let i=Tn(e.publicKeyId,n);if(!i)return{ok:!1,code:"no_verification_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let a;try{a=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,code:"bad_signature",reason:"signature is not base64url"}}if(a.length!==64)return{ok:!1,code:"bad_signature",reason:"signature is not a 64-byte Ed25519 signature"};let l=!1;try{let u=Buffer.from(nt(s),"utf8"),d=_5({key:Buffer.concat([C5,Buffer.from(i)]),format:"der",type:"spki"});l=S5(null,u,d,a)}catch(u){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${u.message}`}}if(!l)return{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"};let c=r.lastApplied??null;return c&&(c.nonce===s.nonce||!P5(s.changedAt,c.changedAt))?{ok:!1,code:"replayed",reason:"settings-change record is not newer than the one this computer last applied"}:{ok:!0,payload:s}}var ZTe,x5,C5,pD=p(()=>{"use strict";Hr();Li();ZTe=720*60*60,x5="change",C5=Buffer.from("302a300506032b6570032100","hex")});function fD(e){switch(e){case"off":return 0;case"folder":case"folders":return 1;case"full":return 2;default:return 0}}function I5(e,t){let r=fD(e.access),n=fD(t.access);if(r!==n)return r>n;if(r!==1)return!1;let o=new Set(_n(t.folders));return _n(e.folders).some(s=>!o.has(s))}function O5(e,t){if(!e||!e.byBox||typeof e.byBox!="object"||!Object.prototype.hasOwnProperty.call(e.byBox,t))return null;let r=e.byBox[t];if(!r||typeof r!="object")return null;let n=Go(r.access);if(!n)return null;let o=r.folders,s=Array.isArray(o)?o.filter(i=>typeof i=="string"):[];return{level:{access:n,folders:s},change:dD(r)}}function gD(e){let t=O5(e.signedAccess,e.boxId);if(!t)return{ok:!0,website:null,raised:!1};let r=Go(e.local.chatComputerAccess);if(r==="off")return{ok:!0,website:null,raised:!1};let n=[];e.state.website&&n.push({access:e.state.website.access,folders:e.state.website.folders}),n.push(r?{access:r,folders:_n(e.local.chatWorkFolders)}:{access:Rc(e.engine),folders:[]});let o=n.every(c=>I5(t.level,c)),s=(e.now??(()=>new Date))().toISOString(),i=e.state.website;if(!o){let c=t.change!==null?Dk(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:mD(i)}):null;return{ok:!0,raised:!1,website:{access:t.level.access,folders:[...t.level.folders],changedAt:c?.ok?c.payload.changedAt:i?.changedAt??"",nonce:c?.ok?c.payload.nonce:i?.nonce??"",at:s}}}let a=Dk(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:mD(i)}),l=i?.access??r??Rc(e.engine);return a.ok?{ok:!0,raised:!0,website:{access:t.level.access,folders:[...t.level.folders],changedAt:a.payload.changedAt,nonce:a.payload.nonce,at:s}}:{ok:!1,code:"access_raise",detail:a.code,reason:a.reason,from:l,to:t.level.access}}function mD(e){return!e||!e.changedAt&&!e.nonce?null:{changedAt:e.changedAt,nonce:e.nonce}}var hD=p(()=>{"use strict";pD();xn()});function T5(e){let r=e.chatProvider?.trim()||e.workerProvider?.trim()||"";return je(r)}function co(e,t=process.env){return T5(e)!=="gemini"?"http":vs(ht(t))==="antigravity"?"antigravity":"http"}var Xd=p(()=>{"use strict";qn();Oi()});import{spawnSync as vD}from"node:child_process";import{existsSync as N5,readFileSync as D5}from"node:fs";import{homedir as M5,platform as L5}from"node:os";import yD from"node:path";function Qd(e,t,r=process.env){return e==="cursor"?"cursor":e==="codex"?"codex":e==="gemini"?co(t,r)==="antigravity"?"antigravity":"none":e==="anthropic"?"claude-code":"none"}function B5(e,t){return e==="cursor"?$n(t):e==="codex"?t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||xr():e==="antigravity"?ht(t):e==="claude-code"?t.KYNVER_CLAUDE_BIN?.trim()||t.CLAUDE_BIN?.trim()||"claude":null}function Zd(e,t=process.env,r=Date.now()){let n=B5(e,t);if(!n)return null;let o=kD.get(n);if(o&&r-o.at<RD)return o.version;let s=null;try{let[i,a]=ae(n,["--version"]),l=vD(i,a,z({encoding:"utf8",timeout:5e3})),c=`${l.stdout??""} ${l.stderr??""}`;s=l.status===0?c.match(W5)?.[0]??null:null}catch{s=null}return kD.set(n,{at:r,version:s}),s}function ep(e=process.env,t={}){if(e.ANTHROPIC_API_KEY?.trim())return!0;let r=t.home??M5(),n=t.now??Date.now(),o=bD.get(r);if(o&&n-o.at<RD)return o.signedIn;let s=U5(yD.join(e.CLAUDE_CONFIG_DIR?.trim()||yD.join(r,".claude"),".credentials.json"));return!s&&(t.os??L5())==="darwin"&&(s=(t.keychain??F5)()),bD.set(r,{at:n,signedIn:s}),s}function U5(e){if(!N5(e))return!1;try{let t=JSON.parse(D5(e,"utf8")).claudeAiOauth,r=n=>typeof n=="string"&&n.length>0;return!!t&&(r(t.refreshToken)||r(t.accessToken))}catch{return!1}}function F5(){try{return vD("security",["find-generic-password","-s","Claude Code-credentials"],{stdio:"ignore",timeout:5e3}).status===0}catch{return!1}}var W5,RD,kD,bD,Qa=p(()=>{"use strict";Vn();ys();qn();qe();M();Xd();W5=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,RD=10*6e4,kD=new Map;bD=new Map});import{appendFileSync as K5,mkdirSync as $5}from"node:fs";import{homedir as H5}from"node:os";import Mk from"node:path";function Lk(e=H5()){return Mk.join(e,j5)}function Bk(e){let t=r=>r===void 0?void 0:r.length>wD?`${r.slice(0,wD)}\u2026`:r;return{...e,...e.command!==void 0?{command:t(e.command)}:{},...e.path!==void 0?{path:t(e.path)}:{}}}function Za(e,t=Lk()){try{return $5(Mk.dirname(t),{recursive:!0}),K5(t,`${JSON.stringify(Bk(e))}
201
- `,{encoding:"utf8",mode:384}),!0}catch(r){return console.error(JSON.stringify({event:"chat_command_log_write_failed",error:r instanceof Error?r.message:String(r)})),!1}}var j5,wD,tp=p(()=>{"use strict";j5=Mk.join(".kynver","logs","chat-commands.jsonl"),wD=2e3});var ln,rp=p(()=>{"use strict";ln=class{constructor(t,r=150){this.flushFn=t;this.floorMs=r}flushFn;floorMs;buffer="";timer=null;closed=!1;push(t){this.closed||!t||(this.buffer+=t,this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.flushNow()},this.floorMs)))}flushNow(){if(!this.buffer)return;let t=this.buffer;this.buffer="",this.flushFn(t)}flush(){this.closed||(this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}close(){this.closed||(this.closed=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}}});var uo,Wk=p(()=>{"use strict";uo=class{pending=new Set;track(t){let r=t.finally(()=>{this.pending.delete(r)});return this.pending.add(r),r}async drain(){this.pending.size!==0&&await Promise.allSettled([...this.pending])}}});function SD(e){if(!Array.isArray(e)||e.length===0||e.some(n=>typeof n!="string"))return{ok:!1,mutating:!1,reason:"argv must be a non-empty string array"};for(let n of e){if(Y5.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
202
- `)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let t=e[0],r=e.length>1&&!e[1].startsWith("--")?`${t} ${e[1]}`:t;if(t==="doctor"){let n=e[1]&&!e[1].startsWith("--")?e[1]:void 0;return n&&!z5.has(n)?{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}:{ok:!0,mutating:e.some(s=>s==="--remediate"||s==="--remediate-default-repo"||s.startsWith("--remediate="))}}return t==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:r==="update finish"?{ok:!1,mutating:!0,reason:J5}:r==="run dispatch"?{ok:!1,mutating:!0,reason:G5}:V5.has(r)?{ok:!0,mutating:!1}:q5.has(r)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}}var V5,G5,J5,q5,Y5,z5,_D=p(()=>{"use strict";V5=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list","update check","update status"]),G5="run dispatch is blocked from runtime_command \u2014 use agent_os_submit_action_intent with kind dispatch_workers (live dispatch requires Action Required approval)",J5='update finish is internal to `kynver update` \u2014 call ["update"] (confirmed) to update Kynver',q5=new Set(["run create","run sweep","worker start","worker stop","worker complete","cleanup","update"]),Y5=["--secret","--api-key","--keeper-child"],z5=new Set(["runner-install","node-runtime","local-store","context-envelope","runtime-takeover"])});import{spawn as X5}from"node:child_process";function e9(e,t,r,n=process.env){let o=gS(r,{agentOsId:e,argv:t},n);return o.ok?null:`command authorization proof invalid: ${o.reason}`}async function CD(e,t,r={}){if(r.agentOsId){let a=e9(r.agentOsId,e,r.authProof,r.env??process.env);if(a)return{exitCode:null,timedOut:!1,refused:a}}else return{exitCode:null,timedOut:!1,refused:"command authorization proof required (missing agentOsId)"};let n=SD(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=r.cliEntry??process.argv[1],s=r.timeoutMs??Q5,i=new ln(t);return new Promise(a=>{let l=0,c=!1,u=X5(process.execPath,[o,...e],z({stdio:["ignore","pipe","pipe"],env:process.env})),d=m=>{if(l>=xD)return;let g=m.toString("utf8").slice(0,xD-l);l+=g.length,i.push(g)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,Ze(u,"SIGTERM"),setTimeout(()=>Ze(u,"SIGKILL"),Z5).unref()},s);u.on("error",m=>{clearTimeout(f),i.push(`spawn failed: ${m.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",m=>{clearTimeout(f),i.close(),a({exitCode:m,timedOut:c})})})}var Q5,Z5,xD,ED=p(()=>{"use strict";M();rp();_D();Li();Q5=10*6e4,Z5=5e3,xD=2e5});function AD(e=process.env){return e.KYNVER_OPENAI_DEFAULT_MODEL?.trim()||t9}var t9,MNe,PD=p(()=>{"use strict";ma();_u();$t();t9="gpt-5.5",MNe=600*1e3});function po(e){let t=e.chatProvider?.trim();return Vs(t||e.workerProvider?.trim()||"cursor")}function Vs(e){let t=je(e);return t==="cursor"||t==="agent"?"cursor":o9.has(t)?"gemini":ID.has(t)||ID.has(e.trim().toLowerCase())?"codex":OD.has(t)||OD.has(e.trim().toLowerCase())?"openai":(n9.has(t),"anthropic")}function Gs(e,t,r=process.env){let n=r.KYNVER_CHAT_MODEL?.trim();if(n){if(e==="cursor"){let s=hs(n,el);return s.ok?s.model:el}if(e==="gemini"&&!Uk.test(n)&&!Fk.test(n)||(e==="openai"||e==="codex")&&!Uk.test(n)&&!TD.test(n)||e==="anthropic")return n}let o=t.defaultModel?.trim();if(e==="cursor"){if(o&&!Uk.test(o)){let s=hs(o,el);return s.ok?s.model:el}return el}return e==="gemini"?o&&TD.test(o)?o:Ke(r):e==="codex"?o&&Fk.test(o)?o:r.KYNVER_CODEX_DEFAULT_MODEL?.trim()||r9:e==="openai"?o&&Fk.test(o)?o:AD(r):o||"claude-sonnet-4-6"}var el,r9,n9,o9,ID,OD,Uk,TD,Fk,tl=p(()=>{"use strict";Bn();$t();ga();PD();el="composer-2.5",r9="gpt-5.5",n9=new Set(["claude","anthropic","opus"]),o9=new Set(["gemini","gemini-api"]),ID=new Set(["codex","chatgpt","gpt"]),OD=new Set(["openai","openai-compatible","openai-api","openai_api"]);Uk=/^(?:claude[-_]|opus\b|sonnet\b|haiku\b)/i,TD=/^(?:gemini[-_]|flash\b|pro\b)/i,Fk=/^(?:gpt-|o\d|chatgpt-)/i});function rl(e){let t=new Set;for(let r of e.matchAll(/^\s*(\S+\.so[\w.]*)\s*=>\s*not found/gm))t.add(r[1]);for(let r of e.matchAll(/error while loading shared libraries:\s*(\S+?\.so[\w.]*)\s*:/g))t.add(r[1]);return[...t].sort()}function i9(e){return{apt:e.t64?1:0,dnf:2,zypper:3,pacman:4,apk:5,unknown:null}[e.family]}function a9(e,t){let r=i9(t);if(r===null)return[];let n=new Set;for(let o of e){let s=s9.find(([i])=>i.test(o));s&&n.add(s[1][r])}return[...n].sort()}function l9(e,t){if(e.length===0)return null;switch(t.family){case"apt":return["apt-get","install","-y","--no-install-recommends",...e];case"dnf":return["dnf","install","-y",...e];case"zypper":return["zypper","--non-interactive","install",...e];case"pacman":return["pacman","-S","--noconfirm","--needed",...e];case"apk":return["apk","add",...e];default:return null}}function ND(e,t){let r=a9(e,t),n=l9(r,t),o=t.family==="apt"?"sudo apt-get update && ":"";return n?`The browser needs system libraries this computer is missing. Run: ${o}sudo ${n.join(" ")} \u2014 or \`kynver browser install --deps\` if you have passwordless sudo.`:`The browser needs system libraries this computer is missing (${e.join(", ")}). Install them with your distribution's package manager, then try again.`}var s9,np=p(()=>{"use strict";s9=[[/^lib(nss3|nssutil3|smime3|ssl3)\.so/,["libnss3","libnss3","nss","mozilla-nss","nss","nss"]],[/^libnspr4\.so/,["libnspr4","libnspr4","nspr","mozilla-nspr","nspr","nspr"]],[/^libatk-1\.0\.so/,["libatk1.0-0","libatk1.0-0t64","atk","libatk-1_0-0","at-spi2-core","at-spi2-core"]],[/^libatk-bridge-2\.0\.so/,["libatk-bridge2.0-0","libatk-bridge2.0-0t64","at-spi2-atk","libatk-bridge-2_0-0","at-spi2-core","at-spi2-core"]],[/^libatspi\.so/,["libatspi2.0-0","libatspi2.0-0t64","at-spi2-core","libatspi0","at-spi2-core","at-spi2-core"]],[/^libcups\.so/,["libcups2","libcups2t64","cups-libs","libcups2","libcups","cups-libs"]],[/^libdrm\.so/,["libdrm2","libdrm2","libdrm","libdrm2","libdrm","libdrm"]],[/^libgbm\.so/,["libgbm1","libgbm1","mesa-libgbm","libgbm1","mesa","mesa-gbm"]],[/^libxkbcommon\.so/,["libxkbcommon0","libxkbcommon0","libxkbcommon","libxkbcommon0","libxkbcommon","libxkbcommon"]],[/^libXcomposite\.so/,["libxcomposite1","libxcomposite1","libXcomposite","libXcomposite1","libxcomposite","libxcomposite"]],[/^libXdamage\.so/,["libxdamage1","libxdamage1","libXdamage","libXdamage1","libxdamage","libxdamage"]],[/^libXfixes\.so/,["libxfixes3","libxfixes3","libXfixes","libXfixes3","libxfixes","libxfixes"]],[/^libXrandr\.so/,["libxrandr2","libxrandr2","libXrandr","libXrandr2","libxrandr","libxrandr"]],[/^libXext\.so/,["libxext6","libxext6","libXext","libXext6","libxext","libxext"]],[/^libX11\.so/,["libx11-6","libx11-6","libX11","libX11-6","libx11","libx11"]],[/^libxcb\.so/,["libxcb1","libxcb1","libxcb","libxcb1","libxcb","libxcb"]],[/^libpango-1\.0\.so/,["libpango-1.0-0","libpango-1.0-0","pango","libpango-1_0-0","pango","pango"]],[/^libcairo\.so/,["libcairo2","libcairo2","cairo","libcairo2","cairo","cairo"]],[/^libasound\.so/,["libasound2","libasound2t64","alsa-lib","libasound2","alsa-lib","alsa-lib"]],[/^libgtk-3\.so/,["libgtk-3-0","libgtk-3-0t64","gtk3","libgtk-3-0","gtk3","gtk+3.0"]],[/^lib(glib|gio|gobject)-2\.0\.so/,["libglib2.0-0","libglib2.0-0t64","glib2","libglib-2_0-0","glib2","glib"]],[/^libdbus-1\.so/,["libdbus-1-3","libdbus-1-3","dbus-libs","libdbus-1-3","dbus","dbus-libs"]],[/^libexpat\.so/,["libexpat1","libexpat1","expat","libexpat1","expat","expat"]],[/^libudev\.so/,["libudev1","libudev1","systemd-libs","libudev1","systemd-libs","eudev-libs"]]]});import{spawnSync as c9}from"node:child_process";function d9(e){return/(\d+\.\d+\.\d+\.\d+)/.exec(e)?.[1]??null}function p9(e,t=process.platform,r=u9){let n=new Set;if(t==="linux"){let s=r("ldd",[e],{encoding:"utf8",timeout:1e4});if(!s.error)for(let i of rl(`${s.stdout??""}
203
- ${s.stderr??""}`))n.add(i)}let o=null;if(t!=="win32"){let s=r(e,["--version"],{encoding:"utf8",timeout:1e4}),i=`${s.stdout??""}
204
- ${s.stderr??""}`;for(let a of rl(i))n.add(a);s.status===0&&(o=d9(i))}return{version:o,missingLibs:[...n].sort()}}function DD(e,t=()=>p9(e),r=Date.now){let n=Kk.get(e);if(n&&r()-n.at<f9)return n.health;let o=t();return Kk.set(e,{at:r(),health:o}),o}function MD(){Kk.clear()}var u9,f9,Kk,$k=p(()=>{"use strict";np();u9=(e,t,r)=>c9(e,t,r);f9=10*6e4,Kk=new Map});import{existsSync as m9,readFileSync as LD}from"node:fs";function Js(e,t){return e==="linux"?t==="x64"?"linux64":null:e==="darwin"?t==="arm64"?"mac-arm64":"mac-x64":e==="win32"?t==="ia32"?"win32":"win64":null}function BD(e,t){try{return e(t)}catch{return""}}function nl(e=process.env,t=process.platform,r={}){if(t!=="linux")return!1;if(e.WSL_DISTRO_NAME?.trim()||e.WSL_INTEROP?.trim())return!0;let n=r.readFile??(o=>LD(o,"utf8"));return/microsoft|wsl/i.test(BD(n,"/proc/version"))}function g9(e=process.env,t=process.platform,r={}){if(t!=="linux")return{available:!0,wslg:!1};let n=r.exists??m9,o=nl(e,t,r)&&n("/mnt/wslg");return{available:!!(e.DISPLAY?.trim()||e.WAYLAND_DISPLAY?.trim()),wslg:o}}function op(e=process.env,t=process.platform){return/^(1|true|yes|on)$/i.test(e.KYNVER_BROWSER_HEADLESS??"")?!0:!g9(e,t).available}function h9(e){let t={};for(let l of e.split(/\r?\n/)){let c=/^([A-Z_]+)=(.*)$/.exec(l.trim());c&&(t[c[1]]=c[2].replace(/^["']|["']$/g,""))}let r=(t.ID??"").toLowerCase(),n=`${r} ${(t.ID_LIKE??"").toLowerCase()}`,o=t.VERSION_ID??"",s="unknown";/\b(debian|ubuntu)\b/.test(n)?s="apt":/\b(fedora|rhel|centos)\b/.test(n)?s="dnf":/\b(suse|opensuse)\b/.test(n)?s="zypper":/\barch\b/.test(n)?s="pacman":/\balpine\b/.test(n)&&(s="apk");let i=Number.parseFloat(o),a=s==="apt"&&(r==="ubuntu"&&Number.isFinite(i)&&i>=24||r==="debian"&&Number.isFinite(i)&&i>=13);return{id:r,versionId:o,family:s,t64:a}}function WD(e={}){let t=e.readFile??(r=>LD(r,"utf8"));return h9(BD(t,"/etc/os-release"))}var fo=p(()=>{"use strict"});import{existsSync as y9,readdirSync as k9}from"node:fs";import{homedir as b9}from"node:os";import mo from"node:path";function sp(e=process.env){return e.KYNVER_BROWSER_INSTALL_DIR?.trim()||mo.join(b9(),".kynver","browsers")}function UD(e,t=process.env){return mo.join(sp(t),`chrome-${e}`)}function ip(e,t){let r=mo.join(e,`chrome-${t}`);return t==="linux64"?mo.join(r,"chrome"):t==="win32"||t==="win64"?mo.join(r,"chrome.exe"):mo.join(r,"Google Chrome for Testing.app","Contents","MacOS","Google Chrome for Testing")}function v9(e,t){let r=e.split(".").map(o=>Number.parseInt(o,10)||0),n=t.split(".").map(o=>Number.parseInt(o,10)||0);for(let o=0;o<Math.max(r.length,n.length);o+=1){let s=(r[o]??0)-(n[o]??0);if(s!==0)return s}return 0}function ap(e,t=process.env,r={}){let n=r.exists??y9,o=r.listDir??(l=>k9(l)),s=sp(t),i;try{i=o(s)}catch{return null}let a=i.map(l=>/^chrome-(\d+(?:\.\d+){1,3})$/.exec(l)?.[1]).filter(l=>!!l).sort(v9).reverse();for(let l of a){let c=mo.join(s,`chrome-${l}`),u=ip(c,e);if(n(u))return{executable:u,version:l,installDir:c}}return null}var Hk=p(()=>{"use strict"});import{existsSync as R9,readdirSync as w9}from"node:fs";import{homedir as S9}from"node:os";import Dr from"node:path";function _9(e,t,r=S9()){return e==="win32"?[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA].filter(o=>typeof o=="string"&&o.length>0).flatMap(o=>[Dr.join(o,"Google","Chrome","Application","chrome.exe"),Dr.join(o,"Microsoft","Edge","Application","msedge.exe"),Dr.join(o,"Chromium","Application","chrome.exe")]):e==="darwin"?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",Dr.join(r,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),Dr.join(r,"Applications/Chromium.app/Contents/MacOS/Chromium")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome","/usr/bin/chromium","/usr/bin/chromium-browser","/usr/lib/chromium/chromium","/snap/bin/chromium","/usr/bin/microsoft-edge","/usr/bin/microsoft-edge-stable","/opt/microsoft/msedge/msedge","/var/lib/flatpak/exports/bin/com.google.Chrome","/var/lib/flatpak/exports/bin/org.chromium.Chromium",Dr.join(r,".local/share/flatpak/exports/bin/com.google.Chrome"),Dr.join(r,".local/share/flatpak/exports/bin/org.chromium.Chromium"),...FD.map(n=>Dr.join(r,".local/bin",n))]}function x9(e,t,r){let n=(e.PATH??"").split(":").filter(o=>o&&!(r&&o.startsWith("/mnt/")));for(let o of FD)for(let s of n){let i=Dr.join(s,o);if(t(i))return i}return null}function go(e={}){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.exists??R9,s=e.config??P(),i=null,a=t.KYNVER_BROWSER_CHROME_PATH?.trim()||s.browserChromePath?.trim()||"";if(a){if(o(a))return{executable:a,source:"configured",version:null,configuredMissing:i};i=a}let l=_9(r,t,e.home).find(u=>o(u));if(l)return{executable:l,source:"system",version:null,configuredMissing:i};if(r==="linux"){let u=x9(t,o,nl(t,r,{readFile:e.readFile}));if(u)return{executable:u,source:"system",version:null,configuredMissing:i}}let c=Js(r,n);if(c){let u=s.browserManaged;if(u?.executable&&u.platform===c&&o(u.executable))return{executable:u.executable,source:"managed",version:u.version??null,configuredMissing:i};let d=ap(c,t,{exists:o,listDir:e.listDir??(f=>w9(f))});if(d)return{executable:d.executable,source:"managed",version:d.version,configuredMissing:i}}return{executable:null,source:"none",version:null,configuredMissing:i}}var FD,ol=p(()=>{"use strict";$();fo();Hk();FD=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","microsoft-edge-stable"]});import{createWriteStream as C9}from"node:fs";import{rm as E9}from"node:fs/promises";function I9(e,t){let r=e?.channels?.Stable;if(!r||typeof r.version!="string"||!/^\d+(\.\d+){1,3}$/.test(r.version))return null;let n=Array.isArray(r.downloads?.chrome)?r.downloads.chrome:[];for(let o of n){let s=o;if(s.platform===t&&typeof s.url=="string"&&s.url.startsWith($D))return{version:r.version,url:s.url}}return null}async function HD(e,t=fetch){let r=await t(A9,{signal:AbortSignal.timeout(2e4)});if(!r.ok)throw new Error(`Chrome for Testing index returned HTTP ${r.status}`);let n=I9(await r.json(),e);if(!n)throw new Error(`No stable Chrome for Testing build is published for ${e}`);return n}async function jD(e,t,r={}){let n=r.minBytes??P9;if(!e.startsWith($D))throw new Error("refusing to download from an unexpected host");let s=await(r.fetchFn??fetch)(e,{signal:AbortSignal.timeout(r.timeoutMs??15*6e4)});if(!s.ok||!s.body)throw new Error(`browser download returned HTTP ${s.status}`);let i=s.headers.get("content-length"),a=i?Number.parseInt(i,10):null;if(a!==null&&(a<n||a>KD))throw new Error(`browser download has an unexpected size (${a} bytes)`);let l=C9(t),c=0;try{let u=s.body.getReader();for(;;){let{done:d,value:f}=await u.read();if(d)break;if(c+=f.byteLength,c>KD)throw new Error("browser download is larger than expected");l.write(f)||await new Promise(m=>l.once("drain",()=>m())),r.onProgress?.({receivedBytes:c,totalBytes:a})}if(await new Promise((d,f)=>l.end(m=>m?f(m):d())),a!==null&&c!==a)throw new Error(`browser download was cut short (${c} of ${a} bytes)`);if(c<n)throw new Error(`browser download is too small (${c} bytes)`);return c}catch(u){throw l.destroy(),await E9(t,{force:!0}).catch(()=>{}),u}}var A9,$D,P9,KD,VD=p(()=>{"use strict";A9="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json",$D="https://storage.googleapis.com/chrome-for-testing-public/",P9=20*1024*1024,KD=600*1024*1024});import{chmodSync as O9,mkdirSync as jk,symlinkSync as T9,writeFileSync as N9}from"node:fs";import qs from"node:path";import{crc32 as D9,inflateRawSync as M9}from"node:zlib";function U9(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(e.readUInt32LE(r)===L9)return r;throw new Error("not a zip archive (no end-of-central-directory record)")}function F9(e){let t=U9(e),r=e.readUInt16LE(t+10),n=e.readUInt32LE(t+16);if(r===65535||n===4294967295)throw new Error("zip64 archives are not supported");let o=[],s=n;for(let i=0;i<r;i+=1){if(s+46>e.length||e.readUInt32LE(s)!==B9)throw new Error("corrupt zip central directory");let a=e.readUInt16LE(s+4)>>8,l=e.readUInt16LE(s+28),c=e.readUInt16LE(s+30),u=e.readUInt16LE(s+32),d=e.readUInt32LE(s+38);o.push({name:e.subarray(s+46,s+46+l).toString("utf8"),method:e.readUInt16LE(s+10),crc:e.readUInt32LE(s+16),compressedSize:e.readUInt32LE(s+20),size:e.readUInt32LE(s+24),localHeaderOffset:e.readUInt32LE(s+42),unixMode:a===3?d>>>16&65535:null}),s+=46+l+c+u}return o}function K9(e,t){let r=t.localHeaderOffset;if(e.readUInt32LE(r)!==W9)throw new Error(`corrupt zip entry ${t.name}`);let n=r+30+e.readUInt16LE(r+26)+e.readUInt16LE(r+28),o=e.subarray(n,n+t.compressedSize),s;if(t.method===0)s=Buffer.from(o);else if(t.method===8)s=M9(o);else throw new Error(`unsupported zip compression method ${t.method} (${t.name})`);if(s.length!==t.size||D9(s)>>>0!==t.crc>>>0)throw new Error(`zip entry failed its integrity check: ${t.name}`);return s}function GD(e,t){let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-zA-Z]:/.test(r))throw new Error(`unsafe zip path: ${t}`);let n=qs.resolve(e,r),o=qs.resolve(e);if(n!==o&&!n.startsWith(o+qs.sep))throw new Error(`unsafe zip path: ${t}`);return n}function JD(e,t,r=process.platform){jk(t,{recursive:!0});let n=0;for(let o of F9(e)){let s=GD(t,o.name);if(o.name.endsWith("/")){jk(s,{recursive:!0});continue}jk(qs.dirname(s),{recursive:!0});let i=K9(e,o);if(o.unixMode!==null&&(o.unixMode&$9)===H9&&r!=="win32"){let a=i.toString("utf8");GD(t,qs.posix.join(qs.posix.dirname(o.name.replace(/\\/g,"/")),a)),T9(a,s)}else N9(s,i),o.unixMode!==null&&r!=="win32"&&O9(s,o.unixMode&511||420);n+=1}return n}var L9,B9,W9,$9,H9,qD=p(()=>{"use strict";L9=101010256,B9=33639248,W9=67324752;$9=61440,H9=40960});import{closeSync as YD,existsSync as Vk,mkdirSync as j9,openSync as zD,readFileSync as V9,renameSync as G9,rmSync as Ys,statSync as J9,chmodSync as q9}from"node:fs";import Gk from"node:path";function ho(){return{...Mt}}function ZD(e=Mt){return e.state!=="failed"||e.failedAt===null?0:e.failedAt+XD[Math.min(e.attempts-1,XD.length-1)]}function eM(e=Mt){return e.totalBytes&&e.totalBytes>0?`${Math.min(99,Math.floor(e.receivedBytes/e.totalBytes*100))}% of ${Math.round(e.totalBytes/1024/1024)} MB`:e.receivedBytes>0?`${Math.round(e.receivedBytes/1024/1024)} MB so far`:"starting"}function z9(e){let t=P();We({...t,browserManaged:{version:e.version,platform:e.platform,executable:e.executable,installedAt:new Date().toISOString()}})}function X9(e,t){JD(V9(e),t)}function Q9(e,t){try{return YD(zD(e,"wx")),!0}catch{try{if(t-J9(e).mtimeMs>Y9)return Ys(e,{force:!0}),YD(zD(e,"wx")),!0}catch{}return!1}}async function Z9(e,t){let r=t.env??process.env,n=t.now??Date.now,o=t.sleep??(a=>new Promise(l=>setTimeout(l,a))),s=sp(r);j9(s,{recursive:!0});let i=Gk.join(s,".install.lock");for(;!Q9(i,n());)if(await o(2e3),!Vk(i)){let a=ap(e,r);if(a)return a}try{let a=await HD(e,t.fetchFn),l=UD(a.version,r),c=ip(l,e);if(!Vk(c)){let d=Gk.join(s,`.download-${a.version}.zip`),f=Gk.join(s,`.staging-${a.version}-${process.pid}`);Ys(f,{recursive:!0,force:!0});try{await jD(a.url,d,{fetchFn:t.fetchFn,minBytes:t.minArchiveBytes,onProgress:g=>{Mt.receivedBytes=g.receivedBytes,Mt.totalBytes=g.totalBytes}}),(t.extract??X9)(d,f);let m=ip(f,e);if(!Vk(m))throw new Error("the downloaded browser archive did not contain Chrome");(t.platform??process.platform)!=="win32"&&q9(m,493),Ys(l,{recursive:!0,force:!0}),G9(f,l)}finally{Ys(d,{force:!0}),Ys(f,{recursive:!0,force:!0})}}let u={executable:c,version:a.version,installDir:l};return(t.record??z9)({...u,platform:e}),u}finally{Ys(i,{force:!0})}}function lp(e={}){if(sl)return sl;let t=Js(e.platform??process.platform,e.arch??process.arch);if(!t)return Promise.reject(new zs("Google doesn't publish a ready-made Chrome for this kind of computer (Linux on ARM). Install Chromium with your package manager (for example `sudo apt-get install chromium`), then try again.","unsupported_platform"));let r=e.now??Date.now;return Mt={...Mt,state:"downloading",receivedBytes:0,totalBytes:null,error:null},sl=Z9(t,e).then(n=>(Mt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},MD(),n)).catch(n=>{let o=n instanceof Error?n.message:String(n);throw Mt={...Mt,state:"failed",error:o.slice(0,300),failedAt:r(),attempts:Mt.attempts+1},new zs(`Couldn't download a browser for this computer: ${o.slice(0,200)}`,"download_failed")}).finally(()=>{sl=null}),sl}var QD,Y9,XD,zs,Mt,sl,cp=p(()=>{"use strict";$();fo();VD();$k();Hk();qD();QD=150,Y9=30*6e4,XD=[6e4,5*6e4,30*6e4,120*6e4],zs=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserProvisionError"}code},Mt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},sl=null});function Jk(e){return e7.test(e)}function tM(e=process.platform,t=typeof process.getuid=="function"?process.getuid():null){return e==="linux"&&t===0}function up(e){rM=e}function nM(){return rM}var e7,rM,qk=p(()=>{"use strict";e7=/Running as root without --no-sandbox|No usable sandbox|setuid sandbox|SUID sandbox helper|Failed to move to new namespace|sandbox_host_linux|credentials\.cc.*(EPERM|Operation not permitted)/i;rM=null});function oM(e=process.env,t={}){let r=t.platform??process.platform,n=P(),o={executable:null,source:"none",version:null,configuredMissing:null};try{o=(t.resolve??(()=>go({env:e,platform:r,config:n})))()}catch{}let s={version:null,missingLibs:[]};if(o.executable)try{s=(t.health??(i=>DD(i)))(o.executable)}catch{}return{supported:!0,chromeFound:o.executable!==null,localDisabled:n.browserDisabled===!0,browserSource:o.source,browserVersion:o.version??s.version,provisioning:ho().state,missingLibs:s.missingLibs,wsl:nl(e,r),headless:op(e,r),autoProvision:n.browserAutoProvision!==!1,sandbox:nM()}}var sM=p(()=>{"use strict";$();$k();fo();ol();cp();qk()});function dp(e,t,r,n,o,s,i){return{chatProvider:e,toolCalls:e==="anthropic"||e==="cursor"||e==="gemini"||e==="openai"||e==="codex",runtimePackageVersion:Ge,browser:oM(),deliveryReceipt:!0,...t?{chatModels:t}:{},...r?{computer:r}:{},...n?{security:n}:{},...o?{agentEngines:o}:{},...s?{packageVersions:s}:{},...i?{selfUpdate:i}:{}}}var iM=p(()=>{"use strict";Vr();sM()});import{readFileSync as t7}from"node:fs";import{homedir as r7,platform as n7}from"node:os";import o7 from"node:path";import{execFileSync as s7}from"node:child_process";function aM(e,t=Date.now()){try{let r=JSON.parse(e),n=r.claudeAiOauth?.accessToken,o=r.claudeAiOauth?.expiresAt;return typeof n!="string"||!n||typeof o=="number"&&o-t<6e4?null:n}catch{return null}}function i7(){if(n7()==="darwin")try{let e=s7("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return aM(e.trim())}catch{return null}try{let e=t7(o7.join(r7(),".claude",".credentials.json"),"utf8");return aM(e)}catch{return null}}function il(e=process.env,t={}){let r=e.ANTHROPIC_API_KEY?.trim();if(r)return{kind:"api_key",key:r};let n=e.KYNVER_CHAT_USE_CLAUDE_OAUTH;if(t.oauthOptIn===!0||n==="1"||n==="true"||n==="yes"){let s=i7();if(s)return{kind:"oauth",token:s}}return null}var Yk=p(()=>{"use strict"});import{existsSync as lM}from"node:fs";import{homedir as a7}from"node:os";import al from"node:path";import{spawnSync as l7}from"node:child_process";function c7(e){if(al.isAbsolute(e)||e.includes("/")||e.includes("\\"))return lM(e);try{let t=l7(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function u7(e=process.env){let t=a7(),r=[],n=e.CODEX_HOME?.trim();return n&&r.push(al.join(al.resolve(n),"auth.json")),r.push(al.join(t,".codex","auth.json")),r.push(al.join(t,".config","codex","auth.json")),r}function cM(e){return`${e.error}: ${e.detail}`}function fp(e=process.env){let t=e.KYNVER_CODEX_BIN?.trim()||e.CODEX_BIN?.trim()||xr();return c7(t)?e.CODEX_API_KEY?.trim()?{ok:!0,creds:{codexBin:t,authSource:"api_key_env"}}:u7(e).find(n=>lM(n))?{ok:!0,creds:{codexBin:t,authSource:"oauth_local"}}:{ok:!1,error:zk,detail:"Run `codex login` on this computer, or set CODEX_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:pp,detail:"`codex` CLI not found. Install the Codex CLI (https://developers.openai.com/codex/) and keep it on PATH."}}var pp,zk,mp=p(()=>{"use strict";Vn();pp="codex_cli_unavailable",zk="codex_not_logged_in"});import{spawnSync as d7}from"node:child_process";function f7(e,t,r){return p7.test(`${t}
205
- ${r}`)?!1:e===0}function uM(e,t=process.env){try{let[r,n]=ae(e,["models"]),o=d7(r,n,{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...t,CI:"1",NO_COLOR:"1"}}),s=o.stdout??"",i=o.stderr??"";return o.error&&o.error.code==="ENOENT"?{ok:!1,note:"agy models: binary missing"}:f7(o.status,s,i)?{ok:!0,note:"agy models: signed in"}:{ok:!1,note:"agy models: not signed in"}}catch(r){return{ok:!1,note:r instanceof Error?r.message:"agy models probe failed"}}}var p7,dM=p(()=>{"use strict";qe();p7=/authentication required|not logged in|you are not logged|not authenticated/i});import{existsSync as m7,readFileSync as g7}from"node:fs";import{homedir as h7}from"node:os";import pM from"node:path";import{spawnSync as y7}from"node:child_process";function k7(e){if(pM.isAbsolute(e)||e.includes("/")||e.includes("\\"))return m7(e);try{let t=y7(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function b7(){return pM.join(h7(),".gemini","antigravity-cli","settings.json")}function v7(e){if(!e?.trim())return null;try{let t=JSON.parse(e);return typeof t.modelProvider=="string"?t.modelProvider.trim().toLowerCase():null}catch{return null}}function R7(){try{return g7(b7(),"utf8")}catch{return null}}function w7(e,t){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()?v7(t)==="gemini":!1}function fM(e){return`${e.error}: ${e.detail}`}function yp(e=process.env,t={}){let r=ht(e);if(!(t.commandOnPath??k7)(r))return{ok:!1,error:gp,detail:"`agy` not found. Install Google Antigravity (https://antigravity.google/docs/cli/install) and keep `agy` on PATH."};if((t.probeAuth??uM)(r,e).ok)return{ok:!0,creds:{bin:r,authSource:"keyring"}};let s=(t.readSettings??(()=>R7()))(e);return w7(e,s)?{ok:!0,creds:{bin:r,authSource:"api_key_settings"}}:{ok:!1,error:hp,detail:'Run `agy` once on this computer to sign in. A Gemini API key does not sign Google Antigravity in unless ~/.gemini/antigravity-cli/settings.json sets "modelProvider" to "gemini". Website chat will not fall back to hosted models.'}}var gp,hp,kp=p(()=>{"use strict";qn();dM();gp="antigravity_cli_unavailable",hp="antigravity_not_logged_in"});function ll(e=process.env){let t=e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim();if(!t)return null;let r=(e.KYNVER_GEMINI_BASE_URL?.trim()||S7).replace(/\/+$/,"");return{apiKey:t,baseUrl:r,label:"gemini"}}function cl(e=process.env){let t=e.KYNVER_OPENAI_API_KEY?.trim()||e.OPENAI_API_KEY?.trim();if(t){let o=(e.KYNVER_OPENAI_BASE_URL?.trim()||e.OPENAI_BASE_URL?.trim()||_7).replace(/\/+$/,"");return{apiKey:t,baseUrl:o,label:"openai"}}let r=e.KYNVER_WORKER_BASE_URL?.trim(),n=e.KYNVER_WORKER_API_KEY?.trim();return r&&n?{apiKey:n,baseUrl:r.replace(/\/+$/,""),label:"openai"}:null}var S7,_7,Xk=p(()=>{"use strict";S7="https://generativelanguage.googleapis.com/v1beta/openai",_7="https://api.openai.com/v1"});function C7(e,t=process.env){return{anthropic:()=>{let r=il(t,{oauthOptIn:e.chatUseClaudeOauth===!0});return r?r.kind==="oauth"?"subscription":"api_key":null},codex:()=>{let r=fp(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},cursor:()=>{let r=yu(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},gemini:()=>{let r=t;if(co({chatProvider:e.chatProvider,workerProvider:e.workerProvider},r)==="antigravity"){let n=yp(r);return n.ok?n.creds.authSource==="api_key_settings"?"api_key":"subscription":null}return ll(t)?"api_key":null},openai:()=>cl(t)?"api_key":null}}function E7(e){if(!e?.trim())return[];let t=[];for(let r of e.split(/[\s,]+/)){let n=r.indexOf(":");if(n<=0)continue;let o=r.slice(n+1).trim();!o||o.length>80||t.push({provider:Vs(r.slice(0,n)),model:o})}return t}function Qk(e,t){let r=t?.trim();r&&!e.includes(r)&&e.push(r)}function A7(e,t,r=process.env){let n=po(e),o=E7(r.KYNVER_CHAT_EXTRA_MODELS),s=[];for(let i of Zk){let a=null;try{a=t[i]()}catch{a=null}if(!a)continue;let l=i===n?Gs(i,e,r):Gs(i,{},{...r,KYNVER_CHAT_MODEL:void 0}),c=[];Qk(c,l);for(let u of x7[i])Qk(c,u);for(let u of o)u.provider===i&&Qk(c,u.model);s.push({provider:i,models:c,defaultModel:l,auth:a})}return s.sort((i,a)=>i.provider===n?-1:a.provider===n?1:0)}function bp(e,t=process.env,r=Date.now()){let n=JSON.stringify([e.chatProvider,e.workerProvider,e.defaultModel,e.chatUseClaudeOauth,t.KYNVER_CHAT_MODEL,t.KYNVER_CHAT_EXTRA_MODELS]);if(ul&&ul.key===n&&r-ul.at<P7)return ul.value;let o=A7(e,C7(e,t),t);return ul={key:n,at:r,value:o},o}var Zk,x7,P7,ul,eb=p(()=>{"use strict";Yk();mp();ks();kp();Xd();Xk();tl();Zk=["anthropic","codex","openai","gemini","cursor"],x7={anthropic:["claude-sonnet-4-6","claude-opus-4-8","claude-opus-4-7","claude-haiku-4-5-20251001"],codex:["gpt-5.5","gpt-5.4","o4-mini"],openai:["gpt-5.5","gpt-5.4","gpt-4o-mini"],gemini:["gemini-2.5-pro","gemini-2.5-flash"],cursor:["composer-2.5"]};P7=6e4,ul=null});function dl(e){if(typeof e=="string"){let n=e.indexOf(":");return n<=0?null:dl({provider:e.slice(0,n),model:e.slice(n+1)})}if(!e||typeof e!="object")return null;let t=e;if(typeof t.provider!="string"||typeof t.model!="string")return null;let r=t.model.trim();return!r||r.length>80||!/^[\w.:@/-]+$/.test(r)?null:{provider:Vs(t.provider),model:r}}function gM(e){let{requested:t,catalog:r,primary:n}=e;if(!t)return{provider:n.provider,model:n.model,requested:null,fallbackReason:null};let o=r.find(s=>s.provider===t.provider);return o&&o.models.includes(t.model)?{provider:t.provider,model:t.model,requested:null,fallbackReason:null}:{provider:n.provider,model:n.model,requested:t,fallbackReason:"model_unavailable"}}function hM(e,t){for(let r of Zk){if(t.includes(r))continue;let n=e.find(o=>o.provider===r);if(n)return{provider:r,model:n.defaultModel}}return null}function yM(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return t?I7.some(r=>r.test(t)):!1}function mM(e){return O7[e]}function kM(e,t){if(!e.fallbackReason)return null;let r=t??e.requested,n=r?`${r.provider}:${r.model}`:"auto";return`${e.fallbackReason}:${n}->${e.provider}:${e.model}`}function bM(e,t){let r=`${mM(e.provider)} (${e.model})`;if(e.fallbackReason==="usage_limit")return`${t?mM(t.provider):"Your usual model"} has reached its usage limit on your computer, so this answer comes from ${r} instead.`;if(e.fallbackReason==="model_unavailable"){let n=t??e.requested;return`${n?`${n.model}`:"The model chosen in Settings"} isn't available on your computer right now, so this answer uses Auto: ${r}. You can pick another model in Settings.`}return null}var I7,O7,tb=p(()=>{"use strict";eb();tl();I7=[/usage limit/i,/limit (?:has been )?reached/i,/hit your (?:usage )?limit/i,/rate_limit_error/i,/quota (?:exceeded|exhausted)/i,/insufficient_quota/i,/HTTP 429\b/];O7={anthropic:"Claude",codex:"ChatGPT",openai:"ChatGPT",gemini:"Gemini",cursor:"Cursor"}});function RM(e){if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.type!="string"||!T7.has(t.type)||t.type==="text"&&(typeof t.text!="string"||!t.text.trim()))}function vM(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.content=="string")return t.content.trim()?{...t,content:[{type:"text",text:t.content,cache_control:pl}]}:null;if(!Array.isArray(t.content)||t.content.length===0)return null;let r=t.content[t.content.length-1];return RM(r)?{...t,content:[...t.content.slice(0,-1),{...r,cache_control:pl}]}:null}function N7(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function D7(e){for(let t=e.length-1;t>=0;t-=1){let r=e[t];if(!(!r||typeof r!="object"||r.role!=="user")&&!N7(r.content))return t}return-1}function rb(e){return JSON.stringify(e??null).includes('"cache_control"')}function wM(e){if(rb(e.system)||rb(e.tools)||rb(e.messages))return e;let t=e.tools;if(Array.isArray(t)&&t.length>0){let i=e.toolBreakpointName?t.findIndex(c=>!!c&&typeof c=="object"&&c.name===e.toolBreakpointName):-1,a=i>=0?i:t.length-1,l=t[a];l&&typeof l=="object"&&(t=[...t.slice(0,a),{...l,cache_control:pl},...t.slice(a+1)])}let r=e.system;if(typeof r=="string")r.trim()&&(r=[{type:"text",text:r,cache_control:pl}]);else if(Array.isArray(r)&&r.length>0){let i=r[r.length-1];RM(i)&&(r=[...r.slice(0,-1),{...i,cache_control:pl}])}let n=[...e.messages],o=-1;for(let i=n.length-1;i>=0;i-=1){let a=vM(n[i]);if(a){n[i]=a,o=i;break}}let s=D7(n)-1;if(s>=0&&s<o)for(let i=s;i>=0;i-=1){let a=vM(n[i]);if(a){n[i]=a;break}}return{system:r,tools:t,messages:n}}var pl,T7,SM=p(()=>{"use strict";pl={type:"ephemeral"},T7=new Set(["text","image","document","tool_use","tool_result","search_result","server_tool_use","web_search_tool_result","web_fetch_tool_result","code_execution_tool_result"])});function _M(e){if(!e||typeof e!="object")return null;let t=e,r=i=>typeof i=="number"&&Number.isFinite(i)&&i>=0?Math.floor(i):null,n=r(t.stepsUsed),o=r(t.maxSteps),s=r(t.segment);return typeof t.jobId!="string"||!t.jobId||n===null||o===null||o===0?null:{jobId:t.jobId.slice(0,64),stepsUsed:n,maxSteps:o,segment:s??1}}function L7(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0}}function B7(e,t){let r=t;switch(r.type){case"message_start":return e.inputTokens=r.message?.usage?.input_tokens??0,e.cacheReadTokens=r.message?.usage?.cache_read_input_tokens??0,e.cacheCreationTokens=r.message?.usage?.cache_creation_input_tokens??0,"";case"content_block_start":{let n=r.index??e.blocks.length;return e.blocks[n]={type:r.content_block?.type==="tool_use"?"tool_use":"text",text:"",id:r.content_block?.id,name:r.content_block?.name,inputJson:""},""}case"content_block_delta":{let n=e.blocks[r.index??e.blocks.length-1];return n?r.delta?.type==="text_delta"&&r.delta.text?(n.text+=r.delta.text,r.delta.text):(r.delta?.type==="input_json_delta"&&r.delta.partial_json&&(n.inputJson+=r.delta.partial_json),""):""}case"message_delta":return r.delta?.stop_reason&&(e.stopReason=r.delta.stop_reason),typeof r.usage?.output_tokens=="number"&&(e.outputTokens=r.usage.output_tokens),"";default:return""}}function W7(e){let t=[];for(let r of e.blocks)if(r)if(r.type==="tool_use"){let n={};try{n=r.inputJson?JSON.parse(r.inputJson):{}}catch{n={}}t.push({type:"tool_use",id:r.id??"",name:r.name??"",input:n})}else r.text&&t.push({type:"text",text:r.text});return{content:t,stop_reason:e.stopReason??"end_turn",usage:{input_tokens:e.inputTokens,output_tokens:e.outputTokens,cache_read_input_tokens:e.cacheReadTokens,cache_creation_input_tokens:e.cacheCreationTokens}}}async function*U7(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await t.read();if(o)break;n+=r.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
206
- `))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{t.releaseLock()}}function F7(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function xM(e){let{creds:t,model:r,payload:n}=e,o={"Content-Type":"application/json","anthropic-version":"2023-06-01"},s=n.system;t.kind==="api_key"?o["x-api-key"]=t.key:(o.Authorization=`Bearer ${t.token}`,o["anthropic-beta"]="oauth-2025-04-20",s=[{type:"text",text:M7},{type:"text",text:n.system}]);let i=wM({system:s,tools:Array.isArray(n.tools)&&n.tools.length>0?n.tools:void 0,messages:n.messages,toolBreakpointName:typeof n.cacheToolName=="string"?n.cacheToolName:void 0}),a=await fetch(`${F7()}/v1/messages`,{method:"POST",headers:o,signal:e.signal,body:JSON.stringify({model:r,max_tokens:n.maxTokens,system:i.system,messages:i.messages,...i.tools?{tools:i.tools}:{},...n.temperature!==void 0?{temperature:n.temperature}:{},stream:!0})});if(!a.ok||!a.body){let c=await a.text().catch(()=>"");throw new Error(`Anthropic stream failed: HTTP ${a.status}${c?` \u2014 ${c.slice(0,300)}`:""}`)}let l=L7();for await(let c of U7(a.body)){let u=B7(l,c);u&&e.onDelta(u)}return W7(l)}var M7,nb=p(()=>{"use strict";SM();M7="You are Claude Code, Anthropic's official CLI for Claude."});function Xt(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let n=r;typeof n.name!="string"||!n.name.trim()||t.push({name:n.name.trim(),description:typeof n.description=="string"?n.description:"",inputSchema:n.input_schema??{}})}return t}function $7(e){let t=e.replace(/\s+/g," ").trim();return t.length>CM?`${t.slice(0,CM-1)}\u2026`:t}function AM(e,t=K7){if(e.length===0)return"";let r=["Kynver server tools:","","You can call the tools listed below. They run on the Kynver server, not on this machine.","To call one, reply with a fenced block and nothing after it:","",cn,'{"name": "<tool name>", "input": { ... }}',"```","","Rules:","- Use a name from the list below verbatim. A name that is not on the list is ignored.","- `input` must be a JSON object matching that tool's schema.","- One block per reply. Stop after it; the result comes back on the next turn.","- Say what you are about to do in one short sentence before the block.","- If no tool is needed, just answer normally and emit no block.",`- ${vp}`,"","Tools:"].join(`
181
+ `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:r}:{}};return hT(Od.join(t,"evidence.json"),`${JSON.stringify(o,null,2)}
182
+ `),o}var RT=p(()=>{"use strict";_e();M()});import Td from"node:path";function pX(e){e.writeSalvageEvidence&&dX.has(e.skipReason)&&(Nr(e.indexed,e.now)||bT({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||vT({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function fX(e){let{indexed:t,worktreesAgeMs:r,terminalWorktreesAgeMs:n}=e;return t&&(Tr.has(t.run.status)||e.liveness&&Xy(t,e.liveness)||e.liveness&&We(zy(t,e.liveness))&&!Nr(t))?n:r}function mX(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:fX(e)}function gX(e,t){if(e.harnessRoot?.trim())return Td.resolve(e.harnessRoot);let r=t.worker.workerDir;if(!r)return null;let n=`${Td.sep}runs${Td.sep}`,o=r.indexOf(n);return o<0?null:r.slice(0,o+n.length-1)}function wT(e){let{indexed:t,includeOrphans:r,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!t)return r?s??null:"orphan_without_flag";let l=mX(e);if(n<=0&&!r&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Nr(t,a))return"active_worker";let c=zy(t,e.liveness),u=gX(e,t),d=g=>{if(u)try{pX({indexed:t,harnessRoot:u,skipReason:g,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return g};if(mT(t,c)){let g=d("completion_blocked");if(g)return g}if(Yy(t,e.liveness?.gitStatusCache)){let g=d("dirty_worktree");if(g)return g}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let g=d("pr_or_unmerged_commits");if(g)return g}if(fT(t,e.liveness,a)||!We(c))return"run_still_active";if(Xa(c)){let g=d("pr_or_unmerged_commits");if(g)return g}if(bt(c.changedFiles).length>0){let g=d("dirty_worktree");if(g)return g}if(Fo({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:ao(c.finalResult)}).blocked){let g=d("landing_blocked");if(g)return g}if(i&&e.worktreePath){let g=i({worktreePath:e.worktreePath,indexed:!!t,runId:t?.runId,worker:t?.workerName});if(g)return g.detail?{reason:g.reason,detail:g.detail}:g.reason}return null}function Zy(e){let{indexed:t,nodeModulesAgeMs:r,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<r?"below_age_threshold":i||s.has(Td.resolve(o))||t&&Nr(t)?"active_worker":t&&Yy(t,e.gitStatusCache)?"dirty_worktree":null}function ST(e){return Zy(e)}var dX,_T=p(()=>{"use strict";mc();Id();Ae();an();Qy();gT();RT();io();Qa();io();Qa();dX=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"])});var Nd=p(()=>{"use strict"});function CT(e,t){let r=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||r.length>=24||(n.add(l),r.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of t)xT.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||xT.has(s.skipReason)&&o(s.path,s.skipReason);return r}var xT,ET=p(()=>{"use strict";Nd();xT=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"])});import AT from"node:path";function yX(e,t){return Fs(e,t)}function IT(e,t=Date.now()){let r=new Set,n=new Set;for(let o of e){for(let s of Kc(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=$(AT.join(Hi(o,s.id),"workers",L(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=AT.resolve(l.worktreePath);yX(l,t)&&(i=!0,r.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of JO(o))n.add(s)}return{activeWorktreePaths:r,liveRunKeys:n}}function PT(e,t,r,n){return r?n.has(`${t}\0${r}`):!1}var ek=p(()=>{"use strict";Q();At();Ws();Pd();M()});import{existsSync as OT,readdirSync as TT,statSync as kX}from"node:fs";import NT from"node:path";function bX(e,t){try{let r=kX(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function vX(e,t){let r=NT.join(e,"runs",t,"run.json");return OT(r)?$(r,null):null}function DT(e){try{return TT(e).length===0}catch{return!1}}function MT(e){let{harnessRoot:t,runId:r,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(PT(n,t,r,i.liveRunKeys)||!DT(n))return"run_still_active";let a=vX(t,r);return a&&!Tr.has(a.status)&&!no(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function LT(e){if(!OT(e.worktreesDir))return[];let t=[],r;try{r=TT(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of r){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=NT.join(e.worktreesDir,o);DT(s)&&t.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:bX(s,e.now)})}return t}var BT=p(()=>{"use strict";ek();an();M()});import{execFileSync as RX}from"node:child_process";import{existsSync as UT,readdirSync as wX,statSync as SX}from"node:fs";import _X from"node:path";function CX(e,t=xX){if(!UT(e))return 0;try{let n=RX("du",["-sb",e],{encoding:"utf8",timeout:t,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function Dr(e,t=5e4){if(!UT(e))return 0;let r=CX(e);if(r!==null)return r;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=wX(i)}catch{continue}for(let l of a){if(o++>t)return null;let c=_X.join(i,l),u;try{u=SX(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}var xX,el=p(()=>{"use strict";xX=2500});import{lstatSync as EX,readdirSync as AX}from"node:fs";function WT(e){try{let t=EX(e),r=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=r!==null&&(t.uid!==r||n!==null&&t.gid!==n);return{uid:t.uid,gid:t.gid,foreign:o}}catch{return null}}function FT(e,t=32){let r=WT(e);if(!r)return!1;if(r.foreign)return!0;try{let n=AX(e),o=0;for(let s of n){if(o>=t)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=WT(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}var $T=p(()=>{"use strict"});import vt from"node:path";function KT(e,t,r,n){let o=vt.resolve(e),s=`${vt.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=vt.relative(r,i);if(a.startsWith("..")||vt.isAbsolute(a))return"path_outside_harness";let l=a.split(vt.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(vt.resolve(t))?"path_outside_harness":null}function Dd(e,t,r){return KT(e,t,r,"node_modules")}function Md(e,t,r){return KT(e,t,r,".next")}function Ld(e,t,r){let n=vt.resolve(e),o=vt.relative(r,n);return o.startsWith("..")||vt.isAbsolute(o)||o.split(vt.sep).length<3||!n.startsWith(vt.resolve(t))?"path_outside_harness":null}function HT(e,t,r){let n=vt.resolve(e);return Dd(n,t,r)===null||Md(n,t,r)===null||Ld(n,t,r)===null}var tk=p(()=>{"use strict"});import{spawnSync as IX}from"node:child_process";import jT from"node:path";function GT(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function VT(e){let t=IX("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:t.status===0,stderr:`${t.stderr??""}${t.stdout??""}`.trim()}}function JT(e,t,r){if(!HT(e,t,r))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=VT(["chown","-R",`${n}:${o}`,jT.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=VT(["rm","-rf",jT.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var rk,qT=p(()=>{"use strict";tk();rk="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help."});import{existsSync as PX,rmSync as OX}from"node:fs";function TX(e){let t=e?.code;return t==="EACCES"||t==="EPERM"}function YT(e,t,r={}){if(!PX(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?rs(n):null,i=e.bytes??Dr(e.path)??void 0,a=r.removePath??OX,l=r.hasForeignOwnedEntry??FT;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!TX(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=GT();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${rk}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=JT(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(g){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${g.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${rk}`}}}var zT=p(()=>{"use strict";el();At();$T();qT()});import{existsSync as nk,rmSync as XT}from"node:fs";function ok(e){let t=e.harnessRoot;return!t||!jO(e.path,t)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function sk(e,t){let r=ok(e);if(r)return r;let n=YT(e,t);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function QT(e,t){return sk(e,t)}function ZT(e,t){return sk(e,t)}function eN(e,t){return sk(e,t)}function tN(e,t){let r=ok(e);if(r)return r;if(!nk(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??Dr(e.path);return XT(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function rN(e,t){let r=ok(e);if(r)return r;if(!nk(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!t)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??Dr(e.path);return n&&ue(n,["worktree","remove","--force",e.path],{allowFailure:!0}),nk(e.path)&&XT(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}var nN=p(()=>{"use strict";_e();el();zT();Ws();tk()});import{existsSync as Bd,readdirSync as Ud,statSync as NX}from"node:fs";import qt from"node:path";function ik(e,t){try{let r=NX(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function sN(e,t){let r=qt.relative(t,e);return r===""||!r.startsWith("..")&&!qt.isAbsolute(r)}function oN(e,t,r,n){let o=[];for(let s of Jy){if(s===".next")continue;let i=qt.join(e,s);if(!Bd(i))continue;let a=qt.resolve(i);r.has(a)||sN(a,t.harnessRoot)&&(r.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:ik(a,t.now)}))}return o}function iN(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||t.push(...oN(n.worktreePath,e,r,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Bd(e.worktreesDir))return t;for(let n of Ud(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=qt.join(e.worktreesDir,n.name);for(let s of Ud(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=qt.join(o,s.name);t.push(...oN(i,e,r,{runId:n.name,worker:s.name}))}}return t}function aN(e){let t=e.worktreesAgeMs>0||e.includeOrphans,r=e.includeOrphans;if(!t&&!r)return[];let n=[],o=new Set;if(t)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Bd(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:ik(a,e.now)})))}if(!r||!Bd(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(qt.resolve(i.worktreePath));for(let i of Ud(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=qt.join(e.worktreesDir,i.name),l;try{l=Ud(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=qt.resolve(qt.join(a,c.name));o.has(u)||s.has(u)||sN(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:ik(u,e.now)}))}}return n}var lN=p(()=>{"use strict";qy()});import{existsSync as dN,readdirSync as cN,statSync as DX}from"node:fs";import $s from"node:path";function LX(e,t){try{let r=DX(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function BX(e,t){let r=$s.relative(t,e);return r===""||!r.startsWith("..")&&!$s.isAbsolute(r)}function UX(e,t,r,n,o,s){if(!dN(n))return;let i=$s.resolve(n);t.has(i)||BX(i,r.harnessRoot)&&(t.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:r.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:LX(i,r.now)}))}function uN(e,t,r,n,o){for(let s of MX)UX(e,t,r,$s.join(n,s.dirName),s.kind,o)}function pN(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||uN(t,r,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!dN(e.worktreesDir))return t;for(let n of cN(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=$s.join(e.worktreesDir,n.name),s;try{s=cN(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=$s.join(o,i.name);uN(t,r,e,a,{runId:n.name,worker:i.name})}}return t}var MX,fN=p(()=>{"use strict";MX=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}]});import{existsSync as mN,statSync as WX}from"node:fs";import Yt from"node:path";function FX(e,t){try{let r=WX(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function $X(e){let t=[],r=null;for(let n of e.split(`
183
+ `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){r&&t.push(r),r={path:i};continue}r&&(o==="branch"&&(r.branch=i),o==="HEAD"&&(r.head=i),o==="bare"&&(r.bare=!0))}return r&&t.push(r),t}function KX(e,t){let r=Yt.relative(Yt.resolve(t),Yt.resolve(e));return r!==""&&!r.startsWith("..")&&!Yt.isAbsolute(r)}function gN(e){if(!e.includeOrphans||!mN(e.worktreesDir))return[];let t=new Set;for(let s of e.index.values())s.run.repo&&t.add(Yt.resolve(s.run.repo));let r=new Set;for(let s of e.index.values())r.add(Yt.resolve(s.worktreePath));let n=[],o=new Set;for(let s of t){let i=0,a;try{a=ue(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=$X(a);for(let c of l){if(i>=HX)break;let u=Yt.resolve(c.path);if(u===Yt.resolve(s)||!KX(u,e.worktreesDir)||r.has(u)||o.has(u)||!mN(u))continue;let f=Yt.relative(e.worktreesDir,u).split(Yt.sep),m=f[0],g=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:g,repo:s,ageMs:FX(u,e.now)})}}return n}var HX,hN=p(()=>{"use strict";_e();HX=200});import tl from"node:path";function yN(e,t){let r=tl.resolve(t),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?tl.resolve(s.harnessRoot):null;i&&i!==r||n.set(o,s)}return n}function kN(e){let t=new Map;for(let r of Kc(e))for(let n of Object.keys(r.workers||{})){let o=tl.join(Hi(e,r.id),"workers",L(n),"worker.json"),s=$(o,void 0);s?.worktreePath&&t.set(tl.resolve(s.worktreePath),{harnessRoot:e,worktreePath:tl.resolve(s.worktreePath),runId:r.id,workerName:n,run:r,worker:s})}return t}var bN=p(()=>{"use strict";Q();M()});function rl(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function lo(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?n:t}function lk(e={}){let t=e.execute===!0||e.execute!==!1&&rl("KYNVER_CLEANUP_EXECUTE"),r=e.finalizeStaleRuns!==!1&&!rl("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??lo("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??lo("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??lo("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??lo("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??lo("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||rl("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=rl("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!rl("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=lo("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),g=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,h=lo("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),y=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):2e3);return{execute:t,finalizeStaleRuns:r,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:g,byteAccountingEntryCap:y}}function SN(e){let t=process.env.KYNVER_CLEANUP_SCOPE==="all",r=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=t?Number.isFinite(r)&&r>0?r:6048e5:Number.isFinite(r)&&r>0?r:0;return lk({runIdFilter:t?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:t?216e5:void 0,runDirectoriesAgeMs:t?36e5:void 0,includeOrphans:t?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}var _N=p(()=>{"use strict";Nd()});import{existsSync as ck,statSync as VX}from"node:fs";import co from"node:path";function GX(e,t){let r=co.relative(t,e);return r===""||!r.startsWith("..")&&!co.isAbsolute(r)}function JX(e,t,r){if(!ck(e))return!1;try{let n=t-VX(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function uk(e){if(!e.runId||!e.workerName)return!1;let t=e.now??Date.now(),r=e.heartbeatFreshMs??xN,n=co.resolve(e.harnessRoot,"runs"),o=co.resolve(n,e.runId,"workers",e.workerName);if(!GX(o,n))return!1;let s=$(co.join(o,"worker.json"),void 0);return s&&Fs(s,t,r)?!0:s?!1:JX(co.join(o,"heartbeat.jsonl"),t,r)}function CN(e){let t=e.now??Date.now(),r=e.heartbeatFreshMs??xN;if(!ck(e.worktreePath))return null;if(e.runId&&e.workerName&&uk(e))return"active_worker";let n=co.join(e.worktreePath,".git");if(!ck(n))return null;let o=re(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
184
+ `).map(c=>c.trim()).filter(c=>c.length>0);if(bt(s).length>0)return"dirty_worktree";let i=re(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=re(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}var xN,EN=p(()=>{"use strict";_e();io();Pd();M();xN=1800*1e3});import{existsSync as qX,readdirSync as AN,statSync as YX}from"node:fs";import zX from"node:path";function IN(e={}){let t=De(e.harnessRoot??ft()),r=rs(t),n=e.now??Date.now(),o=new Date(n).toISOString();if(!qX(r))return{harnessRoot:t,worktreesDir:r,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=AN(r,{withFileTypes:!0})}catch{return{harnessRoot:t,worktreesDir:r,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=zX.join(r,u.name);try{let f=YX(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of AN(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let m=Dr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:t,worktreesDir:r,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}var PN=p(()=>{"use strict";At();el()});import{existsSync as XX}from"node:fs";import{homedir as QX}from"node:os";import ON from"node:path";function dk(e,t,r){if(!r?.trim())return;let n=De(r.trim());e.has(n)||(e.add(n),t.push(n))}function e3(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function TN(e={}){let t=new Set,r=[];dk(t,r,e.harnessRoot??ft());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])dk(t,r,o);if(e3(e))for(let o of ZX){let s=ON.resolve(o);!t.has(s)&&XX(s)&&dk(t,r,s)}return r}var ZX,NN=p(()=>{"use strict";At();ZX=["/var/tmp/kynver-harness",ON.join(QX(),".openclaw","harness")]});function t3(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function r3(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function DN(e={}){let t=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",r=r3("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=$r({...e,diskPath:t,diskMaxUsedPercent:e.diskMaxUsedPercent??r}),o=!n.ok||n.usedPercent>=r,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:r}}function MN(e,t){if(!t.pressured)return e;let r=e.execute||!t3("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:r,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:t.diskGate}}var LN=p(()=>{"use strict";Ci();Nd()});import{unlinkSync as n3}from"node:fs";function Wd(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function BN(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function o3(e,t,r){return e.length===0?[]:r?[...e]:e.length<=t?[]:e.slice(t)}function UN(e={}){let t=e.execute===!0||Wd("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Wd("KYNVER_CLEANUP_EXECUTE"),r=e.purgeAll===!0||Wd("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??BN("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",r?0:1)),o=Lo({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:t,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=o3(o.dumps,n,r),i=[],a=[],l=0;for(let c of s){if(!t){a.push({path:c.path,reason:"dry_run"});continue}try{n3(c.path),i.push({path:c.path,bytes:c.bytes,name:c.name}),l+=c.bytes}catch(u){a.push({path:c.path,reason:u.message})}}return{observation:o,execute:t,keepNewest:n,removed:i,removedBytes:l,skipped:a}}function WN(e){return e?Wd("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>BN("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}var FN=p(()=>{"use strict";oc()});function Rt(e,t){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let r=t?`: ${t}`:"";console.error(`[kynver cleanup] ${e}${r}`)}var $N=p(()=>{"use strict"});var Fd,KN=p(()=>{"use strict";_e();Fd=class{aheadOfMain=new Map;countAheadOfMain(t,r="origin/main"){let n=`${t}\0${r}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=re(t,["rev-list","--count",`${r}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}}});import{spawnSync as s3}from"node:child_process";import{existsSync as i3}from"node:fs";import a3 from"node:path";function c3(e,t){if(!i3(a3.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let r=s3("git",t,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:l3}),n=r.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:r.status,stdout:r.stdout||"",stderr:r.stderr||"",error:n?"git_timeout":r.error?r.error.message:null}}catch(r){return{status:null,stdout:"",stderr:"",error:r.message}}}function HN(e){let t=c3(e,["status","--short"]);return t.error==="not_a_git_repo"?[]:t.error==="git_timeout"||t.status!==0?null:t.stdout.split(`
185
+ `).map(r=>r.trim()).filter(Boolean)}var l3,jN=p(()=>{"use strict";l3=5e3});var $d,VN=p(()=>{"use strict";jN();$d=class{cache=new Map;porcelain(t){let r=t,n=this.cache.get(r);if(n!==void 0)return n;let o=HN(r)??[];return this.cache.set(r,o),o}}});var Kd,GN=p(()=>{"use strict";an();Kd=class{cache=new Map;derive(t){let r=this.cache.get(t.id);if(r!==void 0)return r;let n=no(t);return this.cache.set(t.id,n),n}}});function u3(e){let t={};for(let r of e)t[r.kind]=(t[r.kind]??0)+1;return t}function JN(e,t={}){let r=t.maxSampleActions??12,n=t.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:u3(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,r).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}var qN=p(()=>{"use strict"});import wt from"node:path";function d3(e={}){let t=e.harnessRoot?De(e.harnessRoot):ft(),r=TN({harnessRoot:t}),n=e.now??Date.now();return{harnessRoot:t,scanRoots:r,now:n}}function p3(e){return typeof e=="string"?{reason:e}:e}function Ks(e,t,r,n){e.push({path:t,reason:r,...n?{detail:n}:{}})}function Hd(e,t,r){return!t||e.bytes!=null?e:{...e,bytes:Dr(e.path,r)}}function YN(e,t){let r={};for(let n of t)r[n.reason]=(r[n.reason]??0)+1;for(let n of e)n.skipReason&&(r[n.skipReason]=(r[n.skipReason]??0)+1);return r}function f3(e,t){return e.kind==="remove_next_cache"?ZT(e,t):QT(e,t)}function m3(e,t,r){return e.kind==="remove_next_cache"?Md(e.path,t,r):Dd(e.path,t,r)}function g3(e){let t=new Map;for(let r of e)for(let[n,o]of kN(r))t.set(n,o);return t}function zN(e,t){return e.runId&&e.worker?wt.join(t,e.runId,e.worker):wt.resolve(e.path,"..")}function XN(e){return e.indexed?!1:uk({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function h3(e={}){let t=lk(e),r=DN();t=MN(t,r);let n=d3(e);Rt("scan",`${n.scanRoots.length} harness root(s)`);let o=IT(n.scanRoots,n.now),s=t.finalizeStaleRuns?Ya().map(O=>({runId:O.runId,from:O.from,to:O.to})):[];s.length>0&&Rt("finalize",`${s.length} stale run(s) marked terminal`),Rt("index","building worktree index");let i=g3(n.scanRoots);Rt("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Kd,gitStatusCache:new $d,gitRevCache:new Fd},l=[],c=[],u=new Set,d=t.maxActionsPerSweep,f=()=>c.length>=d;for(let O of n.scanRoots){if(f())break;Rt("root",O);let T=wt.join(O,"worktrees"),U=yN(i,O),N={harnessRoot:O,worktreesDir:T,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter,index:U,now:n.now},J=t.scanDependencyCaches?pN(N):[];Rt("dependency",t.scanDependencyCaches?`${J.length} cache candidate(s) at ${O}`:"skipped (worktree-only sweep)");let F=0;for(let C of J){if(f())break;F+=1,F%50===0&&Rt("dependency",`${F}/${J.length} evaluated`);let P=wt.resolve(C.path);if(u.has(P))continue;u.add(P);let D={...C,path:P},ne=m3(D,O,T);if(ne){Ks(l,D.path,ne),c.push({...D,executed:!1,skipped:!0,skipReason:ne});continue}let V=zN(D,T),te=U.get(wt.resolve(V))??null,pe=XN({candidate:D,indexed:te,harnessRoot:O,now:n.now}),Y=Zy({indexed:te,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:V,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Y){Ks(l,D.path,Y),c.push({...D,executed:!1,skipped:!0,skipReason:Y});continue}c.push(f3(Hd(D,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(t.scanDependencyCaches)for(let C of iN(N)){if(f())break;let P=wt.resolve(C.path);if(u.has(P))continue;u.add(P);let D={...C,path:P},ne=Ld(D.path,O,T);if(ne){Ks(l,D.path,ne),c.push({...D,executed:!1,skipped:!0,skipReason:ne});continue}let V=zN(D,T),te=U.get(wt.resolve(V))??null,pe=XN({candidate:D,indexed:te,harnessRoot:O,now:n.now}),Y=ST({indexed:te,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:V,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Y){Ks(l,D.path,Y),c.push({...D,executed:!1,skipped:!0,skipReason:Y});continue}c.push(eN(Hd(D,t.accountBytes,t.byteAccountingEntryCap),t.execute))}let W=[...aN(N),...gN(N)];Rt("worktrees",`${W.length} candidate(s) at ${O}`);let x=new Set,G=0;for(let C of W){if(f())break;G+=1,G%50===0&&Rt("worktrees",`${G}/${W.length} evaluated`);let P=wt.resolve(C.path);if(x.has(P))continue;x.add(P);let D={...C,path:P},ne=U.get(wt.resolve(D.path))??null,V=ne?null:CN({worktreePath:D.path,harnessRoot:O,runId:D.runId,workerName:D.worker,now:n.now}),te=wT({indexed:ne,worktreePath:wt.resolve(D.path),includeOrphans:t.includeOrphans,worktreesAgeMs:t.worktreesAgeMs,terminalWorktreesAgeMs:t.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:V,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:O,writeSalvageEvidence:t.execute});if(te){let{reason:pe,detail:Y}=p3(te);Ks(l,D.path,pe,Y),c.push({...D,executed:!1,skipped:!0,skipReason:pe});continue}c.push(rN(Hd(D,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(!f()&&t.runDirectoriesAgeMs>=0)for(let C of LT({harnessRoot:O,worktreesDir:T,runDirectoriesAgeMs:t.runDirectoriesAgeMs,runIdFilter:t.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let P=wt.resolve(C.path);if(u.has(P))continue;u.add(P);let D={...C,path:P},ne=D.runId??wt.basename(P),V=MT({harnessRoot:O,runId:ne,runPath:P,ageMs:D.ageMs,runDirectoriesAgeMs:t.runDirectoriesAgeMs,activeGuards:o});if(V){Ks(l,D.path,V),c.push({...D,executed:!1,skipped:!0,skipReason:V});continue}c.push(tN(Hd(D,t.accountBytes,t.byteAccountingEntryCap),t.execute))}}let m=0,g=0,h=0,y=0,b=0,k=0;for(let O of c)O.bytes&&(m+=O.bytes),!O.skipped&&!O.executed&&O.bytes&&(h+=O.bytes),O.executed?(b+=1,y+=O.bytes??0,O.kind==="remove_run_directory"&&(g+=1)):O.skipped&&(k+=1,O.skipReason==="dry_run"&&O.bytes&&(h+=O.bytes));let v=t.accountBytes?IN({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:t.storagePerRunEntryCap}):void 0,S=Lo(),_=t.execute&&WN(S),R=_?UN({execute:!0}):null,w=S?{observed:!0,execute:_,dumpCount:S.dumpCount,totalBytes:S.totalBytes,removedCount:R?.removed.length??0,removedBytes:R?.removedBytes??0,executables:S.executables,path:S.path,reason:S.reason}:void 0;R&&R.removed.length>0&&(y+=R.removedBytes,b+=R.removed.length,Rt("wsl-crashes",`removed ${R.removed.length} dump(s), ${R.removedBytes} bytes`)),Rt("complete",`${c.length} action(s), ${k} skipped, ${b} removed`);let B=CT(c,l),j=JN({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!t.execute,execute:t.execute,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,diskPressure:t.diskPressure,diskGate:t.diskGate?{ok:t.diskGate.ok,path:t.diskGate.path,freeBytes:t.diskGate.freeBytes,usedPercent:t.diskGate.usedPercent,reason:t.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:h,removedBytes:y,removedPaths:b,skippedPaths:k,skipReasons:YN(c,l)},...v?{storage:v}:{},...B.length>0?{preservedLivePaths:B}:{},...g>0?{removedRunDirectories:g}:{},...w?{wslCrashDumps:w}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!t.execute,execute:t.execute,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,diskPressure:t.diskPressure,diskGate:t.diskGate?{ok:t.diskGate.ok,path:t.diskGate.path,freeBytes:t.diskGate.freeBytes,usedPercent:t.diskGate.usedPercent,reason:t.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:h,removedBytes:y,removedPaths:b,skippedPaths:k,skipReasons:YN(c,l)},...v?{storage:v}:{},...B.length>0?{preservedLivePaths:B}:{},...g>0?{removedRunDirectories:g}:{},...w?{wslCrashDumps:w}:{},compactSummary:j}}function QN(e){let t=SN(e);return h3({execute:t.execute,finalizeStaleRuns:t.finalizeStaleRuns,accountBytes:t.accountBytes,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter})}function ZN(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}var e0=p(()=>{"use strict";At();_T();ET();BT();nN();lN();fN();hN();bN();an();el();_N();EN();PN();NN();ek();LN();FN();oc();$N();KN();VN();GN();qN()});function t0(e){let t=e.trim().split("-")[0]?.split("+")[0];if(!t)return null;let r=t.split(".");if(r.length<1||r.length>3)return null;let n=r.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function jd(e,t){let r=t0(e),n=t0(t);if(!r||!n)return 0;for(let o=0;o<3;o+=1){if(r[o]>n[o])return 1;if(r[o]<n[o])return-1}return 0}var y3,VPe,pk=p(()=>{"use strict";Si();y3={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},VPe=Object.keys(y3)});import{readFile as k3}from"node:fs/promises";import{homedir as b3}from"node:os";import dn from"node:path";function Hs(e){let t=e?.trim();return t||null}function R3(e){return[...new Set(e.filter(t=>!!t))]}function r0(){let e=b3(),t=Hs(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Hs(process.env.OPENCLAW_NPM_ROOT)??dn.join(e,".openclaw","npm"),r=Hs(process.env.KYNVER_NPM_GLOBAL_ROOT)??Hs(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Hs(process.env.NPM_CONFIG_PREFIX)?dn.join(Hs(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):dn.join(e,".npm-global","lib","node_modules"));return R3([dn.join(t,"lib","node_modules"),dn.join(t,"node_modules"),r.endsWith("node_modules")?r:dn.join(r,"lib","node_modules")])}async function w3(e){try{let t=JSON.parse(await k3(e,"utf8"));return typeof t.version=="string"&&t.version.trim()?t.version.trim():null}catch{return null}}function n0(){return r0().map(e=>dn.join(e,"@kynver-app"))}function fk(e){let t=r0(),r=new Set,n=[];for(let o of t){let s=dn.join(o,e,"package.json");r.has(s)||(r.add(s),n.push(s))}return n}async function o0(e=new Date().toISOString()){let t={};for(let r of v3){let n=null;for(let o of fk(r)){let s=await w3(o);s&&(!n||jd(s,n.version)>0)&&(n={version:s,path:o})}n&&(t[r]={version:n.version,observedAt:e,path:n.path})}return t}var v3,mk=p(()=>{"use strict";pk();v3=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"]});import{spawnSync as S3}from"node:child_process";var _3,x3,s0,i0=p(()=>{"use strict";_3=1e4,x3=4*1024*1024,s0=(e,t,r)=>{try{let n=S3(e,t,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:r?.timeoutMs??_3,maxBuffer:x3});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}}});function Vd(e,t,r){return`${e} ${t} ${r}`}function gk(e){let t=e.lastIndexOf("@");if(t<=0||t===e.length-1)return null;let r=e.slice(0,t),n=e.slice(t+1);return!/^[^/\s]+\/[^/\s]+$/.test(r)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:r,sha:n}}function a0(e){let t=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!t)return null;let r=Number(t[2]);return!Number.isFinite(r)||r<=0?null:{repo:t[1],number:r}}var Gd=p(()=>{"use strict"});function kk(){return Date.now()<hk}function O3(e){let t=`${e.stdout}
186
+ ${e.stderr}`.toLowerCase();return t.includes("api rate limit exceeded")||t.includes("rate limit exceeded")||t.includes("secondary rate limit")}function l0(e){O3(e)&&(hk=Math.max(hk,Date.now()+P3))}function yk(e,t){if(kk())return null;let r=e("gh",["api",...t]);if(!r.ok||!r.stdout.trim())return l0(r),null;try{return JSON.parse(r.stdout)}catch{return null}}function T3(e,t,r,n){if(kk())return null;let o=e("gh",["pr","view",String(r),"--repo",t,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return l0(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function bk(e){return kk()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function js(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function N3(e){return Array.isArray(e)?e.map(t=>js(t)).filter(t=>t!==null).slice(0,E3).map(t=>({context:t.context??null,state:t.state??null,target_url:t.target_url??null,description:t.description??null})):[]}function D3(e,t,r){let n=yk(e,[`repos/${t}/commits/${r}/status`]);return n?{state:n.state??null,statuses:N3(n.statuses)}:null}var C3,E3,A3,I3,P3,hk,c0,u0,d0,p0=p(()=>{"use strict";Gd();C3=8e3,E3=30,A3=100,I3=400,P3=3600*1e3,hk=0;c0={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:bk,collect(e,t){let r=a0(e);if(!r)return null;let n=T3(t,r.repo,r.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=js(n.author),s=js(n.mergeCommit),i=js(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,C3):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>js(u)).filter(u=>u!==null).slice(0,A3).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null,workflowName:u.workflowName??null,detailsUrl:u.detailsUrl??null})):[],c=Array.isArray(n.files)?n.files.map(u=>js(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,I3):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},u0={provider:"github",kind:"commit_status",version:"1",isAvailable:bk,collect(e,t){let r=gk(e);return r?D3(t,r.repo,r.sha):null}},d0={provider:"github",kind:"branch_reachability",version:"1",isAvailable:bk,collect(e,t){let r=gk(e);if(!r)return null;let n=yk(t,[`repos/${r.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=yk(t,[`repos/${r.repo}/compare/${encodeURIComponent(o)}...${r.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}}});function vk(e){Rk.some(t=>t.provider===e.provider&&t.kind===e.kind)||Rk.push(e)}function f0(e,t){return Rk.find(r=>r.provider===e&&r.kind===t)??null}function m0(){vk(c0),vk(u0),vk(d0)}var Rk,g0=p(()=>{"use strict";p0();Rk=[]});function h0(e,t={}){m0();let r=t.run??s0,n=t.now??(()=>new Date),o=t.maxSubjects??M3,s=Date.now()+(t.deadlineMs??L3),i=new Set,a=e.filter(m=>{let g=Vd(m.provider,m.kind,m.subject);return i.has(g)?!1:(i.add(g),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,g)=>a[(l+g)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let m of u){let g=Vd(m.provider,m.kind,m.subject),h=n(),y=t.cache?.get(g,h)??null;if(y){d.cached+=1,d.collected+=1,d.items.push(y);continue}if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let b=f0(m.provider,m.kind);if(!b){d.skipped.push({...m,reason:"no_recipe"});continue}let k=`${b.provider} ${b.kind}`,v=f.get(k);if(v===void 0&&(v=b.isAvailable(r),f.set(k,v)),!v){d.skipped.push({...m,reason:"provider_unavailable"});continue}if(t.cache?.reserve?.(m,g,n())===!1){d.skipped.push({...m,reason:"budget_exhausted"});continue}d.attempted+=1;let S=b.collect(m.subject,r);if(S==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let _={provider:m.provider,kind:m.kind,subject:m.subject,payload:S,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(_),t.cache?.set(g,_,n())}return d}var M3,L3,y0=p(()=>{"use strict";i0();g0();Gd();M3=1,L3=25e3});import k0 from"node:path";function b0(e){return k0.join(q(e),B3)}function F3(e){return k0.join(q(e),U3)}function v0(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||t.push({provider:o,kind:s,subject:i})}return t}function R0(e){let t=$(b0(e),null);return v0(t?.wanted)}function w0(e,t){Re(b0(e),{savedAt:new Date().toISOString(),wanted:t})}function S0(e,t={}){let r=t.ttlMs??W3,n=F3(e),s={...$(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>r?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(Re(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function _0(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.providerEvidenceWanted;return Array.isArray(t)?v0(t):null}var B3,U3,W3,wk=p(()=>{"use strict";Q();M();Gd();B3="provider-evidence-wanted.json",U3="provider-evidence-cache.json",W3=600*1e3});import $3 from"node:path";function Sk(e,t){let r=process.env[e];if(!r)return t;let n=Number.parseInt(r,10);return Number.isFinite(n)&&n>=0?n:t}function G3(){return $3.join(ke().harnessRoot,K3)}function J3(e){let t=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),r=e==="github"?j3:V3;return Sk(`KYNVER_PROVIDER_EVIDENCE_${t}_PER_MINUTE`,Sk("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",r))}function x0(){return Sk("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",H3)}function q3(e){return Math.floor(e.getTime()/6e4)*6e4}function Y3(e){return`${e.provider}:${e.kind}`}function C0(e,t={}){let r=S0(e,{ttlMs:t.ttlMs??x0()}),n=t.file??G3(),o=$(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=t.ttlMs??x0(),l=!1;return{get(u,d){let f=r.get(u,d);if(f)return f;let m=s[u];if(!m)return null;let g=Date.parse(m.observedAt);return!Number.isFinite(g)||d.getTime()-g>a?(delete s[u],l=!0,null):(r.set(u,m,d),m)},set(u,d,f){r.set(u,d,f),s[u]=d,l=!0},reserve(u,d,f){let m=J3(u.provider);if(m===0)return!0;let g=Y3(u),h=q3(f),y=i[g];return!y||y.windowStartMs!==h?(i[g]={windowStartMs:h,used:1},l=!0,!0):y.used>=m?!1:(y.used+=1,l=!0,!0)},flush(){r.flush(),l&&(Re(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}var K3,H3,j3,V3,E0=p(()=>{"use strict";Q();M();wk();K3="provider-evidence-shared-cache.json",H3=6e4,j3=1,V3=1});function A0(e){let t=dx(),r=vr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(r.flags.dispatchReceipts!=="off"){Object.assign(o,LI());let s=MI({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,r.flags.dispatchReceipts==="enforce"&&Object.assign(o,rT())}return r.flags.planOutbox!=="off"&&Object.assign(o,LP()),r.flags.admission!=="off"&&(Object.assign(o,FI()),r.flags.admission==="enforce"&&Object.assign(o,jI())),(r.flags.keeper!=="off"||r.flags.meshLease!=="off"||r.flags.quota!=="off")&&Object.assign(o,wx()),{contractVersion:1,observedAt:new Date(n).toISOString(),state:t.state,schemaVersion:t.schemaVersion,recovered:t.recovered,unavailableClass:t.reason?t.reason.split(":")[0]??null:null,flags:r.flags,flagSources:r.sources,flagWarningCount:r.warnings.length,divergenceCounters:o}}var I0=p(()=>{"use strict";Xr();ps();As();Vy();Va();to();Ps();ta()});import{createHash as P0}from"node:crypto";import{access as z3,mkdir as POe,readFile as O0,rename as OOe,writeFile as TOe}from"node:fs/promises";import{constants as X3}from"node:fs";import{homedir as _k}from"node:os";import Qe from"node:path";function e8(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||Qe.join(_k(),".kynver","mcp-installations.json")}function t8(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||Qe.join(_k(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||Qe.join(_k(),".npm-global")}function r8(e){let t=Qe.resolve(e);if(Qe.basename(t)!=="node_modules")return t;let r=Qe.dirname(t);return Qe.basename(r)==="lib"?Qe.dirname(r):r}function n8(e,t){return[Qe.join(e,"lib","node_modules",t,"package.json"),Qe.join(e,"node_modules",t,"package.json")]}async function o8(e){try{return await z3(e,X3.R_OK),!0}catch{return!1}}async function xk(e=e8()){let t;try{t=JSON.parse(await O0(e,"utf8"))}catch{return[]}if(t.version!==1||!Array.isArray(t.installations)||t.installations.length>100)throw new Error("invalid MCP installation inventory");return t.installations.map(r=>{if(!r||!Z3.test(r.inventoryKey)||!Q3.test(r.packageName)||!["kynver","openclaw"].includes(r.prefix))throw new Error("invalid adopted MCP installation");if(r.packageName.includes("..")||r.packageName.includes("%"))throw new Error("invalid adopted MCP package identity");if(r.connectionId&&r.connectionId.length>128)throw new Error("invalid connection identity");if(r.binName&&!/^[A-Za-z0-9._-]{1,80}$/.test(r.binName))throw new Error("invalid MCP bin name");let n=r.envAllowlist??[];if(!Array.isArray(n)||n.length>32||n.some(o=>!/^[A-Z][A-Z0-9_]{1,80}$/.test(o)))throw new Error("invalid MCP environment allow-list");return{...r,envAllowlist:[...new Set(n)],lifecycle:r.lifecycle??"runtime_stdio"}})}function s8(e,t,r){if(typeof e.bin=="string")return Qe.join(r,e.bin);if(!e.bin||typeof e.bin!="object"||Array.isArray(e.bin))return null;let n=e.bin,o=t.binName??(Object.keys(n).length===1?Object.keys(n)[0]:void 0),s=o?n[o]:null;return typeof s=="string"&&!Qe.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?Qe.join(r,s):null}function i8(e){return P0("sha256").update(JSON.stringify({inventoryKey:e.inventoryKey,connectionId:e.connectionId,packageName:e.packageName,managerKind:e.managerKind,sourceKind:e.sourceKind,installedVersion:e.installedVersion,nodeVersion:e.nodeVersion,policyChannel:e.policyChannel,executionConfigDigest:e.executionConfigDigest,capabilities:[...e.capabilities].sort()})).digest("hex")}async function a8(e){let t=[];for(let r of e){let n=r8(t8(r.prefix)),o=(await Promise.all(n8(n,r.packageName).map(async m=>({candidate:m,ok:await o8(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await O0(o,"utf8"));if(s.name!==r.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=Qe.dirname(o),a=s8(s,r,i),l=r.packageName==="@kynver-app/runtime",c=r.lifecycle??"runtime_stdio",u=P0("sha256").update(JSON.stringify({prefix:n,binName:r.binName??null,envAllowlist:[...r.envAllowlist??[]].sort(),lifecycle:c})).digest("hex"),d=l?[]:c==="runtime_stdio"&&a?["update","restart","rollback","verify_mcp"]:["update","rollback"],f={inventoryKey:r.inventoryKey,connectionId:r.connectionId??null,packageName:r.packageName,managerKind:"npm_global",sourceKind:"configured_stdio",installedVersion:s.version,nodeVersion:process.versions.node,policyChannel:"latest",executionConfigDigest:u,capabilities:d};t.push({report:{...f,displayName:r.displayName?.trim()||r.packageName,inventoryFingerprint:i8(f),capabilityExplanation:l?"Runtime self-update requires a supervisor-owned durable handoff and is not enabled by this adapter.":c==="runtime_stdio"&&a?"The authorized runtime can install, start, and verify this configured stdio package.":"The package can be installed, but its external supervisor must restart and verify it."},local:{prefix:n,packageJsonPath:o,packageDir:i,binPath:a,envAllowlist:r.envAllowlist??[],lifecycle:c}})}return t}async function T0(){return a8(await xk())}var Q3,Z3,Ck=p(()=>{"use strict";Q3=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,Z3=/^[A-Za-z0-9._:-]{8,128}$/});import{createHash as l8,createHmac as c8,timingSafeEqual as u8}from"node:crypto";function Ek(e){let t=e.trim().split(".");return t.length!==3||t[0]!=="krc1"||!t[1]||!t[2]?null:{tokenId:t[1],tokenHash:l8("sha256").update(`krc1.${t[1]}.${t[2]}`,"utf8").digest("hex")}}function N0(e,t,r){let n=Ek(t);if(!n||e.algorithm!=="hmac-sha256-runner-v1"||e.keyId!==n.tokenId)return!1;let o=Date.parse(e.claims.expiresAt);if(e.claims.version!==1||e.claims.agentOsId!==r||!Number.isFinite(o)||o<=Date.now()||o>Date.now()+10*6e4||![null,"installing","restarting","verifying"].includes(e.claims.resumePhase))return!1;let s=c8("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&u8(i,s)}var Ak=p(()=>{"use strict"});import{createHash as d8}from"node:crypto";import{access as Ik,mkdtemp as p8,readFile as U0,rm as f8}from"node:fs/promises";import{constants as Pk}from"node:fs";import{tmpdir as m8}from"node:os";import Vs from"node:path";import{spawn as g8}from"node:child_process";import{Client as h8}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as y8}from"@modelcontextprotocol/sdk/client/stdio.js";function W0(){return"npm"}function M0(e,t){return Buffer.byteLength(e)>=D0?e:(e+t.toString("utf8")).slice(0,D0)}function b8(e){let t=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),r=t&&Vs.isAbsolute(t)?t:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:Ok,npm_config_audit:"false",npm_config_fund:"false",npm_config_update_notifier:"false",npm_config_cache:r};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}async function F0(e,t,r=Tk,n){return new Promise((o,s)=>{let i,a;try{[i,a]=le(e,t)}catch(m){s(m);return}let l=g8(i,a,{shell:!1,windowsHide:!0,detached:Se(),env:b8(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=M0(c,m)}),l.stderr.on("data",m=>{u=M0(u,m)});let f=setTimeout(()=>{d=!0,l.pid&&he(l.pid,"SIGKILL")},r);l.once("error",m=>{clearTimeout(f),s(m)}),l.once("close",m=>{clearTimeout(f),d?s(new Error("process_timeout")):o({code:m,stdout:c,stderr:u})})})}function v8(e,t){let[r,n]=t.split("-",2);return!n||!["sha256","sha384","sha512"].includes(r)?!1:d8(r).update(e).digest("base64")===n}async function R8(e,t,r,n){let o=await F0(W0(),["pack",`${e}@${t}`,"--json","--pack-destination",n,`--registry=${Ok}`,"--ignore-scripts"],Tk,Vs.join(n,"npm-cache"));if(o.code!==0)throw new Error("artifact_download_failed");let s;try{s=JSON.parse(o.stdout)}catch{throw new Error("artifact_receipt_invalid")}let i=s[0]?.filename;if(typeof i!="string"||Vs.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Vs.join(n,i);if(!v8(await U0(a),r))throw new Error("artifact_integrity_mismatch");return a}async function w8(e,t,r){if((await F0(W0(),["install","--global","--prefix",e,t,`--registry=${Ok}`,"--no-audit","--fund=false"],Tk,r)).code!==0)throw new Error("package_install_failed")}async function $0(e){let t=JSON.parse(await U0(e.local.packageJsonPath,"utf8"));if(t.name!==e.report.packageName||typeof t.version!="string")throw new Error("installed_identity_mismatch");return t.version}function S8(e){let t={};for(let r of["PATH","SystemRoot","TEMP","TMP",...e]){let n=process.env[r];n!==void 0&&(t[r]=n)}return t}async function L0(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await Ik(e.local.binPath,Pk.X_OK).catch(async()=>Ik(e.local.binPath,Pk.R_OK));let t=new y8({command:e.local.binPath,args:[],env:S8(e.local.envAllowlist),stderr:"pipe"}),r=new h8({name:"kynver-managed-update-verifier",version:"1.0.0"}),n;try{await Promise.race([r.connect(t),new Promise((s,i)=>{n=setTimeout(()=>i(new Error("mcp_handshake_timeout")),k8)})]);let o=await r.listTools();return{toolCount:Array.isArray(o.tools)?o.tools.length:0}}finally{n&&clearTimeout(n),await r.close().catch(()=>{})}}async function B0(e,t,r,n,o){let s=await p8(Vs.join(m8(),"kynver-mcp-update-"));try{let i=await R8(t,r,n,s);if(await o(),await w8(e.local.prefix,i,Vs.join(s,"npm-cache")),await $0(e)!==r)throw new Error("installed_version_mismatch")}finally{await f8(s,{recursive:!0,force:!0})}}async function K0(e,t,r,n={}){if(typeof process.getuid=="function"&&process.getuid()===0)throw new Error("root_execution_refused");if(e.report.inventoryKey!==t.inventoryKey||e.report.inventoryFingerprint!==t.inventoryFingerprint||e.report.packageName!==t.packageName)throw new Error("local_inventory_mismatch");if(t.packageName==="@kynver-app/runtime")throw new Error("runtime_self_update_requires_supervisor");await r("preflight"),await Ik(e.local.prefix,Pk.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await $0(e),s=t.resumePhase!==null&&o===t.targetVersion,i=s&&n.recoveryVerifiedTargetInstalled===!0;if(!i&&o!==t.installedVersion&&!s)throw new Error("installed_version_changed");try{if(i?await r("installing"):(await B0(e,t.packageName,t.targetVersion,t.targetIntegrity,async()=>{await r("installing"),await n.beforePackageMutation?.()}),await n.onTargetInstalled?.()),e.local.lifecycle!=="runtime_stdio")return{outcome:"manual_restart_required",observedVersion:t.targetVersion,handshakeVerified:!1,toolCount:null,failureCode:"external_supervisor_restart_required"};await r("restarting"),await r("verifying");let a=await L0(e);return{outcome:"succeeded",observedVersion:t.targetVersion,handshakeVerified:!0,toolCount:a.toolCount}}catch(a){let l=a instanceof Error?a.message:"update_failed";if(l==="progress_rejected")throw a;if(!t.rollbackIntegrity)return{outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l};await n.beforePackageMutation?.();try{if(await B0(e,t.packageName,t.installedVersion,t.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await L0(e);return{outcome:"rollback_succeeded",observedVersion:t.installedVersion,handshakeVerified:!0,toolCount:c.toolCount,failureCode:l}}return{outcome:"manual_restart_required",observedVersion:t.installedVersion,handshakeVerified:!1,toolCount:null,failureCode:l}}catch(c){if(c instanceof Error&&c.message==="progress_rejected")throw c;return{outcome:"rollback_failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:l}}}}var Ok,D0,Tk,k8,H0=p(()=>{"use strict";ki();ze();Ok="https://registry.npmjs.org",D0=512*1024,Tk=2*6e4,k8=2e4});import{createHmac as _8,timingSafeEqual as x8}from"node:crypto";import{mkdir as C8,readFile as E8,rename as A8,writeFile as I8}from"node:fs/promises";import{homedir as P8}from"node:os";import Nk from"node:path";function nl(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||Nk.join(P8(),".kynver","state","mcp-updates")}function j0(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return Nk.join(nl(),`${e}.json`)}function V0(e,t){let r=Ek(t);return r?_8("sha256",Buffer.from(r.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function G0(e,t){try{let r=JSON.parse(await E8(j0(e),"utf8"));if(r.version!==2||r.operationId!==e||typeof r.integrityMac!="string")return null;let{integrityMac:n,...o}=r,s=V0(o,t);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!x8(i,a)?null:r}catch{return null}}async function J0(e,t){let r=V0(e,t);if(!r)throw new Error("invalid_runner_credential_for_receipt");let n=j0(e.operationId);await C8(Nk.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await I8(o,`${JSON.stringify({...e,integrityMac:r},null,2)}
187
+ `,{mode:384}),await A8(o,n)}var Jd=p(()=>{"use strict";Ak()});import{randomBytes as Dk}from"node:crypto";import{mkdir as Mk,readFile as Lk,rename as O8,rm as qd,stat as T8,writeFile as q0}from"node:fs/promises";import uo from"node:path";function Y0(){return uo.join(nl(),N8)}async function z0(){try{let e=JSON.parse(await Lk(uo.join(Y0(),"owner.json"),"utf8"));return!Number.isSafeInteger(e.pid)||typeof e.acquiredAt!="string"?null:{holder:e.holder==="desktop_update"?"desktop_update":"mcp_update",pid:e.pid,acquiredAt:e.acquiredAt,alive:X0(e.pid)}}catch{return null}}function X0(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function D8(e){try{return await T8(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function Q0(){return M8("mcp_update")}async function M8(e){let t=Y0(),r=`${t}.reclaiming`;await Mk(uo.dirname(t),{recursive:!0,mode:448});let n=!1;try{if(await D8(r))return null;for(let o=0;o<2;o+=1)try{await Mk(t,{mode:448});let s={pid:process.pid,nonce:Dk(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await q0(uo.join(t,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await qd(r,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await Lk(uo.join(t,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await qd(t,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await Mk(r,{mode:448}),n=!0,await q0(uo.join(r,"owner.json"),JSON.stringify({pid:process.pid,nonce:Dk(18).toString("base64url"),acquiredAt:new Date().toISOString()}),{mode:384})}catch(l){if(l.code==="EEXIST")return null;throw l}let i=null;try{i=JSON.parse(await Lk(uo.join(t,"owner.json"),"utf8"))}catch{return null}if(X0(i.pid))return null;let a=`${t}.stale-${process.pid}-${Dk(8).toString("hex")}`;await O8(t,a),await qd(a,{recursive:!0,force:!0})}return null}finally{n&&await qd(r,{recursive:!0,force:!0})}}var N8,Z0=p(()=>{"use strict";Jd();N8="host-mutation.lock"});function Yd(e,t,r){return`${e}/api/agent-os/by-id/${encodeURIComponent(t)}/mcp-updates/${r}`}function L8(e){if(!e||typeof e!="object")return null;let t=e.claim;if(!t||typeof t!="object"||t.waitingForIdle!==!1)return null;let r=t.command;return r&&typeof r=="object"?r:null}function eD(e,t){let r=t.claims;return e.inventoryKey===r.inventoryKey&&e.packageName===r.packageName&&e.installedVersion===r.installedVersion&&e.targetVersion===r.targetVersion&&e.targetIntegrity===r.targetIntegrity&&e.rollbackIntegrity===r.rollbackIntegrity&&e.item.report.inventoryKey===r.inventoryKey&&e.item.report.packageName===r.packageName}function B8(e,t){return{inventoryKey:t.claims.inventoryKey,packageName:t.claims.packageName,installedVersion:t.claims.installedVersion,targetVersion:t.claims.targetVersion,targetIntegrity:t.claims.targetIntegrity,rollbackIntegrity:t.claims.rollbackIntegrity,verifiedTargetInstalled:!1,item:e}}async function tD(e){let t=me(e.baseUrl),r=await T0();if(r.length===0)return{ok:!0,stage:"not_configured"};let n=await $n(Yd(t,e.agentOsId,"inventory"),e.secret,{items:r.map(s=>s.report)});if(!n.ok)return{ok:!1,stage:"inventory",status:n.status};let o=await Q0();if(!o){let s=await z0();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await $n(Yd(t,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=L8(s.response);if(!i)return{ok:!0,stage:"idle"};if(!N0(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await G0(i.claims.operationId,e.secret);if(a?.terminal&&a.attempt===i.claims.attempt&&a.nonce===i.claims.nonce)return{ok:!0,stage:"already_completed",outcome:a.outcome};let l,c;if(i.claims.resumePhase!==null){if(!a||!eD(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let k=r.find(v=>v.report.inventoryKey===i.claims.inventoryKey);if(!k||k.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=k,c=a&&eD(a.recovery,i)?a.recovery:B8(k,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(k,v,S)=>{await J0({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:k,terminal:v,...S?{outcome:S}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let f="claimed",m=async k=>{if(!(await $n(Yd(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/events`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,phase:k})).ok)throw new Error("progress_rejected");f=k,await d(k,!1)},g=k=>m(k),h=()=>m(f),y;try{y=await K0(l,i.claims,g,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:h,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(k){y={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:k instanceof Error?k.message:"update_failed"}}let b=await $n(Yd(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...y});return b.ok?(await d(y.outcome,!0,y.outcome),{ok:y.outcome==="succeeded",stage:"complete",outcome:y.outcome}):{ok:!1,stage:"complete",status:b.status,outcome:y.outcome}}finally{await o.release()}}var rD=p(()=>{"use strict";K();Ke();Ck();Ak();H0();Z0();Jd()});import nD from"node:path";function U8(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function W8(e,t){let r=se(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(r.workers||{})){let a=$(nD.join(q(r.id),"workers",L(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Hr(a))continue;if(Aa(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=ae(a);if(!We(l))continue;let c=Wo({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await Ts({run:e,name:i,agentOsId:String(t.agentOsId||a.agentOsId||""),...t});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function F8(e,t,r,n,o){let s=me(n.baseUrl?String(n.baseUrl):void 0),i=await ye(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await o0(),c=ns(t),u=null;try{let _=R0(t);if(_.length>0){let R=C0(t);u=h0(_,{cache:R}),R.flush?.()}else u=null}catch{u=null}try{if(Or()!=="off"){let _=Ho();WI({liveWorkers:_}),HI({liveWorkers:_})}else BI()}catch{}let d=({runId:_,workerName:R})=>{try{let{runsDir:w}=ke(),B=nD.join(gr(w,L(_)),"workers",L(R),"worker.json"),j=$(B,null);return j?Hr(j):!1}catch{return!1}};await oT({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let f=null;try{f=A0({hasLiveWorker:d})}catch{f=null}let m=null;try{m=Cc({control:Vr(e),supervisor:nS(),inFlightWorkers:Ho().length})}catch{m=null}let g=mu(t),h=yC(),y=await fe(a,i,{agentOsId:e,runId:t,ingestHarness:!0,harnessBoardSnapshot:dy(t),resourceGate:r,boxResourceSnapshot:iT(r,{harnessRunId:t,boxKind:Ct(A())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Me({runId:t}),activeHarnessWorkers:c,...g?.leaseToken?{meshCronLeaseToken:g.leaseToken}:{},...f?{localRunStore:f}:{},...m?{runtimeControlAck:m}:{},...h?{daemonEventLoop:h}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),b=_0(y.response);if(b)try{w0(t,b)}catch{}let k=fC(y);if(k)try{pC(t,k)}catch{}let v=fx(y);v&&mx(e,v);let S=Xw(y);return S&&mm(e,S),{ok:y.ok,httpStatus:y.status,response:y.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function zd(e){let t=String(xt(String(e.run||""),"--run")),r=String(xt(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";dy(t);let o=await yu(r,e),s=hu(o),i=Di({runId:t,configuredMaxWorkersOverride:s}),a=ZN()?QN(t):void 0,l=await F8(r,t,i,e,a),c;if(n)try{let O=me(e.baseUrl?String(e.baseUrl):void 0),T=await ye(e.secret?String(e.secret):void 0,r,{baseUrl:O});c=await tD({agentOsId:r,secret:T,baseUrl:O,activeOwnedSessions:Ho().length})}catch(O){c={ok:!1,stage:"cycle",error:O instanceof Error?O.message:"update cycle failed"}}let u=yI(t,l),d=await lA(t,e),f=await W8(t,e);f.some(O=>O.ok&&!O.skipped)&&Jx();let m=Di({runId:t,configuredMaxWorkersOverride:s}),g=Hy(),h=await uT(t,e),y=DO(m,l),b=y.maxStarts,k=Vr(r),v=Zw(k);v&&(b=0);let S=U8()?await Ad({run:t,agentOsId:r,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},_=null,R=0,w=TO(l),B=b;if(n&&B>0&&w.length>0){let O=Math.min(B,w.length),T=await Py({...e,run:t,agentOsId:r,targetTaskIds:w.join(",")},O),U=Bs(T);R+=U,B=Math.max(0,B-U),_={exactTargetTaskIds:w,exact:T,startedCount:R}}if(n&&B>0){let O=await Py({...e,run:t,agentOsId:r},B),T=Bs(O);R+=T,_=_&&typeof _=="object"?{..._,broad:O,startedCount:R}:O}else!n||b<=0?_||(_={ok:!0,skipped:!0,reason:v??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:y,...w.length?{exactTargetTaskIds:w,exactOnly:!0}:{}}):_&&typeof _=="object"&&(_={..._,broadSkipped:!0,startedCount:R});let j=!y.underutilized&&b===0&&f.length===0&&R===0;return{runId:t,agentOsId:r,execute:n,resourceGate:i,dispatchResourceGate:m,leaseRenewal:d,completedWorkers:f,staleReconcile:g,harnessCleanup:a,planProgressSync:h,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:S,dispatchAdvice:y,dispatch:_,idle:j,runtimeControl:k?{desiredState:k.desiredState,policyVersion:k.policyVersion}:null}}var Bk=p(()=>{"use strict";Gr();Hc();K();Ke();OO();NO();MO();jy();jo();to();sT();Ps();aT();pu();Q();At();pc();Ae();Gy();M();dT();wh();Ns();Qu();kc();$g();K();Ue();e0();ud();mk();kr();y0();E0();wk();Lg();I0();bg();rD();Bg()});function Xd(e){return Go(Vr(e))!=="stopped"?null:Ho().length}var Uk=p(()=>{"use strict";jo();Gr()});function oD(e){if(!e||typeof e!="object")return!1;let t=e;return t.type==="result"&&typeof t.id=="number"&&typeof t.ok=="boolean"}var sD=p(()=>{"use strict"});import{existsSync as $8}from"node:fs";import{fileURLToPath as K8}from"node:url";import{SHARE_ENV as H8,Worker as j8}from"node:worker_threads";function G8(e=import.meta.url){for(let t of[`./${iD}`,`../${iD}`]){let r=new URL(t,e);try{if($8(K8(r)))return r}catch{}}return null}function J8(e){let t=(e.env??process.env).KYNVER_DAEMON_TICK_THREAD?.trim().toLowerCase();return t==="0"||t==="false"||t==="off"?{mode:"inline",reason:"disabled_by_env"}:e.desktopMode??et()?{mode:"inline",reason:"desktop_sidecar"}:e.script?{mode:"thread",reason:"default"}:{mode:"inline",reason:"thread_entry_not_built"}}var iD,V8,q8,Qd,aD=p(()=>{"use strict";_t();Bg();zr();Bk();Uk();sD();iD="daemon-tick-thread.js",V8=3;q8=(e,t)=>new j8(e,{workerData:t,env:H8,name:"kynver-pipeline-tick"}),Qd=class{constructor(t){this.options=t;this.script=t.script===void 0?G8():t.script;let r=J8({env:t.env,desktopMode:t.desktopMode,script:this.script});this.modeValue=r.mode,this.reason=r.reason,this.createWorker=t.createWorker??q8,this.log=t.log??(n=>console.error(n))}options;modeValue;reason;script;createWorker;log;worker=null;online=!1;pending=null;nextId=1;startFailures=0;sentBundleKey=null;get mode(){return this.modeValue}async runTick(t,r){if(this.modeValue==="inline")return this.runInline(t,r);let n=await this.request(()=>({type:"tick",id:this.nextId++,args:t,agentOsId:this.options.agentOsId,...this.bundleIfChanged(),eventLoopReport:r}));if(!n.ok)throw new Error(n.error);return{tick:n.tick,inFlightWorkers:n.inFlightWorkers,isolation:"thread"}}async close(){let t=this.worker;this.worker=null,t&&await t.terminate().catch(()=>{})}async runInline(t,r){return hC(r),{tick:await zd(t),inFlightWorkers:Xd(this.options.agentOsId),isolation:"inline"}}bundleIfChanged(){let t=G_(),r=$t(),n=`${t.version}\0${r}`;return n===this.sentBundleKey?{}:(this.sentBundleKey=n,{instructionBundle:{bundle:t,source:r}})}ensureWorker(){if(this.worker)return this.worker;if(!this.script)throw new Error("tick thread entry not found");let t=this.createWorker(this.script,this.options.init);return this.worker=t,this.online=!1,this.sentBundleKey=null,t.on("online",()=>{this.online=!0,this.startFailures=0}),t.on("message",r=>{if(!oD(r)||!this.pending||r.id!==this.pending.id)return;let n=this.pending;this.pending=null,n.resolve(r)}),t.on("error",r=>this.onWorkerGone(t,r)),t.on("exit",r=>this.onWorkerGone(t,new Error(`tick thread exited with code ${r}`))),t}onWorkerGone(t,r){if(this.worker!==t)return;this.worker=null,this.online||(this.startFailures+=1,this.startFailures>=V8&&(this.modeValue="inline",this.log(JSON.stringify({event:"daemon_tick_thread_fallback",level:"error",reason:"thread_failed_to_start",attempts:this.startFailures,error:r.message})))),this.log(JSON.stringify({event:"daemon_tick_thread_exit",level:"warn",error:r.message}));let n=this.pending;this.pending=null,n?.reject(r)}request(t){if(this.pending)return Promise.reject(new Error("a pipeline tick is already running"));let r;try{r=this.ensureWorker()}catch(o){return Promise.reject(o instanceof Error?o:new Error(String(o)))}let n=t();return new Promise((o,s)=>{this.pending={id:n.id,resolve:o,reject:s};try{r.postMessage(n)}catch(i){this.pending=null,s(i instanceof Error?i:new Error(String(i)))}})}}});import{monitorEventLoopDelay as Y8,performance as z8}from"node:perf_hooks";var X8,Q8,Z8,e5,lD,Zd,cD=p(()=>{"use strict";X8=1e3,Q8=250,Z8=5,e5=5e3,lD=e=>Number.isFinite(e)?Math.round(e/1e6):0,Zd=class{thresholdMs;sampleIntervalMs;now;monotonicNow;log;histogram;timer=null;lastSampleAt=0;lastSampleWallAt=0;startedAt=0;phase="starting";phasesInWindow=new Set(["starting"]);stallCount=0;maxLagMs=0;recent=[];tickIsolation="inline";constructor(t={}){this.thresholdMs=t.thresholdMs??X8,this.sampleIntervalMs=t.sampleIntervalMs??Q8,this.now=t.now??Date.now,this.monotonicNow=t.monotonicNow??t.now??(()=>z8.now()),this.log=t.log??(r=>console.error(r)),this.histogram=t.histogram??Y8({resolution:20})}setPhase(t){this.phase=t,this.phasesInWindow.add(t)}setTickIsolation(t){this.tickIsolation=t}start(){this.timer||(this.startedAt=this.now(),this.lastSampleWallAt=this.startedAt,this.lastSampleAt=this.monotonicNow(),this.histogram.enable(),this.timer=setInterval(()=>this.sample(),this.sampleIntervalMs),this.timer.unref?.())}stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.histogram.disable()}sample(){let t=this.now(),r=this.monotonicNow(),n=r-this.lastSampleAt,o=t-this.lastSampleWallAt;if(this.lastSampleAt=r,this.lastSampleWallAt=t,o-n>e5)return this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),null;let s=Math.max(0,Math.round(n-this.sampleIntervalMs)),i=lD(this.histogram.max),a=lD(this.histogram.percentile(99)),l=Math.max(s,i),c=null;return(l>=this.thresholdMs||a>=this.thresholdMs)&&(c={at:new Date(t).toISOString(),lagMs:l,p99Ms:a,phase:this.phase,phasesInWindow:[...this.phasesInWindow]},this.stallCount+=1,this.maxLagMs=Math.max(this.maxLagMs,l),this.recent=[...this.recent,c].slice(-Z8),this.log(JSON.stringify({event:"daemon_event_loop_stall",level:"warn",lagMs:l,p99Ms:a,maxMs:i,thresholdMs:this.thresholdMs,phase:c.phase,phasesInWindow:c.phasesInWindow,tickIsolation:this.tickIsolation}))),this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),c}report(){return{contractVersion:1,observedAt:new Date(this.now()).toISOString(),monitorStartedAt:new Date(this.startedAt||this.now()).toISOString(),thresholdMs:this.thresholdMs,tickIsolation:this.tickIsolation,stallCount:this.stallCount,maxLagMs:this.maxLagMs,lastStall:this.recent.length?this.recent[this.recent.length-1]:null,recentStalls:[...this.recent]}}}});function pD(e){if(!e||typeof e!="object")return null;let t=e.turn;if(!t||typeof t!="object")return null;let r=t.turnId;return typeof r!="string"||!r?null:{turn:t}}function fD(e){if(!e)return!1;let t=e.name;if(t==="AbortError"||t==="TimeoutError")return!0;let r=e instanceof Error?e.message:String(e);return/\b(?:aborted|timed?\s*out|timeout|socket hang up|other side closed|ECONNRESET|UND_ERR_SOCKET)\b/i.test(r)}function dD(e){let t=e?.code;return typeof t=="string"?t:null}function mD(e){if(!e)return!1;if(e instanceof pn)return t5.has(e.status);let t=dD(e)??dD(e.cause);if(t&&r5.has(t))return!0;let r=e instanceof Error?e.message:String(e);return/\bHTTP 50[234]\b/.test(r)?!0:/\b(?:fetch failed|ECONNREFUSED|ENOTFOUND|EAI_AGAIN|EHOSTUNREACH|ENETUNREACH|connection refused)\b/i.test(r)}function Wk(e){return fD(e)?"aborted":mD(e)?"transient":"server"}function gD(e,t){let r=Wk(e);if(r==="aborted")return t<=o5?0:s5;if(r==="transient"){let n=Math.max(0,Math.min(t-1,uD.length-1));return uD[n]}return n5}function hD(e,t){return e==="aborted"&&t<i5?{event:"chat_claim_poll_retry",level:"info"}:{event:"chat_claim_error",level:"error"}}var pn,t5,r5,n5,o5,s5,uD,ep,i5,tp=p(()=>{"use strict";pn=class extends Error{status;constructor(t){super(`claim failed: HTTP ${t}`),this.name="ClaimHttpError",this.status=t}},t5=new Set([502,503,504]),r5=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","EHOSTUNREACH","ENETUNREACH","ENETDOWN","UND_ERR_CONNECT_TIMEOUT"]),n5=5e3,o5=3,s5=1e3,uD=[0,1e3,5e3];ep=class{counts={aborted:0,transient:0,server:0,auth:0,recovered:0};streakKind=null;streak=0;onError(t){let r=Wk(t);return this.bump(r),{kind:r,consecutive:this.streak,backoffMs:gD(t,this.streak)}}onAuthError(){this.bump("auth")}onSuccess(){this.streak>0&&(this.counts.recovered+=1),this.streakKind=null,this.streak=0}snapshot(){return{...this.counts}}bump(t){this.counts[t]+=1,this.streak=this.streakKind===t?this.streak+1:1,this.streakKind=t}},i5=3});var a5,l5,c5,rp,yD=p(()=>{"use strict";ir();a5=5*6e4,l5=5*6e4,c5=2160*60*60,rp=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.fetchImpl=t.fetchImpl??fetch,this.log=t.log??(r=>console.error(JSON.stringify(r)))}deps;token=null;lastMintFailureAt=0;minting=null;refreshing=null;lastRefreshFailureAt=0;now;fetchImpl;log;async authorization(){let t=this.token&&this.token.expiresAtMs-this.now()>a5?this.token:null;if(t)return{kind:"box_token",bearer:t.token,boxId:t.boxId};let r=this.deps.loadBoxCredential();if(r||(r=await this.mintOnce()),r){let o=await this.refreshOnce(r);if(o)return{kind:"box_token",bearer:o.token,boxId:o.boxId};if(this.token&&this.token.expiresAtMs>this.now())return{kind:"box_token",bearer:this.token.token,boxId:this.token.boxId}}let n=this.deps.loadApiKey();return n?{kind:"api_key",bearer:n,boxId:null}:null}invalidateToken(){this.token=null}describe(){return{kind:this.token?"box_token":this.deps.loadApiKey()?"api_key":"none",boxId:this.token?.boxId??null,tokenExpiresAt:this.token?new Date(this.token.expiresAtMs).toISOString():null,hasBoxCredential:!!this.deps.loadBoxCredential()}}mintOnce(){return this.minting||(this.minting=this.mintBoxCredential().finally(()=>{this.minting=null})),this.minting}async mintBoxCredential(){let t=this.deps.loadApiKey();if(!t||this.now()-this.lastMintFailureAt<l5)return;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/runner-credentials`;try{let n=await pt(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({capabilities:["chat.relay"],ttlSeconds:c5,name:`chat-box:${this.deps.boxLabel()}`}),signal:AbortSignal.timeout(1e4)},this.fetchImpl),o=await n.json().catch(()=>null);if(!n.ok||typeof o?.token!="string"||!o.token){this.lastMintFailureAt=this.now(),this.log({event:"chat_box_credential_mint_failed",status:n.status,detail:typeof o?.error=="string"?o.error.slice(0,200):null});return}return this.deps.saveBoxCredential(o.token),this.log({event:"chat_box_credential_minted",agentOsId:this.deps.agentOsId}),o.token}catch(n){this.lastMintFailureAt=this.now(),this.log({event:"chat_box_credential_mint_failed",error:n instanceof Error?n.message:String(n)});return}}refreshOnce(t){return this.refreshing||(this.refreshing=this.refreshToken(t).finally(()=>{this.refreshing=null})),this.refreshing}async refreshToken(t){if(this.now()-this.lastRefreshFailureAt<15e3&&this.token===null)return null;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/chat-box-token`;try{let n=await pt(r,{method:"POST",headers:{"Content-Type":"application/json","X-Kynver-Runner-Token":t},body:JSON.stringify({boxLabel:this.deps.boxLabel()}),signal:AbortSignal.timeout(1e4)},this.fetchImpl);if(n.status===401||n.status===403)return this.log({event:"chat_box_credential_rejected",status:n.status}),this.deps.clearBoxCredential(),this.token=null,null;let o=await n.json().catch(()=>null);if(!n.ok||typeof o?.token!="string"||typeof o.boxId!="string")return this.lastRefreshFailureAt=this.now(),this.log({event:"chat_box_token_refresh_failed",status:n.status,detail:typeof o?.error=="string"?o.error.slice(0,200):null}),null;let s=typeof o.expiresAt=="string"&&!Number.isNaN(Date.parse(o.expiresAt))?Date.parse(o.expiresAt):this.now()+10*6e4;return this.token={token:o.token,expiresAtMs:s,boxId:o.boxId},this.token}catch(n){return this.lastRefreshFailureAt=this.now(),this.log({event:"chat_box_token_refresh_failed",error:n instanceof Error?n.message:String(n)}),null}}}});function kD(e=process.env){return e.KYNVER_OPENAI_DEFAULT_MODEL?.trim()||u5}var u5,CNe,bD=p(()=>{"use strict";Sa();Uu();Ht();u5="gpt-5.5",CNe=600*1e3});function Mr(e){let t=e.chatProvider?.trim();return Gs(t||e.workerProvider?.trim()||"cursor")}function Gs(e){let t=Ge(e);return t==="cursor"||t==="agent"?"cursor":f5.has(t)?"gemini":vD.has(t)||vD.has(e.trim().toLowerCase())?"codex":RD.has(t)||RD.has(e.trim().toLowerCase())?"openai":(p5.has(t),"anthropic")}function po(e,t,r=process.env){let n=r.KYNVER_CHAT_MODEL?.trim();if(n){if(e==="cursor"){let s=vs(n,ol);return s.ok?s.model:ol}if(e==="gemini"&&!Fk.test(n)&&!$k.test(n)||(e==="openai"||e==="codex")&&!Fk.test(n)&&!wD.test(n)||e==="anthropic")return n}let o=t.defaultModel?.trim();if(e==="cursor"){if(o&&!Fk.test(o)){let s=vs(o,ol);return s.ok?s.model:ol}return ol}return e==="gemini"?o&&wD.test(o)?o:He(r):e==="codex"?o&&$k.test(o)?o:r.KYNVER_CODEX_DEFAULT_MODEL?.trim()||d5:e==="openai"?o&&$k.test(o)?o:kD(r):o||"claude-sonnet-4-6"}var ol,d5,p5,f5,vD,RD,Fk,wD,$k,fo=p(()=>{"use strict";Kn();Ht();_a();bD();ol="composer-2.5",d5="gpt-5.5",p5=new Set(["claude","anthropic","opus"]),f5=new Set(["gemini","gemini-api"]),vD=new Set(["codex","chatgpt","gpt"]),RD=new Set(["openai","openai-compatible","openai-api","openai_api"]);Fk=/^(?:claude[-_]|opus\b|sonnet\b|haiku\b)/i,wD=/^(?:gemini[-_]|flash\b|pro\b)/i,$k=/^(?:gpt-|o\d|chatgpt-)/i});var np,SD=p(()=>{"use strict";np=class{rejects=new Map;duplicateOffers=0;childEnv=null;noteRejected(t){this.rejects.set(t,(this.rejects.get(t)??0)+1)}noteDuplicateOffer(){this.duplicateOffers+=1}report(t){return{signedTurns:!0,signaturePolicy:t.policy,accessRaiseGuard:!0,auth:t.auth,credentialStore:t.credentialStore,childEnvSafe:this.childEnv?this.childEnv.ok:null,...this.childEnv&&this.childEnv.leaked.length?{childEnvLeaked:this.childEnv.leaked}:{},rejectedTurns:Object.fromEntries(this.rejects),...this.duplicateOffers>0?{duplicateOffers:this.duplicateOffers}:{},...t.folderSandbox?{folderSandbox:t.folderSandbox}:{}}}}});import m5 from"node:os";function sl(e=process.env){let t=A(),r=Ct(t,e);return qo({boxKind:r,hostLabel:m5.hostname(),config:t,env:e})}async function g5(e,t,r){let n=r.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n.replace(/\/$/,"");if(!e)return null;let o=e.replace(/\/$/,"");if(t){let s=new AbortController,i=setTimeout(()=>s.abort(),_D);try{let a=await fetch(`${o}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${t}`},signal:s.signal});if(a.ok){let l=await a.json().catch(()=>null);if(typeof l?.bridgeUrl=="string"&&l.bridgeUrl.trim())return l.bridgeUrl.trim().replace(/\/$/,"")}}catch{}finally{clearTimeout(i)}}return h5(o)}async function h5(e){let t=new AbortController,r=setTimeout(()=>t.abort(),_D);try{let n=await fetch(`${e}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}",signal:t.signal});if(n.status===401||n.status===400||n.status===403){let o=n.headers.get("content-type")??"";if(o.includes("application/json")||o.includes("json")||(await n.text().catch(()=>"")).trimStart().startsWith("{"))return e}return null}catch{return null}finally{clearTimeout(r)}}function Kk(e){return Ce()?!0:!!e&&!!Tm(e)}async function op(e=process.env){let t=A(),r=t.agentOsId?.trim(),n=Ce();if(!r||!Kk(r))return null;let o=await g5(t.apiBaseUrl,n,e);if(!o)return null;let s=Mr(t),i=t.apiBaseUrl?.replace(/\/$/,"")??o.replace(/\/$/,"");return{bridgeUrl:o.replace(/\/$/,""),agentOsId:r,apiKey:n??"",boxId:sl(e),chatProvider:s,model:po(s,t,e),useClaudeOauth:t.chatUseClaudeOauth===!0,auth:new rp({apiBaseUrl:i,agentOsId:r,boxLabel:()=>sl(e),loadApiKey:Ce,loadBoxCredential:()=>Tm(r),saveBoxCredential:a=>MS(r,a),clearBoxCredential:LS}),security:new np,apiBaseUrl:i}}var _D,sp=p(()=>{"use strict";K();Ue();Yo();yD();fo();SD();_D=5e3});import{verify as y5,createPublicKey as k5}from"node:crypto";function R5(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||r.kind!=="chat-access-change"||typeof r.agentOsId!="string"||!r.agentOsId||typeof r.boxId!="string"||!r.boxId||typeof r.access!="string"||!r.access||!Array.isArray(r.folders)||!r.folders.every(n=>typeof n=="string")||typeof r.changedAt!="string"||Number.isNaN(Date.parse(r.changedAt))||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function xD(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[b5]??null}function w5(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function S5(e,t){let r=Date.parse(e),n=Date.parse(t);return Number.isNaN(r)?!1:Number.isNaN(n)?!0:r>n}function Hk(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3);if(e==null)return{ok:!1,code:"missing",reason:"the turn carries no signed settings-change record for this raise"};if(!R5(e))return{ok:!1,code:"malformed",reason:"malformed settings-change record"};let{payload:s}=e;if(s.agentOsId!==t.agentOsId)return{ok:!1,code:"mismatch",reason:"settings-change record is for another workspace"};if(s.boxId!==t.boxId)return{ok:!1,code:"mismatch",reason:"settings-change record is for another computer"};if(s.access!==t.access||!w5(s.folders,t.folders))return{ok:!1,code:"mismatch",reason:"settings-change record does not match the access the turn asks for"};if(s.exp<=o)return{ok:!1,code:"expired",reason:"settings-change record expired \u2014 save the setting again in Computers settings"};let i=Bn(e.publicKeyId,n);if(!i)return{ok:!1,code:"no_verification_key",reason:`no verification key for publicKeyId "${e.publicKeyId}"`};let a;try{a=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,code:"bad_signature",reason:"signature is not base64url"}}if(a.length!==64)return{ok:!1,code:"bad_signature",reason:"signature is not a 64-byte Ed25519 signature"};let l=!1;try{let u=Buffer.from(st(s),"utf8"),d=k5({key:Buffer.concat([v5,Buffer.from(i)]),format:"der",type:"spki"});l=y5(null,u,d,a)}catch(u){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${u.message}`}}if(!l)return{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"};let c=r.lastApplied??null;return c&&(c.nonce===s.nonce||!S5(s.changedAt,c.changedAt))?{ok:!1,code:"replayed",reason:"settings-change record is not newer than the one this computer last applied"}:{ok:!0,payload:s}}var VNe,b5,v5,CD=p(()=>{"use strict";Jr();Vi();VNe=720*60*60,b5="change",v5=Buffer.from("302a300506032b6570032100","hex")});function ED(e){switch(e){case"off":return 0;case"folder":case"folders":return 1;case"full":return 2;default:return 0}}function _5(e,t){let r=ED(e.access),n=ED(t.access);if(r!==n)return r>n;if(r!==1)return!1;let o=new Set(In(t.folders));return In(e.folders).some(s=>!o.has(s))}function x5(e,t){if(!e||!e.byBox||typeof e.byBox!="object"||!Object.prototype.hasOwnProperty.call(e.byBox,t))return null;let r=e.byBox[t];if(!r||typeof r!="object")return null;let n=zo(r.access);if(!n)return null;let o=r.folders,s=Array.isArray(o)?o.filter(i=>typeof i=="string"):[];return{level:{access:n,folders:s},change:xD(r)}}function ID(e){let t=x5(e.signedAccess,e.boxId);if(!t)return{ok:!0,website:null,raised:!1};let r=zo(e.local.chatComputerAccess);if(r==="off")return{ok:!0,website:null,raised:!1};let n=[];e.state.website&&n.push({access:e.state.website.access,folders:e.state.website.folders}),n.push(r?{access:r,folders:In(e.local.chatWorkFolders)}:{access:Mc(e.engine),folders:[]});let o=n.every(c=>_5(t.level,c)),s=(e.now??(()=>new Date))().toISOString(),i=e.state.website;if(!o){let c=t.change!==null?Hk(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:AD(i)}):null;return{ok:!0,raised:!1,website:{access:t.level.access,folders:[...t.level.folders],changedAt:c?.ok?c.payload.changedAt:i?.changedAt??"",nonce:c?.ok?c.payload.nonce:i?.nonce??"",at:s}}}let a=Hk(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:AD(i)}),l=i?.access??r??Mc(e.engine);return a.ok?{ok:!0,raised:!0,website:{access:t.level.access,folders:[...t.level.folders],changedAt:a.payload.changedAt,nonce:a.payload.nonce,at:s}}:{ok:!1,code:"access_raise",detail:a.code,reason:a.reason,from:l,to:t.level.access}}function AD(e){return!e||!e.changedAt&&!e.nonce?null:{changedAt:e.changedAt,nonce:e.nonce}}var PD=p(()=>{"use strict";CD();Pn()});import{existsSync as C5,mkdirSync as E5,readFileSync as A5,writeFileSync as I5}from"node:fs";import{homedir as P5}from"node:os";import jk from"node:path";function Vk(e=P5()){return jk.join(e,O5)}function OD(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function T5(e){return typeof e.access!="string"?null:{access:e.access,folders:OD(e.folders),source:e.source??"default",signed:e.signed===!0,at:typeof e.at=="string"?e.at:""}}function N5(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;if(typeof r.access=="string")return{access:r.access,folders:OD(r.folders),changedAt:typeof r.changedAt=="string"?r.changedAt:"",nonce:typeof r.nonce=="string"?r.nonce:"",at:typeof r.at=="string"?r.at:""}}return t&&t.source==="website"?{access:t.access,folders:[...t.folders],changedAt:t.at,nonce:"",at:t.at}:null}function ip(e=Vk()){try{if(!C5(e))return{applied:null,website:null};let t=JSON.parse(A5(e,"utf8"));if(!t||typeof t!="object")return{applied:null,website:null};let r=T5(t);return{applied:r,website:N5(t.website,r)}}catch{return{applied:null,website:null}}}function TD(e,t){try{E5(jk.dirname(e),{recursive:!0});let r={...t.applied??{},...t.website?{website:t.website}:{}};I5(e,`${JSON.stringify(r,null,2)}
188
+ `,{mode:384})}catch{}}function D5(e,t){return e?e.access===t.access&&e.source===t.source&&e.folders.length===t.folders.length&&e.folders.every((r,n)=>r===t.folders[n]):!1}function ND(e,t={signed:!1}){let r=t.file??Vk(),n=t.now??(()=>new Date),o={access:e.access,folders:[...e.folders],source:e.source,signed:t.signed,at:n().toISOString()},s=ip(r);return D5(s.applied,o)?null:(TD(r,{applied:o,website:s.website}),{from:s.applied,to:o})}function DD(e,t={}){let r=t.file??Vk(),n=t.now??(()=>new Date),o=ip(r),s={access:e.access,folders:[...e.folders],changedAt:e.changedAt,nonce:e.nonce,at:n().toISOString()},i=o.website;return i&&i.access===s.access&&i.changedAt===s.changedAt&&i.nonce===s.nonce&&i.folders.length===s.folders.length&&i.folders.every((l,c)=>l===s.folders[c])?i:(TD(r,{applied:o.applied,website:s}),s)}function Js(e){switch(e){case"off":return"off";case"folder":return"one folder";case"folders":return"chosen folders";case"full":return"full computer";default:return String(e)}}var O5,Gk=p(()=>{"use strict";O5=jk.join(".kynver","chat-access-state.json")});import{appendFileSync as M5,mkdirSync as L5}from"node:fs";import{homedir as B5}from"node:os";import Jk from"node:path";function qk(e=B5()){return Jk.join(e,U5)}function Yk(e){let t=r=>r===void 0?void 0:r.length>MD?`${r.slice(0,MD)}\u2026`:r;return{...e,...e.command!==void 0?{command:t(e.command)}:{},...e.path!==void 0?{path:t(e.path)}:{}}}function qs(e,t=qk()){try{return L5(Jk.dirname(t),{recursive:!0}),M5(t,`${JSON.stringify(Yk(e))}
189
+ `,{encoding:"utf8",mode:384}),!0}catch(r){return console.error(JSON.stringify({event:"chat_command_log_write_failed",error:r instanceof Error?r.message:String(r)})),!1}}var U5,MD,il=p(()=>{"use strict";U5=Jk.join(".kynver","logs","chat-commands.jsonl"),MD=2e3});function W5(e){let r=e.chatProvider?.trim()||e.workerProvider?.trim()||"";return Ge(r)}function mo(e,t=process.env){return W5(e)!=="gemini"?"http":_s(kt(t))==="antigravity"?"antigravity":"http"}var ap=p(()=>{"use strict";Zn();Fi()});import{spawnSync as WD}from"node:child_process";import{existsSync as F5,readFileSync as $5}from"node:fs";import{homedir as K5,platform as H5}from"node:os";import LD from"node:path";function lp(e,t,r=process.env){return e==="cursor"?"cursor":e==="codex"?"codex":e==="gemini"?mo(t,r)==="antigravity"?"antigravity":"none":e==="anthropic"?"claude-code":"none"}function j5(e,t){return e==="cursor"?Jn(t):e==="codex"?t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||Cr():e==="antigravity"?kt(t):e==="claude-code"?t.KYNVER_CLAUDE_BIN?.trim()||t.CLAUDE_BIN?.trim()||"claude":null}function cp(e,t=process.env,r=Date.now()){let n=j5(e,t);if(!n)return null;let o=BD.get(n);if(o&&r-o.at<FD)return o.version;let s=null;try{let[i,a]=le(n,["--version"]),l=WD(i,a,Z({encoding:"utf8",timeout:5e3})),c=`${l.stdout??""} ${l.stderr??""}`;s=l.status===0?c.match(V5)?.[0]??null:null}catch{s=null}return BD.set(n,{at:r,version:s}),s}function up(e=process.env,t={}){if(e.ANTHROPIC_API_KEY?.trim())return!0;let r=t.home??K5(),n=t.now??Date.now(),o=UD.get(r);if(o&&n-o.at<FD)return o.signedIn;let s=G5(LD.join(e.CLAUDE_CONFIG_DIR?.trim()||LD.join(r,".claude"),".credentials.json"));return!s&&(t.os??H5())==="darwin"&&(s=(t.keychain??J5)()),UD.set(r,{at:n,signedIn:s}),s}function G5(e){if(!F5(e))return!1;try{let t=JSON.parse($5(e,"utf8")).claudeAiOauth,r=n=>typeof n=="string"&&n.length>0;return!!t&&(r(t.refreshToken)||r(t.accessToken))}catch{return!1}}function J5(){try{return WD("security",["find-generic-password","-s","Claude Code-credentials"],{stdio:"ignore",timeout:5e3}).status===0}catch{return!1}}var V5,FD,BD,UD,al=p(()=>{"use strict";zn();Rs();Zn();ze();M();ap();V5=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,FD=10*6e4,BD=new Map;UD=new Map});import{createHash as q5,verify as Y5,createPublicKey as z5}from"node:crypto";function Xk(e){if(!e||typeof e!="object"||Array.isArray(e))return e;let t={...e};return delete t[$D],t}function Q5(e){return q5("sha256").update(st(Xk(e)),"utf8").digest("hex")}function Qk(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[$D]??null}function Z5(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let r=t.payload;return!(!r||typeof r!="object"||r.v!==1||r.kind!=="chat-turn"||typeof r.turnId!="string"||!r.turnId||typeof r.agentOsId!="string"||!r.agentOsId||r.userId!==null&&(typeof r.userId!="string"||!r.userId)||r.boxId!==null&&typeof r.boxId!="string"||r.access!==null&&(!r.access||typeof r.access!="object"||Array.isArray(r.access))||typeof r.payloadHash!="string"||!/^[0-9a-f]{64}$/.test(r.payloadHash)||typeof r.exp!="number"||!Number.isFinite(r.exp)||typeof r.nonce!="string"||!r.nonce)}function e9(e,t){let r=e&&typeof e=="object"&&!Array.isArray(e)?e.computerAccess??null:null;return r===null&&t===null?!0:r===null||t===null?!1:st(r)===st(t)}function zk(e,t){return{state:t,firstSeenAt:new Date(e.firstSeenSec*1e3).toISOString(),turnId:e.turnId}}function t9(e){return z5({key:Buffer.concat([X5,Buffer.from(e)]),format:"der",type:"spki"})}function KD(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3),s=Qk(e);if(s===null)return{ok:!1,code:"unsigned",reason:"turn carries no signed envelope"};if(!Z5(s))return{ok:!1,code:"malformed",reason:"malformed chat-turn envelope"};let i=s;if(i.payload.agentOsId!==t.agentOsId)return{ok:!1,code:"agent_os_mismatch",reason:"envelope is for another workspace"};if(i.payload.turnId!==t.turnId)return{ok:!1,code:"turn_id_mismatch",reason:"envelope is for another turn"};if(i.payload.exp<=o)return{ok:!1,code:"expired",reason:"envelope expired"};let a=Bn(i.publicKeyId,n);if(!a)return{ok:!1,code:"no_verification_key",reason:`no verification key for publicKeyId "${i.publicKeyId}"`};let l;try{l=Buffer.from(i.signature,"base64url")}catch{return{ok:!1,code:"bad_signature",reason:"signature is not base64url"}}if(l.length!==64)return{ok:!1,code:"bad_signature",reason:"signature is not a 64-byte Ed25519 signature"};let c=!1;try{let d=Buffer.from(st(i.payload),"utf8");c=Y5(null,d,t9(a),l)}catch(d){return{ok:!1,code:"bad_signature",reason:`signature verification failed: ${d.message}`}}if(!c)return{ok:!1,code:"bad_signature",reason:"Ed25519 signature mismatch"};if(Q5(e)!==i.payload.payloadHash)return{ok:!1,code:"payload_tampered",reason:"turn payload does not match its signed hash"};if(!e9(e,i.payload.access))return{ok:!1,code:"access_mismatch",reason:"computer access on the turn differs from the signed setting"};if(!r.nonces)return{ok:!0,payload:i.payload,redelivered:!1};let u=r.nonces.consume({nonce:i.payload.nonce,turnId:i.payload.turnId,expSec:i.payload.exp,nowSec:o});return u.ok?{ok:!0,payload:i.payload,redelivered:u.redelivered}:{ok:!1,code:"replayed",reason:`envelope nonce already used on this computer (${r9(u.replay)})`,replay:u.replay}}function r9(e){return`${e.state==="in_flight"?"this computer is running that turn now":e.state==="already_ran"?"that turn already ran here":`the nonce belongs to turn ${e.turnId}`}; first seen ${e.firstSeenAt}`}var $D,X5,dp,pp=p(()=>{"use strict";Jr();Vi();$D="turnEnvelope",X5=Buffer.from("302a300506032b6570032100","hex");dp=class{constructor(t=1e4){this.maxEntries=t}maxEntries;byNonce=new Map;byTurn=new Map;consume(t){let r=t.nowSec??Math.floor(Date.now()/1e3);this.purge(r);let n=this.byNonce.get(t.nonce);if(n)return n.turnId!==t.turnId?{ok:!1,replay:zk(n,"turn_mismatch")}:n.state==="verified"?{ok:!0,redelivered:!0}:{ok:!1,replay:zk(n,n.state==="started"?"in_flight":"already_ran")};let o=this.byTurn.get(t.turnId);if(o){if(o.state!=="verified")return{ok:!1,replay:zk(o,o.state==="started"?"in_flight":"already_ran")};this.byNonce.delete(o.nonce);let i={...o,nonce:t.nonce,untilSec:Math.max(o.untilSec,t.expSec+60)};return this.byNonce.set(t.nonce,i),this.byTurn.set(t.turnId,i),{ok:!0,redelivered:!0}}if(this.byNonce.size>=this.maxEntries){let i=this.byNonce.values().next().value;i&&this.forget(i)}let s={nonce:t.nonce,turnId:t.turnId,firstSeenSec:r,state:"verified",untilSec:t.expSec+60};return this.byNonce.set(t.nonce,s),this.byTurn.set(t.turnId,s),{ok:!0,redelivered:!1}}markStarted(t){let r=this.byTurn.get(t);return r?(r.state==="verified"&&(r.state="started"),!0):!1}markFinished(t){let r=this.byTurn.get(t);return r?(r.state="finished",!0):!1}stateOf(t){return this.byTurn.get(t)?.state??null}purge(t=Math.floor(Date.now()/1e3)){for(let r of[...this.byNonce.values()])r.untilSec<=t&&this.forget(r)}forget(t){this.byNonce.delete(t.nonce),this.byTurn.get(t.turnId)===t&&this.byTurn.delete(t.turnId)}get size(){return this.byNonce.size}}});function HD(e=process.env,t={}){let r=(e[n9]??t.chatTurnSignature??"").toString().trim().toLowerCase();return r==="optional"||r==="off"||r==="0"||r==="false"?"optional":"required"}function jD(e,t){return t?`turn_rejected_${e}: ${t}`:`turn_rejected_${e}`}function VD(e,t){if(!(Qk(e.payload)!==null)&&t.policy==="optional"){let o=e.payload&&typeof e.payload=="object"&&!Array.isArray(e.payload)?e.payload.computerAccess??null:null;return{ok:!0,access:o9(o)?o:null,signed:!1,userId:null,redelivered:!1}}let n=KD(e.payload,{agentOsId:t.agentOsId,turnId:e.turnId},{env:t.env,nowSec:t.nowSec,nonces:t.nonces});return n.ok?{ok:!0,access:n.payload.access,signed:!0,userId:n.payload.userId,redelivered:n.redelivered}:{ok:!1,code:n.code,reason:n.reason,...n.replay?{replay:n.replay}:{}}}function o9(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.byBox;return!!t&&typeof t=="object"&&!Array.isArray(t)}var n9,Zk=p(()=>{"use strict";pp();n9="KYNVER_CHAT_TURN_SIGNATURE"});function eb(e){return typeof e=="string"&&a9.test(e.trim())?e.trim():null}function fp(e){return`Kynver conversation id: ${e}. When work you start from this conversation later finishes, fails, needs the user or opens / merges a PR, post the update here only: \`kynver tab post --conversation ${e} "<text>"\` (or the agent_tab_post tool with this conversationId). When you create a Kynver task for it, pass originConversationId=${e} so its updates come back here too.`}function JD(e,t){let r=eb(e);return r?{[s9]:r,[i9]:t}:{}}var s9,i9,GD,a9,mp=p(()=>{"use strict";s9="KYNVER_CONVERSATION",i9="KYNVER_AGENT_TAB_ENGINE",GD="X-Kynver-Conversation",a9=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});function c9(e){return typeof e=="string"&&l9.includes(e)}function YD(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.kind!=="agent-tab"||!c9(t.engine)||typeof t.sessionKey!="string"||!m9.test(t.sessionKey))return null;let r=typeof t.text=="string"?t.text.slice(0,qD):"",n=[],o=0;if(Array.isArray(t.attachments))for(let c of t.attachments.slice(0,p9)){if(!c||typeof c!="object")continue;let{name:u,mime:d,contentBase64:f}=c;if(!(typeof u!="string"||typeof f!="string")){if(o+=Math.floor(f.length*3/4),o>f9)break;n.push({name:u.slice(0,200),mime:typeof d=="string"?d.slice(0,100):"application/octet-stream",contentBase64:f})}}let s=g9(t.control);if(!s&&!r.trim()&&n.length===0)return null;let i=typeof t.styleNote=="string"?t.styleNote.trim().slice(0,d9):"",a=typeof t.replyTurnId=="string"&&u9.test(t.replyTurnId)?t.replyTurnId:null,l=eb(t.conversationId);return{kind:"agent-tab",engine:t.engine,sessionKey:t.sessionKey,text:r,attachments:n,...t.computerAccess!==void 0?{computerAccess:t.computerAccess}:{},...i?{styleNote:i}:{},...a?{replyTurnId:a}:{},...s?{control:s}:{},...l?{conversationId:l}:{}}}function g9(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return t.op==="stop"?{op:"stop"}:t.op==="steer"&&typeof t.text=="string"&&t.text.trim()?{op:"steer",text:t.text.slice(0,qD)}:null}var l9,gp,u9,qD,d9,p9,f9,m9,tb=p(()=>{"use strict";mp();l9=["hermes","openclaw","claude-code","grok-bot"],gp={hermes:"Hermes",openclaw:"OpenClaw","claude-code":"Claude Code","grok-bot":"Grok Bot"};u9=/^[A-Za-z0-9-]{8,64}$/,qD=32e3,d9=4e3,p9=5,f9=20*1024*1024,m9=/^[A-Za-z0-9_.:-]{8,128}$/});import{createHash as h9}from"node:crypto";function R9(e){return`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box`}function w9(e,t,r){let n=e.trim()?e:`${t} finished without writing a reply.`;return r.length>0&&(n+=`
190
+
191
+ _${r.length===1?"A file":`${r.length} files`} couldn't be attached: ${r.join(", ")}._`),n.length>zD?`${n.slice(0,zD-1)}\u2026`:n}function QD(e){let t=e.fetchFn??fetch,r=e.wait??v9,n=R9(e),o=new URL(e.apiBaseUrl).origin,s=async(a,l)=>{let u={Authorization:`Bearer ${await e.bearer()}`},d=l.body;l.json!==void 0&&(u["Content-Type"]="application/json",d=JSON.stringify(l.json));let f=await t(a,{method:l.method??"POST",headers:u,body:d});return f.status===401&&e.onUnauthorized?.(),f},i=async a=>{try{let l=Buffer.from(a.contentBase64,"base64"),c=h9("sha256").update(l).digest("hex"),u=await s(`${n}/uploads`,{json:{name:a.name.slice(0,200),size:l.length,sha256:c}});if(!u.ok)return null;let d=await u.json();for(let g=0;g<d.parts;g++){let h=l.subarray(g*d.partBytes,(g+1)*d.partBytes),y=new URL(d.partUrl.replace("{index}",String(g)),o).toString(),b=!1;for(let k=0;k<3&&!b;k++)b=!!(await t(y,{method:"PUT",body:h}).catch(()=>null))?.ok,b||await r(1e3*(k+1));if(!b)return null}let f=await s(new URL(d.completeUrl,o).toString(),{method:"POST"});if(!f.ok)return null;let m=await f.json();return typeof m.file?.id=="string"?m.file.id:null}catch{return null}};return{async heartbeat(a){try{let l=await s(`${n}/turns/${encodeURIComponent(a)}/heartbeat`,{json:{}});return l.status===404||l.status===410?"stop":"continue"}catch{return"continue"}},async deliver({replyTurnId:a,engine:l,text:c,files:u}){let d=[],f=[],m=0;for(let h of u.slice(0,b9)){let y=h.sizeBytes??Math.floor(h.contentBase64.length*3/4);if(y<=y9&&m+y<=k9){m+=y,d.push({name:h.name.slice(0,200),contentBase64:h.contentBase64});continue}let b=await i(h);b?d.push({fileId:b}):f.push(h.name.slice(0,80))}let g={engine:l,idempotencyKey:`turn-reply:${a}`,turnId:a,text:w9(c,S9[l],f),attachments:d,notify:!0};for(let h=0;;h++){let y=0;try{let k=await s(`${n}/posts`,{json:g});if(y=k.status,k.ok)return!0}catch{y=0}if(!(y===0||y===401||y===408||y===429||y>=500)||h>=XD.length)return!1;await r(XD[h])}}}}var zD,y9,k9,b9,XD,v9,S9,ZD=p(()=>{"use strict";tb();zD=32e3,y9=8*1024*1024,k9=20*1024*1024,b9=10,XD=[2e3,4e3,8e3,16e3,32e3],v9=e=>new Promise(t=>setTimeout(t,e));S9=gp});async function Ys(e){if(e.auth){let t=await e.auth.authorization();if(t)return{bearer:t.bearer,kind:t.kind,boxId:t.boxId??e.boxId}}return{bearer:e.apiKey,kind:"api_key",boxId:e.boxId}}function Lr(e,t,r){r===401&&t.kind==="box_token"&&e.auth?.invalidateToken()}var zs=p(()=>{"use strict"});import{closeSync as _9,existsSync as x9,fstatSync as C9,openSync as E9,readSync as A9}from"node:fs";function tM(){return{lastSuccessAt:null,lastSuccessKind:null,steps24h:0,failures24h:{}}}function T9(e,t){let r=tM();for(let n of e){let o;try{o=JSON.parse(n)}catch{continue}let s=typeof o.at=="string"?Date.parse(o.at):Number.NaN;if(!Number.isNaN(s)&&(o.ok===!0&&(!r.lastSuccessAt||s>=Date.parse(r.lastSuccessAt))&&(r.lastSuccessAt=new Date(s).toISOString(),r.lastSuccessKind=o.kind??null),!(t-s>O9)&&(r.steps24h+=1,o.ok===!1))){let i=typeof o.reason=="string"&&/^[a-z_]{1,40}$/.test(o.reason)?o.reason:"other";r.failures24h[i]=(r.failures24h[i]??0)+1}}return r}function N9(e){if(!x9(e))return[];let t=E9(e,"r");try{let r=C9(t).size,n=Math.min(r,I9),o=Buffer.alloc(n);return A9(t,o,0,n,r-n),o.toString("utf8").split(`
192
+ `).filter(Boolean)}finally{_9(t)}}function hp(e=qk(),t=Date.now()){let r=eM.get(e);if(r&&t-r.at<P9)return r.summary;let n;try{n=T9(N9(e),t)}catch{n=tM()}return eM.set(e,{at:t,summary:n}),n}var I9,P9,O9,eM,rb=p(()=>{"use strict";il();I9=512*1024,P9=3e4,O9=1440*60*1e3;eM=new Map});import{appendFileSync as D9,mkdirSync as M9}from"node:fs";import{homedir as L9}from"node:os";import nb from"node:path";function rM(e=L9()){return nb.join(e,B9)}function nM(e){let r=(e instanceof Error?e.message:String(e)).split(":")[0].trim();return/^[a-z_]{1,40}$/.test(r)?r:"other"}function oM(e,t=rM()){try{M9(nb.dirname(t),{recursive:!0}),D9(t,`${JSON.stringify({kind:"step",...e})}
193
+ `,{encoding:"utf8",mode:384})}catch{}}function sM(e=rM()){return hp(e)}var B9,ob=p(()=>{"use strict";rb();B9=nb.join(".kynver","logs","chat-claude-code-steps.jsonl")});function go(e){let t=lp(e.provider,e.config,e.env??process.env),r=e.boxId?Dc(e.payloadAccess,e.boxId):null,n=Xo({engine:t,local:{chatComputerAccess:e.config.chatComputerAccess,chatWorkFolders:e.config.chatWorkFolders},website:r,home:e.home});return{engine:t,access:n}}var yp=p(()=>{"use strict";al();Pn()});function iM(e,t,r={}){let n=r.env??process.env,{engine:o,access:s}=go({provider:e,config:t,env:n});return{access:s.access,folders:s.folders.map(Ve),source:s.source==="website"?"local":s.source,engine:o,engineVersion:o==="none"?null:(r.version??cp)(o,n),log:(r.summary??hp)(),...o==="claude-code"?{claudeCode:{signedIn:(r.signedIn??up)(n),steps:(r.stepSummary??sM)()}}:{}}}var aM=p(()=>{"use strict";ct();al();ob();yp();rb()});function lM(e){try{return Pt().report(e)}catch{return null}}function kp(e,t){try{return iM(e,t)}catch{return}}function ll(){try{return BS().apiKey}catch{return"none"}}async function Xs(e,t){for(let n=0;n<e&&!t();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}var ho,bp=p(()=>{"use strict";K();zi();aM();zs();ho=Ys});function cM(e){let t=null;return QD({apiBaseUrl:e.apiBaseUrl??new URL(e.bridgeUrl).origin,agentOsId:e.agentOsId,bearer:async()=>(t=await ho(e),t.bearer),onUnauthorized:()=>{t&&Lr(e,t,401)}})}async function Le(e,t,r){let n=await ho(e),o=await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,events:r})});return Lr(e,n,o.status),o.ok}var cl=p(()=>{"use strict";ZD();zs();bp()});async function uM(e,t,r){return e.security?.noteRejected(r.code),console.error(JSON.stringify({event:"chat_turn_rejected",turnId:t.turnId,requestId:t.requestId??"",code:r.code,...r.detail?{detail:r.detail}:{},reason:r.reason,policy:r.policy,...r.extra??{}})),qs({at:new Date().toISOString(),chat:t.requestId??null,turnId:t.turnId,kind:"tool",engine:"none",access:"off",command:`turn refused: ${r.code}${r.detail?` (${r.detail})`:""}`,folder:"",ok:!1,reason:`turn_rejected_${r.code}`}),await Le(e,t.turnId,[{seq:0,kind:"error",error:jD(r.code,r.detail)}]).catch(()=>{}),{ok:!1}}async function sb(e,t,r){let n=VD({turnId:t.turnId,agentOsId:t.agentOsId,payload:t.payload},{agentOsId:e.agentOsId,policy:r.policy,nonces:r.nonces,env:r.env,nowSec:r.nowSec});if(!n.ok)return n.code==="replayed"&&n.replay?.state==="in_flight"?(e.security?.noteDuplicateOffer(),console.error(JSON.stringify({event:"chat_turn_duplicate_offer_dropped",turnId:t.turnId,requestId:t.requestId??"",firstSeenAt:n.replay.firstSeenAt,reason:n.reason})),{ok:!1}):uM(e,t,{code:n.code,reason:n.reason,policy:r.policy,...n.replay?{detail:n.replay.state,extra:{firstSeenAt:n.replay.firstSeenAt,firstTurnId:n.replay.turnId}}:{}});n.signed&&n.access?.others==="default"&&console.error(JSON.stringify({event:"chat_turn_non_owner",turnId:t.turnId,requestId:t.requestId??"",agentOsId:e.agentOsId,boxId:e.boxId,userId:n.userId??"",access:"off"}));let o=r.config;if(!o)try{o=A()}catch{o={}}let s=ID({signedAccess:n.access,boxId:e.boxId,agentOsId:e.agentOsId,engine:lp(e.chatProvider,o,r.env??process.env),local:{chatComputerAccess:o.chatComputerAccess,chatWorkFolders:o.chatWorkFolders},state:ip(r.stateFile),env:r.env,nowSec:r.nowSec});if(!s.ok)return uM(e,t,{code:s.code,detail:s.detail,reason:s.reason,policy:r.policy,extra:{from:Js(s.from),to:Js(s.to),signed:n.signed}});s.website&&DD(s.website,{file:r.stateFile});let a={...Xk(t.payload),...n.access?{computerAccess:n.access}:{}};return n.access||delete a.computerAccess,n.redelivered&&console.error(JSON.stringify({event:"chat_turn_redelivered",turnId:t.turnId,requestId:t.requestId??""})),{ok:!0,trust:{signed:n.signed,access:n.access},payload:a,redelivered:n.redelivered}}var ib=p(()=>{"use strict";K();PD();Gk();il();al();pp();Zk();cl()});var fn,vp=p(()=>{"use strict";fn=class{constructor(t,r=150){this.flushFn=t;this.floorMs=r}flushFn;floorMs;buffer="";timer=null;closed=!1;push(t){this.closed||!t||(this.buffer+=t,this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.flushNow()},this.floorMs)))}flushNow(){if(!this.buffer)return;let t=this.buffer;this.buffer="",this.flushFn(t)}flush(){this.closed||(this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}close(){this.closed||(this.closed=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}}});function dM(e){if(!Array.isArray(e)||e.length===0||e.some(n=>typeof n!="string"))return{ok:!1,mutating:!1,reason:"argv must be a non-empty string array"};for(let n of e){if(K9.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
194
+ `)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let t=e[0],r=e.length>1&&!e[1].startsWith("--")?`${t} ${e[1]}`:t;if(t==="doctor"){let n=e[1]&&!e[1].startsWith("--")?e[1]:void 0;return n&&!H9.has(n)?{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}:{ok:!0,mutating:e.some(s=>s==="--remediate"||s==="--remediate-default-repo"||s.startsWith("--remediate="))}}return t==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:r==="update finish"?{ok:!1,mutating:!0,reason:F9}:r==="run dispatch"?{ok:!1,mutating:!0,reason:W9}:U9.has(r)?{ok:!0,mutating:!1}:$9.has(r)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}}var U9,W9,F9,$9,K9,H9,pM=p(()=>{"use strict";U9=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list","update check","update status"]),W9="run dispatch is blocked from runtime_command \u2014 use agent_os_submit_action_intent with kind dispatch_workers (live dispatch requires Action Required approval)",F9='update finish is internal to `kynver update` \u2014 call ["update"] (confirmed) to update Kynver',$9=new Set(["run create","run sweep","worker start","worker stop","worker complete","cleanup","update"]),K9=["--secret","--api-key","--keeper-child"],H9=new Set(["runner-install","node-runtime","local-store","context-envelope","runtime-takeover"])});import{spawn as j9}from"node:child_process";function J9(e,t,r,n=process.env){let o=JS(r,{agentOsId:e,argv:t},n);return o.ok?null:`command authorization proof invalid: ${o.reason}`}async function mM(e,t,r={}){if(r.agentOsId){let a=J9(r.agentOsId,e,r.authProof,r.env??process.env);if(a)return{exitCode:null,timedOut:!1,refused:a}}else return{exitCode:null,timedOut:!1,refused:"command authorization proof required (missing agentOsId)"};let n=dM(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=r.cliEntry??process.argv[1],s=r.timeoutMs??V9,i=new fn(t);return new Promise(a=>{let l=0,c=!1,u=j9(process.execPath,[o,...e],Z({stdio:["ignore","pipe","pipe"],env:process.env})),d=m=>{if(l>=fM)return;let g=m.toString("utf8").slice(0,fM-l);l+=g.length,i.push(g)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,tt(u,"SIGTERM"),setTimeout(()=>tt(u,"SIGKILL"),G9).unref()},s);u.on("error",m=>{clearTimeout(f),i.push(`spawn failed: ${m.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",m=>{clearTimeout(f),i.close(),a({exitCode:m,timedOut:c})})})}var V9,G9,fM,gM=p(()=>{"use strict";M();vp();pM();Vi();V9=10*6e4,G9=5e3,fM=2e5});var mn,Rp=p(()=>{"use strict";mn=class{pending=new Set;track(t){let r=t.finally(()=>{this.pending.delete(r)});return this.pending.add(r),r}async drain(){this.pending.size!==0&&await Promise.allSettled([...this.pending])}}});async function ab(e,t){let r=0,n=!1,o=new mn,s=Array.isArray(t.payload?.argv)?t.payload.argv:[],i=await mM(s,a=>{n||o.track(Le(e,t.turnId,[{seq:r++,kind:"delta",text:a}]).then(l=>(l||(n=!0),l)))},{agentOsId:e.agentOsId,authProof:t.payload?.authProof});await o.drain(),n||(i.refused?await Le(e,t.turnId,[{seq:r++,kind:"error",error:`command_refused: ${i.refused}`}]).catch(()=>{}):await Le(e,t.turnId,[{seq:r++,kind:"final",message:{exitCode:i.exitCode,timedOut:i.timedOut}}]).catch(()=>{})),console.error(JSON.stringify({event:"command_turn_done",turnId:t.turnId,argv:s.slice(0,4),exitCode:i.exitCode,timedOut:i.timedOut,refused:i.refused??null}))}var lb=p(()=>{"use strict";gM();Rp();cl()});function wp(e){let t=e.appendLog??(s=>{qs(s)}),r=e.now??(()=>new Date),n=0,o=(s,i)=>Yk({at:r().toISOString(),chat:e.chat,turnId:e.turnId,engine:i.engine,access:i.access.access,folder:i.access.workDir,...s});return{sink:((s,i)=>{let a=o(s,i);n+=1,t(a),e.send(a)}),attach(s,i,a){let l=o(s,i);n+=1,t(l),e.send({...l,toolUseId:a.toolUseId,...a.file?{file:a.file}:{}})},get steps(){return n}}}var cb=p(()=>{"use strict";il()});import{readFileSync as q9,statSync as Y9}from"node:fs";import hM from"node:path";function Q9(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let n=r;if(n.type!=="tool_use"||n.name!==z9||typeof n.id!="string")continue;let o=n.input&&typeof n.input=="object"?n.input:{};t.push({toolUseId:n.id,rawPath:typeof o.path=="string"?o.path:""})}return t}function yo(e,t,r){return{step:{kind:"attach",path:e,ok:!1,reason:t,...r!==void 0?{outputBytes:r}:{}}}}function Z9(e,t,r={}){let n=r.stat??Y9,o=r.read??q9,s=r.maxBytes??X9,i=e.rawPath.trim();if(!i||i.includes("\0"))return yo(i,"invalid_path");let a=hM.resolve(t.workDir,Gl(i));if(t.access==="off")return yo(a,"access_off");if(!Lc(t,a))return yo(a,"outside_folders");let l;try{let c=n(a);if(!c.isFile())return yo(a,"not_a_file");l=c.size}catch{return yo(a,"not_found")}if(l>s)return yo(a,"too_large",l);try{let c=o(a);return{step:{kind:"attach",path:a,outputBytes:c.length,ok:!0},file:{name:hM.basename(a),sizeBytes:c.length,contentBase64:c.toString("base64")}}}catch{return yo(a,"read_failed")}}function yM(e,t,r){let n=Q9(e);for(let o of n){let s=Z9(o,t.access);r.attach(s.step,t,{toolUseId:o.toolUseId,...s.file?{file:s.file}:{}})}return n.length}var z9,X9,kM=p(()=>{"use strict";Pn();ct();z9="attach_file",X9=50*1024*1024});import{readFileSync as e7}from"node:fs";import{homedir as t7,platform as r7}from"node:os";import n7 from"node:path";import{execFileSync as o7}from"node:child_process";function bM(e,t=Date.now()){try{let r=JSON.parse(e),n=r.claudeAiOauth?.accessToken,o=r.claudeAiOauth?.expiresAt;return typeof n!="string"||!n||typeof o=="number"&&o-t<6e4?null:n}catch{return null}}function s7(){if(r7()==="darwin")try{let e=o7("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return bM(e.trim())}catch{return null}try{let e=e7(n7.join(t7(),".claude",".credentials.json"),"utf8");return bM(e)}catch{return null}}function ul(e=process.env,t={}){let r=e.ANTHROPIC_API_KEY?.trim();if(r)return{kind:"api_key",key:r};let n=e.KYNVER_CHAT_USE_CLAUDE_OAUTH;if(t.oauthOptIn===!0||n==="1"||n==="true"||n==="yes"){let s=s7();if(s)return{kind:"oauth",token:s}}return null}var ub=p(()=>{"use strict"});import{existsSync as vM}from"node:fs";import{homedir as i7}from"node:os";import dl from"node:path";import{spawnSync as a7}from"node:child_process";function l7(e){if(dl.isAbsolute(e)||e.includes("/")||e.includes("\\"))return vM(e);try{let t=a7(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function c7(e=process.env){let t=i7(),r=[],n=e.CODEX_HOME?.trim();return n&&r.push(dl.join(dl.resolve(n),"auth.json")),r.push(dl.join(t,".codex","auth.json")),r.push(dl.join(t,".config","codex","auth.json")),r}function RM(e){return`${e.error}: ${e.detail}`}function _p(e=process.env){let t=e.KYNVER_CODEX_BIN?.trim()||e.CODEX_BIN?.trim()||Cr();return l7(t)?e.CODEX_API_KEY?.trim()?{ok:!0,creds:{codexBin:t,authSource:"api_key_env"}}:c7(e).find(n=>vM(n))?{ok:!0,creds:{codexBin:t,authSource:"oauth_local"}}:{ok:!1,error:db,detail:"Run `codex login` on this computer, or set CODEX_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Sp,detail:"`codex` CLI not found. Install the Codex CLI (https://developers.openai.com/codex/) and keep it on PATH."}}var Sp,db,xp=p(()=>{"use strict";zn();Sp="codex_cli_unavailable",db="codex_not_logged_in"});import{spawnSync as u7}from"node:child_process";function p7(e,t,r){return d7.test(`${t}
195
+ ${r}`)?!1:e===0}function wM(e,t=process.env){try{let[r,n]=le(e,["models"]),o=u7(r,n,{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...t,CI:"1",NO_COLOR:"1"}}),s=o.stdout??"",i=o.stderr??"";return o.error&&o.error.code==="ENOENT"?{ok:!1,note:"agy models: binary missing"}:p7(o.status,s,i)?{ok:!0,note:"agy models: signed in"}:{ok:!1,note:"agy models: not signed in"}}catch(r){return{ok:!1,note:r instanceof Error?r.message:"agy models probe failed"}}}var d7,SM=p(()=>{"use strict";ze();d7=/authentication required|not logged in|you are not logged|not authenticated/i});import{existsSync as f7,readFileSync as m7}from"node:fs";import{homedir as g7}from"node:os";import _M from"node:path";import{spawnSync as h7}from"node:child_process";function y7(e){if(_M.isAbsolute(e)||e.includes("/")||e.includes("\\"))return f7(e);try{let t=h7(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function k7(){return _M.join(g7(),".gemini","antigravity-cli","settings.json")}function b7(e){if(!e?.trim())return null;try{let t=JSON.parse(e);return typeof t.modelProvider=="string"?t.modelProvider.trim().toLowerCase():null}catch{return null}}function v7(){try{return m7(k7(),"utf8")}catch{return null}}function R7(e,t){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()?b7(t)==="gemini":!1}function xM(e){return`${e.error}: ${e.detail}`}function Ap(e=process.env,t={}){let r=kt(e);if(!(t.commandOnPath??y7)(r))return{ok:!1,error:Cp,detail:"`agy` not found. Install Google Antigravity (https://antigravity.google/docs/cli/install) and keep `agy` on PATH."};if((t.probeAuth??wM)(r,e).ok)return{ok:!0,creds:{bin:r,authSource:"keyring"}};let s=(t.readSettings??(()=>v7()))(e);return R7(e,s)?{ok:!0,creds:{bin:r,authSource:"api_key_settings"}}:{ok:!1,error:Ep,detail:'Run `agy` once on this computer to sign in. A Gemini API key does not sign Google Antigravity in unless ~/.gemini/antigravity-cli/settings.json sets "modelProvider" to "gemini". Website chat will not fall back to hosted models.'}}var Cp,Ep,Ip=p(()=>{"use strict";Zn();SM();Cp="antigravity_cli_unavailable",Ep="antigravity_not_logged_in"});function pl(e=process.env){let t=e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim();if(!t)return null;let r=(e.KYNVER_GEMINI_BASE_URL?.trim()||w7).replace(/\/+$/,"");return{apiKey:t,baseUrl:r,label:"gemini"}}function fl(e=process.env){let t=e.KYNVER_OPENAI_API_KEY?.trim()||e.OPENAI_API_KEY?.trim();if(t){let o=(e.KYNVER_OPENAI_BASE_URL?.trim()||e.OPENAI_BASE_URL?.trim()||S7).replace(/\/+$/,"");return{apiKey:t,baseUrl:o,label:"openai"}}let r=e.KYNVER_WORKER_BASE_URL?.trim(),n=e.KYNVER_WORKER_API_KEY?.trim();return r&&n?{apiKey:n,baseUrl:r.replace(/\/+$/,""),label:"openai"}:null}var w7,S7,pb=p(()=>{"use strict";w7="https://generativelanguage.googleapis.com/v1beta/openai",S7="https://api.openai.com/v1"});function x7(e,t=process.env){return{anthropic:()=>{let r=ul(t,{oauthOptIn:e.chatUseClaudeOauth===!0});return r?r.kind==="oauth"?"subscription":"api_key":null},codex:()=>{let r=_p(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},cursor:()=>{let r=Ou(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},gemini:()=>{let r=t;if(mo({chatProvider:e.chatProvider,workerProvider:e.workerProvider},r)==="antigravity"){let n=Ap(r);return n.ok?n.creds.authSource==="api_key_settings"?"api_key":"subscription":null}return pl(t)?"api_key":null},openai:()=>fl(t)?"api_key":null}}function C7(e){if(!e?.trim())return[];let t=[];for(let r of e.split(/[\s,]+/)){let n=r.indexOf(":");if(n<=0)continue;let o=r.slice(n+1).trim();!o||o.length>80||t.push({provider:Gs(r.slice(0,n)),model:o})}return t}function fb(e,t){let r=t?.trim();r&&!e.includes(r)&&e.push(r)}function E7(e,t,r=process.env){let n=Mr(e),o=C7(r.KYNVER_CHAT_EXTRA_MODELS),s=[];for(let i of mb){let a=null;try{a=t[i]()}catch{a=null}if(!a)continue;let l=i===n?po(i,e,r):po(i,{},{...r,KYNVER_CHAT_MODEL:void 0}),c=[];fb(c,l);for(let u of _7[i])fb(c,u);for(let u of o)u.provider===i&&fb(c,u.model);s.push({provider:i,models:c,defaultModel:l,auth:a})}return s.sort((i,a)=>i.provider===n?-1:a.provider===n?1:0)}function Qs(e,t=process.env,r=Date.now()){let n=JSON.stringify([e.chatProvider,e.workerProvider,e.defaultModel,e.chatUseClaudeOauth,t.KYNVER_CHAT_MODEL,t.KYNVER_CHAT_EXTRA_MODELS]);if(ml&&ml.key===n&&r-ml.at<A7)return ml.value;let o=E7(e,x7(e,t),t);return ml={key:n,at:r,value:o},o}var mb,_7,A7,ml,gl=p(()=>{"use strict";ub();xp();ws();Ip();ap();pb();fo();mb=["anthropic","codex","openai","gemini","cursor"],_7={anthropic:["claude-sonnet-4-6","claude-opus-4-8","claude-opus-4-7","claude-haiku-4-5-20251001"],codex:["gpt-5.5","gpt-5.4","o4-mini"],openai:["gpt-5.5","gpt-5.4","gpt-4o-mini"],gemini:["gemini-2.5-pro","gemini-2.5-flash"],cursor:["composer-2.5"]};A7=6e4,ml=null});function hl(e){if(typeof e=="string"){let n=e.indexOf(":");return n<=0?null:hl({provider:e.slice(0,n),model:e.slice(n+1)})}if(!e||typeof e!="object")return null;let t=e;if(typeof t.provider!="string"||typeof t.model!="string")return null;let r=t.model.trim();return!r||r.length>80||!/^[\w.:@/-]+$/.test(r)?null:{provider:Gs(t.provider),model:r}}function EM(e){let{requested:t,catalog:r,primary:n}=e;if(!t)return{provider:n.provider,model:n.model,requested:null,fallbackReason:null};let o=r.find(s=>s.provider===t.provider);return o&&o.models.includes(t.model)?{provider:t.provider,model:t.model,requested:null,fallbackReason:null}:{provider:n.provider,model:n.model,requested:t,fallbackReason:"model_unavailable"}}function AM(e,t){for(let r of mb){if(t.includes(r))continue;let n=e.find(o=>o.provider===r);if(n)return{provider:r,model:n.defaultModel}}return null}function IM(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return t?I7.some(r=>r.test(t)):!1}function CM(e){return P7[e]}function PM(e,t){if(!e.fallbackReason)return null;let r=t??e.requested,n=r?`${r.provider}:${r.model}`:"auto";return`${e.fallbackReason}:${n}->${e.provider}:${e.model}`}function OM(e,t){let r=`${CM(e.provider)} (${e.model})`;if(e.fallbackReason==="usage_limit")return`${t?CM(t.provider):"Your usual model"} has reached its usage limit on your computer, so this answer comes from ${r} instead.`;if(e.fallbackReason==="model_unavailable"){let n=t??e.requested;return`${n?`${n.model}`:"The model chosen in Settings"} isn't available on your computer right now, so this answer uses Auto: ${r}. You can pick another model in Settings.`}return null}var I7,P7,gb=p(()=>{"use strict";gl();fo();I7=[/usage limit/i,/limit (?:has been )?reached/i,/hit your (?:usage )?limit/i,/rate_limit_error/i,/quota (?:exceeded|exhausted)/i,/insufficient_quota/i,/HTTP 429\b/];P7={anthropic:"Claude",codex:"ChatGPT",openai:"ChatGPT",gemini:"Gemini",cursor:"Cursor"}});async function Br(e,t=3,r=n=>new Promise(o=>setTimeout(o,n))){for(let n=0;n<t;n+=1){try{if(await e())return!0}catch{}n<t-1&&await r(200*(n+1))}return!1}var hb=p(()=>{"use strict"});function NM(e){if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.type!="string"||!O7.has(t.type)||t.type==="text"&&(typeof t.text!="string"||!t.text.trim()))}function TM(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.content=="string")return t.content.trim()?{...t,content:[{type:"text",text:t.content,cache_control:yl}]}:null;if(!Array.isArray(t.content)||t.content.length===0)return null;let r=t.content[t.content.length-1];return NM(r)?{...t,content:[...t.content.slice(0,-1),{...r,cache_control:yl}]}:null}function T7(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function N7(e){for(let t=e.length-1;t>=0;t-=1){let r=e[t];if(!(!r||typeof r!="object"||r.role!=="user")&&!T7(r.content))return t}return-1}function yb(e){return JSON.stringify(e??null).includes('"cache_control"')}function DM(e){if(yb(e.system)||yb(e.tools)||yb(e.messages))return e;let t=e.tools;if(Array.isArray(t)&&t.length>0){let i=e.toolBreakpointName?t.findIndex(c=>!!c&&typeof c=="object"&&c.name===e.toolBreakpointName):-1,a=i>=0?i:t.length-1,l=t[a];l&&typeof l=="object"&&(t=[...t.slice(0,a),{...l,cache_control:yl},...t.slice(a+1)])}let r=e.system;if(typeof r=="string")r.trim()&&(r=[{type:"text",text:r,cache_control:yl}]);else if(Array.isArray(r)&&r.length>0){let i=r[r.length-1];NM(i)&&(r=[...r.slice(0,-1),{...i,cache_control:yl}])}let n=[...e.messages],o=-1;for(let i=n.length-1;i>=0;i-=1){let a=TM(n[i]);if(a){n[i]=a,o=i;break}}let s=N7(n)-1;if(s>=0&&s<o)for(let i=s;i>=0;i-=1){let a=TM(n[i]);if(a){n[i]=a;break}}return{system:r,tools:t,messages:n}}var yl,O7,MM=p(()=>{"use strict";yl={type:"ephemeral"},O7=new Set(["text","image","document","tool_use","tool_result","search_result","server_tool_use","web_search_tool_result","web_fetch_tool_result","code_execution_tool_result"])});function LM(e){if(!e||typeof e!="object")return null;let t=e,r=i=>typeof i=="number"&&Number.isFinite(i)&&i>=0?Math.floor(i):null,n=r(t.stepsUsed),o=r(t.maxSteps),s=r(t.segment);return typeof t.jobId!="string"||!t.jobId||n===null||o===null||o===0?null:{jobId:t.jobId.slice(0,64),stepsUsed:n,maxSteps:o,segment:s??1}}function M7(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0}}function L7(e,t){let r=t;switch(r.type){case"message_start":return e.inputTokens=r.message?.usage?.input_tokens??0,e.cacheReadTokens=r.message?.usage?.cache_read_input_tokens??0,e.cacheCreationTokens=r.message?.usage?.cache_creation_input_tokens??0,"";case"content_block_start":{let n=r.index??e.blocks.length;return e.blocks[n]={type:r.content_block?.type==="tool_use"?"tool_use":"text",text:"",id:r.content_block?.id,name:r.content_block?.name,inputJson:""},""}case"content_block_delta":{let n=e.blocks[r.index??e.blocks.length-1];return n?r.delta?.type==="text_delta"&&r.delta.text?(n.text+=r.delta.text,r.delta.text):(r.delta?.type==="input_json_delta"&&r.delta.partial_json&&(n.inputJson+=r.delta.partial_json),""):""}case"message_delta":return r.delta?.stop_reason&&(e.stopReason=r.delta.stop_reason),typeof r.usage?.output_tokens=="number"&&(e.outputTokens=r.usage.output_tokens),"";default:return""}}function B7(e){let t=[];for(let r of e.blocks)if(r)if(r.type==="tool_use"){let n={};try{n=r.inputJson?JSON.parse(r.inputJson):{}}catch{n={}}t.push({type:"tool_use",id:r.id??"",name:r.name??"",input:n})}else r.text&&t.push({type:"text",text:r.text});return{content:t,stop_reason:e.stopReason??"end_turn",usage:{input_tokens:e.inputTokens,output_tokens:e.outputTokens,cache_read_input_tokens:e.cacheReadTokens,cache_creation_input_tokens:e.cacheCreationTokens}}}async function*U7(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await t.read();if(o)break;n+=r.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
196
+ `))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{t.releaseLock()}}function W7(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function BM(e){let{creds:t,model:r,payload:n}=e,o={"Content-Type":"application/json","anthropic-version":"2023-06-01"},s=n.system;t.kind==="api_key"?o["x-api-key"]=t.key:(o.Authorization=`Bearer ${t.token}`,o["anthropic-beta"]="oauth-2025-04-20",s=[{type:"text",text:D7},{type:"text",text:n.system}]);let i=DM({system:s,tools:Array.isArray(n.tools)&&n.tools.length>0?n.tools:void 0,messages:n.messages,toolBreakpointName:typeof n.cacheToolName=="string"?n.cacheToolName:void 0}),a=await fetch(`${W7()}/v1/messages`,{method:"POST",headers:o,signal:e.signal,body:JSON.stringify({model:r,max_tokens:n.maxTokens,system:i.system,messages:i.messages,...i.tools?{tools:i.tools}:{},...n.temperature!==void 0?{temperature:n.temperature}:{},stream:!0})});if(!a.ok||!a.body){let c=await a.text().catch(()=>"");throw new Error(`Anthropic stream failed: HTTP ${a.status}${c?` \u2014 ${c.slice(0,300)}`:""}`)}let l=M7();for await(let c of U7(a.body)){let u=L7(l,c);u&&e.onDelta(u)}return B7(l)}var D7,kb=p(()=>{"use strict";MM();D7="You are Claude Code, Anthropic's official CLI for Claude."});function Xt(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let n=r;typeof n.name!="string"||!n.name.trim()||t.push({name:n.name.trim(),description:typeof n.description=="string"?n.description:"",inputSchema:n.input_schema??{}})}return t}function $7(e){let t=e.replace(/\s+/g," ").trim();return t.length>UM?`${t.slice(0,UM-1)}\u2026`:t}function FM(e,t=F7){if(e.length===0)return"";let r=["Kynver server tools:","","You can call the tools listed below. They run on the Kynver server, not on this machine.","To call one, reply with a fenced block and nothing after it:","",gn,'{"name": "<tool name>", "input": { ... }}',"```","","Rules:","- Use a name from the list below verbatim. A name that is not on the list is ignored.","- `input` must be a JSON object matching that tool's schema.","- One block per reply. Stop after it; the result comes back on the next turn.","- Say what you are about to do in one short sentence before the block.","- If no tool is needed, just answer normally and emit no block.",`- ${Pp}`,"","Tools:"].join(`
207
197
  `),n=[],o=r.length,s=[];for(let c of e){let u=`
208
198
  - ${c.name}: ${$7(c.description)}
209
199
  input schema: ${JSON.stringify(c.inputSchema)}`;if(o+u.length>t){s.push(c.name);continue}o+=u.length,n.push(u)}let i=s.length,a=s.slice(0,40).join(", ")+(i>40?", \u2026":""),l=i>0?`
210
200
 
211
- [${i} further tool(s) not shown this turn \u2014 do not guess their names or inputs. They exist by name only: ${a}. If the task needs one, call load_tools("connected", service) with that app's name to get a shorter list that fits.]`:"";return`${r}${n.join("")}${l}`}function V7(e){let t=[],r=0;for(;;){let n=e.indexOf(cn,r);if(n===-1)break;let o=n+cn.length,s=e.indexOf("```",o);if(s===-1||e.startsWith(cn,s))return{fences:t,unterminated:{start:n,body:e.slice(o)}};t.push({start:n,end:s+3,body:e.slice(o,s)}),r=s+3}return{fences:t,unterminated:null}}function un(e,t){let{fences:r,unterminated:n}=V7(e);if(r.length===0&&!n)return{text:e,calls:[],rejected:[],cut:null};let o=[],s=[],i="",a=0;for(let c of r){i+=e.slice(a,c.start),a=c.end;let u;try{u=JSON.parse(c.body.trim())}catch{s.push("malformed");continue}let d=u,f=typeof d?.name=="string"?d.name.trim():"";if(!f||!t.has(f)){s.push(f||"unnamed");continue}let m=d.input&&typeof d.input=="object"&&!Array.isArray(d.input)?d.input:{};o.push({name:f,input:m})}let l=null;return n&&(i+=e.slice(a,n.start),a=e.length,l={name:(j7.exec(n.body)?.[1]?.trim()??"")||null}),i+=e.slice(a),{text:i.trim(),calls:o,rejected:s,cut:l}}function EM(e,t){return`cursor_${e}_${t}`}function dn(e,t,r=""){let n=[],o=`${e.text}${r}`;return o&&n.push({type:"text",text:o}),e.calls.forEach((s,i)=>{n.push({type:"tool_use",id:EM(t,i),name:s.name,input:s.input})}),e.cut&&n.push({type:"tool_use",id:EM(t,"cut"),name:H7,input:{tool:e.cut.name,reason:"unterminated_fence"}}),{content:n,stop_reason:e.calls.length>0||e.cut?"tool_use":"end_turn"}}function G7(e){let t=Math.min(e.length,cn.length-1);for(let r=t;r>0;r-=1)if(cn.startsWith(e.slice(e.length-r)))return r;return 0}var cn,vp,K7,CM,H7,j7,zt,Xs=p(()=>{"use strict";cn="```kynver-tool",vp="Call a Kynver tool only by writing the fenced block in this reply. Never run a shell command, echo, or local script to imitate the fence. A shell command does not call the tool and the server will not run it.";K7=64e3,CM=600;H7="kynver_tool_call_cut",j7=/"name"\s*:\s*"([^"\\]*)"/;zt=class{held="";inFence=!1;push(t){this.held+=t;let r="";for(;;){if(this.inFence){let s=this.held.indexOf("```");if(s===-1)return this.held=this.held.slice(-2),r;this.held=this.held.slice(s+3),this.inFence=!1;continue}let n=this.held.indexOf(cn);if(n!==-1){r+=this.held.slice(0,n),this.held=this.held.slice(n+cn.length),this.inFence=!0;continue}let o=G7(this.held);return r+=this.held.slice(0,this.held.length-o),this.held=this.held.slice(this.held.length-o),r}}end(){if(this.inFence)return this.held="","";let t=this.held;return this.held="",t}}});function PM(e){return`[\u2026 ${e} more characters of the user's message omitted to fit this prompt \u2026]`}function J7(e){return`[\u2026 ${e} more characters of Kynver's turn context omitted to fit this prompt \u2026]`}function q7(e,t){if(e.length<=t)return e;let r=e.indexOf(IM),n=r>=0?e.indexOf(Qs,r):-1;if(r<0||n<0)return Zs(e,t,PM);let o=e.slice(0,r),s=e.slice(r,n+Qs.length),i=Zs(e.slice(n+Qs.length),Math.max(0,t-o.length),PM),a=t-o.length-i.length,l=Qs.length+1,c=s.slice(0,s.length-Qs.length),u=s.length<=a?s:`${Zs(c,Math.max(IM.length,a-l-100),J7)}
212
- ${Qs}`;return`${o}${u}${i}`}function ob(e){return`[\u2026 ${e} more characters of this tool result omitted to fit this prompt; call the tool again if you need them \u2026]`}function Y7(e){return`[\u2026 ${e} more characters omitted to fit this prompt \u2026]`}function Zs(e,t,r){if(e.length<=t)return e;let n=Math.max(0,t);return`${e.slice(0,n)}
213
- ${r(e.length-n)}`}function TM(e,t){let r=e.map(l=>({...l,kept:l.text,dropped:!1})),n=()=>r.reduce((l,c)=>c.dropped?l:l+c.kept.length+2,0),o=()=>r.filter(l=>!l.dropped).map(l=>l.kept).join(`
201
+ [${i} further tool(s) not shown this turn \u2014 do not guess their names or inputs. They exist by name only: ${a}. If the task needs one, call load_tools("connected", service) with that app's name to get a shorter list that fits.]`:"";return`${r}${n.join("")}${l}`}function j7(e){let t=[],r=0;for(;;){let n=e.indexOf(gn,r);if(n===-1)break;let o=n+gn.length,s=e.indexOf("```",o);if(s===-1||e.startsWith(gn,s))return{fences:t,unterminated:{start:n,body:e.slice(o)}};t.push({start:n,end:s+3,body:e.slice(o,s)}),r=s+3}return{fences:t,unterminated:null}}function hn(e,t){let{fences:r,unterminated:n}=j7(e);if(r.length===0&&!n)return{text:e,calls:[],rejected:[],cut:null};let o=[],s=[],i="",a=0;for(let c of r){i+=e.slice(a,c.start),a=c.end;let u;try{u=JSON.parse(c.body.trim())}catch{s.push("malformed");continue}let d=u,f=typeof d?.name=="string"?d.name.trim():"";if(!f||!t.has(f)){s.push(f||"unnamed");continue}let m=d.input&&typeof d.input=="object"&&!Array.isArray(d.input)?d.input:{};o.push({name:f,input:m})}let l=null;return n&&(i+=e.slice(a,n.start),a=e.length,l={name:(H7.exec(n.body)?.[1]?.trim()??"")||null}),i+=e.slice(a),{text:i.trim(),calls:o,rejected:s,cut:l}}function WM(e,t){return`cursor_${e}_${t}`}function yn(e,t,r=""){let n=[],o=`${e.text}${r}`;return o&&n.push({type:"text",text:o}),e.calls.forEach((s,i)=>{n.push({type:"tool_use",id:WM(t,i),name:s.name,input:s.input})}),e.cut&&n.push({type:"tool_use",id:WM(t,"cut"),name:K7,input:{tool:e.cut.name,reason:"unterminated_fence"}}),{content:n,stop_reason:e.calls.length>0||e.cut?"tool_use":"end_turn"}}function V7(e){let t=Math.min(e.length,gn.length-1);for(let r=t;r>0;r-=1)if(gn.startsWith(e.slice(e.length-r)))return r;return 0}var gn,Pp,F7,UM,K7,H7,zt,Zs=p(()=>{"use strict";gn="```kynver-tool",Pp="Call a Kynver tool only by writing the fenced block in this reply. Never run a shell command, echo, or local script to imitate the fence. A shell command does not call the tool and the server will not run it.";F7=64e3,UM=600;K7="kynver_tool_call_cut",H7=/"name"\s*:\s*"([^"\\]*)"/;zt=class{held="";inFence=!1;push(t){this.held+=t;let r="";for(;;){if(this.inFence){let s=this.held.indexOf("```");if(s===-1)return this.held=this.held.slice(-2),r;this.held=this.held.slice(s+3),this.inFence=!1;continue}let n=this.held.indexOf(gn);if(n!==-1){r+=this.held.slice(0,n),this.held=this.held.slice(n+gn.length),this.inFence=!0;continue}let o=V7(this.held);return r+=this.held.slice(0,this.held.length-o),this.held=this.held.slice(this.held.length-o),r}}end(){if(this.inFence)return this.held="","";let t=this.held;return this.held="",t}}});function $M(e){return`[\u2026 ${e} more characters of the user's message omitted to fit this prompt \u2026]`}function G7(e){return`[\u2026 ${e} more characters of Kynver's turn context omitted to fit this prompt \u2026]`}function J7(e,t){if(e.length<=t)return e;let r=e.indexOf(KM),n=r>=0?e.indexOf(ei,r):-1;if(r<0||n<0)return ti(e,t,$M);let o=e.slice(0,r),s=e.slice(r,n+ei.length),i=ti(e.slice(n+ei.length),Math.max(0,t-o.length),$M),a=t-o.length-i.length,l=ei.length+1,c=s.slice(0,s.length-ei.length),u=s.length<=a?s:`${ti(c,Math.max(KM.length,a-l-100),G7)}
202
+ ${ei}`;return`${o}${u}${i}`}function bb(e){return`[\u2026 ${e} more characters of this tool result omitted to fit this prompt; call the tool again if you need them \u2026]`}function q7(e){return`[\u2026 ${e} more characters omitted to fit this prompt \u2026]`}function ti(e,t,r){if(e.length<=t)return e;let n=Math.max(0,t);return`${e.slice(0,n)}
203
+ ${r(e.length-n)}`}function jM(e,t){let r=e.map(l=>({...l,kept:l.text,dropped:!1})),n=()=>r.reduce((l,c)=>c.dropped?l:l+c.kept.length+2,0),o=()=>r.filter(l=>!l.dropped).map(l=>l.kept).join(`
214
204
 
215
- `);if(r.length===0||n()<=t)return{body:o(),dropped:!1};let s=-1;for(let l=r.length-1;l>=0;l-=1)if(r[l].ask){s=l;break}let i=r.length-1;s>=0&&(r[s].kept=q7(r[s].kept,8e3));for(let l=0;l<i&&n()>t;l+=1){let c=r[l];c.renderShrunk&&c.kept.length>1500&&(c.kept=c.renderShrunk(1500))}let a=s>=0?s:i;for(let l=0;l<a&&n()>t;l+=1)r[l].dropped=!0;for(let l=s+1;l<i&&n()>t;l+=1)r[l].dropped=!0;if(n()>t&&!r[i].ask){let l=n()-r[i].kept.length-2,c=Math.max(0,t-l-2),u=r[i].renderShrunk?ob:Y7;r[i].kept=Zs(r[i].kept,Math.max(0,c-u(r[i].kept.length).length-1),u)}return{body:o(),dropped:r.some(l=>l.dropped)}}var OM,IM,Qs,NM=p(()=>{"use strict";OM="[System reminder]";IM="<turn_context>",Qs="</turn_context>"});function Q7(e){if(typeof e=="string")return e;if(!Array.isArray(e))return e===void 0?"":JSON.stringify(e);let t=[];for(let r of e){if(typeof r=="string"){t.push(r);continue}if(!r||typeof r!="object")continue;let n=r;typeof n.text=="string"&&t.push(n.text)}return t.join(`
216
- `)}function Z7(e){return typeof e=="string"?e.trim():Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
217
- `).trim():""}function eQ(e){let t=Z7(e);return t.length>0&&!t.startsWith(OM)}function tQ(e){return Array.isArray(e)&&e.some(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function sb(e,t){if(typeof e=="string")return e;if(!Array.isArray(e))return"";let r=[];for(let n of e){if(!n||typeof n!="object")continue;let o=n;if(o.type==="text"&&typeof o.text=="string"&&o.text.trim())r.push(o.text);else if(o.type==="tool_result"){let s=Q7(o.content??o.text),i=t===void 0?s:Zs(s,t,ob);r.push(o.is_error?`[tool error]
205
+ `);if(r.length===0||n()<=t)return{body:o(),dropped:!1};let s=-1;for(let l=r.length-1;l>=0;l-=1)if(r[l].ask){s=l;break}let i=r.length-1;s>=0&&(r[s].kept=J7(r[s].kept,8e3));for(let l=0;l<i&&n()>t;l+=1){let c=r[l];c.renderShrunk&&c.kept.length>1500&&(c.kept=c.renderShrunk(1500))}let a=s>=0?s:i;for(let l=0;l<a&&n()>t;l+=1)r[l].dropped=!0;for(let l=s+1;l<i&&n()>t;l+=1)r[l].dropped=!0;if(n()>t&&!r[i].ask){let l=n()-r[i].kept.length-2,c=Math.max(0,t-l-2),u=r[i].renderShrunk?bb:q7;r[i].kept=ti(r[i].kept,Math.max(0,c-u(r[i].kept.length).length-1),u)}return{body:o(),dropped:r.some(l=>l.dropped)}}var HM,KM,ei,VM=p(()=>{"use strict";HM="[System reminder]";KM="<turn_context>",ei="</turn_context>"});function X7(e){if(typeof e=="string")return e;if(!Array.isArray(e))return e===void 0?"":JSON.stringify(e);let t=[];for(let r of e){if(typeof r=="string"){t.push(r);continue}if(!r||typeof r!="object")continue;let n=r;typeof n.text=="string"&&t.push(n.text)}return t.join(`
206
+ `)}function Q7(e){return typeof e=="string"?e.trim():Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
207
+ `).trim():""}function Z7(e){let t=Q7(e);return t.length>0&&!t.startsWith(HM)}function eQ(e){return Array.isArray(e)&&e.some(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function vb(e,t){if(typeof e=="string")return e;if(!Array.isArray(e))return"";let r=[];for(let n of e){if(!n||typeof n!="object")continue;let o=n;if(o.type==="text"&&typeof o.text=="string"&&o.text.trim())r.push(o.text);else if(o.type==="tool_result"){let s=X7(o.content??o.text),i=t===void 0?s:ti(s,t,bb);r.push(o.is_error?`[tool error]
218
208
  ${i}`:`[tool result]
219
209
  ${i}`)}else if(o.type==="tool_use"&&typeof o.name=="string"){let s=o.input===void 0?"":` ${JSON.stringify(o.input)}`;r.push(`[tool call: ${o.name}${s}]`)}}return r.join(`
220
- `)}function oQ(e){let t=typeof e=="string"?e:e?.access,r=typeof e=="string"||e!==void 0&&e.source!=="default";if(!t||t==="off"||!r)return[LM,rQ,"Never use runtime_command run dispatch and never implement coding tasks inline in the chat workspace when a worker was requested or dispatch failed.",BM,vp].join(" ");let n=t==="full"?"The user gave you their whole computer: you may run commands, read and write files and research the web anywhere on it.":"The user gave you access to their computer: run commands, read and write files and research the web in the folder you started in"+(t==="folders"?" and the other folders they chose.":".");return[LM,`${n} Do the work there yourself and say what you ran and what you changed.`,`Local commands are only for this computer. ${vp}`,nQ,"Send harness workers only for factory PR work (changes to the Kynver repo, PRs, harness worktrees) \u2014 call agent_os_submit_action_intent with kind dispatch_workers (dryRun:true to preview; live dispatch creates Action Required approval).",BM].join(" ")}function sQ(e){return e==="assistant"?"Assistant":e==="system"?"System":"User"}function WM(e){return sb(e)}function ib(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let o=t==="agent"?r??Xt(e.tools):[],s=AM(o),i=typeof n=="string"?n:n?.access,a=[],l=typeof e.system=="string"?e.system.trim():"";l&&a.push(`System:
221
- ${l}`),a.push(t==="ask"?"This is a website chat turn in Ask mode. Answer the user in plain language. Do not invent Kynver server tool calls.":oQ(n)),i==="off"&&a.push(X7);let c=t==="agent"?_M(e.longJob):null;c&&a.push(`Long job in progress: step ${c.stepsUsed} of up to ${c.maxSteps} (segment ${c.segment}). Keep working through the plan \u2014 don't settle for partial data \u2014 and save progress with long_job_checkpoint after each sub-task.`),s&&a.push(s);let u=[],d=-1;if(Array.isArray(e.messages))for(let y of e.messages){if(!y||typeof y!="object")continue;let v=y,k=sb(v.content);if(!k.trim())continue;let b=sQ(v.role);v.role!=="assistant"&&v.role!=="system"&&eQ(v.content)&&(d=u.length);let S=v.content;u.push({text:`${b}:
222
- ${k}`,ask:!1,renderShrunk:tQ(S)?R=>`${b}:
223
- ${sb(S,R)}`:null})}d>=0&&(u[d].ask=!0);let f=a.join(`
210
+ `)}function nQ(e){let t=typeof e=="string"?e:e?.access,r=typeof e=="string"||e!==void 0&&e.source!=="default";if(!t||t==="off"||!r)return[qM,tQ,"Never use runtime_command run dispatch and never implement coding tasks inline in the chat workspace when a worker was requested or dispatch failed.",YM,Pp].join(" ");let n=t==="full"?"The user gave you their whole computer: you may run commands, read and write files and research the web anywhere on it.":"The user gave you access to their computer: run commands, read and write files and research the web in the folder you started in"+(t==="folders"?" and the other folders they chose.":".");return[qM,`${n} Do the work there yourself and say what you ran and what you changed.`,`Local commands are only for this computer. ${Pp}`,rQ,"Send harness workers only for factory PR work (changes to the Kynver repo, PRs, harness worktrees) \u2014 call agent_os_submit_action_intent with kind dispatch_workers (dryRun:true to preview; live dispatch creates Action Required approval).",YM].join(" ")}function oQ(e){return e==="assistant"?"Assistant":e==="system"?"System":"User"}function zM(e){return vb(e)}function Rb(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let o=t==="agent"?r??Xt(e.tools):[],s=FM(o),i=typeof n=="string"?n:n?.access,a=[],l=typeof e.system=="string"?e.system.trim():"";l&&a.push(`System:
211
+ ${l}`),a.push(t==="ask"?"This is a website chat turn in Ask mode. Answer the user in plain language. Do not invent Kynver server tool calls.":nQ(n)),i==="off"&&a.push(z7);let c=t==="agent"?LM(e.longJob):null;c&&a.push(`Long job in progress: step ${c.stepsUsed} of up to ${c.maxSteps} (segment ${c.segment}). Keep working through the plan \u2014 don't settle for partial data \u2014 and save progress with long_job_checkpoint after each sub-task.`),s&&a.push(s);let u=[],d=-1;if(Array.isArray(e.messages))for(let y of e.messages){if(!y||typeof y!="object")continue;let b=y,k=vb(b.content);if(!k.trim())continue;let v=oQ(b.role);b.role!=="assistant"&&b.role!=="system"&&Z7(b.content)&&(d=u.length);let _=b.content;u.push({text:`${v}:
212
+ ${k}`,ask:!1,renderShrunk:eQ(_)?R=>`${v}:
213
+ ${vb(_,R)}`:null})}d>=0&&(u[d].ask=!0);let f=a.join(`
224
214
 
225
215
  `),m=u.map(y=>y.text).join(`
226
216
 
227
- `);if(!u.length||f.length+2+m.length<=DM)return{head:f,body:m};let g=Math.max(z7,DM-f.length-16),h=TM(u,g-MM.length-2);return{head:f,body:h.dropped?`${MM}
217
+ `);if(!u.length||f.length+2+m.length<=GM)return{head:f,body:m};let g=Math.max(Y7,GM-f.length-16),h=jM(u,g-JM.length-2);return{head:f,body:h.dropped?`${JM}
228
218
 
229
- ${h.body}`:h.body}}function ei(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let{head:o,body:s}=ib(e,t,r,n);return s?`${o}
219
+ ${h.body}`:h.body}}function ri(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let{head:o,body:s}=Rb(e,t,r,n);return s?`${o}
230
220
 
231
- ${s}`:o}var DM,z7,X7,MM,LM,rQ,BM,nQ,fl=p(()=>{"use strict";nb();Xs();NM();DM=8e4,z7=32e3,X7="Computer access is off for this chat: do not run commands or create, change or delete files on this computer. Answer from the conversation and the Kynver tools only, and tell the user they can turn computer access on in Kynver's Computers settings if the job needs it.",MM=`[earlier turns truncated \u2014 older turns are summarised under "Earlier in this conversation" in the System section when available. Never tell the user they didn't say something just because it isn't shown here.]`;LM="This is a website chat turn in Agent mode. The user may ask you to run the factory, dispatch work, or continue a plan. Do not refuse to act.",rQ="Factory coding tasks (README changes, PRs, harness worktrees) must go through a harness worker \u2014 call agent_os_submit_action_intent with kind dispatch_workers (dryRun:true to preview; live dispatch creates Action Required approval).",BM="If dispatch or worker start fails or is blocked (memory gate, wrong box, 0 workers started), report the failure clearly to the user \u2014 do not substitute inline edits or open a PR yourself.",nQ="Credentials rule: never use credentials you find on this computer \u2014 API keys, tokens, passwords, database or storage URLs, service-account or key files, SSH keys, saved logins, anything in environment variables, shell profiles, config files or other projects \u2014 unless the user explicitly told you in this conversation to use that specific credential. If a job would need one, stop, say exactly what you would need and why, and ask. When a read or command is refused (denied path, folder sandbox, missing variable), say so plainly and do not look for another way in."});import{homedir as iQ}from"node:os";function ti(e,t=iQ()){let r=P();return Jo({engine:e,local:{chatComputerAccess:r.chatComputerAccess,chatWorkFolders:r.chatWorkFolders},home:t})}var Rp=p(()=>{"use strict";$();xn()});function Ee(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function xe(e){return typeof e=="string"&&e.trim()?e:void 0}function ab(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function lb(e,t,r,n){let o=t===null||t===0;return{kind:"command",command:e,exitCode:t,durationMs:r,outputBytes:n,ok:o,...o?{}:{reason:"exit_nonzero"}}}function cb(...e){let t=0,r=!1;for(let n of e)typeof n=="string"&&(r=!0,t+=Buffer.byteLength(n,"utf8"));return r?t:null}function ub(e){let t=new Map;return{start(r){r&&!t.has(r)&&t.set(r,e())},elapsed(r){if(!r)return null;let n=t.get(r);return t.delete(r),n===void 0?null:Math.max(0,e()-n)}}}function FM(e=Date.now){let t=ub(e);return r=>{let n=Ee(r.item);if(!n)return[];let o=xe(n.id);if(r.type==="item.started")return t.start(o),[];if(r.type!=="item.completed")return[];if(n.type==="command_execution"){let s=xe(n.command)??"",i=ab(n.exit_code),a=lb(s,i,t.elapsed(o),cb(n.aggregated_output));return n.status==="failed"&&a.ok?[{...a,ok:!1,reason:"failed"}]:[a]}if(n.type==="file_change"&&Array.isArray(n.changes)){let s=t.elapsed(o),i=n.status!=="failed";return n.changes.map(a=>Ee(a)).filter(a=>!!a&&!!xe(a.path)).map(a=>({kind:"file_change",path:xe(a.path),...xe(a.kind)?{change:xe(a.kind)}:{},durationMs:s,ok:i,...i?{}:{reason:"failed"}}))}return[]}}function KM(e=Date.now){let t=ub(e);return r=>{if(r.type!=="tool_call")return[];let n=xe(r.call_id);if(r.subtype==="started")return t.start(n),[];if(r.subtype!=="completed")return[];let o=Ee(r.tool_call);if(!o)return[];let s=t.elapsed(n),i=Ee(o.shellToolCall);if(i){let a=Ee(i.result),l=Ee(a?.success)??Ee(a?.failure),c=xe(Ee(i.args)?.command)??xe(l?.command)??"",u=ab(l?.exitCode)??(a?.failure?1:null),d=ab(l?.executionTime)??s;return[lb(c,u,d,cb(l?.stdout,l?.stderr))]}for(let[a,l]of Object.entries(aQ)){let c=Ee(o[a]);if(!c)continue;let u=Ee(c.result),d=xe(Ee(c.args)?.path)??xe(Ee(u?.success)?.path);if(!d)return[];let f=!u?.failure;return[{kind:"file_change",path:d,change:l,durationMs:s,ok:f,...f?{}:{reason:"failed"}}]}return[]}}function $M(){return e=>{if(e.event!=="step_update")return[];let t=Ee(e.step_update);if(!t||t.step_type!=="tool")return[];let r=xe(t.tool_name);return r?[{kind:"tool",command:r.trim(),ok:!0}]:[]}}function uQ(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=e.map(r=>Ee(r)).filter(r=>!!r&&typeof r.text=="string").map(r=>r.text);return t.length?t.join(`
232
- `):void 0}function UM(e){let t=Ee(e.message)?.content;return Array.isArray(t)?t.map(r=>Ee(r)).filter(r=>!!r):[]}function HM(e=Date.now){let t=ub(e),r=new Map,n=new Set,o=(i,a,l,c,u)=>{if(i.name==="Bash"){let g=u?null:l?Number(c?.match(cQ)?.[1]??1):0,h=lb(xe(i.input.command)??"",g,a,cb(c));return u?{...h,ok:!1,reason:u}:h}let d=l||u?{reason:u??"failed"}:{},f=lQ[i.name],m=xe(i.input.file_path)??xe(i.input.notebook_path);return f&&m?{kind:"file_change",path:m,change:f,durationMs:a,ok:!l&&!u,...d}:{kind:"tool",command:i.name,durationMs:a,ok:!l&&!u,...d}};return Object.assign(i=>{if(i.type==="assistant"){for(let l of UM(i)){let c=xe(l.id),u=xe(l.name);l.type!=="tool_use"||!c||!u||r.has(c)||n.has(c)||(r.set(c,{name:u,input:Ee(l.input)??{}}),t.start(c))}return[]}if(i.type!=="user")return[];let a=[];for(let l of UM(i)){let c=xe(l.tool_use_id);if(l.type!=="tool_result"||!c)continue;let u=r.get(c);u&&(r.delete(c),n.add(c),a.push(o(u,t.elapsed(c),l.is_error===!0,uQ(l.content))))}return a},{interrupted(){let i=[...r.entries()].map(([a,l])=>(n.add(a),o(l,t.elapsed(a),!0,void 0,"interrupted")));return r.clear(),i}})}var aQ,lQ,cQ,ml=p(()=>{"use strict";aQ={writeToolCall:"write",editToolCall:"update",deleteToolCall:"delete"};lQ={Write:"write",Edit:"update",MultiEdit:"update",NotebookEdit:"update"},cQ=/exit code (\d+)/i});function Qt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function jM(e){if(!Array.isArray(e))return;let t=e.filter(r=>typeof r=="string"&&r.trim().length>0);return t.length>0?t:void 0}function VM(e){let t=Qt(e.type);if(!t)return null;if(t==="interactionUpdate"||t==="interaction_update"){let r=Qt(e.subtype)??Qt(e.updateType),n=Qt(e.blockReasonType)??Qt(e.blockReason?.type),o=jM(e.approvalReasonTypes)??jM(e.approval?.reasonTypes),s=Qt(e.toolCallId)??Qt(e.tool_call_id);if(r?.toLowerCase().includes("reject")||n?.toLowerCase().includes("reject")||o?.some(i=>i.includes("unapproved")))return{toolCallId:s,blockReasonType:n,approvalReasonTypes:o,source:"stream_event"}}if(t==="tool_call"){let r=Qt(e.subtype)?.toLowerCase();if(r!=="rejected"&&r!=="blocked"&&r!=="denied")return null;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null,o=Qt(e.toolCallId)??Qt(e.tool_call_id),s;if(n){for(let i of Object.keys(n))if(i.endsWith("ToolCall")){s=i.slice(0,-8)||i;break}}return{toolCallId:o,toolName:s,blockReasonType:r,source:"stream_event"}}return null}function wp(e){if(!pQ.test(e))return null;let t=e.match(/blockReasonType[=:]\s*(\w+)/i),r=e.match(/toolCallId[=:\s]+([^\s,]+)/i),n=e.match(/approvalReasonTypes[=:\s]*\[([^\]]+)\]/i);return{toolCallId:r?.[1],blockReasonType:t?.[1]??(e.includes("userRejected")?"userRejected":void 0),approvalReasonTypes:n?n[1].split(",").map(o=>o.trim().replace(/^["']|["']$/g,"")):e.includes("unapproved_commands")?["unapproved_commands"]:void 0,source:"stderr"}}function Sp(e){let t=[dQ];return e.toolName&&t.push(`tool=${e.toolName}`),e.toolCallId&&t.push(`toolCallId=${e.toolCallId}`),e.blockReasonType&&t.push(`blockReason=${e.blockReasonType}`),e.approvalReasonTypes?.length&&t.push(`approvalReasons=${e.approvalReasonTypes.join(",")}`),t.join(": ")}var dQ,pQ,GM=p(()=>{"use strict";dQ="cursor_tool_approval_blocked",pQ=/blockReasonType[=:]\s*(\w+)|userRejected|Shell approval gate|approvalReasonTypes|unapproved_commands/i});function _p(e){console.error(JSON.stringify({scope:"cursor/chat-turn",requestId:e.requestId??"",turnId:e.turnId??"",event:e.event,...e.exitCode!==void 0?{exitCode:e.exitCode}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolName?{toolName:e.toolName}:{},...e.blockReason?{blockReason:e.blockReason}:{},...e.stopReason?{stopReason:e.stopReason}:{},...e.error?{error:e.error}:{}}))}var JM=p(()=>{"use strict"});import{spawn as fQ}from"node:child_process";function db(e){return e==="ask"?"ask":"agent"}function yQ(e,t,r,n=[],o="agent"){return[...n,"-p",...o==="ask"?["--mode","ask"]:["--force"],"--trust","--workspace",t,"--output-format","stream-json","--stream-partial-output","--model",e,r]}function kQ(e,t){if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event;if(r.type==="content_block_delta"&&r.delta?.type==="text_delta"&&r.delta.text)return r.delta.text}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let n=r.filter(o=>!!o&&typeof o=="object"&&o.type==="text"&&typeof o.text=="string").map(o=>o.text).join("");if(n&&n.startsWith(t))return n.slice(t.length)}}return""}function bQ(e){return e.type!=="result"?"":typeof e.result=="string"?e.result:""}function pb(e,t){let r=e.trim(),n=t.trim();return r?n&&(t.length>e.length||t.length===e.length&&t!==e)?t:e:t}function fb(e,t,r){if(!e)return;if(e.startsWith(t)){let o=e.slice(t.length);o&&r(o);return}if(!t.trim()){r(e);return}let n=t.trimEnd();if(e.startsWith(n)){let o=e.slice(n.length);o&&r(o);return}e.length>t.length&&r(e.slice(t.length))}function vQ(e){let t=e.usage;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t,n=typeof r.input_tokens=="number"?r.input_tokens:typeof r.inputTokens=="number"?r.inputTokens:typeof r.prompt_tokens=="number"?r.prompt_tokens:void 0,o=typeof r.output_tokens=="number"?r.output_tokens:typeof r.outputTokens=="number"?r.outputTokens:typeof r.completion_tokens=="number"?r.completion_tokens:void 0;return n===void 0&&o===void 0?null:{input_tokens:n??0,output_tokens:o??0}}function RQ(e,t){if(hQ.test(e))return`${Ng}: ${e.trim().slice(0,240)||"agent CLI is not logged in"}`;let r=e.trim().slice(0,240);return t===null?r?`cursor_chat_failed: ${r}`:"cursor_chat_failed: process exited without a code":r?`cursor_chat_failed: exit ${t} \u2014 ${r}`:`cursor_chat_failed: exit ${t}`}async function qM(e){let t=e.env??process.env,r=e.access??ti("cursor"),n=e.workspaceDir??r.workDir,o=KM(),s=db(e.payload.executionMode),i=s==="agent"?Xt(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=ei(e.payload,s,i,r),c=e.spawnTarget;if(!c){let f=$n(t),m=oa(f);c={executable:m.executable,prefixArgs:m.prefixArgs}}let u=yQ(e.model,n,l,c.prefixArgs,s),d={...Yt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let x=z({cwd:n,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:d});g=fQ(c.executable,u,x)}catch(x){if(x.code==="ENOENT"){m(new Error(`${hu}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}m(x instanceof Error?x:new Error(String(x)));return}let h=!1,y=new zt,v="",k=x=>{let T=y.push(x);T&&(v+=T,e.onDelta(T))},b="",_="",S={input_tokens:0,output_tokens:0},R="",w="",L=!1,N=!1,A,O=wp(R),W=null,D=x=>{if(h)return;if(h=!0,clearTimeout(E),A&&clearTimeout(A),e.signal?.removeEventListener("abort",H),x){_p({requestId:e.requestId,turnId:e.turnId,event:"turn_error",exitCode:W,error:x.message,...O?.toolCallId?{toolCallId:O.toolCallId}:{},...O?.toolName?{toolName:O.toolName}:{},...O?.blockReasonType?{blockReason:O.blockReasonType}:{}}),m(x);return}let T=wp(R);if(T&&(O=T),O){let Z=new Error(Sp(O));_p({requestId:e.requestId,turnId:e.turnId,event:"turn_approval_blocked",exitCode:W,toolCallId:O.toolCallId,toolName:O.toolName,blockReason:O.blockReasonType,error:Z.message}),m(Z);return}let U=y.end();U&&(v+=U,e.onDelta(U));let te=pb(b,_),oe=un(te,a);fb(oe.text,v,e.onDelta),oe.rejected.length>0&&console.error(JSON.stringify({event:"cursor_tool_call_rejected",names:oe.rejected.slice(0,5),advertised:a.size}));let{content:ge,stop_reason:Ae}=dn(oe,e.turnId??"turn");_p({requestId:e.requestId,turnId:e.turnId,event:"turn_end",exitCode:W,stopReason:Ae}),f({content:ge,stop_reason:Ae,usage:S})},G=x=>{g.pid?fe(g.pid,x):Ze(g,x)},Q=()=>{G("SIGTERM"),A??=setTimeout(()=>{N||G("SIGKILL")},gQ),A.unref()},H=()=>{Q(),D(new Error("cursor_chat_aborted"))},E=setTimeout(()=>{L=!0,Q()},e.timeoutMs??mQ);if(g.on("error",x=>{if(x.code==="ENOENT"){D(new Error(`${hu}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}D(x)}),e.signal){if(e.signal.aborted){H();return}e.signal.addEventListener("abort",H)}let V=x=>{let T=x.trim();if(!T)return;let U;try{U=JSON.parse(T)}catch{return}let te=kQ(U,b);te&&(b+=te,k(te));let oe=bQ(U);oe&&(_=oe);let ge=vQ(U);if(ge&&(S=ge),e.onActivity)for(let Z of o(U))e.onActivity(Z);let Ae=VM(U);Ae&&(O=Ae,Q(),D(new Error(Sp(Ae))))};g.stdout?.on("data",x=>{w+=typeof x=="string"?x:x.toString("utf8");let T;for(;(T=w.indexOf(`
233
- `))!==-1;){let U=w.slice(0,T);w=w.slice(T+1),V(U)}}),g.stderr?.on("data",x=>{R+=typeof x=="string"?x:x.toString("utf8"),R.length>8e3&&(R=R.slice(-8e3));let T=wp(R);T&&(O=T,Q(),D(new Error(Sp(T))))}),g.on("close",x=>{if(N=!0,W=x,w.trim()&&V(w),L){D(new Error("cursor_chat_timeout"));return}if(x!==0&&!b&&!_){D(new Error(RQ(R,x)));return}D()})})}var mQ,gQ,hQ,xp=p(()=>{"use strict";ys();M();fl();Rp();lo();ml();ks();Xs();GM();JM();mQ=24e4,gQ=1500,hQ=/not logged in|please run[`\s]+agent login|authentication required|unauthorized|invalid api key/i});import{spawn as wQ}from"node:child_process";function xQ(e){return e==="ask"?"ask":"agent"}function CQ(e,t){return e==="ask"?["--sandbox","read-only"]:!t||t.source==="default"?["--sandbox","workspace-write"]:t.access==="off"?["--sandbox","read-only"]:t.access==="full"?["--sandbox","danger-full-access"]:["--sandbox","workspace-write","-c","sandbox_workspace_write.network_access=true",...t.extraFolders.flatMap(r=>["--add-dir",r])]}function EQ(e,t,r="agent",n=[],o=process.platform,s){return[...n,"exec",...bu(o),"--skip-git-repo-check","--json","--ask-for-approval","never",...CQ(r,s),"--model",e,t]}function AQ(e,t){if((e.type==="item.updated"||e.type==="item.completed")&&e.item&&typeof e.item=="object"){let r=e.item;if(r.type==="agent_message"&&typeof r.text=="string"&&r.text.startsWith(t))return r.text.slice(t.length)}if(e.type==="agent_message.delta"||e.type==="item.delta"){let r=typeof e.delta=="string"?e.delta:e.delta&&typeof e.delta=="object"?e.delta.text:void 0;if(typeof r=="string")return r}return""}function PQ(e){if(e.type!=="turn.completed")return null;let t=e.usage;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t,n=typeof r.input_tokens=="number"?r.input_tokens:void 0,o=typeof r.output_tokens=="number"?r.output_tokens:void 0;return n===void 0&&o===void 0?null:{input_tokens:n??0,output_tokens:o??0}}function IQ(e,t){if(_Q.test(e))return`${zk}: ${e.trim().slice(0,240)||"Codex CLI is not logged in"}`;let r=e.trim().slice(0,240);return t===null?r?`codex_chat_failed: ${r}`:"codex_chat_failed: process exited without a code":r?`codex_chat_failed: exit ${t} \u2014 ${r}`:`codex_chat_failed: exit ${t}`}async function YM(e){let t=e.env??process.env,r=e.access??ti("codex"),n=e.workspaceDir??r.workDir,o=xQ(e.payload.executionMode),s=o==="agent"?Xt(e.payload.tools):[],i=new Set(s.map(f=>f.name)),a=ei(e.payload,o,s,r),l=FM(),c=e.spawnTarget??{executable:t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||xr(),prefixArgs:[]},u=EQ(e.model,a,o,c.prefixArgs,process.platform,r),d={...Yt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let W=z({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[D,G]=ae(c.executable,u);g=wQ(D,G,W)}catch(W){if(W.code==="ENOENT"){m(new Error(`${pp}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}m(W instanceof Error?W:new Error(String(W)));return}let h=!1,y=new zt,v=W=>{let D=y.push(W);D&&e.onDelta(D)},k="",b={input_tokens:0,output_tokens:0},_="",S="",R=!1,w=W=>{if(h)return;if(h=!0,clearTimeout(A),e.signal?.removeEventListener("abort",N),W){m(W);return}let D=y.end();D&&e.onDelta(D);let G=un(k,i);G.rejected.length>0&&console.error(JSON.stringify({event:"codex_tool_call_rejected",names:G.rejected.slice(0,5),advertised:i.size})),f({...dn(G,e.turnId??"turn"),usage:b})},L=()=>Ze(g,"SIGTERM"),N=()=>{L(),w(new Error("codex_chat_aborted"))},A=setTimeout(()=>{R=!0,L()},e.timeoutMs??SQ);if(g.on("error",W=>{if(W.code==="ENOENT"){w(new Error(`${pp}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}w(W)}),e.signal){if(e.signal.aborted){N();return}e.signal.addEventListener("abort",N)}let O=W=>{let D=W.trim();if(!D)return;let G;try{G=JSON.parse(D)}catch{return}let Q=AQ(G,k);Q&&(k+=Q,v(Q));let H=PQ(G);if(H&&(b=H),e.onActivity)for(let E of l(G))e.onActivity(E)};g.stdout?.on("data",W=>{S+=typeof W=="string"?W:W.toString("utf8");let D;for(;(D=S.indexOf(`
234
- `))!==-1;){let G=S.slice(0,D);S=S.slice(D+1),O(G)}}),g.stderr?.on("data",W=>{_+=typeof W=="string"?W:W.toString("utf8"),_.length>8e3&&(_=_.slice(-8e3))}),g.on("close",W=>{if(S.trim()&&O(S),R){w(new Error("codex_chat_timeout"));return}if(W!==0&&!k){w(new Error(IQ(_,W)));return}w()})})}var SQ,_Q,zM=p(()=>{"use strict";Vn();Kg();M();qe();fl();Rp();ml();mp();lo();Xs();SQ=24e4,_Q=/not logged in|please run[`\s]+codex login|authentication required|unauthorized|invalid api key|401\b/i});import{spawn as OQ}from"node:child_process";function NQ(e,t,r="agent",n=[]){return[...n,...Eu({executionMode:r==="ask"?"read_only":"write",prompt:t},e)]}function DQ(e,t){if(XM.test(e))return`${hp}: ${e.trim().slice(0,240)||"Google Antigravity is not signed in"}`;let r=e.trim().slice(0,240);return t===null?r?`antigravity_chat_failed: ${r}`:"antigravity_chat_failed: process exited without a code":r?`antigravity_chat_failed: exit ${t} \u2014 ${r}`:`antigravity_chat_failed: exit ${t}`}async function QM(e){let t=e.env??process.env,r=e.access??ti("antigravity"),n=e.workspaceDir??r.workDir,o=$M(),s=db(e.payload.executionMode),i=s==="agent"?Xt(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=ei(e.payload,s,i,r),c=e.spawnTarget??{executable:ht(t),prefixArgs:[]},u=NQ(e.model,l,s,c.prefixArgs),d={...Yt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let D=z({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[G,Q]=ae(c.executable,u);g=OQ(G,Q,D)}catch(D){if(D.code==="ENOENT"){m(new Error(`${gp}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}m(D instanceof Error?D:new Error(String(D)));return}let h=!1,y=new zt,v=D=>{let G=y.push(D);G&&e.onDelta(G)},k="",b="",_={input_tokens:0,output_tokens:0},S="",R="",w=!1,L=D=>{if(h)return;if(h=!0,clearTimeout(O),e.signal?.removeEventListener("abort",A),D){m(D);return}let G=b.length>=k.length&&b?b:k;b.startsWith(k)&&b.length>k.length?v(b.slice(k.length)):!k&&b&&v(b);let Q=y.end();Q&&e.onDelta(Q);let H=un(G,a);f({...dn(H,e.turnId??"turn"),usage:_})},N=()=>Ze(g,"SIGTERM"),A=()=>{N(),L(new Error("antigravity_chat_aborted"))},O=setTimeout(()=>{w=!0,N()},e.timeoutMs??TQ);if(g.on("error",D=>{if(D.code==="ENOENT"){L(new Error(`${gp}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}L(D)}),e.signal){if(e.signal.aborted){A();return}e.signal.addEventListener("abort",A)}let W=D=>{let G=D.trim();if(!G)return;let Q;try{Q=JSON.parse(G)}catch{return}if(e.onActivity)for(let E of o(Q))e.onActivity(E);let H=Yl(Q);if(H&&(H.textDelta&&(k+=H.textDelta,v(H.textDelta)),H.usage&&(_={input_tokens:H.usage.inputTokens??_.input_tokens,output_tokens:H.usage.outputTokens??_.output_tokens}),!!H.terminal)){if(!H.terminal.ok){let E=H.terminal.error??"antigravity cli result error";if(N(),XM.test(E)){L(new Error(`${hp}: ${E.slice(0,240)}`));return}L(new Error(`antigravity_chat_failed: ${E.slice(0,240)}`));return}b=H.terminal.finalResult??""}};g.stdout?.on("data",D=>{R+=typeof D=="string"?D:D.toString("utf8");let G;for(;(G=R.indexOf(`
235
- `))!==-1;){let Q=R.slice(0,G);R=R.slice(G+1),W(Q)}}),g.stderr?.on("data",D=>{S+=typeof D=="string"?D:D.toString("utf8"),S.length>8e3&&(S=S.slice(-8e3))}),g.on("close",D=>{if(R.trim()&&W(R),w){L(new Error("antigravity_chat_timeout"));return}if(!h){if(D!==0&&!k&&!b){L(new Error(DQ(S,D)));return}L()}})})}var TQ,XM,ZM=p(()=>{"use strict";qn();Of();M();qe();kp();fl();Rp();lo();ml();xp();Xs();TQ=24e4,XM=/authentication required|not logged in|you are not logged|not authenticated/i});function MQ(){return{text:"",toolCalls:[],finishReason:null,promptTokens:0,completionTokens:0}}function LQ(e,t){let r=t,n=r.choices?.[0],o="";n?.delta?.content&&(o=n.delta.content,e.text+=o);for(let s of n?.delta?.tool_calls??[]){for(;e.toolCalls.length<=s.index;)e.toolCalls.push({id:"",name:"",argsJson:""});let i=e.toolCalls[s.index];s.id&&(i.id=s.id),s.function?.name&&(i.name+=s.function.name),s.function?.arguments&&(i.argsJson+=s.function.arguments)}return n?.finish_reason&&(e.finishReason=n.finish_reason),r.usage&&(e.promptTokens=r.usage.prompt_tokens??e.promptTokens,e.completionTokens=r.usage.completion_tokens??e.completionTokens),o}function BQ(e){let t=[];e.text&&t.push({type:"text",text:e.text});for(let n of e.toolCalls){if(!n.name)continue;let o={};try{o=n.argsJson?JSON.parse(n.argsJson):{}}catch{o={}}t.push({type:"tool_use",id:n.id||`toolu_http_${n.name}`,name:n.name,input:o})}let r=e.toolCalls.some(n=>n.name);return{content:t,stop_reason:r&&e.finishReason!=="length"?"tool_use":e.finishReason==="length"?"max_tokens":"end_turn",usage:{input_tokens:e.promptTokens,output_tokens:e.completionTokens}}}function WQ(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){let n=r;n.type==="image"&&n.source?.type==="base64"&&typeof n.source.data=="string"&&t.push(`data:${n.source.media_type??"image/jpeg"};base64,${n.source.data}`)}return t}function UQ(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text).join(`
236
- `):""}function FQ(e){let t=e.role==="assistant"?"assistant":"user";if(typeof e.content=="string")return[{role:t,content:e.content}];if(!Array.isArray(e.content))return[{role:t,content:""}];if(t==="assistant"){let s=e.content.filter(a=>a.type==="text").map(a=>a.text).join(""),i=e.content.filter(a=>a.type==="tool_use").map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.input??{})}}));return[{role:"assistant",content:s||null,...i.length>0?{tool_calls:i}:{}}]}let r=[],n=[],o=[];for(let s of e.content){let i=s;i.type==="tool_result"?(r.push({role:"tool",tool_call_id:i.tool_use_id,content:UQ(i.content)}),o.push(...WQ(i.content))):i.type==="text"&&i.text&&n.push(i.text)}return o.length>0&&r.push({role:"user",content:[{type:"text",text:"Screenshot from the browser tool result above:"},...o.map(s=>({type:"image_url",image_url:{url:s}}))]}),n.length>0&&r.push({role:"user",content:n.join(`
237
- `)}),r}function KQ(e,t){let r=[];e.trim()&&r.push({role:"system",content:e});for(let n of t)r.push(...FQ(n??{}));return r}function $Q(e){return e.map(t=>{let r=t;return typeof r.name!="string"||!r.name?null:{type:"function",function:{name:r.name,...r.description?{description:r.description}:{},parameters:r.input_schema??{type:"object"}}}}).filter(t=>t!==null)}async function*HQ(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await t.read();if(o)break;n+=r.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
238
- `))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{t.releaseLock()}}async function eL(e){let{creds:t,model:r,payload:n}=e,o=Array.isArray(n.tools)?$Q(n.tools):[],s={model:r,messages:KQ(n.system,Array.isArray(n.messages)?n.messages:[]),max_completion_tokens:n.maxTokens,stream:!0,stream_options:{include_usage:!0},...o.length>0?{tools:o}:{},...n.temperature!==void 0?{temperature:n.temperature}:{}},i=await fetch(`${t.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.apiKey}`},signal:e.signal,body:JSON.stringify(s)});if(!i.ok||!i.body){let l=await i.text().catch(()=>"");throw new Error(`${t.label} stream failed: HTTP ${i.status}${l?` \u2014 ${l.slice(0,300)}`:""}`)}let a=MQ();for await(let l of HQ(i.body)){let c=LQ(a,l);c&&e.onDelta(c)}return BQ(a)}var tL=p(()=>{"use strict"});function yo(e){let t=Qd(e.provider,e.config,e.env??process.env),r=e.boxId?vc(e.payloadAccess,e.boxId):null,n=Jo({engine:t,local:{chatComputerAccess:e.config.chatComputerAccess,chatWorkFolders:e.config.chatWorkFolders},website:r,home:e.home});return{engine:t,access:n}}var Cp=p(()=>{"use strict";Qa();xn()});function rL(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.session!="string"||!jQ.test(t.session))return null;let r=typeof t.timeLeftMs=="number"&&Number.isFinite(t.timeLeftMs)?Math.max(0,Math.floor(t.timeLeftMs)):0;return{session:t.session,timeLeftMs:r}}function nL(e){return Math.max(0,Math.min(48e4,e.timeLeftMs))}var jQ,Ep=p(()=>{"use strict";jQ=/^[A-Za-z0-9_.:-]{1,128}$/});function VQ(e=Date.now){let t=new Map,r=()=>{let n=e();for(let[o,s]of t)n-s.at>9e5&&t.delete(o);for(;t.size>64;)t.delete(t.keys().next().value)};return{get(n){return r(),t.get(n)?.sessionId??null},remember(n,o){t.delete(n),t.set(n,{sessionId:o,at:e()}),r()},forget(n){t.delete(n)}}}var oL,sL=p(()=>{"use strict";oL=VQ()});function GQ(e,t){if(e.access==="off")throw new Error("claude_code_access_off");return e.access==="full"?["--permission-mode","bypassPermissions",...Ok()]:["--permission-mode","acceptEdits",`--allowedTools=${(t?.shell==="disabled"?iL.filter(n=>n!=="Bash"):[...iL]).join(",")}`,...Ok(),...t?["--settings",t.settingsFile]:[],...e.access==="folders"?e.extraFolders.flatMap(n=>["--add-dir",n]):[]]}function mb(e){return["-p","--output-format","stream-json","--include-partial-messages","--verbose",...e.model?["--model",e.model]:[],"--append-system-prompt-file",e.systemPromptFile,...e.resumeSessionId?["--resume",e.resumeSessionId]:[],...GQ(e.access,e.sandbox),"--",e.prompt]}var iL,aL=p(()=>{"use strict";lo();iL=["Bash","WebFetch","WebSearch"]});import{readdir as JQ}from"node:fs/promises";import gb from"node:path";function hb(e){let t=e.map(r=>r.split("*").map(n=>n.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*"));return new RegExp(`^(?:${t.join("|")})$`,"i")}async function cL(e,t,r={}){let n=r.now??Date.now,o=n(),s=r.maxEntries??qQ,i=r.maxMs??YQ,a=r.maxResults??zQ,l=hb(t),c=new Set,u=[...new Set(e.map(g=>gb.resolve(g)))],d=0,f=!1,m=()=>d>=s||n()-o>i||c.size>=a;for(;u.length;){let g=[];for(let h=0;h<u.length;h+=lL){if(m()){f=!0;break}let y=u.slice(h,h+lL),v=await Promise.all(y.map(k=>JQ(k,{withFileTypes:!0}).then(b=>({dir:k,entries:b}),b=>(XQ.has(b?.code??"")||(f=!0),{dir:k,entries:[]}))));for(let{dir:k,entries:b}of v)for(let _ of b){if(d>=s){f=!0;break}d+=1;let S=gb.join(k,_.name);l.test(_.name)?c.add(QQ(S)):_.isDirectory()&&!_.isSymbolicLink()&&g.push(S)}}if(f)break;if(u=g,u.length&&m()){f=!0;break}}return{paths:[...c].sort(),scanned:d,truncated:f,durationMs:n()-o}}function QQ(e){return e.split(gb.sep).join("/")}var qQ,YQ,zQ,lL,XQ,yb=p(()=>{"use strict";qQ=25e4,YQ=15e3,zQ=2e3,lL=64,XQ=new Set(["ENOENT","EACCES","EPERM","ENOTDIR"])});import{closeSync as ZQ,existsSync as eZ,fstatSync as tZ,openSync as rZ,readSync as nZ}from"node:fs";function dL(){return{lastSuccessAt:null,lastSuccessKind:null,steps24h:0,failures24h:{}}}function aZ(e,t){let r=dL();for(let n of e){let o;try{o=JSON.parse(n)}catch{continue}let s=typeof o.at=="string"?Date.parse(o.at):Number.NaN;if(!Number.isNaN(s)&&(o.ok===!0&&(!r.lastSuccessAt||s>=Date.parse(r.lastSuccessAt))&&(r.lastSuccessAt=new Date(s).toISOString(),r.lastSuccessKind=o.kind??null),!(t-s>iZ)&&(r.steps24h+=1,o.ok===!1))){let i=typeof o.reason=="string"&&/^[a-z_]{1,40}$/.test(o.reason)?o.reason:"other";r.failures24h[i]=(r.failures24h[i]??0)+1}}return r}function lZ(e){if(!eZ(e))return[];let t=rZ(e,"r");try{let r=tZ(t).size,n=Math.min(r,oZ),o=Buffer.alloc(n);return nZ(t,o,0,n,r-n),o.toString("utf8").split(`
239
- `).filter(Boolean)}finally{ZQ(t)}}function Ap(e=Lk(),t=Date.now()){let r=uL.get(e);if(r&&t-r.at<sZ)return r.summary;let n;try{n=aZ(lZ(e),t)}catch{n=dL()}return uL.set(e,{at:t,summary:n}),n}var oZ,sZ,iZ,uL,kb=p(()=>{"use strict";tp();oZ=512*1024,sZ=3e4,iZ=1440*60*1e3;uL=new Map});import{appendFileSync as cZ,mkdirSync as uZ}from"node:fs";import{homedir as dZ}from"node:os";import bb from"node:path";function pL(e=dZ()){return bb.join(e,pZ)}function fL(e){let r=(e instanceof Error?e.message:String(e)).split(":")[0].trim();return/^[a-z_]{1,40}$/.test(r)?r:"other"}function mL(e,t=pL()){try{uZ(bb.dirname(t),{recursive:!0}),cZ(t,`${JSON.stringify({kind:"step",...e})}
240
- `,{encoding:"utf8",mode:384})}catch{}}function gL(e=pL()){return Ap(e)}var pZ,vb=p(()=>{"use strict";kb();pZ=bb.join(".kynver","logs","chat-claude-code-steps.jsonl")});import{spawn as fZ}from"node:child_process";import{mkdirSync as mZ,mkdtempSync as gZ,rmSync as hZ,writeFileSync as Pp}from"node:fs";import{tmpdir as yZ}from"node:os";import ko from"node:path";function EZ(){return{".curlrc":`retry = 5
221
+ ${s}`:o}var GM,Y7,z7,JM,qM,tQ,YM,rQ,kl=p(()=>{"use strict";kb();Zs();VM();GM=8e4,Y7=32e3,z7="Computer access is off for this chat: do not run commands or create, change or delete files on this computer. Answer from the conversation and the Kynver tools only, and tell the user they can turn computer access on in Kynver's Computers settings if the job needs it.",JM=`[earlier turns truncated \u2014 older turns are summarised under "Earlier in this conversation" in the System section when available. Never tell the user they didn't say something just because it isn't shown here.]`;qM="This is a website chat turn in Agent mode. The user may ask you to run the factory, dispatch work, or continue a plan. Do not refuse to act.",tQ="Factory coding tasks (README changes, PRs, harness worktrees) must go through a harness worker \u2014 call agent_os_submit_action_intent with kind dispatch_workers (dryRun:true to preview; live dispatch creates Action Required approval).",YM="If dispatch or worker start fails or is blocked (memory gate, wrong box, 0 workers started), report the failure clearly to the user \u2014 do not substitute inline edits or open a PR yourself.",rQ="Credentials rule: never use credentials you find on this computer \u2014 API keys, tokens, passwords, database or storage URLs, service-account or key files, SSH keys, saved logins, anything in environment variables, shell profiles, config files or other projects \u2014 unless the user explicitly told you in this conversation to use that specific credential. If a job would need one, stop, say exactly what you would need and why, and ask. When a read or command is refused (denied path, folder sandbox, missing variable), say so plainly and do not look for another way in."});import{homedir as sQ}from"node:os";function ni(e,t=sQ()){let r=A();return Xo({engine:e,local:{chatComputerAccess:r.chatComputerAccess,chatWorkFolders:r.chatWorkFolders},home:t})}var Op=p(()=>{"use strict";K();Pn()});function lQ(e){let t=e[Ff];return new Set(t?t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean):[])}function wb(e,t={}){return aQ.has(e)||t.operatorAllow?.has(e)||e===_b?!1:iQ.some(r=>r.test(e))}function Qt(e=process.env){let t=vi(e);for(let n of Sb)delete t[n];let r=lQ(e);for(let n of Object.keys(t))wb(n,{operatorAllow:r})&&delete t[n];return t[_b]="1",t}function XM(e){let t=e.toUpperCase();return pQ.has(t)||t===_b?!0:uQ.has(t)?!wb(t):dQ.some(r=>t.startsWith(r))?!wb(t)&&!/(_KEY|_TOKEN|_SECRET|_PASSWORD)$/i.test(t):!1}function fQ(e=process.env){let t={};for(let[n,o]of Object.entries(e))typeof o=="string"&&XM(n)&&(t[n]=o);let r=Qt(t);for(let n of Object.keys(r))XM(n)||delete r[n];return r}function QM(e,t){return t==="folder"||t==="folders"?fQ(e):Qt(e)}function xb(){return[`--disallowedTools=${mQ.join(",")}`]}var Sb,_b,iQ,aQ,cQ,uQ,dQ,pQ,mQ,ko=p(()=>{"use strict";Ri();Sb=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_CHAT_BOX_TOKEN","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN","KYNVER_WORKER_API_KEY","KYNVER_GEMINI_API_KEY","KYNVER_OPENAI_API_KEY"],_b="KYNVER_CHAT_CHILD",iQ=[/_URL$/i,/SECRET/i,/CREDENTIAL/i,/DATABASE/i,/ACCESS_KEY/i,/PASSWORD|PASSWD|_PWD$|^PGPASS/i,/_DSN$/i,/CONNECTION_STRING|CONN_STR/i,/PRIVATE_KEY/i,/SERVICE_ACCOUNT/i,/AUTHTOKEN|_AUTH$/i,/_API_KEY_|APIKEY/i],aQ=new Set(Wf);cQ=["PATH","HOME","USER","LOGNAME","SHELL","PWD","TMPDIR","TMP","TEMP","TZ","LANG","LANGUAGE","TERM","COLORTERM","NO_COLOR","FORCE_COLOR","HTTP_PROXY","HTTPS_PROXY","NO_PROXY","ALL_PROXY","SSL_CERT_FILE","SSL_CERT_DIR","NODE_EXTRA_CA_CERTS","REQUESTS_CA_BUNDLE","CURL_CA_BUNDLE","XDG_CACHE_HOME","XDG_DATA_HOME","NVM_DIR","NVM_BIN","NVM_INC","VOLTA_HOME","FNM_DIR","N_PREFIX","PNPM_HOME","BUN_INSTALL","DENO_INSTALL","PYENV_ROOT","VIRTUAL_ENV","CONDA_PREFIX","PYTHONIOENCODING","GOPATH","GOROOT","CARGO_HOME","RUSTUP_HOME","JAVA_HOME","DOTNET_ROOT","HOMEBREW_PREFIX","HOMEBREW_CELLAR","HOMEBREW_REPOSITORY","AWS_REGION","AWS_DEFAULT_REGION","AWS_PROFILE","GOOGLE_CLOUD_PROJECT","CLOUD_ML_REGION","SYSTEMROOT","WINDIR","SYSTEMDRIVE","COMSPEC","PATHEXT","USERPROFILE","HOMEDRIVE","HOMEPATH","USERNAME","APPDATA","LOCALAPPDATA","PROGRAMDATA","PROGRAMFILES","PROGRAMFILES(X86)","PROGRAMW6432","COMMONPROGRAMFILES","COMMONPROGRAMFILES(X86)","ALLUSERSPROFILE","PUBLIC","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE","OS"],uQ=new Set(cQ.map(e=>e.toUpperCase())),dQ=["LC_","CLAUDE_CODE_","CLAUDE_","ANTHROPIC_","DISABLE_","MAX_THINKING_","BASH_DEFAULT_","BASH_MAX_"],pQ=new Set(["CLAUDE_CODE_OAUTH_TOKEN"]);mQ=["Read(~/.kynver/credentials)","Read(~/.kynver/credentials.*)","Read(~/.kynver/chat-box-credential)","Read(~/.kynver/site-logins/**)"]});function Ie(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ee(e){return typeof e=="string"&&e.trim()?e:void 0}function Cb(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Eb(e,t,r,n){let o=t===null||t===0;return{kind:"command",command:e,exitCode:t,durationMs:r,outputBytes:n,ok:o,...o?{}:{reason:"exit_nonzero"}}}function Ab(...e){let t=0,r=!1;for(let n of e)typeof n=="string"&&(r=!0,t+=Buffer.byteLength(n,"utf8"));return r?t:null}function Ib(e){let t=new Map;return{start(r){r&&!t.has(r)&&t.set(r,e())},elapsed(r){if(!r)return null;let n=t.get(r);return t.delete(r),n===void 0?null:Math.max(0,e()-n)}}}function eL(e=Date.now){let t=Ib(e);return r=>{let n=Ie(r.item);if(!n)return[];let o=Ee(n.id);if(r.type==="item.started")return t.start(o),[];if(r.type!=="item.completed")return[];if(n.type==="command_execution"){let s=Ee(n.command)??"",i=Cb(n.exit_code),a=Eb(s,i,t.elapsed(o),Ab(n.aggregated_output));return n.status==="failed"&&a.ok?[{...a,ok:!1,reason:"failed"}]:[a]}if(n.type==="file_change"&&Array.isArray(n.changes)){let s=t.elapsed(o),i=n.status!=="failed";return n.changes.map(a=>Ie(a)).filter(a=>!!a&&!!Ee(a.path)).map(a=>({kind:"file_change",path:Ee(a.path),...Ee(a.kind)?{change:Ee(a.kind)}:{},durationMs:s,ok:i,...i?{}:{reason:"failed"}}))}return[]}}function tL(e=Date.now){let t=Ib(e);return r=>{if(r.type!=="tool_call")return[];let n=Ee(r.call_id);if(r.subtype==="started")return t.start(n),[];if(r.subtype!=="completed")return[];let o=Ie(r.tool_call);if(!o)return[];let s=t.elapsed(n),i=Ie(o.shellToolCall);if(i){let a=Ie(i.result),l=Ie(a?.success)??Ie(a?.failure),c=Ee(Ie(i.args)?.command)??Ee(l?.command)??"",u=Cb(l?.exitCode)??(a?.failure?1:null),d=Cb(l?.executionTime)??s;return[Eb(c,u,d,Ab(l?.stdout,l?.stderr))]}for(let[a,l]of Object.entries(gQ)){let c=Ie(o[a]);if(!c)continue;let u=Ie(c.result),d=Ee(Ie(c.args)?.path)??Ee(Ie(u?.success)?.path);if(!d)return[];let f=!u?.failure;return[{kind:"file_change",path:d,change:l,durationMs:s,ok:f,...f?{}:{reason:"failed"}}]}return[]}}function rL(){return e=>{if(e.event!=="step_update")return[];let t=Ie(e.step_update);if(!t||t.step_type!=="tool")return[];let r=Ee(t.tool_name);return r?[{kind:"tool",command:r.trim(),ok:!0}]:[]}}function kQ(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=e.map(r=>Ie(r)).filter(r=>!!r&&typeof r.text=="string").map(r=>r.text);return t.length?t.join(`
222
+ `):void 0}function ZM(e){let t=Ie(e.message)?.content;return Array.isArray(t)?t.map(r=>Ie(r)).filter(r=>!!r):[]}function nL(e=Date.now){let t=Ib(e),r=new Map,n=new Set,o=(i,a,l,c,u)=>{if(i.name==="Bash"){let g=u?null:l?Number(c?.match(yQ)?.[1]??1):0,h=Eb(Ee(i.input.command)??"",g,a,Ab(c));return u?{...h,ok:!1,reason:u}:h}let d=l||u?{reason:u??"failed"}:{},f=hQ[i.name],m=Ee(i.input.file_path)??Ee(i.input.notebook_path);return f&&m?{kind:"file_change",path:m,change:f,durationMs:a,ok:!l&&!u,...d}:{kind:"tool",command:i.name,durationMs:a,ok:!l&&!u,...d}};return Object.assign(i=>{if(i.type==="assistant"){for(let l of ZM(i)){let c=Ee(l.id),u=Ee(l.name);l.type!=="tool_use"||!c||!u||r.has(c)||n.has(c)||(r.set(c,{name:u,input:Ie(l.input)??{}}),t.start(c))}return[]}if(i.type!=="user")return[];let a=[];for(let l of ZM(i)){let c=Ee(l.tool_use_id);if(l.type!=="tool_result"||!c)continue;let u=r.get(c);u&&(r.delete(c),n.add(c),a.push(o(u,t.elapsed(c),l.is_error===!0,kQ(l.content))))}return a},{interrupted(){let i=[...r.entries()].map(([a,l])=>(n.add(a),o(l,t.elapsed(a),!0,void 0,"interrupted")));return r.clear(),i}})}var gQ,hQ,yQ,bl=p(()=>{"use strict";gQ={writeToolCall:"write",editToolCall:"update",deleteToolCall:"delete"};hQ={Write:"write",Edit:"update",MultiEdit:"update",NotebookEdit:"update"},yQ=/exit code (\d+)/i});function Zt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function oL(e){if(!Array.isArray(e))return;let t=e.filter(r=>typeof r=="string"&&r.trim().length>0);return t.length>0?t:void 0}function sL(e){let t=Zt(e.type);if(!t)return null;if(t==="interactionUpdate"||t==="interaction_update"){let r=Zt(e.subtype)??Zt(e.updateType),n=Zt(e.blockReasonType)??Zt(e.blockReason?.type),o=oL(e.approvalReasonTypes)??oL(e.approval?.reasonTypes),s=Zt(e.toolCallId)??Zt(e.tool_call_id);if(r?.toLowerCase().includes("reject")||n?.toLowerCase().includes("reject")||o?.some(i=>i.includes("unapproved")))return{toolCallId:s,blockReasonType:n,approvalReasonTypes:o,source:"stream_event"}}if(t==="tool_call"){let r=Zt(e.subtype)?.toLowerCase();if(r!=="rejected"&&r!=="blocked"&&r!=="denied")return null;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null,o=Zt(e.toolCallId)??Zt(e.tool_call_id),s;if(n){for(let i of Object.keys(n))if(i.endsWith("ToolCall")){s=i.slice(0,-8)||i;break}}return{toolCallId:o,toolName:s,blockReasonType:r,source:"stream_event"}}return null}function Tp(e){if(!vQ.test(e))return null;let t=e.match(/blockReasonType[=:]\s*(\w+)/i),r=e.match(/toolCallId[=:\s]+([^\s,]+)/i),n=e.match(/approvalReasonTypes[=:\s]*\[([^\]]+)\]/i);return{toolCallId:r?.[1],blockReasonType:t?.[1]??(e.includes("userRejected")?"userRejected":void 0),approvalReasonTypes:n?n[1].split(",").map(o=>o.trim().replace(/^["']|["']$/g,"")):e.includes("unapproved_commands")?["unapproved_commands"]:void 0,source:"stderr"}}function Np(e){let t=[bQ];return e.toolName&&t.push(`tool=${e.toolName}`),e.toolCallId&&t.push(`toolCallId=${e.toolCallId}`),e.blockReasonType&&t.push(`blockReason=${e.blockReasonType}`),e.approvalReasonTypes?.length&&t.push(`approvalReasons=${e.approvalReasonTypes.join(",")}`),t.join(": ")}var bQ,vQ,iL=p(()=>{"use strict";bQ="cursor_tool_approval_blocked",vQ=/blockReasonType[=:]\s*(\w+)|userRejected|Shell approval gate|approvalReasonTypes|unapproved_commands/i});function Dp(e){console.error(JSON.stringify({scope:"cursor/chat-turn",requestId:e.requestId??"",turnId:e.turnId??"",event:e.event,...e.exitCode!==void 0?{exitCode:e.exitCode}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolName?{toolName:e.toolName}:{},...e.blockReason?{blockReason:e.blockReason}:{},...e.stopReason?{stopReason:e.stopReason}:{},...e.error?{error:e.error}:{}}))}var aL=p(()=>{"use strict"});import{spawn as RQ}from"node:child_process";function Pb(e){return e==="ask"?"ask":"agent"}function xQ(e,t,r,n=[],o="agent"){return[...n,"-p",...o==="ask"?["--mode","ask"]:["--force"],"--trust","--workspace",t,"--output-format","stream-json","--stream-partial-output","--model",e,r]}function CQ(e,t){if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event;if(r.type==="content_block_delta"&&r.delta?.type==="text_delta"&&r.delta.text)return r.delta.text}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let n=r.filter(o=>!!o&&typeof o=="object"&&o.type==="text"&&typeof o.text=="string").map(o=>o.text).join("");if(n&&n.startsWith(t))return n.slice(t.length)}}return""}function EQ(e){return e.type!=="result"?"":typeof e.result=="string"?e.result:""}function Ob(e,t){let r=e.trim(),n=t.trim();return r?n&&(t.length>e.length||t.length===e.length&&t!==e)?t:e:t}function Tb(e,t,r){if(!e)return;if(e.startsWith(t)){let o=e.slice(t.length);o&&r(o);return}if(!t.trim()){r(e);return}let n=t.trimEnd();if(e.startsWith(n)){let o=e.slice(n.length);o&&r(o);return}e.length>t.length&&r(e.slice(t.length))}function AQ(e){let t=e.usage;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t,n=typeof r.input_tokens=="number"?r.input_tokens:typeof r.inputTokens=="number"?r.inputTokens:typeof r.prompt_tokens=="number"?r.prompt_tokens:void 0,o=typeof r.output_tokens=="number"?r.output_tokens:typeof r.outputTokens=="number"?r.outputTokens:typeof r.completion_tokens=="number"?r.completion_tokens:void 0;return n===void 0&&o===void 0?null:{input_tokens:n??0,output_tokens:o??0}}function IQ(e,t){if(_Q.test(e))return`${rh}: ${e.trim().slice(0,240)||"agent CLI is not logged in"}`;let r=e.trim().slice(0,240);return t===null?r?`cursor_chat_failed: ${r}`:"cursor_chat_failed: process exited without a code":r?`cursor_chat_failed: exit ${t} \u2014 ${r}`:`cursor_chat_failed: exit ${t}`}async function lL(e){let t=e.env??process.env,r=e.access??ni("cursor"),n=e.workspaceDir??r.workDir,o=tL(),s=Pb(e.payload.executionMode),i=s==="agent"?Xt(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=ri(e.payload,s,i,r),c=e.spawnTarget;if(!c){let f=Jn(t),m=fa(f);c={executable:m.executable,prefixArgs:m.prefixArgs}}let u=xQ(e.model,n,l,c.prefixArgs,s),d={...Qt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let C=Z({cwd:n,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:d});g=RQ(c.executable,u,C)}catch(C){if(C.code==="ENOENT"){m(new Error(`${Pu}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}m(C instanceof Error?C:new Error(String(C)));return}let h=!1,y=new zt,b="",k=C=>{let P=y.push(C);P&&(b+=P,e.onDelta(P))},v="",S="",_={input_tokens:0,output_tokens:0},R="",w="",B=!1,j=!1,O,T=Tp(R),U=null,N=C=>{if(h)return;if(h=!0,clearTimeout(x),O&&clearTimeout(O),e.signal?.removeEventListener("abort",W),C){Dp({requestId:e.requestId,turnId:e.turnId,event:"turn_error",exitCode:U,error:C.message,...T?.toolCallId?{toolCallId:T.toolCallId}:{},...T?.toolName?{toolName:T.toolName}:{},...T?.blockReasonType?{blockReason:T.blockReasonType}:{}}),m(C);return}let P=Tp(R);if(P&&(T=P),T){let Y=new Error(Np(T));Dp({requestId:e.requestId,turnId:e.turnId,event:"turn_approval_blocked",exitCode:U,toolCallId:T.toolCallId,toolName:T.toolName,blockReason:T.blockReasonType,error:Y.message}),m(Y);return}let D=y.end();D&&(b+=D,e.onDelta(D));let ne=Ob(v,S),V=hn(ne,a);Tb(V.text,b,e.onDelta),V.rejected.length>0&&console.error(JSON.stringify({event:"cursor_tool_call_rejected",names:V.rejected.slice(0,5),advertised:a.size}));let{content:te,stop_reason:pe}=yn(V,e.turnId??"turn");Dp({requestId:e.requestId,turnId:e.turnId,event:"turn_end",exitCode:U,stopReason:pe}),f({content:te,stop_reason:pe,usage:_})},J=C=>{g.pid?he(g.pid,C):tt(g,C)},F=()=>{J("SIGTERM"),O??=setTimeout(()=>{j||J("SIGKILL")},SQ),O.unref()},W=()=>{F(),N(new Error("cursor_chat_aborted"))},x=setTimeout(()=>{B=!0,F()},e.timeoutMs??wQ);if(g.on("error",C=>{if(C.code==="ENOENT"){N(new Error(`${Pu}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}N(C)}),e.signal){if(e.signal.aborted){W();return}e.signal.addEventListener("abort",W)}let G=C=>{let P=C.trim();if(!P)return;let D;try{D=JSON.parse(P)}catch{return}let ne=CQ(D,v);ne&&(v+=ne,k(ne));let V=EQ(D);V&&(S=V);let te=AQ(D);if(te&&(_=te),e.onActivity)for(let Y of o(D))e.onActivity(Y);let pe=sL(D);pe&&(T=pe,F(),N(new Error(Np(pe))))};g.stdout?.on("data",C=>{w+=typeof C=="string"?C:C.toString("utf8");let P;for(;(P=w.indexOf(`
223
+ `))!==-1;){let D=w.slice(0,P);w=w.slice(P+1),G(D)}}),g.stderr?.on("data",C=>{R+=typeof C=="string"?C:C.toString("utf8"),R.length>8e3&&(R=R.slice(-8e3));let P=Tp(R);P&&(T=P,F(),N(new Error(Np(P))))}),g.on("close",C=>{if(j=!0,U=C,w.trim()&&G(w),B){N(new Error("cursor_chat_timeout"));return}if(C!==0&&!v&&!S){N(new Error(IQ(R,C)));return}N()})})}var wQ,SQ,_Q,Mp=p(()=>{"use strict";Rs();M();kl();Op();ko();bl();ws();Zs();iL();aL();wQ=24e4,SQ=1500,_Q=/not logged in|please run[`\s]+agent login|authentication required|unauthorized|invalid api key/i});import{spawn as PQ}from"node:child_process";function NQ(e){return e==="ask"?"ask":"agent"}function DQ(e,t){return e==="ask"?["--sandbox","read-only"]:!t||t.source==="default"?["--sandbox","workspace-write"]:t.access==="off"?["--sandbox","read-only"]:t.access==="full"?["--sandbox","danger-full-access"]:["--sandbox","workspace-write","-c","sandbox_workspace_write.network_access=true",...t.extraFolders.flatMap(r=>["--add-dir",r])]}function MQ(e,t,r="agent",n=[],o=process.platform,s){return[...n,"exec",...Nu(o),"--skip-git-repo-check","--json","--ask-for-approval","never",...DQ(r,s),"--model",e,t]}function LQ(e,t){if((e.type==="item.updated"||e.type==="item.completed")&&e.item&&typeof e.item=="object"){let r=e.item;if(r.type==="agent_message"&&typeof r.text=="string"&&r.text.startsWith(t))return r.text.slice(t.length)}if(e.type==="agent_message.delta"||e.type==="item.delta"){let r=typeof e.delta=="string"?e.delta:e.delta&&typeof e.delta=="object"?e.delta.text:void 0;if(typeof r=="string")return r}return""}function BQ(e){if(e.type!=="turn.completed")return null;let t=e.usage;if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t,n=typeof r.input_tokens=="number"?r.input_tokens:void 0,o=typeof r.output_tokens=="number"?r.output_tokens:void 0;return n===void 0&&o===void 0?null:{input_tokens:n??0,output_tokens:o??0}}function UQ(e,t){if(TQ.test(e))return`${db}: ${e.trim().slice(0,240)||"Codex CLI is not logged in"}`;let r=e.trim().slice(0,240);return t===null?r?`codex_chat_failed: ${r}`:"codex_chat_failed: process exited without a code":r?`codex_chat_failed: exit ${t} \u2014 ${r}`:`codex_chat_failed: exit ${t}`}async function cL(e){let t=e.env??process.env,r=e.access??ni("codex"),n=e.workspaceDir??r.workDir,o=NQ(e.payload.executionMode),s=o==="agent"?Xt(e.payload.tools):[],i=new Set(s.map(f=>f.name)),a=ri(e.payload,o,s,r),l=eL(),c=e.spawnTarget??{executable:t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||Cr(),prefixArgs:[]},u=MQ(e.model,a,o,c.prefixArgs,process.platform,r),d={...Qt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let U=Z({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[N,J]=le(c.executable,u);g=PQ(N,J,U)}catch(U){if(U.code==="ENOENT"){m(new Error(`${Sp}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}m(U instanceof Error?U:new Error(String(U)));return}let h=!1,y=new zt,b=U=>{let N=y.push(U);N&&e.onDelta(N)},k="",v={input_tokens:0,output_tokens:0},S="",_="",R=!1,w=U=>{if(h)return;if(h=!0,clearTimeout(O),e.signal?.removeEventListener("abort",j),U){m(U);return}let N=y.end();N&&e.onDelta(N);let J=hn(k,i);J.rejected.length>0&&console.error(JSON.stringify({event:"codex_tool_call_rejected",names:J.rejected.slice(0,5),advertised:i.size})),f({...yn(J,e.turnId??"turn"),usage:v})},B=()=>tt(g,"SIGTERM"),j=()=>{B(),w(new Error("codex_chat_aborted"))},O=setTimeout(()=>{R=!0,B()},e.timeoutMs??OQ);if(g.on("error",U=>{if(U.code==="ENOENT"){w(new Error(`${Sp}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}w(U)}),e.signal){if(e.signal.aborted){j();return}e.signal.addEventListener("abort",j)}let T=U=>{let N=U.trim();if(!N)return;let J;try{J=JSON.parse(N)}catch{return}let F=LQ(J,k);F&&(k+=F,b(F));let W=BQ(J);if(W&&(v=W),e.onActivity)for(let x of l(J))e.onActivity(x)};g.stdout?.on("data",U=>{_+=typeof U=="string"?U:U.toString("utf8");let N;for(;(N=_.indexOf(`
224
+ `))!==-1;){let J=_.slice(0,N);_=_.slice(N+1),T(J)}}),g.stderr?.on("data",U=>{S+=typeof U=="string"?U:U.toString("utf8"),S.length>8e3&&(S=S.slice(-8e3))}),g.on("close",U=>{if(_.trim()&&T(_),R){w(new Error("codex_chat_timeout"));return}if(U!==0&&!k){w(new Error(UQ(S,U)));return}w()})})}var OQ,TQ,uL=p(()=>{"use strict";zn();uh();M();ze();kl();Op();bl();xp();ko();Zs();OQ=24e4,TQ=/not logged in|please run[`\s]+codex login|authentication required|unauthorized|invalid api key|401\b/i});import{spawn as WQ}from"node:child_process";function $Q(e,t,r="agent",n=[]){return[...n,...$u({executionMode:r==="ask"?"read_only":"write",prompt:t},e)]}function KQ(e,t){if(dL.test(e))return`${Ep}: ${e.trim().slice(0,240)||"Google Antigravity is not signed in"}`;let r=e.trim().slice(0,240);return t===null?r?`antigravity_chat_failed: ${r}`:"antigravity_chat_failed: process exited without a code":r?`antigravity_chat_failed: exit ${t} \u2014 ${r}`:`antigravity_chat_failed: exit ${t}`}async function pL(e){let t=e.env??process.env,r=e.access??ni("antigravity"),n=e.workspaceDir??r.workDir,o=rL(),s=Pb(e.payload.executionMode),i=s==="agent"?Xt(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=ri(e.payload,s,i,r),c=e.spawnTarget??{executable:kt(t),prefixArgs:[]},u=$Q(e.model,l,s,c.prefixArgs),d={...Qt(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let N=Z({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[J,F]=le(c.executable,u);g=WQ(J,F,N)}catch(N){if(N.code==="ENOENT"){m(new Error(`${Cp}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}m(N instanceof Error?N:new Error(String(N)));return}let h=!1,y=new zt,b=N=>{let J=y.push(N);J&&e.onDelta(J)},k="",v="",S={input_tokens:0,output_tokens:0},_="",R="",w=!1,B=N=>{if(h)return;if(h=!0,clearTimeout(T),e.signal?.removeEventListener("abort",O),N){m(N);return}let J=v.length>=k.length&&v?v:k;v.startsWith(k)&&v.length>k.length?b(v.slice(k.length)):!k&&v&&b(v);let F=y.end();F&&e.onDelta(F);let W=hn(J,a);f({...yn(W,e.turnId??"turn"),usage:S})},j=()=>tt(g,"SIGTERM"),O=()=>{j(),B(new Error("antigravity_chat_aborted"))},T=setTimeout(()=>{w=!0,j()},e.timeoutMs??FQ);if(g.on("error",N=>{if(N.code==="ENOENT"){B(new Error(`${Cp}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}B(N)}),e.signal){if(e.signal.aborted){O();return}e.signal.addEventListener("abort",O)}let U=N=>{let J=N.trim();if(!J)return;let F;try{F=JSON.parse(J)}catch{return}if(e.onActivity)for(let x of o(F))e.onActivity(x);let W=cc(F);if(W&&(W.textDelta&&(k+=W.textDelta,b(W.textDelta)),W.usage&&(S={input_tokens:W.usage.inputTokens??S.input_tokens,output_tokens:W.usage.outputTokens??S.output_tokens}),!!W.terminal)){if(!W.terminal.ok){let x=W.terminal.error??"antigravity cli result error";if(j(),dL.test(x)){B(new Error(`${Ep}: ${x.slice(0,240)}`));return}B(new Error(`antigravity_chat_failed: ${x.slice(0,240)}`));return}v=W.terminal.finalResult??""}};g.stdout?.on("data",N=>{R+=typeof N=="string"?N:N.toString("utf8");let J;for(;(J=R.indexOf(`
225
+ `))!==-1;){let F=R.slice(0,J);R=R.slice(J+1),U(F)}}),g.stderr?.on("data",N=>{_+=typeof N=="string"?N:N.toString("utf8"),_.length>8e3&&(_=_.slice(-8e3))}),g.on("close",N=>{if(R.trim()&&U(R),w){B(new Error("antigravity_chat_timeout"));return}if(!h){if(N!==0&&!k&&!v){B(new Error(KQ(_,N)));return}B()}})})}var FQ,dL,fL=p(()=>{"use strict";Zn();em();M();ze();Ip();kl();Op();ko();bl();Mp();Zs();FQ=24e4,dL=/authentication required|not logged in|you are not logged|not authenticated/i});function HQ(){return{text:"",toolCalls:[],finishReason:null,promptTokens:0,completionTokens:0}}function jQ(e,t){let r=t,n=r.choices?.[0],o="";n?.delta?.content&&(o=n.delta.content,e.text+=o);for(let s of n?.delta?.tool_calls??[]){for(;e.toolCalls.length<=s.index;)e.toolCalls.push({id:"",name:"",argsJson:""});let i=e.toolCalls[s.index];s.id&&(i.id=s.id),s.function?.name&&(i.name+=s.function.name),s.function?.arguments&&(i.argsJson+=s.function.arguments)}return n?.finish_reason&&(e.finishReason=n.finish_reason),r.usage&&(e.promptTokens=r.usage.prompt_tokens??e.promptTokens,e.completionTokens=r.usage.completion_tokens??e.completionTokens),o}function VQ(e){let t=[];e.text&&t.push({type:"text",text:e.text});for(let n of e.toolCalls){if(!n.name)continue;let o={};try{o=n.argsJson?JSON.parse(n.argsJson):{}}catch{o={}}t.push({type:"tool_use",id:n.id||`toolu_http_${n.name}`,name:n.name,input:o})}let r=e.toolCalls.some(n=>n.name);return{content:t,stop_reason:r&&e.finishReason!=="length"?"tool_use":e.finishReason==="length"?"max_tokens":"end_turn",usage:{input_tokens:e.promptTokens,output_tokens:e.completionTokens}}}function GQ(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){let n=r;n.type==="image"&&n.source?.type==="base64"&&typeof n.source.data=="string"&&t.push(`data:${n.source.media_type??"image/jpeg"};base64,${n.source.data}`)}return t}function JQ(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text).join(`
226
+ `):""}function qQ(e){let t=e.role==="assistant"?"assistant":"user";if(typeof e.content=="string")return[{role:t,content:e.content}];if(!Array.isArray(e.content))return[{role:t,content:""}];if(t==="assistant"){let s=e.content.filter(a=>a.type==="text").map(a=>a.text).join(""),i=e.content.filter(a=>a.type==="tool_use").map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.input??{})}}));return[{role:"assistant",content:s||null,...i.length>0?{tool_calls:i}:{}}]}let r=[],n=[],o=[];for(let s of e.content){let i=s;i.type==="tool_result"?(r.push({role:"tool",tool_call_id:i.tool_use_id,content:JQ(i.content)}),o.push(...GQ(i.content))):i.type==="text"&&i.text&&n.push(i.text)}return o.length>0&&r.push({role:"user",content:[{type:"text",text:"Screenshot from the browser tool result above:"},...o.map(s=>({type:"image_url",image_url:{url:s}}))]}),n.length>0&&r.push({role:"user",content:n.join(`
227
+ `)}),r}function YQ(e,t){let r=[];e.trim()&&r.push({role:"system",content:e});for(let n of t)r.push(...qQ(n??{}));return r}function zQ(e){return e.map(t=>{let r=t;return typeof r.name!="string"||!r.name?null:{type:"function",function:{name:r.name,...r.description?{description:r.description}:{},parameters:r.input_schema??{type:"object"}}}}).filter(t=>t!==null)}async function*XQ(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await t.read();if(o)break;n+=r.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
228
+ `))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{t.releaseLock()}}async function mL(e){let{creds:t,model:r,payload:n}=e,o=Array.isArray(n.tools)?zQ(n.tools):[],s={model:r,messages:YQ(n.system,Array.isArray(n.messages)?n.messages:[]),max_completion_tokens:n.maxTokens,stream:!0,stream_options:{include_usage:!0},...o.length>0?{tools:o}:{},...n.temperature!==void 0?{temperature:n.temperature}:{}},i=await fetch(`${t.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.apiKey}`},signal:e.signal,body:JSON.stringify(s)});if(!i.ok||!i.body){let l=await i.text().catch(()=>"");throw new Error(`${t.label} stream failed: HTTP ${i.status}${l?` \u2014 ${l.slice(0,300)}`:""}`)}let a=HQ();for await(let l of XQ(i.body)){let c=jQ(a,l);c&&e.onDelta(c)}return VQ(a)}var gL=p(()=>{"use strict"});function hL(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.session!="string"||!QQ.test(t.session))return null;let r=typeof t.timeLeftMs=="number"&&Number.isFinite(t.timeLeftMs)?Math.max(0,Math.floor(t.timeLeftMs)):0;return{session:t.session,timeLeftMs:r}}function yL(e){let t=typeof e.maxMs=="number"&&e.maxMs>0?e.maxMs:48e4;return Math.max(0,Math.min(t,e.timeLeftMs))}var QQ,Lp=p(()=>{"use strict";QQ=/^[A-Za-z0-9_.:-]{1,128}$/});function ZQ(e=Date.now){let t=new Map,r=()=>{let n=e();for(let[o,s]of t)n-s.at>9e5&&t.delete(o);for(;t.size>64;)t.delete(t.keys().next().value)};return{get(n){return r(),t.get(n)?.sessionId??null},remember(n,o){t.delete(n),t.set(n,{sessionId:o,at:e()}),r()},forget(n){t.delete(n)}}}var kL,bL=p(()=>{"use strict";kL=ZQ()});function eZ(e,t){if(e.access==="off")throw new Error("claude_code_access_off");return e.access==="full"?["--permission-mode","bypassPermissions",...xb()]:["--permission-mode","acceptEdits",`--allowedTools=${(t?.shell==="disabled"?vL.filter(n=>n!=="Bash"):[...vL]).join(",")}`,...xb(),...t?["--settings",t.settingsFile]:[],...e.access==="folders"?e.extraFolders.flatMap(n=>["--add-dir",n]):[]]}function Nb(e){return["-p","--output-format","stream-json","--include-partial-messages","--verbose",...e.model?["--model",e.model]:[],"--append-system-prompt-file",e.systemPromptFile,...e.resumeSessionId?["--resume",e.resumeSessionId]:[],...eZ(e.access,e.sandbox),"--",e.prompt]}var vL,RL=p(()=>{"use strict";ko();vL=["Bash","WebFetch","WebSearch"]});import{lookup as tZ}from"node:dns/promises";import{createServer as rZ,request as nZ}from"node:http";import{connect as oZ,isIP as _L,isIPv4 as sZ}from"node:net";function xL(e){let t=e.split(".");if(t.length!==4)return null;let r=t.map(n=>Number(n));return r.every(n=>Number.isInteger(n)&&n>=0&&n<=255)?r:null}function vl(e){let t=xL(e);if(!t)return!0;let[r,n]=t;return r===0||r===10||r===127||r===169&&n===254||r===172&&n>=16&&n<=31||r===192&&n===168||r===100&&n>=64&&n<=127||r===192&&n===0&&t[2]===0||r>=224}function aZ(e){let t=e,r=t.indexOf("%");r!==-1&&(t=t.slice(0,r));let n=t.lastIndexOf(":"),o=t.slice(n+1);if(o.includes(".")){let u=xL(o);if(!u)return null;t=`${t.slice(0,n+1)}${(u[0]<<8|u[1]).toString(16)}:${(u[2]<<8|u[3]).toString(16)}`}let s=t.split("::");if(s.length>2)return null;let i=u=>u===""?[]:u.split(":").map(d=>/^[0-9a-f]{1,4}$/i.test(d)?parseInt(d,16):NaN),a=i(s[0]),l=s.length===2?i(s[1]):[];if([...a,...l].some(u=>Number.isNaN(u)))return null;let c=8-a.length-l.length;return(s.length===2?c<0:c!==0)?null:[...a,...new Array(Math.max(0,c)).fill(0),...l]}function lZ(e){let t=aZ(e);if(!t||t.every(s=>s===0)||t.slice(0,7).every(s=>s===0)&&t[7]===1)return!0;let n=(s,i)=>`${s>>8}.${s&255}.${i>>8}.${i&255}`;if(t.slice(0,5).every(s=>s===0)&&t[5]===65535||t.slice(0,6).every(s=>s===0)||t[0]===100&&t[1]===65435&&t.slice(2,6).every(s=>s===0))return vl(n(t[6],t[7]));if(t[0]===8194)return vl(n(t[1],t[2]));let o=t[0];return(o&65024)===64512||(o&65472)===65152||(o&65472)===65216||(o&65280)===65280||o===8193&&t[1]===3512}function wL(e){let t=_L(e);return t===4?vl(e):t===6?lZ(e):!0}function cZ(e){return e==="localhost"||e.endsWith(".localhost")||e==="localhost6"||e==="ip6-localhost"}function uZ(e){let t=e.trim().toLowerCase();for(t.startsWith("[")&&t.endsWith("]")&&(t=t.slice(1,-1));t.endsWith(".");)t=t.slice(0,-1);return t}async function CL(e){return(await tZ(e,{all:!0})).map(r=>r.address)}async function SL(e,t=CL){let r=uZ(e);if(!r||r.length>iZ)return{allowed:!1,host:r,reason:"invalid host"};if(cZ(r))return{allowed:!1,host:r,reason:`${r} is this computer (loopback): local services are not reachable from a folder step`};if(_L(r))return wL(r)?{allowed:!1,host:r,reason:`${r} is a private, loopback, link-local or metadata address: not reachable from a folder step`}:{allowed:!0,host:r,address:r};let n;try{n=await t(r)}catch(s){return{allowed:!1,host:r,reason:`${r} could not be resolved (${s?.message??String(s)})`}}if(!n.length)return{allowed:!1,host:r,reason:`${r} could not be resolved`};let o=n.find(s=>wL(s));return o?{allowed:!1,host:r,reason:`${r} resolves to ${o}, a private, loopback, link-local or metadata address: not reachable from a folder step`}:{allowed:!0,host:r,address:n.find(s=>sZ(s))??n[0]}}function Db(e,t,r){let n=`Kynver folder sandbox: ${r}
229
+ `;e.write(`HTTP/1.1 ${t} ${t===Mb?"Forbidden":"Bad Gateway"}\r
230
+ Content-Type: text/plain\r
231
+ Content-Length: ${Buffer.byteLength(n)}\r
232
+ Connection: close\r
233
+ \r
234
+ ${n}`),e.end()}function pZ(e){if(!e)return null;let t=e.lastIndexOf(":");if(t<=0)return null;let r=e.slice(0,t),n=Number(e.slice(t+1));return!Number.isInteger(n)||n<1||n>65535?null:{host:r,port:n}}async function fZ(e={}){let t=e.lookup??CL,r=e.dial??((m,g)=>oZ({host:m,port:g})),n=e.idleMs??dZ,o={allowed:0,denied:0},s=(m,g,h)=>{let y=pZ(m.url);if(g.on("error",()=>g.destroy()),!y){o.denied+=1,Db(g,400,"CONNECT needs host:port");return}SL(y.host,t).then(b=>{if(!b.allowed){o.denied+=1,Db(g,Mb,b.reason);return}o.allowed+=1;let k=r(b.address,y.port,b.host),v=!1;k.setTimeout(n,()=>k.destroy()),k.once("connect",()=>{v=!0,g.write(`HTTP/1.1 200 Connection Established\r
235
+ \r
236
+ `),h.length&&k.write(h),k.pipe(g),g.pipe(k)}),k.on("error",S=>{if(v){g.destroy();return}Db(g,502,`could not connect to ${b.host}:${y.port} (${S.code??S.message})`)}),k.on("close",()=>g.end()),g.on("close",()=>k.destroy())})},i=(m,g)=>{let h;try{h=new URL(m.url??"")}catch{g.writeHead(400,{"Content-Type":"text/plain"}).end(`Kynver folder sandbox: this is an HTTP proxy; send an absolute URL or CONNECT
237
+ `);return}if(h.protocol!=="http:"){g.writeHead(400,{"Content-Type":"text/plain"}).end(`Kynver folder sandbox: only http:// requests are forwarded here; https goes through CONNECT
238
+ `);return}let y=h.port?Number(h.port):80;SL(h.hostname,t).then(b=>{if(!b.allowed){o.denied+=1,g.writeHead(Mb,{"Content-Type":"text/plain",Connection:"close"}).end(`Kynver folder sandbox: ${b.reason}
239
+ `);return}o.allowed+=1;let k={...m.headers};delete k["proxy-connection"],delete k["proxy-authorization"];let v=nZ({host:b.address,port:y,method:m.method,path:`${h.pathname}${h.search}`,headers:k,setHost:!1,createConnection:()=>r(b.address,y,b.host)},S=>{g.writeHead(S.statusCode??502,S.headers),S.pipe(g)});v.setTimeout(n,()=>v.destroy(new Error("idle"))),v.on("error",S=>{g.headersSent||g.writeHead(502,{"Content-Type":"text/plain"}),g.end(`Kynver folder sandbox: could not reach ${b.host}:${y} (${S.code??S.message})
240
+ `)}),m.pipe(v)})},a=()=>{let m=rZ(i);return m.on("connect",s),m.on("clientError",(g,h)=>h.destroy()),m.unref(),m},l=a(),c=await new Promise((m,g)=>{l.once("error",g),l.listen(0,"127.0.0.1",()=>{let h=l.address();if(!h||typeof h!="object"){g(new Error("egress proxy bound no port"));return}m(h.port)})}),u=a(),f=await new Promise(m=>{u.once("error",()=>m(!1)),u.listen(c,"::1",()=>m(!0))})?[l,u]:[l];return{port:c,listening:()=>l.listening,counts:()=>({...o}),close:()=>Promise.all(f.map(m=>new Promise(g=>m.close(()=>g())))).then(()=>{})}}async function EL(e={}){return oi?.listening()?oi:(Bp||(Bp=fZ(e).then(t=>(oi=t,Rl=null,t)).catch(t=>{throw oi=null,Rl=`egress proxy could not start: ${t?.message??String(t)}`.slice(0,240),new Error(Rl)}).finally(()=>{Bp=null})),Bp)}function AL(){return oi?.listening()?{status:"running",port:oi.port}:Rl?{status:"failed",reason:Rl}:{status:"not_started"}}var iZ,dZ,Mb,oi,Bp,Rl,Lb=p(()=>{"use strict";iZ=253;dZ=10*6e4,Mb=403;oi=null,Bp=null,Rl=null});import{existsSync as mZ}from"node:fs";import Wp from"node:path";function Ub(e=process.env,t={}){let r=(e[gZ]??t.chatFolderSandbox??"").toString().trim().toLowerCase();return r==="best-effort"||r==="best_effort"||r==="optional"?"best_effort":"required"}function TL(e=process.env,t={}){let r=[],n=e[hZ];n&&r.push(...n.split(/[\s,]+/)),Array.isArray(t.chatFolderSandboxDomains)&&r.push(...t.chatFolderSandboxDomains.filter(s=>typeof s=="string"));let o=[...yZ];for(let s of r){let i=s.trim().toLowerCase();i&&/^[a-z0-9*][a-z0-9.*-]*$/.test(i)&&!o.includes(i)&&o.push(i)}return o}function Up(e){return`~/${e}`}function vZ(){let e=[];for(let t of Fp)e.push(`Read(${Up(t)}/**)`,`Edit(${Up(t)}/**)`);for(let t of $p)e.push(`Read(${Up(t)})`,`Edit(${Up(t)})`);for(let t of si)e.push(`Read(//**/${t})`,`Edit(//**/${t})`);return e}function RZ(e,t=[],r={}){let n=["~/",...bZ];for(let o of Fp)n.push(`~/${o}`);for(let o of $p)n.push(`~/${o}`);for(let o of t)n.push(Bb(o));if(r.scanComplete!==!0)for(let o of e)for(let s of si)n.push(Wp.posix.join(Bb(o),"**",s));return n}function wZ(e){return[...e.map(Bb),...kZ.map(t=>`~/${t}`)]}function Bb(e){return e.split(Wp.sep).join("/")}function IL(e){let t={deny:vZ(),blockReadsOutsideWorkingDirectories:!0};if(!e.sandbox)return{permissions:t,sandbox:{enabled:!1}};let r=e.egressProxyPort;return{permissions:t,sandbox:{enabled:!0,autoAllowBashIfSandboxed:!0,allowUnsandboxedCommands:!1,failIfUnavailable:!0,filesystem:{denyRead:RZ(e.folders,e.sensitiveFiles,{scanComplete:e.sensitiveScanComplete}),allowRead:wZ(e.folders)},network:{allowedDomains:e.domains,allowLocalBinding:!0,...typeof r=="number"&&r>0?{httpProxyPort:r}:{}}}}}function NL(e){return!!e&&SZ.test(e)}function _Z(e,t,r){return(t.PATH??"").split(Wp.delimiter).filter(Boolean).some(o=>r(Wp.join(o,e)))}function xZ(e={}){let t=e.platform??process.platform,r=e.env??process.env,n=e.exists??mZ;if(t==="darwin")return{kind:"seatbelt",available:!0,missing:[]};if(t==="linux"){let o=["bwrap","socat"].filter(s=>!_Z(s,r,n));return o.length?{kind:"bubblewrap",available:!1,missing:o,reason:`Linux needs bubblewrap and socat on PATH to confine shell commands (missing: ${o.join(", ")})`}:{kind:"bubblewrap",available:!0,missing:[]}}return{kind:"none",available:!1,missing:[],reason:t==="win32"?"native Windows cannot confine shell commands (use WSL2 with bubblewrap and socat)":`no command sandbox on ${t}`}}function Wb(){return PL??=xZ(),PL}function ML(e){DL=e.trim().slice(0,240)||"sandbox failed to start"}function Fb(){return DL}function LL(e){return e.streamed.trim()||e.exitCode===0||e.numTurns!==null&&e.numTurns>0?!1:CZ.test(e.detail)&&EZ.test(e.detail)}function BL(e){if(e.access.access!=="folder"&&e.access.access!=="folders")throw new Error(`folder_sandbox_not_applicable: ${e.access.access}`);let t=e.access.folders.length?e.access.folders:[],r=e.runtime.available?e.startupFailure??null:e.runtime.reason??"no command sandbox";if(!r){let o=e.egress&&typeof e.egress.port=="number"&&e.egress.port>0?e.egress.port:null,s=o?void 0:e.egress&&"reason"in e.egress&&e.egress.reason||"egress proxy not started";return{shell:"sandboxed",policy:e.policy,runtime:e.runtime,network:o?"public":"domain-list",...s?{networkReason:s}:{},settings:IL({folders:t,sandbox:!0,domains:e.domains,egressProxyPort:o,sensitiveFiles:e.sensitiveFiles,sensitiveScanComplete:e.sensitiveScanComplete}),note:o?`${OL} ${AZ}`:`${OL} ${IZ}`}}let n=IL({folders:t,sandbox:!1,domains:e.domains});return e.policy==="best_effort"?{shell:"unconfined",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:OZ}:{shell:"disabled",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:PZ}}function Kp(e=process.env,t={},r={}){let n=r.runtime??Wb(),o=r.startupFailure===void 0?Fb():r.startupFailure,s=Ub(e,t),i=n.available?o??void 0:n.reason,a=i?s==="best_effort"?"unconfined":"disabled":"sandboxed",l=r.egress??AL(),c=a!=="sandboxed"?{}:l.status==="failed"?{network:"domain-list",networkReason:l.reason}:{network:"public"};return{policy:s,runtime:n.kind,available:n.available&&!o,shell:a,...i?{reason:i}:{},...c}}var gZ,hZ,yZ,Fp,$p,si,kZ,bZ,bo,SZ,PL,DL,CZ,EZ,OL,AZ,IZ,PZ,OZ,wl=p(()=>{"use strict";Lb();gZ="KYNVER_CHAT_FOLDER_SANDBOX",hZ="KYNVER_CHAT_FOLDER_SANDBOX_DOMAINS";yZ=["registry.npmjs.org","*.npmjs.org","registry.yarnpkg.com","*.pnpm.io","pypi.org","*.pypi.org","files.pythonhosted.org","github.com","*.github.com","*.githubusercontent.com","gitlab.com","*.gitlab.com","bitbucket.org","crates.io","*.crates.io","static.crates.io","index.crates.io","proxy.golang.org","sum.golang.org","storage.googleapis.com","rubygems.org","*.rubygems.org","repo1.maven.org","*.maven.org","*.gradle.org","api.nuget.org","*.nuget.org","registry-1.docker.io","*.docker.io","*.docker.com","ghcr.io","deb.debian.org","*.debian.org","*.ubuntu.com","*.alpinelinux.org","*.fedoraproject.org","huggingface.co","*.huggingface.co","*.hf.co","nodejs.org","*.nodejs.org","deno.land","bun.sh","*.rustup.rs","sh.rustup.rs","go.dev","*.golang.org"];Fp=[".ssh","private",".private",".config",".aws",".railway",".gnupg",".kube",".docker",".azure",".terraform.d",".1password",".password-store",".local/share/keyrings",".claude",".codex",".cursor",".gemini",".antigravity",".kynver/credentials.d",".kynver/site-logins","Library/Keychains","Library/Application Support","Library/Cookies",".mozilla"],$p=[".netrc",".npmrc",".pypirc",".git-credentials",".bash_history",".zsh_history",".python_history",".bashrc",".bash_profile",".profile",".zshrc",".zshenv",".zprofile",".claude.json",".vault-token",".m2/settings.xml",".gradle/gradle.properties",".cache/huggingface/token",".kynver/credentials",".kynver/credentials.json",".kynver/chat-box-credential",".kynver/config.json"],si=[".env",".env.*","*.env",".envrc","credentials","credentials.json","*credentials*.json","*service-account*.json","*service_account*.json","*.pem","*.p12","*.pfx","id_rsa","id_rsa.*","id_ed25519","id_ed25519.*","id_ecdsa","id_ecdsa.*"],kZ=[".nvm",".npm",".cache",".local/bin",".local/lib",".local/share",".local/state",".cargo",".rustup",".pyenv",".rbenv",".bun",".deno",".volta",".fnm",".sdkman",".yarn",".pnpm-store",".conda","miniconda3","anaconda3",".gem",".m2",".gradle",".nuget",".dotnet",".go","go",".gitconfig"],bZ=["/home","/root","/Users","/mnt","/media","/Volumes"];bo=3128,SZ=new RegExp([`failed to connect to (?:localhost|127\\.0\\.0\\.1|::1|\\[::1\\]) port ${bo}\\b`,`(?:localhost|127\\.0\\.0\\.1|\\[::1\\]|::1):${bo}\\b[^\\n]{0,80}?(?:connection refused|econnrefused)`,`(?:connection refused|econnrefused)[^\\n]{0,80}?(?:localhost|127\\.0\\.0\\.1|::1):${bo}\\b`,`(?:cannot|could not|unable to) connect to proxy[^\\n]{0,80}?${bo}\\b`,`proxyerror[^\\n]{0,120}?${bo}\\b`].join("|"),"i");PL=null;DL=null;CZ=/sandbox/i,EZ=/unavailable|not available|not supported|unsupported|bubblewrap|bwrap|socat|failIfUnavailable|seccomp|could not (?:be )?(?:start|initiali[sz]e)|failed to (?:start|initiali[sz]e)/i;OL="Your shell and file tools are confined to the chosen folder(s) this turn: other folders, dotfiles, ~/.ssh, ~/private, ~/.config, credential and .env files are not readable, writes stay in the folder, and the environment carries no secrets. Work inside the folder; if something is refused, say so.",AZ="The folder limits files, not the internet: shell downloads (curl, wget, pip, npm, git \u2026) reach any public website through the sandbox's HTTP proxy. Only private, loopback, link-local and cloud-metadata addresses are refused (a 403 'Kynver folder sandbox' from the proxy says so). The sandbox's proxy bridge takes a moment to start in each new shell command: curl and wget here already retry a refused connection; in Python or other clients, retry a connection refused on localhost:3128 a few times (or `sleep 1` first). If a command still fails with 'Failed to connect to localhost port 3128', retry the command once; if it fails the same way again, the sandbox network proxy is not running on this computer: say exactly that. Never report such a failure as a blocked website or ask the user to allow a host.",IZ="Shell network this turn is limited to package registries and code hosts (the computer's sandbox egress proxy is not running); fetch other websites with WebFetch, and say so when a shell download is refused.",PZ="Shell commands are OFF this turn: this computer cannot confine them to the chosen folder, so only the file tools are available (reads and edits inside the folder). If the job needs commands, tell the user: on Linux/WSL2 install bubblewrap and socat, or choose full computer access in Kynver's Computers settings. Never claim to have run a command.",OZ="Shell commands are NOT confined to the chosen folder on this computer (folder sandbox set to best-effort). Treat the folder boundary as a rule you follow yourself: do not read or change anything outside the chosen folder(s), and never look for credentials elsewhere on the computer."});import{readdir as TZ}from"node:fs/promises";import $b from"node:path";function Kb(e){let t=e.map(r=>r.split("*").map(n=>n.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*"));return new RegExp(`^(?:${t.join("|")})$`,"i")}async function WL(e,t,r={}){let n=r.now??Date.now,o=n(),s=r.maxEntries??NZ,i=r.maxMs??DZ,a=r.maxResults??MZ,l=Kb(t),c=new Set,u=[...new Set(e.map(g=>$b.resolve(g)))],d=0,f=!1,m=()=>d>=s||n()-o>i||c.size>=a;for(;u.length;){let g=[];for(let h=0;h<u.length;h+=UL){if(m()){f=!0;break}let y=u.slice(h,h+UL),b=await Promise.all(y.map(k=>TZ(k,{withFileTypes:!0}).then(v=>({dir:k,entries:v}),v=>(LZ.has(v?.code??"")||(f=!0),{dir:k,entries:[]}))));for(let{dir:k,entries:v}of b)for(let S of v){if(d>=s){f=!0;break}d+=1;let _=$b.join(k,S.name);l.test(S.name)?c.add(BZ(_)):S.isDirectory()&&!S.isSymbolicLink()&&g.push(_)}}if(f)break;if(u=g,u.length&&m()){f=!0;break}}return{paths:[...c].sort(),scanned:d,truncated:f,durationMs:n()-o}}function BZ(e){return e.split($b.sep).join("/")}var NZ,DZ,MZ,UL,LZ,Hb=p(()=>{"use strict";NZ=25e4,DZ=15e3,MZ=2e3,UL=64,LZ=new Set(["ENOENT","EACCES","EPERM","ENOTDIR"])});import{spawn as UZ}from"node:child_process";import{mkdirSync as WZ,mkdtempSync as FZ,rmSync as $Z,writeFileSync as Hp}from"node:fs";import{tmpdir as KZ}from"node:os";import vo from"node:path";function QZ(){return{".curlrc":`retry = 5
241
241
  retry-connrefused
242
242
  retry-delay = 1
243
243
  `,".wgetrc":`tries = 5
244
244
  retry_connrefused = on
245
245
  waitretry = 1
246
- `}}function PZ(){return["# Kynver folder sandbox: wait for Claude Code's in-sandbox proxy bridge (localhost:3128) before the command runs.",'if [ -z "${KYNVER_SANDBOX_BRIDGE_READY:-}" ] && [ "${SANDBOX_RUNTIME:-}" = "1" ]; then',' case "${HTTP_PROXY:-}${http_proxy:-}" in'," *localhost:3128*|*127.0.0.1:3128*)",' case "${BASH_EXECUTION_STRING:-}" in'," *TCP-LISTEN:3128*) ;;"," *)"," __kynver_i=0",` while [ "$__kynver_i" -lt ${AZ} ]; do`," if (exec 3<>/dev/tcp/127.0.0.1/3128) 2>/dev/null; then break; fi"," sleep 0.05 2>/dev/null || break"," __kynver_i=$((__kynver_i + 1))"," done"," unset __kynver_i"," export KYNVER_SANDBOX_BRIDGE_READY=1"," ;;"," esac"," ;;"," esac","fi",""].join(`
247
- `)}function IZ(e){let t=ko.join(e,"net");mZ(t,{recursive:!0,mode:448});for(let[n,o]of Object.entries(EZ()))Pp(ko.join(t,n),o,{encoding:"utf8",mode:420});let r=ko.join(t,"bridge-wait.sh");return Pp(r,PZ(),{encoding:"utf8",mode:420}),{CURL_HOME:t,WGETRC:ko.join(t,".wgetrc"),BASH_ENV:r}}function wb(e){return e.type!=="stream_event"||!e.event||typeof e.event!="object"||typeof e.parent_tool_use_id=="string"&&e.parent_tool_use_id?null:e.event}function OZ(e){if(!wb(e))return"";let t=e.event;return t.type!=="content_block_delta"||t.delta?.type!=="text_delta"?"":typeof t.delta.text=="string"?t.delta.text:""}function TZ(e){if(!wb(e))return!1;let t=e.event;return t.type==="content_block_start"&&t.content_block?.type==="text"}function NZ(e){if(!wb(e))return"";let t=e.event;return t.type!=="message_delta"?"":typeof t.delta?.stop_reason=="string"?t.delta.stop_reason:""}function DZ(e,t){let r=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):0;if(r<=0)return e;let n=Number(e[yL]);return Number.isFinite(n)&&n>=r?e:{...e,[yL]:String(r)}}function MZ(e){if(e.type!=="result"||!e.usage||typeof e.usage!="object")return null;let t=e.usage,r=n=>typeof n=="number"&&Number.isFinite(n)?n:0;return{input_tokens:r(t.input_tokens),output_tokens:r(t.output_tokens),cache_creation_input_tokens:r(t.cache_creation_input_tokens),cache_read_input_tokens:r(t.cache_read_input_tokens)}}function LZ(e){return typeof e.session_id=="string"&&e.session_id.trim()?e.session_id.trim():null}function BZ(e){let t=Array.isArray(e.messages)?e.messages:[],r=t[t.length-1],n=r?WM(r.content).trim():"";return n?`User:
248
- ${n}`:"Continue."}function UZ(e){return e.streamed.trim()||e.exitCode===0&&!e.resultIsError?!1:WZ.test(e.detail)||e.numTurns===0}function FZ(e,t){let r=e.trim().slice(0,240);return vZ.test(e)?`${bZ}: ${r||"claude is not signed in"}`:t===null?r?`claude_code_failed: ${r}`:"claude_code_failed: process exited without a code":r?`claude_code_failed: exit ${t} \u2014 ${r}`:`claude_code_failed: exit ${t}`}async function KZ(e){try{return{port:(await V0(e)).port}}catch(t){return{reason:t?.message??String(t)}}}async function $Z(e){if(e.access.access!=="folder"&&e.access.access!=="folders")return null;let t=e.sandboxRuntime??xk(),r=Ck(),n=t.available&&!r,o=n?await KZ(e.egressProxy):null,s=n?await cL(e.access.folders,js):null;return s?.truncated&&console.error(JSON.stringify({event:"chat_folder_sensitive_scan_truncated",scanned:s.scanned,found:s.paths.length,durationMs:s.durationMs})),tD({access:e.access,policy:_k(e.env,e.config),runtime:t,domains:z0(e.env,e.config),startupFailure:r,egress:o,sensitiveFiles:s?.paths??[],sensitiveScanComplete:s?!s.truncated:!1})}async function Ip(e){let t=Date.now(),r=!1,n=null,o=null,s=(i,a)=>(e.onStepLogged??mL)({at:new Date().toISOString(),turnId:e.turnId??"",resumed:r,appVersion:n,durationMs:Date.now()-t,ok:i,...i?{}:{reason:fL(a)}});try{let i=await HZ(e,{markResumed:a=>{r=a},onAppVersion:a=>{n=a},onPartialFailure:a=>{o=a}});return o?s(!1,new Error(o)):s(!0),i}catch(i){throw s(!1,i),i}}async function HZ(e,t){let{markResumed:r,onAppVersion:n}=t,o=R=>{if(R.error)throw R.error;return R.failure&&t.onPartialFailure(R.failure),R.message},s=e.env??process.env,i=e.sessions??oL,a=nL(e.step);if(a<=0)throw new Error("claude_code_no_time_left");let l=Xt(e.payload.tools),c=ib(e.payload,"agent",l,e.access),u=e.spawnTarget?.executable??(s.KYNVER_CLAUDE_BIN?.trim()||s.CLAUDE_BIN?.trim()||"claude"),d=gZ(ko.join(e.tempRoot??yZ(),"kynver-claude-code-")),f=ko.join(d,"kynver-system-prompt.md"),m=ko.join(d,"kynver-claude-code-settings.json"),g=Date.now(),h=new Set(l.map(R=>R.name)),y=()=>$Z({access:e.access,env:s,config:e.config,sandboxRuntime:e.sandboxRuntime,egressProxy:e.egressProxy}),v=await y();v?.network==="domain-list"&&console.error(JSON.stringify({event:"claude_code_sandbox_egress_unavailable",turnId:e.turnId??null,reason:v.networkReason??null}));let k={},b=()=>{Pp(f,v?`${c.head}
246
+ `}}function eee(){return["# Kynver folder sandbox: wait for Claude Code's in-sandbox proxy bridge (localhost:3128) before the command runs.",'if [ -z "${KYNVER_SANDBOX_BRIDGE_READY:-}" ] && [ "${SANDBOX_RUNTIME:-}" = "1" ]; then',' case "${HTTP_PROXY:-}${http_proxy:-}" in'," *localhost:3128*|*127.0.0.1:3128*)",' case "${BASH_EXECUTION_STRING:-}" in'," *TCP-LISTEN:3128*) ;;"," *)"," __kynver_i=0",` while [ "$__kynver_i" -lt ${ZZ} ]; do`," if (exec 3<>/dev/tcp/127.0.0.1/3128) 2>/dev/null; then break; fi"," sleep 0.05 2>/dev/null || break"," __kynver_i=$((__kynver_i + 1))"," done"," unset __kynver_i"," export KYNVER_SANDBOX_BRIDGE_READY=1"," ;;"," esac"," ;;"," esac","fi",""].join(`
247
+ `)}function tee(e){let t=vo.join(e,"net");WZ(t,{recursive:!0,mode:448});for(let[n,o]of Object.entries(QZ()))Hp(vo.join(t,n),o,{encoding:"utf8",mode:420});let r=vo.join(t,"bridge-wait.sh");return Hp(r,eee(),{encoding:"utf8",mode:420}),{CURL_HOME:t,WGETRC:vo.join(t,".wgetrc"),BASH_ENV:r}}function Vb(e){return e.type!=="stream_event"||!e.event||typeof e.event!="object"||typeof e.parent_tool_use_id=="string"&&e.parent_tool_use_id?null:e.event}function ree(e){if(!Vb(e))return"";let t=e.event;return t.type!=="content_block_delta"||t.delta?.type!=="text_delta"?"":typeof t.delta.text=="string"?t.delta.text:""}function nee(e){if(!Vb(e))return!1;let t=e.event;return t.type==="content_block_start"&&t.content_block?.type==="text"}function oee(e){if(!Vb(e))return"";let t=e.event;return t.type!=="message_delta"?"":typeof t.delta?.stop_reason=="string"?t.delta.stop_reason:""}function see(e,t){let r=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):0;if(r<=0)return e;let n=Number(e[$L]);return Number.isFinite(n)&&n>=r?e:{...e,[$L]:String(r)}}function iee(e){if(e.type!=="result"||!e.usage||typeof e.usage!="object")return null;let t=e.usage,r=n=>typeof n=="number"&&Number.isFinite(n)?n:0;return{input_tokens:r(t.input_tokens),output_tokens:r(t.output_tokens),cache_creation_input_tokens:r(t.cache_creation_input_tokens),cache_read_input_tokens:r(t.cache_read_input_tokens)}}function aee(e){return typeof e.session_id=="string"&&e.session_id.trim()?e.session_id.trim():null}function lee(e){let t=Array.isArray(e.messages)?e.messages:[],r=t[t.length-1],n=r?zM(r.content).trim():"";return n?`User:
248
+ ${n}`:"Continue."}function uee(e){return e.streamed.trim()||e.exitCode===0&&!e.resultIsError?!1:cee.test(e.detail)||e.numTurns===0}function dee(e,t){let r=e.trim().slice(0,240);return VZ.test(e)?`${jZ}: ${r||"claude is not signed in"}`:t===null?r?`claude_code_failed: ${r}`:"claude_code_failed: process exited without a code":r?`claude_code_failed: exit ${t} \u2014 ${r}`:`claude_code_failed: exit ${t}`}async function pee(e){try{return{port:(await EL(e)).port}}catch(t){return{reason:t?.message??String(t)}}}async function fee(e){if(e.access.access!=="folder"&&e.access.access!=="folders")return null;let t=e.sandboxRuntime??Wb(),r=Fb(),n=t.available&&!r,o=n?await pee(e.egressProxy):null,s=n?await WL(e.access.folders,si):null;return s?.truncated&&console.error(JSON.stringify({event:"chat_folder_sensitive_scan_truncated",scanned:s.scanned,found:s.paths.length,durationMs:s.durationMs})),BL({access:e.access,policy:Ub(e.env,e.config),runtime:t,domains:TL(e.env,e.config),startupFailure:r,egress:o,sensitiveFiles:s?.paths??[],sensitiveScanComplete:s?!s.truncated:!1})}async function jp(e){let t=Date.now(),r=!1,n=null,o=null,s=(i,a)=>(e.onStepLogged??oM)({at:new Date().toISOString(),turnId:e.turnId??"",resumed:r,appVersion:n,durationMs:Date.now()-t,ok:i,...i?{}:{reason:nM(a)}});try{let i=await mee(e,{markResumed:a=>{r=a},onAppVersion:a=>{n=a},onPartialFailure:a=>{o=a}});return o?s(!1,new Error(o)):s(!0),i}catch(i){throw s(!1,i),i}}async function mee(e,t){let{markResumed:r,onAppVersion:n}=t,o=R=>{if(R.error)throw R.error;return R.failure&&t.onPartialFailure(R.failure),R.message},s=e.env??process.env,i=e.sessions??kL,a=yL(e.step);if(a<=0)throw new Error("claude_code_no_time_left");let l=Xt(e.payload.tools),c=Rb(e.payload,"agent",l,e.access),u=e.spawnTarget?.executable??(s.KYNVER_CLAUDE_BIN?.trim()||s.CLAUDE_BIN?.trim()||"claude"),d=FZ(vo.join(e.tempRoot??KZ(),"kynver-claude-code-")),f=vo.join(d,"kynver-system-prompt.md"),m=vo.join(d,"kynver-claude-code-settings.json"),g=Date.now(),h=new Set(l.map(R=>R.name)),y=()=>fee({access:e.access,env:s,config:e.config,sandboxRuntime:e.sandboxRuntime,egressProxy:e.egressProxy}),b=await y();b?.network==="domain-list"&&console.error(JSON.stringify({event:"claude_code_sandbox_egress_unavailable",turnId:e.turnId??null,reason:b.networkReason??null}));let k={},v=()=>{Hp(f,b?`${c.head}
249
249
 
250
- ${v.note}`:c.head,{encoding:"utf8",mode:384}),v&&Pp(m,JSON.stringify(v.settings,null,2),{encoding:"utf8",mode:384}),k=v?.shell==="sandboxed"?IZ(d):{}},_=()=>v?{settingsFile:m,shell:v.shell}:void 0,S=async()=>{let R=i.get(e.step.session);if(R){let L=a-(Date.now()-g);if(L<=0)throw new Error("claude_code_no_time_left");r(!0);let N=await kL({...e,env:s,extraEnv:k,executable:u,sessions:i,limitMs:L,advertisedNames:h,maxTokens:e.payload.maxTokens,args:mb({model:e.model,systemPromptFile:f,access:e.access,prompt:BZ(e.payload),resumeSessionId:R,sandbox:_()}),resumed:!0,sandboxed:v?.shell==="sandboxed",onAppVersion:n});if(!N.resumeRefused)return N;i.forget(e.step.session),r(!1)}let w=a-(Date.now()-g);if(w<=0)throw new Error("claude_code_no_time_left");return kL({...e,env:s,extraEnv:k,executable:u,sessions:i,limitMs:w,advertisedNames:h,maxTokens:e.payload.maxTokens,args:mb({model:e.model,systemPromptFile:f,access:e.access,prompt:c.body||"Continue.",sandbox:_()}),resumed:!1,sandboxed:v?.shell==="sandboxed",onAppVersion:n})};try{b();let R=await S();return R.sandboxUnavailable&&v&&(Z0(R.sandboxUnavailable),v=await y(),console.error(JSON.stringify({event:"claude_code_sandbox_unavailable",turnId:e.turnId??null,reason:R.sandboxUnavailable,shell:v?.shell??null})),b(),R=await S(),R.sandboxUnavailable&&(R={error:new Error(`claude_code_sandbox_unavailable: ${R.sandboxUnavailable}`)})),(R.failure?.startsWith(Rb)||R.error?.message.startsWith(Rb))&&a-(Date.now()-g)>CZ&&(console.error(JSON.stringify({event:"claude_code_sandbox_proxy_down_retry",turnId:e.turnId??null})),R=await S()),o(R)}finally{hZ(d,{recursive:!0,force:!0})}}function kL(e){let t=HM();return new Promise(r=>{let n;try{let[E,V]=ae(e.executable,[...e.spawnTarget?.prefixArgs??[],...e.args]),x=z({cwd:e.access.workDir,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:{...DZ(nD(e.env,e.access.access),e.maxTokens),...e.extraEnv,NO_COLOR:"1"}});n=fZ(E,V,x)}catch(E){r({error:bL(E,e.executable)});return}let o=!1,s=new zt,i="",a="",l="",c=!1,u=null,d="",f={input_tokens:0,output_tokens:0},m=null,g="",h="",y=!1,v="",k=!1,b=0,_=!1,S=E=>{let V=s.push(E);V&&(i+=V,e.onDelta(V))},R=(E,V)=>console.error(JSON.stringify({event:E,requestId:e.requestId??null,turnId:e.turnId??null,resumed:e.resumed,access:e.access.access,appVersion:m,...V})),w=E=>{o||(o=!0,clearTimeout(G),A&&k&&clearTimeout(A),e.signal?.removeEventListener("abort",D),r(E))},L=(E="")=>{let V=s.end();V&&(i+=V,e.onDelta(V));let x=pb(a,c?"":l),T=un(x,e.advertisedNames);fb(T.text,i,e.onDelta),E&&e.onDelta(E),T.rejected.length>0&&R("claude_code_tool_call_rejected",{names:T.rejected.slice(0,5)});let U=dn(T,e.turnId??"turn",E),te=U.stop_reason==="end_turn"&&d==="max_tokens";return(T.cut||te)&&R("claude_code_reply_cut",{stopReason:d||null,cutTool:T.cut?.name??null,chars:x.length}),{content:U.content,stop_reason:te?"max_tokens":U.stop_reason,usage:f}},N=E=>{n.pid?fe(n.pid,E):Ze(n,E)},A,O=()=>{N("SIGTERM"),A??=setTimeout(()=>{k||(N("SIGKILL"),setTimeout(()=>{o||H(null)},hL).unref())},hL),A.unref()},W=()=>{if(e.onActivity)for(let E of t.interrupted())e.onActivity(E)},D=()=>{O(),W(),w({error:new Error("claude_code_chat_aborted")})},G=setTimeout(()=>{y=!0,O()},e.limitMs);if(n.on("error",E=>w({error:bL(E,e.executable)})),e.signal){if(e.signal.aborted){D();return}e.signal.addEventListener("abort",D)}let Q=E=>{let V=E.trim();if(!V)return;let x;try{x=JSON.parse(V)}catch{return}let T=LZ(x);T&&e.sessions.remember(e.step.session,T),x.type==="system"&&typeof x.claude_code_version=="string"&&(m=x.claude_code_version,e.onAppVersion(m)),TZ(x)&&a&&!a.endsWith(`
250
+ ${b.note}`:c.head,{encoding:"utf8",mode:384}),b&&Hp(m,JSON.stringify(b.settings,null,2),{encoding:"utf8",mode:384}),k=b?.shell==="sandboxed"?tee(d):{}},S=()=>b?{settingsFile:m,shell:b.shell}:void 0,_=async()=>{let R=i.get(e.step.session);if(R){let B=a-(Date.now()-g);if(B<=0)throw new Error("claude_code_no_time_left");r(!0);let j=await KL({...e,env:s,extraEnv:{...e.extraEnv,...k},executable:u,sessions:i,limitMs:B,advertisedNames:h,maxTokens:e.payload.maxTokens,args:Nb({model:e.model,systemPromptFile:f,access:e.access,prompt:lee(e.payload),resumeSessionId:R,sandbox:S()}),resumed:!0,sandboxed:b?.shell==="sandboxed",onAppVersion:n});if(!j.resumeRefused)return j;i.forget(e.step.session),r(!1)}let w=a-(Date.now()-g);if(w<=0)throw new Error("claude_code_no_time_left");return KL({...e,env:s,extraEnv:{...e.extraEnv,...k},executable:u,sessions:i,limitMs:w,advertisedNames:h,maxTokens:e.payload.maxTokens,args:Nb({model:e.model,systemPromptFile:f,access:e.access,prompt:c.body||"Continue.",sandbox:S()}),resumed:!1,sandboxed:b?.shell==="sandboxed",onAppVersion:n})};try{v();let R=await _();return R.sandboxUnavailable&&b&&(ML(R.sandboxUnavailable),b=await y(),console.error(JSON.stringify({event:"claude_code_sandbox_unavailable",turnId:e.turnId??null,reason:R.sandboxUnavailable,shell:b?.shell??null})),v(),R=await _(),R.sandboxUnavailable&&(R={error:new Error(`claude_code_sandbox_unavailable: ${R.sandboxUnavailable}`)})),(R.failure?.startsWith(jb)||R.error?.message.startsWith(jb))&&a-(Date.now()-g)>XZ&&(console.error(JSON.stringify({event:"claude_code_sandbox_proxy_down_retry",turnId:e.turnId??null})),R=await _()),o(R)}finally{$Z(d,{recursive:!0,force:!0})}}function KL(e){let t=nL();return new Promise(r=>{let n;try{let[x,G]=le(e.executable,[...e.spawnTarget?.prefixArgs??[],...e.args]),C=Z({cwd:e.access.workDir,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:{...see(QM(e.env,e.access.access),e.maxTokens),...e.extraEnv,NO_COLOR:"1"}});n=UZ(x,G,C)}catch(x){r({error:HL(x,e.executable)});return}let o=!1,s=new zt,i="",a="",l="",c=!1,u=null,d="",f={input_tokens:0,output_tokens:0},m=null,g="",h="",y=!1,b="",k=!1,v=0,S=!1,_=x=>{let G=s.push(x);G&&(i+=G,e.onDelta(G))},R=(x,G)=>console.error(JSON.stringify({event:x,requestId:e.requestId??null,turnId:e.turnId??null,resumed:e.resumed,access:e.access.access,appVersion:m,...G})),w=x=>{o||(o=!0,clearTimeout(J),O&&k&&clearTimeout(O),e.signal?.removeEventListener("abort",N),r(x))},B=(x="")=>{let G=s.end();G&&(i+=G,e.onDelta(G));let C=Ob(a,c?"":l),P=hn(C,e.advertisedNames);Tb(P.text,i,e.onDelta),x&&e.onDelta(x),P.rejected.length>0&&R("claude_code_tool_call_rejected",{names:P.rejected.slice(0,5)});let D=yn(P,e.turnId??"turn",x),ne=D.stop_reason==="end_turn"&&d==="max_tokens";return(P.cut||ne)&&R("claude_code_reply_cut",{stopReason:d||null,cutTool:P.cut?.name??null,chars:C.length}),{content:D.content,stop_reason:ne?"max_tokens":D.stop_reason,usage:f}},j=x=>{n.pid?he(n.pid,x):tt(n,x)},O,T=()=>{j("SIGTERM"),O??=setTimeout(()=>{k||(j("SIGKILL"),setTimeout(()=>{o||W(null)},FL).unref())},FL),O.unref()},U=()=>{if(e.onActivity)for(let x of t.interrupted())e.onActivity(x)},N=()=>{T(),U(),w({error:new Error("claude_code_chat_aborted")})},J=setTimeout(()=>{y=!0,T()},e.limitMs);if(n.on("error",x=>w({error:HL(x,e.executable)})),e.signal){if(e.signal.aborted){N();return}e.signal.addEventListener("abort",N)}let F=x=>{let G=x.trim();if(!G)return;let C;try{C=JSON.parse(G)}catch{return}let P=aee(C);P&&e.sessions.remember(e.step.session,P),C.type==="system"&&typeof C.claude_code_version=="string"&&(m=C.claude_code_version,e.onAppVersion(m)),nee(C)&&a&&!a.endsWith(`
251
251
  `)&&(a+=`
252
252
 
253
- `,S(`
253
+ `,_(`
254
254
 
255
- `));let U=OZ(x);U&&(a+=U,S(U));let te=NZ(x);if(te&&(d=te),x.type==="result"&&(typeof x.result=="string"&&(l=x.result),c=x.is_error===!0,typeof x.num_turns=="number"&&(u=x.num_turns),Array.isArray(x.errors)&&(v=x.errors.filter(oe=>typeof oe=="string").join(`
256
- `).slice(0,1e3)),f=MZ(x)??f),e.onActivity)for(let oe of t(x))e.onActivity(oe);e.sandboxed&&!_&&x.type==="user"&&jZ(x)&&(b+=1,R("claude_code_sandbox_proxy_down",{hits:b}),b>=xZ&&(_=!0,O()))};n.stdout?.on("data",E=>{h+=typeof E=="string"?E:E.toString("utf8");let V;for(;(V=h.indexOf(`
257
- `))!==-1;){let x=h.slice(0,V);h=h.slice(V+1),Q(x)}}),n.stderr?.on("data",E=>{g+=typeof E=="string"?E:E.toString("utf8"),g.length>8e3&&(g=g.slice(-8e3))});let H=E=>{if(k=!0,o)return;if(h.trim()&&Q(h),h="",W(),_){let U=`${Rb}: ${SZ}`;w(a.trim()?{message:L(_Z),failure:U}:{error:new Error(U)});return}if(y){R("claude_code_step_timeout",{limitMs:e.limitMs}),w(a.trim()?{message:L(wZ),failure:"claude_code_step_timeout"}:{error:new Error("claude_code_step_timeout")});return}let V=`${l}
258
- ${v}
259
- ${g}`,x=E!==0||c;if(e.sandboxed&&eD({exitCode:E,streamed:a,numTurns:u,detail:V})){w({sandboxUnavailable:V.trim().slice(0,240)||"sandbox failed to start"});return}if(e.resumed&&UZ({exitCode:E,resultIsError:c,numTurns:u,streamed:a,detail:V})){R("claude_code_resume_refused",{exitCode:E}),w({resumeRefused:!0});return}if(x){let U=FZ(V,E);R("claude_code_turn_error",{exitCode:E,error:U,partial:!!a.trim()}),w(a.trim()?{message:L(RZ),failure:U}:{error:new Error(U)});return}let T=L();R("claude_code_turn_end",{exitCode:E,stopReason:T.stop_reason}),w({message:T})};n.on("close",H)})}function jZ(e){let t=e.message,r=Array.isArray(t?.content)?t.content:[];for(let n of r){if(!n||n.type!=="tool_result")continue;let o=typeof n.content=="string"?n.content:Array.isArray(n.content)?n.content.map(s=>typeof s?.text=="string"?s.text:"").join(`
260
- `):"";if(X0(o))return!0}return!1}function bL(e,t){return e?.code==="ENOENT"?new Error(`${kZ}: failed to spawn \`${t}\`. Install Claude Code and keep \`claude\` on PATH.`):e instanceof Error?e:new Error(String(e))}var kZ,bZ,vZ,RZ,hL,wZ,Rb,SZ,_Z,xZ,CZ,AZ,yL,WZ,Sb=p(()=>{"use strict";M();qe();ml();Ep();sL();aL();lo();Yd();yb();wk();vb();fl();xp();Xs();kZ="claude_code_unavailable",bZ="claude_code_not_logged_in",vZ=/not logged in|please run \/login|invalid api key|authentication|unauthorized|401\b/i,RZ=`
255
+ `));let D=ree(C);D&&(a+=D,_(D));let ne=oee(C);if(ne&&(d=ne),C.type==="result"&&(typeof C.result=="string"&&(l=C.result),c=C.is_error===!0,typeof C.num_turns=="number"&&(u=C.num_turns),Array.isArray(C.errors)&&(b=C.errors.filter(V=>typeof V=="string").join(`
256
+ `).slice(0,1e3)),f=iee(C)??f),e.onActivity)for(let V of t(C))e.onActivity(V);e.sandboxed&&!S&&C.type==="user"&&gee(C)&&(v+=1,R("claude_code_sandbox_proxy_down",{hits:v}),v>=zZ&&(S=!0,T()))};n.stdout?.on("data",x=>{h+=typeof x=="string"?x:x.toString("utf8");let G;for(;(G=h.indexOf(`
257
+ `))!==-1;){let C=h.slice(0,G);h=h.slice(G+1),F(C)}}),n.stderr?.on("data",x=>{g+=typeof x=="string"?x:x.toString("utf8"),g.length>8e3&&(g=g.slice(-8e3))});let W=x=>{if(k=!0,o)return;if(h.trim()&&F(h),h="",U(),S){let D=`${jb}: ${qZ}`;w(a.trim()?{message:B(YZ),failure:D}:{error:new Error(D)});return}if(y){R("claude_code_step_timeout",{limitMs:e.limitMs}),w(a.trim()?{message:B(JZ),failure:"claude_code_step_timeout"}:{error:new Error("claude_code_step_timeout")});return}let G=`${l}
258
+ ${b}
259
+ ${g}`,C=x!==0||c;if(e.sandboxed&&LL({exitCode:x,streamed:a,numTurns:u,detail:G})){w({sandboxUnavailable:G.trim().slice(0,240)||"sandbox failed to start"});return}if(e.resumed&&uee({exitCode:x,resultIsError:c,numTurns:u,streamed:a,detail:G})){R("claude_code_resume_refused",{exitCode:x}),w({resumeRefused:!0});return}if(C){let D=dee(G,x);R("claude_code_turn_error",{exitCode:x,error:D,partial:!!a.trim()}),w(a.trim()?{message:B(GZ),failure:D}:{error:new Error(D)});return}let P=B();R("claude_code_turn_end",{exitCode:x,stopReason:P.stop_reason}),w({message:P})};n.on("close",W)})}function gee(e){let t=e.message,r=Array.isArray(t?.content)?t.content:[];for(let n of r){if(!n||n.type!=="tool_result")continue;let o=typeof n.content=="string"?n.content:Array.isArray(n.content)?n.content.map(s=>typeof s?.text=="string"?s.text:"").join(`
260
+ `):"";if(NL(o))return!0}return!1}function HL(e,t){return e?.code==="ENOENT"?new Error(`${HZ}: failed to spawn \`${t}\`. Install Claude Code and keep \`claude\` on PATH.`):e instanceof Error?e:new Error(String(e))}var HZ,jZ,VZ,GZ,FL,JZ,jb,qZ,YZ,zZ,XZ,ZZ,$L,cee,Gb=p(()=>{"use strict";M();ze();bl();Lp();bL();RL();ko();wl();Hb();Lb();ob();kl();Mp();Zs();HZ="claude_code_unavailable",jZ="claude_code_not_logged_in",VZ=/not logged in|please run \/login|invalid api key|authentication|unauthorized|401\b/i,GZ=`
261
261
 
262
- (Stopped: Claude Code ended this step with an error before finishing.)`,hL=5e3,wZ=`
262
+ (Stopped: Claude Code ended this step with an error before finishing.)`,FL=5e3,JZ=`
263
263
 
264
- (Stopped: this step reached its time limit. Longer work should run as a detached job in the folder \u2014 start_long_job \u2014 with its output written to a file there.)`,Rb="claude_code_sandbox_proxy_down",SZ=`sandbox network proxy not running (localhost:${ao} refused inside the folder sandbox)`,_Z=`
264
+ (Stopped: this step reached its time limit. Longer work should run as a detached job in the folder \u2014 start_long_job \u2014 with its output written to a file there.)`,jb="claude_code_sandbox_proxy_down",qZ=`sandbox network proxy not running (localhost:${bo} refused inside the folder sandbox)`,YZ=`
265
265
 
266
- (Stopped: the folder sandbox's network proxy is not running on this computer, so shell downloads could not leave the sandbox. No website was blocked \u2014 the sandbox's own proxy bridge did not answer. Restart the Kynver daemon on that computer, or choose full computer access in Computers settings.)`,xZ=2,CZ=3e4;AZ=60;yL="CLAUDE_CODE_MAX_OUTPUT_TOKENS";WZ=/no conversation found|session .*not found/i});function vL(e){if(e)return e;let t=P();return{chatProvider:t.chatProvider,workerProvider:t.workerProvider}}function _b(e,t,r=process.env,n){if(e==="cursor"){let o=yu(r);if(!o.ok)throw new Zt(DC(o));return}if(e==="codex"){let o=fp(r);if(!o.ok)throw new Zt(cM(o));return}if(e==="gemini"){let o=r;if(co(vL(n),o)==="antigravity"){let s=yp(o);if(!s.ok)throw new Zt(fM(s));return}if(!ll(r))throw new Zt("gemini_api_key_missing");return}if(e==="openai"){if(!cl(r))throw new Zt("openai_api_key_missing");return}if(!il(r,{oauthOptIn:t}))throw new Zt("no_local_credentials")}async function RL(e){let t=e.env??process.env,{provider:r,model:n,payload:o,onDelta:s,signal:i}=e;_b(r,e.useClaudeOauth,t,e.config);let a=e.config??P(),l=yo({provider:r,config:a,payloadAccess:o.computerAccess,boxId:e.boxId,env:t}),c=e.onActivity,u={access:l.access,...c?{onActivity:m=>c(m,l)}:{}};if(r==="cursor")return qM({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,requestId:e.requestId,...u});if(r==="codex")return YM({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,...u});if(r==="gemini"&&co(vL(e.config),t)==="antigravity")return QM({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,env:t,...u});if(r==="gemini"||r==="openai"){let m=r==="gemini"?ll(t):cl(t);return eL({creds:m,model:n,payload:o,onDelta:s,signal:i})}let d=rL(o.claudeCode);if(d&&l.engine==="claude-code"&&l.access.access!=="off")return Ip({payload:o,model:n,onDelta:s,signal:i,step:d,turnId:e.turnId,requestId:e.requestId,env:t,config:a,...u});let f=il(t,{oauthOptIn:e.useClaudeOauth});return xM({creds:f,model:n,payload:o,onDelta:s,signal:i})}var Zt,xb=p(()=>{"use strict";Yk();nb();ks();xp();mp();zM();kp();ZM();Xd();Xk();tL();$();Cp();Ep();Sb();Zt=class extends Error{constructor(r){super(r);this.code=r;this.name="ChatCredentialError"}code}});function VZ(e,t){let r=[...e.content],n=r.findIndex(o=>!!o&&typeof o=="object"&&o.type==="text");if(n>=0){let o=r[n];r[n]={...o,text:`${t}${o.text}`}}else r.unshift({type:"text",text:t.trimEnd()});return{...e,content:r}}async function wL(e){let t=dl(e.payload.requestedModel),r=typeof e.payload.fallbackNoticeShown=="string"?e.payload.fallbackNoticeShown:null,{requestedModel:n,fallbackNoticeShown:o,...s}=e.payload,i=gM({requested:t,catalog:e.catalog,primary:e.primary}),a=t??{provider:i.provider,model:i.model},l={provider:i.provider,model:i.model},c=[],u=!1,d=null,f=null,m=()=>{let g=i.fallbackReason==="usage_limit"?l:t,h=kM(i,g),y=bM(i,g);!h||!y||h===r||d||(d=`${y}
266
+ (Stopped: the folder sandbox's network proxy is not running on this computer, so shell downloads could not leave the sandbox. No website was blocked \u2014 the sandbox's own proxy bridge did not answer. Restart the Kynver daemon on that computer, or choose full computer access in Computers settings.)`,zZ=2,XZ=3e4;ZZ=60;$L="CLAUDE_CODE_MAX_OUTPUT_TOKENS";cee=/no conversation found|session .*not found/i});function jL(e){if(e)return e;let t=A();return{chatProvider:t.chatProvider,workerProvider:t.workerProvider}}function Jb(e,t,r=process.env,n){if(e==="cursor"){let o=Ou(r);if(!o.ok)throw new er(pE(o));return}if(e==="codex"){let o=_p(r);if(!o.ok)throw new er(RM(o));return}if(e==="gemini"){let o=r;if(mo(jL(n),o)==="antigravity"){let s=Ap(o);if(!s.ok)throw new er(xM(s));return}if(!pl(r))throw new er("gemini_api_key_missing");return}if(e==="openai"){if(!fl(r))throw new er("openai_api_key_missing");return}if(!ul(r,{oauthOptIn:t}))throw new er("no_local_credentials")}async function VL(e){let t=e.env??process.env,{provider:r,model:n,payload:o,onDelta:s,signal:i}=e;Jb(r,e.useClaudeOauth,t,e.config);let a=e.config??A(),l=go({provider:r,config:a,payloadAccess:o.computerAccess,boxId:e.boxId,env:t}),c=e.onActivity,u={access:l.access,...c?{onActivity:m=>c(m,l)}:{}};if(r==="cursor")return lL({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,requestId:e.requestId,...u});if(r==="codex")return cL({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,...u});if(r==="gemini"&&mo(jL(e.config),t)==="antigravity")return pL({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,env:t,...u});if(r==="gemini"||r==="openai"){let m=r==="gemini"?pl(t):fl(t);return mL({creds:m,model:n,payload:o,onDelta:s,signal:i})}let d=hL(o.claudeCode);if(d&&l.engine==="claude-code"&&l.access.access!=="off")return jp({payload:o,model:n,onDelta:s,signal:i,step:d,turnId:e.turnId,requestId:e.requestId,env:t,config:a,...u});let f=ul(t,{oauthOptIn:e.useClaudeOauth});return BM({creds:f,model:n,payload:o,onDelta:s,signal:i})}var er,qb=p(()=>{"use strict";ub();kb();ws();Mp();xp();uL();Ip();fL();ap();pb();gL();K();yp();Lp();Gb();er=class extends Error{constructor(r){super(r);this.code=r;this.name="ChatCredentialError"}code}});function hee(e,t){let r=[...e.content],n=r.findIndex(o=>!!o&&typeof o=="object"&&o.type==="text");if(n>=0){let o=r[n];r[n]={...o,text:`${t}${o.text}`}}else r.unshift({type:"text",text:t.trimEnd()});return{...e,content:r}}async function GL(e){let t=hl(e.payload.requestedModel),r=typeof e.payload.fallbackNoticeShown=="string"?e.payload.fallbackNoticeShown:null,{requestedModel:n,fallbackNoticeShown:o,...s}=e.payload,i=EM({requested:t,catalog:e.catalog,primary:e.primary}),a=t??{provider:i.provider,model:i.model},l={provider:i.provider,model:i.model},c=[],u=!1,d=null,f=null,m=()=>{let g=i.fallbackReason==="usage_limit"?l:t,h=PM(i,g),y=OM(i,g);!h||!y||h===r||d||(d=`${y}
267
267
 
268
- `,f=h,e.onDelta(d))};for(;;){c.push(i.provider);try{m();let g=await e.runTurn({provider:i.provider,model:i.model,payload:s,onDelta:y=>{y&&(u=!0),e.onDelta(y)}});return{...d?VZ(g,d):g,kynverModel:{provider:i.provider,model:i.model,requested:i.fallbackReason?a:null,fallbackReason:i.fallbackReason,noticeKey:f}}}catch(g){let y=!u&&(yM(g)||g instanceof Zt&&c.length>1)?hM(e.catalog,c):null;if(!y)throw g;console.error(JSON.stringify({event:"chat_turn_provider_fallback",from:`${i.provider}:${i.model}`,to:`${y.provider}:${y.model}`,reason:"usage_limit"})),i={...y,requested:t,fallbackReason:"usage_limit"}}}}var SL=p(()=>{"use strict";tb();xb()});function Cb(e){let t=(e??"").replace(/\s+/g," ").trim();if(!t||t.length>120)return null;for(let r of GZ)if(r.re.test(t))return r.kind;return null}function xL(e){let t=e.tag.toLowerCase(),r=(e.type??"").toLowerCase(),n=(e.role??"").toLowerCase();return t==="button"||t==="a"||n==="button"||n==="link"||n==="menuitem"||t==="input"&&(r==="submit"||r==="button"||r==="image")}function Op(e){return xL(e)?Cb(e.name):null}function CL(e){return e.tag.toLowerCase()==="textarea"?null:xL(e)?Cb(e.name):Cb(e.formSubmitLabel)}function Tp(e){if((e.type??"").toLowerCase()==="password"||JZ.test(e.autocomplete??""))return!0;let t=e.tag.toLowerCase();return t!=="input"&&t!=="textarea"?!1:_L.test(e.inputName??"")||_L.test(e.name??"")}function Eb(e){if(typeof e!="string"||!e.trim())return{ok:!1,reason:"url is required"};let t=e.trim();/^[a-z][a-z0-9+.-]*:/i.test(t)||(t=`https://${t}`);let r;try{r=new URL(t)}catch{return{ok:!1,reason:"not a valid URL"}}return r.protocol!=="http:"&&r.protocol!=="https:"?{ok:!1,reason:`only http(s) pages can be opened (got ${r.protocol})`}:r.username||r.password?{ok:!1,reason:"URLs carrying a username or password are refused"}:qZ.test(r.hostname)?{ok:!1,reason:"local and private-network addresses are refused"}:{ok:!0,url:r.toString()}}function EL(e){let t=e.map(n=>(n??"").trim()).join("|"),r=2166136261;for(let n=0;n<t.length;n+=1)r^=t.charCodeAt(n),r=Math.imul(r,16777619)>>>0;return r.toString(16).padStart(8,"0")}function AL(e){if(!e)return"";try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return""}}var GZ,JZ,_L,qZ,Ab=p(()=>{"use strict";GZ=[{kind:"purchase",re:/\b(buy|purchase|place\s+(your\s+)?order|complete\s+(your\s+)?(order|purchase)|check\s*out|pay(\s+now)?|confirm\s+(and\s+)?pay|submit\s+(order|payment)|subscribe|donate|book\s+now|rent\s+now|add\s+funds|transfer|withdraw)\b/i},{kind:"send",re:/\b(send|post|publish|tweet|reply|share\s+now|submit\s+(message|comment|review|application))\b/i},{kind:"delete",re:/\b(delete|remove\s+(account|permanently)|erase|destroy|cancel\s+(my\s+)?(account|subscription|order)|close\s+account|unsubscribe\s+all)\b/i}];JZ=/\b(current-password|new-password|one-time-code|cc-number|cc-csc|cc-exp|cc-exp-month|cc-exp-year)\b/i,_L=/(passw|passcode|pwd|\bpin\b|otp|one[-_ ]?time|2fa|mfa|verification[-_ ]?code|security[-_ ]?code|cvv|cvc|card[-_ ]?number|ccnum|ssn|social[-_ ]?security)/i;qZ=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[?::1?\]?|127(\.\d{1,3}){3}|10(\.\d{1,3}){3}|192\.168(\.\d{1,3}){2}|172\.(1[6-9]|2\d|3[01])(\.\d{1,3}){2}|169\.254(\.\d{1,3}){2}|\[?f[cd][0-9a-f]{2}:.*|\[?fe80:.*)$/i});function PL(e){return zZ.includes(e)}function IL(e){return typeof e=="string"&&YZ.includes(e)}var YZ,zZ,OL,TL,Pb,NL,Ib,DL,ML,Np,LL,BL,WL,Ob,ri=p(()=>{"use strict";YZ=["open","snapshot","click","type","select","press","scroll","screenshot","wait","tabs","close","list_logins","fill_login","save_login","request_code"],zZ=["list_logins","fill_login","save_login","request_code"];OL=12e3,TL=200,Pb=16e3,NL=95e4,Ib=4e3,DL=3e4,ML=25e3,Np=3e4,LL=10*6e4,BL=5*6e4,WL=120,Ob=8});function XZ(e){let t=e.role?.toLowerCase();if(t)return t;if(e.tag==="a")return"link";if(e.tag==="select")return"dropdown";if(e.tag==="textarea")return"textbox";if(e.tag==="input"){let r=e.type??"text";return r==="submit"||r==="button"||r==="image"?"button":r==="checkbox"||r==="radio"?r:r==="password"?"password":r==="text"?"textbox":`${r} field`}return e.tag}function QZ(e){let t=Tp(e),r=[`[${e.ref}] ${XZ(e)}`];return e.name&&r.push(JSON.stringify(e.name)),!t&&e.value&&r.push(`value=${JSON.stringify(e.value)}`),e.checked!==null&&r.push(e.checked?"(checked)":"(unchecked)"),e.disabled&&r.push("(disabled)"),t?r.push("(secret field \u2014 the user must type this themselves)"):Op(e)&&r.push("(needs the user's approval to press)"),r.join(" ")}function UL(e,t={}){let r=t.maxChars??Pb,n=`Page: ${e.title||"(untitled)"} \u2014 ${e.url}`,o=e.elements.map(QZ),s=o.length?`Interactive elements (use the [ref] with browser_click / browser_type / browser_select):
268
+ `,f=h,e.onDelta(d))};for(;;){c.push(i.provider);try{m();let g=await e.runTurn({provider:i.provider,model:i.model,payload:s,onDelta:y=>{y&&(u=!0),e.onDelta(y)}});return{...d?hee(g,d):g,kynverModel:{provider:i.provider,model:i.model,requested:i.fallbackReason?a:null,fallbackReason:i.fallbackReason,noticeKey:f}}}catch(g){let y=!u&&(IM(g)||g instanceof er&&c.length>1)?AM(e.catalog,c):null;if(!y)throw g;console.error(JSON.stringify({event:"chat_turn_provider_fallback",from:`${i.provider}:${i.model}`,to:`${y.provider}:${y.model}`,reason:"usage_limit"})),i={...y,requested:t,fallbackReason:"usage_limit"}}}}var JL=p(()=>{"use strict";gb();qb()});function yee(e,t,r,n,o){try{let s=go({provider:t.chatProvider,config:n,payloadAccess:e.payload.computerAccess,boxId:t.boxId}),i=ND(s.access,{signed:r.signed});if(!i)return;let a=i.from?Js(i.from.access):"not set",l=Js(i.to.access),c={at:i.to.at,chat:e.requestId??null,turnId:e.turnId,kind:"access_change",engine:s.engine,access:i.to.access,folder:s.access.workDir,from:a,to:l,source:i.to.source,signed:r.signed,ok:!0};qs({...c,kind:"tool",command:`computer access: ${a} \u2192 ${l} (${i.to.source})`}),o(c),console.error(JSON.stringify({event:"chat_access_changed",turnId:e.turnId,from:a,to:l,source:i.to.source,signed:r.signed}))}catch{}}async function Yb(e,t,r){let n=0,o=!1,s=new mn,i=new AbortController,a=t.requestId??"",l=h=>{o||s.track(Le(e,t.turnId,[{seq:n++,kind:"delta",text:h}]).then(y=>(y||(o=!0,i.abort()),y)))},c=new fn(l),u=wp({turnId:t.turnId,chat:a||null,send:h=>{o||(c.flush(),s.track(Le(e,t.turnId,[{seq:n++,kind:"activity",activity:h}]).then(y=>(y||(o=!0,i.abort()),y))))}}),d=e.chatProvider??"anthropic",f=A(),m=Qs(f);r&&yee(t,e,r,f,h=>{o||s.track(Le(e,t.turnId,[{seq:n++,kind:"activity",activity:h}]).then(y=>(y||(o=!0,i.abort()),y)))});try{Jb(d,e.useClaudeOauth,process.env,f)}catch(h){let y=hl(t.payload.requestedModel);if(!(y&&m.some(k=>k.provider===y.provider&&k.models.includes(y.model)))){await Le(e,t.turnId,[{seq:0,kind:"error",error:h instanceof Error?h.message:String(h)}]).catch(()=>{});return}}let g={provider:d,model:e.model};try{let h=await GL({payload:t.payload,catalog:m,primary:{provider:d,model:e.model},onDelta:k=>c.push(k),runTurn:k=>(g={provider:k.provider,model:k.model},VL({...k,signal:i.signal,turnId:t.turnId,requestId:t.requestId,useClaudeOauth:e.useClaudeOauth,config:f,boxId:e.boxId,onActivity:u.sink}))});yM(h.content,go({provider:g.provider,config:f,payloadAccess:t.payload.computerAccess,boxId:e.boxId}),u),c.close(),await s.drain();let y=n++;if(!await Br(()=>o?Le(e,t.turnId,[{seq:y,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):Le(e,t.turnId,[{seq:y,kind:"final",message:h}]).catch(()=>!1))){console.error(JSON.stringify({event:"chat_turn_final_rejected",requestId:a,turnId:t.turnId,model:g.model,chatProvider:g.provider}));return}console.error(JSON.stringify({event:"chat_turn_done",requestId:a,turnId:t.turnId,model:g.model,chatProvider:g.provider,fallbackReason:h.kynverModel.fallbackReason,activitySteps:u.steps}))}catch(h){c.close(),await s.drain(),o||await Le(e,t.turnId,[{seq:n++,kind:"error",error:h instanceof Error?h.message:String(h)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",requestId:a,turnId:t.turnId,error:h instanceof Error?h.message:String(h)}))}}var zb=p(()=>{"use strict";K();Gk();cb();kM();il();gl();gb();hb();yp();JL();qb();vp();Rp();cl()});function YL(e){let t=e instanceof Error?e.message:String(e);return/^([a-z][a-z0-9_]{2,60})(?::|$)/.exec(t)?.[1]??"agent_tab_failed"}function Sl(e,t,r=()=>new Date){let n={at:r().toISOString(),ok:t.ok,durationMs:Math.max(0,Math.round(t.durationMs)),error:t.ok?null:(t.error??"agent_tab_failed").slice(0,60)};return qL.set(e,n),n}function Vp(e){return qL.get(e)??null}var qL,Xb=p(()=>{"use strict";qL=new Map});import{existsSync as zL,readFileSync as kee}from"node:fs";import{homedir as XL}from"node:os";import Ro from"node:path";function QL(e){try{return zL(e)?kee(e,"utf8"):null}catch{return null}}function bee(e){let t=(e??"").trim().toLowerCase();return t==="localhost"||t==="::1"||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)?t==="::1"?"[::1]":t:"127.0.0.1"}function ZL(e,t){let r=typeof e=="number"?e:typeof e=="string"?Number(e.trim()):NaN;return Number.isInteger(r)&&r>0&&r<65536?r:t}function vee(e){let t={};for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(n);if(!o)continue;let s=o[2].trim();s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'")?s=s.slice(1,-1):s=s.replace(/\s+#.*$/,""),t[o[1]]=s}return t}function Ree(e){return/^(1|true|yes|on)$/i.test((e??"").trim())}function eB(e={}){let r=(e.env??process.env).HERMES_HOME?.trim();return r?Ro.resolve(r):Ro.join(e.home??XL(),".hermes")}function wee(e={}){return Ro.join(eB(e),".env")}function Gp(e={}){let t=e.readFile??QL,r=wee(e),n=t(r),o=n===null?{}:vee(n),s=o.API_SERVER_KEY?.trim()||null;return{baseUrl:`http://${bee(o.API_SERVER_HOST)}:${ZL(o.API_SERVER_PORT,8642)}`,key:s,enabled:Ree(o.API_SERVER_ENABLED)||s!==null&&o.API_SERVER_ENABLED===void 0,configured:n!==null||zL(eB(e)),configPath:r}}function See(e){try{return JSON.parse(e)}catch{}let t="",r=0;for(;r<e.length;){let n=e[r];if(n==='"'||n==="'"){let o=n,s=r+1,i="";for(;s<e.length&&e[s]!==o;){if(e[s]==="\\"&&s+1<e.length){i+=e[s]+e[s+1],s+=2;continue}i+=o==="'"&&e[s]==='"'?'\\"':e[s],s+=1}t+=`"${i}"`,r=s+1;continue}if(n==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
269
+ `;)r+=1;continue}if(n==="/"&&e[r+1]==="*"){let o=e.indexOf("*/",r+2);r=o===-1?e.length:o+2;continue}t+=n,r+=1}t=t.replace(/,\s*([}\]])/g,"$1").replace(/([{,]\s*)([A-Za-z_$][A-Za-z0-9_$-]*)\s*:/g,'$1"$2":');try{return JSON.parse(t)}catch{return null}}function _l(e,t){let r=e;for(let n of t){if(!r||typeof r!="object"||Array.isArray(r))return;r=r[n]}return r}function xl(e){return typeof e=="string"&&e.trim()?e.trim():null}function _ee(e={}){let t=e.env??process.env,r=t.OPENCLAW_CONFIG_PATH?.trim();if(r)return Ro.resolve(r);let n=t.OPENCLAW_STATE_DIR?.trim();return Ro.join(n?Ro.resolve(n):Ro.join(e.home??XL(),".openclaw"),"openclaw.json")}function Jp(e={}){let t=e.env??process.env,r=e.readFile??QL,n=_ee(e),o=r(n),s=o===null?null:See(o),i=xl(_l(s,["gateway","auth","mode"])),a=(i==="password"?xl(_l(s,["gateway","auth","password"]))??xl(t.OPENCLAW_GATEWAY_PASSWORD):xl(_l(s,["gateway","auth","token"]))??xl(t.OPENCLAW_GATEWAY_TOKEN))??(i==="none"?"":null);return{baseUrl:`http://127.0.0.1:${ZL(t.OPENCLAW_GATEWAY_PORT??_l(s,["gateway","port"]),18789)}`,key:a,enabled:_l(s,["gateway","http","endpoints","chatCompletions","enabled"])===!0,configured:o!==null,configPath:n}}var Qb=p(()=>{"use strict"});import{existsSync as xee}from"node:fs";import{homedir as Cee,platform as Eee}from"node:os";import kn from"node:path";function Aee(e,t,r={}){if(t==="darwin")return kn.join(e,"Library","Application Support","Grok Bot");if(t==="win32"){let s=r.APPDATA?.trim();return kn.join(s||kn.join(e,"AppData","Roaming"),"Grok Bot")}let n=r.XDG_CONFIG_HOME?.trim(),o=n&&kn.isAbsolute(n)?n:kn.join(e,".config");return kn.join(o,"Grok Bot")}function Iee(e){return[kn.join("/opt","Grok Bot","grok-bot"),kn.join(e,".local","bin","grok-bot")]}async function tB(e={}){let t=e.home??Cee(),r=e.platform??Eee(),n=e.env??process.env,o=e.exists??xee,s=e.versionOf??(async()=>null),i=r==="linux"?Iee(t):[],a=await s("grok-bot");if(!a){for(let c of i)if(o(c)&&(a=await s(c),a))break}return{installed:!!a||o(Aee(t,r,n))||i.some(c=>o(c)),version:a}}var rB=p(()=>{"use strict"});async function qp(e={}){let t=await tB(e);return t.installed?{status:"not_enabled",version:t.version,detail:Oee}:{status:"not_installed",version:null,detail:Pee}}var Pee,Oee,Zb=p(()=>{"use strict";rB();Pee="Grok Bot is not installed on this computer.",Oee="Grok Bot is installed. Kynver chat for this tab does not use the desktop app."});import{execFile as Tee}from"node:child_process";async function Wee(e){let t=nB.get(e);if(t&&Date.now()-t.at<Dee)return t.version;let r=await new Promise(n=>{try{let[o,s]=le(e,["--version"]);Tee(o,s,Z({encoding:"utf8",timeout:5e3}),(i,a,l)=>{if(i)return n(null);n(`${a??""} ${l??""}`.match(Uee)?.[0]??null)})}catch{n(null)}});return nB.set(e,{at:Date.now(),version:r}),r}async function oB(e,t,r,n=Mee){let o=new AbortController,s=setTimeout(()=>o.abort(),n);try{let i=await e(t,{headers:r?{Authorization:`Bearer ${r}`}:{},signal:o.signal});return await i.body?.cancel().catch(()=>{}),i.status}catch{return null}finally{clearTimeout(s)}}function ev(e){let t=iB.get(e)??null,r=Vp(e),n=r?.ok?Date.parse(r.at):NaN,o=[t,Number.isFinite(n)?n:null].filter(s=>s!==null);return o.length?Math.max(...o):null}function Lt(e,t,r,n){let o=ev(e);return{engine:e,status:t,version:r,detail:n,lastRoundTrip:Vp(e),lastReadyAt:o===null?null:new Date(o).toISOString()}}async function sB(e,t,r,n,o=Date.now){if(!t.configured&&!r)return null;let s=e==="hermes"?"Hermes":"OpenClaw";if(!t.enabled)return Lt(e,"not_enabled",r,`${s}'s local chat API is off`);if(t.key===null)return Lt(e,"no_key",r,`${s}'s local chat API has no key set`);let i=`${t.baseUrl}/v1/models`,a=await oB(n,i,t.key||null)??await oB(n,i,t.key||null,Lee);if(a===null){let l=ev(e);return l!==null&&o()-l<Bee?Lt(e,"ready",r,null):Lt(e,"unreachable",r,`${s} is not answering on ${t.baseUrl} \u2014 is its gateway running?`)}return a===401||a===403?Lt(e,"no_key",r,`${s} refused the key in its config (HTTP ${a})`):a===404?Lt(e,"not_enabled",r,`${s} is running but its chat API is not switched on`):(iB.set(e,o()),Lt(e,"ready",r,null))}function Fee(e){let{version:t,signedIn:r}=(e.claudeCode??(()=>({version:cp("claude-code",e.env),signedIn:up(e.env)})))();return t?r?(e.config??A()).chatComputerAccess==="off"?Lt("claude-code","access_off",t,"Computer access for chat is off on this computer"):Lt("claude-code","ready",t,null):Lt("claude-code","not_signed_in",t,"Claude Code is installed but not signed in"):null}async function $ee(e){let t=await qp({home:e.home,env:e.env,exists:e.grokBotExists,versionOf:e.versionOf,platform:e.platform});return Lt("grok-bot",t.status,t.version,t.detail)}async function Kee(e={}){let t=e.env??process.env,r=e.fetchFn??fetch,n=e.versionOf??Wee,o=t.KYNVER_HERMES_BIN?.trim()||t.HERMES_BIN?.trim()||"hermes",s=t.KYNVER_OPENCLAW_BIN?.trim()||t.OPENCLAW_BIN?.trim()||"openclaw",[i,a]=await Promise.all([n(o),n(s)]),[l,c]=await Promise.all([sB("hermes",Gp(e),i,r,e.now),sB("openclaw",Jp(e),a,r,e.now)]),u=await $ee({...e,versionOf:n});return{v:1,engines:[l,c,Fee(e),u].filter(f=>f!==null)}}function Hee(e={}){return Cl||(El&&Date.now()-El.at<Nee?Promise.resolve():(Cl=Kee(e).then(t=>{El={at:Date.now(),report:t}}).catch(()=>{}).finally(()=>{Cl=null}),Cl))}function Yp(){if(Hee(),!!El)return{v:1,engines:El.report.engines.map(e=>{let t=ev(e.engine);return{...e,lastRoundTrip:Vp(e.engine),lastReadyAt:t===null?null:new Date(t).toISOString()}})}}var Nee,Dee,Mee,Lee,Bee,Uee,nB,iB,El,Cl,tv=p(()=>{"use strict";K();ze();M();al();Xb();Qb();Zb();Nee=3e4,Dee=10*6e4,Mee=1500,Lee=5e3,Bee=3e4,Uee=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,nB=new Map;iB=new Map;El=null,Cl=null});function aB(){return jee}var jee,lB=p(()=>{"use strict";Zb();jee={id:"mailbox",probe:e=>qp(e),relay(){return Promise.resolve({text:"",mailbox:!0})}}});import{existsSync as Vee,mkdirSync as Gee,readFileSync as Jee,renameSync as qee,writeFileSync as Yee}from"node:fs";import{homedir as zee}from"node:os";import uB from"node:path";function Xee(e=zee()){return uB.join(e,".kynver","agent-tab-sessions.json")}function dB(e=Xee(),t=Date.now){let r=()=>{try{if(!Vee(e))return{};let o=JSON.parse(Jee(e,"utf8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let s={};for(let[i,a]of Object.entries(o)){let l=a;l&&typeof l.id=="string"&&typeof l.at=="number"&&(s[i]={id:l.id,at:l.at})}return s}catch{return{}}},n=o=>{let s=Object.keys(o);s.length>cB&&s.sort((i,a)=>o[i].at-o[a].at).slice(0,s.length-cB).forEach(i=>delete o[i]);try{Gee(uB.dirname(e),{recursive:!0,mode:448});let i=`${e}.${process.pid}.tmp`;Yee(i,`${JSON.stringify(o)}
270
+ `,{mode:384}),qee(i,e)}catch{}};return{get:o=>r()[o]?.id??null,remember:(o,s)=>{let i=r();i[o]?.id!==s&&(i[o]={id:s,at:t()},n(i))},forget:o=>{let s=r();o in s&&(delete s[o],n(s))}}}var cB,pB=p(()=>{"use strict";cB=500});function fB(e){let t=null,r=[];for(let o of e){if(!o||o.startsWith(":"))continue;let s=o.indexOf(":"),i=s===-1?o:o.slice(0,s),a=s===-1?"":o.slice(s+1).replace(/^ /,"");i==="event"?t=a:i==="data"&&r.push(a)}if(r.length===0)return null;let n=r.join(`
271
+ `);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*zp(e){let t=e.getReader(),r=new TextDecoder,n="",o=[];try{for(;;){let{done:i,value:a}=await t.read();if(i)break;n+=r.decode(a,{stream:!0});let l;for(;(l=n.indexOf(`
272
+ `))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=fB(o);o=[],u&&(yield u)}else o.push(c)}}n+=r.decode(),n&&o.push(n.replace(/\r$/,""));let s=fB(o);s&&(yield s)}finally{t.releaseLock()}}var rv=p(()=>{"use strict"});function nv(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let r=t;return typeof r.text=="string"&&(r.type===void 0||r.type==="text"||r.type==="output_text")?r.text:""}).join(""):""}function mB(e){if(typeof e=="string"&&e.trim())return e.trim().slice(0,300);if(!e||typeof e!="object")return null;let t=e.message;return typeof t=="string"&&t.trim()?t.trim().slice(0,300):null}function gB(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.output_text=="string"?t.output_text:Array.isArray(t.output)?t.output.map(r=>{if(!r||typeof r!="object")return"";let n=r;return n.type!=="message"||n.role!==void 0&&n.role!=="assistant"?"":nv(n.content)}).join(""):""}function ov(e,t){if(!t||typeof t!="object")return null;let r=t,n=e??(typeof r.type=="string"?r.type:null);if(n==="response.output_text.delta")return{delta:typeof r.delta=="string"?r.delta:"",full:null,finishReason:null,error:null};if(n==="response.completed")return{delta:"",full:gB(r.response)||null,finishReason:"stop",error:null};if(n==="response.failed"||n==="error"){let d=r.response;return{delta:"",full:null,finishReason:"error",error:mB(d?.error??r.error??r.message)??"the agent reported an error"}}if(e&&e!=="message")return null;let o=r.error!==void 0&&r.error!==null?mB(r.error)??"the agent reported an error":null,i=(Array.isArray(r.choices)?r.choices:[])[0]??null,a=nv(i?.delta?.content)||(typeof i?.text=="string"?i.text:""),l=i?.message?.content,c=l==null?null:nv(l),u=typeof i?.finish_reason=="string"?i.finish_reason:null;return!a&&c===null&&!u&&!o?null:{delta:a,full:c,finishReason:u,error:o}}function hB(e){if(!e||typeof e!="object")return null;let t=e;return t.object==="response"||Array.isArray(t.output)||typeof t.output_text=="string"?{delta:"",full:gB(t),finishReason:"stop",error:null}:ov(null,e)}var yB=p(()=>{"use strict"});function kB(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}function Qee(e,t){if(!Array.isArray(e)||e.length===0)return null;let r=bB(t).slice(0,200),n=null;for(let o=e.length-1;o>=0;o-=1){let s=e[o];if(!(!s||typeof s!="object")){if(s.role==="assistant"){let i=kB(s.content);n===null&&i.trim()&&(n=i);continue}if(s.role!=="tool"&&s.role==="user")return n===null?null:!r||bB(kB(s.content)).includes(r)?n:null}}return null}async function vB(e){let t=e.fetchFn??fetch,r=new AbortController,n=setTimeout(()=>r.abort(),5e3),o=()=>r.abort();e.signal?.addEventListener("abort",o,{once:!0});try{let s=await t(`${e.endpoint.baseUrl}/api/sessions/${encodeURIComponent(e.sessionId)}/messages`,{headers:e.endpoint.key?{Authorization:`Bearer ${e.endpoint.key}`}:{},signal:r.signal});if(!s.ok)return await s.body?.cancel().catch(()=>{}),null;let i=await s.json().catch(()=>null);return Qee(i?.data,e.sentText)}catch{return null}finally{clearTimeout(n),e.signal?.removeEventListener("abort",o)}}var bB,RB=p(()=>{"use strict";bB=e=>e.replace(/\s+/g," ").trim()});function Zee(e=process.env){let t=e.KYNVER_OPENCLAW_AGENT?.trim();return t?`openclaw/${t}`:"openclaw/default"}function wB(e,t){let r=t.filter(n=>n.imageDataUrl);return r.length===0?e:[{type:"text",text:e},...r.map(n=>({type:"image_url",image_url:{url:n.imageDataUrl}}))]}function ete(e,t){return t===401||t===403?new Error(`${e}_auth_failed: the local API refused the key in its config`):t===404?new Error(`${e}_api_off: the local chat API is not switched on`):t===429?new Error(`${e}_busy: the agent is busy, try again shortly`):new Error(`${e}_http_${t}`)}function sv(e,t,r,n,o){let s=`Conversation opened from Kynver chat (${t}).`,i=o?fp(o):null,a=r?.trim();if(a){let l=e==="hermes"?`${a}
273
+
274
+ ${s}`:a;return i?`${l}
275
+
276
+ ${i}`:l}return e==="hermes"&&!n?s:null}async function SB(e,t){let r=e.fetchFn??fetch,n={"Content-Type":"application/json",Accept:"text/event-stream"};e.endpoint.key&&(n.Authorization=`Bearer ${e.endpoint.key}`);let o=[],s,i=sv(e.engine,e.sessionKey,e.styleNote,t!==null,e.conversationId);e.conversationId&&(n[GD]=e.conversationId),i&&o.push({role:"system",content:i}),e.engine==="hermes"?(t&&(n["X-Hermes-Session-Id"]=t),o.push({role:"user",content:wB(e.text,e.attachments)}),s={model:"hermes-agent",stream:!0,messages:o}):(o.push({role:"user",content:wB(e.text,e.attachments)}),s={model:Zee(),stream:!0,user:`kynver:${e.sessionKey}`,messages:o});try{return await r(`${e.endpoint.baseUrl}/v1/chat/completions`,{method:"POST",headers:n,body:JSON.stringify(s),signal:e.signal})}catch(a){throw e.signal?.aborted?new Error(`${e.engine}_aborted`):new Error(`${e.engine}_unreachable: nothing answered on ${e.endpoint.baseUrl}`,{cause:a})}}async function iv(e){let t=e.now??Date.now,r=e.engine==="hermes"?e.sessions.get(e.sessionKey):null,n=await SB(e,r);if(r&&(n.status===400||n.status===404||n.status===409)&&(await n.body?.cancel().catch(()=>{}),e.sessions.forget(e.sessionKey),n=await SB(e,null)),!n.ok||!n.body)throw await n.body?.cancel().catch(()=>{}),ete(e.engine,n.status);let o=e.engine==="hermes"&&(n.headers.get("x-hermes-session-id")?.trim()||r)||null;e.engine==="hermes"&&o&&e.sessions.remember(e.sessionKey,o);let s="",i=!1,a=null,l=null,c=f=>{if(f.error){if(e.engine==="openclaw"&&s.trim()&&tte.test(f.error))return"stop";throw new Error(`${e.engine}_failed: ${f.error}`)}return f.delta&&(s+=f.delta,e.sink.onDelta(f.delta)),f.full!==null&&f.full.trim()&&(l=f.full),f.finishReason&&(a=f.finishReason),"continue"},u=n.headers.get("content-type")??"";if(/application\/json/i.test(u)){let f=await n.json().catch(()=>null),m=hB(f);m&&c(m)}else{let f=new Map;for await(let m of zp(n.body)){if(m.data==="[DONE]")break;if(m.event==="hermes.tool.progress"){i=!0;let h=m.data??{},y=typeof h.toolCallId=="string"?h.toolCallId:String(h.tool??""),b=[h.emoji,h.label??h.tool].filter(k=>typeof k=="string"&&k).join(" ").slice(0,300);if(h.status==="running")f.set(y,{at:t(),label:b||"tool"}),e.sink.onTool({label:b||"tool",status:"running",durationMs:null});else{let k=f.get(y);f.delete(y),e.sink.onTool({label:k?.label??(b||String(h.tool??"tool")),status:"completed",durationMs:k===void 0?null:t()-k.at})}continue}if(m.event==="approval.request"){let h=m.data??{},y=[h.description,h.command].find(b=>typeof b=="string"&&b);e.sink.onTool({label:`Waiting for approval in ${e.engine==="hermes"?"Hermes":"OpenClaw"}${y?`: ${y.slice(0,200)}`:""}`,status:"approval",durationMs:null});continue}let g=ov(m.event,m.data);if(g&&c(g)==="stop")break}}let d=l;if(!s.trim()&&d&&(s=d,e.sink.onDelta(d)),!s.trim()&&a==="error")throw new Error(`${e.engine}_failed: the agent stopped with an error \u2014 check its logs`);if(!s.trim()&&e.engine==="hermes"&&o){let f=await vB({endpoint:e.endpoint,sessionId:o,sentText:e.text,fetchFn:e.fetchFn,signal:e.signal});if(f&&f.trim())return e.sink.onDelta(f),{text:f,sessionId:o,recovered:!0}}if(!s.trim()&&!i)throw new Error(`${e.engine}_empty_reply: the agent sent back nothing \u2014 check its model sign-in and logs`);if(!s.trim())throw new Error(`${e.engine}_empty_reply: the agent ran its steps but sent back no answer`);return{text:s,sessionId:o}}var tte,av=p(()=>{"use strict";mp();rv();yB();RB();tte=/cannot be represented as an append-only response stream/i});import{mkdirSync as rte,readFileSync as nte,realpathSync as ote,statSync as ste,writeFileSync as ite}from"node:fs";import{homedir as lv}from"node:os";import tr from"node:path";function uv(e=lv()){return tr.join(e,".kynver","agent-tabs","inbox")}function _B(e,t=80){return e.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"_").slice(0,t)||"file"}function CB(e,t,r={}){if(t.length===0)return[];let n=tr.join(r.root??uv(),_B(e,120));rte(n,{recursive:!0,mode:448});let o=(r.now??Date.now)();return t.map((s,i)=>{let a=Buffer.from(s.contentBase64,"base64"),l=tr.join(n,`${o}-${i}-${_B(s.name,120)}`);ite(l,a,{mode:384});let c=/^image\/(png|jpe?g|gif|webp|bmp|heic|heif)$/i.test(s.mime);return{name:s.name,mime:s.mime,path:l,imageDataUrl:c?`data:${s.mime.toLowerCase()};base64,${s.contentBase64}`:null}})}function Qp(e,t){if(t.length===0)return e;let r=t.map(n=>`[Attached file "${n.name}" (${n.mime}) saved on this computer at ${n.path}]`);return[e.trim(),...r].filter(Boolean).join(`
277
+
278
+ `)}function dv(e){let t=[];return{text:e.replace(ate,(n,o,s,i,a)=>{let l=String(o??s??i??a??"").replace(/[),.;:!?\]]+$/,"");return l?(!t.includes(l)&&t.length<Xp&&t.push(l),""):n}).replace(/[ \t]+\n/g,`
279
+ `).replace(/\n{3,}/g,`
280
+
281
+ `).trim(),paths:t}}function xB(e,t=lv()){let r=tr.basename(e);if(lte.test(r))return"credential_file";let n=tr.relative(t,e);if(!n.startsWith("..")&&!tr.isAbsolute(n)){let o=n.split(tr.sep).join("/");if($p.some(s=>o===s))return"credential_file";if(Fp.some(s=>o===s||o.startsWith(`${s}/`)))return"private_folder"}return null}function cte(e,t){return e==="~"?t:e.startsWith("~/")||e.startsWith("~\\")?tr.join(t,e.slice(2)):e}function pv(e,t={}){let r=t.home??lv(),n=tr.resolve(cte(e,r)),o={path:n,name:tr.basename(n)},s=xB(n,r);if(s)return{...o,ok:!1,reason:s,sizeBytes:null,contentBase64:null};try{let i=ote(n),a=xB(i,r);if(a)return{...o,ok:!1,reason:a,sizeBytes:null,contentBase64:null};let l=ste(i);if(!l.isFile())return{...o,ok:!1,reason:"not_a_file",sizeBytes:null,contentBase64:null};if(l.size>cv)return{...o,ok:!1,reason:"too_large",sizeBytes:l.size,contentBase64:null};let c=nte(i);return{...o,ok:!0,reason:null,sizeBytes:c.length,contentBase64:c.toString("base64")}}catch{return{...o,ok:!1,reason:"not_found",sizeBytes:null,contentBase64:null}}}var cv,Xp,ate,lte,Zp=p(()=>{"use strict";wl();Hb();cv=50*1024*1024,Xp=10;ate=/MEDIA:\s*(?:"([^"\n]+)"|'([^'\n]+)'|`([^`\n]+)`|((?:~|\/|[A-Za-z]:[\\/])[^\s"'`<>]*))/g;lte=Kb(si)});import{chmodSync as dte,copyFileSync as pte,mkdirSync as fte}from"node:fs";import fv from"node:path";function mte(e,t){let r=e?.trim(),n=r?`${EB}
282
+
283
+ ${r}`:EB;return t?`${n}
284
+
285
+ ${fp(t)}`:n}function gte(e){let t=e.config??A();return{engine:"claude-code",access:Xo({engine:"claude-code",local:{chatComputerAccess:t.chatComputerAccess,chatWorkFolders:t.chatWorkFolders},website:Dc(e.payloadAccess,e.boxId),home:e.home})}}function yte(e,t){if(t.access==="full"||t.access==="off")return e;let r=fv.join(t.workDir,hte);return e.map(n=>{if(Lc(t,n.path))return n;fte(r,{recursive:!0,mode:448});let o=fv.join(r,fv.basename(n.path));return pte(n.path,o),dte(o,384),{...n,path:o}})}function kte(e){return e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join("")}async function AB(e){let t=gte(e);if(t.access.access==="off")throw new Error("claude_code_access_off: computer access for chat is off for this computer \u2014 choose a folder (or full access) on the Computers page to use the Claude Code tab");let r=e.config??A(),n=e.env??process.env,o=Qp(e.text,yte(e.attachments,t.access)),s=await(e.run??jp)({payload:{system:mte(e.styleNote,e.conversationId),tools:[],messages:[{role:"user",content:o}],maxTokens:32e3,executionMode:"agent"},model:n.KYNVER_AGENT_TAB_CLAUDE_MODEL?.trim()??"",onDelta:e.onDelta,step:e.maxStepMs?{session:e.sessionKey,timeLeftMs:e.maxStepMs,maxMs:e.maxStepMs}:{session:e.sessionKey,timeLeftMs:48e4},access:t.access,signal:e.signal,turnId:e.turnId,onActivity:i=>e.onActivity(i,t),env:n,extraEnv:JD(e.conversationId,"claude-code"),sessions:e.sessions,config:{chatFolderSandbox:r.chatFolderSandbox,chatFolderSandboxDomains:r.chatFolderSandboxDomains},...e.spawnTarget?{spawnTarget:e.spawnTarget}:{},...e.tempRoot?{tempRoot:e.tempRoot}:{},...e.sandboxRuntime?{sandboxRuntime:e.sandboxRuntime}:{},...e.egressProxy?{egressProxy:e.egressProxy}:{}});return{text:kte(s.content)}}var EB,hte,IB=p(()=>{"use strict";mp();K();Pn();Gb();Lp();Zp();EB="You are the user's own Claude Code, reached from a tab in their Kynver chat on the web. Work exactly as you would in their terminal, in the folder this session started in. Your replies are shown in a chat window, so keep them readable; there are no Kynver tools in this conversation.";hte=".kynver-attachments"});import ef from"node:path";import{homedir as bte}from"node:os";function xte(e){let t=e.replace(/[\r\n]/g,""),r=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-r)}function Cte(e){return e.replace(/[ \t]+\n/g,`
286
+ `).replace(/\n{3,}/g,`
287
+
288
+ `).trim()}function PB(e){let t=[];return e.includes("data:image/")?{text:e.replace(vte,(n,o,s,i)=>{if(t.length>=Xp)return n;let a=s.toLowerCase(),l=`image-${t.length+1}.${Rte[a]??"png"}`,c=xte(i);return c>cv?(t.push({source:"inline_image",path:l,name:l,ok:!1,reason:"too_large",sizeBytes:c,contentBase64:null}),""):(t.push({source:"inline_image",path:l,name:l,ok:!0,reason:null,sizeBytes:c,contentBase64:i.replace(/[\r\n]/g,"")}),"")}),files:t}:{text:e,files:t}}function Ete(e){let t=e.replace(_te,n=>" ".repeat(n.length)),r=[];for(let n of t.matchAll(Ste)){let o=n[1].replace(/[),.;:!?\]]+$/,"");r.includes(o)||r.push(o)}return r}function Ate(e,t){return e.startsWith("~/")?ef.join(t,e.slice(2)):e}function Ite(e,t){let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(String.raw`^[ \t]*(?:[-*•][ \t]+)?(?:[A-Za-z ]{1,30}:[ \t]*)?\`?${r}\`?[ \t]*[.!]?[ \t]*$`,"gm");return e.replace(n,"")}function OB(e,t={}){let r=t.home??bte(),n=ef.resolve(t.inboxRoot??uv(r)),o=[],s=()=>o.length<Xp,i=PB(e);o.push(...i.files);let a=dv(i.text);for(let u of a.paths){if(!s())break;o.push({source:"tag",...pv(u,{home:r})})}let l=a.text,c=new Set(o.map(u=>u.path));for(let u of Ete(l)){if(!s())break;let d=ef.resolve(Ate(u,r));if(c.has(d)||d===n||d.startsWith(`${n}${ef.sep}`))continue;let f=pv(u,{home:r});!f.ok&&f.reason!=="too_large"||(c.add(f.path),o.push({source:"path",...f}),f.ok&&(l=Ite(l,u)))}return{text:Cte(l),files:o}}function mv(e){return dv(PB(e).text).text}var vte,Rte,wte,Ste,_te,TB=p(()=>{"use strict";Zp();vte=/!\[([^\]\n]{0,200})\]\(\s*data:(image\/[a-z0-9.+-]{1,40});base64,([A-Za-z0-9+/=\r\n]+)\s*\)/gi,Rte={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp"},wte=["mp4","mov","m4v","webm","mkv","mp3","m4a","wav","ogg","oga","opus","aac","flac","png","jpg","jpeg","gif","webp","heic","pdf"],Ste=new RegExp(String.raw`(?<![\w/:.~-])((?:~\/|\/)[^\s"'\`<>()\[\]{}|]*?\.(?:${wte.join("|")}))(?![\w/-])`,"gi"),_te=/```[\s\S]*?(?:```|$)/g});import{appendFileSync as Pte,mkdirSync as Ote}from"node:fs";import{homedir as Tte}from"node:os";import NB from"node:path";function Nte(e=Tte()){return NB.join(e,".kynver","logs","agent-tabs.jsonl")}function DB(e,t=Nte()){try{Ote(NB.dirname(t),{recursive:!0});let r={...e,...e.label?{label:e.label.slice(0,300)}:{}};Pte(t,`${JSON.stringify(r)}
289
+ `,{encoding:"utf8",mode:384})}catch{}}var MB=p(()=>{"use strict"});function BB(e,t=45e3){let r=setInterval(()=>{try{e()}catch{}},t);return r.unref?.(),()=>clearInterval(r)}var LB,UB=p(()=>{"use strict";LB="heartbeat"});function Dte(){let e=new Map;return{register(t,r){return e.set(t,r),()=>{e.get(t)?.turnId===r.turnId&&e.delete(t)}},setSteer(t,r,n){let o=e.get(t);o&&o.turnId===r&&e.set(t,{...o,steer:n})},get(t){return e.get(t)??null}}}var WB,FB=p(()=>{"use strict";WB=Dte()});async function $B(e,t,r){let n=e.get(t);return n?r.op==="stop"?n.stop():!n.steer||!r.text?"unsupported":n.steer(r.text):"no_run"}function KB(e,t,r,n){return{seq:e,kind:"final",message:{content:[{type:"text",text:""}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:t,media:0,control:{op:r.op,outcome:n}}}}}var HB=p(()=>{"use strict"});function Al(e,t=!0){let r={};return t&&(r["Content-Type"]="application/json"),e.key&&(r.Authorization=`Bearer ${e.key}`),r}async function qB(e,t={}){if((t.env??process.env).KYNVER_HERMES_RUNS==="0")return!1;let r=(t.now??Date.now)(),n=jB.get(e.baseUrl);if(n&&r-n.at<Mte)return n.ok;let o=!1;try{let s=await(t.fetchFn??fetch)(`${e.baseUrl}/v1/capabilities`,{headers:Al(e,!1),signal:AbortSignal.timeout(3e3)});if(s.ok){let a=(await s.json().catch(()=>null))?.features??{};o=!!(a.run_submission&&a.run_events_sse&&a.run_steer&&a.run_stop)}else await s.body?.cancel().catch(()=>{})}catch{o=!1}return jB.set(e.baseUrl,{at:r,ok:o}),o}async function VB(e,t,r,n){try{let o=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}/${r}`,{method:"POST",headers:Al(e.endpoint),body:JSON.stringify(n),signal:AbortSignal.timeout(JB)});return await o.body?.cancel().catch(()=>{}),o.ok?"delivered":o.status===404||o.status===409?"no_run":"failed"}catch{return"failed"}}function Lte(e){return e===401||e===403?new Error("hermes_auth_failed: the local API refused the key in its config"):e===429?new Error("hermes_busy: the agent is busy, try again shortly"):new ii(`hermes_runs_http_${e}`)}function GB(e){let t=typeof e.tool=="string"?e.tool:"tool",r=typeof e.preview=="string"&&e.preview.trim()?`: ${e.preview.trim()}`:"";return`${t}${r}`.slice(0,300)}async function YB(e,t){let r=e.fetchFn??fetch,n=e.now??Date.now,o=e.sessions.get(e.sessionKey),s=sv("hermes",e.sessionKey,e.styleNote,o!==null),i;try{i=await r(`${e.endpoint.baseUrl}/v1/runs`,{method:"POST",headers:Al(e.endpoint),body:JSON.stringify({model:"hermes-agent",input:e.text,...o?{session_id:o}:{},...s?{instructions:s}:{}}),signal:e.signal})}catch(k){throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: nothing answered on ${e.endpoint.baseUrl}`,{cause:k})}if(!i.ok)throw await i.body?.cancel().catch(()=>{}),Lte(i.status);let a=await i.json().catch(()=>null),l=typeof a?.run_id=="string"?a.run_id:null;if(!l)throw new ii("hermes_runs_no_run_id");let c={runId:l,steer:k=>VB(e,l,"steer",{text:k}),stop:()=>VB(e,l,"stop",{})};t?.(c);let u=()=>{c.stop()};e.signal?.addEventListener("abort",u,{once:!0});let d="",f=null,m=null,g=null,h=new Map;try{let k=await r(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(l)}/events`,{headers:{...Al(e.endpoint,!1),Accept:"text/event-stream"},signal:e.signal}).catch(v=>{throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: the run's events stream closed (${v instanceof Error?v.message:String(v)})`)});if(!k.ok||!k.body)throw await k.body?.cancel().catch(()=>{}),new Error(`hermes_http_${k.status}`);for await(let v of zp(k.body)){let S=v.data&&typeof v.data=="object"?v.data:{},_=typeof S.event=="string"?S.event:v.event;if(_==="message.delta"&&typeof S.delta=="string")d+=S.delta,e.sink.onDelta(S.delta);else if(_==="message.interim"&&typeof S.text=="string"&&!S.already_streamed){let R=`${d&&!d.endsWith(`
290
+ `)?`
291
+
292
+ `:""}${S.text}`;d+=R,e.sink.onDelta(R)}else if(_==="tool.started"){let R=typeof S.tool_call_id=="string"?S.tool_call_id:String(S.tool??""),w=GB(S);h.set(R,{at:n(),label:w}),e.sink.onTool({label:w,status:"running",durationMs:null})}else if(_==="tool.completed"){let R=typeof S.tool_call_id=="string"?S.tool_call_id:String(S.tool??""),w=h.get(R);h.delete(R),e.sink.onTool({label:w?.label??GB(S),status:"completed",durationMs:w?n()-w.at:typeof S.duration=="number"?Math.round(S.duration*1e3):null})}else if(_==="approval.request"){let R=[S.description,S.command].find(w=>typeof w=="string"&&w);e.sink.onTool({label:`Waiting for approval in Hermes${R?`: ${R.slice(0,200)}`:""}`,status:"approval",durationMs:null})}else if(_==="run.completed"){m="completed",typeof S.output=="string"&&(f=S.output);break}else if(_==="run.failed"||_==="run.interrupted"){m="failed",g=typeof S.error=="string"?S.error:"the agent stopped with an error \u2014 check its logs";break}else if(_==="run.cancelled"){m="cancelled";break}}}catch(k){throw e.signal?.aborted?new Error("hermes_aborted"):k}finally{e.signal?.removeEventListener("abort",u)}if(e.signal?.aborted||m==="cancelled")throw new Error("hermes_aborted");let y=await Bte(e,l);!m&&y&&(y.status==="completed"?f=y.output??f:y.status==="failed"&&(g=y.error??"the agent stopped with an error \u2014 check its logs"));let b=y?.sessionId??o??l;if(e.sessions.remember(e.sessionKey,b),g&&!d.trim())throw new Error(`hermes_failed: ${g}`);if(!d.trim()&&f&&f.trim()&&(d=f,e.sink.onDelta(f)),!d.trim())throw new Error("hermes_empty_reply: the agent sent back nothing \u2014 check its model sign-in and logs");return{text:d,sessionId:b}}async function Bte(e,t){try{let r=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}`,{headers:Al(e.endpoint,!1),signal:AbortSignal.timeout(JB)});if(!r.ok)return await r.body?.cancel().catch(()=>{}),null;let n=await r.json().catch(()=>null);return n?{status:typeof n.status=="string"?n.status:"",output:typeof n.output=="string"?n.output:null,error:typeof n.error=="string"?n.error:null,sessionId:typeof n.session_id=="string"&&n.session_id?n.session_id:null}:null}catch{return null}}var ii,Mte,JB,jB,zB=p(()=>{"use strict";rv();av();ii=class extends Error{constructor(t){super(t),this.name="HermesRunsUnavailable"}},Mte=5*6e4,JB=1e4,jB=new Map});async function ZB(e,t,r={}){let n=r.now??(()=>new Date),o=r.log??DB,s=YD(t.payload);if(!s){await e([{seq:0,kind:"error",error:"agent_tab_bad_payload"}]).catch(()=>!1);return}let i=s.engine,a=n().getTime(),l=r.runs??WB;if(s.control){let F=await $B(l,s.sessionKey,s.control);o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:F==="delivered",durationMs:n().getTime()-a,reason:`control_${s.control.op}_${F}`}),await Br(()=>e([KB(0,i,s.control,F)]).catch(()=>!1));return}let c=0,u=!1,d=new AbortController,f=new mn,m=s.replyTurnId&&r.late?s.replyTurnId:null,g=!1,h=null,y=F=>{d.signal.aborted||(h=F,d.abort())},b=()=>{!m||!r.late||r.late.heartbeat(m).then(F=>{F==="stop"&&y("website_stop")})},k=()=>{if(!u){if(u=!0,m&&!d.signal.aborted){g=!0,o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"detached",ok:!0,durationMs:n().getTime()-a}),b(),setTimeout(b,Math.min(5e3,r.heartbeatMs??45e3)).unref?.();return}d.abort()}},v=F=>{u||f.track(e([{seq:c++,...F}]).then(W=>(W||k(),W),()=>!1))},S=BB(()=>{g?b():u||v({kind:"activity",activity:{kind:LB,at:n().toISOString(),turnId:t.turnId}})},r.heartbeatMs??45e3),_=m?setTimeout(()=>y("too_long"),r.maxTurnMs??72e5):null;_?.unref?.();let R=async(F,W)=>{if(!m||!r.late)return;let x=await r.late.deliver({replyTurnId:m,engine:i,text:F,files:W});o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"late_reply",ok:x,durationMs:n().getTime()-a})},w=new fn(F=>v({kind:"delta",text:F}),r.flushFloorMs),B=F=>{w.flush(),v({kind:"activity",activity:F})},j=F=>{let W={at:n().toISOString(),chat:null,turnId:t.turnId,kind:"tool",engine:i,access:"own",command:F.label,folder:"",durationMs:F.durationMs,ok:F.status!=="approval",...F.status==="running"?{reason:"started"}:{},...F.status==="approval"?{reason:"awaiting_approval"}:{}};B(W),F.status!=="running"&&o({at:W.at,turnId:t.turnId,engine:i,kind:"tool",label:F.label,ok:W.ok,durationMs:F.durationMs})},O=wp({turnId:t.turnId,chat:null,send:F=>B(F),now:n}),T="",U=!1,N=null,J=l.register(s.sessionKey,{engine:i,turnId:t.turnId,stop:async()=>(N&&await N.stop(),y("website_stop"),"delivered")});try{if(i==="grok-bot"){let V=await(r.grokBot??aB()).relay({sessionKey:s.sessionKey,text:s.text}),te=n().getTime()-a;if(V.mailbox){Sl(i,{ok:!0,durationMs:te},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:te});let ge=c++;await Br(()=>u?e([{seq:ge,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:ge,kind:"final",message:{content:[],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,mailbox:!0}}}]).catch(()=>!1));return}T=V.text,w.push(V.text),w.close(),await f.drain();let pe=V.text.trim();if(!pe)throw new Error("grok_bot_empty_reply");Sl(i,{ok:!0,durationMs:te},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:te});let Y=c++;await Br(()=>u?e([{seq:Y,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:Y,kind:"final",message:{content:[{type:"text",text:pe}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0}}}]).catch(()=>!1));return}let F=r.sessions??dB(),W=CB(s.sessionKey,s.attachments,{root:r.inboxRoot}),x;if(i==="claude-code")x=(await(r.runClaudeCode??AB)({sessionKey:s.sessionKey,text:s.text,styleNote:s.styleNote,conversationId:s.conversationId,attachments:W,payloadAccess:s.computerAccess,boxId:t.boxId,sessions:F,onDelta:te=>{T+=te,w.push(te)},onActivity:O.sink,signal:d.signal,turnId:t.turnId,home:r.home,...m?{maxStepMs:r.maxTurnMs??72e5}:{}})).text||T;else{let V=(r.endpoint??(ge=>ge==="hermes"?Gp():Jp()))(i),te={engine:i,endpoint:V,sessionKey:s.sessionKey,text:Qp(s.text,W.filter(ge=>!ge.imageDataUrl)),styleNote:s.styleNote,conversationId:s.conversationId,attachments:W,sessions:F,signal:d.signal,fetchFn:r.fetchFn,sink:{onDelta:ge=>{T+=ge,w.push(ge)},onTool:j}},pe=i==="hermes"&&W.every(ge=>!ge.imageDataUrl)&&await(r.hermesRuns??(ge=>qB(ge,{fetchFn:r.fetchFn})))(V),Y;if(pe)try{Y=await YB(te,ge=>{N=ge,l.setSteer(s.sessionKey,t.turnId,ge.steer)})}catch(ge){if(!(ge instanceof ii))throw ge;Y=await iv(te)}else Y=await iv(te);x=Y.text,U=Y.recovered===!0}let G=OB(x,{home:r.home,inboxRoot:r.inboxRoot});G.files.forEach((V,te)=>{let pe=n().toISOString();B({at:pe,chat:null,turnId:t.turnId,kind:"attach",engine:i,access:"own",path:V.path,folder:"",ok:V.ok,...V.reason?{reason:V.reason}:{},...!V.ok&&V.sizeBytes!==null?{sizeBytes:V.sizeBytes}:{},toolUseId:`media-${te}`,...V.ok&&V.contentBase64?{file:{name:V.name,sizeBytes:V.sizeBytes,contentBase64:V.contentBase64}}:{}}),o({at:pe,turnId:t.turnId,engine:i,kind:"attach",path:V.path,ok:V.ok,reason:V.reason})}),J(),w.close(),await f.drain();let C=n().getTime()-a;Sl(i,{ok:!0,durationMs:C},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:C,...U?{reason:"reply_read_from_session"}:{}});let P=()=>G.files.filter(V=>V.ok&&V.contentBase64).map(V=>({name:V.name,contentBase64:V.contentBase64,sizeBytes:V.sizeBytes}));if(g){await R(G.text,P());return}let D=c++;!await Br(()=>u?e([{seq:D,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:D,kind:"final",message:{content:[{type:"text",text:G.text}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:G.files.filter(V=>V.ok).length}}}]).catch(()=>!1))&&m&&!u&&await R(G.text,P())}catch(F){J(),w.close(),await f.drain();let W=F instanceof Error?F.message:String(F),x=YL(F),G=n().getTime()-a;if(Sl(i,{ok:!1,durationMs:G,error:x},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!1,durationMs:G,reason:h??x}),g){if(h)return;let P=mv(T).trim();await R(P?`${P}
293
+
294
+ _${gv[i]} stopped before finishing (${x})._`:`${gv[i]} couldn't finish this message (${x}).`,[]);return}if(u)return;let C=c++;if(T.trim()){let P=`
295
+
296
+ _${gv[i]} stopped before finishing (${x})._`;await Br(()=>e([{seq:C,kind:"final",message:{content:[{type:"text",text:mv(T)+P}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,error:x}}}]).catch(()=>!1))}else await Br(()=>e([{seq:C,kind:"error",error:W.slice(0,1500)}]).catch(()=>!1))}finally{J(),S(),_&&clearTimeout(_)}}var gv,eU=p(()=>{"use strict";vp();Rp();hb();cb();tb();lB();pB();Qb();av();IB();Zp();TB();Xb();MB();UB();FB();HB();zB();gv=gp});function hv(e){let t=(e??"").replace(/\s+/g," ").trim();if(!t||t.length>120)return null;for(let r of Ute)if(r.re.test(t))return r.kind;return null}function rU(e){let t=e.tag.toLowerCase(),r=(e.type??"").toLowerCase(),n=(e.role??"").toLowerCase();return t==="button"||t==="a"||n==="button"||n==="link"||n==="menuitem"||t==="input"&&(r==="submit"||r==="button"||r==="image")}function tf(e){return rU(e)?hv(e.name):null}function nU(e){return e.tag.toLowerCase()==="textarea"?null:rU(e)?hv(e.name):hv(e.formSubmitLabel)}function rf(e){if((e.type??"").toLowerCase()==="password"||Wte.test(e.autocomplete??""))return!0;let t=e.tag.toLowerCase();return t!=="input"&&t!=="textarea"?!1:tU.test(e.inputName??"")||tU.test(e.name??"")}function yv(e){if(typeof e!="string"||!e.trim())return{ok:!1,reason:"url is required"};let t=e.trim();/^[a-z][a-z0-9+.-]*:/i.test(t)||(t=`https://${t}`);let r;try{r=new URL(t)}catch{return{ok:!1,reason:"not a valid URL"}}return r.protocol!=="http:"&&r.protocol!=="https:"?{ok:!1,reason:`only http(s) pages can be opened (got ${r.protocol})`}:r.username||r.password?{ok:!1,reason:"URLs carrying a username or password are refused"}:Fte.test(r.hostname)?{ok:!1,reason:"local and private-network addresses are refused"}:{ok:!0,url:r.toString()}}function oU(e){let t=e.map(n=>(n??"").trim()).join("|"),r=2166136261;for(let n=0;n<t.length;n+=1)r^=t.charCodeAt(n),r=Math.imul(r,16777619)>>>0;return r.toString(16).padStart(8,"0")}function sU(e){if(!e)return"";try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return""}}var Ute,Wte,tU,Fte,kv=p(()=>{"use strict";Ute=[{kind:"purchase",re:/\b(buy|purchase|place\s+(your\s+)?order|complete\s+(your\s+)?(order|purchase)|check\s*out|pay(\s+now)?|confirm\s+(and\s+)?pay|submit\s+(order|payment)|subscribe|donate|book\s+now|rent\s+now|add\s+funds|transfer|withdraw)\b/i},{kind:"send",re:/\b(send|post|publish|tweet|reply|share\s+now|submit\s+(message|comment|review|application))\b/i},{kind:"delete",re:/\b(delete|remove\s+(account|permanently)|erase|destroy|cancel\s+(my\s+)?(account|subscription|order)|close\s+account|unsubscribe\s+all)\b/i}];Wte=/\b(current-password|new-password|one-time-code|cc-number|cc-csc|cc-exp|cc-exp-month|cc-exp-year)\b/i,tU=/(passw|passcode|pwd|\bpin\b|otp|one[-_ ]?time|2fa|mfa|verification[-_ ]?code|security[-_ ]?code|cvv|cvc|card[-_ ]?number|ccnum|ssn|social[-_ ]?security)/i;Fte=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[?::1?\]?|127(\.\d{1,3}){3}|10(\.\d{1,3}){3}|192\.168(\.\d{1,3}){2}|172\.(1[6-9]|2\d|3[01])(\.\d{1,3}){2}|169\.254(\.\d{1,3}){2}|\[?f[cd][0-9a-f]{2}:.*|\[?fe80:.*)$/i});function iU(e){return Kte.includes(e)}function aU(e){return typeof e=="string"&&$te.includes(e)}var $te,Kte,lU,cU,bv,uU,vv,dU,pU,nf,fU,mU,gU,Rv,ai=p(()=>{"use strict";$te=["open","snapshot","click","type","select","press","scroll","screenshot","wait","tabs","close","list_logins","fill_login","save_login","request_code"],Kte=["list_logins","fill_login","save_login","request_code"];lU=12e3,cU=200,bv=16e3,uU=95e4,vv=4e3,dU=3e4,pU=25e3,nf=3e4,fU=10*6e4,mU=5*6e4,gU=120,Rv=8});function Hte(e){let t=e.role?.toLowerCase();if(t)return t;if(e.tag==="a")return"link";if(e.tag==="select")return"dropdown";if(e.tag==="textarea")return"textbox";if(e.tag==="input"){let r=e.type??"text";return r==="submit"||r==="button"||r==="image"?"button":r==="checkbox"||r==="radio"?r:r==="password"?"password":r==="text"?"textbox":`${r} field`}return e.tag}function jte(e){let t=rf(e),r=[`[${e.ref}] ${Hte(e)}`];return e.name&&r.push(JSON.stringify(e.name)),!t&&e.value&&r.push(`value=${JSON.stringify(e.value)}`),e.checked!==null&&r.push(e.checked?"(checked)":"(unchecked)"),e.disabled&&r.push("(disabled)"),t?r.push("(secret field \u2014 the user must type this themselves)"):tf(e)&&r.push("(needs the user's approval to press)"),r.join(" ")}function hU(e,t={}){let r=t.maxChars??bv,n=`Page: ${e.title||"(untitled)"} \u2014 ${e.url}`,o=e.elements.map(jte),s=o.length?`Interactive elements (use the [ref] with browser_click / browser_type / browser_select):
269
297
  ${o.join(`
270
298
  `)}${e.truncatedElements?`
271
299
  \u2026more elements not shown \u2014 scroll or wait, then snapshot again`:""}`:"Interactive elements: none visible.",i=`${n}
@@ -274,30 +302,30 @@ ${s}
274
302
 
275
303
  Page text:
276
304
  `,a=Math.max(0,r-i.length),l=e.text.length>a?`${e.text.slice(0,Math.max(0,a-14))}
277
- \u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function Dp(e,t=Pb){return e.length>t?`${e.slice(0,t-14)}
278
- \u2026[truncated]`:e}var Tb=p(()=>{"use strict";Ab();ri()});function FL(){return`(() => {${Nb}
305
+ \u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function of(e,t=bv){return e.length>t?`${e.slice(0,t-14)}
306
+ \u2026[truncated]`:e}var wv=p(()=>{"use strict";kv();ai()});function yU(){return`(() => {${Sv}
279
307
  const root = document.documentElement;
280
308
  let seq = Number(root.getAttribute("data-kynver-ref-seq") || "0");
281
309
  const elements = [];
282
310
  let truncatedElements = false;
283
- for (const el of document.querySelectorAll(${JSON.stringify(ZZ)})) {
311
+ for (const el of document.querySelectorAll(${JSON.stringify(Vte)})) {
284
312
  if (!__kvVisible(el)) continue;
285
- if (elements.length >= ${TL}) { truncatedElements = true; break; }
313
+ if (elements.length >= ${cU}) { truncatedElements = true; break; }
286
314
  let ref = el.getAttribute("data-kynver-ref");
287
315
  if (!ref) { seq += 1; ref = "e" + seq; el.setAttribute("data-kynver-ref", ref); }
288
316
  elements.push(__kvFacts(el, ref));
289
317
  }
290
318
  root.setAttribute("data-kynver-ref-seq", String(seq));
291
319
  const body = document.body;
292
- const text = body ? String(body.innerText || "").replace(/\\n{3,}/g, "\\n\\n").slice(0, ${OL}) : "";
320
+ const text = body ? String(body.innerText || "").replace(/\\n{3,}/g, "\\n\\n").slice(0, ${lU}) : "";
293
321
  return { url: location.href, title: document.title, text, elements, truncatedElements };
294
- })()`}function KL(e){return`(() => {${Nb}
322
+ })()`}function kU(e){return`(() => {${Sv}
295
323
  const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
296
324
  if (!el) return null;
297
325
  el.scrollIntoView({ block: "center", inline: "center" });
298
326
  const r = el.getBoundingClientRect();
299
327
  return { x: r.left + r.width / 2, y: r.top + r.height / 2, facts: __kvFacts(el, ${JSON.stringify(e)}), url: location.href };
300
- })()`}function $L(e,t){return`(() => {
328
+ })()`}function bU(e,t){return`(() => {
301
329
  const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
302
330
  if (!el) return false;
303
331
  el.focus();
@@ -312,7 +340,7 @@ Page text:
312
340
  }
313
341
  }
314
342
  return true;
315
- })()`}function HL(e,t){return`(() => {
343
+ })()`}function vU(e,t){return`(() => {
316
344
  const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
317
345
  if (!el || el.tagName !== "SELECT") return { ok: false, reason: "not_select" };
318
346
  const want = ${JSON.stringify(t)}.trim().toLowerCase();
@@ -324,17 +352,17 @@ Page text:
324
352
  el.dispatchEvent(new Event("input", { bubbles: true }));
325
353
  el.dispatchEvent(new Event("change", { bubbles: true }));
326
354
  return { ok: true, label: (hit.label || hit.textContent || "").trim() };
327
- })()`}function jL(){return`(() => {${Nb}
355
+ })()`}function RU(){return`(() => {${Sv}
328
356
  const el = document.activeElement;
329
357
  if (!el || el === document.body) return { facts: null, url: location.href };
330
358
  return { facts: __kvFacts(el, el.getAttribute("data-kynver-ref") || ""), url: location.href };
331
- })()`}function VL(e){return`(() => { window.scrollBy(0, ${Math.trunc(e)}); return { y: Math.round(window.scrollY), max: Math.round(document.documentElement.scrollHeight - window.innerHeight) }; })()`}function GL(e,t){return`(() => {
359
+ })()`}function wU(e){return`(() => { window.scrollBy(0, ${Math.trunc(e)}); return { y: Math.round(window.scrollY), max: Math.round(document.documentElement.scrollHeight - window.innerHeight) }; })()`}function SU(e,t){return`(() => {
332
360
  const t = ${JSON.stringify(e)};
333
361
  const s = ${JSON.stringify(t)};
334
362
  if (t && document.body && String(document.body.innerText || "").toLowerCase().includes(t.toLowerCase())) return true;
335
363
  if (s) { try { if (document.querySelector(s)) return true; } catch (e) { return "bad_selector"; } }
336
364
  return false;
337
- })()`}var Nb,ZZ,JL=p(()=>{"use strict";ri();Nb=String.raw`
365
+ })()`}var Sv,Vte,_U=p(()=>{"use strict";ai();Sv=String.raw`
338
366
  const __kvText = (s, n) => String(s == null ? "" : s).replace(/\s+/g, " ").trim().slice(0, n);
339
367
  const __kvName = (el) => {
340
368
  const aria = el.getAttribute("aria-label");
@@ -397,11 +425,11 @@ const __kvVisible = (el) => {
397
425
  const s = getComputedStyle(el);
398
426
  return s.visibility !== "hidden" && s.display !== "none" && s.opacity !== "0";
399
427
  };
400
- `,ZZ='a[href],button,input:not([type="hidden"]),select,textarea,summary,[role="button"],[role="link"],[role="checkbox"],[role="radio"],[role="tab"],[role="menuitem"],[role="option"],[role="combobox"],[role="textbox"],[role="switch"],[contenteditable="true"],[contenteditable=""]'});async function vo(e,t,r,n=15e3){let o=await e.send("Runtime.evaluate",{expression:r,returnByValue:!0,awaitPromise:!0},{sessionId:t.sessionId,timeoutMs:n});if(o.exceptionDetails)throw new Error(`page script failed: ${o.exceptionDetails.text??"error"}`);return o.result?.value}async function eee(e,t){return vo(e.session.host.conn,t,FL())}async function er(e,t,r){let n=await eee(e,t),o=UL(n);return{ok:!0,text:r?Dp(`${r}
428
+ `,Vte='a[href],button,input:not([type="hidden"]),select,textarea,summary,[role="button"],[role="link"],[role="checkbox"],[role="radio"],[role="tab"],[role="menuitem"],[role="option"],[role="combobox"],[role="textbox"],[role="switch"],[contenteditable="true"],[contenteditable=""]'});async function So(e,t,r,n=15e3){let o=await e.send("Runtime.evaluate",{expression:r,returnByValue:!0,awaitPromise:!0},{sessionId:t.sessionId,timeoutMs:n});if(o.exceptionDetails)throw new Error(`page script failed: ${o.exceptionDetails.text??"error"}`);return o.result?.value}async function Gte(e,t){return So(e.session.host.conn,t,yU())}async function rr(e,t,r){let n=await Gte(e,t),o=hU(n);return{ok:!0,text:r?of(`${r}
401
429
 
402
- ${o}`):o,url:n.url,title:n.title}}function Mp(e){let t=typeof e.ref=="string"?e.ref.trim():"";return/^e\d{1,6}$/.test(t)?t:null}function XL(e,t,r,n,o){let s=EL([AL(o),t,r.toLowerCase(),n]);if(e.approvedFingerprint&&e.approvedFingerprint===s)return null;let i=(()=>{try{return new URL(o).host}catch{return o}})(),a=`${t==="press"?"Submit":"Press"} "${r||"this control"}" on ${i} (${n==="purchase"?"spends money":n==="send"?"sends or posts something":"deletes or cancels something"})`;return{ok:!1,code:"approval_required",text:`This step needs the user's approval first: ${a}.`,approval:{summary:a,fingerprint:s}}}async function gl(e,t,r){let n=e.session.host.conn;await Promise.race([n.waitFor(o=>o.method==="Page.loadEventFired"&&o.sessionId===t.sessionId,r).catch(()=>{}),(e.sleep??YL)(r)])}async function QL(e){let t=Eb(e.args.url);if(!t.ok)return{ok:!1,code:"url_refused",text:`Can't open that address: ${t.reason}.`};let n=e.args.newTab===!0?await e.manager.newTab(e.session,"about:blank"):await e.manager.activeTab(e.session),o=e.session.host.conn,s=o.waitFor(l=>l.method==="Page.loadEventFired"&&l.sessionId===n.sessionId,ML).then(()=>!0,()=>!1),i=await o.send("Page.navigate",{url:t.url},{sessionId:n.sessionId});if(i.errorText)return{ok:!1,code:"failed",text:`The page did not load: ${i.errorText}.`};let a=await s;return er(e,n,a?void 0:"The page is still loading; this is what has rendered so far.")}async function Db(e,t,r){return vo(e.session.host.conn,t,KL(r))}async function tee(e){let t=Mp(e.args);if(!t)return bo(t);let r=await e.manager.activeTab(e.session),n=await Db(e,r,t);if(!n)return bo(t);if(n.facts.disabled)return{ok:!1,code:"failed",text:`[${t}] is disabled.`};let o=Op(n.facts);if(o){let a=XL(e,"click",n.facts.name,o,n.url);if(a)return a}let s=e.session.host.conn,i={x:n.x,y:n.y,button:"left",clickCount:1};return await s.send("Input.dispatchMouseEvent",{type:"mouseMoved",x:n.x,y:n.y},{sessionId:r.sessionId}),await s.send("Input.dispatchMouseEvent",{type:"mousePressed",...i},{sessionId:r.sessionId}),await s.send("Input.dispatchMouseEvent",{type:"mouseReleased",...i},{sessionId:r.sessionId}),await gl(e,r,1200),er(e,r,`Clicked [${t}] ${JSON.stringify(n.facts.name)}.`)}async function Lp(e,t,r){let n=zL[r],o=e.session.host.conn,s={key:r==="Space"?" ":r,code:n.code,windowsVirtualKeyCode:n.vk,nativeVirtualKeyCode:n.vk};await o.send("Input.dispatchKeyEvent",{type:"keyDown",...s,...n.text?{text:n.text}:{}},{sessionId:t.sessionId}),await o.send("Input.dispatchKeyEvent",{type:"keyUp",...s},{sessionId:t.sessionId})}async function Bp(e,t){let r=await vo(e.session.host.conn,t,jL());if(!r.facts)return null;let n=CL(r.facts);if(!n)return null;let o=r.facts.formSubmitLabel??r.facts.name;return XL(e,"press",o,n,r.url)}async function ree(e){let t=Mp(e.args);if(!t)return bo(t);let r=typeof e.args.text=="string"?e.args.text:"";if(!r)return{ok:!1,code:"invalid_request",text:"text is required."};if(r.length>Ib)return{ok:!1,code:"invalid_request",text:`text is limited to ${Ib} characters.`};let n=await e.manager.activeTab(e.session),o=await Db(e,n,t);if(!o)return bo(t);if(Tp(o.facts))return{ok:!1,code:"user_input_required",text:`[${t}] ${JSON.stringify(o.facts.name)} is a password or security-code field. Kynver never types secrets you supply. If this site has a saved login, use browser_fill_login with its handle (browser_list_logins); for a texted or emailed code use browser_request_code. Otherwise ask the user to type it themselves in the Kynver browser window on their computer, then continue when they say it's done (browser_snapshot to see the page). Never ask them to paste it into chat.`};let s=e.session.host.conn;if(!await vo(s,n,$L(t,e.args.clear!==!1)))return bo(t);await s.send("Input.insertText",{text:r},{sessionId:n.sessionId});let a=`Typed ${r.length} character${r.length===1?"":"s"} into [${t}] ${JSON.stringify(o.facts.name)}.`;if(e.args.submit===!0){let l=await Bp(e,n);return l?{...l,text:`${a} ${l.text}`}:(await Lp(e,n,"Enter"),await gl(e,n,1500),er(e,n,`${a} Pressed Enter.`))}return{ok:!0,text:a}}async function nee(e){let t=Mp(e.args);if(!t)return bo(t);let r=typeof e.args.option=="string"?e.args.option.trim():"";if(!r)return{ok:!1,code:"invalid_request",text:"option (visible label or value) is required."};let n=await e.manager.activeTab(e.session),o=await vo(e.session.host.conn,n,HL(t,r));return o.ok?{ok:!0,text:`Selected ${JSON.stringify(o.label)} in [${t}].`}:o.reason==="no_option"?{ok:!1,code:"not_found",text:`No option matching ${JSON.stringify(r)}. Options: ${(o.options??[]).join(" | ")}`}:{ok:!1,code:"invalid_request",text:`[${t}] is not a dropdown \u2014 click it and pick from the list instead.`}}async function oee(e){let t=typeof e.args.key=="string"?e.args.key.trim():"",r=qL.find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return{ok:!1,code:"invalid_request",text:`key must be one of: ${qL.join(", ")}.`};let n=await e.manager.activeTab(e.session);if(r==="Enter"){let o=await Bp(e,n);if(o)return o}return await Lp(e,n,r),await gl(e,n,r==="Enter"?1500:300),er(e,n,`Pressed ${r}.`)}async function see(e){let t=await e.manager.activeTab(e.session),r=Mp(e.args);if(r)return await Db(e,t,r)?{ok:!0,text:`Scrolled [${r}] into view.`}:bo(r);let n=e.args.direction==="up"?-1:1,o=Math.min(10,Math.max(1,Number(e.args.pages)||1)),s=await vo(e.session.host.conn,t,VL(n*o*700));return{ok:!0,text:`Scrolled ${n<0?"up":"down"}; now at ${s.y}px of ${Math.max(0,s.max)}px.`}}async function iee(e){let t=await e.manager.activeTab(e.session),r=e.session.host.conn;for(let n of[60,35,20]){let o=await r.send("Page.captureScreenshot",{format:"jpeg",quality:n,captureBeyondViewport:!1},{sessionId:t.sessionId}),s=typeof o.data=="string"?o.data:"";if(s&&s.length<=NL)return{ok:!0,text:"Screenshot of the visible part of the page.",imageBase64:s,imageMediaType:"image/jpeg"}}return{ok:!1,code:"failed",text:"The screenshot was too large to return; use browser_snapshot instead."}}async function aee(e){let t=await e.manager.activeTab(e.session),r=e.sleep??YL,n=typeof e.args.text=="string"&&e.args.text.trim()?e.args.text.trim().slice(0,200):null,o=typeof e.args.selector=="string"&&e.args.selector.trim()?e.args.selector.trim().slice(0,300):null,s=Math.min(Np,Math.max(0,Number(e.args.ms)||0));if(!n&&!o){let l=s||2e3;return await r(l),er(e,t,`Waited ${Math.round(l/100)/10}s.`)}let i=s||1e4,a=Date.now();for(;;){let l=await vo(e.session.host.conn,t,GL(n,o));if(l==="bad_selector")return{ok:!1,code:"invalid_request",text:"That CSS selector is not valid."};if(l===!0)return er(e,t,"Found it.");if(Date.now()-a>=i)return{ok:!1,code:"timeout",text:`Not found after ${Math.round(i/1e3)}s.`};await r(500)}}async function lee(e){let t=typeof e.args.op=="string"?e.args.op:"list",{session:r,manager:n}=e,o=r.host.conn,s=Number(e.args.tab),i=Number.isInteger(s)&&s>=1?r.tabs[s-1]:void 0;if(t==="new"){if(e.args.url!==void 0){let d=Eb(e.args.url);return d.ok?QL({...e,args:{url:d.url,newTab:!0}}):{ok:!1,code:"url_refused",text:`Can't open that address: ${d.reason}.`}}return await n.newTab(r,"about:blank"),{ok:!0,text:`Opened tab ${r.tabs.length}.`}}if(t==="switch"||t==="close")return i?t==="close"?(await n.closeTab(r,i.targetId),{ok:!0,text:`Closed tab ${s}.`}):(r.activeTargetId=i.targetId,await o.send("Target.activateTarget",{targetId:i.targetId}).catch(()=>{}),er(e,i,`Switched to tab ${s}.`)):{ok:!1,code:"invalid_request",text:"tab must be a tab number from browser_tabs list."};let a=(await o.send("Target.getTargets")).targetInfos??[],l=new Set(r.tabs.map(d=>d.targetId));for(let d of a)d.type==="page"&&d.openerId&&l.has(d.openerId)&&!l.has(d.targetId)&&(await n.adoptTarget(r,d.targetId).catch(()=>{}),l.add(d.targetId));let c=new Map(a.map(d=>[d.targetId,d])),u=r.tabs.map((d,f)=>{let m=c.get(d.targetId),g=d.targetId===r.activeTargetId?" (active)":"";return`${f+1}. ${m?.title||"(untitled)"} \u2014 ${m?.url??"?"}${g}`});return{ok:!0,text:u.length?`Tabs:
430
+ ${o}`):o,url:n.url,title:n.title}}function sf(e){let t=typeof e.ref=="string"?e.ref.trim():"";return/^e\d{1,6}$/.test(t)?t:null}function AU(e,t,r,n,o){let s=oU([sU(o),t,r.toLowerCase(),n]);if(e.approvedFingerprint&&e.approvedFingerprint===s)return null;let i=(()=>{try{return new URL(o).host}catch{return o}})(),a=`${t==="press"?"Submit":"Press"} "${r||"this control"}" on ${i} (${n==="purchase"?"spends money":n==="send"?"sends or posts something":"deletes or cancels something"})`;return{ok:!1,code:"approval_required",text:`This step needs the user's approval first: ${a}.`,approval:{summary:a,fingerprint:s}}}async function Il(e,t,r){let n=e.session.host.conn;await Promise.race([n.waitFor(o=>o.method==="Page.loadEventFired"&&o.sessionId===t.sessionId,r).catch(()=>{}),(e.sleep??CU)(r)])}async function IU(e){let t=yv(e.args.url);if(!t.ok)return{ok:!1,code:"url_refused",text:`Can't open that address: ${t.reason}.`};let n=e.args.newTab===!0?await e.manager.newTab(e.session,"about:blank"):await e.manager.activeTab(e.session),o=e.session.host.conn,s=o.waitFor(l=>l.method==="Page.loadEventFired"&&l.sessionId===n.sessionId,pU).then(()=>!0,()=>!1),i=await o.send("Page.navigate",{url:t.url},{sessionId:n.sessionId});if(i.errorText)return{ok:!1,code:"failed",text:`The page did not load: ${i.errorText}.`};let a=await s;return rr(e,n,a?void 0:"The page is still loading; this is what has rendered so far.")}async function _v(e,t,r){return So(e.session.host.conn,t,kU(r))}async function Jte(e){let t=sf(e.args);if(!t)return wo(t);let r=await e.manager.activeTab(e.session),n=await _v(e,r,t);if(!n)return wo(t);if(n.facts.disabled)return{ok:!1,code:"failed",text:`[${t}] is disabled.`};let o=tf(n.facts);if(o){let a=AU(e,"click",n.facts.name,o,n.url);if(a)return a}let s=e.session.host.conn,i={x:n.x,y:n.y,button:"left",clickCount:1};return await s.send("Input.dispatchMouseEvent",{type:"mouseMoved",x:n.x,y:n.y},{sessionId:r.sessionId}),await s.send("Input.dispatchMouseEvent",{type:"mousePressed",...i},{sessionId:r.sessionId}),await s.send("Input.dispatchMouseEvent",{type:"mouseReleased",...i},{sessionId:r.sessionId}),await Il(e,r,1200),rr(e,r,`Clicked [${t}] ${JSON.stringify(n.facts.name)}.`)}async function af(e,t,r){let n=EU[r],o=e.session.host.conn,s={key:r==="Space"?" ":r,code:n.code,windowsVirtualKeyCode:n.vk,nativeVirtualKeyCode:n.vk};await o.send("Input.dispatchKeyEvent",{type:"keyDown",...s,...n.text?{text:n.text}:{}},{sessionId:t.sessionId}),await o.send("Input.dispatchKeyEvent",{type:"keyUp",...s},{sessionId:t.sessionId})}async function lf(e,t){let r=await So(e.session.host.conn,t,RU());if(!r.facts)return null;let n=nU(r.facts);if(!n)return null;let o=r.facts.formSubmitLabel??r.facts.name;return AU(e,"press",o,n,r.url)}async function qte(e){let t=sf(e.args);if(!t)return wo(t);let r=typeof e.args.text=="string"?e.args.text:"";if(!r)return{ok:!1,code:"invalid_request",text:"text is required."};if(r.length>vv)return{ok:!1,code:"invalid_request",text:`text is limited to ${vv} characters.`};let n=await e.manager.activeTab(e.session),o=await _v(e,n,t);if(!o)return wo(t);if(rf(o.facts))return{ok:!1,code:"user_input_required",text:`[${t}] ${JSON.stringify(o.facts.name)} is a password or security-code field. Kynver never types secrets you supply. If this site has a saved login, use browser_fill_login with its handle (browser_list_logins); for a texted or emailed code use browser_request_code. Otherwise ask the user to type it themselves in the Kynver browser window on their computer, then continue when they say it's done (browser_snapshot to see the page). Never ask them to paste it into chat.`};let s=e.session.host.conn;if(!await So(s,n,bU(t,e.args.clear!==!1)))return wo(t);await s.send("Input.insertText",{text:r},{sessionId:n.sessionId});let a=`Typed ${r.length} character${r.length===1?"":"s"} into [${t}] ${JSON.stringify(o.facts.name)}.`;if(e.args.submit===!0){let l=await lf(e,n);return l?{...l,text:`${a} ${l.text}`}:(await af(e,n,"Enter"),await Il(e,n,1500),rr(e,n,`${a} Pressed Enter.`))}return{ok:!0,text:a}}async function Yte(e){let t=sf(e.args);if(!t)return wo(t);let r=typeof e.args.option=="string"?e.args.option.trim():"";if(!r)return{ok:!1,code:"invalid_request",text:"option (visible label or value) is required."};let n=await e.manager.activeTab(e.session),o=await So(e.session.host.conn,n,vU(t,r));return o.ok?{ok:!0,text:`Selected ${JSON.stringify(o.label)} in [${t}].`}:o.reason==="no_option"?{ok:!1,code:"not_found",text:`No option matching ${JSON.stringify(r)}. Options: ${(o.options??[]).join(" | ")}`}:{ok:!1,code:"invalid_request",text:`[${t}] is not a dropdown \u2014 click it and pick from the list instead.`}}async function zte(e){let t=typeof e.args.key=="string"?e.args.key.trim():"",r=xU.find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return{ok:!1,code:"invalid_request",text:`key must be one of: ${xU.join(", ")}.`};let n=await e.manager.activeTab(e.session);if(r==="Enter"){let o=await lf(e,n);if(o)return o}return await af(e,n,r),await Il(e,n,r==="Enter"?1500:300),rr(e,n,`Pressed ${r}.`)}async function Xte(e){let t=await e.manager.activeTab(e.session),r=sf(e.args);if(r)return await _v(e,t,r)?{ok:!0,text:`Scrolled [${r}] into view.`}:wo(r);let n=e.args.direction==="up"?-1:1,o=Math.min(10,Math.max(1,Number(e.args.pages)||1)),s=await So(e.session.host.conn,t,wU(n*o*700));return{ok:!0,text:`Scrolled ${n<0?"up":"down"}; now at ${s.y}px of ${Math.max(0,s.max)}px.`}}async function Qte(e){let t=await e.manager.activeTab(e.session),r=e.session.host.conn;for(let n of[60,35,20]){let o=await r.send("Page.captureScreenshot",{format:"jpeg",quality:n,captureBeyondViewport:!1},{sessionId:t.sessionId}),s=typeof o.data=="string"?o.data:"";if(s&&s.length<=uU)return{ok:!0,text:"Screenshot of the visible part of the page.",imageBase64:s,imageMediaType:"image/jpeg"}}return{ok:!1,code:"failed",text:"The screenshot was too large to return; use browser_snapshot instead."}}async function Zte(e){let t=await e.manager.activeTab(e.session),r=e.sleep??CU,n=typeof e.args.text=="string"&&e.args.text.trim()?e.args.text.trim().slice(0,200):null,o=typeof e.args.selector=="string"&&e.args.selector.trim()?e.args.selector.trim().slice(0,300):null,s=Math.min(nf,Math.max(0,Number(e.args.ms)||0));if(!n&&!o){let l=s||2e3;return await r(l),rr(e,t,`Waited ${Math.round(l/100)/10}s.`)}let i=s||1e4,a=Date.now();for(;;){let l=await So(e.session.host.conn,t,SU(n,o));if(l==="bad_selector")return{ok:!1,code:"invalid_request",text:"That CSS selector is not valid."};if(l===!0)return rr(e,t,"Found it.");if(Date.now()-a>=i)return{ok:!1,code:"timeout",text:`Not found after ${Math.round(i/1e3)}s.`};await r(500)}}async function ere(e){let t=typeof e.args.op=="string"?e.args.op:"list",{session:r,manager:n}=e,o=r.host.conn,s=Number(e.args.tab),i=Number.isInteger(s)&&s>=1?r.tabs[s-1]:void 0;if(t==="new"){if(e.args.url!==void 0){let d=yv(e.args.url);return d.ok?IU({...e,args:{url:d.url,newTab:!0}}):{ok:!1,code:"url_refused",text:`Can't open that address: ${d.reason}.`}}return await n.newTab(r,"about:blank"),{ok:!0,text:`Opened tab ${r.tabs.length}.`}}if(t==="switch"||t==="close")return i?t==="close"?(await n.closeTab(r,i.targetId),{ok:!0,text:`Closed tab ${s}.`}):(r.activeTargetId=i.targetId,await o.send("Target.activateTarget",{targetId:i.targetId}).catch(()=>{}),rr(e,i,`Switched to tab ${s}.`)):{ok:!1,code:"invalid_request",text:"tab must be a tab number from browser_tabs list."};let a=(await o.send("Target.getTargets")).targetInfos??[],l=new Set(r.tabs.map(d=>d.targetId));for(let d of a)d.type==="page"&&d.openerId&&l.has(d.openerId)&&!l.has(d.targetId)&&(await n.adoptTarget(r,d.targetId).catch(()=>{}),l.add(d.targetId));let c=new Map(a.map(d=>[d.targetId,d])),u=r.tabs.map((d,f)=>{let m=c.get(d.targetId),g=d.targetId===r.activeTargetId?" (active)":"";return`${f+1}. ${m?.title||"(untitled)"} \u2014 ${m?.url??"?"}${g}`});return{ok:!0,text:u.length?`Tabs:
403
431
  ${u.join(`
404
- `)}`:"No tabs open."}}async function ZL(e,t){switch(e){case"open":return QL(t);case"snapshot":return er(t,await t.manager.activeTab(t.session));case"click":return tee(t);case"type":return ree(t);case"select":return nee(t);case"press":return oee(t);case"scroll":return see(t);case"screenshot":return iee(t);case"wait":return aee(t);case"tabs":return lee(t);case"close":return await t.manager.close(t.session.conversationId),{ok:!0,text:"Closed the browser for this conversation."}}}var YL,zL,qL,bo,Mb=p(()=>{"use strict";Ab();Tb();JL();ri();YL=e=>new Promise(t=>setTimeout(t,e)),zL={Enter:{code:"Enter",vk:13,text:"\r"},Tab:{code:"Tab",vk:9},Escape:{code:"Escape",vk:27},Backspace:{code:"Backspace",vk:8},Delete:{code:"Delete",vk:46},ArrowUp:{code:"ArrowUp",vk:38},ArrowDown:{code:"ArrowDown",vk:40},ArrowLeft:{code:"ArrowLeft",vk:37},ArrowRight:{code:"ArrowRight",vk:39},PageUp:{code:"PageUp",vk:33},PageDown:{code:"PageDown",vk:34},Home:{code:"Home",vk:36},End:{code:"End",vk:35},Space:{code:"Space",vk:32,text:" "}},qL=Object.keys(zL);bo=e=>({ok:!1,code:e?"not_found":"invalid_request",text:e?`Element [${e}] is no longer on the page. Call browser_snapshot to get fresh refs.`:'A ref like "e12" from the latest browser_snapshot is required.'})});var Lb,Bb,Wb,eB,tB=p(()=>{"use strict";Lb=String.raw`
432
+ `)}`:"No tabs open."}}async function PU(e,t){switch(e){case"open":return IU(t);case"snapshot":return rr(t,await t.manager.activeTab(t.session));case"click":return Jte(t);case"type":return qte(t);case"select":return Yte(t);case"press":return zte(t);case"scroll":return Xte(t);case"screenshot":return Qte(t);case"wait":return Zte(t);case"tabs":return ere(t);case"close":return await t.manager.close(t.session.conversationId),{ok:!0,text:"Closed the browser for this conversation."}}}var CU,EU,xU,wo,xv=p(()=>{"use strict";kv();wv();_U();ai();CU=e=>new Promise(t=>setTimeout(t,e)),EU={Enter:{code:"Enter",vk:13,text:"\r"},Tab:{code:"Tab",vk:9},Escape:{code:"Escape",vk:27},Backspace:{code:"Backspace",vk:8},Delete:{code:"Delete",vk:46},ArrowUp:{code:"ArrowUp",vk:38},ArrowDown:{code:"ArrowDown",vk:40},ArrowLeft:{code:"ArrowLeft",vk:37},ArrowRight:{code:"ArrowRight",vk:39},PageUp:{code:"PageUp",vk:33},PageDown:{code:"PageDown",vk:34},Home:{code:"Home",vk:36},End:{code:"End",vk:35},Space:{code:"Space",vk:32,text:" "}},xU=Object.keys(EU);wo=e=>({ok:!1,code:e?"not_found":"invalid_request",text:e?`Element [${e}] is no longer on the page. Call browser_snapshot to get fresh refs.`:'A ref like "e12" from the latest browser_snapshot is required.'})});var Cv,Ev,Av,OU,TU=p(()=>{"use strict";Cv=String.raw`
405
433
  const __vis = (el) => {
406
434
  const r = el.getBoundingClientRect();
407
435
  if (r.width <= 0 || r.height <= 0) return false;
@@ -452,7 +480,7 @@ ${u.join(`
452
480
  return null;
453
481
  };
454
482
  const __hasFrames = () => document.querySelectorAll("iframe,frame").length > 0;
455
- `,Bb=`function (expectedOrigin, refs) {${Lb}
483
+ `,Ev=`function (expectedOrigin, refs) {${Cv}
456
484
  const g = __guard(expectedOrigin);
457
485
  if (g) return { error: g, origin: location.origin };
458
486
  const f = __find(refs);
@@ -464,7 +492,7 @@ ${u.join(`
464
492
  code: !!f.code,
465
493
  hasFrames: __hasFrames(),
466
494
  };
467
- }`,Wb=`function (expectedOrigin, refs, values) {${Lb}
495
+ }`,Av=`function (expectedOrigin, refs, values) {${Cv}
468
496
  const g = __guard(expectedOrigin);
469
497
  if (g) return { error: g, origin: location.origin };
470
498
  const f = __find(refs);
@@ -490,7 +518,7 @@ ${u.join(`
490
518
  const last = filled.length ? (filled[filled.length - 1] === "code" ? f.code : filled[filled.length - 1] === "password" ? f.password : f.username) : null;
491
519
  if (last) last.focus();
492
520
  return { origin: location.origin, filled };
493
- }`,eB=`function (expectedOrigin, refs) {${Lb}
521
+ }`,OU=`function (expectedOrigin, refs) {${Cv}
494
522
  const g = __guard(expectedOrigin);
495
523
  if (g) return { error: g, origin: location.origin };
496
524
  const f = __find(refs);
@@ -500,29 +528,12 @@ ${u.join(`
500
528
  username: f.username ? String(f.username.value || "") : null,
501
529
  password: f.password ? String(f.password.value || "") : null,
502
530
  };
503
- }`});function cee(e){let t=typeof e.handle=="string"?e.handle.trim():"";return/^lg_[a-z0-9]{6,20}$/.test(t)?t:null}function Fb(e){let t={};for(let r of["usernameRef","passwordRef","codeRef"]){let n=typeof e[r]=="string"?e[r].trim():"";/^e\d{1,6}$/.test(n)&&(t[r]=n)}return t}function nB(e){return`${JSON.stringify(e.label)} (${e.username}) for ${e.origin}`}function Up(e){return e.siteLogins??Pt()}async function Wp(e,t){try{let r=await e.session.host.conn.send("Target.getTargetInfo",{targetId:t.targetId});return typeof r.targetInfo?.url=="string"?r.targetInfo.url:null}catch{return null}}async function hl(e,t,r,n){let o=e.session.host.conn,i=(await o.send("Runtime.evaluate",{expression:"globalThis",returnByValue:!1},{sessionId:t.sessionId})).result?.objectId;if(!i)throw new Error("the page is not ready");try{let a=await o.send("Runtime.callFunctionOn",{functionDeclaration:r,objectId:i,arguments:n.map(l=>({value:l})),returnByValue:!0},{sessionId:t.sessionId,timeoutMs:1e4});if(a.exceptionDetails)throw new Error("page script failed");return a.result?.value}catch{throw new Error("the page changed while Kynver was working on it")}finally{o.send("Runtime.releaseObject",{objectId:i},{sessionId:t.sessionId}).catch(()=>{})}}function le(e,t,r={}){return{ok:!1,code:e,text:t,...r}}function Kb(e,t,r=Pt()){let n=t?.trim();if(!n)return le("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");let o=r.store(n);if(!o.exists())return{ok:!0,text:rB};let s;try{s=o.list()}catch(c){return le("failed",c instanceof J?`Saved logins can't be read: ${c.message}.`:"Saved logins can't be read.")}let i=typeof e.origin=="string"?e.origin.trim().toLowerCase():"";i&&(s=s.filter(c=>c.origin.toLowerCase().includes(i)||c.label.toLowerCase().includes(i)));let a=r.isUnlocked(n)?"unlocked \u2014 ready to fill":`locked. ${Ub}`;if(s.length===0)return{ok:!0,text:`No saved logins${i?` matching ${JSON.stringify(i)}`:""}. Saved logins are ${a}`};let l=s.map(c=>`${c.handle} \u2014 ${c.label} \u2014 ${c.username} \u2014 ${c.origin}${c.hasTotp?" (authenticator saved)":""}`);return{ok:!0,text:`Saved logins (${a}):
531
+ }`});function tre(e){let t=typeof e.handle=="string"?e.handle.trim():"";return/^lg_[a-z0-9]{6,20}$/.test(t)?t:null}function Pv(e){let t={};for(let r of["usernameRef","passwordRef","codeRef"]){let n=typeof e[r]=="string"?e[r].trim():"";/^e\d{1,6}$/.test(n)&&(t[r]=n)}return t}function DU(e){return`${JSON.stringify(e.label)} (${e.username}) for ${e.origin}`}function uf(e){return e.siteLogins??Pt()}async function cf(e,t){try{let r=await e.session.host.conn.send("Target.getTargetInfo",{targetId:t.targetId});return typeof r.targetInfo?.url=="string"?r.targetInfo.url:null}catch{return null}}async function Pl(e,t,r,n){let o=e.session.host.conn,i=(await o.send("Runtime.evaluate",{expression:"globalThis",returnByValue:!1},{sessionId:t.sessionId})).result?.objectId;if(!i)throw new Error("the page is not ready");try{let a=await o.send("Runtime.callFunctionOn",{functionDeclaration:r,objectId:i,arguments:n.map(l=>({value:l})),returnByValue:!0},{sessionId:t.sessionId,timeoutMs:1e4});if(a.exceptionDetails)throw new Error("page script failed");return a.result?.value}catch{throw new Error("the page changed while Kynver was working on it")}finally{o.send("Runtime.releaseObject",{objectId:i},{sessionId:t.sessionId}).catch(()=>{})}}function ce(e,t,r={}){return{ok:!1,code:e,text:t,...r}}function Ov(e,t,r=Pt()){let n=t?.trim();if(!n)return ce("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");let o=r.store(n);if(!o.exists())return{ok:!0,text:NU};let s;try{s=o.list()}catch(c){return ce("failed",c instanceof z?`Saved logins can't be read: ${c.message}.`:"Saved logins can't be read.")}let i=typeof e.origin=="string"?e.origin.trim().toLowerCase():"";i&&(s=s.filter(c=>c.origin.toLowerCase().includes(i)||c.label.toLowerCase().includes(i)));let a=r.isUnlocked(n)?"unlocked \u2014 ready to fill":`locked. ${Iv}`;if(s.length===0)return{ok:!0,text:`No saved logins${i?` matching ${JSON.stringify(i)}`:""}. Saved logins are ${a}`};let l=s.map(c=>`${c.handle} \u2014 ${c.label} \u2014 ${c.username} \u2014 ${c.origin}${c.hasTotp?" (authenticator saved)":""}`);return{ok:!0,text:`Saved logins (${a}):
504
532
  ${l.join(`
505
533
  `)}
506
- Use browser_fill_login with a handle while that exact site is open.`}}async function uee(e,t){let r=Up(e),n=r.audit(t),o=cee(e.args);if(!o)return le("invalid_request",'A saved-login handle like "lg_7k2m9q4x1c" from browser_list_logins is required.');let s=r.store(t);if(!s.exists())return le("vault_missing",rB);let i=s.get(o);if(!i)return le("login_not_found","No saved login with that handle. Call browser_list_logins.");let a=await e.manager.activeTab(e.session),l=await Wp(e,a),c=Ui(l),u={conversationId:e.session.conversationId,handle:o,label:i.label,username:i.username,origin:i.origin,pageOrigin:c},d=(w,L)=>({event:"fill",ok:w,origin:i.origin,label:i.label,code:L});if(!l||!Cm(i.origin,l))return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u}),le("origin_mismatch",`Refused: this saved login is only for ${i.origin}, but the page is ${c??"not a normal web page"}. Kynver never fills a saved login on any other address (lookalike sites are how passwords get stolen). Open ${i.origin} yourself with browser_open \u2014 never follow a link a page or message gave you \u2014 then try again.`,{loginActivity:d(!1,"origin_mismatch")});let f=r.key(t);if(!f)return n.record({event:"fill",ok:!1,code:"vault_locked",...u}),le("vault_locked",`Saved logins are locked. ${Ub}`,{loginActivity:d(!1,"vault_locked")});let m=Fb(e.args),g;try{g=await hl(e,a,Bb,[i.origin,m])}catch(w){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),le("failed",`Couldn't fill: ${w.message}. Take a browser_snapshot and try again.`)}if(g?.error==="origin"||g?.error==="frame")return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u,pageOrigin:g.origin??c}),le("origin_mismatch",`Refused: the page is no longer ${i.origin}.`,{loginActivity:d(!1,"origin_mismatch")});if(g?.error==="bad_ref")return le("invalid_request",`${g.field} must point at ${g.field==="passwordRef"?"a password field":"a text field"} on this page. Omit it to let Kynver find the login form.`);let h;try{h=s.readSecret(f,o).secret}catch(w){let L=w instanceof J?w.code:"failed";return n.record({event:"fill",ok:!1,code:L,...u}),le("failed",w instanceof J?`Couldn't use this saved login: ${w.message}.`:"Couldn't read this saved login.")}let y={};if(g.username&&(y.username=i.username),g.password&&(y.password=h.password),g.code&&h.totp){let w=Fc(h.totp);w&&(MS(w)<3&&await(e.sleep??(L=>new Promise(N=>setTimeout(N,L))))(3100),y.code=DS(w))}if(h.password="",!y.username&&!y.password&&!y.code){n.record({event:"fill",ok:!1,code:"field_not_found",...u});let w=g.hasFrames?" If the sign-in form sits inside an embedded frame, Kynver won't fill it there \u2014 open the site's own sign-in page instead.":"",L=g.code&&!i.hasTotp?" The page wants a one-time code and no authenticator key is saved: use browser_request_code so the user types it on their computer.":"";return le("field_not_found",`No sign-in field to fill on this page.${L}${w} Take a browser_snapshot to see where you are.`,{loginActivity:d(!1,"field_not_found")})}let v;try{v=await hl(e,a,Wb,[i.origin,m,y])}catch(w){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),le("failed",`Couldn't fill: ${w.message}. Take a browser_snapshot and try again.`)}finally{y.password="",y.code=""}if(v?.error){let w=v.error==="origin"||v.error==="frame"?"origin_mismatch":"failed";return n.record({event:"fill",ok:!1,code:w,...u,pageOrigin:v.origin??c}),le(w==="origin_mismatch"?"origin_mismatch":"failed",`Refused: the page changed to ${v.origin??"another address"} before the fill.`,{loginActivity:d(!1,w)})}let k=v?.filled??[];s.touch(o),n.record({event:"fill",ok:!0,code:null,...u,fields:k});let b=k.map(w=>w==="code"?"authenticator code":w).join(" + "),_=g.code&&!i.hasTotp&&!k.includes("code"),S=`Filled the ${b} for ${nB(i)}.`+(_?" The page also wants a one-time code: use browser_request_code so the user types it on their computer.":""),R={loginActivity:d(!0,null)};if(e.args.submit===!0){let w=await Bp(e,a);return w?{...w,...R,text:`${S} ${w.text}`}:(await Lp(e,a,"Enter"),await gl(e,a,2e3),{...await er(e,a,`${S} Pressed Enter.`),...R})}return{ok:!0,text:`${S} Continue with browser_click on the sign-in button (or submit:true next time).`,...R}}async function dee(e,t){let r=Up(e),n=r.store(t);if(!n.exists())return le("vault_missing","Saved logins aren't set up on this computer yet. Ask the user to run `kynver logins setup` there first.");let o=r.key(t);if(!o)return le("vault_locked",`Saved logins are locked. ${Ub}`);let s=await e.manager.activeTab(e.session),i=await Wp(e,s),a=Ui(i);if(!a||!a.startsWith("https://"))return le("url_refused","Only logins typed on an https:// site can be saved.");let l;try{l=await hl(e,s,eB,[a,Fb(e.args)])}catch(m){return le("failed",`Couldn't read the sign-in form: ${m.message}.`)}if(l?.error)return le("failed","The page changed before the login could be saved. Try again.");let c=l?.password??"",u=typeof e.args.username=="string"?e.args.username.trim():"",d=(l?.username??"").trim()||u;if(!c)return le("field_not_found","There's no typed password on this page to save. Ask the user to type their username and password into the sign-in form (without pressing Log in yet), then call browser_save_login again.");if(!d)return le("field_not_found","No username on this page \u2014 pass the username (it isn't secret) with browser_save_login.");let f=typeof e.args.label=="string"&&e.args.label.trim()?e.args.label.trim().slice(0,80):`${new URL(a).hostname.replace(/^www\./,"")} \u2013 ${d}`.slice(0,80);try{let m=n.list().find(h=>h.origin===a&&h.username===d),g=m?n.replace(o,m.handle,{origin:a,label:m.label,username:d,password:c}):n.add(o,{origin:a,label:f,username:d,password:c});return r.audit(t).record({event:m?"replace":"save",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,conversationId:e.session.conversationId}),{ok:!0,text:`${m?"Updated":"Saved"} the login ${nB(g)} as ${g.handle}. It is stored encrypted on this computer only.`,loginActivity:{event:"save",ok:!0,origin:g.origin,label:g.label}}}catch(m){return le("failed",m instanceof J?`Couldn't save: ${m.message}.`:"Couldn't save this login.")}}async function pee(e,t){let r=Up(e),n=await e.manager.activeTab(e.session),o=await Wp(e,n),s=Ui(o);if(!s)return le("url_refused","Open the site's verification page first.");let i=Fb(e.args),a;try{a=await hl(e,n,Bb,[s,i])}catch(d){return le("failed",`Couldn't read the page: ${d.message}.`)}if(a?.error==="bad_ref")return le("invalid_request","codeRef must point at a text field on this page.");if(a?.error||!a?.code)return le("field_not_found","No verification-code field on this page. Take a browser_snapshot and pass its ref as codeRef.");let l=typeof e.args.prompt=="string"&&e.args.prompt.trim()?e.args.prompt.trim().slice(0,120):`Verification code for ${new URL(s).hostname}`,c=e.session.conversationId,u=r.addCodeRequest({agentOsId:t,conversationId:c,origin:s,prompt:l,fill:async d=>{let f=await Wp(e,n);if(!Cm(s,f))return{ok:!1,text:`The page is no longer ${s}, so the code was not typed.`};try{let m=await hl(e,n,Wb,[s,i,{code:d}]);return m?.error||!m?.filled?.includes("code")?{ok:!1,text:"The code field is gone, so the code was not typed."}:{ok:!0,text:`Typed the code into ${s}.`}}catch{return{ok:!1,text:"The page changed, so the code was not typed."}}}});return{ok:!0,text:`Waiting for the user to enter the code (request ${u.id}, expires in ${Math.round(u.expiresInSec/60)} min). Tell them to enter it on their computer \u2014 in the Kynver desktop app, or by running \`kynver logins code\` in a terminal. Kynver types it straight into this page; never ask for the code in chat. After they say it's done, call browser_snapshot.`,codeRequest:u,loginActivity:{event:"code_request",ok:!0,origin:s}}}async function oB(e,t){let r=t.agentOsId?.trim();if(!r)return le("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");switch(e){case"list_logins":return Kb(t.args,r,Up(t));case"fill_login":return uee(t,r);case"save_login":return dee(t,r);case"request_code":return pee(t,r)}}var Ub,rB,sB=p(()=>{"use strict";Mb();tB();Em();Ki();Nn();Am();Ub="Ask the user to unlock their saved logins on their computer (run `kynver logins unlock` in a terminal, or open the Kynver desktop app). Never ask for the passphrase or a password in chat.",rB="No saved logins on this computer yet. The user can add one on their computer with `kynver logins add` (or the Kynver desktop app), or sign in once in the browser window and let you save it with browser_save_login."});var Fp,iB=p(()=>{"use strict";ri();Fp=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.idleMs=t.idleMs??LL}deps;hosts=new Map;sessions=new Map;now;idleMs;has(t){return this.sessions.has(t)}get sessionCount(){return this.sessions.size}peek(t){return this.sessions.get(t)??null}async getOrCreate(t,r){let n=this.sessions.get(t);if(n&&n.mode===r&&!n.host.conn.closed)return this.touch(n),n;n&&await this.close(t);let o=await this.getHost(r),s={conversationId:t,mode:r,host:o,tabs:[],activeTargetId:null,actionTimes:[],idleTimer:null};return this.sessions.set(t,s),this.touch(s),s}recordAction(t){let r=this.now();return t.actionTimes=t.actionTimes.filter(n=>r-n<BL),t.actionTimes.length>=WL?!1:(t.actionTimes.push(r),this.touch(t),!0)}touch(t){t.idleTimer&&clearTimeout(t.idleTimer),t.idleTimer=setTimeout(()=>{this.close(t.conversationId)},this.idleMs),t.idleTimer.unref?.()}async activeTab(t){let r=t.tabs.find(n=>n.targetId===t.activeTargetId);return r||(t.tabs.length>0?(t.activeTargetId=t.tabs[t.tabs.length-1].targetId,t.tabs[t.tabs.length-1]):this.newTab(t,"about:blank"))}async newTab(t,r){if(t.tabs.length>=Ob)throw new Error(`tab limit reached (${Ob}) \u2014 close a tab first`);let{conn:n}=t.host,o=await n.send("Target.createTarget",{url:r}),s=String(o.targetId??"");return this.adoptTarget(t,s)}async adoptTarget(t,r){let{conn:n}=t.host,o=await n.send("Target.attachToTarget",{targetId:r,flatten:!0}),s=String(o.sessionId??"");await n.send("Page.enable",{},{sessionId:s}),await n.send("Runtime.enable",{},{sessionId:s});let i={targetId:r,sessionId:s};return t.tabs.push(i),t.activeTargetId=r,i}async closeTab(t,r){t.tabs=t.tabs.filter(n=>n.targetId!==r),t.activeTargetId===r&&(t.activeTargetId=t.tabs[t.tabs.length-1]?.targetId??null),await t.host.conn.send("Target.closeTarget",{targetId:r}).catch(()=>{})}async close(t){let r=this.sessions.get(t);if(!r)return!1;this.sessions.delete(t),r.idleTimer&&clearTimeout(r.idleTimer);for(let o of[...r.tabs])await r.host.conn.send("Target.closeTarget",{targetId:o.targetId}).catch(()=>{});return r.tabs=[],[...this.sessions.values()].some(o=>o.host===r.host)||await this.releaseHost(r.mode,r.host),!0}async closeAll(){for(let t of[...this.sessions.keys()])await this.close(t)}async getHost(t){let r=this.hosts.get(t);if(r){let o=await r.catch(()=>null);if(o&&!o.conn.closed)return o;this.hosts.delete(t)}let n=this.deps.connectHost(t);this.hosts.set(t,n);try{let o=await n;return o.conn.onClose(()=>{this.hosts.get(t)===n&&this.hosts.delete(t)}),o}catch(o){throw this.hosts.delete(t),o}}async releaseHost(t,r){if(this.hosts.delete(t),t==="dedicated"){await r.conn.send("Browser.close",{},{timeoutMs:3e3}).catch(()=>{});try{r.child?.kill()}catch{}}r.conn.close()}}});var tr,fee,yl,aB=p(()=>{"use strict";tr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="CdpError"}code},fee=e=>new WebSocket(e),yl=class e{constructor(t){this.socket=t;t.addEventListener("message",n=>this.onMessage(n.data));let r=()=>this.markClosed();t.addEventListener("close",r),t.addEventListener("error",r)}socket;nextId=1;pending=new Map;listeners=new Set;closedFlag=!1;closeHandlers=new Set;static async connect(t,r={}){let n=(r.socketFactory??fee)(t);return await new Promise((o,s)=>{let i=setTimeout(()=>s(new tr("CDP connect timed out")),r.timeoutMs??1e4);n.addEventListener("open",()=>{clearTimeout(i),o()}),n.addEventListener("error",()=>{clearTimeout(i),s(new tr("CDP connect failed"))})}),new e(n)}static fromOpenSocket(t){return new e(t)}get closed(){return this.closedFlag}onClose(t){this.closeHandlers.add(t)}send(t,r={},n={}){if(this.closedFlag)return Promise.reject(new tr("browser connection closed"));let o=this.nextId++,s={id:o,method:t,params:r};return n.sessionId&&(s.sessionId=n.sessionId),new Promise((i,a)=>{let l=setTimeout(()=>{this.pending.delete(o),a(new tr(`${t} timed out`))},n.timeoutMs??3e4);this.pending.set(o,{resolve:i,reject:a,timer:l});try{this.socket.send(JSON.stringify(s))}catch(c){clearTimeout(l),this.pending.delete(o),a(new tr(c instanceof Error?c.message:String(c)))}})}on(t){return this.listeners.add(t),()=>this.listeners.delete(t)}waitFor(t,r){return new Promise((n,o)=>{let s=setTimeout(()=>{i(),o(new tr("timed out waiting for the page"))},r),i=this.on(a=>{t(a)&&(clearTimeout(s),i(),n(a))})})}close(){try{this.socket.close()}catch{}this.markClosed()}markClosed(){if(!this.closedFlag){this.closedFlag=!0;for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(new tr("browser connection closed"));this.pending.clear();for(let t of this.closeHandlers)t()}}onMessage(t){let r;try{r=JSON.parse(typeof t=="string"?t:String(t))}catch{return}if(typeof r.id=="number"){let n=this.pending.get(r.id);if(!n)return;this.pending.delete(r.id),clearTimeout(n.timer),r.error?n.reject(new tr(r.error.message??"CDP error",r.error.code)):n.resolve(r.result??{});return}if(typeof r.method=="string"){let n={method:r.method,params:r.params??{},...r.sessionId?{sessionId:r.sessionId}:{}};for(let o of[...this.listeners])o(n)}}}});function hee(){let e=ho(),t=e.state==="downloading"?` (${eM(e)})`:"";return`Setting up a browser on your computer \u2014 a one-time download of about ${QD} MB${t}. Tell the user it's being set up, wait about 30 seconds, then try the same step again.`}async function lB(e={}){let t=(e.resolve??(()=>go()))();if(t.executable)return t.executable;if(!(e.autoProvision??P().browserAutoProvision!==!1))throw new Mr("No browser is installed on this computer and automatic setup is turned off. The user can run `kynver browser install` on that computer, or install Google Chrome.","chrome_not_found");let n=(e.status??ho)(),o=(e.now??Date.now)();if(n.state==="failed"&&n.failedAt!==null&&o-n.failedAt<gee)throw new Mr(`Kynver couldn't download a browser for this computer just now (${n.error??"unknown error"}). The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found");let s=(e.provision??lp)(),i,a=new Promise(l=>{i=setTimeout(()=>l("pending"),e.waitMs??mee),i.unref?.()});try{let l=await Promise.race([s,a]);if(l==="pending")throw s.catch(()=>{}),new Mr(hee(),"browser_installing");return l.executable}catch(l){if(l instanceof Mr)throw l;let c=l instanceof zs?l.message:"Couldn't set up a browser on this computer.";throw new Mr(`${c} The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found")}finally{clearTimeout(i)}}var mee,gee,Mr,cB=p(()=>{"use strict";$();ol();cp();mee=2e4,gee=6e4,Mr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserEnsureError"}code}});import{spawn as yee}from"node:child_process";import{existsSync as HLe,mkdirSync as kee,readFileSync as bee,rmSync as vee}from"node:fs";import{homedir as Ree}from"node:os";import uB from"node:path";function See(e=process.env){return e.KYNVER_BROWSER_PROFILE_DIR?.trim()||uB.join(Ree(),".kynver","browser-profile")}function dB(e=process.env){return(e.KYNVER_BROWSER_CDP_URL?.trim()||P().browserCdpUrl?.trim()||wee).replace(/\/$/,"")}async function pB(e,t={}){let r=t.env??process.env,n=t.platform??process.platform,o=t.allowNoSandbox??P().browserAllowNoSandbox!==!1;if((t.asRoot??tM(n))&&o){let a=await Hb(e,r,n,t,!0);if("wsUrl"in a)return up("off_root"),console.error(`[kynver] browser: running as root, so Chrome started with --no-sandbox (sandbox unavailable on this host). ${JSON.stringify({event:"browser_sandbox_unavailable",reason:"root",fallback:"no-sandbox"})}`),a;throw $b(a.stderrTail)}let i=await Hb(e,r,n,t,!1);if("wsUrl"in i)return up("on"),i;if(n==="linux"&&o&&Jk(i.stderrTail)){let a=await Hb(e,r,n,t,!0);if("wsUrl"in a)return up("off_unavailable"),console.error(`[kynver] browser: Chrome's sandbox is unavailable on this host, so Chrome started with --no-sandbox (set browserAllowNoSandbox: false in ~/.kynver/config.json to refuse instead). ${JSON.stringify({event:"browser_sandbox_unavailable",reason:"unavailable",fallback:"no-sandbox"})}`),a;throw $b(a.stderrTail)}throw $b(i.stderrTail)}function $b(e){let t=rl(e);return t.length>0?new kl(t):Jk(e)?new Error("Chrome couldn't start its security sandbox on this computer, and running without it is turned off (browserAllowNoSandbox). Install Google Chrome system-wide, or allow it in ~/.kynver/config.json."):new Error("Chrome did not start on the Kynver browser profile. Close any Chrome window already using that profile and try again.")}async function Hb(e,t,r,n,o){let s=See(t);kee(s,{recursive:!0});let i=uB.join(s,"DevToolsActivePort");vee(i,{force:!0});let a=op(t,r),l=[`--user-data-dir=${s}`,"--remote-debugging-port=0","--remote-allow-origins=*","--no-first-run","--no-default-browser-check","--disable-features=Translate","--window-size=1280,900",...a?["--headless=new"]:[],...o?["--no-sandbox"]:[],"about:blank"],c=(n.spawnFn??yee)(e,l,{stdio:["ignore","ignore","pipe"],detached:!1});c.unref?.();let u="";c.stderr?.on("data",m=>{u=(u+String(m)).slice(-4e3)}),c.stderr?.unref?.();let d=n.readFile??(m=>bee(m,"utf8")),f=n.sleep??(m=>new Promise(g=>setTimeout(g,m)));for(let m=0;m<15e3;m+=200){try{let[g,h]=d(i).split(/\r?\n/);if(g?.trim()&&h?.trim())return{wsUrl:`ws://127.0.0.1:${g.trim()}${h.trim()}`,child:c}}catch{}if(c.exitCode!==null&&c.exitCode!==void 0)break;await f(200)}try{c.kill()}catch{}return await f(50),{stderrTail:u}}async function fB(e,t=fetch){let r=new AbortController,n=setTimeout(()=>r.abort(),3e3);try{let o=await t(`${e}/json/version`,{signal:r.signal});if(!o.ok)throw new Error(`HTTP ${o.status}`);let s=await o.json();if(typeof s.webSocketDebuggerUrl!="string")throw new Error("no webSocketDebuggerUrl");return s.webSocketDebuggerUrl}finally{clearTimeout(n)}}var wee,kl,mB=p(()=>{"use strict";$();fo();np();ol();qk();wee="http://127.0.0.1:9222";kl=class extends Error{constructor(r){super(`Chrome is missing system libraries: ${r.join(", ")}`);this.missingLibs=r;this.name="ChromeMissingLibsError"}missingLibs}});async function _ee(e){if(e==="attach"){let n=dB(),o;try{o=await fB(n)}catch{throw new ni(`No Chrome is listening for Kynver at ${n}. Start Chrome with --remote-debugging-port=9222 (and its own --user-data-dir), or switch this computer to the dedicated Kynver browser in Settings.`,"attach_unreachable")}return{conn:await yl.connect(o),child:null,mode:e}}let t;try{t=await lB()}catch(n){throw n instanceof Mr?new ni(n.message,n.code):n}let r;try{r=await pB(t)}catch(n){throw n instanceof kl?new ni(ND(n.missingLibs,WD()),"missing_libs"):n}return{conn:await yl.connect(r.wsUrl),child:r.child,mode:e}}function xee(){return Kp??=new Fp({connectHost:_ee}),Kp}async function gB(){Kp&&await Kp.closeAll().catch(()=>{})}function hB(){try{let e=P();e.browserEverEnabled!==!0&&We({...e,browserEverEnabled:!0})}catch{}}function pn(e,t){return{ok:!1,code:e,text:t}}function Cee(e){if(!e||typeof e!="object")return null;let t=e,r=t.policy;if(t.kind!=="browser"||!IL(t.action)||typeof t.conversationId!="string"||!t.conversationId.trim()||t.conversationId.length>200||!r||typeof r!="object"||typeof r.boxId!="string")return null;let n=r.mode==="attach"?"attach":"dedicated";return{kind:"browser",conversationId:t.conversationId.trim(),action:t.action,args:t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{},policy:{enabled:r.enabled===!0,mode:n,boxId:r.boxId},...typeof t.approvedFingerprint=="string"&&/^[0-9a-f]{8}$/.test(t.approvedFingerprint)?{approvedFingerprint:t.approvedFingerprint}:{}}}async function yB(e,t){let r=Cee(e);if(!r)return pn("invalid_request","Malformed browser request.");if(t.localDisabled)return pn("disabled","The browser is switched off on this computer (local setting browserDisabled).");if(!r.policy.enabled)return pn("disabled","The browser is turned off for this computer. The user can turn it on in Kynver \u2192 Computers.");if(r.policy.boxId!==t.boxId)return pn("wrong_box","This request reached a different computer than the one the browser is enabled on.");t.onEnabledTurn?.();let n=t.manager??xee();if(r.action==="list_logins")return Kb(r.args,t.agentOsId,t.siteLogins);if(r.action==="close")return{ok:!0,text:await n.close(r.conversationId)?"Closed the browser for this conversation.":"No browser was open for this conversation."};try{let o=await n.getOrCreate(r.conversationId,r.policy.mode);if(!n.recordAction(o))return pn("action_cap","Too many browser actions in a short time. Pause and summarize progress for the user.");let s=r.action==="wait"?Np+5e3:DL,i,a=new Promise(d=>{i=setTimeout(()=>d(pn("timeout",`The browser did not finish "${r.action}" within ${Math.round(s/1e3)}s.`)),s),i.unref?.()}),l={manager:n,session:o,args:r.args,approvedFingerprint:r.approvedFingerprint??null,sleep:t.sleep,agentOsId:t.agentOsId,siteLogins:t.siteLogins},c=r.action,u=await Promise.race([PL(c)?oB(c,l):ZL(c,l),a]).finally(()=>clearTimeout(i));return{...u,text:Dp(u.text)}}catch(o){if(o instanceof ni)return pn(o.code,o.message);let s=o instanceof Error?o.message:String(o);return pn("failed",`Browser action failed: ${s.slice(0,300)}`)}}var ni,Kp,jb=p(()=>{"use strict";Mb();sB();Tb();iB();aB();$();cB();np();fo();mB();ri();ni=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserSetupError"}code};Kp=null});async function kB(e,t,r={}){let n=r.fetchFn??fetch,o=i=>n(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t.turnId)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:i})}).catch(()=>{}),s=t.payload?.action;try{let i=await(r.execute??yB)(t.payload,{boxId:e.boxId,agentOsId:e.agentOsId,localDisabled:P().browserDisabled===!0,onEnabledTurn:hB});await o([{seq:0,kind:"final",message:i}]),console.error(JSON.stringify({event:"browser_turn_done",turnId:t.turnId,action:s,ok:i.ok,code:i.code??null}))}catch(i){await o([{seq:0,kind:"error",error:"browser_turn_crashed"}]),console.error(JSON.stringify({event:"browser_turn_error",turnId:t.turnId,action:s,error:i instanceof Error?i.message.slice(0,200):"unknown"}))}}var bB=p(()=>{"use strict";$();jb()});function wB(e){if(!e||typeof e!="object")return null;let t=e.turn;if(!t||typeof t!="object")return null;let r=t.turnId;return typeof r!="string"||!r?null:{turn:t}}function SB(e){if(!e)return!1;let t=e.name;if(t==="AbortError"||t==="TimeoutError")return!0;let r=e instanceof Error?e.message:String(e);return/\b(?:aborted|timed?\s*out|timeout|socket hang up|other side closed|ECONNRESET|UND_ERR_SOCKET)\b/i.test(r)}function RB(e){let t=e?.code;return typeof t=="string"?t:null}function _B(e){if(!e)return!1;if(e instanceof fn)return Eee.has(e.status);let t=RB(e)??RB(e.cause);if(t&&Aee.has(t))return!0;let r=e instanceof Error?e.message:String(e);return/\bHTTP 50[234]\b/.test(r)?!0:/\b(?:fetch failed|ECONNREFUSED|ENOTFOUND|EAI_AGAIN|EHOSTUNREACH|ENETUNREACH|connection refused)\b/i.test(r)}function Vb(e){return SB(e)?"aborted":_B(e)?"transient":"server"}function xB(e,t){let r=Vb(e);if(r==="aborted")return t<=Iee?0:Oee;if(r==="transient"){let n=Math.max(0,Math.min(t-1,vB.length-1));return vB[n]}return Pee}function CB(e,t){return e==="aborted"&&t<Tee?{event:"chat_claim_poll_retry",level:"info"}:{event:"chat_claim_error",level:"error"}}var fn,Eee,Aee,Pee,Iee,Oee,vB,$p,Tee,Gb=p(()=>{"use strict";fn=class extends Error{status;constructor(t){super(`claim failed: HTTP ${t}`),this.name="ClaimHttpError",this.status=t}},Eee=new Set([502,503,504]),Aee=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","EHOSTUNREACH","ENETUNREACH","ENETDOWN","UND_ERR_CONNECT_TIMEOUT"]),Pee=5e3,Iee=3,Oee=1e3,vB=[0,1e3,5e3];$p=class{counts={aborted:0,transient:0,server:0,auth:0,recovered:0};streakKind=null;streak=0;onError(t){let r=Vb(t);return this.bump(r),{kind:r,consecutive:this.streak,backoffMs:xB(t,this.streak)}}onAuthError(){this.bump("auth")}onSuccess(){this.streak>0&&(this.counts.recovered+=1),this.streakKind=null,this.streak=0}snapshot(){return{...this.counts}}bump(t){this.counts[t]+=1,this.streak=this.streakKind===t?this.streak+1:1,this.streakKind=t}},Tee=3});async function Ro(e,t=3,r=n=>new Promise(o=>setTimeout(o,n))){for(let n=0;n<t;n+=1){try{if(await e())return!0}catch{}n<t-1&&await r(200*(n+1))}return!1}var Jb=p(()=>{"use strict"});function EB(e,t,r={}){let n=r.env??process.env,{engine:o,access:s}=yo({provider:e,config:t,env:n});return{access:s.access,folders:s.folders.map(He),source:s.source==="website"?"local":s.source,engine:o,engineVersion:o==="none"?null:(r.version??Zd)(o,n),log:(r.summary??Ap)(),...o==="claude-code"?{claudeCode:{signedIn:(r.signedIn??ep)(n),steps:(r.stepSummary??gL)()}}:{}}}var AB=p(()=>{"use strict";at();Qa();vb();Cp();kb()});function Hp(e){let t=e.appendLog??(s=>{Za(s)}),r=e.now??(()=>new Date),n=0,o=(s,i)=>Bk({at:r().toISOString(),chat:e.chat,turnId:e.turnId,engine:i.engine,access:i.access.access,folder:i.access.workDir,...s});return{sink:((s,i)=>{let a=o(s,i);n+=1,t(a),e.send(a)}),attach(s,i,a){let l=o(s,i);n+=1,t(l),e.send({...l,toolUseId:a.toolUseId,...a.file?{file:a.file}:{}})},get steps(){return n}}}var qb=p(()=>{"use strict";tp()});import{readFileSync as Nee,statSync as Dee}from"node:fs";import PB from"node:path";function Bee(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let n=r;if(n.type!=="tool_use"||n.name!==Mee||typeof n.id!="string")continue;let o=n.input&&typeof n.input=="object"?n.input:{};t.push({toolUseId:n.id,rawPath:typeof o.path=="string"?o.path:""})}return t}function wo(e,t,r){return{step:{kind:"attach",path:e,ok:!1,reason:t,...r!==void 0?{outputBytes:r}:{}}}}function Wee(e,t,r={}){let n=r.stat??Dee,o=r.read??Nee,s=r.maxBytes??Lee,i=e.rawPath.trim();if(!i||i.includes("\0"))return wo(i,"invalid_path");let a=PB.resolve(t.workDir,Tl(i));if(t.access==="off")return wo(a,"access_off");if(!wc(t,a))return wo(a,"outside_folders");let l;try{let c=n(a);if(!c.isFile())return wo(a,"not_a_file");l=c.size}catch{return wo(a,"not_found")}if(l>s)return wo(a,"too_large",l);try{let c=o(a);return{step:{kind:"attach",path:a,outputBytes:c.length,ok:!0},file:{name:PB.basename(a),sizeBytes:c.length,contentBase64:c.toString("base64")}}}catch{return wo(a,"read_failed")}}function IB(e,t,r){let n=Bee(e);for(let o of n){let s=Wee(o,t.access);r.attach(s.step,t,{toolUseId:o.toolUseId,...s.file?{file:s.file}:{}})}return n.length}var Mee,Lee,OB=p(()=>{"use strict";xn();at();Mee="attach_file",Lee=50*1024*1024});function Fee(e){return e>=200&&e<300?"accepted":e===409||e===410?"rejected":e===404||e===405?"unsupported":"unreachable"}function TB(e){return e!=="rejected"}async function NB(e,t,r=fetch){let n=`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t)}/receipt`;for(let o=0;o<2;o++){let s=new AbortController,i=setTimeout(()=>s.abort(),Uee);try{let a=await $s(e);if(!a.bearer)return{outcome:"unreachable",status:null};let l=await r(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:a.boxId}),signal:s.signal});return io(e,a,l.status),{outcome:Fee(l.status),status:l.status}}catch{}finally{clearTimeout(i)}}return{outcome:"unreachable",status:null}}var Uee,DB=p(()=>{"use strict";Kd();Uee=4e3});async function Hee(e,t,r=fetch){let n=new AbortController,o=setTimeout(()=>n.abort(),$ee);try{let s=await $s(e);if(!s.bearer)return!1;let i=typeof t=="function"?t(s):t,a=await r(`${e.bridgeUrl}/runtime-chat/heartbeat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:s.boxId,capabilities:i}),signal:n.signal});return io(e,s,a.status),a.ok}catch{return!1}finally{clearTimeout(o)}}function MB(e){let t=e.intervalMs??Kee,r=!1,n=()=>{r||Hee(e.target,e.capabilities,e.fetchImpl).catch(()=>!1).then(s=>{try{e.onBeat?.(s)}catch{}})};n();let o=setInterval(n,t);return o.unref?.(),()=>{r=!0,clearInterval(o)}}var Kee,$ee,LB=p(()=>{"use strict";Kd();Kee=15e3,$ee=5e3});function Vee(e){return typeof e=="string"&&jee.includes(e)}function WB(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.kind!=="agent-tab"||!Vee(t.engine)||typeof t.sessionKey!="string"||!zee.test(t.sessionKey))return null;let r=typeof t.text=="string"?t.text.slice(0,Gee):"",n=[],o=0;if(Array.isArray(t.attachments))for(let i of t.attachments.slice(0,qee)){if(!i||typeof i!="object")continue;let{name:a,mime:l,contentBase64:c}=i;if(!(typeof a!="string"||typeof c!="string")){if(o+=Math.floor(c.length*3/4),o>Yee)break;n.push({name:a.slice(0,200),mime:typeof l=="string"?l.slice(0,100):"application/octet-stream",contentBase64:c})}}if(!r.trim()&&n.length===0)return null;let s=typeof t.styleNote=="string"?t.styleNote.trim().slice(0,Jee):"";return{kind:"agent-tab",engine:t.engine,sessionKey:t.sessionKey,text:r,attachments:n,...t.computerAccess!==void 0?{computerAccess:t.computerAccess}:{},...s?{styleNote:s}:{}}}var jee,BB,Gee,Jee,qee,Yee,zee,UB=p(()=>{"use strict";jee=["hermes","openclaw","claude-code","grok-bot"],BB={hermes:"Hermes",openclaw:"OpenClaw","claude-code":"Claude Code","grok-bot":"Grok Bot"};Gee=32e3,Jee=4e3,qee=5,Yee=20*1024*1024,zee=/^[A-Za-z0-9_.:-]{8,128}$/});import{existsSync as Xee}from"node:fs";import{homedir as Qee,platform as Zee}from"node:os";import mn from"node:path";function ete(e,t,r={}){if(t==="darwin")return mn.join(e,"Library","Application Support","Grok Bot");if(t==="win32"){let s=r.APPDATA?.trim();return mn.join(s||mn.join(e,"AppData","Roaming"),"Grok Bot")}let n=r.XDG_CONFIG_HOME?.trim(),o=n&&mn.isAbsolute(n)?n:mn.join(e,".config");return mn.join(o,"Grok Bot")}function tte(e){return[mn.join("/opt","Grok Bot","grok-bot"),mn.join(e,".local","bin","grok-bot")]}async function FB(e={}){let t=e.home??Qee(),r=e.platform??Zee(),n=e.env??process.env,o=e.exists??Xee,s=e.versionOf??(async()=>null),i=r==="linux"?tte(t):[],a=await s("grok-bot");if(!a){for(let c of i)if(o(c)&&(a=await s(c),a))break}return{installed:!!a||o(ete(t,r,n))||i.some(c=>o(c)),version:a}}var KB=p(()=>{"use strict"});async function jp(e={}){let t=await FB(e);return t.installed?{status:"not_enabled",version:t.version,detail:nte}:{status:"not_installed",version:null,detail:rte}}var rte,nte,Yb=p(()=>{"use strict";KB();rte="Grok Bot is not installed on this computer.",nte="Grok Bot is installed. Chat from Kynver is not connected."});function HB(){return ote}var $B,zb,ote,jB=p(()=>{"use strict";Yb();$B="grok_bot_no_chat_api",zb=class extends Error{code=$B;constructor(){super(`${$B}: Grok Bot has no connection that can take a message and return a reply.`),this.name="GrokBotChatUnavailableError"}},ote={id:"none",probe:e=>jp(e),relay(){return Promise.reject(new zb)}}});import{existsSync as ste,mkdirSync as ite,readFileSync as ate,renameSync as lte,writeFileSync as cte}from"node:fs";import{homedir as ute}from"node:os";import GB from"node:path";function dte(e=ute()){return GB.join(e,".kynver","agent-tab-sessions.json")}function JB(e=dte(),t=Date.now){let r=()=>{try{if(!ste(e))return{};let o=JSON.parse(ate(e,"utf8"));if(!o||typeof o!="object"||Array.isArray(o))return{};let s={};for(let[i,a]of Object.entries(o)){let l=a;l&&typeof l.id=="string"&&typeof l.at=="number"&&(s[i]={id:l.id,at:l.at})}return s}catch{return{}}},n=o=>{let s=Object.keys(o);s.length>VB&&s.sort((i,a)=>o[i].at-o[a].at).slice(0,s.length-VB).forEach(i=>delete o[i]);try{ite(GB.dirname(e),{recursive:!0,mode:448});let i=`${e}.${process.pid}.tmp`;cte(i,`${JSON.stringify(o)}
507
- `,{mode:384}),lte(i,e)}catch{}};return{get:o=>r()[o]?.id??null,remember:(o,s)=>{let i=r();i[o]?.id!==s&&(i[o]={id:s,at:t()},n(i))},forget:o=>{let s=r();o in s&&(delete s[o],n(s))}}}var VB,qB=p(()=>{"use strict";VB=500});import{existsSync as YB,readFileSync as pte}from"node:fs";import{homedir as zB}from"node:os";import So from"node:path";function XB(e){try{return YB(e)?pte(e,"utf8"):null}catch{return null}}function fte(e){let t=(e??"").trim().toLowerCase();return t==="localhost"||t==="::1"||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)?t==="::1"?"[::1]":t:"127.0.0.1"}function QB(e,t){let r=typeof e=="number"?e:typeof e=="string"?Number(e.trim()):NaN;return Number.isInteger(r)&&r>0&&r<65536?r:t}function mte(e){let t={};for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(n);if(!o)continue;let s=o[2].trim();s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'")?s=s.slice(1,-1):s=s.replace(/\s+#.*$/,""),t[o[1]]=s}return t}function gte(e){return/^(1|true|yes|on)$/i.test((e??"").trim())}function ZB(e={}){let r=(e.env??process.env).HERMES_HOME?.trim();return r?So.resolve(r):So.join(e.home??zB(),".hermes")}function hte(e={}){return So.join(ZB(e),".env")}function Vp(e={}){let t=e.readFile??XB,r=hte(e),n=t(r),o=n===null?{}:mte(n),s=o.API_SERVER_KEY?.trim()||null;return{baseUrl:`http://${fte(o.API_SERVER_HOST)}:${QB(o.API_SERVER_PORT,8642)}`,key:s,enabled:gte(o.API_SERVER_ENABLED)||s!==null&&o.API_SERVER_ENABLED===void 0,configured:n!==null||YB(ZB(e)),configPath:r}}function yte(e){try{return JSON.parse(e)}catch{}let t="",r=0;for(;r<e.length;){let n=e[r];if(n==='"'||n==="'"){let o=n,s=r+1,i="";for(;s<e.length&&e[s]!==o;){if(e[s]==="\\"&&s+1<e.length){i+=e[s]+e[s+1],s+=2;continue}i+=o==="'"&&e[s]==='"'?'\\"':e[s],s+=1}t+=`"${i}"`,r=s+1;continue}if(n==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
508
- `;)r+=1;continue}if(n==="/"&&e[r+1]==="*"){let o=e.indexOf("*/",r+2);r=o===-1?e.length:o+2;continue}t+=n,r+=1}t=t.replace(/,\s*([}\]])/g,"$1").replace(/([{,]\s*)([A-Za-z_$][A-Za-z0-9_$-]*)\s*:/g,'$1"$2":');try{return JSON.parse(t)}catch{return null}}function bl(e,t){let r=e;for(let n of t){if(!r||typeof r!="object"||Array.isArray(r))return;r=r[n]}return r}function vl(e){return typeof e=="string"&&e.trim()?e.trim():null}function kte(e={}){let t=e.env??process.env,r=t.OPENCLAW_CONFIG_PATH?.trim();if(r)return So.resolve(r);let n=t.OPENCLAW_STATE_DIR?.trim();return So.join(n?So.resolve(n):So.join(e.home??zB(),".openclaw"),"openclaw.json")}function Gp(e={}){let t=e.env??process.env,r=e.readFile??XB,n=kte(e),o=r(n),s=o===null?null:yte(o),i=vl(bl(s,["gateway","auth","mode"])),a=(i==="password"?vl(bl(s,["gateway","auth","password"]))??vl(t.OPENCLAW_GATEWAY_PASSWORD):vl(bl(s,["gateway","auth","token"]))??vl(t.OPENCLAW_GATEWAY_TOKEN))??(i==="none"?"":null);return{baseUrl:`http://127.0.0.1:${QB(t.OPENCLAW_GATEWAY_PORT??bl(s,["gateway","port"]),18789)}`,key:a,enabled:bl(s,["gateway","http","endpoints","chatCompletions","enabled"])===!0,configured:o!==null,configPath:n}}var Xb=p(()=>{"use strict"});function eW(e){let t=null,r=[];for(let o of e){if(!o||o.startsWith(":"))continue;let s=o.indexOf(":"),i=s===-1?o:o.slice(0,s),a=s===-1?"":o.slice(s+1).replace(/^ /,"");i==="event"?t=a:i==="data"&&r.push(a)}if(r.length===0)return null;let n=r.join(`
509
- `);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*tW(e){let t=e.getReader(),r=new TextDecoder,n="",o=[];try{for(;;){let{done:i,value:a}=await t.read();if(i)break;n+=r.decode(a,{stream:!0});let l;for(;(l=n.indexOf(`
510
- `))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=eW(o);o=[],u&&(yield u)}else o.push(c)}}n+=r.decode(),n&&o.push(n.replace(/\r$/,""));let s=eW(o);s&&(yield s)}finally{t.releaseLock()}}var rW=p(()=>{"use strict"});function Qb(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let r=t;return typeof r.text=="string"&&(r.type===void 0||r.type==="text"||r.type==="output_text")?r.text:""}).join(""):""}function nW(e){if(typeof e=="string"&&e.trim())return e.trim().slice(0,300);if(!e||typeof e!="object")return null;let t=e.message;return typeof t=="string"&&t.trim()?t.trim().slice(0,300):null}function oW(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.output_text=="string"?t.output_text:Array.isArray(t.output)?t.output.map(r=>{if(!r||typeof r!="object")return"";let n=r;return n.type!=="message"||n.role!==void 0&&n.role!=="assistant"?"":Qb(n.content)}).join(""):""}function Zb(e,t){if(!t||typeof t!="object")return null;let r=t,n=e??(typeof r.type=="string"?r.type:null);if(n==="response.output_text.delta")return{delta:typeof r.delta=="string"?r.delta:"",full:null,finishReason:null,error:null};if(n==="response.completed")return{delta:"",full:oW(r.response)||null,finishReason:"stop",error:null};if(n==="response.failed"||n==="error"){let d=r.response;return{delta:"",full:null,finishReason:"error",error:nW(d?.error??r.error??r.message)??"the agent reported an error"}}if(e&&e!=="message")return null;let o=r.error!==void 0&&r.error!==null?nW(r.error)??"the agent reported an error":null,i=(Array.isArray(r.choices)?r.choices:[])[0]??null,a=Qb(i?.delta?.content)||(typeof i?.text=="string"?i.text:""),l=i?.message?.content,c=l==null?null:Qb(l),u=typeof i?.finish_reason=="string"?i.finish_reason:null;return!a&&c===null&&!u&&!o?null:{delta:a,full:c,finishReason:u,error:o}}function sW(e){if(!e||typeof e!="object")return null;let t=e;return t.object==="response"||Array.isArray(t.output)||typeof t.output_text=="string"?{delta:"",full:oW(t),finishReason:"stop",error:null}:Zb(null,e)}var iW=p(()=>{"use strict"});function aW(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}function bte(e,t){if(!Array.isArray(e)||e.length===0)return null;let r=lW(t).slice(0,200),n=null;for(let o=e.length-1;o>=0;o-=1){let s=e[o];if(!(!s||typeof s!="object")){if(s.role==="assistant"){let i=aW(s.content);n===null&&i.trim()&&(n=i);continue}if(s.role!=="tool"&&s.role==="user")return n===null?null:!r||lW(aW(s.content)).includes(r)?n:null}}return null}async function cW(e){let t=e.fetchFn??fetch,r=new AbortController,n=setTimeout(()=>r.abort(),5e3),o=()=>r.abort();e.signal?.addEventListener("abort",o,{once:!0});try{let s=await t(`${e.endpoint.baseUrl}/api/sessions/${encodeURIComponent(e.sessionId)}/messages`,{headers:e.endpoint.key?{Authorization:`Bearer ${e.endpoint.key}`}:{},signal:r.signal});if(!s.ok)return await s.body?.cancel().catch(()=>{}),null;let i=await s.json().catch(()=>null);return bte(i?.data,e.sentText)}catch{return null}finally{clearTimeout(n),e.signal?.removeEventListener("abort",o)}}var lW,uW=p(()=>{"use strict";lW=e=>e.replace(/\s+/g," ").trim()});function vte(e=process.env){let t=e.KYNVER_OPENCLAW_AGENT?.trim();return t?`openclaw/${t}`:"openclaw/default"}function dW(e,t){let r=t.filter(n=>n.imageDataUrl);return r.length===0?e:[{type:"text",text:e},...r.map(n=>({type:"image_url",image_url:{url:n.imageDataUrl}}))]}function Rte(e,t){return t===401||t===403?new Error(`${e}_auth_failed: the local API refused the key in its config`):t===404?new Error(`${e}_api_off: the local chat API is not switched on`):t===429?new Error(`${e}_busy: the agent is busy, try again shortly`):new Error(`${e}_http_${t}`)}function wte(e,t,r,n){let o=`Conversation opened from Kynver chat (${t}).`,s=r?.trim();return s?e==="hermes"?`${s}
511
-
512
- ${o}`:s:e==="hermes"&&!n?o:null}async function pW(e,t){let r=e.fetchFn??fetch,n={"Content-Type":"application/json",Accept:"text/event-stream"};e.endpoint.key&&(n.Authorization=`Bearer ${e.endpoint.key}`);let o=[],s,i=wte(e.engine,e.sessionKey,e.styleNote,t!==null);i&&o.push({role:"system",content:i}),e.engine==="hermes"?(t&&(n["X-Hermes-Session-Id"]=t),o.push({role:"user",content:dW(e.text,e.attachments)}),s={model:"hermes-agent",stream:!0,messages:o}):(o.push({role:"user",content:dW(e.text,e.attachments)}),s={model:vte(),stream:!0,user:`kynver:${e.sessionKey}`,messages:o});try{return await r(`${e.endpoint.baseUrl}/v1/chat/completions`,{method:"POST",headers:n,body:JSON.stringify(s),signal:e.signal})}catch(a){throw e.signal?.aborted?new Error(`${e.engine}_aborted`):new Error(`${e.engine}_unreachable: nothing answered on ${e.endpoint.baseUrl}`,{cause:a})}}async function fW(e){let t=e.now??Date.now,r=e.engine==="hermes"?e.sessions.get(e.sessionKey):null,n=await pW(e,r);if(r&&(n.status===400||n.status===404||n.status===409)&&(await n.body?.cancel().catch(()=>{}),e.sessions.forget(e.sessionKey),n=await pW(e,null)),!n.ok||!n.body)throw await n.body?.cancel().catch(()=>{}),Rte(e.engine,n.status);let o=e.engine==="hermes"&&(n.headers.get("x-hermes-session-id")?.trim()||r)||null;e.engine==="hermes"&&o&&e.sessions.remember(e.sessionKey,o);let s="",i=!1,a=null,l=null,c=f=>{if(f.error){if(e.engine==="openclaw"&&s.trim()&&Ste.test(f.error))return"stop";throw new Error(`${e.engine}_failed: ${f.error}`)}return f.delta&&(s+=f.delta,e.sink.onDelta(f.delta)),f.full!==null&&f.full.trim()&&(l=f.full),f.finishReason&&(a=f.finishReason),"continue"},u=n.headers.get("content-type")??"";if(/application\/json/i.test(u)){let f=await n.json().catch(()=>null),m=sW(f);m&&c(m)}else{let f=new Map;for await(let m of tW(n.body)){if(m.data==="[DONE]")break;if(m.event==="hermes.tool.progress"){i=!0;let h=m.data??{},y=typeof h.toolCallId=="string"?h.toolCallId:String(h.tool??""),v=[h.emoji,h.label??h.tool].filter(k=>typeof k=="string"&&k).join(" ").slice(0,300);if(h.status==="running")f.set(y,{at:t(),label:v||"tool"}),e.sink.onTool({label:v||"tool",status:"running",durationMs:null});else{let k=f.get(y);f.delete(y),e.sink.onTool({label:k?.label??(v||String(h.tool??"tool")),status:"completed",durationMs:k===void 0?null:t()-k.at})}continue}if(m.event==="approval.request"){let h=m.data??{},y=[h.description,h.command].find(v=>typeof v=="string"&&v);e.sink.onTool({label:`Waiting for approval in ${e.engine==="hermes"?"Hermes":"OpenClaw"}${y?`: ${y.slice(0,200)}`:""}`,status:"approval",durationMs:null});continue}let g=Zb(m.event,m.data);if(g&&c(g)==="stop")break}}let d=l;if(!s.trim()&&d&&(s=d,e.sink.onDelta(d)),!s.trim()&&a==="error")throw new Error(`${e.engine}_failed: the agent stopped with an error \u2014 check its logs`);if(!s.trim()&&e.engine==="hermes"&&o){let f=await cW({endpoint:e.endpoint,sessionId:o,sentText:e.text,fetchFn:e.fetchFn,signal:e.signal});if(f&&f.trim())return e.sink.onDelta(f),{text:f,sessionId:o,recovered:!0}}if(!s.trim()&&!i)throw new Error(`${e.engine}_empty_reply: the agent sent back nothing \u2014 check its model sign-in and logs`);if(!s.trim())throw new Error(`${e.engine}_empty_reply: the agent ran its steps but sent back no answer`);return{text:s,sessionId:o}}var Ste,mW=p(()=>{"use strict";rW();iW();uW();Ste=/cannot be represented as an append-only response stream/i});import{mkdirSync as _te,readFileSync as xte,realpathSync as Cte,statSync as Ete,writeFileSync as Ate}from"node:fs";import{homedir as ev}from"node:os";import rr from"node:path";function rv(e=ev()){return rr.join(e,".kynver","agent-tabs","inbox")}function gW(e,t=80){return e.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"_").slice(0,t)||"file"}function yW(e,t,r={}){if(t.length===0)return[];let n=rr.join(r.root??rv(),gW(e,120));_te(n,{recursive:!0,mode:448});let o=(r.now??Date.now)();return t.map((s,i)=>{let a=Buffer.from(s.contentBase64,"base64"),l=rr.join(n,`${o}-${i}-${gW(s.name,120)}`);Ate(l,a,{mode:384});let c=/^image\/(png|jpe?g|gif|webp|bmp|heic|heif)$/i.test(s.mime);return{name:s.name,mime:s.mime,path:l,imageDataUrl:c?`data:${s.mime.toLowerCase()};base64,${s.contentBase64}`:null}})}function qp(e,t){if(t.length===0)return e;let r=t.map(n=>`[Attached file "${n.name}" (${n.mime}) saved on this computer at ${n.path}]`);return[e.trim(),...r].filter(Boolean).join(`
513
-
514
- `)}function nv(e){let t=[];return{text:e.replace(Pte,(n,o,s,i,a)=>{let l=String(o??s??i??a??"").replace(/[),.;:!?\]]+$/,"");return l?(!t.includes(l)&&t.length<Jp&&t.push(l),""):n}).replace(/[ \t]+\n/g,`
515
- `).replace(/\n{3,}/g,`
516
-
517
- `).trim(),paths:t}}function hW(e,t=ev()){let r=rr.basename(e);if(Ite.test(r))return"credential_file";let n=rr.relative(t,e);if(!n.startsWith("..")&&!rr.isAbsolute(n)){let o=n.split(rr.sep).join("/");if(qd.some(s=>o===s))return"credential_file";if(Jd.some(s=>o===s||o.startsWith(`${s}/`)))return"private_folder"}return null}function Ote(e,t){return e==="~"?t:e.startsWith("~/")||e.startsWith("~\\")?rr.join(t,e.slice(2)):e}function ov(e,t={}){let r=t.home??ev(),n=rr.resolve(Ote(e,r)),o={path:n,name:rr.basename(n)},s=hW(n,r);if(s)return{...o,ok:!1,reason:s,sizeBytes:null,contentBase64:null};try{let i=Cte(n),a=hW(i,r);if(a)return{...o,ok:!1,reason:a,sizeBytes:null,contentBase64:null};let l=Ete(i);if(!l.isFile())return{...o,ok:!1,reason:"not_a_file",sizeBytes:null,contentBase64:null};if(l.size>tv)return{...o,ok:!1,reason:"too_large",sizeBytes:l.size,contentBase64:null};let c=xte(i);return{...o,ok:!0,reason:null,sizeBytes:c.length,contentBase64:c.toString("base64")}}catch{return{...o,ok:!1,reason:"not_found",sizeBytes:null,contentBase64:null}}}var tv,Jp,Pte,Ite,Yp=p(()=>{"use strict";Yd();yb();tv=50*1024*1024,Jp=10;Pte=/MEDIA:\s*(?:"([^"\n]+)"|'([^'\n]+)'|`([^`\n]+)`|((?:~|\/|[A-Za-z]:[\\/])[^\s"'`<>]*))/g;Ite=hb(js)});import{chmodSync as Nte,copyFileSync as Dte,mkdirSync as Mte}from"node:fs";import sv from"node:path";function Lte(e){let t=e?.trim();return t?`${kW}
518
-
519
- ${t}`:kW}function Bte(e){let t=e.config??P();return{engine:"claude-code",access:Jo({engine:"claude-code",local:{chatComputerAccess:t.chatComputerAccess,chatWorkFolders:t.chatWorkFolders},website:vc(e.payloadAccess,e.boxId),home:e.home})}}function Ute(e,t){if(t.access==="full"||t.access==="off")return e;let r=sv.join(t.workDir,Wte);return e.map(n=>{if(wc(t,n.path))return n;Mte(r,{recursive:!0,mode:448});let o=sv.join(r,sv.basename(n.path));return Dte(n.path,o),Nte(o,384),{...n,path:o}})}function Fte(e){return e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join("")}async function bW(e){let t=Bte(e);if(t.access.access==="off")throw new Error("claude_code_access_off: computer access for chat is off for this computer \u2014 choose a folder (or full access) on the Computers page to use the Claude Code tab");let r=e.config??P(),n=e.env??process.env,o=qp(e.text,Ute(e.attachments,t.access)),s=await(e.run??Ip)({payload:{system:Lte(e.styleNote),tools:[],messages:[{role:"user",content:o}],maxTokens:32e3,executionMode:"agent"},model:n.KYNVER_AGENT_TAB_CLAUDE_MODEL?.trim()??"",onDelta:e.onDelta,step:{session:e.sessionKey,timeLeftMs:48e4},access:t.access,signal:e.signal,turnId:e.turnId,onActivity:i=>e.onActivity(i,t),env:n,sessions:e.sessions,config:{chatFolderSandbox:r.chatFolderSandbox,chatFolderSandboxDomains:r.chatFolderSandboxDomains},...e.spawnTarget?{spawnTarget:e.spawnTarget}:{},...e.tempRoot?{tempRoot:e.tempRoot}:{},...e.sandboxRuntime?{sandboxRuntime:e.sandboxRuntime}:{},...e.egressProxy?{egressProxy:e.egressProxy}:{}});return{text:Fte(s.content)}}var kW,Wte,vW=p(()=>{"use strict";$();xn();Sb();Ep();Yp();kW="You are the user's own Claude Code, reached from a tab in their Kynver chat on the web. Work exactly as you would in their terminal, in the folder this session started in. Your replies are shown in a chat window, so keep them readable; there are no Kynver tools in this conversation.";Wte=".kynver-attachments"});import zp from"node:path";import{homedir as Kte}from"node:os";function Jte(e){let t=e.replace(/[\r\n]/g,""),r=t.endsWith("==")?2:t.endsWith("=")?1:0;return Math.max(0,Math.floor(t.length*3/4)-r)}function qte(e){return e.replace(/[ \t]+\n/g,`
520
- `).replace(/\n{3,}/g,`
521
-
522
- `).trim()}function RW(e){let t=[];return e.includes("data:image/")?{text:e.replace($te,(n,o,s,i)=>{if(t.length>=Jp)return n;let a=s.toLowerCase(),l=`image-${t.length+1}.${Hte[a]??"png"}`,c=Jte(i);return c>tv?(t.push({source:"inline_image",path:l,name:l,ok:!1,reason:"too_large",sizeBytes:c,contentBase64:null}),""):(t.push({source:"inline_image",path:l,name:l,ok:!0,reason:null,sizeBytes:c,contentBase64:i.replace(/[\r\n]/g,"")}),"")}),files:t}:{text:e,files:t}}function Yte(e){let t=e.replace(Gte,n=>" ".repeat(n.length)),r=[];for(let n of t.matchAll(Vte)){let o=n[1].replace(/[),.;:!?\]]+$/,"");r.includes(o)||r.push(o)}return r}function zte(e,t){return e.startsWith("~/")?zp.join(t,e.slice(2)):e}function Xte(e,t){let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(String.raw`^[ \t]*(?:[-*•][ \t]+)?(?:[A-Za-z ]{1,30}:[ \t]*)?\`?${r}\`?[ \t]*[.!]?[ \t]*$`,"gm");return e.replace(n,"")}function wW(e,t={}){let r=t.home??Kte(),n=zp.resolve(t.inboxRoot??rv(r)),o=[],s=()=>o.length<Jp,i=RW(e);o.push(...i.files);let a=nv(i.text);for(let u of a.paths){if(!s())break;o.push({source:"tag",...ov(u,{home:r})})}let l=a.text,c=new Set(o.map(u=>u.path));for(let u of Yte(l)){if(!s())break;let d=zp.resolve(zte(u,r));if(c.has(d)||d===n||d.startsWith(`${n}${zp.sep}`))continue;let f=ov(u,{home:r});!f.ok&&f.reason!=="too_large"||(c.add(f.path),o.push({source:"path",...f}),f.ok&&(l=Xte(l,u)))}return{text:qte(l),files:o}}function SW(e){return nv(RW(e).text).text}var $te,Hte,jte,Vte,Gte,_W=p(()=>{"use strict";Yp();$te=/!\[([^\]\n]{0,200})\]\(\s*data:(image\/[a-z0-9.+-]{1,40});base64,([A-Za-z0-9+/=\r\n]+)\s*\)/gi,Hte={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp"},jte=["mp4","mov","m4v","webm","mkv","mp3","m4a","wav","ogg","oga","opus","aac","flac","png","jpg","jpeg","gif","webp","heic","pdf"],Vte=new RegExp(String.raw`(?<![\w/:.~-])((?:~\/|\/)[^\s"'\`<>()\[\]{}|]*?\.(?:${jte.join("|")}))(?![\w/-])`,"gi"),Gte=/```[\s\S]*?(?:```|$)/g});function CW(e){let t=e instanceof Error?e.message:String(e);return/^([a-z][a-z0-9_]{2,60})(?::|$)/.exec(t)?.[1]??"agent_tab_failed"}function Xp(e,t,r=()=>new Date){let n={at:r().toISOString(),ok:t.ok,durationMs:Math.max(0,Math.round(t.durationMs)),error:t.ok?null:(t.error??"agent_tab_failed").slice(0,60)};return xW.set(e,n),n}function Qp(e){return xW.get(e)??null}var xW,iv=p(()=>{"use strict";xW=new Map});import{appendFileSync as Qte,mkdirSync as Zte}from"node:fs";import{homedir as ere}from"node:os";import EW from"node:path";function tre(e=ere()){return EW.join(e,".kynver","logs","agent-tabs.jsonl")}function AW(e,t=tre()){try{Zte(EW.dirname(t),{recursive:!0});let r={...e,...e.label?{label:e.label.slice(0,300)}:{}};Qte(t,`${JSON.stringify(r)}
523
- `,{encoding:"utf8",mode:384})}catch{}}var PW=p(()=>{"use strict"});async function IW(e,t,r={}){let n=r.now??(()=>new Date),o=r.log??AW,s=WB(t.payload);if(!s){await e([{seq:0,kind:"error",error:"agent_tab_bad_payload"}]).catch(()=>!1);return}let i=s.engine,a=n().getTime(),l=0,c=!1,u=new AbortController,d=new uo,f=b=>{c||d.track(e([{seq:l++,...b}]).then(_=>(_||(c=!0,u.abort()),_),()=>!1))},m=new ln(b=>f({kind:"delta",text:b}),r.flushFloorMs),g=b=>{m.flush(),f({kind:"activity",activity:b})},h=b=>{let _={at:n().toISOString(),chat:null,turnId:t.turnId,kind:"tool",engine:i,access:"own",command:b.label,folder:"",durationMs:b.durationMs,ok:b.status!=="approval",...b.status==="running"?{reason:"started"}:{},...b.status==="approval"?{reason:"awaiting_approval"}:{}};g(_),b.status!=="running"&&o({at:_.at,turnId:t.turnId,engine:i,kind:"tool",label:b.label,ok:_.ok,durationMs:b.durationMs})},y=Hp({turnId:t.turnId,chat:null,send:b=>g(b),now:n}),v="",k=!1;try{if(i==="grok-bot"){let N=await(r.grokBot??HB()).relay({sessionKey:s.sessionKey,text:s.text});v=N.text,m.push(N.text),m.close(),await d.drain();let A=n().getTime()-a,O=N.text.trim();if(!O)throw new Error("grok_bot_empty_reply");Xp(i,{ok:!0,durationMs:A},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:A});let W=l++;await Ro(()=>c?e([{seq:W,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:W,kind:"final",message:{content:[{type:"text",text:O}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0}}}]).catch(()=>!1));return}let b=r.sessions??JB(),_=yW(s.sessionKey,s.attachments,{root:r.inboxRoot}),S;if(i==="claude-code")S=(await(r.runClaudeCode??bW)({sessionKey:s.sessionKey,text:s.text,styleNote:s.styleNote,attachments:_,payloadAccess:s.computerAccess,boxId:t.boxId,sessions:b,onDelta:A=>{v+=A,m.push(A)},onActivity:y.sink,signal:u.signal,turnId:t.turnId,home:r.home})).text||v;else{let N=(r.endpoint??(O=>O==="hermes"?Vp():Gp()))(i),A=await fW({engine:i,endpoint:N,sessionKey:s.sessionKey,text:qp(s.text,_.filter(O=>!O.imageDataUrl)),styleNote:s.styleNote,attachments:_,sessions:b,signal:u.signal,fetchFn:r.fetchFn,sink:{onDelta:O=>{v+=O,m.push(O)},onTool:h}});S=A.text,k=A.recovered===!0}let R=wW(S,{home:r.home,inboxRoot:r.inboxRoot});R.files.forEach((N,A)=>{let O=n().toISOString();g({at:O,chat:null,turnId:t.turnId,kind:"attach",engine:i,access:"own",path:N.path,folder:"",ok:N.ok,...N.reason?{reason:N.reason}:{},...!N.ok&&N.sizeBytes!==null?{sizeBytes:N.sizeBytes}:{},toolUseId:`media-${A}`,...N.ok&&N.contentBase64?{file:{name:N.name,sizeBytes:N.sizeBytes,contentBase64:N.contentBase64}}:{}}),o({at:O,turnId:t.turnId,engine:i,kind:"attach",path:N.path,ok:N.ok,reason:N.reason})}),m.close(),await d.drain();let w=n().getTime()-a;Xp(i,{ok:!0,durationMs:w},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:w,...k?{reason:"reply_read_from_session"}:{}});let L=l++;await Ro(()=>c?e([{seq:L,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:L,kind:"final",message:{content:[{type:"text",text:R.text}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:R.files.filter(N=>N.ok).length}}}]).catch(()=>!1))}catch(b){m.close(),await d.drain();let _=b instanceof Error?b.message:String(b),S=CW(b),R=n().getTime()-a;if(Xp(i,{ok:!1,durationMs:R,error:S},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!1,durationMs:R,reason:S}),c)return;let w=l++;if(v.trim()){let L=`
524
-
525
- _${rre[i]} stopped before finishing (${S})._`;await Ro(()=>e([{seq:w,kind:"final",message:{content:[{type:"text",text:SW(v)+L}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,error:S}}}]).catch(()=>!1))}else await Ro(()=>e([{seq:w,kind:"error",error:_.slice(0,1500)}]).catch(()=>!1))}}var rre,OW=p(()=>{"use strict";rp();Wk();Jb();qb();UB();jB();qB();Xb();mW();vW();Yp();_W();iv();PW();rre=BB});import{execFile as nre}from"node:child_process";async function ure(e){let t=TW.get(e);if(t&&Date.now()-t.at<sre)return t.version;let r=await new Promise(n=>{try{let[o,s]=ae(e,["--version"]);nre(o,s,z({encoding:"utf8",timeout:5e3}),(i,a,l)=>{if(i)return n(null);n(`${a??""} ${l??""}`.match(cre)?.[0]??null)})}catch{n(null)}});return TW.set(e,{at:Date.now(),version:r}),r}async function NW(e,t,r,n=ire){let o=new AbortController,s=setTimeout(()=>o.abort(),n);try{let i=await e(t,{headers:r?{Authorization:`Bearer ${r}`}:{},signal:o.signal});return await i.body?.cancel().catch(()=>{}),i.status}catch{return null}finally{clearTimeout(s)}}function av(e){let t=MW.get(e)??null,r=Qp(e),n=r?.ok?Date.parse(r.at):NaN,o=[t,Number.isFinite(n)?n:null].filter(s=>s!==null);return o.length?Math.max(...o):null}function Lt(e,t,r,n){let o=av(e);return{engine:e,status:t,version:r,detail:n,lastRoundTrip:Qp(e),lastReadyAt:o===null?null:new Date(o).toISOString()}}async function DW(e,t,r,n,o=Date.now){if(!t.configured&&!r)return null;let s=e==="hermes"?"Hermes":"OpenClaw";if(!t.enabled)return Lt(e,"not_enabled",r,`${s}'s local chat API is off`);if(t.key===null)return Lt(e,"no_key",r,`${s}'s local chat API has no key set`);let i=`${t.baseUrl}/v1/models`,a=await NW(n,i,t.key||null)??await NW(n,i,t.key||null,are);if(a===null){let l=av(e);return l!==null&&o()-l<lre?Lt(e,"ready",r,null):Lt(e,"unreachable",r,`${s} is not answering on ${t.baseUrl} \u2014 is its gateway running?`)}return a===401||a===403?Lt(e,"no_key",r,`${s} refused the key in its config (HTTP ${a})`):a===404?Lt(e,"not_enabled",r,`${s} is running but its chat API is not switched on`):(MW.set(e,o()),Lt(e,"ready",r,null))}function dre(e){let{version:t,signedIn:r}=(e.claudeCode??(()=>({version:Zd("claude-code",e.env),signedIn:ep(e.env)})))();return t?r?(e.config??P()).chatComputerAccess==="off"?Lt("claude-code","access_off",t,"Computer access for chat is off on this computer"):Lt("claude-code","ready",t,null):Lt("claude-code","not_signed_in",t,"Claude Code is installed but not signed in"):null}async function pre(e){let t=await jp({home:e.home,env:e.env,exists:e.grokBotExists,versionOf:e.versionOf,platform:e.platform});return Lt("grok-bot",t.status,t.version,t.detail)}async function fre(e={}){let t=e.env??process.env,r=e.fetchFn??fetch,n=e.versionOf??ure,o=t.KYNVER_HERMES_BIN?.trim()||t.HERMES_BIN?.trim()||"hermes",s=t.KYNVER_OPENCLAW_BIN?.trim()||t.OPENCLAW_BIN?.trim()||"openclaw",[i,a]=await Promise.all([n(o),n(s)]),[l,c]=await Promise.all([DW("hermes",Vp(e),i,r,e.now),DW("openclaw",Gp(e),a,r,e.now)]),u=await pre({...e,versionOf:n});return{v:1,engines:[l,c,dre(e),u].filter(f=>f!==null)}}function mre(e={}){return Rl||(wl&&Date.now()-wl.at<ore?Promise.resolve():(Rl=fre(e).then(t=>{wl={at:Date.now(),report:t}}).catch(()=>{}).finally(()=>{Rl=null}),Rl))}function lv(){if(mre(),!!wl)return{v:1,engines:wl.report.engines.map(e=>{let t=av(e.engine);return{...e,lastRoundTrip:Qp(e.engine),lastReadyAt:t===null?null:new Date(t).toISOString()}})}}var ore,sre,ire,are,lre,cre,TW,MW,wl,Rl,LW=p(()=>{"use strict";$();qe();M();Qa();iv();Xb();Yb();ore=3e4,sre=10*6e4,ire=1500,are=5e3,lre=3e4,cre=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,TW=new Map;MW=new Map;wl=null,Rl=null});import{readdir as gre,readFile as hre}from"node:fs/promises";import{sep as yre}from"node:path";import{fileURLToPath as kre}from"node:url";function wre(e=import.meta.url){let t;try{t=kre(e)}catch{return"checkout"}return t.split(yre).includes("node_modules")||t.split("/").includes("node_modules")?"npm":"checkout"}function Sre(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=Rre?t:null}async function _re(e){try{return Sre(JSON.parse(await hre(e,"utf8")).version)}catch{return null}}function xre(e,t){if(!e)return t;try{return Id(t,e)>0?t:e}catch{return e}}async function Cre(e={}){let t={},r=new Set;for(let n of(e.scopeRoots??xN)()){let o=[];try{o=await gre(n)}catch{continue}for(let s of o)/^[a-z0-9][a-z0-9._-]*$/i.test(s)&&r.add(`${BW}${s}`)}try{for(let n of await(e.adopted??rk)())n.packageName.startsWith(BW)&&r.add(n.packageName)}catch{}for(let n of[...r].sort().slice(0,vre))for(let o of jy(n)){let s=await _re(o);s&&(t[n]=xre(t[n],s))}return t}function Ere(e){cv||oi&&e-oi.at<bre||(cv=Cre().then(t=>{oi={at:Date.now(),packages:t}}).catch(()=>{oi={at:Date.now(),packages:oi?.packages??{}}}).finally(()=>{cv=null}))}function uv(e=Date.now()){try{Ere(e)}catch{}return{v:1,runtime:{version:Ge,source:wre()},packages:{...oi?.packages??{}}}}var BW,bre,vre,Rre,oi,cv,WW=p(()=>{"use strict";Vr();Vy();nk();Hy();BW="@kynver-app/",bre=10*6e4,vre=40,Rre=32;oi=null,cv=null});function Are(e,t,r){if(!t||t===r)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`${n}(?=[\\\\/"'\\s<]|$)`,"gm"),()=>r)}function UW(e,t){return Are(e,t,"\0")!==e}var FW=p(()=>{"use strict"});import{accessSync as Pre,constants as Ire,existsSync as Ore,lstatSync as Tre,readdirSync as Nre,readFileSync as Dre,readlinkSync as Mre,realpathSync as Lre}from"node:fs";import{homedir as Bre}from"node:os";import KW from"node:path";function HW(e){return e==="win32"?KW.win32:KW.posix}function Ure(e,t,r){let n=r.dirname(e);for(let o=0;o<4;o+=1){let s=t.readText(r.join(n,"package.json"));if(s)try{if(JSON.parse(s).name===dv)return n}catch{}let i=r.dirname(n);if(i===n)break;n=i}return null}function Kre(e,t,r){let n=HW(t),o=n.dirname(e),s=t==="win32"?[n.join(o,"node_modules","npm","bin","npm-cli.js")]:[n.join(o,"..","lib","node_modules","npm","bin","npm-cli.js"),n.join(o,"node_modules","npm","bin","npm-cli.js")];for(let i of s){let a=n.normalize(i);if(r.exists(a))return a}return null}function $re(e,t,r){let n=[r.join(e,".npm-global","bin","kynver"),r.join(e,".local","bin","kynver"),r.join(e,"bin","kynver")],o=t.NPM_CONFIG_PREFIX?.trim()||t.npm_config_prefix?.trim();return o&&n.unshift(r.join(o,"bin","kynver")),[...new Set(n)]}function Hre(e,t,r,n,o){for(let s of $re(t,r,o)){let i=n.readLink(s);if(!i)continue;let a=o.isAbsolute(i)?i:o.resolve(o.dirname(s),i);if(a===e||a.startsWith(`${e}${o.sep}`))return s}}function jre(e,t,r,n){let o=n.join(t,"Library","LaunchAgents");for(let s of r.readDir(o)){if(!s.endsWith(".plist"))continue;let i=n.join(o,s),a=r.readText(i);if(!a||!/kynver/i.test(a)||!e.some(c=>a.includes(c)))continue;let l=/<key>\s*Label\s*<\/key>\s*<string>([^<]+)<\/string>/.exec(a)?.[1]?.trim();if(l)return{file:i,label:l}}return null}function Vre(e,t,r,n){for(let o of[n.join(t,".kynver","bin"),n.join(t,".kynver")])for(let s of r.readDir(o)){if(!/\.(cmd|bat|ps1)$/i.test(s))continue;let i=n.join(o,s),a=r.readText(i);if(a&&e.some(l=>a.includes(l)))return i}return null}function Zp(e={}){let t=e.platform??process.platform,r=HW(t),n=e.fs??Wre,o=e.env??process.env,s=e.home??Bre(),i=e.execPath??process.execPath,a=n.realpath(e.cliEntry??process.argv[1]??""),l=a?Ure(a,n,r):null,c={cliPath:a,packageRoot:l,nodePath:i,npmCliPath:Kre(i,t,n)};if(!l)return{...c,kind:"unknown",supervisor:"none",unsupportedReason:"I could not find where Kynver is installed on this computer."};if(!l.split($W).includes("node_modules"))return{...c,kind:"checkout",supervisor:"none",unsupportedReason:"Kynver on this computer runs from a source checkout, not an installed release, so it is updated with git (pull, then build), not from chat."};let u="unknown",d={},f=Fre.exec(l);if(f)u="release_dir",d.releasesRoot=r.join(f[1],"releases"),d.releaseName=f[2],d.releaseDir=r.join(d.releasesRoot,d.releaseName),d.shimPath=Hre(d.releaseDir,s,o,n,r);else{let y=/^(.*)[\\/]lib[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l),v=t==="win32"?/^(.*)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l):null,k=y?.[1]??v?.[1];k&&!k.split($W).includes("node_modules")&&(u="npm_global",d.npmPrefix=k)}if(u==="unknown")return{...c,kind:u,supervisor:"none",unsupportedReason:`Kynver on this computer is installed inside another project (${l}), so updating it from chat could break that project.`};let m=[d.releaseDir,l,a].filter(y=>!!y),g="keeper";if(t==="linux"){let y=r.join(s,".config","systemd","user",Ai);n.exists(y)&&(g="systemd",d.supervisorFile=y,d.supervisorName=Ai)}else if(t==="darwin"){let y=jre(m,s,n,r);y&&(g="launchd",d.supervisorFile=y.file,d.supervisorName=y.label)}else if(t==="win32"){let y=Vre(m,s,n,r);y&&(g="windows_task",d.supervisorFile=y,d.supervisorName=o.KYNVER_WINDOWS_TASK_NAME?.trim()||"Kynver")}let h={...c,kind:u,supervisor:g,...d};return h.unsupportedReason=Gre(h,n),h.unsupportedReason||delete h.unsupportedReason,h}function Gre(e,t){if(e.kind==="npm_global")return e.npmPrefix&&!t.writable(e.npmPrefix)?`Kynver is installed in ${e.npmPrefix}, which this computer's user cannot write to (it needs admin rights), so I can't update it from here.`:void 0;if(e.kind!=="release_dir")return;if(e.releasesRoot&&!t.writable(e.releasesRoot))return`I can't write a new release next to the current one (${e.releasesRoot} is not writable).`;let r=(()=>{if(!e.supervisorFile||!e.releaseDir)return!1;let n=t.readText(e.supervisorFile);return!!n&&UW(n,e.releaseDir)})();if(e.supervisor==="keeper"||e.supervisor==="none")return"Kynver runs from a release folder without a service that starts it, so a restart would bring back the old release. Run `kynver cron install --install-systemd` once (Linux) so updates can switch releases.";if(!r&&!e.shimPath)return`The service that starts Kynver (${e.supervisorFile??e.supervisor}) doesn't name the release folder or a kynver link I can switch.`}var dv,Wre,$W,Fre,ef=p(()=>{"use strict";Ho();FW();dv="@kynver-app/runtime",Wre={exists:e=>Ore(e),readText:e=>{try{return Dre(e,"utf8")}catch{return null}},readDir:e=>{try{return Nre(e)}catch{return[]}},realpath:e=>{try{return Lre.native(e)}catch{return e}},readLink:e=>{try{return Tre(e).isSymbolicLink()?Mre(e):null}catch{return null}},writable:e=>{try{return Pre(e,Ire.W_OK),!0}catch{return!1}}},$W=/[\\/]/;Fre=/^(.*)[\\/]releases[\\/]([^\\/]+)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/});function jW(e){return`npm-${e}`}function tf(e,t="latest"){let r=`${dv}@${t}`;switch(e.kind){case"release_dir":{let n=e.releasesRoot?`${e.releasesRoot}/${jW(t)}`:`<releases>/${jW(t)}`,o=e.supervisor==="systemd"?`point ${e.supervisorName??"kynver-cron-daemon.service"} at the new folder, then \`systemctl --user daemon-reload && systemctl --user restart ${e.supervisorName??"kynver-cron-daemon.service"}\``:e.supervisor==="launchd"?`point the ${e.supervisorName??"Kynver"} launch agent at the new folder, then \`launchctl kickstart -k gui/$(id -u)/${e.supervisorName??"<label>"}\``:"point whatever starts Kynver at the new folder, then restart it";return`npm install --prefix ${n} ${r} then ${o}`}case"checkout":return`cd ${e.packageRoot??"<your Kynver checkout>"} && git pull && npm install && npm run build then restart Kynver`;default:return`npm install -g ${r} then restart Kynver (or restart the computer)`}}var pv=p(()=>{"use strict";ef()});var VW=p(()=>{"use strict"});import{mkdirSync as gUe,readFileSync as Jre,readdirSync as hUe,renameSync as yUe,writeFileSync as kUe}from"node:fs";import GW from"node:path";function qre(){return GW.join(qa(),"runtime")}function Yre(e){return GW.join(e,"summary.json")}function JW(e=qre()){try{let t=JSON.parse(Jre(Yre(e),"utf8"));if(t?.v===1)return t}catch{}return{v:1,attempts:0,succeeded:0,rolledBack:0,failed:0,last:null}}var qW=p(()=>{"use strict";Nd();VW()});function Xre(e=Date.now()){if(rf&&e-rf.at<zre)return rf.report;if(!si){let o=Zp();si={kind:o.kind,supervisor:o.supervisor,can:!o.unsupportedReason,manual:tf(o,"latest")}}let t=JW(),r=t.last,n={v:1,installKind:si.kind,supervisor:si.supervisor,canSelfUpdate:si.can,manualCommand:si.manual,attempts:t.attempts,succeeded:t.succeeded,rolledBack:t.rolledBack,failed:t.failed,last:r?{id:r.id,from:r.fromVersion,to:r.toVersion,phase:r.phase,updatedAt:r.updatedAt,restartAt:r.restartAt??null,healthOk:r.health?r.health.ok:null,message:r.message?r.message.slice(0,400):null}:null};return rf={at:e,report:n},n}function fv(){try{return Xre()}catch{return}}var si,rf,zre,YW=p(()=>{"use strict";ef();pv();qW();si=null,rf=null,zre=3e4});import{mkdirSync as Qre,readFileSync as AUe,renameSync as Zre,writeFileSync as ene}from"node:fs";import{homedir as tne}from"node:os";import mv from"node:path";function rne(e=mv.join(tne(),".kynver","state")){return mv.join(e,"chat-loop.json")}function zW(e,t=rne()){try{Qre(mv.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}`;ene(r,JSON.stringify({v:1,...e}),{mode:384}),Zre(r,t)}catch{}}var XW=p(()=>{"use strict"});import nne from"node:os";function one(e){try{return Pt().report(e)}catch{return null}}function rU(e,t){try{return EB(e,t)}catch{return}}function gv(e=process.env){let t=P(),r=xt(t,e);return jo({boxKind:r,hostLabel:nne.hostname(),config:t,env:e})}async function lne(e,t,r){let n=r.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n.replace(/\/$/,"");if(!e)return null;let o=e.replace(/\/$/,"");if(t){let s=new AbortController,i=setTimeout(()=>s.abort(),nU);try{let a=await fetch(`${o}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${t}`},signal:s.signal});if(a.ok){let l=await a.json().catch(()=>null);if(typeof l?.bridgeUrl=="string"&&l.bridgeUrl.trim())return l.bridgeUrl.trim().replace(/\/$/,"")}}catch{}finally{clearTimeout(i)}}return cne(o)}async function cne(e){let t=new AbortController,r=setTimeout(()=>t.abort(),nU);try{let n=await fetch(`${e}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}",signal:t.signal});if(n.status===401||n.status===400||n.status===403){let o=n.headers.get("content-type")??"";if(o.includes("application/json")||o.includes("json")||(await n.text().catch(()=>"")).trimStart().startsWith("{"))return e}return null}catch{return null}finally{clearTimeout(r)}}function oU(e){return _e()?!0:!!e&&!!cm(e)}async function eU(e=process.env){let t=P(),r=t.agentOsId?.trim(),n=_e();if(!r||!oU(r))return null;let o=await lne(t.apiBaseUrl,n,e);if(!o)return null;let s=po(t),i=t.apiBaseUrl?.replace(/\/$/,"")??o.replace(/\/$/,"");return{bridgeUrl:o.replace(/\/$/,""),agentOsId:r,apiKey:n??"",boxId:gv(e),chatProvider:s,model:Gs(s,t,e),useClaudeOauth:t.chatUseClaudeOauth===!0,auth:new Fd({apiBaseUrl:i,agentOsId:r,boxLabel:()=>gv(e),loadApiKey:_e,loadBoxCredential:()=>cm(r),saveBoxCredential:a=>nS(r,a),clearBoxCredential:oS}),security:new Hd}}function hv(){try{return sS().apiKey}catch{return"none"}}async function une(e,t,r,n){let o=P(),s=po(o),i=await yv(e);if(!i.bearer)return"no_credential";let a=dp(s,bp(o),rU(s,o),e.security?.report({policy:n,auth:i.kind,credentialStore:hv(),folderSandbox:Ek(process.env,o)}),lv(),uv(),fv()),l=one(e.agentOsId);l&&(a.browser.siteLogins=l);let c=i.kind==="box_token"?i.boxId:gv();e.chatProvider=s,e.boxId=c,e.model=Gs(s,o,process.env);let u=new AbortController,d=setTimeout(()=>u.abort(),ine),f=setInterval(()=>{t()&&u.abort()},500);try{let m=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:sne,capabilities:a,claimRetries:r}),signal:u.signal});if(m.status===204)return null;if(m.status===401||m.status===403){let y=await m.text().catch(()=>"");return console.error(JSON.stringify({event:"chat_claim_auth_error",status:m.status,bridgeUrl:e.bridgeUrl,agentOsId:e.agentOsId,authKind:i.kind,detail:y.slice(0,200)})),io(e,i,401),"auth_error"}if(m.status===429)throw new fn(m.status);if(!m.ok)throw new fn(m.status);let g;try{g=await m.json()}catch{throw new fn(502)}let h=wB(g);if(!h)throw new fn(502);return h.turn}catch(m){if(t())return null;throw m}finally{clearTimeout(d),clearInterval(f)}}async function Rt(e,t,r){let n=await yv(e),o=await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,events:r})});return io(e,n,o.status),o.ok}async function tU(e,t,r){return e.security?.noteRejected(r.code),console.error(JSON.stringify({event:"chat_turn_rejected",turnId:t.turnId,requestId:t.requestId??"",code:r.code,...r.detail?{detail:r.detail}:{},reason:r.reason,policy:r.policy,...r.extra??{}})),Za({at:new Date().toISOString(),chat:t.requestId??null,turnId:t.turnId,kind:"tool",engine:"none",access:"off",command:`turn refused: ${r.code}${r.detail?` (${r.detail})`:""}`,folder:"",ok:!1,reason:`turn_rejected_${r.code}`}),await Rt(e,t.turnId,[{seq:0,kind:"error",error:L0(r.code,r.detail)}]).catch(()=>{}),{ok:!1}}async function dne(e,t,r){let n=B0({turnId:t.turnId,agentOsId:t.agentOsId,payload:t.payload},{agentOsId:e.agentOsId,policy:r.policy,nonces:r.nonces,env:r.env,nowSec:r.nowSec});if(!n.ok)return n.code==="replayed"&&n.replay?.state==="in_flight"?(e.security?.noteDuplicateOffer(),console.error(JSON.stringify({event:"chat_turn_duplicate_offer_dropped",turnId:t.turnId,requestId:t.requestId??"",firstSeenAt:n.replay.firstSeenAt,reason:n.reason})),{ok:!1}):tU(e,t,{code:n.code,reason:n.reason,policy:r.policy,...n.replay?{detail:n.replay.state,extra:{firstSeenAt:n.replay.firstSeenAt,firstTurnId:n.replay.turnId}}:{}});n.signed&&n.access?.others==="default"&&console.error(JSON.stringify({event:"chat_turn_non_owner",turnId:t.turnId,requestId:t.requestId??"",agentOsId:e.agentOsId,boxId:e.boxId,userId:n.userId??"",access:"off"}));let o=r.config;if(!o)try{o=P()}catch{o={}}let s=gD({signedAccess:n.access,boxId:e.boxId,agentOsId:e.agentOsId,engine:Qd(e.chatProvider,o,r.env??process.env),local:{chatComputerAccess:o.chatComputerAccess,chatWorkFolders:o.chatWorkFolders},state:zd(r.stateFile),env:r.env,nowSec:r.nowSec});if(!s.ok)return tU(e,t,{code:s.code,detail:s.detail,reason:s.reason,policy:r.policy,extra:{from:Xa(s.from),to:Xa(s.to),signed:n.signed}});s.website&&cD(s.website,{file:r.stateFile});let a={...yk(t.payload),...n.access?{computerAccess:n.access}:{}};return n.access||delete a.computerAccess,n.redelivered&&console.error(JSON.stringify({event:"chat_turn_redelivered",turnId:t.turnId,requestId:t.requestId??""})),{ok:!0,trust:{signed:n.signed,access:n.access},payload:a,redelivered:n.redelivered}}async function pne(e,t){let r=0,n=!1,o=new uo,s=Array.isArray(t.payload?.argv)?t.payload.argv:[],i=await CD(s,a=>{n||o.track(Rt(e,t.turnId,[{seq:r++,kind:"delta",text:a}]).then(l=>(l||(n=!0),l)))},{agentOsId:e.agentOsId,authProof:t.payload?.authProof});await o.drain(),n||(i.refused?await Rt(e,t.turnId,[{seq:r++,kind:"error",error:`command_refused: ${i.refused}`}]).catch(()=>{}):await Rt(e,t.turnId,[{seq:r++,kind:"final",message:{exitCode:i.exitCode,timedOut:i.timedOut}}]).catch(()=>{})),console.error(JSON.stringify({event:"command_turn_done",turnId:t.turnId,argv:s.slice(0,4),exitCode:i.exitCode,timedOut:i.timedOut,refused:i.refused??null}))}function fne(e,t,r,n,o){try{let s=yo({provider:t.chatProvider,config:n,payloadAccess:e.payload.computerAccess,boxId:t.boxId}),i=lD(s.access,{signed:r.signed});if(!i)return;let a=i.from?Xa(i.from.access):"not set",l=Xa(i.to.access),c={at:i.to.at,chat:e.requestId??null,turnId:e.turnId,kind:"access_change",engine:s.engine,access:i.to.access,folder:s.access.workDir,from:a,to:l,source:i.to.source,signed:r.signed,ok:!0};Za({...c,kind:"tool",command:`computer access: ${a} \u2192 ${l} (${i.to.source})`}),o(c),console.error(JSON.stringify({event:"chat_access_changed",turnId:e.turnId,from:a,to:l,source:i.to.source,signed:r.signed}))}catch{}}async function mne(e,t,r){let n=0,o=!1,s=new uo,i=new AbortController,a=t.requestId??"",l=h=>{o||s.track(Rt(e,t.turnId,[{seq:n++,kind:"delta",text:h}]).then(y=>(y||(o=!0,i.abort()),y)))},c=new ln(l),u=Hp({turnId:t.turnId,chat:a||null,send:h=>{o||(c.flush(),s.track(Rt(e,t.turnId,[{seq:n++,kind:"activity",activity:h}]).then(y=>(y||(o=!0,i.abort()),y))))}}),d=e.chatProvider??"anthropic",f=P(),m=bp(f);r&&fne(t,e,r,f,h=>{o||s.track(Rt(e,t.turnId,[{seq:n++,kind:"activity",activity:h}]).then(y=>(y||(o=!0,i.abort()),y)))});try{_b(d,e.useClaudeOauth,process.env,f)}catch(h){let y=dl(t.payload.requestedModel);if(!(y&&m.some(k=>k.provider===y.provider&&k.models.includes(y.model)))){await Rt(e,t.turnId,[{seq:0,kind:"error",error:h instanceof Error?h.message:String(h)}]).catch(()=>{});return}}let g={provider:d,model:e.model};try{let h=await wL({payload:t.payload,catalog:m,primary:{provider:d,model:e.model},onDelta:k=>c.push(k),runTurn:k=>(g={provider:k.provider,model:k.model},RL({...k,signal:i.signal,turnId:t.turnId,requestId:t.requestId,useClaudeOauth:e.useClaudeOauth,config:f,boxId:e.boxId,onActivity:u.sink}))});IB(h.content,yo({provider:g.provider,config:f,payloadAccess:t.payload.computerAccess,boxId:e.boxId}),u),c.close(),await s.drain();let y=n++;if(!await Ro(()=>o?Rt(e,t.turnId,[{seq:y,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):Rt(e,t.turnId,[{seq:y,kind:"final",message:h}]).catch(()=>!1))){console.error(JSON.stringify({event:"chat_turn_final_rejected",requestId:a,turnId:t.turnId,model:g.model,chatProvider:g.provider}));return}console.error(JSON.stringify({event:"chat_turn_done",requestId:a,turnId:t.turnId,model:g.model,chatProvider:g.provider,fallbackReason:h.kynverModel.fallbackReason,activitySteps:u.steps}))}catch(h){c.close(),await s.drain(),o||await Rt(e,t.turnId,[{seq:n++,kind:"error",error:h instanceof Error?h.message:String(h)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",requestId:a,turnId:t.turnId,error:h instanceof Error?h.message:String(h)}))}}async function Sl(e,t){for(let n=0;n<e&&!t();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function sU(e){let t=await eU(),r=()=>oU(P().agentOsId?.trim())&&!!P().agentOsId?.trim();for(t||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:r()?"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)":"machine_not_linked",rediscoverMs:ZW}));!t&&!e.shouldStop();){if(!r()||(await Sl(ZW,e.shouldStop),e.shouldStop()))return;t=await eU()}if(!t||e.shouldStop())return;let n=M0(process.env,P()),o=new $d;t.security&&(t.security.childEnv=await oD().catch(u=>({ok:!1,leaked:[],error:u instanceof Error?u.message:String(u),at:new Date().toISOString()})),t.security.childEnv.ok||console.error(JSON.stringify({event:"chat_child_env_selftest_failed",...t.security.childEnv}))),console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:t.bridgeUrl,agentOsId:t.agentOsId,boxId:t.boxId,model:t.model,chatProvider:t.chatProvider,capabilities:dp(t.chatProvider),useClaudeOauth:t.useClaudeOauth,turnSignature:n,credentialStore:hv(),childEnvSafe:t.security?.childEnv?.ok??null,auth:t.auth?.describe().kind??"api_key"}));let s=0,i=0,a=new $p,l=MB({target:t,capabilities:u=>{let d=P(),f=po(d);return dp(f,bp(d),rU(f,d),t.security?.report({policy:n,auth:u.kind,credentialStore:hv(),folderSandbox:Ek(process.env,d)}),lv(),uv(),fv())},onBeat:u=>zW({pid:process.pid,runtimeVersion:Ge,at:new Date().toISOString(),heartbeatOk:u,chatTurns:Math.max(0,s-i),commandTurns:i})}),c=Promise.resolve();for(;!e.shouldStop();)try{if(s>=ane){await Sl(250,e.shouldStop);continue}let u=await une(t,e.shouldStop,a.snapshot(),n);if(u==="no_credential"){console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:"machine_not_linked"})),await Sl(QW,e.shouldStop);continue}if(u==="auth_error"){a.onAuthError();let d=t.auth?.describe().hasBoxCredential===!0;await Sl(d?5e3:QW,e.shouldStop);continue}if(a.onSuccess(),u){let d=await NB(t,u.turnId);if(!TB(d.outcome)){console.error(JSON.stringify({event:"chat_turn_receipt_rejected",turnId:u.turnId,requestId:u.requestId??null,status:d.status}));continue}d.outcome!=="accepted"&&console.error(JSON.stringify({event:"chat_turn_receipt_unconfirmed",turnId:u.turnId,outcome:d.outcome,status:d.status}));let f=u.payload?.kind;s+=1;let m;if(f==="command"){i+=1;let g=()=>pne(t,u);m=c.then(g,g),c=m.then(()=>{},()=>{})}else{let g=await dne(t,u,{policy:n,nonces:o});if(!g.ok){s-=1;continue}if(o.markStarted(u.turnId),f==="browser"){let h=await yv(t);m=kB({...t,apiKey:h.bearer},{turnId:u.turnId,payload:g.payload})}else f==="agent-tab"?m=IW(h=>Rt(t,u.turnId,h),{turnId:u.turnId,payload:g.payload,boxId:t.boxId}):m=mne(t,{...u,payload:g.payload},g.trust)}m.catch(g=>{console.error(JSON.stringify({event:"chat_turn_execution_crash",turnId:u.turnId,error:g instanceof Error?g.message:String(g)}))}).finally(()=>{s-=1,f==="command"&&(i-=1),f!=="command"&&o.markFinished(u.turnId)})}}catch(u){let{kind:d,consecutive:f,backoffMs:m}=a.onError(u),g=CB(d,f),h=JSON.stringify({event:g.event,level:g.level,error:u instanceof Error?u.message:String(u),kind:d,consecutive:f,retryInMs:m});g.level==="error"?console.error(h):console.log(h),m>0&&await Sl(m,e.shouldStop)}l(),await gB(),console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}var sne,ine,QW,ZW,nU,ane,yv,iU=p(()=>{"use strict";$();Le();T0();Kd();bk();W0();U0();Yd();sD();uD();hD();Qa();tp();Vo();rp();Wk();ED();tl();iM();eb();tb();xb();SL();bB();jb();Gb();Jb();AB();qb();OB();Cp();DB();LB();OW();LW();WW();Vr();YW();XW();Gb();Ki();sne=2e4,ine=32e3,QW=6e4,ZW=5*6e4,nU=5e3,ane=3,yv=$s});import{createHash as gne}from"node:crypto";import{chmodSync as aU,existsSync as hne,mkdirSync as yne,rmSync as lU}from"node:fs";import{createConnection as kne,createServer as bne}from"node:net";import{homedir as vne,userInfo as Rne}from"node:os";import wne from"node:path";function _ne(e,t=process.platform){return t==="win32"?`\\\\.\\pipe\\kynver-site-logins-${gne("sha256").update(`${Rne().username}:${vne()}`).digest("hex").slice(0,16)}`:wne.join(e,"control.sock")}async function xne(e,t){switch(t.op){case"status":return{ok:!0,data:{report:e.report(t.agentOsId),codes:e.listCodeRequests(t.agentOsId)}};case"unlock":{let r=e.store(t.agentOsId),n=e.audit(t.agentOsId);try{let o=await r.unlockWithPassphrase(t.passphrase);return e.unlock(t.agentOsId,o),o.fill(0),n.record({event:"unlock",ok:!0}),{ok:!0}}catch(o){throw n.record({event:"unlock_failed",ok:!1,code:o instanceof J?o.code:"failed"}),o}}case"lock":return e.lock(t.agentOsId),{ok:!0};case"add":{let r=e.key(t.agentOsId);if(!r)return{ok:!1,error:"saved logins are locked in the running Kynver",code:"locked"};let n=e.store(t.agentOsId),o=t.replaceHandle?n.replace(r,t.replaceHandle,t.login):n.add(r,t.login);return e.audit(t.agentOsId).record({event:t.replaceHandle?"replace":"add",ok:!0,handle:o.handle,label:o.label,username:o.username,origin:o.origin}),{ok:!0,data:o}}case"codes":return{ok:!0,data:e.listCodeRequests(t.agentOsId)};case"code":return{ok:!0,data:await e.submitCode(t.id??null,t.code,t.agentOsId)};case"wipe":return{ok:!0,data:{wiped:e.wipe(t.agentOsId)}}}}function Cne(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!="object")return null;let r=t,n=["status","unlock","lock","add","codes","code","wipe"];return typeof r.op!="string"||!n.includes(r.op)||r.op!=="lock"&&(typeof r.agentOsId!="string"||!r.agentOsId.trim())?null:t}async function cU(e){let t=_ne(e.rootDir);if(process.platform!=="win32"){yne(e.rootDir,{recursive:!0,mode:448});try{aU(e.rootDir,448)}catch{}if(hne(t)){if(await Ene(t))return null;lU(t,{force:!0})}}let r=bne(n=>{let o="";n.setEncoding("utf8"),n.setTimeout(12e4,()=>n.destroy()),n.on("data",s=>{if(o+=s,o.length>Sne)return void n.destroy();let i=o.indexOf(`
526
- `);if(i<0)return;let a=Cne(o.slice(0,i));o="";let l=c=>n.end(`${JSON.stringify(c)}
527
- `);if(!a)return l({ok:!1,error:"malformed request"});xne(e,a).then(l).catch(c=>l({ok:!1,error:c instanceof J?c.message:"the request failed",code:c instanceof J?c.code:"failed"}))}),n.on("error",()=>{})});try{await new Promise((n,o)=>{r.once("error",o),r.listen(t,()=>n())})}catch(n){return console.error(JSON.stringify({event:"site_login_control_unavailable",error:n.message.slice(0,200)})),null}if(process.platform!=="win32")try{aU(t,384)}catch{}return{path:t,close:()=>new Promise(n=>{r.close(()=>n()),process.platform!=="win32"&&lU(t,{force:!0})})}}function Ene(e){return new Promise(t=>{let r=kne(e),n=o=>{r.destroy(),t(o)};r.once("connect",()=>n(!0)),r.once("error",()=>n(!1)),setTimeout(()=>n(!1),1e3).unref?.()})}var Sne,uU=p(()=>{"use strict";Nn();Sne=16*1024});function Ine(e){return e.config.browserDisabled===!0?"local_disabled":e.config.browserAutoProvision===!1?"auto_provision_off":!/^(1|true|yes|on)$/i.test(e.env.KYNVER_BROWSER_AUTOPROVISION??"")&&e.config.browserEverEnabled!==!0?"never_enabled":e.resolved.executable?"already_available":Js(e.platform,e.arch)?null:"unsupported_platform"}async function dU(e,t){let r=t.sleep??(n=>new Promise(o=>setTimeout(o,n).unref?.()));for(let n=e;n>0&&!t.shouldStop();n-=1e3)await r(Math.min(1e3,n))}async function pU(e){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.now??Date.now,s=e.log??(l=>console.error(JSON.stringify(l))),i=e.resolve??(()=>go({env:t,platform:r,arch:n})),a=e.loadConfig??P;try{await dU(e.startDelayMs??Ane,e);for(let l=1;l<=Pne&&!e.shouldStop();l+=1){let c=Ine({config:a(),env:t,resolved:i(),platform:r,arch:n});if(c){c!=="never_enabled"&&s({event:"browser_autoprovision_skip",reason:c});return}let u=ZD(ho());if(u>o()&&await dU(u-o(),e),e.shouldStop())return;s({event:"browser_autoprovision_start",attempt:l});try{let d=await(e.provision??lp)({env:t,platform:r,arch:n});s({event:"browser_autoprovision_done",version:d.version});return}catch(d){s({event:"browser_autoprovision_failed",attempt:l,error:d instanceof Error?d.message.slice(0,200):String(d)})}}}catch(l){s({event:"browser_autoprovision_crash",error:l instanceof Error?l.message.slice(0,200):String(l)})}}var Ane,Pne,fU=p(()=>{"use strict";$();fo();ol();cp();Ane=6e4,Pne=5});function kv(e){let t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Dne(e,t){let r=kv(e),n=kv(t);if(!r||!n)return!1;for(let o=0;o<3;o+=1)if(r[o]!==n[o])return r[o]<n[o];return!1}function Mne(e,t,r={}){let n=r.manual??`${nf} then restart Kynver (or restart the computer)`,o=r.selfUpdate===!1?"":'Say "update Kynver" in Kynver chat and it updates itself, or run `kynver update` here. ';return`Kynver on this computer is out of date (installed ${e}, latest ${t}). ${o}By hand: ${n}`}function Lne(){try{let e=Zp();return{manual:tf(e,"latest"),selfUpdate:!e.unsupportedReason}}catch{return{manual:`${nf} then restart Kynver (or restart the computer)`,selfUpdate:!1}}}async function Bne(e={}){let t=e.installed??Ge,r={installed:t,latest:null,outdated:!1,command:nf};if((e.env??process.env).KYNVER_DISABLE_UPDATE_CHECK==="1")return r;let o=new AbortController,s=setTimeout(()=>o.abort(),Tne);try{let a=await(e.fetch??fetch)(One,{signal:o.signal,headers:{accept:"application/json"}});if(!a.ok)return r;let l=await a.json(),c=typeof l?.version=="string"&&kv(l.version)?l.version:null;return c?{installed:t,latest:c,outdated:Dne(t,c),command:nf}:r}catch{return r}finally{clearTimeout(s)}}function gU(e={}){let t=e.log??(s=>console.error(s)),r=null,n=async()=>{let s=await Bne(e);if(s.outdated&&s.latest&&s.latest!==r){r=s.latest;let i=(e.advice??Lne)();t(JSON.stringify({event:"runtime_update_available",installed:s.installed,latest:s.latest,command:i.manual,selfUpdate:i.selfUpdate})),t(Mne(s.installed,s.latest,i))}return s};n().catch(()=>{});let o=setInterval(()=>{n().catch(()=>{})},e.intervalMs??Nne);return o.unref?.(),{stop:()=>clearInterval(o),checkNow:n}}var mU,nf,One,Tne,Nne,hU=p(()=>{"use strict";Vr();pv();ef();mU="@kynver-app/runtime",nf=`npm install -g ${mU}@latest`,One=`https://registry.npmjs.org/${mU}/latest`,Tne=5e3,Nne=360*6e4});var vU={};Lv(vU,{adoptOrAcquireOwnerLease:()=>kU,completeWorker:()=>EP,dispatchRun:()=>Ts,resolveDaemonOwnerKind:()=>yU,runDaemon:()=>bU,runPipelineTick:()=>Ld,sweepRun:()=>md});async function bv(e,t,r){let n=e;for(;n>0&&!t();){let o=Math.min(Kne,n),s=Date.now();await Bl(o);let i=Gm(o,Date.now()-s);if(i!==null){r?.(i);return}n-=o}}function yU(e,t={},r=process.env){return t.ownerKind?t.ownerKind:e.keeperChild===!0||e.keeperChild==="true"?"keeper":r.INVOCATION_ID?.trim()?"systemd":"foreground"}async function kU(e,t,r,n=Vc){return r?r.released||!r.isHeld()||r.metadata.agentOsId!==e?{ok:!1,reason:"owner_conflict",holder:null,remedy:"the owner lease handed to the daemon is not held for this workspace; restart the runtime"}:{ok:!0,lease:r,quarantinedMetadata:null}:n({agentOsId:e,ownerKind:t})}async function bU(e,t={}){let r=sg({hostCapability:t.hostCapability}),n=Qe()?{loaded:0}:hw();n.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...n}));let o=String(e.run||"").trim();o||(console.error(Qm("--run")),process.exit(1));let s=String(e.agentOsId||P().agentOsId||"").trim();s||(console.error(Qm("--agent-os-id")),process.exit(1)),Xo(s).ok||(console.error(im(s)),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1));let a=e.execute!==!1&&e.execute!=="false",l=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):Wne,c=!1,u=0,d=dS(O=>{c||console.error(JSON.stringify({event:"daemon_stop_requested",reason:O,runId:o})),c=!0}),f=await kU(s,yU(e,t),t.ownerLease);if(!f.ok){console.error(JSON.stringify({event:"daemon_start_blocked",reason:"owner_conflict",runId:o,agentOsId:s,holder:f.holder?{ownerKind:f.holder.ownerKind,pid:f.holder.pid,runtimeVersion:f.holder.runtimeVersion,acquiredAt:f.holder.acquiredAt}:null,remedy:f.remedy})),d(),process.exit(1);return}let m=f.lease;_w(m.metadata.ownerKind),yx({admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null,ownerKind:m.metadata.ownerKind});let g={kind:m.metadata.ownerKind,instanceId:m.metadata.instanceId,processStart:m.metadata.processStart,runtimeVersion:m.metadata.runtimeVersion};console.error(JSON.stringify({event:"daemon_owner_lease_acquired",agentOsId:s,ownerKind:m.metadata.ownerKind,instanceId:m.metadata.instanceId,quarantinedStaleMetadata:f.quarantinedMetadata!==null}));let h=dx(o);h.killed.length>0&&console.error(JSON.stringify({event:"daemon_orphaned_worker_descendants_killed",runId:o,orphans:h.killed.map(O=>({worker:O.workerName,workerPid:O.workerPid,pid:O.orphanPid,outcome:O.result.outcome}))}));let y=null,v=O=>{y=O};try{let O=rS();(O.moved.length>0||O.stillInFile.length>0)&&console.error(JSON.stringify({event:"daemon_credentials_store",...O}))}catch(O){console.error(JSON.stringify({event:"daemon_credentials_store_error",error:O instanceof Error?O.message:String(O)}))}let k=q_();k.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:k.resolved?.defaultRepo??null,configPath:k.configPath}));let b=cx(P());b.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:o,agentOsId:s,errors:b.errors})),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:o,agentOsId:s,execute:a,intervalMs:l,boxKind:b.box.boxKind,workerCapSource:b.workerCapSource,maxConcurrentWorkers:b.maxConcurrentWorkers})),gU();let _=rs(),S=new Ud;S.start();let R=new Wd({agentOsId:s,init:{ownerKind:m.metadata.ownerKind,admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null}});S.setTickIsolation(R.mode),console.error(JSON.stringify({event:"daemon_tick_isolation",mode:R.mode,reason:R.reason}));let w=cU(Pt()).catch(()=>null),L=sU({shouldStop:()=>c}).catch(O=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:O instanceof Error?O.message:String(O)}))});pU({shouldStop:()=>c});let N=!1;for(;!c;)try{if(y!==null){let x=y;y=null;let T=m.isHeld();if(console.error(JSON.stringify({event:"daemon_resume_detected",agentOsId:s,gapMs:x,ownerLeaseHeld:T})),!T){console.error(JSON.stringify({event:"daemon_owner_lease_lost",agentOsId:s,runId:o})),process.exitCode=1,c=!0;break}}S.setPhase("heartbeat"),m.renew(),S_({agentOsId:s,runId:o,instructionBundleVersion:Mn(),owner:g}),S.setPhase("runner_credential");let O=await Cc(e.secret?String(e.secret):void 0,s,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});if(!O.ok){N||(N=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:s,reason:O.reason,remedy:`run \`kynver runner credential --agent-os-id ${s}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),S.setPhase("idle"),await bv(l,()=>c,v);continue}N&&(N=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:s}))),S.setPhase("instruction_bundle"),await ix({agentOsId:s,baseUrl:An(e.baseUrl?String(e.baseUrl):void 0),secret:O.secret}),S.setPhase(R.mode==="thread"?"pipeline_tick_thread":"pipeline_tick_inline");let W=await R.runTick({run:o,agentOsId:s,execute:a,...e,secret:typeof e.secret=="string"&&e.secret?e.secret:O.secret},S.report());S.setTickIsolation(W.isolation);let D=W.tick;S.setPhase("tick_log"),console.error(JSON.stringify({event:"daemon_tick",tickIsolation:W.isolation,...D})),S.setPhase("runtime_control");let G=Kr(s),Q=W.inFlightWorkers??Bd(s)??0;if(ww(G,Q)){let x=pc({control:G,supervisor:m.metadata.ownerKind,inFlightWorkers:0,exiting:!0}),T=An(e.baseUrl?String(e.baseUrl):void 0),U=x&&T?await k_({baseUrl:T,agentOsId:s,secret:O.secret},x):!1;console.error(JSON.stringify({event:"daemon_runtime_stopped",agentOsId:s,runId:o,policyVersion:G?.policyVersion??null,requestedBy:G?.requestedByLabel??null,reported:U})),process.exitCode=dc,c=!0;break}if(_.tickEnabled){S.setPhase("cron_tick");let x=eu(o);if(x&&!x.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:x.holderBoxId}));else{let T=await dg({env:_,agentOsIdFilter:s});T.enabled&&(T.fired>0||T.errors>0||T.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...T}))}}D.idle?u++:u=0;let H=Math.floor(is("daemon.maxIdleStreak",Fne)),E=Math.floor(is("daemon.idleIntervalMs",Une)),V=u>=H?E:l;S.setPhase("idle"),await bv(V,()=>c,v)}catch(O){console.error(JSON.stringify({event:"daemon_tick_error",error:O.message})),S.setPhase("idle"),await bv(l,()=>c,v)}S.setPhase("stopping"),await L,await R.close(),S.stop(),await(await w)?.close().catch(()=>{}),Pt().lock();let A=pS(o);A.length>0&&console.error(JSON.stringify({event:"daemon_stop_worker_trees_killed",runId:o,workers:A.map(O=>({worker:O.workerName,pid:O.pid,outcome:O.result.outcome}))})),d(),m.release(),console.error(JSON.stringify({event:"daemon_stop",runId:o,agentOsId:s}))}var Wne,Une,Fne,Kne,vv=p(()=>{"use strict";$();Zm();Y_();ax();Gr();ux();Vm();Oc();Gc();St();Jm();px();Qc();ig();pg();gr();cr();fg();M();P0();gk();O0();iU();Ki();uU();fU();hU();$r();jm();mk();Nu();Sy();Ps();Wne=6e4,Une=5*6e4,Fne=10,Kne=250});var RU=p(()=>{"use strict";Y();No();Ry();Ce();M()});var _l,wU=p(()=>{"use strict";_l=class extends Error{remedy;exitCode;constructor(t,r={}){super(t,r.cause===void 0?void 0:{cause:r.cause}),this.name="OperatorActionableError",this.remedy=r.remedy,this.exitCode=r.exitCode??1}}});import{existsSync as $ne,mkdirSync as Hne}from"node:fs";import jne from"node:path";function Vne(e){let t=typeof e.repo=="string"?e.repo.trim():"";if(t)return t;let r=Ji();return r?r.repo:(_t("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Gne(e){let t=e.repoLabel??"the repo",r=[],n=e.explicitBase?.trim();n&&r.push({ref:n,source:"flag",origin:"--base"});let o=e.envBaseRef?.trim();o&&r.push({ref:o,source:"env",origin:"KYNVER_RUN_BASE_REF"});let s=e.configDefaultBase?.trim();s&&r.push({ref:s,source:"config",origin:"defaultBase in ~/.kynver/config.json"});let i=r[0];if(i){if(e.verifyRef(i.ref))return{base:i.ref,source:i.source};throw new Error([`run base ref "${i.ref}" (from ${i.origin}) does not resolve in ${t}.`,"Fetch it (`git fetch origin`) or fix the override \u2014 refusing to silently use a different base."].join(" "))}if(e.verifyRef("origin/main"))return{base:"origin/main",source:"origin/main"};let a=e.resolveRemoteHeadRef();if(a&&e.verifyRef(a))return{base:a,source:"remote-head",note:`origin/main not found in ${t} \u2014 using the remote default branch ${a}`};throw new Error([`cannot resolve a base ref for a new run in ${t}: origin/main does not exist`,a?`and the remote default branch (${a}) did not verify either.`:"and no remote default branch could be resolved (origin/HEAD unset).",`Run \`git fetch origin\` in ${t}, or pass --base <ref> / set KYNVER_RUN_BASE_REF / set defaultBase in ~/.kynver/config.json.`].join(" "))}function Jne(e){let t=ee(e,["symbolic-ref","--quiet","refs/remotes/origin/HEAD"]);if(t.status===0){let n=t.stdout.trim().replace(/^refs\/remotes\//,"");if(n)return n}let r=ee(e,["ls-remote","--symref","origin","HEAD"]);if(r.status===0){let n=/^ref:\s+refs\/heads\/(\S+)\s+HEAD/m.exec(r.stdout);if(n?.[1])return`origin/${n[1]}`}return null}function qne(e,t){let r=P();try{return Gne({explicitBase:typeof t.base=="string"?t.base:void 0,envBaseRef:process.env.KYNVER_RUN_BASE_REF,configDefaultBase:r.defaultBase,verifyRef:n=>ee(e,["rev-parse","--verify","--quiet",`${n}^{commit}`]).status===0,resolveRemoteHeadRef:()=>Jne(e),repoLabel:e})}catch(n){throw new _l(n.message,{remedy:"Diagnose: run `kynver doctor runner-install`.",cause:n})}}function Rv(e){let t=hP(Vne(e));Yv(t);let r=e.id?Lh(String(e.id)):Nl(String(e.name||"run")),n=j(r);$ne(n)&&Yne(`run already exists: ${r}`),Hne(n,{recursive:!0});let o=qne(t,e);o.note&&console.error(o.note);let s=o.base,i=ce(t,["rev-parse",s]).trim(),a=Wt(),l={id:r,name:String(e.name||r),repo:t,base:s,baseCommit:i,status:"created",createdAt:new Date().toISOString(),workers:{},...a.identity?{boxKind:a.identity.boxKind,runnerId:a.identity.runnerId,harnessRoot:a.identity.harnessRoot}:{}};be(jne.join(n,"run.json"),l);let c={runId:r,runDir:n,repo:t,base:s,baseCommit:i};return console.log(JSON.stringify(c,null,2)),c}function Yne(e){throw new _l(e)}var wv=p(()=>{"use strict";we();Y();RU();M();us();ad();Sn();$();wU()});function SU(e,t){return e.filter(n=>n.repo===t&&!Or.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]??null}var _U=p(()=>{"use strict";we();rn()});var xU=p(()=>{"use strict";gr();ns();ug()});var of=p(()=>{"use strict";gr();cr()});var sf=p(()=>{"use strict"});var Sv=p(()=>{"use strict"});var _v=p(()=>{"use strict";xU();gr();ns();of();cr();sf();Sv()});var CU=p(()=>{"use strict"});var EU=p(()=>{"use strict";of();sf()});var AU=p(()=>{"use strict";cr();gr()});var PU=p(()=>{"use strict";$();at();St();M();pg();CU();EU();cr();of();AU();uc();Ho();ns();_v();sf();Sv();Y()});var IU=p(()=>{"use strict";_v();PU()});var OU=p(()=>{"use strict";Ho();uc();$();cr();fc();Jf();Pi();Y()});function TU(e,t){return SU(e,t)?.id??null}var NU=p(()=>{"use strict";$();Dm();vv();Zm();ig();Gc();wv();Y();_U();us();IU();Hm();Xf();us();tl();OU()});var WU={};Lv(WU,{prepareDesktopRuntime:()=>poe,resolveDesktopRepository:()=>BU});import{spawnSync as DU}from"node:child_process";import{randomBytes as toe}from"node:crypto";import{existsSync as roe,mkdirSync as noe,readFileSync as ooe,realpathSync as MU,statSync as soe,writeFileSync as ioe}from"node:fs";import{homedir as aoe}from"node:os";import Cv from"node:path";function ve(e,t){return{ok:!1,code:e,message:t}}function loe(){return Cv.join(aoe(),".kynver","desktop-binding.json")}function coe(e){if(!roe(e))return null;try{let t=JSON.parse(ooe(e,"utf8"));if(t?.version===1&&typeof t.cloudOrigin=="string"&&typeof t.accountId=="string"&&typeof t.agentOsId=="string"&&typeof t.repo=="string"&&typeof t.runId=="string")return t}catch{}return null}function uoe(e,t){noe(Cv.dirname(e),{recursive:!0}),ioe(e,`${JSON.stringify(t,null,2)}
528
- `,{mode:384})}function LU(e,t){return e===401||e===403?ve("access_denied",`${t} was refused (${e})`):e===0?ve("network",`${t} could not reach Kynver`):ve("server_error",`${t} failed (${e})`)}async function xv(e,t,r,n={}){try{let o=await ut(e,{...n,headers:{...n.headers,Authorization:`Bearer ${t}`}},r),s=await o.json().catch(()=>null);return{status:o.status,body:s}}catch{return{status:0,body:null}}}function doe(e){return(e?.accessibleItems??[]).filter(t=>t.access?.isOwner===!0&&typeof t.agentOs?.id=="string").map(t=>(t.agentOs?.id).trim()).filter(Boolean)}function BU(e,t="git"){let r=DU(t,["--version"],z({encoding:"utf8"}));if(r.error||r.status!==0)return ve("no_git","Git is not installed or not on PATH");let n;try{if(n=MU.native(Cv.resolve(e)),!soe(n).isDirectory())return ve("not_a_repository","The selected path is not a folder")}catch{return ve("not_a_repository","The selected folder does not exist")}let o=DU(t,["rev-parse","--is-bare-repository","--show-toplevel"],z({cwd:n,encoding:"utf8"})),s=(o.stdout??"").trim().split(/\r?\n/);if(o.status!==0||s[0]!=="false"||!s[1])return ve("not_a_repository","The selected folder is not inside a Git working tree");try{return{ok:!0,repo:MU.native(s[1].trim())}}catch{return ve("not_a_repository","The Git working tree root could not be resolved")}}async function poe(e,t={}){let r=t.fetchImpl??fetch,n=t.acquireOwnerLease??Vc,o=t.bindingPath??loe(),s=[],i=or(e.apiBaseUrl);if(!i)return ve("invalid_input","apiBaseUrl is required");let a=gi(i),l=new URL(a).origin;if(e.agentOsId!==void 0&&!Xo(e.agentOsId).ok)return ve("invalid_input","agentOsId is not a valid workspace id");let c;try{c=_e()}catch(S){if(S instanceof ai)return ve("credentials_unavailable","This computer's credentials have not been provided");throw S}if(!c)return ve("credentials_unavailable","This computer is not paired");let u=await xv(`${a}/api/users/me`,c,r);if(u.status!==200)return LU(u.status,"Account lookup");let d=typeof u.body?.id=="string"?u.body.id:"";if(!d)return ve("server_error","Account lookup returned no account id");if(e.expectedAccountId&&e.expectedAccountId!==d)return ve("account_mismatch","The paired credentials belong to a different account");let f=await xv(`${a}/api/agent-os/provision`,c,r,{method:"POST"});!(f.status>=200&&f.status<300)&&f.status!==401&&f.status!==403&&s.push(`workspace self-provision returned ${f.status||"no response"}; continuing with existing access`);let g=await xv(`${a}/api/agent-os`,c,r);if(g.status!==200)return LU(g.status,"Workspace lookup");let h=g.body,y;if(e.agentOsId){if(!doe(h).includes(e.agentOsId))return ve("agent_os_not_owned","That workspace is not owned by the paired account");y=e.agentOsId}else{let S=Tm(h);if(!S?.id)return ve("no_workspace","No workspace owned by this account was found");y=S.id}let v=BU(e.repo,t.gitBinary);if(!v.ok)return v;let k=v.repo,b=await n({agentOsId:y,ownerKind:"desktop"});if(!b.ok)return{ok:!1,code:"owner_conflict",message:b.remedy,holder:b.holder?{ownerKind:b.holder.ownerKind,pid:b.holder.pid,runtimeVersion:b.holder.runtimeVersion,acquiredAt:b.holder.acquiredAt}:null};let _=b.lease;try{We({...P(),apiBaseUrl:a,agentOsId:y,defaultRepo:k});let S=$m(P());s.push(...S.warnings);let R=P().boxId?.trim()??"";if(!R)return _.release(),ve("local_state_error","Box identity could not be established");if(await Mm(jr()),!Te(y))try{let W=await Pn(y,{baseUrl:a,apiKey:c});En(y,W)}catch(W){let D=W.message;if(QS(D)==="access_denied")return _.release(),ve("access_denied","This computer was refused a runner credential");s.push("runner credential mint did not succeed yet; the runtime retries automatically")}let w=coe(o),L=w!==null&&w.cloudOrigin===l&&w.accountId===d&&w.agentOsId===y&&w.repo===k,N="";if(L){let W=TU(Se().filter(D=>D.id===w.runId),k);W&&(N=W)}if(!N){let W=`${Nl("desktop")}-${toe(3).toString("hex")}`;N=Rv({repo:k,name:"desktop",id:W}).runId}uoe(o,{version:1,cloudOrigin:l,accountId:d,agentOsId:y,repo:k,runId:N});let A=Mc(k);A||s.push("the repository has no origin remote; nothing can run until it has one");let{runnerId:O}=De({runId:N});return{ok:!0,prepared:{accountId:d,agentOsId:y,runId:N,repo:k,boxId:R,repoIdentity:A,runnerId:O},lease:_,warnings:s}}catch(S){return _.release(),ve("local_state_error",S.message)}}var UU=p(()=>{"use strict";sr();Dm();Nm();$();St();gr();ns();Gc();Lc();Y();yr();Hm();NU();wv();M()});St();import{pathToFileURL as foe}from"node:url";var $v="credential.persist";function Hv(e,t){let r,n=new Map,o=s=>{r=s.apiKey?.trim()||void 0,n=new Map(Object.entries(s.runnerTokens??{}).map(([i,a])=>[i.trim(),a.trim()]).filter(([i,a])=>i&&a))};return o(e),{kind:"desktop",getApiKey:()=>r,getRunnerToken(s){if(s)return n.get(s);if(n.size===1)return n.values().next().value},persistApiKey(s){let i=s.trim();if(!i)throw new Error("refusing to persist an empty API key");r=i,t({v:1,type:$v,kind:"apiKey",value:i})},persistRunnerToken(s,i){let a=s.trim(),l=i.trim();if(!a||!l)throw new Error("refusing to persist an empty runner token binding");n.set(a,l),t({v:1,type:$v,kind:"runnerToken",agentOsId:a,value:l})},reseed:o}}Oc();Lc();Nn();Pm();var KS=/^lg_[a-z0-9]{6,20}$/,mj=/^cr_[0-9a-f]{12}$/,gj=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Dn=(e,t,r=1)=>typeof e=="string"&&e.length>=r&&e.length<=t&&!e.includes("\0");function ts(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function $S(e){let t=["v","type","id","agentOsId","op"];switch(e.op){case"key":return ts(e,[...t,"key"])??(Dn(e.key,64,40)&&/^[A-Za-z0-9+/]{43}=$/.test(e.key)?{op:"key",key:e.key}:"invalid key");case"list":case"wipe":return ts(e,t)??{op:e.op};case"remove":return ts(e,[...t,"handle"])??(typeof e.handle=="string"&&KS.test(e.handle)?{op:"remove",handle:e.handle}:"invalid handle");case"code":{let r=ts(e,[...t,"requestId","code"]);return r||(e.requestId!==void 0&&!(typeof e.requestId=="string"&&mj.test(e.requestId))?"invalid requestId":Dn(e.code,16)?{op:"code",code:e.code,...e.requestId?{requestId:e.requestId}:{}}:"invalid code")}case"add":{let r=ts(e,[...t,"login","replaceHandle"]);if(r)return r;let n=e.login;return!gj(n)||ts(n,["origin","label","username","password","totp"])||!Dn(n.origin,2048)||!Dn(n.label,pt.maxLabel)||!Dn(n.username,pt.maxUsername)||!Dn(n.password,pt.maxPassword)||n.totp!==void 0&&!Dn(n.totp,pt.maxTotp,0)?"invalid login":e.replaceHandle!==void 0&&!(typeof e.replaceHandle=="string"&&KS.test(e.replaceHandle))?"invalid replaceHandle":{op:"add",login:{origin:n.origin,label:n.label,username:n.username,password:n.password,...n.totp?{totp:n.totp}:{}},...e.replaceHandle?{replaceHandle:e.replaceHandle}:{}}}default:return"unknown site_login op"}}async function HS(e,t,r){let n=e.store(t),o=e.audit(t);switch(r.op){case"key":{let s=Buffer.from(r.key,"base64");try{if(n.exists()&&n.keyMode()==="passphrase")return{state:e.isUnlocked(t)?"unlocked":"locked",keyMode:"passphrase"};if(n.exists())try{n.unlockWithKey(s)}catch(i){if(!(i instanceof J)||i.code!=="bad_key")throw i;e.wipe(t),o.record({event:"wipe",ok:!0,code:"keychain_key_replaced"})}return n.exists()||n.createWithKeychainKey(s),e.unlock(t,s,{keychain:!0}),{state:"unlocked",keyMode:"keychain"}}finally{s.fill(0)}}case"list":return{logins:n.list(),report:e.report(t),codes:e.listCodeRequests(t)};case"add":{let s=e.key(t);if(!s)throw new J("saved logins are locked","locked");let i=r.replaceHandle?n.replace(s,r.replaceHandle,r.login):n.add(s,r.login);return r.login.password="",o.record({event:r.replaceHandle?"replace":"add",ok:!0,handle:i.handle,label:i.label,username:i.username,origin:i.origin}),{login:i}}case"remove":{let s=n.get(r.handle),i=n.remove(r.handle);return i&&s&&o.record({event:"remove",ok:!0,handle:r.handle,label:s.label,username:s.username,origin:s.origin}),{removed:i}}case"code":return await e.submitCode(r.requestId??null,r.code,t);case"wipe":return{wiped:e.wipe(t)}}}Ki();Nn();var moe=1,af=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ii=/^[A-Za-z0-9_-]{1,64}$/,goe=/^[a-z0-9][a-z0-9._-]{0,127}$/i,FU=4096,hoe=4096,yoe=16;function Ev(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function xl(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function Cl(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!e.includes("\0")}function koe(e){if(!Cl(e,2048))return!1;try{let t=new URL(e);return t.username||t.password||t.search||t.hash?!1:t.protocol==="https:"?!0:t.protocol==="http:"&&(t.hostname==="localhost"||t.hostname==="127.0.0.1")}catch{return!1}}function boe(e){if(!Ev(e))return{ok:!1,message:"message must be an object"};if(e.v!==moe)return{ok:!1,message:"unsupported protocol version"};let t=r=>({ok:!1,message:r});switch(e.type){case"credentials":{let r=xl(e,["v","type","apiKey","runnerTokens"]);if(r)return t(r);if(e.apiKey!==void 0&&!Cl(e.apiKey,FU))return t("invalid apiKey");let n;if(e.runnerTokens!==void 0){if(!Ev(e.runnerTokens))return t("invalid runnerTokens");let o=Object.entries(e.runnerTokens);if(o.length>yoe)return t("too many runnerTokens");n={};for(let[s,i]of o){if(!af.test(s)||!Cl(i,FU))return t("invalid runnerTokens entry");n[s]=i}}return{ok:!0,value:{v:1,type:"credentials",...e.apiKey!==void 0?{apiKey:e.apiKey}:{},...n?{runnerTokens:n}:{}}}}case"prepare":{let r=xl(e,["v","type","id","apiBaseUrl","repo","agentOsId","expectedAccountId"]);return r?t(r):typeof e.id!="string"||!ii.test(e.id)?t("invalid id"):koe(e.apiBaseUrl)?Cl(e.repo,hoe)?e.agentOsId!==void 0&&(typeof e.agentOsId!="string"||!af.test(e.agentOsId))?t("invalid agentOsId"):e.expectedAccountId!==void 0&&!Cl(e.expectedAccountId,128)?t("invalid expectedAccountId"):{ok:!0,value:{v:1,type:"prepare",id:e.id,apiBaseUrl:e.apiBaseUrl,repo:e.repo,...e.agentOsId!==void 0?{agentOsId:e.agentOsId}:{},...e.expectedAccountId!==void 0?{expectedAccountId:e.expectedAccountId}:{}}}:t("invalid repo"):t("invalid apiBaseUrl")}case"policy":{let r=xl(e,["v","type","id","policy"]);if(r)return t(r);if(typeof e.id!="string"||!ii.test(e.id))return t("invalid id");let n=bS(e.policy);return typeof n=="string"?t(`invalid policy: ${n}`):{ok:!0,value:{v:1,type:"policy",id:e.id,policy:n}}}case"start":{let r=xl(e,["v","type","id","runId","agentOsId"]);return r?t(r):typeof e.id!="string"||!ii.test(e.id)?t("invalid id"):typeof e.runId!="string"||!goe.test(e.runId)?t("invalid runId"):typeof e.agentOsId!="string"||!af.test(e.agentOsId)?t("invalid agentOsId"):{ok:!0,value:{v:1,type:"start",id:e.id,runId:e.runId,agentOsId:e.agentOsId}}}case"site_login":{if(typeof e.id!="string"||!ii.test(e.id))return t("invalid id");if(typeof e.agentOsId!="string"||!af.test(e.agentOsId))return t("invalid agentOsId");let r=$S(e);return typeof r=="string"?t(r):{ok:!0,value:{v:1,type:"site_login",id:e.id,agentOsId:e.agentOsId,...r}}}case"stop":case"status":{let r=xl(e,["v","type","id"]);return r?t(r):typeof e.id!="string"||!ii.test(e.id)?t("invalid id"):{ok:!0,value:{v:1,type:e.type,id:e.id}}}default:return t("unknown message type")}}function voe(e){return Ev(e)&&typeof e.id=="string"&&ii.test(e.id)?e.id:null}function Roe(e){let t=Fv()?"ready":"awaiting_credentials",r=null,n=null,o=null,s=(l,c,u)=>e.send({v:1,type:"reply",id:l,ok:!1,error:{code:c,message:u}}),i=(l,c)=>e.send({v:1,type:"reply",id:l,ok:!0,result:c});async function a(l){if(dm(l))return;let c=boe(l);if(!c.ok){s(voe(l),"invalid_message",c.message);return}let u=c.value;switch(u.type){case"credentials":{let d={apiKey:u.apiKey,runnerTokens:u.runnerTokens};r?r.reseed(d):(r=Hv(d,f=>e.send(f)),Uv(r)),t==="awaiting_credentials"&&(t="ready"),e.send({v:1,type:"event",name:"credentials_accepted",state:t});return}case"status":{let d=ym();i(u.id,{state:t,prepared:n,policyRevision:d?.revision??null});return}case"policy":{if(!wS(u.policy))return s(u.id,"stale_policy","a newer execution policy is already installed");i(u.id,{policyRevision:u.policy.revision});return}case"prepare":{if(t==="awaiting_credentials")return s(u.id,"credentials_unavailable","credentials have not been provided");if(t!=="ready")return s(u.id,"invalid_state",`cannot prepare while ${t}`);t="preparing";let{v:d,type:f,id:m,...g}=u,h;try{h=await e.prepare(g)}catch(y){return t="ready",s(m,"local_state_error",y.message)}if(!h.ok){t="ready",e.send({v:1,type:"reply",id:m,ok:!1,error:{code:h.code,message:h.message}});return}n=h.prepared,o=h.lease,SS({accountId:n.accountId,agentOsId:n.agentOsId}),t="prepared",i(m,{prepared:n,warnings:h.warnings});return}case"start":{if(t!=="prepared"||!n||!o)return s(u.id,"invalid_state",`cannot start while ${t}`);if(u.runId!==n.runId||u.agentOsId!==n.agentOsId)return s(u.id,"not_prepared","start must name the prepared run and workspace");let d=ym();if(!d)return s(u.id,"policy_required","no approved execution policy has been provided");if(d.accountId!==n.accountId||d.agentOsId!==n.agentOsId)return s(u.id,"policy_mismatch","the execution policy is for another account or workspace");t="running",i(u.id,{state:t});try{await e.runDaemon({run:n.runId,agentOsId:n.agentOsId,execute:!0},{hostCapability:"desktop-supervised",ownerKind:"desktop",ownerLease:o})}finally{o.release();let f=e.daemonExitCode?.()??0;e.send({v:1,type:"event",name:"daemon_exited",state:"stopping",exitCode:f}),e.exit(f)}return}case"site_login":{if(!n||t!=="prepared"&&t!=="running")return s(u.id,"invalid_state",`saved logins are unavailable while ${t}`);if(u.agentOsId!==n.agentOsId)return s(u.id,"workspace_mismatch","saved logins belong to the prepared workspace only");let{v:d,type:f,id:m,agentOsId:g,...h}=u;try{i(m,await HS(Pt(),g,h))}catch(y){let v=y instanceof J?y.code:"failed";s(m,`site_login_${v}`,y instanceof J?y.message:"the saved-login request failed")}return}case"stop":{if(t==="running"){t="stopping",i(u.id,{state:t}),e.requestDaemonStop();return}i(u.id,{state:"stopping"}),o?.release(),e.exit(0);return}}}return{handle:a,get state(){return t}}}async function woe(e=process){if(typeof e.send!="function"||!e.connected){console.error(JSON.stringify({event:"desktop_entry_refused",reason:"no_ipc_channel"})),e.exitCode=2;return}Wv();for(let s of Bv)delete e.env[s];let[{prepareDesktopRuntime:t},{runDaemon:r}]=await Promise.all([Promise.resolve().then(()=>(UU(),WU)),Promise.resolve().then(()=>(vv(),vU))]),n=s=>{if(!e.connected||typeof e.send!="function")throw new Error("desktop IPC channel is closed");e.send(s)},o=Roe({send:n,prepare:s=>t(s),runDaemon:r,requestDaemonStop:()=>{e.emit("message",{type:Ic},void 0)},exit:s=>e.exit(s),daemonExitCode:()=>typeof e.exitCode=="number"?e.exitCode:0});_S(s=>{try{n({v:1,type:"event",name:"claim_denied",state:o.state,taskId:s.taskId,code:s.code,...s.consentRequired?{consentRequired:s.consentRequired}:{}})}catch{}}),Pt().onCodeRequest(({agentOsId:s,...i})=>{try{n({v:1,type:"event",name:"site_login_code_requested",state:o.state,request:i})}catch{}}),e.on("message",s=>{o.handle(s).catch(i=>{console.error(JSON.stringify({event:"desktop_entry_error",error:i.message}))})}),e.on("disconnect",()=>{if(o.state==="running"){e.emit("message",{type:Ic},void 0);return}e.exit(0)}),n({v:1,type:"event",name:"ready",state:o.state})}function Soe(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===foe(e).href}catch{return!1}}Soe()&&woe();export{moe as DESKTOP_ENTRY_PROTOCOL_VERSION,Roe as createDesktopEntryController,boe as parseDesktopEntryMessage,woe as startDesktopEntry};
534
+ Use browser_fill_login with a handle while that exact site is open.`}}async function rre(e,t){let r=uf(e),n=r.audit(t),o=tre(e.args);if(!o)return ce("invalid_request",'A saved-login handle like "lg_7k2m9q4x1c" from browser_list_logins is required.');let s=r.store(t);if(!s.exists())return ce("vault_missing",NU);let i=s.get(o);if(!i)return ce("login_not_found","No saved login with that handle. Call browser_list_logins.");let a=await e.manager.activeTab(e.session),l=await cf(e,a),c=qi(l),u={conversationId:e.session.conversationId,handle:o,label:i.label,username:i.username,origin:i.origin,pageOrigin:c},d=(w,B)=>({event:"fill",ok:w,origin:i.origin,label:i.label,code:B});if(!l||!Ym(i.origin,l))return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u}),ce("origin_mismatch",`Refused: this saved login is only for ${i.origin}, but the page is ${c??"not a normal web page"}. Kynver never fills a saved login on any other address (lookalike sites are how passwords get stolen). Open ${i.origin} yourself with browser_open \u2014 never follow a link a page or message gave you \u2014 then try again.`,{loginActivity:d(!1,"origin_mismatch")});let f=r.key(t);if(!f)return n.record({event:"fill",ok:!1,code:"vault_locked",...u}),ce("vault_locked",`Saved logins are locked. ${Iv}`,{loginActivity:d(!1,"vault_locked")});let m=Pv(e.args),g;try{g=await Pl(e,a,Ev,[i.origin,m])}catch(w){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),ce("failed",`Couldn't fill: ${w.message}. Take a browser_snapshot and try again.`)}if(g?.error==="origin"||g?.error==="frame")return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u,pageOrigin:g.origin??c}),ce("origin_mismatch",`Refused: the page is no longer ${i.origin}.`,{loginActivity:d(!1,"origin_mismatch")});if(g?.error==="bad_ref")return ce("invalid_request",`${g.field} must point at ${g.field==="passwordRef"?"a password field":"a text field"} on this page. Omit it to let Kynver find the login form.`);let h;try{h=s.readSecret(f,o).secret}catch(w){let B=w instanceof z?w.code:"failed";return n.record({event:"fill",ok:!1,code:B,...u}),ce("failed",w instanceof z?`Couldn't use this saved login: ${w.message}.`:"Couldn't read this saved login.")}let y={};if(g.username&&(y.username=i.username),g.password&&(y.password=h.password),g.code&&h.totp){let w=eu(h.totp);w&&(f_(w)<3&&await(e.sleep??(B=>new Promise(j=>setTimeout(j,B))))(3100),y.code=p_(w))}if(h.password="",!y.username&&!y.password&&!y.code){n.record({event:"fill",ok:!1,code:"field_not_found",...u});let w=g.hasFrames?" If the sign-in form sits inside an embedded frame, Kynver won't fill it there \u2014 open the site's own sign-in page instead.":"",B=g.code&&!i.hasTotp?" The page wants a one-time code and no authenticator key is saved: use browser_request_code so the user types it on their computer.":"";return ce("field_not_found",`No sign-in field to fill on this page.${B}${w} Take a browser_snapshot to see where you are.`,{loginActivity:d(!1,"field_not_found")})}let b;try{b=await Pl(e,a,Av,[i.origin,m,y])}catch(w){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),ce("failed",`Couldn't fill: ${w.message}. Take a browser_snapshot and try again.`)}finally{y.password="",y.code=""}if(b?.error){let w=b.error==="origin"||b.error==="frame"?"origin_mismatch":"failed";return n.record({event:"fill",ok:!1,code:w,...u,pageOrigin:b.origin??c}),ce(w==="origin_mismatch"?"origin_mismatch":"failed",`Refused: the page changed to ${b.origin??"another address"} before the fill.`,{loginActivity:d(!1,w)})}let k=b?.filled??[];s.touch(o),n.record({event:"fill",ok:!0,code:null,...u,fields:k});let v=k.map(w=>w==="code"?"authenticator code":w).join(" + "),S=g.code&&!i.hasTotp&&!k.includes("code"),_=`Filled the ${v} for ${DU(i)}.`+(S?" The page also wants a one-time code: use browser_request_code so the user types it on their computer.":""),R={loginActivity:d(!0,null)};if(e.args.submit===!0){let w=await lf(e,a);return w?{...w,...R,text:`${_} ${w.text}`}:(await af(e,a,"Enter"),await Il(e,a,2e3),{...await rr(e,a,`${_} Pressed Enter.`),...R})}return{ok:!0,text:`${_} Continue with browser_click on the sign-in button (or submit:true next time).`,...R}}async function nre(e,t){let r=uf(e),n=r.store(t);if(!n.exists())return ce("vault_missing","Saved logins aren't set up on this computer yet. Ask the user to run `kynver logins setup` there first.");let o=r.key(t);if(!o)return ce("vault_locked",`Saved logins are locked. ${Iv}`);let s=await e.manager.activeTab(e.session),i=await cf(e,s),a=qi(i);if(!a||!a.startsWith("https://"))return ce("url_refused","Only logins typed on an https:// site can be saved.");let l;try{l=await Pl(e,s,OU,[a,Pv(e.args)])}catch(m){return ce("failed",`Couldn't read the sign-in form: ${m.message}.`)}if(l?.error)return ce("failed","The page changed before the login could be saved. Try again.");let c=l?.password??"",u=typeof e.args.username=="string"?e.args.username.trim():"",d=(l?.username??"").trim()||u;if(!c)return ce("field_not_found","There's no typed password on this page to save. Ask the user to type their username and password into the sign-in form (without pressing Log in yet), then call browser_save_login again.");if(!d)return ce("field_not_found","No username on this page \u2014 pass the username (it isn't secret) with browser_save_login.");let f=typeof e.args.label=="string"&&e.args.label.trim()?e.args.label.trim().slice(0,80):`${new URL(a).hostname.replace(/^www\./,"")} \u2013 ${d}`.slice(0,80);try{let m=n.list().find(h=>h.origin===a&&h.username===d),g=m?n.replace(o,m.handle,{origin:a,label:m.label,username:d,password:c}):n.add(o,{origin:a,label:f,username:d,password:c});return r.audit(t).record({event:m?"replace":"save",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,conversationId:e.session.conversationId}),{ok:!0,text:`${m?"Updated":"Saved"} the login ${DU(g)} as ${g.handle}. It is stored encrypted on this computer only.`,loginActivity:{event:"save",ok:!0,origin:g.origin,label:g.label}}}catch(m){return ce("failed",m instanceof z?`Couldn't save: ${m.message}.`:"Couldn't save this login.")}}async function ore(e,t){let r=uf(e),n=await e.manager.activeTab(e.session),o=await cf(e,n),s=qi(o);if(!s)return ce("url_refused","Open the site's verification page first.");let i=Pv(e.args),a;try{a=await Pl(e,n,Ev,[s,i])}catch(d){return ce("failed",`Couldn't read the page: ${d.message}.`)}if(a?.error==="bad_ref")return ce("invalid_request","codeRef must point at a text field on this page.");if(a?.error||!a?.code)return ce("field_not_found","No verification-code field on this page. Take a browser_snapshot and pass its ref as codeRef.");let l=typeof e.args.prompt=="string"&&e.args.prompt.trim()?e.args.prompt.trim().slice(0,120):`Verification code for ${new URL(s).hostname}`,c=e.session.conversationId,u=r.addCodeRequest({agentOsId:t,conversationId:c,origin:s,prompt:l,fill:async d=>{let f=await cf(e,n);if(!Ym(s,f))return{ok:!1,text:`The page is no longer ${s}, so the code was not typed.`};try{let m=await Pl(e,n,Av,[s,i,{code:d}]);return m?.error||!m?.filled?.includes("code")?{ok:!1,text:"The code field is gone, so the code was not typed."}:{ok:!0,text:`Typed the code into ${s}.`}}catch{return{ok:!1,text:"The page changed, so the code was not typed."}}}});return{ok:!0,text:`Waiting for the user to enter the code (request ${u.id}, expires in ${Math.round(u.expiresInSec/60)} min). Tell them to enter it on their computer \u2014 in the Kynver desktop app, or by running \`kynver logins code\` in a terminal. Kynver types it straight into this page; never ask for the code in chat. After they say it's done, call browser_snapshot.`,codeRequest:u,loginActivity:{event:"code_request",ok:!0,origin:s}}}async function MU(e,t){let r=t.agentOsId?.trim();if(!r)return ce("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");switch(e){case"list_logins":return Ov(t.args,r,uf(t));case"fill_login":return rre(t,r);case"save_login":return nre(t,r);case"request_code":return ore(t,r)}}var Iv,NU,LU=p(()=>{"use strict";xv();TU();zm();zi();Un();Xm();Iv="Ask the user to unlock their saved logins on their computer (run `kynver logins unlock` in a terminal, or open the Kynver desktop app). Never ask for the passphrase or a password in chat.",NU="No saved logins on this computer yet. The user can add one on their computer with `kynver logins add` (or the Kynver desktop app), or sign in once in the browser window and let you save it with browser_save_login."});var df,BU=p(()=>{"use strict";ai();df=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.idleMs=t.idleMs??fU}deps;hosts=new Map;sessions=new Map;now;idleMs;has(t){return this.sessions.has(t)}get sessionCount(){return this.sessions.size}peek(t){return this.sessions.get(t)??null}async getOrCreate(t,r){let n=this.sessions.get(t);if(n&&n.mode===r&&!n.host.conn.closed)return this.touch(n),n;n&&await this.close(t);let o=await this.getHost(r),s={conversationId:t,mode:r,host:o,tabs:[],activeTargetId:null,actionTimes:[],idleTimer:null};return this.sessions.set(t,s),this.touch(s),s}recordAction(t){let r=this.now();return t.actionTimes=t.actionTimes.filter(n=>r-n<mU),t.actionTimes.length>=gU?!1:(t.actionTimes.push(r),this.touch(t),!0)}touch(t){t.idleTimer&&clearTimeout(t.idleTimer),t.idleTimer=setTimeout(()=>{this.close(t.conversationId)},this.idleMs),t.idleTimer.unref?.()}async activeTab(t){let r=t.tabs.find(n=>n.targetId===t.activeTargetId);return r||(t.tabs.length>0?(t.activeTargetId=t.tabs[t.tabs.length-1].targetId,t.tabs[t.tabs.length-1]):this.newTab(t,"about:blank"))}async newTab(t,r){if(t.tabs.length>=Rv)throw new Error(`tab limit reached (${Rv}) \u2014 close a tab first`);let{conn:n}=t.host,o=await n.send("Target.createTarget",{url:r}),s=String(o.targetId??"");return this.adoptTarget(t,s)}async adoptTarget(t,r){let{conn:n}=t.host,o=await n.send("Target.attachToTarget",{targetId:r,flatten:!0}),s=String(o.sessionId??"");await n.send("Page.enable",{},{sessionId:s}),await n.send("Runtime.enable",{},{sessionId:s});let i={targetId:r,sessionId:s};return t.tabs.push(i),t.activeTargetId=r,i}async closeTab(t,r){t.tabs=t.tabs.filter(n=>n.targetId!==r),t.activeTargetId===r&&(t.activeTargetId=t.tabs[t.tabs.length-1]?.targetId??null),await t.host.conn.send("Target.closeTarget",{targetId:r}).catch(()=>{})}async close(t){let r=this.sessions.get(t);if(!r)return!1;this.sessions.delete(t),r.idleTimer&&clearTimeout(r.idleTimer);for(let o of[...r.tabs])await r.host.conn.send("Target.closeTarget",{targetId:o.targetId}).catch(()=>{});return r.tabs=[],[...this.sessions.values()].some(o=>o.host===r.host)||await this.releaseHost(r.mode,r.host),!0}async closeAll(){for(let t of[...this.sessions.keys()])await this.close(t)}async getHost(t){let r=this.hosts.get(t);if(r){let o=await r.catch(()=>null);if(o&&!o.conn.closed)return o;this.hosts.delete(t)}let n=this.deps.connectHost(t);this.hosts.set(t,n);try{let o=await n;return o.conn.onClose(()=>{this.hosts.get(t)===n&&this.hosts.delete(t)}),o}catch(o){throw this.hosts.delete(t),o}}async releaseHost(t,r){if(this.hosts.delete(t),t==="dedicated"){await r.conn.send("Browser.close",{},{timeoutMs:3e3}).catch(()=>{});try{r.child?.kill()}catch{}}r.conn.close()}}});var nr,sre,Ol,UU=p(()=>{"use strict";nr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="CdpError"}code},sre=e=>new WebSocket(e),Ol=class e{constructor(t){this.socket=t;t.addEventListener("message",n=>this.onMessage(n.data));let r=()=>this.markClosed();t.addEventListener("close",r),t.addEventListener("error",r)}socket;nextId=1;pending=new Map;listeners=new Set;closedFlag=!1;closeHandlers=new Set;static async connect(t,r={}){let n=(r.socketFactory??sre)(t);return await new Promise((o,s)=>{let i=setTimeout(()=>s(new nr("CDP connect timed out")),r.timeoutMs??1e4);n.addEventListener("open",()=>{clearTimeout(i),o()}),n.addEventListener("error",()=>{clearTimeout(i),s(new nr("CDP connect failed"))})}),new e(n)}static fromOpenSocket(t){return new e(t)}get closed(){return this.closedFlag}onClose(t){this.closeHandlers.add(t)}send(t,r={},n={}){if(this.closedFlag)return Promise.reject(new nr("browser connection closed"));let o=this.nextId++,s={id:o,method:t,params:r};return n.sessionId&&(s.sessionId=n.sessionId),new Promise((i,a)=>{let l=setTimeout(()=>{this.pending.delete(o),a(new nr(`${t} timed out`))},n.timeoutMs??3e4);this.pending.set(o,{resolve:i,reject:a,timer:l});try{this.socket.send(JSON.stringify(s))}catch(c){clearTimeout(l),this.pending.delete(o),a(new nr(c instanceof Error?c.message:String(c)))}})}on(t){return this.listeners.add(t),()=>this.listeners.delete(t)}waitFor(t,r){return new Promise((n,o)=>{let s=setTimeout(()=>{i(),o(new nr("timed out waiting for the page"))},r),i=this.on(a=>{t(a)&&(clearTimeout(s),i(),n(a))})})}close(){try{this.socket.close()}catch{}this.markClosed()}markClosed(){if(!this.closedFlag){this.closedFlag=!0;for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(new nr("browser connection closed"));this.pending.clear();for(let t of this.closeHandlers)t()}}onMessage(t){let r;try{r=JSON.parse(typeof t=="string"?t:String(t))}catch{return}if(typeof r.id=="number"){let n=this.pending.get(r.id);if(!n)return;this.pending.delete(r.id),clearTimeout(n.timer),r.error?n.reject(new nr(r.error.message??"CDP error",r.error.code)):n.resolve(r.result??{});return}if(typeof r.method=="string"){let n={method:r.method,params:r.params??{},...r.sessionId?{sessionId:r.sessionId}:{}};for(let o of[...this.listeners])o(n)}}}});import{existsSync as ire,readFileSync as WU}from"node:fs";function li(e,t){return e==="linux"?t==="x64"?"linux64":null:e==="darwin"?t==="arm64"?"mac-arm64":"mac-x64":e==="win32"?t==="ia32"?"win32":"win64":null}function FU(e,t){try{return e(t)}catch{return""}}function Tl(e=process.env,t=process.platform,r={}){if(t!=="linux")return!1;if(e.WSL_DISTRO_NAME?.trim()||e.WSL_INTEROP?.trim())return!0;let n=r.readFile??(o=>WU(o,"utf8"));return/microsoft|wsl/i.test(FU(n,"/proc/version"))}function are(e=process.env,t=process.platform,r={}){if(t!=="linux")return{available:!0,wslg:!1};let n=r.exists??ire,o=Tl(e,t,r)&&n("/mnt/wslg");return{available:!!(e.DISPLAY?.trim()||e.WAYLAND_DISPLAY?.trim()),wslg:o}}function pf(e=process.env,t=process.platform){return/^(1|true|yes|on)$/i.test(e.KYNVER_BROWSER_HEADLESS??"")?!0:!are(e,t).available}function lre(e){let t={};for(let l of e.split(/\r?\n/)){let c=/^([A-Z_]+)=(.*)$/.exec(l.trim());c&&(t[c[1]]=c[2].replace(/^["']|["']$/g,""))}let r=(t.ID??"").toLowerCase(),n=`${r} ${(t.ID_LIKE??"").toLowerCase()}`,o=t.VERSION_ID??"",s="unknown";/\b(debian|ubuntu)\b/.test(n)?s="apt":/\b(fedora|rhel|centos)\b/.test(n)?s="dnf":/\b(suse|opensuse)\b/.test(n)?s="zypper":/\barch\b/.test(n)?s="pacman":/\balpine\b/.test(n)&&(s="apk");let i=Number.parseFloat(o),a=s==="apt"&&(r==="ubuntu"&&Number.isFinite(i)&&i>=24||r==="debian"&&Number.isFinite(i)&&i>=13);return{id:r,versionId:o,family:s,t64:a}}function $U(e={}){let t=e.readFile??(r=>WU(r,"utf8"));return lre(FU(t,"/etc/os-release"))}var _o=p(()=>{"use strict"});import{existsSync as cre,readdirSync as ure}from"node:fs";import{homedir as dre}from"node:os";import xo from"node:path";function ff(e=process.env){return e.KYNVER_BROWSER_INSTALL_DIR?.trim()||xo.join(dre(),".kynver","browsers")}function KU(e,t=process.env){return xo.join(ff(t),`chrome-${e}`)}function mf(e,t){let r=xo.join(e,`chrome-${t}`);return t==="linux64"?xo.join(r,"chrome"):t==="win32"||t==="win64"?xo.join(r,"chrome.exe"):xo.join(r,"Google Chrome for Testing.app","Contents","MacOS","Google Chrome for Testing")}function pre(e,t){let r=e.split(".").map(o=>Number.parseInt(o,10)||0),n=t.split(".").map(o=>Number.parseInt(o,10)||0);for(let o=0;o<Math.max(r.length,n.length);o+=1){let s=(r[o]??0)-(n[o]??0);if(s!==0)return s}return 0}function gf(e,t=process.env,r={}){let n=r.exists??cre,o=r.listDir??(l=>ure(l)),s=ff(t),i;try{i=o(s)}catch{return null}let a=i.map(l=>/^chrome-(\d+(?:\.\d+){1,3})$/.exec(l)?.[1]).filter(l=>!!l).sort(pre).reverse();for(let l of a){let c=xo.join(s,`chrome-${l}`),u=mf(c,e);if(n(u))return{executable:u,version:l,installDir:c}}return null}var Tv=p(()=>{"use strict"});import{existsSync as fre,readdirSync as mre}from"node:fs";import{homedir as gre}from"node:os";import Ur from"node:path";function hre(e,t,r=gre()){return e==="win32"?[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA].filter(o=>typeof o=="string"&&o.length>0).flatMap(o=>[Ur.join(o,"Google","Chrome","Application","chrome.exe"),Ur.join(o,"Microsoft","Edge","Application","msedge.exe"),Ur.join(o,"Chromium","Application","chrome.exe")]):e==="darwin"?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",Ur.join(r,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),Ur.join(r,"Applications/Chromium.app/Contents/MacOS/Chromium")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome","/usr/bin/chromium","/usr/bin/chromium-browser","/usr/lib/chromium/chromium","/snap/bin/chromium","/usr/bin/microsoft-edge","/usr/bin/microsoft-edge-stable","/opt/microsoft/msedge/msedge","/var/lib/flatpak/exports/bin/com.google.Chrome","/var/lib/flatpak/exports/bin/org.chromium.Chromium",Ur.join(r,".local/share/flatpak/exports/bin/com.google.Chrome"),Ur.join(r,".local/share/flatpak/exports/bin/org.chromium.Chromium"),...HU.map(n=>Ur.join(r,".local/bin",n))]}function yre(e,t,r){let n=(e.PATH??"").split(":").filter(o=>o&&!(r&&o.startsWith("/mnt/")));for(let o of HU)for(let s of n){let i=Ur.join(s,o);if(t(i))return i}return null}function Co(e={}){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.exists??fre,s=e.config??A(),i=null,a=t.KYNVER_BROWSER_CHROME_PATH?.trim()||s.browserChromePath?.trim()||"";if(a){if(o(a))return{executable:a,source:"configured",version:null,configuredMissing:i};i=a}let l=hre(r,t,e.home).find(u=>o(u));if(l)return{executable:l,source:"system",version:null,configuredMissing:i};if(r==="linux"){let u=yre(t,o,Tl(t,r,{readFile:e.readFile}));if(u)return{executable:u,source:"system",version:null,configuredMissing:i}}let c=li(r,n);if(c){let u=s.browserManaged;if(u?.executable&&u.platform===c&&o(u.executable))return{executable:u.executable,source:"managed",version:u.version??null,configuredMissing:i};let d=gf(c,t,{exists:o,listDir:e.listDir??(f=>mre(f))});if(d)return{executable:d.executable,source:"managed",version:d.version,configuredMissing:i}}return{executable:null,source:"none",version:null,configuredMissing:i}}var HU,Nl=p(()=>{"use strict";K();_o();Tv();HU=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","microsoft-edge-stable"]});import{createWriteStream as kre}from"node:fs";import{rm as bre}from"node:fs/promises";function wre(e,t){let r=e?.channels?.Stable;if(!r||typeof r.version!="string"||!/^\d+(\.\d+){1,3}$/.test(r.version))return null;let n=Array.isArray(r.downloads?.chrome)?r.downloads.chrome:[];for(let o of n){let s=o;if(s.platform===t&&typeof s.url=="string"&&s.url.startsWith(VU))return{version:r.version,url:s.url}}return null}async function GU(e,t=fetch){let r=await t(vre,{signal:AbortSignal.timeout(2e4)});if(!r.ok)throw new Error(`Chrome for Testing index returned HTTP ${r.status}`);let n=wre(await r.json(),e);if(!n)throw new Error(`No stable Chrome for Testing build is published for ${e}`);return n}async function JU(e,t,r={}){let n=r.minBytes??Rre;if(!e.startsWith(VU))throw new Error("refusing to download from an unexpected host");let s=await(r.fetchFn??fetch)(e,{signal:AbortSignal.timeout(r.timeoutMs??15*6e4)});if(!s.ok||!s.body)throw new Error(`browser download returned HTTP ${s.status}`);let i=s.headers.get("content-length"),a=i?Number.parseInt(i,10):null;if(a!==null&&(a<n||a>jU))throw new Error(`browser download has an unexpected size (${a} bytes)`);let l=kre(t),c=0;try{let u=s.body.getReader();for(;;){let{done:d,value:f}=await u.read();if(d)break;if(c+=f.byteLength,c>jU)throw new Error("browser download is larger than expected");l.write(f)||await new Promise(m=>l.once("drain",()=>m())),r.onProgress?.({receivedBytes:c,totalBytes:a})}if(await new Promise((d,f)=>l.end(m=>m?f(m):d())),a!==null&&c!==a)throw new Error(`browser download was cut short (${c} of ${a} bytes)`);if(c<n)throw new Error(`browser download is too small (${c} bytes)`);return c}catch(u){throw l.destroy(),await bre(t,{force:!0}).catch(()=>{}),u}}var vre,VU,Rre,jU,qU=p(()=>{"use strict";vre="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json",VU="https://storage.googleapis.com/chrome-for-testing-public/",Rre=20*1024*1024,jU=600*1024*1024});function Dl(e){let t=new Set;for(let r of e.matchAll(/^\s*(\S+\.so[\w.]*)\s*=>\s*not found/gm))t.add(r[1]);for(let r of e.matchAll(/error while loading shared libraries:\s*(\S+?\.so[\w.]*)\s*:/g))t.add(r[1]);return[...t].sort()}function _re(e){return{apt:e.t64?1:0,dnf:2,zypper:3,pacman:4,apk:5,unknown:null}[e.family]}function xre(e,t){let r=_re(t);if(r===null)return[];let n=new Set;for(let o of e){let s=Sre.find(([i])=>i.test(o));s&&n.add(s[1][r])}return[...n].sort()}function Cre(e,t){if(e.length===0)return null;switch(t.family){case"apt":return["apt-get","install","-y","--no-install-recommends",...e];case"dnf":return["dnf","install","-y",...e];case"zypper":return["zypper","--non-interactive","install",...e];case"pacman":return["pacman","-S","--noconfirm","--needed",...e];case"apk":return["apk","add",...e];default:return null}}function YU(e,t){let r=xre(e,t),n=Cre(r,t),o=t.family==="apt"?"sudo apt-get update && ":"";return n?`The browser needs system libraries this computer is missing. Run: ${o}sudo ${n.join(" ")} \u2014 or \`kynver browser install --deps\` if you have passwordless sudo.`:`The browser needs system libraries this computer is missing (${e.join(", ")}). Install them with your distribution's package manager, then try again.`}var Sre,hf=p(()=>{"use strict";Sre=[[/^lib(nss3|nssutil3|smime3|ssl3)\.so/,["libnss3","libnss3","nss","mozilla-nss","nss","nss"]],[/^libnspr4\.so/,["libnspr4","libnspr4","nspr","mozilla-nspr","nspr","nspr"]],[/^libatk-1\.0\.so/,["libatk1.0-0","libatk1.0-0t64","atk","libatk-1_0-0","at-spi2-core","at-spi2-core"]],[/^libatk-bridge-2\.0\.so/,["libatk-bridge2.0-0","libatk-bridge2.0-0t64","at-spi2-atk","libatk-bridge-2_0-0","at-spi2-core","at-spi2-core"]],[/^libatspi\.so/,["libatspi2.0-0","libatspi2.0-0t64","at-spi2-core","libatspi0","at-spi2-core","at-spi2-core"]],[/^libcups\.so/,["libcups2","libcups2t64","cups-libs","libcups2","libcups","cups-libs"]],[/^libdrm\.so/,["libdrm2","libdrm2","libdrm","libdrm2","libdrm","libdrm"]],[/^libgbm\.so/,["libgbm1","libgbm1","mesa-libgbm","libgbm1","mesa","mesa-gbm"]],[/^libxkbcommon\.so/,["libxkbcommon0","libxkbcommon0","libxkbcommon","libxkbcommon0","libxkbcommon","libxkbcommon"]],[/^libXcomposite\.so/,["libxcomposite1","libxcomposite1","libXcomposite","libXcomposite1","libxcomposite","libxcomposite"]],[/^libXdamage\.so/,["libxdamage1","libxdamage1","libXdamage","libXdamage1","libxdamage","libxdamage"]],[/^libXfixes\.so/,["libxfixes3","libxfixes3","libXfixes","libXfixes3","libxfixes","libxfixes"]],[/^libXrandr\.so/,["libxrandr2","libxrandr2","libXrandr","libXrandr2","libxrandr","libxrandr"]],[/^libXext\.so/,["libxext6","libxext6","libXext","libXext6","libxext","libxext"]],[/^libX11\.so/,["libx11-6","libx11-6","libX11","libX11-6","libx11","libx11"]],[/^libxcb\.so/,["libxcb1","libxcb1","libxcb","libxcb1","libxcb","libxcb"]],[/^libpango-1\.0\.so/,["libpango-1.0-0","libpango-1.0-0","pango","libpango-1_0-0","pango","pango"]],[/^libcairo\.so/,["libcairo2","libcairo2","cairo","libcairo2","cairo","cairo"]],[/^libasound\.so/,["libasound2","libasound2t64","alsa-lib","libasound2","alsa-lib","alsa-lib"]],[/^libgtk-3\.so/,["libgtk-3-0","libgtk-3-0t64","gtk3","libgtk-3-0","gtk3","gtk+3.0"]],[/^lib(glib|gio|gobject)-2\.0\.so/,["libglib2.0-0","libglib2.0-0t64","glib2","libglib-2_0-0","glib2","glib"]],[/^libdbus-1\.so/,["libdbus-1-3","libdbus-1-3","dbus-libs","libdbus-1-3","dbus","dbus-libs"]],[/^libexpat\.so/,["libexpat1","libexpat1","expat","libexpat1","expat","expat"]],[/^libudev\.so/,["libudev1","libudev1","systemd-libs","libudev1","systemd-libs","eudev-libs"]]]});import{spawnSync as Ere}from"node:child_process";function Ire(e){return/(\d+\.\d+\.\d+\.\d+)/.exec(e)?.[1]??null}function Pre(e,t=process.platform,r=Are){let n=new Set;if(t==="linux"){let s=r("ldd",[e],{encoding:"utf8",timeout:1e4});if(!s.error)for(let i of Dl(`${s.stdout??""}
535
+ ${s.stderr??""}`))n.add(i)}let o=null;if(t!=="win32"){let s=r(e,["--version"],{encoding:"utf8",timeout:1e4}),i=`${s.stdout??""}
536
+ ${s.stderr??""}`;for(let a of Dl(i))n.add(a);s.status===0&&(o=Ire(i))}return{version:o,missingLibs:[...n].sort()}}function zU(e,t=()=>Pre(e),r=Date.now){let n=Nv.get(e);if(n&&r()-n.at<Ore)return n.health;let o=t();return Nv.set(e,{at:r(),health:o}),o}function XU(){Nv.clear()}var Are,Ore,Nv,Dv=p(()=>{"use strict";hf();Are=(e,t,r)=>Ere(e,t,r);Ore=10*6e4,Nv=new Map});import{chmodSync as Tre,mkdirSync as Mv,symlinkSync as Nre,writeFileSync as Dre}from"node:fs";import ci from"node:path";import{crc32 as Mre,inflateRawSync as Lre}from"node:zlib";function Fre(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(e.readUInt32LE(r)===Bre)return r;throw new Error("not a zip archive (no end-of-central-directory record)")}function $re(e){let t=Fre(e),r=e.readUInt16LE(t+10),n=e.readUInt32LE(t+16);if(r===65535||n===4294967295)throw new Error("zip64 archives are not supported");let o=[],s=n;for(let i=0;i<r;i+=1){if(s+46>e.length||e.readUInt32LE(s)!==Ure)throw new Error("corrupt zip central directory");let a=e.readUInt16LE(s+4)>>8,l=e.readUInt16LE(s+28),c=e.readUInt16LE(s+30),u=e.readUInt16LE(s+32),d=e.readUInt32LE(s+38);o.push({name:e.subarray(s+46,s+46+l).toString("utf8"),method:e.readUInt16LE(s+10),crc:e.readUInt32LE(s+16),compressedSize:e.readUInt32LE(s+20),size:e.readUInt32LE(s+24),localHeaderOffset:e.readUInt32LE(s+42),unixMode:a===3?d>>>16&65535:null}),s+=46+l+c+u}return o}function Kre(e,t){let r=t.localHeaderOffset;if(e.readUInt32LE(r)!==Wre)throw new Error(`corrupt zip entry ${t.name}`);let n=r+30+e.readUInt16LE(r+26)+e.readUInt16LE(r+28),o=e.subarray(n,n+t.compressedSize),s;if(t.method===0)s=Buffer.from(o);else if(t.method===8)s=Lre(o);else throw new Error(`unsupported zip compression method ${t.method} (${t.name})`);if(s.length!==t.size||Mre(s)>>>0!==t.crc>>>0)throw new Error(`zip entry failed its integrity check: ${t.name}`);return s}function QU(e,t){let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-zA-Z]:/.test(r))throw new Error(`unsafe zip path: ${t}`);let n=ci.resolve(e,r),o=ci.resolve(e);if(n!==o&&!n.startsWith(o+ci.sep))throw new Error(`unsafe zip path: ${t}`);return n}function ZU(e,t,r=process.platform){Mv(t,{recursive:!0});let n=0;for(let o of $re(e)){let s=QU(t,o.name);if(o.name.endsWith("/")){Mv(s,{recursive:!0});continue}Mv(ci.dirname(s),{recursive:!0});let i=Kre(e,o);if(o.unixMode!==null&&(o.unixMode&Hre)===jre&&r!=="win32"){let a=i.toString("utf8");QU(t,ci.posix.join(ci.posix.dirname(o.name.replace(/\\/g,"/")),a)),Nre(a,s)}else Dre(s,i),o.unixMode!==null&&r!=="win32"&&Tre(s,o.unixMode&511||420);n+=1}return n}var Bre,Ure,Wre,Hre,jre,eW=p(()=>{"use strict";Bre=101010256,Ure=33639248,Wre=67324752;Hre=61440,jre=40960});import{closeSync as tW,existsSync as Lv,mkdirSync as Vre,openSync as rW,readFileSync as Gre,renameSync as Jre,rmSync as ui,statSync as qre,chmodSync as Yre}from"node:fs";import Bv from"node:path";function Eo(){return{...Bt}}function sW(e=Bt){return e.state!=="failed"||e.failedAt===null?0:e.failedAt+nW[Math.min(e.attempts-1,nW.length-1)]}function iW(e=Bt){return e.totalBytes&&e.totalBytes>0?`${Math.min(99,Math.floor(e.receivedBytes/e.totalBytes*100))}% of ${Math.round(e.totalBytes/1024/1024)} MB`:e.receivedBytes>0?`${Math.round(e.receivedBytes/1024/1024)} MB so far`:"starting"}function Xre(e){let t=A();Fe({...t,browserManaged:{version:e.version,platform:e.platform,executable:e.executable,installedAt:new Date().toISOString()}})}function Qre(e,t){ZU(Gre(e),t)}function Zre(e,t){try{return tW(rW(e,"wx")),!0}catch{try{if(t-qre(e).mtimeMs>zre)return ui(e,{force:!0}),tW(rW(e,"wx")),!0}catch{}return!1}}async function ene(e,t){let r=t.env??process.env,n=t.now??Date.now,o=t.sleep??(a=>new Promise(l=>setTimeout(l,a))),s=ff(r);Vre(s,{recursive:!0});let i=Bv.join(s,".install.lock");for(;!Zre(i,n());)if(await o(2e3),!Lv(i)){let a=gf(e,r);if(a)return a}try{let a=await GU(e,t.fetchFn),l=KU(a.version,r),c=mf(l,e);if(!Lv(c)){let d=Bv.join(s,`.download-${a.version}.zip`),f=Bv.join(s,`.staging-${a.version}-${process.pid}`);ui(f,{recursive:!0,force:!0});try{await JU(a.url,d,{fetchFn:t.fetchFn,minBytes:t.minArchiveBytes,onProgress:g=>{Bt.receivedBytes=g.receivedBytes,Bt.totalBytes=g.totalBytes}}),(t.extract??Qre)(d,f);let m=mf(f,e);if(!Lv(m))throw new Error("the downloaded browser archive did not contain Chrome");(t.platform??process.platform)!=="win32"&&Yre(m,493),ui(l,{recursive:!0,force:!0}),Jre(f,l)}finally{ui(d,{force:!0}),ui(f,{recursive:!0,force:!0})}}let u={executable:c,version:a.version,installDir:l};return(t.record??Xre)({...u,platform:e}),u}finally{ui(i,{force:!0})}}function yf(e={}){if(Ml)return Ml;let t=li(e.platform??process.platform,e.arch??process.arch);if(!t)return Promise.reject(new di("Google doesn't publish a ready-made Chrome for this kind of computer (Linux on ARM). Install Chromium with your package manager (for example `sudo apt-get install chromium`), then try again.","unsupported_platform"));let r=e.now??Date.now;return Bt={...Bt,state:"downloading",receivedBytes:0,totalBytes:null,error:null},Ml=ene(t,e).then(n=>(Bt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},XU(),n)).catch(n=>{let o=n instanceof Error?n.message:String(n);throw Bt={...Bt,state:"failed",error:o.slice(0,300),failedAt:r(),attempts:Bt.attempts+1},new di(`Couldn't download a browser for this computer: ${o.slice(0,200)}`,"download_failed")}).finally(()=>{Ml=null}),Ml}var oW,zre,nW,di,Bt,Ml,kf=p(()=>{"use strict";K();_o();qU();Dv();Tv();eW();oW=150,zre=30*6e4,nW=[6e4,5*6e4,30*6e4,120*6e4],di=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserProvisionError"}code},Bt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},Ml=null});function nne(){let e=Eo(),t=e.state==="downloading"?` (${iW(e)})`:"";return`Setting up a browser on your computer \u2014 a one-time download of about ${oW} MB${t}. Tell the user it's being set up, wait about 30 seconds, then try the same step again.`}async function aW(e={}){let t=(e.resolve??(()=>Co()))();if(t.executable)return t.executable;if(!(e.autoProvision??A().browserAutoProvision!==!1))throw new Wr("No browser is installed on this computer and automatic setup is turned off. The user can run `kynver browser install` on that computer, or install Google Chrome.","chrome_not_found");let n=(e.status??Eo)(),o=(e.now??Date.now)();if(n.state==="failed"&&n.failedAt!==null&&o-n.failedAt<rne)throw new Wr(`Kynver couldn't download a browser for this computer just now (${n.error??"unknown error"}). The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found");let s=(e.provision??yf)(),i,a=new Promise(l=>{i=setTimeout(()=>l("pending"),e.waitMs??tne),i.unref?.()});try{let l=await Promise.race([s,a]);if(l==="pending")throw s.catch(()=>{}),new Wr(nne(),"browser_installing");return l.executable}catch(l){if(l instanceof Wr)throw l;let c=l instanceof di?l.message:"Couldn't set up a browser on this computer.";throw new Wr(`${c} The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found")}finally{clearTimeout(i)}}var tne,rne,Wr,lW=p(()=>{"use strict";K();Nl();kf();tne=2e4,rne=6e4,Wr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserEnsureError"}code}});function Uv(e){return one.test(e)}function cW(e=process.platform,t=typeof process.getuid=="function"?process.getuid():null){return e==="linux"&&t===0}function bf(e){uW=e}function dW(){return uW}var one,uW,Wv=p(()=>{"use strict";one=/Running as root without --no-sandbox|No usable sandbox|setuid sandbox|SUID sandbox helper|Failed to move to new namespace|sandbox_host_linux|credentials\.cc.*(EPERM|Operation not permitted)/i;uW=null});import{spawn as sne}from"node:child_process";import{existsSync as pFe,mkdirSync as ine,readFileSync as ane,rmSync as lne}from"node:fs";import{homedir as cne}from"node:os";import pW from"node:path";function dne(e=process.env){return e.KYNVER_BROWSER_PROFILE_DIR?.trim()||pW.join(cne(),".kynver","browser-profile")}function fW(e=process.env){return(e.KYNVER_BROWSER_CDP_URL?.trim()||A().browserCdpUrl?.trim()||une).replace(/\/$/,"")}async function mW(e,t={}){let r=t.env??process.env,n=t.platform??process.platform,o=t.allowNoSandbox??A().browserAllowNoSandbox!==!1;if((t.asRoot??cW(n))&&o){let a=await $v(e,r,n,t,!0);if("wsUrl"in a)return bf("off_root"),console.error(`[kynver] browser: running as root, so Chrome started with --no-sandbox (sandbox unavailable on this host). ${JSON.stringify({event:"browser_sandbox_unavailable",reason:"root",fallback:"no-sandbox"})}`),a;throw Fv(a.stderrTail)}let i=await $v(e,r,n,t,!1);if("wsUrl"in i)return bf("on"),i;if(n==="linux"&&o&&Uv(i.stderrTail)){let a=await $v(e,r,n,t,!0);if("wsUrl"in a)return bf("off_unavailable"),console.error(`[kynver] browser: Chrome's sandbox is unavailable on this host, so Chrome started with --no-sandbox (set browserAllowNoSandbox: false in ~/.kynver/config.json to refuse instead). ${JSON.stringify({event:"browser_sandbox_unavailable",reason:"unavailable",fallback:"no-sandbox"})}`),a;throw Fv(a.stderrTail)}throw Fv(i.stderrTail)}function Fv(e){let t=Dl(e);return t.length>0?new Ll(t):Uv(e)?new Error("Chrome couldn't start its security sandbox on this computer, and running without it is turned off (browserAllowNoSandbox). Install Google Chrome system-wide, or allow it in ~/.kynver/config.json."):new Error("Chrome did not start on the Kynver browser profile. Close any Chrome window already using that profile and try again.")}async function $v(e,t,r,n,o){let s=dne(t);ine(s,{recursive:!0});let i=pW.join(s,"DevToolsActivePort");lne(i,{force:!0});let a=pf(t,r),l=[`--user-data-dir=${s}`,"--remote-debugging-port=0","--remote-allow-origins=*","--no-first-run","--no-default-browser-check","--disable-features=Translate","--window-size=1280,900",...a?["--headless=new"]:[],...o?["--no-sandbox"]:[],"about:blank"],c=(n.spawnFn??sne)(e,l,{stdio:["ignore","ignore","pipe"],detached:!1});c.unref?.();let u="";c.stderr?.on("data",m=>{u=(u+String(m)).slice(-4e3)}),c.stderr?.unref?.();let d=n.readFile??(m=>ane(m,"utf8")),f=n.sleep??(m=>new Promise(g=>setTimeout(g,m)));for(let m=0;m<15e3;m+=200){try{let[g,h]=d(i).split(/\r?\n/);if(g?.trim()&&h?.trim())return{wsUrl:`ws://127.0.0.1:${g.trim()}${h.trim()}`,child:c}}catch{}if(c.exitCode!==null&&c.exitCode!==void 0)break;await f(200)}try{c.kill()}catch{}return await f(50),{stderrTail:u}}async function gW(e,t=fetch){let r=new AbortController,n=setTimeout(()=>r.abort(),3e3);try{let o=await t(`${e}/json/version`,{signal:r.signal});if(!o.ok)throw new Error(`HTTP ${o.status}`);let s=await o.json();if(typeof s.webSocketDebuggerUrl!="string")throw new Error("no webSocketDebuggerUrl");return s.webSocketDebuggerUrl}finally{clearTimeout(n)}}var une,Ll,hW=p(()=>{"use strict";K();_o();hf();Nl();Wv();une="http://127.0.0.1:9222";Ll=class extends Error{constructor(r){super(`Chrome is missing system libraries: ${r.join(", ")}`);this.missingLibs=r;this.name="ChromeMissingLibsError"}missingLibs}});async function pne(e){if(e==="attach"){let n=fW(),o;try{o=await gW(n)}catch{throw new pi(`No Chrome is listening for Kynver at ${n}. Start Chrome with --remote-debugging-port=9222 (and its own --user-data-dir), or switch this computer to the dedicated Kynver browser in Settings.`,"attach_unreachable")}return{conn:await Ol.connect(o),child:null,mode:e}}let t;try{t=await aW()}catch(n){throw n instanceof Wr?new pi(n.message,n.code):n}let r;try{r=await mW(t)}catch(n){throw n instanceof Ll?new pi(YU(n.missingLibs,$U()),"missing_libs"):n}return{conn:await Ol.connect(r.wsUrl),child:r.child,mode:e}}function fne(){return vf??=new df({connectHost:pne}),vf}async function yW(){vf&&await vf.closeAll().catch(()=>{})}function kW(){try{let e=A();e.browserEverEnabled!==!0&&Fe({...e,browserEverEnabled:!0})}catch{}}function bn(e,t){return{ok:!1,code:e,text:t}}function mne(e){if(!e||typeof e!="object")return null;let t=e,r=t.policy;if(t.kind!=="browser"||!aU(t.action)||typeof t.conversationId!="string"||!t.conversationId.trim()||t.conversationId.length>200||!r||typeof r!="object"||typeof r.boxId!="string")return null;let n=r.mode==="attach"?"attach":"dedicated";return{kind:"browser",conversationId:t.conversationId.trim(),action:t.action,args:t.args&&typeof t.args=="object"&&!Array.isArray(t.args)?t.args:{},policy:{enabled:r.enabled===!0,mode:n,boxId:r.boxId},...typeof t.approvedFingerprint=="string"&&/^[0-9a-f]{8}$/.test(t.approvedFingerprint)?{approvedFingerprint:t.approvedFingerprint}:{}}}async function bW(e,t){let r=mne(e);if(!r)return bn("invalid_request","Malformed browser request.");if(t.localDisabled)return bn("disabled","The browser is switched off on this computer (local setting browserDisabled).");if(!r.policy.enabled)return bn("disabled","The browser is turned off for this computer. The user can turn it on in Kynver \u2192 Computers.");if(r.policy.boxId!==t.boxId)return bn("wrong_box","This request reached a different computer than the one the browser is enabled on.");t.onEnabledTurn?.();let n=t.manager??fne();if(r.action==="list_logins")return Ov(r.args,t.agentOsId,t.siteLogins);if(r.action==="close")return{ok:!0,text:await n.close(r.conversationId)?"Closed the browser for this conversation.":"No browser was open for this conversation."};try{let o=await n.getOrCreate(r.conversationId,r.policy.mode);if(!n.recordAction(o))return bn("action_cap","Too many browser actions in a short time. Pause and summarize progress for the user.");let s=r.action==="wait"?nf+5e3:dU,i,a=new Promise(d=>{i=setTimeout(()=>d(bn("timeout",`The browser did not finish "${r.action}" within ${Math.round(s/1e3)}s.`)),s),i.unref?.()}),l={manager:n,session:o,args:r.args,approvedFingerprint:r.approvedFingerprint??null,sleep:t.sleep,agentOsId:t.agentOsId,siteLogins:t.siteLogins},c=r.action,u=await Promise.race([iU(c)?MU(c,l):PU(c,l),a]).finally(()=>clearTimeout(i));return{...u,text:of(u.text)}}catch(o){if(o instanceof pi)return bn(o.code,o.message);let s=o instanceof Error?o.message:String(o);return bn("failed",`Browser action failed: ${s.slice(0,300)}`)}}var pi,vf,Kv=p(()=>{"use strict";xv();LU();wv();BU();UU();K();lW();hf();_o();hW();ai();pi=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserSetupError"}code};vf=null});import{mkdirSync as gne,readFileSync as DFe,renameSync as hne,writeFileSync as yne}from"node:fs";import{homedir as kne}from"node:os";import Hv from"node:path";function bne(e=Hv.join(kne(),".kynver","state")){return Hv.join(e,"chat-loop.json")}function vW(e,t=bne()){try{gne(Hv.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}`;yne(r,JSON.stringify({v:1,...e}),{mode:384}),hne(r,t)}catch{}}var RW=p(()=>{"use strict"});function vne(e,t,r){if(!t||t===r)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`${n}(?=[\\\\/"'\\s<]|$)`,"gm"),()=>r)}function wW(e,t){return vne(e,t,"\0")!==e}var SW=p(()=>{"use strict"});import{accessSync as Rne,constants as wne,existsSync as Sne,lstatSync as _ne,readdirSync as xne,readFileSync as Cne,readlinkSync as Ene,realpathSync as Ane}from"node:fs";import{homedir as Ine}from"node:os";import _W from"node:path";function CW(e){return e==="win32"?_W.win32:_W.posix}function One(e,t,r){let n=r.dirname(e);for(let o=0;o<4;o+=1){let s=t.readText(r.join(n,"package.json"));if(s)try{if(JSON.parse(s).name===jv)return n}catch{}let i=r.dirname(n);if(i===n)break;n=i}return null}function Nne(e,t,r){let n=CW(t),o=n.dirname(e),s=t==="win32"?[n.join(o,"node_modules","npm","bin","npm-cli.js")]:[n.join(o,"..","lib","node_modules","npm","bin","npm-cli.js"),n.join(o,"node_modules","npm","bin","npm-cli.js")];for(let i of s){let a=n.normalize(i);if(r.exists(a))return a}return null}function Dne(e,t,r){let n=[r.join(e,".npm-global","bin","kynver"),r.join(e,".local","bin","kynver"),r.join(e,"bin","kynver")],o=t.NPM_CONFIG_PREFIX?.trim()||t.npm_config_prefix?.trim();return o&&n.unshift(r.join(o,"bin","kynver")),[...new Set(n)]}function Mne(e,t,r,n,o){for(let s of Dne(t,r,o)){let i=n.readLink(s);if(!i)continue;let a=o.isAbsolute(i)?i:o.resolve(o.dirname(s),i);if(a===e||a.startsWith(`${e}${o.sep}`))return s}}function Lne(e,t,r,n){let o=n.join(t,"Library","LaunchAgents");for(let s of r.readDir(o)){if(!s.endsWith(".plist"))continue;let i=n.join(o,s),a=r.readText(i);if(!a||!/kynver/i.test(a)||!e.some(c=>a.includes(c)))continue;let l=/<key>\s*Label\s*<\/key>\s*<string>([^<]+)<\/string>/.exec(a)?.[1]?.trim();if(l)return{file:i,label:l}}return null}function Bne(e,t,r,n){for(let o of[n.join(t,".kynver","bin"),n.join(t,".kynver")])for(let s of r.readDir(o)){if(!/\.(cmd|bat|ps1)$/i.test(s))continue;let i=n.join(o,s),a=r.readText(i);if(a&&e.some(l=>a.includes(l)))return i}return null}function Rf(e={}){let t=e.platform??process.platform,r=CW(t),n=e.fs??Pne,o=e.env??process.env,s=e.home??Ine(),i=e.execPath??process.execPath,a=n.realpath(e.cliEntry??process.argv[1]??""),l=a?One(a,n,r):null,c={cliPath:a,packageRoot:l,nodePath:i,npmCliPath:Nne(i,t,n)};if(!l)return{...c,kind:"unknown",supervisor:"none",unsupportedReason:"I could not find where Kynver is installed on this computer."};if(!l.split(xW).includes("node_modules"))return{...c,kind:"checkout",supervisor:"none",unsupportedReason:"Kynver on this computer runs from a source checkout, not an installed release, so it is updated with git (pull, then build), not from chat."};let u="unknown",d={},f=Tne.exec(l);if(f)u="release_dir",d.releasesRoot=r.join(f[1],"releases"),d.releaseName=f[2],d.releaseDir=r.join(d.releasesRoot,d.releaseName),d.shimPath=Mne(d.releaseDir,s,o,n,r);else{let y=/^(.*)[\\/]lib[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l),b=t==="win32"?/^(.*)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l):null,k=y?.[1]??b?.[1];k&&!k.split(xW).includes("node_modules")&&(u="npm_global",d.npmPrefix=k)}if(u==="unknown")return{...c,kind:u,supervisor:"none",unsupportedReason:`Kynver on this computer is installed inside another project (${l}), so updating it from chat could break that project.`};let m=[d.releaseDir,l,a].filter(y=>!!y),g="keeper";if(t==="linux"){let y=r.join(s,".config","systemd","user",Bi);n.exists(y)&&(g="systemd",d.supervisorFile=y,d.supervisorName=Bi)}else if(t==="darwin"){let y=Lne(m,s,n,r);y&&(g="launchd",d.supervisorFile=y.file,d.supervisorName=y.label)}else if(t==="win32"){let y=Bne(m,s,n,r);y&&(g="windows_task",d.supervisorFile=y,d.supervisorName=o.KYNVER_WINDOWS_TASK_NAME?.trim()||"Kynver")}let h={...c,kind:u,supervisor:g,...d};return h.unsupportedReason=Une(h,n),h.unsupportedReason||delete h.unsupportedReason,h}function Une(e,t){if(e.kind==="npm_global")return e.npmPrefix&&!t.writable(e.npmPrefix)?`Kynver is installed in ${e.npmPrefix}, which this computer's user cannot write to (it needs admin rights), so I can't update it from here.`:void 0;if(e.kind!=="release_dir")return;if(e.releasesRoot&&!t.writable(e.releasesRoot))return`I can't write a new release next to the current one (${e.releasesRoot} is not writable).`;let r=(()=>{if(!e.supervisorFile||!e.releaseDir)return!1;let n=t.readText(e.supervisorFile);return!!n&&wW(n,e.releaseDir)})();if(e.supervisor==="keeper"||e.supervisor==="none")return"Kynver runs from a release folder without a service that starts it, so a restart would bring back the old release. Run `kynver cron install --install-systemd` once (Linux) so updates can switch releases.";if(!r&&!e.shimPath)return`The service that starts Kynver (${e.supervisorFile??e.supervisor}) doesn't name the release folder or a kynver link I can switch.`}var jv,Pne,xW,Tne,wf=p(()=>{"use strict";Jo();SW();jv="@kynver-app/runtime",Pne={exists:e=>Sne(e),readText:e=>{try{return Cne(e,"utf8")}catch{return null}},readDir:e=>{try{return xne(e)}catch{return[]}},realpath:e=>{try{return Ane.native(e)}catch{return e}},readLink:e=>{try{return _ne(e).isSymbolicLink()?Ene(e):null}catch{return null}},writable:e=>{try{return Rne(e,wne.W_OK),!0}catch{return!1}}},xW=/[\\/]/;Tne=/^(.*)[\\/]releases[\\/]([^\\/]+)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/});function EW(e){return`npm-${e}`}function Sf(e,t="latest"){let r=`${jv}@${t}`;switch(e.kind){case"release_dir":{let n=e.releasesRoot?`${e.releasesRoot}/${EW(t)}`:`<releases>/${EW(t)}`,o=e.supervisor==="systemd"?`point ${e.supervisorName??"kynver-cron-daemon.service"} at the new folder, then \`systemctl --user daemon-reload && systemctl --user restart ${e.supervisorName??"kynver-cron-daemon.service"}\``:e.supervisor==="launchd"?`point the ${e.supervisorName??"Kynver"} launch agent at the new folder, then \`launchctl kickstart -k gui/$(id -u)/${e.supervisorName??"<label>"}\``:"point whatever starts Kynver at the new folder, then restart it";return`npm install --prefix ${n} ${r} then ${o}`}case"checkout":return`cd ${e.packageRoot??"<your Kynver checkout>"} && git pull && npm install && npm run build then restart Kynver`;default:return`npm install -g ${r} then restart Kynver (or restart the computer)`}}var Vv=p(()=>{"use strict";wf()});var AW=p(()=>{"use strict"});import{mkdirSync as zFe,readFileSync as Wne,readdirSync as XFe,renameSync as QFe,writeFileSync as ZFe}from"node:fs";import IW from"node:path";function Fne(){return IW.join(nl(),"runtime")}function $ne(e){return IW.join(e,"summary.json")}function PW(e=Fne()){try{let t=JSON.parse(Wne($ne(e),"utf8"));if(t?.v===1)return t}catch{}return{v:1,attempts:0,succeeded:0,rolledBack:0,failed:0,last:null}}var OW=p(()=>{"use strict";Jd();AW()});function Hne(e=Date.now()){if(_f&&e-_f.at<Kne)return _f.report;if(!fi){let o=Rf();fi={kind:o.kind,supervisor:o.supervisor,can:!o.unsupportedReason,manual:Sf(o,"latest")}}let t=PW(),r=t.last,n={v:1,installKind:fi.kind,supervisor:fi.supervisor,canSelfUpdate:fi.can,manualCommand:fi.manual,attempts:t.attempts,succeeded:t.succeeded,rolledBack:t.rolledBack,failed:t.failed,last:r?{id:r.id,from:r.fromVersion,to:r.toVersion,phase:r.phase,updatedAt:r.updatedAt,restartAt:r.restartAt??null,healthOk:r.health?r.health.ok:null,message:r.message?r.message.slice(0,400):null}:null};return _f={at:e,report:n},n}function xf(){try{return Hne()}catch{return}}var fi,_f,Kne,Gv=p(()=>{"use strict";wf();Vv();OW();fi=null,_f=null,Kne=3e4});import{readdir as jne,readFile as Vne}from"node:fs/promises";import{sep as Gne}from"node:path";import{fileURLToPath as Jne}from"node:url";function Xne(e=import.meta.url){let t;try{t=Jne(e)}catch{return"checkout"}return t.split(Gne).includes("node_modules")||t.split("/").includes("node_modules")?"npm":"checkout"}function Qne(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=zne?t:null}async function Zne(e){try{return Qne(JSON.parse(await Vne(e,"utf8")).version)}catch{return null}}function eoe(e,t){if(!e)return t;try{return jd(t,e)>0?t:e}catch{return e}}async function toe(e={}){let t={},r=new Set;for(let n of(e.scopeRoots??n0)()){let o=[];try{o=await jne(n)}catch{continue}for(let s of o)/^[a-z0-9][a-z0-9._-]*$/i.test(s)&&r.add(`${TW}${s}`)}try{for(let n of await(e.adopted??xk)())n.packageName.startsWith(TW)&&r.add(n.packageName)}catch{}for(let n of[...r].sort().slice(0,Yne))for(let o of fk(n)){let s=await Zne(o);s&&(t[n]=eoe(t[n],s))}return t}function roe(e){Jv||mi&&e-mi.at<qne||(Jv=toe().then(t=>{mi={at:Date.now(),packages:t}}).catch(()=>{mi={at:Date.now(),packages:mi?.packages??{}}}).finally(()=>{Jv=null}))}function Cf(e=Date.now()){try{roe(e)}catch{}return{v:1,runtime:{version:qe,source:Xne()},packages:{...mi?.packages??{}}}}var TW,qne,Yne,zne,mi,Jv,qv=p(()=>{"use strict";Yr();mk();Ck();pk();TW="@kynver-app/",qne=10*6e4,Yne=40,zne=32;mi=null,Jv=null});async function NW(e,t,r={}){let n=r.fetchFn??fetch,o=i=>n(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t.turnId)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:i})}).catch(()=>{}),s=t.payload?.action;try{let i=await(r.execute??bW)(t.payload,{boxId:e.boxId,agentOsId:e.agentOsId,localDisabled:A().browserDisabled===!0,onEnabledTurn:kW});await o([{seq:0,kind:"final",message:i}]),console.error(JSON.stringify({event:"browser_turn_done",turnId:t.turnId,action:s,ok:i.ok,code:i.code??null}))}catch(i){await o([{seq:0,kind:"error",error:"browser_turn_crashed"}]),console.error(JSON.stringify({event:"browser_turn_error",turnId:t.turnId,action:s,error:i instanceof Error?i.message.slice(0,200):"unknown"}))}}var DW=p(()=>{"use strict";K();Kv()});function MW(e=process.env,t={}){let r=t.platform??process.platform,n=A(),o={executable:null,source:"none",version:null,configuredMissing:null};try{o=(t.resolve??(()=>Co({env:e,platform:r,config:n})))()}catch{}let s={version:null,missingLibs:[]};if(o.executable)try{s=(t.health??(i=>zU(i)))(o.executable)}catch{}return{supported:!0,chromeFound:o.executable!==null,localDisabled:n.browserDisabled===!0,browserSource:o.source,browserVersion:o.version??s.version,provisioning:Eo().state,missingLibs:s.missingLibs,wsl:Tl(e,r),headless:pf(e,r),autoProvision:n.browserAutoProvision!==!1,sandbox:dW()}}var LW=p(()=>{"use strict";K();Dv();_o();Nl();kf();Wv()});function Bl(e,t,r,n,o,s,i){return{chatProvider:e,toolCalls:e==="anthropic"||e==="cursor"||e==="gemini"||e==="openai"||e==="codex",runtimePackageVersion:qe,browser:MW(),deliveryReceipt:!0,...t?{chatModels:t}:{},...r?{computer:r}:{},...n?{security:n}:{},...o?{agentEngines:o}:{},...s?{packageVersions:s}:{},...i?{selfUpdate:i}:{}}}var Yv=p(()=>{"use strict";Yr();LW()});import{spawn as noe}from"node:child_process";async function BW(e=process.env,t={}){let r=t.now??(()=>new Date),n="KYNVER_API_KEY",o={...e,[n]:e[n]??"canary-not-a-real-key"},s=Qt(o),i=new Set([...Sb,...Uf]);return new Promise(a=>{let l="",c=!1,u=m=>{c||(c=!0,clearTimeout(f),a({...m,at:r().toISOString()}))},d;try{d=noe(t.execPath??process.execPath,["-e",ooe],Z({env:s,stdio:["ignore","pipe","ignore"]}))}catch(m){u({ok:!1,leaked:[],error:m instanceof Error?m.message:String(m)});return}let f=setTimeout(()=>{d.kill("SIGKILL"),u({ok:!1,leaked:[],error:"self-test timed out"})},t.timeoutMs??1e4);d.stdout?.on("data",m=>{l+=m.toString("utf8")}),d.on("error",m=>u({ok:!1,leaked:[],error:m.message})),d.on("close",()=>{let m;try{m=JSON.parse(l)}catch{u({ok:!1,leaked:[],error:"self-test child printed no env listing"});return}let g=Array.isArray(m)?m.filter(h=>typeof h=="string"&&i.has(h)).sort():[];u({ok:g.length===0,leaked:g})})})}var ooe,UW=p(()=>{"use strict";M();ko();Ri();ooe="process.stdout.write(JSON.stringify(Object.keys(process.env)))"});function ioe(e){return e>=200&&e<300?"accepted":e===409||e===410?"rejected":e===404||e===405?"unsupported":"unreachable"}function WW(e){return e!=="rejected"}async function FW(e,t,r=fetch){let n=`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(t)}/receipt`;for(let o=0;o<2;o++){let s=new AbortController,i=setTimeout(()=>s.abort(),soe);try{let a=await Ys(e);if(!a.bearer)return{outcome:"unreachable",status:null};let l=await r(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:a.boxId}),signal:s.signal});return Lr(e,a,l.status),{outcome:ioe(l.status),status:l.status}}catch{}finally{clearTimeout(i)}}return{outcome:"unreachable",status:null}}var soe,$W=p(()=>{"use strict";zs();soe=4e3});async function coe(e,t,r=fetch){let n=new AbortController,o=setTimeout(()=>n.abort(),loe);try{let s=await Ys(e);if(!s.bearer)return!1;let i=typeof t=="function"?t(s):t,a=await r(`${e.bridgeUrl}/runtime-chat/heartbeat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:s.boxId,capabilities:i}),signal:n.signal});return Lr(e,s,a.status),a.ok}catch{return!1}finally{clearTimeout(o)}}function KW(e){let t=e.intervalMs??aoe,r=!1,n=()=>{r||coe(e.target,e.capabilities,e.fetchImpl).catch(()=>!1).then(s=>{try{e.onBeat?.(s)}catch{}})};n();let o=setInterval(n,t);return o.unref?.(),()=>{r=!0,clearInterval(o)}}var aoe,loe,HW=p(()=>{"use strict";zs();aoe=15e3,loe=5e3});async function jW(e,t,r,n){let o=A(),s=Mr(o),i=await ho(e);if(!i.bearer)return"no_credential";let a=Bl(s,Qs(o),kp(s,o),e.security?.report({policy:n,auth:i.kind,credentialStore:ll(),folderSandbox:Kp(process.env,o)}),Yp(),Cf(),xf()),l=lM(e.agentOsId);l&&(a.browser.siteLogins=l);let c=i.kind==="box_token"?i.boxId:sl();e.chatProvider=s,e.boxId=c,e.model=po(s,o,process.env);let u=new AbortController,d=setTimeout(()=>u.abort(),doe),f=setInterval(()=>{t()&&u.abort()},500);try{let m=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i.bearer}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:uoe,capabilities:a,claimRetries:r}),signal:u.signal});if(m.status===204)return null;if(m.status===401||m.status===403){let y=await m.text().catch(()=>"");return console.error(JSON.stringify({event:"chat_claim_auth_error",status:m.status,bridgeUrl:e.bridgeUrl,agentOsId:e.agentOsId,authKind:i.kind,detail:y.slice(0,200)})),Lr(e,i,401),"auth_error"}if(m.status===429)throw new pn(m.status);if(!m.ok)throw new pn(m.status);let g;try{g=await m.json()}catch{throw new pn(502)}let h=pD(g);if(!h)throw new pn(502);return h.turn}catch(m){if(t())return null;throw m}finally{clearTimeout(d),clearInterval(f)}}var uoe,doe,VW=p(()=>{"use strict";K();tv();Gv();qv();Yv();tp();wl();gl();fo();zs();sp();bp();uoe=2e4,doe=32e3});async function zv(e){let t=await op(),r=()=>Kk(A().agentOsId?.trim())&&!!A().agentOsId?.trim();for(t||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:r()?"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)":"machine_not_linked",rediscoverMs:JW}));!t&&!e.shouldStop();){if(!r()||(await Xs(JW,e.shouldStop),e.shouldStop()))return;t=await op()}if(!t||e.shouldStop())return;let n=HD(process.env,A()),o=new dp;t.security&&(t.security.childEnv=await BW().catch(u=>({ok:!1,leaked:[],error:u instanceof Error?u.message:String(u),at:new Date().toISOString()})),t.security.childEnv.ok||console.error(JSON.stringify({event:"chat_child_env_selftest_failed",...t.security.childEnv}))),console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:t.bridgeUrl,agentOsId:t.agentOsId,boxId:t.boxId,model:t.model,chatProvider:t.chatProvider,capabilities:Bl(t.chatProvider),useClaudeOauth:t.useClaudeOauth,turnSignature:n,credentialStore:ll(),childEnvSafe:t.security?.childEnv?.ok??null,auth:t.auth?.describe().kind??"api_key"}));let s=0,i=0,a=new ep,l=KW({target:t,capabilities:u=>{let d=A(),f=Mr(d);return Bl(f,Qs(d),kp(f,d),t.security?.report({policy:n,auth:u.kind,credentialStore:ll(),folderSandbox:Kp(process.env,d)}),Yp(),Cf(),xf())},onBeat:u=>vW({pid:process.pid,runtimeVersion:qe,at:new Date().toISOString(),heartbeatOk:u,chatTurns:Math.max(0,s-i),commandTurns:i})}),c=Promise.resolve();for(;!e.shouldStop();)try{if(s>=poe){await Xs(250,e.shouldStop);continue}let u=await jW(t,e.shouldStop,a.snapshot(),n);if(u==="no_credential"){console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:"machine_not_linked"})),await Xs(GW,e.shouldStop);continue}if(u==="auth_error"){a.onAuthError();let d=t.auth?.describe().hasBoxCredential===!0;await Xs(d?5e3:GW,e.shouldStop);continue}if(a.onSuccess(),u){let d=await FW(t,u.turnId);if(!WW(d.outcome)){console.error(JSON.stringify({event:"chat_turn_receipt_rejected",turnId:u.turnId,requestId:u.requestId??null,status:d.status}));continue}d.outcome!=="accepted"&&console.error(JSON.stringify({event:"chat_turn_receipt_unconfirmed",turnId:u.turnId,outcome:d.outcome,status:d.status}));let f=u.payload?.kind;s+=1;let m;if(f==="command"){i+=1;let g=()=>ab(t,u);m=c.then(g,g),c=m.then(()=>{},()=>{})}else{let g=await sb(t,u,{policy:n,nonces:o});if(!g.ok){s-=1;continue}if(o.markStarted(u.turnId),f==="browser"){let h=await ho(t);m=NW({...t,apiKey:h.bearer},{turnId:u.turnId,payload:g.payload})}else f==="agent-tab"?m=ZB(h=>Le(t,u.turnId,h),{turnId:u.turnId,payload:g.payload,boxId:t.boxId},{late:cM(t)}):m=Yb(t,{...u,payload:g.payload},g.trust)}m.catch(g=>{console.error(JSON.stringify({event:"chat_turn_execution_crash",turnId:u.turnId,error:g instanceof Error?g.message:String(g)}))}).finally(()=>{s-=1,f==="command"&&(i-=1),f!=="command"&&o.markFinished(u.turnId)})}}catch(u){let{kind:d,consecutive:f,backoffMs:m}=a.onError(u),g=hD(d,f),h=JSON.stringify({event:g.event,level:g.level,error:u instanceof Error?u.message:String(u),kind:d,consecutive:f,retryInMs:m});g.level==="error"?console.error(h):console.log(h),m>0&&await Xs(m,e.shouldStop)}l(),await yW(),console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}var GW,JW,poe,qW=p(()=>{"use strict";K();tv();eU();Kv();Yr();RW();Gv();qv();DW();Yv();UW();tp();wl();$W();HW();gl();fo();pp();Zk();sp();zb();VW();lb();cl();bp();ib();GW=6e4,JW=5*6e4,poe=3});var YW=p(()=>{"use strict";tp();sp();ib();lb();zb();qW()});import{createHash as foe}from"node:crypto";import{chmodSync as zW,existsSync as moe,mkdirSync as goe,rmSync as XW}from"node:fs";import{createConnection as hoe,createServer as yoe}from"node:net";import{homedir as koe,userInfo as boe}from"node:os";import voe from"node:path";function woe(e,t=process.platform){return t==="win32"?`\\\\.\\pipe\\kynver-site-logins-${foe("sha256").update(`${boe().username}:${koe()}`).digest("hex").slice(0,16)}`:voe.join(e,"control.sock")}async function Soe(e,t){switch(t.op){case"status":return{ok:!0,data:{report:e.report(t.agentOsId),codes:e.listCodeRequests(t.agentOsId)}};case"unlock":{let r=e.store(t.agentOsId),n=e.audit(t.agentOsId);try{let o=await r.unlockWithPassphrase(t.passphrase);return e.unlock(t.agentOsId,o),o.fill(0),n.record({event:"unlock",ok:!0}),{ok:!0}}catch(o){throw n.record({event:"unlock_failed",ok:!1,code:o instanceof z?o.code:"failed"}),o}}case"lock":return e.lock(t.agentOsId),{ok:!0};case"add":{let r=e.key(t.agentOsId);if(!r)return{ok:!1,error:"saved logins are locked in the running Kynver",code:"locked"};let n=e.store(t.agentOsId),o=t.replaceHandle?n.replace(r,t.replaceHandle,t.login):n.add(r,t.login);return e.audit(t.agentOsId).record({event:t.replaceHandle?"replace":"add",ok:!0,handle:o.handle,label:o.label,username:o.username,origin:o.origin}),{ok:!0,data:o}}case"codes":return{ok:!0,data:e.listCodeRequests(t.agentOsId)};case"code":return{ok:!0,data:await e.submitCode(t.id??null,t.code,t.agentOsId)};case"wipe":return{ok:!0,data:{wiped:e.wipe(t.agentOsId)}}}}function _oe(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!="object")return null;let r=t,n=["status","unlock","lock","add","codes","code","wipe"];return typeof r.op!="string"||!n.includes(r.op)||r.op!=="lock"&&(typeof r.agentOsId!="string"||!r.agentOsId.trim())?null:t}async function QW(e){let t=woe(e.rootDir);if(process.platform!=="win32"){goe(e.rootDir,{recursive:!0,mode:448});try{zW(e.rootDir,448)}catch{}if(moe(t)){if(await xoe(t))return null;XW(t,{force:!0})}}let r=yoe(n=>{let o="";n.setEncoding("utf8"),n.setTimeout(12e4,()=>n.destroy()),n.on("data",s=>{if(o+=s,o.length>Roe)return void n.destroy();let i=o.indexOf(`
537
+ `);if(i<0)return;let a=_oe(o.slice(0,i));o="";let l=c=>n.end(`${JSON.stringify(c)}
538
+ `);if(!a)return l({ok:!1,error:"malformed request"});Soe(e,a).then(l).catch(c=>l({ok:!1,error:c instanceof z?c.message:"the request failed",code:c instanceof z?c.code:"failed"}))}),n.on("error",()=>{})});try{await new Promise((n,o)=>{r.once("error",o),r.listen(t,()=>n())})}catch(n){return console.error(JSON.stringify({event:"site_login_control_unavailable",error:n.message.slice(0,200)})),null}if(process.platform!=="win32")try{zW(t,384)}catch{}return{path:t,close:()=>new Promise(n=>{r.close(()=>n()),process.platform!=="win32"&&XW(t,{force:!0})})}}function xoe(e){return new Promise(t=>{let r=hoe(e),n=o=>{r.destroy(),t(o)};r.once("connect",()=>n(!0)),r.once("error",()=>n(!1)),setTimeout(()=>n(!1),1e3).unref?.()})}var Roe,ZW=p(()=>{"use strict";Un();Roe=16*1024});function Aoe(e){return e.config.browserDisabled===!0?"local_disabled":e.config.browserAutoProvision===!1?"auto_provision_off":!/^(1|true|yes|on)$/i.test(e.env.KYNVER_BROWSER_AUTOPROVISION??"")&&e.config.browserEverEnabled!==!0?"never_enabled":e.resolved.executable?"already_available":li(e.platform,e.arch)?null:"unsupported_platform"}async function eF(e,t){let r=t.sleep??(n=>new Promise(o=>setTimeout(o,n).unref?.()));for(let n=e;n>0&&!t.shouldStop();n-=1e3)await r(Math.min(1e3,n))}async function tF(e){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.now??Date.now,s=e.log??(l=>console.error(JSON.stringify(l))),i=e.resolve??(()=>Co({env:t,platform:r,arch:n})),a=e.loadConfig??A;try{await eF(e.startDelayMs??Coe,e);for(let l=1;l<=Eoe&&!e.shouldStop();l+=1){let c=Aoe({config:a(),env:t,resolved:i(),platform:r,arch:n});if(c){c!=="never_enabled"&&s({event:"browser_autoprovision_skip",reason:c});return}let u=sW(Eo());if(u>o()&&await eF(u-o(),e),e.shouldStop())return;s({event:"browser_autoprovision_start",attempt:l});try{let d=await(e.provision??yf)({env:t,platform:r,arch:n});s({event:"browser_autoprovision_done",version:d.version});return}catch(d){s({event:"browser_autoprovision_failed",attempt:l,error:d instanceof Error?d.message.slice(0,200):String(d)})}}}catch(l){s({event:"browser_autoprovision_crash",error:l instanceof Error?l.message.slice(0,200):String(l)})}}var Coe,Eoe,rF=p(()=>{"use strict";K();_o();Nl();kf();Coe=6e4,Eoe=5});function Xv(e){let t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Toe(e,t){let r=Xv(e),n=Xv(t);if(!r||!n)return!1;for(let o=0;o<3;o+=1)if(r[o]!==n[o])return r[o]<n[o];return!1}function Noe(e,t,r={}){let n=r.manual??`${Ef} then restart Kynver (or restart the computer)`,o=r.selfUpdate===!1?"":'Say "update Kynver" in Kynver chat and it updates itself, or run `kynver update` here. ';return`Kynver on this computer is out of date (installed ${e}, latest ${t}). ${o}By hand: ${n}`}function Doe(){try{let e=Rf();return{manual:Sf(e,"latest"),selfUpdate:!e.unsupportedReason}}catch{return{manual:`${Ef} then restart Kynver (or restart the computer)`,selfUpdate:!1}}}async function Moe(e={}){let t=e.installed??qe,r={installed:t,latest:null,outdated:!1,command:Ef};if((e.env??process.env).KYNVER_DISABLE_UPDATE_CHECK==="1")return r;let o=new AbortController,s=setTimeout(()=>o.abort(),Poe);try{let a=await(e.fetch??fetch)(Ioe,{signal:o.signal,headers:{accept:"application/json"}});if(!a.ok)return r;let l=await a.json(),c=typeof l?.version=="string"&&Xv(l.version)?l.version:null;return c?{installed:t,latest:c,outdated:Toe(t,c),command:Ef}:r}catch{return r}finally{clearTimeout(s)}}function oF(e={}){let t=e.log??(s=>console.error(s)),r=null,n=async()=>{let s=await Moe(e);if(s.outdated&&s.latest&&s.latest!==r){r=s.latest;let i=(e.advice??Doe)();t(JSON.stringify({event:"runtime_update_available",installed:s.installed,latest:s.latest,command:i.manual,selfUpdate:i.selfUpdate})),t(Noe(s.installed,s.latest,i))}return s};n().catch(()=>{});let o=setInterval(()=>{n().catch(()=>{})},e.intervalMs??Ooe);return o.unref?.(),{stop:()=>clearInterval(o),checkNow:n}}var nF,Ef,Ioe,Poe,Ooe,sF=p(()=>{"use strict";Yr();Vv();wf();nF="@kynver-app/runtime",Ef=`npm install -g ${nF}@latest`,Ioe=`https://registry.npmjs.org/${nF}/latest`,Poe=5e3,Ooe=360*6e4});var cF={};mR(cF,{adoptOrAcquireOwnerLease:()=>aF,completeWorker:()=>sP,dispatchRun:()=>Ls,resolveDaemonOwnerKind:()=>iF,runDaemon:()=>lF,runPipelineTick:()=>zd,sweepRun:()=>Ad});async function Qv(e,t,r){let n=e;for(;n>0&&!t();){let o=Math.min(Woe,n),s=Date.now();await Xl(o);let i=gg(o,Date.now()-s);if(i!==null){r?.(i);return}n-=o}}function iF(e,t={},r=process.env){return t.ownerKind?t.ownerKind:e.keeperChild===!0||e.keeperChild==="true"?"keeper":r.INVOCATION_ID?.trim()?"systemd":"foreground"}async function aF(e,t,r,n=su){return r?r.released||!r.isHeld()||r.metadata.agentOsId!==e?{ok:!1,reason:"owner_conflict",holder:null,remedy:"the owner lease handed to the daemon is not held for this workspace; restart the runtime"}:{ok:!0,lease:r,quarantinedMetadata:null}:n({agentOsId:e,ownerKind:t})}async function lF(e,t={}){let r=Ag({hostCapability:t.hostCapability}),n=et()?{loaded:0}:qw();n.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...n}));let o=String(e.run||"").trim();o||(console.error(Rg("--run")),process.exit(1));let s=String(e.agentOsId||A().agentOsId||"").trim();s||(console.error(Rg("--agent-os-id")),process.exit(1)),ts(s).ok||(console.error(Im(s)),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1));let a=e.execute!==!1&&e.execute!=="false",l=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):Loe,c=!1,u=0,d=HS(T=>{c||console.error(JSON.stringify({event:"daemon_stop_requested",reason:T,runId:o})),c=!0}),f=await aF(s,iF(e,t),t.ownerLease);if(!f.ok){console.error(JSON.stringify({event:"daemon_start_blocked",reason:"owner_conflict",runId:o,agentOsId:s,holder:f.holder?{ownerKind:f.holder.ownerKind,pid:f.holder.pid,runtimeVersion:f.holder.runtimeVersion,acquiredAt:f.holder.acquiredAt}:null,remedy:f.remedy})),d(),process.exit(1);return}let m=f.lease;rS(m.metadata.ownerKind),Yx({admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null,ownerKind:m.metadata.ownerKind});let g={kind:m.metadata.ownerKind,instanceId:m.metadata.instanceId,processStart:m.metadata.processStart,runtimeVersion:m.metadata.runtimeVersion};console.error(JSON.stringify({event:"daemon_owner_lease_acquired",agentOsId:s,ownerKind:m.metadata.ownerKind,instanceId:m.metadata.instanceId,quarantinedStaleMetadata:f.quarantinedMetadata!==null}));let h=Hx(o);h.killed.length>0&&console.error(JSON.stringify({event:"daemon_orphaned_worker_descendants_killed",runId:o,orphans:h.killed.map(T=>({worker:T.workerName,workerPid:T.workerPid,pid:T.orphanPid,outcome:T.result.outcome}))}));let y=null,b=T=>{y=T};try{let T=DS();(T.moved.length>0||T.stillInFile.length>0)&&console.error(JSON.stringify({event:"daemon_credentials_store",...T}))}catch(T){console.error(JSON.stringify({event:"daemon_credentials_store_error",error:T instanceof Error?T.message:String(T)}))}let k=Cx();k.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:k.resolved?.defaultRepo??null,configPath:k.configPath}));let v=$x(A());v.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:o,agentOsId:s,errors:v.errors})),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:o,agentOsId:s,execute:a,intervalMs:l,boxKind:v.box.boxKind,workerCapSource:v.workerCapSource,maxConcurrentWorkers:v.maxConcurrentWorkers})),oF();let S=is(),_=new Zd;_.start();let R=new Qd({agentOsId:s,init:{ownerKind:m.metadata.ownerKind,admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null}});_.setTickIsolation(R.mode),console.error(JSON.stringify({event:"daemon_tick_isolation",mode:R.mode,reason:R.reason}));let w=QW(Pt()).catch(()=>null),B=zv({shouldStop:()=>c}).catch(T=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:T instanceof Error?T.message:String(T)}))});tF({shouldStop:()=>c});let j=!1;for(;!c;)try{if(y!==null){let C=y;y=null;let P=m.isHeld();if(console.error(JSON.stringify({event:"daemon_resume_detected",agentOsId:s,gapMs:C,ownerLeaseHeld:P})),!P){console.error(JSON.stringify({event:"daemon_owner_lease_lost",agentOsId:s,runId:o})),process.exitCode=1,c=!0;break}}_.setPhase("heartbeat"),m.renew(),tx({agentOsId:s,runId:o,instructionBundleVersion:Fn(),owner:g}),_.setPhase("runner_credential");let T=await Fc(e.secret?String(e.secret):void 0,s,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});if(!T.ok){j||(j=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:s,reason:T.reason,remedy:`run \`kynver runner credential --agent-os-id ${s}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),_.setPhase("idle"),await Qv(l,()=>c,b);continue}j&&(j=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:s}))),_.setPhase("instruction_bundle"),await Ux({agentOsId:s,baseUrl:Nn(e.baseUrl?String(e.baseUrl):void 0),secret:T.secret}),_.setPhase(R.mode==="thread"?"pipeline_tick_thread":"pipeline_tick_inline");let U=await R.runTick({run:o,agentOsId:s,execute:a,...e,secret:typeof e.secret=="string"&&e.secret?e.secret:T.secret},_.report());_.setTickIsolation(U.isolation);let N=U.tick;_.setPhase("tick_log"),console.error(JSON.stringify({event:"daemon_tick",tickIsolation:U.isolation,...N})),_.setPhase("runtime_control");let J=Vr(s),F=U.inFlightWorkers??Xd(s)??0;if(eS(J,F)){let C=Cc({control:J,supervisor:m.metadata.ownerKind,inFlightWorkers:0,exiting:!0}),P=Nn(e.baseUrl?String(e.baseUrl):void 0),D=C&&P?await z_({baseUrl:P,agentOsId:s,secret:T.secret},C):!1;console.error(JSON.stringify({event:"daemon_runtime_stopped",agentOsId:s,runId:o,policyVersion:J?.policyVersion??null,requestedBy:J?.requestedByLabel??null,reported:D})),process.exitCode=xc,c=!0;break}if(S.tickEnabled){_.setPhase("cron_tick");let C=mu(o);if(C&&!C.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:C.holderBoxId}));else{let P=await Dg({env:S,agentOsIdFilter:s});P.enabled&&(P.fired>0||P.errors>0||P.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...P}))}}N.idle?u++:u=0;let W=Math.floor(us("daemon.maxIdleStreak",Uoe)),x=Math.floor(us("daemon.idleIntervalMs",Boe)),G=u>=W?x:l;_.setPhase("idle"),await Qv(G,()=>c,b)}catch(T){console.error(JSON.stringify({event:"daemon_tick_error",error:T.message})),_.setPhase("idle"),await Qv(l,()=>c,b)}_.setPhase("stopping"),await B,await R.close(),_.stop(),await(await w)?.close().catch(()=>{}),Pt().lock();let O=jS(o);O.length>0&&console.error(JSON.stringify({event:"daemon_stop_worker_trees_killed",runId:o,workers:O.map(T=>({worker:T.workerName,pid:T.pid,outcome:T.result.outcome}))})),d(),m.release(),console.error(JSON.stringify({event:"daemon_stop",runId:o,agentOsId:s}))}var Loe,Boe,Uoe,Woe,Zv=p(()=>{"use strict";K();wg();Ex();Wx();zr();Kx();mg();Vc();iu();_t();hg();jx();pu();Ig();Mg();hr();ur();Lg();M();aD();Uk();cD();YW();zi();ZW();rF();sF();Gr();fg();Bk();Ju();Gy();Ns();Loe=6e4,Boe=5*6e4,Uoe=10,Woe=250});var uF=p(()=>{"use strict";Q();Bo();jy();Ae();M()});var Ul,dF=p(()=>{"use strict";Ul=class extends Error{remedy;exitCode;constructor(t,r={}){super(t,r.cause===void 0?void 0:{cause:r.cause}),this.name="OperatorActionableError",this.remedy=r.remedy,this.exitCode=r.exitCode??1}}});import{existsSync as Foe,mkdirSync as $oe}from"node:fs";import Koe from"node:path";function Hoe(e){let t=typeof e.repo=="string"?e.repo.trim():"";if(t)return t;let r=ra();return r?r.repo:(xt("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function joe(e){let t=e.repoLabel??"the repo",r=[],n=e.explicitBase?.trim();n&&r.push({ref:n,source:"flag",origin:"--base"});let o=e.envBaseRef?.trim();o&&r.push({ref:o,source:"env",origin:"KYNVER_RUN_BASE_REF"});let s=e.configDefaultBase?.trim();s&&r.push({ref:s,source:"config",origin:"defaultBase in ~/.kynver/config.json"});let i=r[0];if(i){if(e.verifyRef(i.ref))return{base:i.ref,source:i.source};throw new Error([`run base ref "${i.ref}" (from ${i.origin}) does not resolve in ${t}.`,"Fetch it (`git fetch origin`) or fix the override \u2014 refusing to silently use a different base."].join(" "))}if(e.verifyRef("origin/main"))return{base:"origin/main",source:"origin/main"};let a=e.resolveRemoteHeadRef();if(a&&e.verifyRef(a))return{base:a,source:"remote-head",note:`origin/main not found in ${t} \u2014 using the remote default branch ${a}`};throw new Error([`cannot resolve a base ref for a new run in ${t}: origin/main does not exist`,a?`and the remote default branch (${a}) did not verify either.`:"and no remote default branch could be resolved (origin/HEAD unset).",`Run \`git fetch origin\` in ${t}, or pass --base <ref> / set KYNVER_RUN_BASE_REF / set defaultBase in ~/.kynver/config.json.`].join(" "))}function Voe(e){let t=re(e,["symbolic-ref","--quiet","refs/remotes/origin/HEAD"]);if(t.status===0){let n=t.stdout.trim().replace(/^refs\/remotes\//,"");if(n)return n}let r=re(e,["ls-remote","--symref","origin","HEAD"]);if(r.status===0){let n=/^ref:\s+refs\/heads\/(\S+)\s+HEAD/m.exec(r.stdout);if(n?.[1])return`origin/${n[1]}`}return null}function Goe(e,t){let r=A();try{return joe({explicitBase:typeof t.base=="string"?t.base:void 0,envBaseRef:process.env.KYNVER_RUN_BASE_REF,configDefaultBase:r.defaultBase,verifyRef:n=>re(e,["rev-parse","--verify","--quiet",`${n}^{commit}`]).status===0,resolveRemoteHeadRef:()=>Voe(e),repoLabel:e})}catch(n){throw new Ul(n.message,{remedy:"Diagnose: run `kynver doctor runner-install`.",cause:n})}}function eR(e){let t=qI(Hoe(e));ER(t);let r=e.id?sy(String(e.id)):Jl(String(e.name||"run")),n=q(r);Foe(n)&&Joe(`run already exists: ${r}`),$oe(n,{recursive:!0});let o=Goe(t,e);o.note&&console.error(o.note);let s=o.base,i=ue(t,["rev-parse",s]).trim(),a=Wt(),l={id:r,name:String(e.name||r),repo:t,base:s,baseCommit:i,status:"created",createdAt:new Date().toISOString(),workers:{},...a.identity?{boxKind:a.identity.boxKind,runnerId:a.identity.runnerId,harnessRoot:a.identity.harnessRoot}:{}};Re(Koe.join(n,"run.json"),l);let c={runId:r,runDir:n,repo:t,base:s,baseCommit:i};return console.log(JSON.stringify(c,null,2)),c}function Joe(e){throw new Ul(e)}var tR=p(()=>{"use strict";_e();Q();uF();M();ms();Rd();An();K();dF()});function pF(e,t){return e.filter(n=>n.repo===t&&!Tr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]??null}var fF=p(()=>{"use strict";_e();an()});var mF=p(()=>{"use strict";hr();as();Ng()});var Af=p(()=>{"use strict";hr();ur()});var If=p(()=>{"use strict"});var rR=p(()=>{"use strict"});var nR=p(()=>{"use strict";mF();hr();as();Af();ur();If();rR()});var gF=p(()=>{"use strict"});var hF=p(()=>{"use strict";Af();If()});var yF=p(()=>{"use strict";ur();hr()});var kF=p(()=>{"use strict";K();ct();_t();M();Mg();gF();hF();ur();Af();yF();_c();Jo();as();nR();If();rR();Q()});var bF=p(()=>{"use strict";nR();kF()});var vF=p(()=>{"use strict";Jo();_c();K();ur();Ec();hm();Ui();Q()});function RF(e,t){return pF(e,t)?.id??null}var wF=p(()=>{"use strict";K();ng();Zv();wg();Ig();iu();tR();Q();fF();ms();bF();pg();vm();ms();fo();vF()});var EF={};mR(EF,{prepareDesktopRuntime:()=>use,resolveDesktopRepository:()=>CF});import{spawnSync as SF}from"node:child_process";import{randomBytes as Zoe}from"node:crypto";import{existsSync as ese,mkdirSync as tse,readFileSync as rse,realpathSync as _F,statSync as nse,writeFileSync as ose}from"node:fs";import{homedir as sse}from"node:os";import sR from"node:path";function we(e,t){return{ok:!1,code:e,message:t}}function ise(){return sR.join(sse(),".kynver","desktop-binding.json")}function ase(e){if(!ese(e))return null;try{let t=JSON.parse(rse(e,"utf8"));if(t?.version===1&&typeof t.cloudOrigin=="string"&&typeof t.accountId=="string"&&typeof t.agentOsId=="string"&&typeof t.repo=="string"&&typeof t.runId=="string")return t}catch{}return null}function lse(e,t){tse(sR.dirname(e),{recursive:!0}),ose(e,`${JSON.stringify(t,null,2)}
539
+ `,{mode:384})}function xF(e,t){return e===401||e===403?we("access_denied",`${t} was refused (${e})`):e===0?we("network",`${t} could not reach Kynver`):we("server_error",`${t} failed (${e})`)}async function oR(e,t,r,n={}){try{let o=await pt(e,{...n,headers:{...n.headers,Authorization:`Bearer ${t}`}},r),s=await o.json().catch(()=>null);return{status:o.status,body:s}}catch{return{status:0,body:null}}}function cse(e){return(e?.accessibleItems??[]).filter(t=>t.access?.isOwner===!0&&typeof t.agentOs?.id=="string").map(t=>(t.agentOs?.id).trim()).filter(Boolean)}function CF(e,t="git"){let r=SF(t,["--version"],Z({encoding:"utf8"}));if(r.error||r.status!==0)return we("no_git","Git is not installed or not on PATH");let n;try{if(n=_F.native(sR.resolve(e)),!nse(n).isDirectory())return we("not_a_repository","The selected path is not a folder")}catch{return we("not_a_repository","The selected folder does not exist")}let o=SF(t,["rev-parse","--is-bare-repository","--show-toplevel"],Z({cwd:n,encoding:"utf8"})),s=(o.stdout??"").trim().split(/\r?\n/);if(o.status!==0||s[0]!=="false"||!s[1])return we("not_a_repository","The selected folder is not inside a Git working tree");try{return{ok:!0,repo:_F.native(s[1].trim())}}catch{return we("not_a_repository","The Git working tree root could not be resolved")}}async function use(e,t={}){let r=t.fetchImpl??fetch,n=t.acquireOwnerLease??su,o=t.bindingPath??ise(),s=[],i=sr(e.apiBaseUrl);if(!i)return we("invalid_input","apiBaseUrl is required");let a=_i(i),l=new URL(a).origin;if(e.agentOsId!==void 0&&!ts(e.agentOsId).ok)return we("invalid_input","agentOsId is not a valid workspace id");let c;try{c=Ce()}catch(_){if(_ instanceof hi)return we("credentials_unavailable","This computer's credentials have not been provided");throw _}if(!c)return we("credentials_unavailable","This computer is not paired");let u=await oR(`${a}/api/users/me`,c,r);if(u.status!==200)return xF(u.status,"Account lookup");let d=typeof u.body?.id=="string"?u.body.id:"";if(!d)return we("server_error","Account lookup returned no account id");if(e.expectedAccountId&&e.expectedAccountId!==d)return we("account_mismatch","The paired credentials belong to a different account");let f=await oR(`${a}/api/agent-os/provision`,c,r,{method:"POST"});!(f.status>=200&&f.status<300)&&f.status!==401&&f.status!==403&&s.push(`workspace self-provision returned ${f.status||"no response"}; continuing with existing access`);let g=await oR(`${a}/api/agent-os`,c,r);if(g.status!==200)return xF(g.status,"Workspace lookup");let h=g.body,y;if(e.agentOsId){if(!cse(h).includes(e.agentOsId))return we("agent_os_not_owned","That workspace is not owned by the paired account");y=e.agentOsId}else{let _=tg(h);if(!_?.id)return we("no_workspace","No workspace owned by this account was found");y=_.id}let b=CF(e.repo,t.gitBinary);if(!b.ok)return b;let k=b.repo,v=await n({agentOsId:y,ownerKind:"desktop"});if(!v.ok)return{ok:!1,code:"owner_conflict",message:v.remedy,holder:v.holder?{ownerKind:v.holder.ownerKind,pid:v.holder.pid,runtimeVersion:v.holder.runtimeVersion,acquiredAt:v.holder.acquiredAt}:null};let S=v.lease;try{Fe({...A(),apiBaseUrl:a,agentOsId:y,defaultRepo:k});let _=dg(A());s.push(..._.warnings);let R=A().boxId?.trim()??"";if(!R)return S.release(),we("local_state_error","Box identity could not be established");if(await og(qr()),!Ne(y))try{let U=await Dn(y,{baseUrl:a,apiKey:c});Tn(y,U)}catch(U){let N=U.message;if(P_(N)==="access_denied")return S.release(),we("access_denied","This computer was refused a runner credential");s.push("runner credential mint did not succeed yet; the runtime retries automatically")}let w=ase(o),B=w!==null&&w.cloudOrigin===l&&w.accountId===d&&w.agentOsId===y&&w.repo===k,j="";if(B){let U=RF(xe().filter(N=>N.id===w.runId),k);U&&(j=U)}if(!j){let U=`${Jl("desktop")}-${Zoe(3).toString("hex")}`;j=eR({repo:k,name:"desktop",id:U}).runId}lse(o,{version:1,cloudOrigin:l,accountId:d,agentOsId:y,repo:k,runId:j});let O=Yc(k);O||s.push("the repository has no origin remote; nothing can run until it has one");let{runnerId:T}=Me({runId:j});return{ok:!0,prepared:{accountId:d,agentOsId:y,runId:j,repo:k,boxId:R,repoIdentity:O,runnerId:T},lease:S,warnings:s}}catch(_){return S.release(),we("local_state_error",_.message)}}var AF=p(()=>{"use strict";ir();ng();rg();K();_t();hr();as();iu();zc();Q();kr();pg();wF();tR();M()});_t();import{pathToFileURL as dse}from"node:url";var vR="credential.persist";function RR(e,t){let r,n=new Map,o=s=>{r=s.apiKey?.trim()||void 0,n=new Map(Object.entries(s.runnerTokens??{}).map(([i,a])=>[i.trim(),a.trim()]).filter(([i,a])=>i&&a))};return o(e),{kind:"desktop",getApiKey:()=>r,getRunnerToken(s){if(s)return n.get(s);if(n.size===1)return n.values().next().value},persistApiKey(s){let i=s.trim();if(!i)throw new Error("refusing to persist an empty API key");r=i,t({v:1,type:vR,kind:"apiKey",value:i})},persistRunnerToken(s,i){let a=s.trim(),l=i.trim();if(!a||!l)throw new Error("refusing to persist an empty runner token binding");n.set(a,l),t({v:1,type:vR,kind:"runnerToken",agentOsId:a,value:l})},reseed:o}}Vc();zc();Un();Qm();var b_=/^lg_[a-z0-9]{6,20}$/,n1=/^cr_[0-9a-f]{12}$/,o1=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Wn=(e,t,r=1)=>typeof e=="string"&&e.length>=r&&e.length<=t&&!e.includes("\0");function ss(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function v_(e){let t=["v","type","id","agentOsId","op"];switch(e.op){case"key":return ss(e,[...t,"key"])??(Wn(e.key,64,40)&&/^[A-Za-z0-9+/]{43}=$/.test(e.key)?{op:"key",key:e.key}:"invalid key");case"list":case"wipe":return ss(e,t)??{op:e.op};case"remove":return ss(e,[...t,"handle"])??(typeof e.handle=="string"&&b_.test(e.handle)?{op:"remove",handle:e.handle}:"invalid handle");case"code":{let r=ss(e,[...t,"requestId","code"]);return r||(e.requestId!==void 0&&!(typeof e.requestId=="string"&&n1.test(e.requestId))?"invalid requestId":Wn(e.code,16)?{op:"code",code:e.code,...e.requestId?{requestId:e.requestId}:{}}:"invalid code")}case"add":{let r=ss(e,[...t,"login","replaceHandle"]);if(r)return r;let n=e.login;return!o1(n)||ss(n,["origin","label","username","password","totp"])||!Wn(n.origin,2048)||!Wn(n.label,mt.maxLabel)||!Wn(n.username,mt.maxUsername)||!Wn(n.password,mt.maxPassword)||n.totp!==void 0&&!Wn(n.totp,mt.maxTotp,0)?"invalid login":e.replaceHandle!==void 0&&!(typeof e.replaceHandle=="string"&&b_.test(e.replaceHandle))?"invalid replaceHandle":{op:"add",login:{origin:n.origin,label:n.label,username:n.username,password:n.password,...n.totp?{totp:n.totp}:{}},...e.replaceHandle?{replaceHandle:e.replaceHandle}:{}}}default:return"unknown site_login op"}}async function R_(e,t,r){let n=e.store(t),o=e.audit(t);switch(r.op){case"key":{let s=Buffer.from(r.key,"base64");try{if(n.exists()&&n.keyMode()==="passphrase")return{state:e.isUnlocked(t)?"unlocked":"locked",keyMode:"passphrase"};if(n.exists())try{n.unlockWithKey(s)}catch(i){if(!(i instanceof z)||i.code!=="bad_key")throw i;e.wipe(t),o.record({event:"wipe",ok:!0,code:"keychain_key_replaced"})}return n.exists()||n.createWithKeychainKey(s),e.unlock(t,s,{keychain:!0}),{state:"unlocked",keyMode:"keychain"}}finally{s.fill(0)}}case"list":return{logins:n.list(),report:e.report(t),codes:e.listCodeRequests(t)};case"add":{let s=e.key(t);if(!s)throw new z("saved logins are locked","locked");let i=r.replaceHandle?n.replace(s,r.replaceHandle,r.login):n.add(s,r.login);return r.login.password="",o.record({event:r.replaceHandle?"replace":"add",ok:!0,handle:i.handle,label:i.label,username:i.username,origin:i.origin}),{login:i}}case"remove":{let s=n.get(r.handle),i=n.remove(r.handle);return i&&s&&o.record({event:"remove",ok:!0,handle:r.handle,label:s.label,username:s.username,origin:s.origin}),{removed:i}}case"code":return await e.submitCode(r.requestId??null,r.code,t);case"wipe":return{wiped:e.wipe(t)}}}zi();Un();var pse=1,Pf=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,gi=/^[A-Za-z0-9_-]{1,64}$/,fse=/^[a-z0-9][a-z0-9._-]{0,127}$/i,IF=4096,mse=4096,gse=16;function iR(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Wl(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function Fl(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!e.includes("\0")}function hse(e){if(!Fl(e,2048))return!1;try{let t=new URL(e);return t.username||t.password||t.search||t.hash?!1:t.protocol==="https:"?!0:t.protocol==="http:"&&(t.hostname==="localhost"||t.hostname==="127.0.0.1")}catch{return!1}}function yse(e){if(!iR(e))return{ok:!1,message:"message must be an object"};if(e.v!==pse)return{ok:!1,message:"unsupported protocol version"};let t=r=>({ok:!1,message:r});switch(e.type){case"credentials":{let r=Wl(e,["v","type","apiKey","runnerTokens"]);if(r)return t(r);if(e.apiKey!==void 0&&!Fl(e.apiKey,IF))return t("invalid apiKey");let n;if(e.runnerTokens!==void 0){if(!iR(e.runnerTokens))return t("invalid runnerTokens");let o=Object.entries(e.runnerTokens);if(o.length>gse)return t("too many runnerTokens");n={};for(let[s,i]of o){if(!Pf.test(s)||!Fl(i,IF))return t("invalid runnerTokens entry");n[s]=i}}return{ok:!0,value:{v:1,type:"credentials",...e.apiKey!==void 0?{apiKey:e.apiKey}:{},...n?{runnerTokens:n}:{}}}}case"prepare":{let r=Wl(e,["v","type","id","apiBaseUrl","repo","agentOsId","expectedAccountId"]);return r?t(r):typeof e.id!="string"||!gi.test(e.id)?t("invalid id"):hse(e.apiBaseUrl)?Fl(e.repo,mse)?e.agentOsId!==void 0&&(typeof e.agentOsId!="string"||!Pf.test(e.agentOsId))?t("invalid agentOsId"):e.expectedAccountId!==void 0&&!Fl(e.expectedAccountId,128)?t("invalid expectedAccountId"):{ok:!0,value:{v:1,type:"prepare",id:e.id,apiBaseUrl:e.apiBaseUrl,repo:e.repo,...e.agentOsId!==void 0?{agentOsId:e.agentOsId}:{},...e.expectedAccountId!==void 0?{expectedAccountId:e.expectedAccountId}:{}}}:t("invalid repo"):t("invalid apiBaseUrl")}case"policy":{let r=Wl(e,["v","type","id","policy"]);if(r)return t(r);if(typeof e.id!="string"||!gi.test(e.id))return t("invalid id");let n=XS(e.policy);return typeof n=="string"?t(`invalid policy: ${n}`):{ok:!0,value:{v:1,type:"policy",id:e.id,policy:n}}}case"start":{let r=Wl(e,["v","type","id","runId","agentOsId"]);return r?t(r):typeof e.id!="string"||!gi.test(e.id)?t("invalid id"):typeof e.runId!="string"||!fse.test(e.runId)?t("invalid runId"):typeof e.agentOsId!="string"||!Pf.test(e.agentOsId)?t("invalid agentOsId"):{ok:!0,value:{v:1,type:"start",id:e.id,runId:e.runId,agentOsId:e.agentOsId}}}case"site_login":{if(typeof e.id!="string"||!gi.test(e.id))return t("invalid id");if(typeof e.agentOsId!="string"||!Pf.test(e.agentOsId))return t("invalid agentOsId");let r=v_(e);return typeof r=="string"?t(r):{ok:!0,value:{v:1,type:"site_login",id:e.id,agentOsId:e.agentOsId,...r}}}case"stop":case"status":{let r=Wl(e,["v","type","id"]);return r?t(r):typeof e.id!="string"||!gi.test(e.id)?t("invalid id"):{ok:!0,value:{v:1,type:e.type,id:e.id}}}default:return t("unknown message type")}}function kse(e){return iR(e)&&typeof e.id=="string"&&gi.test(e.id)?e.id:null}function bse(e){let t=kR()?"ready":"awaiting_credentials",r=null,n=null,o=null,s=(l,c,u)=>e.send({v:1,type:"reply",id:l,ok:!1,error:{code:c,message:u}}),i=(l,c)=>e.send({v:1,type:"reply",id:l,ok:!0,result:c});async function a(l){if(Dm(l))return;let c=yse(l);if(!c.ok){s(kse(l),"invalid_message",c.message);return}let u=c.value;switch(u.type){case"credentials":{let d={apiKey:u.apiKey,runnerTokens:u.runnerTokens};r?r.reseed(d):(r=RR(d,f=>e.send(f)),yR(r)),t==="awaiting_credentials"&&(t="ready"),e.send({v:1,type:"event",name:"credentials_accepted",state:t});return}case"status":{let d=Fm();i(u.id,{state:t,prepared:n,policyRevision:d?.revision??null});return}case"policy":{if(!e_(u.policy))return s(u.id,"stale_policy","a newer execution policy is already installed");i(u.id,{policyRevision:u.policy.revision});return}case"prepare":{if(t==="awaiting_credentials")return s(u.id,"credentials_unavailable","credentials have not been provided");if(t!=="ready")return s(u.id,"invalid_state",`cannot prepare while ${t}`);t="preparing";let{v:d,type:f,id:m,...g}=u,h;try{h=await e.prepare(g)}catch(y){return t="ready",s(m,"local_state_error",y.message)}if(!h.ok){t="ready",e.send({v:1,type:"reply",id:m,ok:!1,error:{code:h.code,message:h.message}});return}n=h.prepared,o=h.lease,t_({accountId:n.accountId,agentOsId:n.agentOsId}),t="prepared",i(m,{prepared:n,warnings:h.warnings});return}case"start":{if(t!=="prepared"||!n||!o)return s(u.id,"invalid_state",`cannot start while ${t}`);if(u.runId!==n.runId||u.agentOsId!==n.agentOsId)return s(u.id,"not_prepared","start must name the prepared run and workspace");let d=Fm();if(!d)return s(u.id,"policy_required","no approved execution policy has been provided");if(d.accountId!==n.accountId||d.agentOsId!==n.agentOsId)return s(u.id,"policy_mismatch","the execution policy is for another account or workspace");t="running",i(u.id,{state:t});try{await e.runDaemon({run:n.runId,agentOsId:n.agentOsId,execute:!0},{hostCapability:"desktop-supervised",ownerKind:"desktop",ownerLease:o})}finally{o.release();let f=e.daemonExitCode?.()??0;e.send({v:1,type:"event",name:"daemon_exited",state:"stopping",exitCode:f}),e.exit(f)}return}case"site_login":{if(!n||t!=="prepared"&&t!=="running")return s(u.id,"invalid_state",`saved logins are unavailable while ${t}`);if(u.agentOsId!==n.agentOsId)return s(u.id,"workspace_mismatch","saved logins belong to the prepared workspace only");let{v:d,type:f,id:m,agentOsId:g,...h}=u;try{i(m,await R_(Pt(),g,h))}catch(y){let b=y instanceof z?y.code:"failed";s(m,`site_login_${b}`,y instanceof z?y.message:"the saved-login request failed")}return}case"stop":{if(t==="running"){t="stopping",i(u.id,{state:t}),e.requestDaemonStop();return}i(u.id,{state:"stopping"}),o?.release(),e.exit(0);return}}}return{handle:a,get state(){return t}}}async function vse(e=process){if(typeof e.send!="function"||!e.connected){console.error(JSON.stringify({event:"desktop_entry_refused",reason:"no_ipc_channel"})),e.exitCode=2;return}hR();for(let s of gR)delete e.env[s];let[{prepareDesktopRuntime:t},{runDaemon:r}]=await Promise.all([Promise.resolve().then(()=>(AF(),EF)),Promise.resolve().then(()=>(Zv(),cF))]),n=s=>{if(!e.connected||typeof e.send!="function")throw new Error("desktop IPC channel is closed");e.send(s)},o=bse({send:n,prepare:s=>t(s),runDaemon:r,requestDaemonStop:()=>{e.emit("message",{type:jc},void 0)},exit:s=>e.exit(s),daemonExitCode:()=>typeof e.exitCode=="number"?e.exitCode:0});r_(s=>{try{n({v:1,type:"event",name:"claim_denied",state:o.state,taskId:s.taskId,code:s.code,...s.consentRequired?{consentRequired:s.consentRequired}:{}})}catch{}}),Pt().onCodeRequest(({agentOsId:s,...i})=>{try{n({v:1,type:"event",name:"site_login_code_requested",state:o.state,request:i})}catch{}}),e.on("message",s=>{o.handle(s).catch(i=>{console.error(JSON.stringify({event:"desktop_entry_error",error:i.message}))})}),e.on("disconnect",()=>{if(o.state==="running"){e.emit("message",{type:jc},void 0);return}e.exit(0)}),n({v:1,type:"event",name:"ready",state:o.state})}function Rse(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===dse(e).href}catch{return!1}}Rse()&&vse();export{pse as DESKTOP_ENTRY_PROTOCOL_VERSION,bse as createDesktopEntryController,yse as parseDesktopEntryMessage,vse as startDesktopEntry};