@kynver-app/runtime 0.2.130 → 0.2.135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/dist/cli.js +208 -195
- package/dist/daemon-tick-thread.js +55 -51
- package/dist/desktop-entry.js +157 -149
- package/dist/index.js +232 -219
- package/dist/local-run-store/index.js +10 -10
- package/dist/server/cleanup.js +15 -15
- package/dist/server/default-repo.js +2 -2
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +1 -1
- package/dist/server/model-routing.js +4 -4
- package/dist/server/monitor.js +8 -8
- package/dist/server/worker-policy.js +3 -3
- package/package.json +1 -1
package/dist/desktop-entry.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var
|
|
2
|
-
`),
|
|
1
|
+
var QK=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 XR=(e,t)=>{for(var r in t)QK(e,r,{get:t[r],enumerable:!0})};function ZR(){Wo=!0}function rt(){return Wo}function ew(e){if(!Wo)throw new Error("installDesktopCredentialProvider requires desktop credential mode");if(e.kind!=="desktop")throw new Error("only a desktop credential provider may be installed");if(Oi)throw new Error("desktop credential provider is already installed");Oi=e}function tw(){return Oi!==null}function rw(e){if(!Wo)return e;if(!Oi)throw new Ii;return Oi}function Oe(e,t=process.env){if(Wo)return;let r=t[e]?.trim();return r||void 0}function um(){if(Wo)throw new cm}var QR,Ii,cm,Wo,Oi,Et=p(()=>{"use strict";QR=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN"],Ii=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},cm=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},Wo=!1,Oi=null});import{homedir as dm}from"node:os";import Tn from"node:path";function lc(e){return e==="~"?dm():e.startsWith("~/")||e.startsWith("~\\")?Tn.join(dm(),e.slice(2)):e}function Te(e){return Tn.resolve(lc(e))}function ZK(e){let t=lc(e),r=Tn.resolve(t),n=Tn.resolve(dm());return r===n?"~":r.startsWith(`${n}${Tn.sep}`)?`~/${Tn.relative(n,r).split(Tn.sep).join("/")}`:r.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function qe(e){return ZK(e)}var dt=p(()=>{"use strict"});import{spawnSync as e$}from"node:child_process";function n$(e){return["/PID",String(e),"/T","/F"]}function o$(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===t$||/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 s$(e){let t=e$("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:r$});return{status:t.status,stderr:t.stderr??"",...t.error?{error:t.error}:{}}}function i$(e){return Number.isInteger(e)&&e>0}function he(e,t="SIGTERM",r={}){if(!i$(e))return{method:"none",outcome:"not_found"};if((r.platform??process.platform)==="win32"){let s=r.runTaskkill??s$;return o$(s(n$(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 nt(e,t="SIGTERM",r={}){if((r.platform??process.platform)==="win32"&&e.pid){he(e.pid,t,r);return}try{e.kill(t)}catch{}}var t$,r$,Ti=p(()=>{"use strict";t$=128,r$=15e3});import{existsSync as a$,mkdirSync as l$,readFileSync as sw,readdirSync as Wae,renameSync as c$,rmSync as u$,statSync as iw,writeFileSync as d$}from"node:fs";import{randomBytes as p$}from"node:crypto";import f$ from"node:path";function pt(e){console.error(e),process.exit(1)}function ee(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function At(e,t){return e||pt(`missing ${t}`),e}function Ni(e){try{return JSON.parse(e)}catch{return null}}function K(e,t){try{return JSON.parse(sw(e,"utf8"))}catch(r){if(arguments.length>1)return t;pt(`failed to read ${e}: ${r.message}`)}}function Re(e,t){l$(f$.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.${p$(4).toString("hex")}.tmp`;try{d$(r,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`),c$(r,e)}catch(n){try{u$(r,{force:!0})}catch{}throw n}}function B(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function cc(e){return B(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Nn(e){return String(e).replace(/\/+$/,"")}function uc(e){try{return iw(e).size}catch{return 0}}function dc(e){try{return iw(e).mtime.toISOString()}catch{return null}}function Ko(e,t){return a$(e)?sw(e,"utf8").split(`
|
|
3
3
|
`).slice(-t).join(`
|
|
4
|
-
`):""}function
|
|
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=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),r=
|
|
9
|
-
`).filter(Boolean),n=null,o=
|
|
4
|
+
`):""}function pc(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function fc(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 aw(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 pm(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var D=p(()=>{"use strict";Ti()});function k$(e){let t=e[gm];return t?new Set(t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean)):new Set}function b$(e,t={}){return m$.has(e)?!0:h$.has(e)||t.operatorAllow?.has(e)||y$.some(r=>e.endsWith(r))?!1:g$.some(r=>e.endsWith(r))}function Di(e){let t=k$(e),r={...e};for(let n of Object.keys(r))b$(n,{operatorAllow:t})&&delete r[n];return r}var fm,m$,g$,mm,h$,y$,gm,Mi=p(()=>{"use strict";fm=["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"],m$=new Set(fm),g$=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],mm=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],h$=new Set(mm),y$=["_PUBLIC_KEY"],gm="KYNVER_WORKER_ENV_ALLOW"});import{existsSync as v$,statSync as R$}from"node:fs";import{spawnSync as cw}from"node:child_process";function ue(e,t,r={}){let n=cw("git",t,ee({cwd:e,encoding:"utf8"}));if(n.status!==0&&!r.allowFailure){let o=w$(e,t,n);if(r.throwError)throw new Error(o);pt(o)}return n.stdout||""}function w$(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=Te(t);if(!v$(r))return r===t?`git repo path does not exist: ${r}`:`git repo path does not exist: ${r} (from ${t})`;try{if(!R$(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 uw(e){let t=S$(e);t&&pt(t),ue(Te(e.trim()),["rev-parse","--show-toplevel"])}function Li(e){return ue(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(t=>t.trim()).filter(Boolean)}function te(e,t){try{let r=cw("git",t,ee({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 lw(e,t,r){let n=te(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 mc(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 $o(n,"missing worktree path");let s=te(e,["rev-parse","HEAD"]);if(s.status!==0)return $o(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=te(e,["rev-parse",n]);if(f.status!==0)return $o(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=lw(e,i,a),c=lw(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 $o(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";dt();D();Mi()});import{existsSync as _$,mkdirSync as dw}from"node:fs";import{homedir as hm}from"node:os";import Ho from"node:path";function fw(e=hm()){return Ho.join(e,".kynver",x$)}function mw(e,t=hm()){return Ho.resolve(e)===Ho.resolve(fw(t))}function C$(e){te(e,["config","--get","user.email"]).status!==0&&te(e,["config","user.email","kynver@local"]),te(e,["config","--get","user.name"]).status!==0&&te(e,["config","user.name","Kynver"])}function pw(e){te(e,["rev-parse","--verify","HEAD^{commit}"]).status!==0&&(C$(e),te(e,["commit","--allow-empty","-m","kynver byoc workspace"]))}function gw(e=hm()){let t=fw(e);dw(Ho.dirname(t),{recursive:!0});let r=!1;_$(t)||(dw(t,{recursive:!0}),r=!0);let n=te(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return te(t,["init","-b",gc]).status!==0&&(te(t,["init"]),te(t,["symbolic-ref","HEAD",`refs/heads/${gc}`])),pw(t),r=!0,{repo:Ho.resolve(t),created:r};let o=Ho.resolve(n.stdout.trim()||t);return pw(o),{repo:o,created:r}}var x$,gc,ym=p(()=>{"use strict";_e();x$="workspace",gc="main"});import{existsSync as bm,readFileSync as yw}from"node:fs";import{homedir as kw}from"node:os";import ft from"node:path";import{fileURLToPath as E$}from"node:url";function P$(e){let t=ft.join(e,"package.json");if(!bm(t))return null;try{let r=JSON.parse(yw(t,"utf8"));return typeof r.name=="string"?r.name.trim():null}catch{return null}}function bw(e){return P$(e)==="kynver"}function hw(e){let t=ft.resolve(e);if(!bm(t))return null;let r=te(t,["rev-parse","--show-toplevel"]);if(r.status!==0)return null;let n=r.stdout.trim();return n.length?ft.resolve(n):null}function I$(e=import.meta.url){let t=ft.dirname(E$(e));for(let r=0;r<8;r+=1){let n=ft.join(t,"package.json");if(bm(n))try{if(JSON.parse(yw(n,"utf8")).name==="@kynver-app/runtime")return t}catch{}let o=ft.dirname(t);if(o===t)break;t=o}return null}function km(e,t,r,n,o){if(!r)return;let s=ft.resolve(r);e.has(s)||(o?.requireMonorepo??!0)&&!bw(s)||(e.add(s),t.push({repo:s,source:n}))}function vw(e){let t=e?.cwd??process.cwd(),r=new Set,n=[];km(r,n,hw(t),"cwd_git",{requireMonorepo:!1});let o=I$(e?.runtimeModuleUrl??import.meta.url);o&&km(r,n,hw(o),"runtime_checkout");let s=kw();for(let a of A$)km(r,n,Te(ft.join(s,a)),"well_known_path");let i=ft.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!bw(a.repo))return!0;let l=ft.resolve(a.repo);return i===l||i.startsWith(`${l}${ft.sep}`)})}function hc(e){return vw(e)[0]??null}function O$(e){let t=ft.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 yc(e){let t=vw(e),r=t.find(o=>!O$(o.repo));if(r)return r;if(t[0])return t[0];let{repo:n}=gw(e?.home??kw());return{repo:n,source:"byoc_workspace"}}var A$,Bi=p(()=>{"use strict";_e();dt();ym();A$=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as Sw,readFileSync as T$}from"node:fs";import Dn from"node:path";function D$(e){return e.includes("/")||e.includes("\\")}function M$(e){return(e.PATHEXT||N$).split(";").map(t=>t.trim().toLowerCase()).filter(t=>t.startsWith("."))}function L$(e){let t=Object.keys(e).find(r=>r.toUpperCase()==="PATH");return t?e[t]??"":""}function B$(e,t={}){let r=t.env??process.env,n=t.exists??Sw,o=M$(r),s=Dn.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(D$(e)||Dn.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of L$(r).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(Dn.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function ww(e){return e.replace(/^[\\/]+/,"")}function F$(e){let t=e.split(/\r?\n/),r=new Map;for(let s of t){let i=U$.exec(s);i&&r.set(i[1].toUpperCase(),i[2])}let n=t.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Rw.exec(n);if(o)return ww(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=r.get(s[1].toUpperCase()),a=i?Rw.exec(i):null;if(a)return ww(a[1])}return null}function W$(e,t={}){if((t.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=B$(e,t);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=Dn.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=t.readText??(m=>T$(m,"utf8")),i=t.exists??Sw,a;try{a=s(n)}catch{throw new Ui(n)}let l=F$(a);if(!l)throw new Ui(n);let c=Dn.win32.dirname(n),u=Dn.win32.join(c,l);if(!i(u))throw new Ui(n);let d=Dn.win32.join(c,"node.exe");return{executable:i(d)?d:t.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function ie(e,t,r={}){let n=W$(e,r);return[n.executable,[...n.prefixArgs,...t]]}var Ui,N$,Rw,U$,Fe=p(()=>{"use strict";Ui=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},N$=".COM;.EXE;.BAT;.CMD";Rw=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,U$=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var vm=p(()=>{"use strict";Fe()});function Fi(e){let t=Nn(e);try{let r=new URL(t);return r.hostname.toLowerCase()===_w?(r.hostname=`www.${_w}`,Nn(r.toString())):t}catch{return t}}function dr(e){if(e?.trim())return Fi(Nn(e.trim()))}async function mt(e,t,r=fetch){let n=Fi(e),o=new Headers(t?.headers),s=0;for(;s<=xw;){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 ${xw} redirects for ${e}`)}var _w,xw,pr=p(()=>{"use strict";D();_w="kynver.com";xw=10});function Mn(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 kc(e,t){return e[t]?.trim()||null}function Cw(e){let t=e?.split(":")[0]?.trim();return t?Mn(t):null}function ot(e=process.env,t={}){let r=[],n=Cw(t.boxId),o=Cw(kc(e,"KYNVER_BOX_ID")),s=t.boxKind?.trim();if(s)return n&&n!==Mn(s)&&r.push(`config.boxId=${t.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:Mn(s),source:"config",slugInferenceBlocked:!1,warnings:r};let i=kc(e,"KYNVER_BOX_KIND");if(i)return o&&o!==Mn(i)&&r.push(`KYNVER_BOX_ID=${kc(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:Mn(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=kc(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 Pt(e={},t=process.env){return ot(t,e).boxKind}var We=p(()=>{"use strict"});function Rm(e,t){return e==="forge"?4:Math.max(1,t)}function fr(e,t){return e==="forge"?Math.min(Math.max(1,t),4):Math.max(1,t)}function Wi(e,t){return e==="forge"&&t>4}var jo=p(()=>{"use strict"});import{readFileSync as K$}from"node:fs";import Ew from"node:os";function Aw(e){if(e!==void 0){let t=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return t?Number(t[1])*1024:Ew.freemem()}if(process.platform==="linux")try{let r=K$("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(r)return Number(r[1])*1024}catch{}return Ew.freemem()}var Pw=p(()=>{"use strict"});import{existsSync as $$,readFileSync as H$,statfsSync as j$}from"node:fs";function wm(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!$$(e))continue;let t=H$(e,"utf8");if(/microsoft|wsl/i.test(t))return!0}catch{}return!1}function Iw(e={}){if(!(e.forceWsl===void 0?wm():e.forceWsl))return null;let r=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Vo,n=e.wslHostFreeWarnBytes??V$,o=e.wslHostFreeCriticalBytes??G$,s=e.statfs??j$,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. ${J$()}`),{ok:f,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:g,probeError:null}}function J$(){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 V$,G$,Vo,Sm=p(()=>{"use strict";V$=25*1024*1024*1024,G$=12*1024*1024*1024,Vo="/mnt/c"});import{execFileSync as Ow}from"node:child_process";import{existsSync as vc,readFileSync as Tw,readdirSync as q$,statSync as Y$}from"node:fs";import _m from"node:path";function bc(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function Nw(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Ow("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()||Vo;return t&&vc(_m.join(r,"Users",t))?t:null}function eH(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()||Vo,n=e.windowsUser??Nw();return n?`${r.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function tH(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 rH(){try{if(vc("/proc/sys/kernel/core_pattern"))return Tw("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Ow("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function nH(e){return!!(e&&/wsl-capture-crash/i.test(e))}function oH(e,t=Vo){let r=_m.join(t,"Users",e,".wslconfig");if(!vc(r))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Tw(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 sH(e){if(!vc(e))return[];let t=q$(e,{withFileTypes:!0}),r=[];for(let n of t){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=_m.join(e,n.name);try{let s=Y$(o),i=tH(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 Go(e={}){if(!(e.forceWsl===void 0?wm():e.forceWsl))return null;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Vo,n=e.windowsUser??Nw(),o=e.warnBelowBytes??bc("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",z$),s=e.criticalBelowBytes??bc("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",X$),i=e.warnCount??bc("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Q$),a=e.criticalCount??bc("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Z$),l=(e.readCorePattern??rH)(),c=nH(l),u=null;n&&(u=(e.readWslConfig??oH)(n,r));let d=u?.maxCrashDumpCount??null,f=d===-1,m=eH({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??sH)(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,w=y>=a,S=y>=i,R=!(k||w||v||S),L=null;if(!R){let j=k||w?"critical":"warning",O=(h/1024**3).toFixed(1),T=b.length>0?b.join(", "):"unknown";L=`WSL crash dumps ${j}: ${y} file(s), ${O} GiB at ${m} (executables: ${T}). `+iH({wslCaptureEnabled:c,dumpsDisabledInWslConfig:f})}return{ok:R,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:L,probeError:null}}function iH(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 z$,X$,Q$,Z$,Rc=p(()=>{"use strict";Sm();z$=5*1024*1024*1024,X$=10*1024*1024*1024,Q$=2,Z$=4});import{statfsSync as aH}from"node:fs";function qr(e={}){let t=e.diskPath?.trim()||"/",r=e.diskFreeWarnBytes??lH,n=e.diskFreeCriticalBytes??cH,o=e.diskMaxUsedPercent??uH,s=e.diskHardMaxUsedPercent??dH,i=aH(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:Iw(e.wslHost),b=e.skipWslCrashDumpCheck?null:Go(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("; ")),pH({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 pH(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 lH,cH,uH,dH,Ki=p(()=>{"use strict";Rc();Sm();lH=30*1024*1024*1024,cH=15*1024*1024*1024,uH=80,dH=90});import{existsSync as fH,readdirSync as mH}from"node:fs";import gH from"node:path";function It(e){let t=new Set;for(let n of Object.keys(e.workers||{}))t.add(B(n));let r=gH.join(q(e.id),"workers");if(!fH(r))return[...t];for(let n of mH(r,{withFileTypes:!0}))n.isDirectory()&&t.add(B(n.name));return[...t]}var Jo=p(()=>{"use strict";Q();D()});function xm(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 Dw(e){let t=e.trim();if(!t)return null;let r=xm(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let l=xm(s[1]??"");l&&n.push(l)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let l=xm(t.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Mw(e){let t=e.finalResult??e.final_result;if(t!=null)return typeof t=="string"?Dw(t)??(t.trim()||null):t;let r=typeof e.summary=="string"?e.summary.trim():"";if(!r)return null;let n=Dw(r);return n||r}var Lw=p(()=>{"use strict"});import{existsSync as hH,readFileSync as yH}from"node:fs";function Bw(e){return e==="complete"}function mr(e){return Bw(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Ne(e){let t={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!hH(e))return t;let r=Date.now()+kH,n=new Date(r).toISOString(),o=yH(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Ni(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)),Bw(t.lastHeartbeatPhase)&&(t.terminalFinalResult=Mw(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 kH,Ln=p(()=>{"use strict";Lw();D();kH=6e4});function Fw(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function wc(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 Ww(e){let t=Fw(e[0]);return!!(t&&bH.has(t))}function RH(e){let t=e.trim();return t.includes("/")?t.split("/").pop()??t:t}function wH(e){if(!e||e.includes("*"))return null;let t=RH(e);return!t||t.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(t)?t:null}function Kw(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Cm(e){if(!e)return!1;let t=e.trim();return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")}function SH(e){if(!e.startsWith("--glob="))return e;let t=e.slice(7);return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")?`--glob=${t}/**`:e}function _H(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;Uw.has(n)&&(r+=1);continue}t.push(n)}}return t}function xH(e){let t=!1,r=e.map((o,s)=>{let i=SH(o),a=e[s-1];return a&&Uw.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(t=!0),i}),n=_H(r);if(n.length===2){let[o,s]=n;if(Cm(s))return{argv:[r[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=wH(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 $w(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 Sc(e){let t=e.trim();if(!t)return{command:t,wrapped:!1};let r=wc(t);if(!r.length)return{command:t,wrapped:!1};let n=Fw(r[0]);if(!n||!vH.has(n))return{command:t,wrapped:!1};let o=$w(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 CH(e,t){let r=e.trim(),n=wc(r),o=$w(n);if(o<0)return t;let s=n.slice(0,o).join(" "),i=t.includes("'")?`"${t.replace(/"/g,'\\"')}"`:`'${t}'`;return`${s} ${i}`}function EH(e){let t=e.trim(),r=Sc(t),n=wc(r.command);if(!n.length||!Ww(n))return{segment:t,changed:!1};let o=xH(n);if(!o.changed)return{segment:t,changed:!1};let s=o.argv.join(" ");return r.wrapped?{segment:CH(t,s),changed:!0}:{segment:s,changed:!0}}function Em(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=EH(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(r),changed:!0}:{command:t,changed:!1}}function Hw(e){let t=Sc(e).command,r=wc(t.trim());return r.length&&Ww(r)?!0:/\b(rg|ripgrep)\b/i.test(t)}function jw(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 AH(e){let{pattern:t,target:r}=jw(e);return t?Cm(r)?{kind:"rg_exclude_syntax",pattern:t,target:r}:Kw(r)?{kind:"bad_scope",pattern:t,target:r}:{kind:"not_repo_search",pattern:t,target:r}:{kind:"not_repo_search"}}function PH(e){let{pattern:t,target:r}=jw(e);if(!t)return null;if(Cm(r)){let n=`${r.trim()}/**`;return{command:`rg "${t}" -g '${n}' .`,changed:!0}}return r&&Kw(r)?{command:`rg -g ${r} "${t}" .`,changed:!0}:null}function IH(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 OH(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 Am(e){let t=e.meta?.trim()||(e.command?OH(e.command):null)||null;if(t){let r=AH(t),n=IH(r);if(n)return n;let o=PH(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=Em(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 bH,vH,Uw,Vw=p(()=>{"use strict";bH=new Set(["rg","ripgrep","grep"]),vH=new Set(["bash","sh","dash","zsh"]),Uw=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function $i(e,t=200){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function DH(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 Hi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function MH(e){let t=e.metadata;if(!Hi(t))return null;let r=t.vulnerabilities;if(!Hi(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 LH(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 BH(e,t){let r=e.error;if(Hi(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?$i(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function UH(e){let t=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),r=DH(t);if(!r||!Hi(r)){let o=$i(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(Hi(r.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${BH(r,e.stderr)}`};let n=MH(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:LH(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function FH(e){return TH.test(e)}function WH(e){let t=Sc(e).command;return Gw.test(e)||Gw.test(t)||Hw(e)}function KH(e){let t=Am({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&&NH.test(n)){let i=$i(n,160);return{kind:"command_failure",exitCode:1,summary:t??`ripgrep failed (exit 1): ${i}`}}let o=Em(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=$i(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 Jw(e){let t=e.stdout??"",r=e.stderr??"",n=e.interleavedOutput??"";if(FH(e.command)){let i=t.trim()||n.trim()||r.trim();return UH({exitCode:e.exitCode,stdout:i,stderr:r})}if(WH(e.command))return KH({command:e.command,exitCode:e.exitCode,stdout:t,stderr:r,interleaved:n});let o=Am({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=$i(n||t||r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var TH,Gw,NH,qw=p(()=>{"use strict";Vw();TH=/\bnpm\s+audit\b/i,Gw=/\b(rg|ripgrep)\b/i,NH=/\b(error|invalid|unknown|panic|not found)\b/i});function ji(e){return typeof e=="string"&&$H.test(e.trim())}function _c(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 $H,xc=p(()=>{"use strict";$H=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function Cc(e,t){if(!t.pinned)return jH[e.trim()]}function Ec(e){return e?["--fallback-model",e]:[]}function VH(e,t){return`Claude Code on this computer doesn't know ${e}, so Kynver used ${t}. Update Claude Code (run \`claude update\`) to use the newer model.`}function Pm(e){if(e.type!=="system"||e.subtype!=="model_fallback"||e.trigger!=="model_not_found")return null;let t=typeof e.original_model=="string"?e.original_model:"the requested model",r=typeof e.fallback_model=="string"?e.fallback_model:"an older model";return VH(t,r)}var Ke,Yr,HH,jH,Yw,zw,gr=p(()=>{"use strict";Ke="claude-sonnet-5-5",Yr="claude-opus-5-5",HH="claude-haiku-4-5-20251001",jH={[Ke]:"claude-sonnet-4-6",[Yr]:"claude-opus-4-8"},Yw=[Ke,Yr,"claude-sonnet-4-6","claude-opus-4-8","claude-opus-4-7",HH];zw=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function Im(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function GH(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 Ac(e){if(e.event==="step_update"&&Im(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"||!Im(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=Im(t.usage)?GH(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 Om=p(()=>{"use strict"});function Tm(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Xw(){return{assistantText:""}}function JH(e,t){if(!(t.role!=="assistant"||typeof t.content!="string")){if(t.delta===!0){e.assistantText+=t.content;return}e.assistantText=t.content}}function qH(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 YH(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function Qw(e,t){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return JH(t,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!YH(e))return null;let r=Tm(e.stats)?qH(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 Zw=p(()=>{"use strict"});import{existsSync as zH,readFileSync as XH}from"node:fs";function QH(e){let t=e.timestamp_ms;return e.timestamp||e.ts||(t?new Date(t).toISOString():void 0)}function ZH(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 ej(e,t){e.finalResult=t.result||t.subtype||t.terminal_reason||"completed",_c(t)&&(e.providerTerminalError=!0,e.error=String(t.result||t.api_error_status||"stream result error"))}function qo(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function tj(e){let t=e.usage;return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function rj(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 nj(e,t){let r=tj(t);if(!r)return;let n=qo(r.input_tokens)??qo(r.inputTokens)??qo(r.prompt_tokens),o=qo(r.output_tokens)??qo(r.outputTokens)??qo(r.completion_tokens);if(n===void 0&&o===void 0)return;let s=rj(t)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function oj(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 sj(e,t){t.kind==="success"||t.kind==="search_no_matches"||(e.lastShellOutcome=t)}function Bn(e){let t={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!zH(e))return t;let r=XH(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=Xw();for(let s of r){let i=Ni(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=QH(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=ZH(f);m&&(t.currentTool=m)}let l=oj(i);l&&sj(t,Jw({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=Ac(i),u=c?null:Qw(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"&&ej(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"}nj(t,i)}return t}var Vi=p(()=>{"use strict";qw();D();xc();gr();Om();Zw()});import{accessSync as ij,constants as aj,existsSync as lj,readFileSync as cj}from"node:fs";import Nm from"node:path";function tS(e){return Nm.join(e,uj)}function dj(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 eS(e){try{return ij(e,aj.X_OK),!0}catch{return!1}}function pj(e,t=process.env){if(!e)return!1;if(e.includes("/"))return eS(e);for(let r of(t.PATH??"").split(Nm.delimiter))if(r&&eS(Nm.join(r,e)))return!0;return!1}function st(e,t,r,n={}){let o=n.env??process.env;return!r||!dj(o,n.platform)?[e,t]:pj(e,o)?[n.nodeExecutable??process.execPath,["-e",fj,tS(r),e,...t]]:[e,t]}function mj(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Pc(e){if(!e)return null;let t=tS(e);if(!lj(t))return null;try{let r=JSON.parse(cj(t,"utf8")),n=r.oomEvidence;return{exitCode:mj(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 rS(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 uj,fj,hr=p(()=>{"use strict";uj="exit.json";fj=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 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:
|
|
75
|
-
`,timeoutMs:
|
|
76
|
-
`,{mode:384})}function
|
|
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
|
|
79
|
-
`)}function
|
|
80
|
-
`,{mode:384}),
|
|
81
|
-
`,{mode:384}),
|
|
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=
|
|
83
|
-
`).filter(Boolean).slice(-
|
|
73
|
+
`});import gj from"node:path";function Dm(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.handoffState;return typeof t=="string"&&yj.has(t)}function Ic(e){return!!(e&&hj.test(e))}function sS(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Dm(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let t=e.error?.trim()??"",r=e.exit??null;if(r?.oomEvidence||Ic(t))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":nS.test(t)||nS.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 iS(e){let t=[kj(e.stopClass)],r=rS(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 kj(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 aS(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,oS/2):oS/2;return Math.min(bj,n*2**e)}function lS(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=K(gj.join(q(o.id),"workers",B(s),"worker.json"),void 0);if(!(!i||i.taskId!==t)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(Pc(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&Ic(Ko(i.stderrPath,20))&&(n+=1)}}return n}function cS(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 hj,nS,yj,oS,bj,Mm=p(()=>{"use strict";Q();D();hr();hj=/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,nS=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,yj=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);oS=2048,bj=8192});function uS(e,t=240){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function Gi(e){let t=(e??"").trim();if(!t)return null;if(ji(t))return{blocked:!0,reason:`provider authentication failed: ${uS(t)}`};for(let r of vj)if(r.test.test(t))return{blocked:!0,reason:`${r.label}: ${uS(t)}`};return null}var vj,Lm=p(()=>{"use strict";xc();gr();vj=[{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:zw,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{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 dS(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Rj(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 wj(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:dS(e.head)}function Sj(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 Yo(e){if(e.alive||Rj(e.finalResult))return null;let t=(e.changedFiles??[]).filter(i=>i.trim()).length,r=dS(e.headCommit)??wj(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:Sj(s,t,r)}}var Oc=p(()=>{"use strict"});import{existsSync as _j,readFileSync as xj,statSync as mS}from"node:fs";import Tc from"node:path";function Pj(e,t=process.env){let r=e?Ej:Cj,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 Ij(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Bm(e){try{return mS(e).mtimeMs}catch{return-1}}function Oj(e){let t=Tc.join(e,".git");try{if(mS(t).isDirectory())return t;let r=/^gitdir:\s*(.+)$/m.exec(xj(t,"utf8"));return r?Tc.resolve(e,r[1].trim()):null}catch{return null}}function pS(e){let t=Oj(e);return[Bm(e),t?Bm(Tc.join(t,"HEAD")):-2,t?Bm(Tc.join(t,"index")):-2].join(":")}function fS(e,t){return{changedFiles:Li(e),gitAncestry:mc(e,{base:t.base,baseCommit:t.baseCommit})}}function Tj(e,t){for(zr.delete(e),zr.set(e,t);zr.size>Aj;){let r=zr.keys().next().value;if(r===void 0)break;zr.delete(r)}}function gS(e,t,r){let n=Ij(t);if(!e||!e.trim())return Ji.missingWorktree++,{changedFiles:[],gitAncestry:$o(n,"missing worktree path")};let o=`${e}\0${n}`;if(!_j(e))return zr.delete(o),Ji.missingWorktree++,{changedFiles:[],gitAncestry:$o(n,`worktree no longer exists: ${e}`)};if(r.alive)return zr.delete(o),Ji.liveProbes++,fS(e,t);let s=r.ttlMs??Pj(!!t.baseCommit?.trim()),i=r.now??Date.now(),a=pS(e),l=zr.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return Ji.hits++,l.probe;Ji.misses++;let c=fS(e,t);if(s>0){let u=.8+.4*(r.random??Math.random)();Tj(o,{fingerprint:pS(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var Cj,Ej,Aj,zr,Ji,hS=p(()=>{"use strict";_e();Cj=10*6e4,Ej=60*6e4,Aj=2048,zr=new Map,Ji={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function qi(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Nj(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 Dj(e){if(qi(e.headCommit)||qi(e.prUrl)||qi(e.artifactBundlePath)||qi(e.patchPath))return!0;let t=e.gitAncestry;return!!(t?.checked&&t.headIsAncestorOfBase===!1&&qi(t.head))}function zo(e){return Nj(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Dj(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 yS(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Nc=p(()=>{"use strict"});function Um(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 kS(e){let t=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(t)?t.length:0}function Xo(e){let t=e.trim();if(!t)return null;let r=Um(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let u=Um(s[1]??"");u&&n.push(u)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let u=Um(t.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=kS(l);for(let u of n){let d=kS(u);d>c&&(l=u,c=d)}return l}var Dc=p(()=>{"use strict"});function bS(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 vS(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function Mj(e){return new Set(e.map(t=>vS(bS(t)??t)).filter(Boolean))}function RS(e,t,r){let n=bS(e)??e;if(!n)return"unrelated";let o=vS(n);return Mj(t).has(o)?"contract":r?(r.outcome==="skipped"||r.outcome==="blocked")&&r.reason?.trim()?"support":(r.outcome==="merged","unrelated"):"unrelated"}var wS=p(()=>{"use strict"});function Qo(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Lj(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Un(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Qo(e)}function Mc(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function SS(e){let t=null;if(typeof e=="string"){let o=Xo(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=Un(String(s.prUrl??s.pr_url??"")),a=Qo(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Qo(s.mergeCommit??s.merge_commit),reason:Qo(s.reason)})}return n}function _S(e,t){let r=[],n=Un(Qo(e.prUrl)??"");if(n&&r.push(n),t&&typeof t=="object"&&!Array.isArray(t)){let o=t,s=Un(String(o.prUrl??o.pr_url??""));s&&r.push(s)}return[...new Set(r)]}function xS(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(!Lj(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?Un(Qo(t.targetPrUrl)??"")??(t.targetPrUrls.length===1?Un(t.targetPrUrls[0]):null):null;if(s){let d=_S(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=SS(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=SS(n),a=new Map(i.map(d=>[Mc(d.prUrl),d])),l=new Set(t.targetPrUrls.map(d=>Mc(Un(d)??d)).filter(Boolean)),c=_S(r,n);if(t.landingOnly)for(let d of c){let f=a.get(Mc(d)),m=RS(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=Mc(Un(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 CS(e){if(e.blocked)return e.detail??e.reason}var ES=p(()=>{"use strict";Dc();wS()});function Uj(e){let t=Date.now();if(e.providerTerminalError||_c(e.finalResult)||e.finalResult&&e.error?.trim()||ji(e.error)||ji(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Gi(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!AS(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Wj(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=zo(o);if(s.blocked){let i=yS(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=xS({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=CS(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(Fj(e))return{state:"done",reason:"empty abandoned worker record"};let o=Gi(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Yo({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=Ic(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>Bj)return{state:"needs_attention",reason:`no first stream event ${pm(r)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&t-n>Fm?{state:"stale",reason:`no log/event/heartbeat activity for ${pm(n)}s`}:{state:"ok",reason:"recent activity"}}function AS(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function Fj(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 Wj(e){let t=null;if(typeof e=="string"?t=Xo(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 PS(e,t,r){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:t||(n??mr(r))}function IS(e){let t=Bn(e.stdoutPath),r=Ne(e.heartbeatPath);return PS(e,t.finalResult,r)}function le(e,t={}){let r=Bn(e.stdoutPath),n=Ne(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=PS(e,r.finalResult,n),i=o?!1:oe(e.pid),a=uc(e.stdoutPath),l=uc(e.stderrPath),c=uc(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=gS(e.worktreePath,{base:t.base,baseCommit:t.baseCommit},{alive:i}),f=aw([r.lastEventAt,n.lastHeartbeatAt,dc(e.stdoutPath),dc(e.stderrPath),dc(e.heartbeatPath)]),m=i?null:Pc(e.workerDir),g=s&&!Dm(s)?s:null,h=r.error||!i&&!s&&Ko(e.stderrPath,10).trim()||void 0,y=h||!i&&s&&!g&&Ko(e.stderrPath,10).trim()||void 0,b=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=AS(b)?null:b,v=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,w=Uj({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}),S=k||w.state==="blocked"?"blocked":o||w.state==="done"?"done":s?"exited":i?"running":"exited",_=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,R=sS({alive:i,finalResult:s,error:y??null,stale:w.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:m}),L=_&&!i&&!g?_:R,j=L==="running"||L==="finished"?null:(_===L?e.stopReason:void 0)??iS({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:j,exit:m,attention:w,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 $e(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Wm(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Lc(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 Bj,Fm,Pe=p(()=>{"use strict";Ln();Vi();Mm();hr();xc();Lm();Oc();hS();Nc();ES();Dc();D();Bj=18e4,Fm=6e5});import{readFileSync as Kj}from"node:fs";function $j(e){if(!e||process.platform!=="linux")return null;try{return Kj(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function OS(e){if(!e.pid||process.platform!=="linux")return!0;let t=$j(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 Xr(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!oe(e.pid)||!OS(e)?!1:!IS(e)}var Bc=p(()=>{"use strict";Pe();D()});import NS from"node:os";import DS from"node:path";function TS(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function Hj(e=A(),t,r){let n=TS(e.perWorkerMemBytes,Uc),o=TS(e.memReserveBytes,Fc),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Wc)),i=ts({config:e,configuredMaxWorkersOverride:t,totalMemBytes:r??NS.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function MS(e,t={}){let r=t.perWorkerMemBytes??Uc,n=t.memReserveBytes??Fc,o=t.memUtilization??Wc,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/r));return Math.min(i,Kc)}function jj(){return Aw()}function Vj(e){let t=0;for(let r of It(e)){let n=K(DS.join(q(e.id),"workers",B(r),"worker.json"),void 0);!n||!Xr(n)||t++}return t}function Km(){let e=0;for(let t of xe())e+=Vj(t);return e}function Zo(){let e=[];for(let t of xe())for(let r of It(t)){let n=K(DS.join(q(t.id),"workers",B(r),"worker.json"),void 0);n&&Xr(n)&&e.push({runId:t.id,workerName:r})}return e}function Yi(e){let t=e.config??A(),r=e.totalMemBytes??NS.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Hj(t,e.configuredMaxWorkersOverride,r),c=Pt(t),u=e.freeMemBytes??jj(),d=e.activeWorkers??Km(),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=fr(c,i??h),b=Math.max(0,Math.min(y,m)),k=Math.max(0,b-d),w=Math.min(k,g),_=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:qr({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});_&&!_.ok&&(w=0);let R=null;return w<=0&&(_&&!_.ok?R=_.reason??"disk gate blocked worker admission":d>=b?R=`at worker limit (${d}/${b} running)`:g<=0?R="insufficient free memory \u2014 waiting for workers to finish":R="no worker slots available"),{ok:w>0,totalMemBytes:r,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:m,maxConcurrentWorkers:b,activeWorkers:d,slotsAvailable:w,reason:R,..._?{diskGate:_}:{}}}var Uc,Fc,Wc,Kc,es=p(()=>{"use strict";Pw();$();We();jo();zi();Ki();Q();Jo();Bc();D();Uc=500*1024*1024,Fc=4*1024*1024*1024,Wc=.85,Kc=64});function Xi(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function ts(e){let t=e.config??{},r=e.env??process.env,n=Xi(t.perWorkerMemBytes,Uc),o=Xi(t.memReserveBytes,Fc),s=Math.min(1,Math.max(.1,Number(t.memUtilization)>0?Number(t.memUtilization):Wc)),i=MS(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Xi(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(t.maxConcurrentWorkers!==void 0&&t.maxConcurrentWorkers!==null){let c=Xi(t.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Kc),autoCap:i,workerCapSource:"config"}}let l=(r.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||r.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&r.KYNVER_MAX_WORKERS&&Xi(r.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Kc),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var zi=p(()=>{"use strict";es()});import{existsSync as Gj,mkdirSync as uue,readFileSync as Jj,writeFileSync as due}from"node:fs";import{homedir as qj}from"node:os";import Yj from"node:path";function zj(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 $c(e=Qr){return Gj(e)?zj(Jj(e,"utf8")):new Map}function LS(e=Qr,t={}){let r=$c(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 Qr,yr=p(()=>{"use strict";Qr=Yj.join(qj(),".kynver",".env")});var BS=p(()=>{"use strict"});var US=p(()=>{"use strict";BS()});var Hc=p(()=>{"use strict"});import{existsSync as Xj,readFileSync as Qj}from"node:fs";import{homedir as Zj}from"node:os";import e1 from"node:path";function Hm(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function $m(e){return typeof e=="string"&&e.trim()?e:null}function jm(e){let t=Hm(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=$m(t.requestedAt);return o?{desiredState:r,policyVersion:n,requestedAt:o,requestedByLabel:$m(t.requestedByLabel),reason:$m(t.reason)}:null}function FS(e){let t=Hm(Hm(e)?.response);return!t||t.runtimeControl===void 0?null:jm(t.runtimeControl)}function WS(e,t=Zj()){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return e1.join(t,".kynver",`runtime-control-${r}.json`)}function Vm(e,t,r){try{let n=Zr(e,r);if(n&&n.policyVersion>t.policyVersion)return;Re(WS(e,r),{contractVersion:1,agentOsId:e,control:t,deliveredAt:new Date().toISOString()})}catch{}}function Zr(e,t){try{let r=WS(e,t);if(!Xj(r))return null;let n=JSON.parse(Qj(r,"utf8"));return n.agentOsId!==e?null:jm(n.control)}catch{return null}}function rs(e){return e?.desiredState??"running"}function t1(e){return e==="keeper"||e==="desktop"}function r1(e,t,r=!1){let n=rs(e);return n==="paused"?"paused":n==="stopped"?r&&t===0?"stopped":"stopping":"running"}function Vc(e){return e.control?{policyVersion:e.control.policyVersion,state:r1(e.control,e.inFlightWorkers,e.exiting),supervised:t1(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function KS(e){let t=rs(e);return t==="paused"?"runtime_paused":t==="stopped"?"runtime_stopped":null}function $S(e,t){return rs(e)==="stopped"&&t===0}function jS(e){HS=e}function VS(){return HS}var jc,HS,en=p(()=>{"use strict";D();jc=83;HS=null});var Qi,ns=p(()=>{"use strict";US();Hc();en();Qi="kynver-cron-daemon.service"});import{existsSync as n1,readFileSync as o1}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(n1("/proc/version")){let e=o1("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Gc=p(()=>{"use strict"});var Jm=p(()=>{"use strict";Gc()});var Zi=p(()=>{"use strict";yr();dt();$();ns();Jm()});import l1 from"node:os";function ea(e,t){let r=(t??l1.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${r}`}function JS(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Jc(e,t){let r=e.trim();if(!r)return ea(t);let n=r.indexOf(":");if(n>=0){let o=r.slice(0,n).trim().toLowerCase()||t,s=JS(r.slice(n+1));return s?`${o}:${s}`:ea(o)}return`${t}:${JS(r)}`}function os(e){let t=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return t?Jc(t,e.boxKind):ea(e.boxKind,e.hostLabel)}var ss=p(()=>{"use strict";We();We()});var qS=p(()=>{"use strict";yr();ns();Zi()});import{existsSync as kr,mkdirSync as c1,readdirSync as qc,renameSync as YS,statSync as u1}from"node:fs";import br from"node:path";function XS(e){try{return u1(e).isDirectory()}catch{return!1}}function d1(e){if(!kr(e))return!0;for(let t of zS){let r=br.join(e,t);if(kr(r)&&(!XS(r)||qc(r).length>0))return!1}return!0}function p1(e){let t=br.join(e,"runs");if(!kr(t)||!XS(t))return!1;for(let r of qc(t,{withFileTypes:!0})){if(!r.isDirectory()||r.name==="runs")continue;let n=br.join(t,r.name,"run.json");if(K(n,void 0)?.id)return!0}return!1}function f1(e){let t=br.join(e,"runs");if(!kr(t))return!1;for(let r of qc(t,{withFileTypes:!0})){if(!r.isDirectory())continue;if(K(br.join(t,r.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function m1(e){let t=br.join(e,"ghost");return kr(t)?!kr(br.join(t,"runs")):f1(e)}function QS(e){return p1(e.sharedRoot)?d1(e.forgeRoot)?m1(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 ZS(e,t){c1(t,{recursive:!0});for(let r of zS){let n=br.join(e,r),o=br.join(t,r);if(kr(n)){if(kr(o)&&qc(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(kr(o)){YS(n,o);continue}YS(n,o)}}}var zS,e_=p(()=>{"use strict";D();zS=["runs","worktrees"]});import{existsSync as je}from"node:fs";import{homedir as g1}from"node:os";import De from"node:path";function qm(e=process.env){return e.HOME?.trim()||g1()}function Ym(e=process.env){return De.join(qm(e),".kynver","harness")}function Yc(e){let t=De.resolve(Te(e.trim()));for(;h1.has(De.basename(t));)t=De.dirname(t);return t}function y1(e,t=process.env){return De.join(Ym(t),e)}function k1(e=process.env){let t=Ym(e);if(je(De.join(t,"runs")))return!0;if(je(t)&&!je(De.join(t,"ghost"))&&!je(De.join(t,"forge")))return je(t);let r=De.join(qm(e),t_);return je(r)}function zc(e){let t=e.env??process.env,r=t.KYNVER_HARNESS_ROOT?.trim()||t.OPUS_HARNESS_ROOT?.trim();if(r)return{harnessRoot:Yc(r),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Yc(n),source:"config"};let o=y1(e.boxKind,t);if(je(De.join(o,"runs"))||je(o)&&!b1(o))return{harnessRoot:o,source:"box_scoped"};let i=Ym(t);if(e.boxKind==="forge"){let a=QS({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&&ZS(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&k1(t)){if(je(De.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(je(i)&&!je(De.join(i,"ghost"))&&!je(De.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=De.join(qm(t),t_);if(je(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function b1(e){if(!je(e))return!0;for(let t of["runs","worktrees"]){let r=De.join(e,t);if(je(r))return!1}return!0}var t_,h1,zm=p(()=>{"use strict";dt();e_();t_=De.join(".openclaw","harness");h1=new Set(["runs","worktrees"])});import r_ from"node:os";function Xc(e){return e?.trim()?e.trim():null}function v1(e,t){let r=t.trim().toLowerCase()||"host";return`${e}-${r}`.replace(/[^a-z0-9._-]+/g,"-")}function R1(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 jt(e=A(),t=process.env,r={}){let n=ot(t,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Xc(t.KYNVER_BOX_KIND)),a=r.strict===!0||R1(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=Xc(e.runnerId),c=Xc(t.KYNVER_RUNTIME_ID)??Xc(t.OPENCLAW_RUNTIME_ID),u=l??c??v1(n.boxKind,r_.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=ts({config:e,env:t,totalMemBytes:r_.totalmem()}),m=fr(n.boxKind,f.configuredMaxWorkers??Rm(n.boxKind,f.autoCap)),g=zc({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 Fn=p(()=>{"use strict";$();We();jo();zi();zm()});var Xm=p(()=>{"use strict";Bi();We();ss();$();Zi();qS();pr();Et();Fn()});function Ye(e){let t=e.trim().toLowerCase();return S1[t]??t}var s_,w1,S1,ta=p(()=>{"use strict";s_=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],w1=s_.join("|"),S1={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 a_}from"node:fs";import{homedir as l_}from"node:os";import Qc from"node:path";function is(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return c_.includes(t)?t:null}function Wn(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=Te(r.trim());if(t.includes(n)||t.push(n),t.length>=x1)break}return t}function Zc(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=is(s.access);return i?{access:i,folders:Wn(s.folders)}:null}function eu(e){return _1.has(e)?"folder":"off"}function i_(e=l_()){let t=Qc.join(e,".kynver",u_);return a_(t,{recursive:!0}),t}function as(e){let t=e.home??l_(),r=is(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:Wn(e.local?.chatWorkFolders)},o="local"):(n={access:eu(e.engine),folders:[]},o="default");let{access:s}=n;if(s==="off")return{access:s,folders:[],workDir:i_(t),extraFolders:[],source:o};let i=n.folders;s==="folder"&&(i=i.slice(0,1)),i.length===0&&s!=="full"&&(i=[i_(t)]);for(let l of i)try{a_(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 tu(e,t){if(e.access==="off")return!1;if(e.access==="full")return!0;let r=Qc.resolve(t);return e.folders.some(n=>{let o=Qc.relative(n,r);return o===""||!o.startsWith("..")&&!Qc.isAbsolute(o)})}var c_,_1,x1,u_,Kn=p(()=>{"use strict";dt();c_=["off","folder","folders","full"],_1=new Set(["cursor","codex","antigravity"]),x1=16,u_="chat-workspace"});var d_=p(()=>{"use strict";Kn()});import{execFileSync as C1}from"node:child_process";function eg(e=process.env){let t=e[E1]?.trim().toLowerCase();return t==="file"?"file":t==="keychain"?"keychain":"auto"}function A1(e,t,r){let n={encoding:"utf8",timeout:r.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...r.input!==void 0?{input:r.input}:{}};return C1(e,t,n)}function P1(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Qm(e,t){let r=JSON.stringify($n),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 p_(e={}){if(eg(e.env??process.env)==="file")return null;let r=P1(e.platform??process.platform);return r?new Zm(r,e.exec):null}var $n,E1,vr,Zm,f_=p(()=>{"use strict";$n="kynver",E1="KYNVER_CREDENTIAL_STORE";vr=5e3;Zm=class{constructor(t,r=A1){this.backend=t;this.exec=r}backend;exec;get(t){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",$n,"-a",t,"-w"],{timeoutMs:vr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",$n,"account",t],{timeoutMs:vr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qm("get",t)],{timeoutMs:vr}).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",$n,"-a",t,"-l",`Kynver (${t})`,"-w",r],{timeoutMs:vr}):this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${t})`,"service",$n,"account",t],{input:`${r}
|
|
74
|
+
`,timeoutMs:vr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qm("set",t)],{input:`${r}
|
|
75
|
+
`,timeoutMs:vr})}catch{return!1}return this.get(t)===r}delete(t){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",$n,"-a",t],{timeoutMs:vr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",$n,"account",t],{timeoutMs:vr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qm("delete",t)],{timeoutMs:vr})}catch{}}}});function tn(){return tg||(tg=new rg),tg}var ls,cs,I1,ru,rg,tg,ng=p(()=>{"use strict";f_();ls="api-key",cs="chat-box-credential",I1=6e4,ru=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"}},rg=class{cache=new Map;keychain;env;now;constructor(t={}){this.env=t.env??process.env,this.keychain=t.keychain===void 0?p_({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<I1)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=eg(this.env);if(!this.keychain){if(n==="keychain")throw new ru(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 ru(t);return o}remove(t){this.cache.delete(t),this.keychain?.delete(t)}invalidate(t){t?this.cache.delete(t):this.cache.clear()}},tg=null});import{existsSync as m_,mkdirSync as g_,readFileSync as h_,writeFileSync as y_}from"node:fs";import{homedir as D1,totalmem as Hde}from"node:os";import ig from"node:path";function us(e){let t=String(e??"").trim();if(!t)return{ok:!1,reason:"missing"};let r=t.toLowerCase();return L1.has(r)?{ok:!1,value:t,reason:"placeholder"}:M1.test(t)?{ok:!0,value:t}:{ok:!1,value:t,reason:"not a UUID"}}function ag(e){let t=us(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 k_(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Te(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Te(e.defaultRepo.trim())}:{}}}function su(e){let t=e.defaultRepo?.trim();return!t||e.defaultBase?.trim()||!mw(Te(t))?e:{...e,defaultBase:gc}}function B1(){if(!m_(og))return null;try{return JSON.parse(h_(og,"utf8"))}catch{return null}}function A(){let e=B1();return e?su(k_(e)):{}}function He(e){g_(ou,{recursive:!0}),y_(og,`${JSON.stringify(su(o_(e)),null,2)}
|
|
76
|
+
`,{mode:384})}function o_(e){return k_(e)}function lg(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:qe(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:qe(e.defaultRepo.trim())}:{},...e.chatWorkFolders?.length?{chatWorkFolders:e.chatWorkFolders.map(qe)}:{}}}function Rr(){if(um(),!m_(sg))return{};try{return JSON.parse(h_(sg,"utf8"))}catch{return{}}}function ra(e){um(),g_(ou,{recursive:!0}),y_(sg,`${JSON.stringify(e,null,2)}
|
|
77
|
+
`,{mode:384})}function b_(e,t,r,n={}){let o=Rr();if(tn().write(e,r)){let i={...o,...n};delete i[t],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),ra(i);return}ra({...o,...n,[t]:r})}function v_(e,t){let r=tn().read(e);return r||Rr()[t]}function R_(){if(rt())return{backend:null,moved:[],stillInFile:[]};let e=tn(),t=Rr(),r=[],n=[],o=[[ls,"apiKey"],[cs,"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={...Rr()};for(let i of r)delete s[i];s.store="keychain",s.keychainAccounts=Array.from(new Set([...s.keychainAccounts??[],...r.map(i=>i==="apiKey"?ls:cs)])).sort(),ra(s)}return{backend:e.backend,moved:r,stillInFile:n}}function cg(){return rw(U1)}function Ce(){return cg().getApiKey()}function Me(e){return cg().getRunnerToken(e)}function Hn(e,t){cg().persistRunnerToken(e,t)}function ug(e){let t=Oe("KYNVER_CHAT_BOX_CREDENTIAL");if(t)return t;if(rt())return nu?.agentOsId===e?nu.credential:void 0;let r=Rr();if(!(r.chatBoxCredentialAgentOsId&&r.chatBoxCredentialAgentOsId!==e))return v_(cs,"chatBoxCredential")}function w_(e,t){if(rt()){nu={agentOsId:e,credential:t};return}b_(cs,"chatBoxCredential",t,{chatBoxCredentialAgentOsId:e})}function S_(){if(rt()){nu=null;return}tn().remove(cs);let e={...Rr()};delete e.chatBoxCredential,delete e.chatBoxCredentialAgentOsId,ra(e)}function __(){let e=tn();return process.env.KYNVER_API_KEY?{backend:e.backend,apiKey:"env"}:e.read(ls)?{backend:e.backend,apiKey:"keychain"}:Rr().apiKey?{backend:e.backend,apiKey:"file"}:{backend:e.backend,apiKey:"none"}}function me(e){let t=na(e);return t||E_("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),t}function jn(e){return na(e)}function na(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 dr(t)}function F1(e,t){let r=e||Me(t)||(t?void 0:Me(A().agentOsId));if(r)return String(r);let n=Oe("KYNVER_RUNTIME_SECRET")||Oe("KYNVER_CRON_SECRET")||Oe("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 iu(e,t,r){let n=F1(e,t);if(n)return{ok:!0,secret:n};let o=Ce(),s=na(r?.baseUrl);if(o&&t&&s)try{let i=await Vn(t,{baseUrl:s,apiKey:o});return Hn(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 iu(e,t,r);if(n.ok)return n.secret;E_(n.reason)}async function x_(e,t){let r=Ce(),n=na(t?.baseUrl);if(!r||!e||!n)return null;try{let o=await Vn(e,{baseUrl:n,apiKey:r});return Hn(e,o),o}catch{return null}}async function C_(e,t,r){let n=Ce(),o=na(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 Vn(t,{baseUrl:o,apiKey:n});return s&&s!==e?(Hn(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 Vn(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 mt(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 E_(e){console.error(e),process.exit(1)}var ou,og,sg,M1,L1,ape,lpe,U1,nu,$=p(()=>{"use strict";Bi();dt();ym();vm();pr();We();jo();zi();Ki();Zi();Xm();ta();Fn();d_();Et();ng();ou=ig.join(D1(),".kynver"),og=ig.join(ou,"config.json"),sg=ig.join(ou,"credentials"),M1=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,L1=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);ape=500*1024*1024,lpe=4*1024*1024*1024;U1={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:v_(ls,"apiKey")},getRunnerToken(e){let t=Rr();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){b_(ls,"apiKey",e)},persistRunnerToken(e,t){ra({...Rr(),runnerToken:t,runnerTokenAgentOsId:e})}};nu=null});import dg from"node:path";function Le(e){return Yc(e)}function gt(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return Le(e);let t=A(),r=t.harnessRoot?.trim();if(r)return Le(r);let n=jt(t,process.env);return n.identity?n.identity.harnessRoot:zc({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function it(e){return dg.join(Le(e),"runs")}function ds(e){return dg.join(Le(e),"worktrees")}function A_(){let e=gt();return{harnessRoot:e,runsDir:it(e),worktreesDir:ds(e)}}function wr(e,t){return dg.join(e,B(t))}var Ot=p(()=>{"use strict";$();zm();Fn();D()});import{existsSync as au,readdirSync as W1,statSync as K1}from"node:fs";import Gn from"node:path";function ke(){return A_()}function se(e){let{runsDir:t}=ke(),r=Gn.join(wr(t,B(e)),"run.json");return au(r)||pt(`run '${e}' not found`),K(r)}function xe(){let{runsDir:e}=ke();return P_(e)}function lu(e){return P_(it(e))}function $1(e){try{return K1(e).isDirectory()}catch{return!1}}function P_(e){if(!au(e))return[];let t=[];for(let r of W1(e,{withFileTypes:!0})){if(r.name==="runs")continue;let n=Gn.join(e,r.name);if(!$1(n))continue;let o=K(Gn.join(n,"run.json"),void 0);o?.id&&t.push(o)}return t}function Jn(e,t){let{runsDir:r}=ke(),n=Gn.join(wr(r,B(e)),"run.json"),o=Gn.join(wr(r,B(e)),"workers",B(t),"worker.json");return au(o)||(au(n)||pt(`run '${e}' not found`),pt(`worker '${t}' not found in run '${e}'`)),K(o)}function ze(e){let{runsDir:t}=ke();Re(Gn.join(wr(t,e.id),"run.json"),e)}function re(e,t){let{runsDir:r}=ke();Re(Gn.join(wr(r,e),"workers",t.name,"worker.json"),t)}function q(e){let{harnessRoot:t}=ke();return oa(t,e)}function oa(e,t){return wr(it(e),B(t))}var Q=p(()=>{"use strict";Ot();D()});import H1 from"node:path";function j1(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 ps(e){let t=se(e),r=[];for(let n of Object.keys(t.workers||{})){let o=K(H1.join(q(t.id),"workers",B(n),"worker.json"),void 0);!o?.taskId||!Xr(o)||r.push({runId:t.id,workerName:n,taskId:o.taskId,pid:o.pid,...j1(o)})}return r}var cu=p(()=>{"use strict";Q();Bc();D()});function pg(e){return typeof e=="object"&&e!==null&&e.type===uu}function I_(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=>{pg(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 O_(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return[];let n=t.collect??ps,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 uu,du=p(()=>{"use strict";cu();Ti();uu="kynver:daemon-stop"});import{createHash as V1}from"node:crypto";function at(e){return JSON.stringify(fg(e))}function fg(e){if(Array.isArray(e))return e.map(fg);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=fg(e[r]);return t}return e}function T_(e){return`ib-${V1("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function fs(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 sa(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 pu(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 rn=p(()=>{"use strict"});import{createHash as G1,createPublicKey as J1,verify as q1}from"node:crypto";function X1(e){return`ca-${G1("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function qn(e,t=process.env){let r=fs(t.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(r)return X1(r)!==e?null:r;let n=z1[e];return!n||e===N_&&!pu(t)?null:fs(n)}function Q1(e){return J1({key:Buffer.concat([Y1,Buffer.from(e)]),format:"der",type:"spki"})}function Z1(e,t){return!Array.isArray(e)||e.length!==t.length?!1:e.every((r,n)=>typeof r=="string"&&r===t[n])}function eV(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 D_(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!eV(e))return{ok:!1,reason:"malformed command authorization proof"};if(e.payload.agentOsId!==t.agentOsId)return{ok:!1,reason:"agentOsId mismatch"};if(!Z1(e.payload.argv,t.argv))return{ok:!1,reason:"argv mismatch"};if(e.payload.exp<=n)return{ok:!1,reason:"proof expired"};let o=qn(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(at(e.payload),"utf8");return q1(null,i,Q1(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 Y1,N_,z1,ia=p(()=>{"use strict";rn();Y1=Buffer.from("302a300506032b6570032100","hex"),N_="ca-6297fb8e1773",z1={[N_]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7"}});function fu(e){let t=typeof e.description=="string"?e.description:"",r=typeof e.executorRef=="string"?e.executorRef:"",o=[...t.matchAll(tV)].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(rV))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var tV,rV,mg=p(()=>{"use strict";tV=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,rV=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi});import{createPublicKey as nV,verify as oV}from"node:crypto";function gg(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 aV.test(i)&&i.length<=512?i:null}function M_(e){let t=e.task??{};return e.landPrDispatch===!0||t.executor==="land_pr"?"land_pr":t.executor==="verify_live"?"verify_live":fu(t)==="read_only"?"read_only":"write"}function lV(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(",")!==[...iV].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)||!mu.includes(r.operationClass))}function L_(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!lV(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+sV+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=qn(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=nV({key:Buffer.concat([cV,Buffer.from(s)]),format:"der",type:"spki"});return oV(null,Buffer.from(at(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 sV,mu,iV,aV,cV,B_=p(()=>{"use strict";ia();rn();mg();sV=120,mu=["write","read_only","land_pr","verify_live"],iV=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"],aV=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;cV=Buffer.from("302a300506032b6570032100","hex")});import{spawnSync as uV}from"node:child_process";import{randomBytes as dV}from"node:crypto";function U_(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!==pV)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"||!fV.test(t.agentOsId))return"invalid agentOsId";if(typeof t.repoIdentity!="string"||gg(`https://${t.repoIdentity}`)!==t.repoIdentity)return"invalid repoIdentity";let n=t.approvedOperationClasses;if(!Array.isArray(n)||n.length>mu.length)return"invalid approvedOperationClasses";let o=new Set;for(let s of n){if(typeof s!="string"||!mu.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 mV(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=M_(e.decision),a=L_(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 W_(){return rt()}function K_(e){return aa&&e.revision<aa.revision?!1:(aa=e,!0)}function kg(){return aa}function $_(e){F_=e}function H_(e){return yg.add(e),()=>yg.delete(e)}function j_(e){return{v:1,repoIdentity:e,requestNonce:dV(16).toString("base64url")}}function gu(e){let t=uV("git",["-C",e,"remote","get-url","origin"],ee({encoding:"utf8",timeout:1e4}));return t.status!==0||typeof t.stdout!="string"?null:gg(t.stdout.trim())}function V_(e){let t=mV({...e,policy:aa,identity:F_,consumed:gV});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 yg)try{o(n)}catch{}}return t}var pV,fV,hg,aa,F_,gV,yg,hu=p(()=>{"use strict";Et();B_();D();pV=1,fV=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;hg=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}};aa=null,F_=null,gV=new hg,yg=new Set});import{createCipheriv as hV,createDecipheriv as yV,randomBytes as vg,scrypt as kV,timingSafeEqual as bV}from"node:crypto";function J_(){return vg(Rg)}function q_(e=vV){return{name:"scrypt",N:e.N,r:e.r,p:e.p,salt:vg(16).toString("base64")}}function Sg(e,t,r=RV){if(t.name!=="scrypt"||!Number.isInteger(t.N)||t.N<r||t.r<8||t.p<1)return Promise.reject(new Tt("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 Tt("the vault file's salt is invalid")):new Promise((o,s)=>{kV(e.normalize("NFKC"),n,Rg,{N:t.N,r:t.r,p:t.p,maxmem:128*t.N*t.r*2},(i,a)=>i?s(i):o(a))})}function nn(e,t,r){if(e.length!==Rg)throw new Tt("bad key length");let n=vg(G_),o=hV("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 Yn(e,t,r){try{let n=Buffer.from(t.n,"base64"),o=Buffer.from(t.c,"base64");if(n.length!==G_||o.length<bg)throw new Tt;let s=yV("aes-256-gcm",e,n);return s.setAAD(Buffer.from(r,"utf8")),s.setAuthTag(o.subarray(o.length-bg)),Buffer.concat([s.update(o.subarray(0,o.length-bg)),s.final()])}catch(n){throw n instanceof Tt?n:new Tt}}function _g(e){for(let t of e)if(t.includes(`
|
|
78
|
+
`))throw new Tt("invalid vault field");return e.join(`
|
|
79
|
+
`)}function Cg(e){return _g(["kynver-site-login/v1/record",e.agentOsId,e.handle,e.origin,e.label,e.username,e.hasTotp?"totp":"no-totp"])}function Y_(e,t){return e.length===t.length&&bV(e,t)}var Rg,G_,bg,vV,RV,wg,Tt,xg,yu,ku,Eg=p(()=>{"use strict";Rg=32,G_=12,bg=16,vV={N:2**17,r:8,p:1},RV=2**14,wg=10,Tt=class extends Error{constructor(t="the saved-login vault could not be decrypted"){super(t),this.name="VaultCryptoError"}};xg=e=>_g(["kynver-site-login/v1/vault-key",e]),yu=e=>_g(["kynver-site-login/v1/key-check",e]),ku=Buffer.from("kynver-site-login-key-check-v1","utf8")});function z_(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(".")||wV.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 la(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 Ag(e,t){let r=la(t);return r!==null&&r===e}var wV,Pg=p(()=>{"use strict";wV=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[.*\]|\d{1,3}(\.\d{1,3}){3})$/i});import{createHmac as SV}from"node:crypto";function X_(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|_V.indexOf(s),r+=5,r>=8&&(o.push(n>>>r-8&255),r-=8);return o.length?Buffer.from(o):null}function bu(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=X_(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=X_(t);return r?{key:r,algorithm:"SHA1",digits:6,period:30}:null}function xV(e,t,r,n){let o=Buffer.alloc(8);o.writeBigUInt64BE(t);let s=SV(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 Q_(e,t=Date.now()){let r=BigInt(Math.floor(t/1e3/e.period));return xV(e.key,r,e.digits,e.algorithm)}function Z_(e,t=Date.now()){let r=Math.floor(t/1e3)%e.period;return e.period-r}var _V,Ig=p(()=>{"use strict";_V="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"});var ht,Og=p(()=>{"use strict";ht={maxRecords:200,maxLabel:80,maxUsername:254,maxPassword:1024,maxTotp:512}});import{createHash as CV,randomBytes as rx}from"node:crypto";import{chmodSync as ex,existsSync as EV,mkdirSync as AV,readFileSync as PV,renameSync as IV,rmSync as OV,writeFileSync as TV}from"node:fs";import{homedir as NV}from"node:os";import nx from"node:path";function ca(){return nx.join(NV(),".kynver","site-logins")}function Tg(e){return`${CV("sha256").update(`kynver-site-login:${e}`).digest("hex").slice(0,32)}.vault.json`}function tx(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(ox.test(o))throw new z(`${t} contains control characters`,"invalid");return o}function DV(){let e="abcdefghijkmnpqrstuvwxyz23456789",t=rx(10);return`lg_${Array.from(t,r=>e[r%e.length]).join("")}`}var z,ox,vu,zn=p(()=>{"use strict";Eg();Pg();Ig();Og();z=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SiteLoginError"}code},ox=/[\u0000-\u001f\u007f]/;vu=class{constructor(t){this.opts=t;let r=t.agentOsId.trim();if(!r||ox.test(r)||r.length>200)throw new z("invalid workspace id","invalid");this.agentOsId=r,this.rootDir=t.rootDir??ca(),this.filePath=nx.join(this.rootDir,Tg(r)),this.now=t.now??Date.now}opts;agentOsId;filePath;rootDir;now;exists(){return EV(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<wg)throw new z(`the vault passphrase must be at least ${wg} characters`,"invalid");let r=J_(),n=q_(this.opts.scryptCost),o=await Sg(t,n,this.opts.minScryptN);return this.write({v:1,agentOsId:this.agentOsId,keyMode:"passphrase",kdf:n,wrappedKey:nn(o,r,xg(this.agentOsId)),keyCheck:nn(r,ku,yu(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:nn(t,ku,yu(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 Sg(t,r.kdf,this.opts.minScryptN);let o=Yn(n,r.wrappedKey,xg(this.agentOsId));return this.verifyKey(r,o),o}catch(o){throw o instanceof z?o:o instanceof Tt&&/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()?(OV(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>=ht.maxRecords)throw new z(`at most ${ht.maxRecords} saved logins per workspace`,"full");let o=this.buildRecord(t,r,DV(),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=Yn(t,o.secret,Cg({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=z_(r.origin);if(!s.ok)throw new z(s.reason,"invalid");let i=tx(r.label,"label",ht.maxLabel),a=tx(r.username,"username",ht.maxUsername),l=typeof r.password=="string"?r.password:"";if(!l)throw new z("password is required","invalid");if(l.length>ht.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>ht.maxTotp||!bu(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:nn(t,d,Cg({agentOsId:this.agentOsId,...u}))}}finally{d.fill(0)}}verifyKey(t,r){try{let n=Yn(r,t.keyCheck,yu(this.agentOsId));if(!Y_(n,ku))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(PV(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){AV(this.rootDir,{recursive:!0,mode:448});try{ex(this.rootDir,448)}catch{}let r=`${this.filePath}.${rx(4).toString("hex")}.tmp`;TV(r,`${JSON.stringify(t)}
|
|
80
|
+
`,{mode:384}),IV(r,this.filePath);try{ex(this.filePath,384)}catch{}}}});import{appendFileSync as BV,chmodSync as UV,existsSync as lx,mkdirSync as FV,readFileSync as cx,renameSync as WV,statSync as KV,writeFileSync as $V}from"node:fs";import HV from"node:path";var jV,ux,VV,Ru,dx=p(()=>{"use strict";zn();jV=512*1024,ux=1e3,VV=10080*60*1e3,Ru=class{constructor(t,r=ca(),n=Date.now){this.rootDir=r;this.now=n;this.filePath=HV.join(r,Tg(t).replace(/\.vault\.json$/,".audit.jsonl"))}rootDir;now;filePath;record(t){let r={at:new Date(this.now()).toISOString(),...t};try{FV(this.rootDir,{recursive:!0,mode:448}),this.rotateIfLarge(),BV(this.filePath,`${JSON.stringify(r)}
|
|
81
|
+
`,{mode:384}),UV(this.filePath,384)}catch{}return r}entries(t=ux){if(!lx(this.filePath))return[];try{return cx(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=VV){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(!lx(this.filePath)||KV(this.filePath).size<jV)return;let t=cx(this.filePath,"utf8").split(`
|
|
83
|
+
`).filter(Boolean).slice(-ux/2),r=`${this.filePath}.tmp`;$V(r,`${t.join(`
|
|
84
84
|
`)}
|
|
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})
|
|
85
|
+
`,{mode:384}),WV(r,this.filePath)}}});import{randomBytes as GV}from"node:crypto";import{existsSync as JV,rmSync as qV}from"node:fs";function px(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 Nt(){return fx??=new Ng,fx}var YV,zV,Ng,fx,ua=p(()=>{"use strict";dx();zn();YV=720*60*1e3,zV=300*1e3,Ng=class{rootDir;now;idleMs;keys=new Map;codes=new Map;codeListeners=new Set;constructor(t={}){this.rootDir=t.rootDir??ca(),this.now=t.now??Date.now,this.idleMs=t.idleMs??YV}store(t){return new vu({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 JV(o)&&qV(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_${GV(6).toString("hex")}`,createdAt:r,expiresAt:r+zV};this.codes.set(n.id,n);let o=px(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=>px(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)}};fx=null});var mx=p(()=>{"use strict";D()});var gx=p(()=>{"use strict"});var hx=p(()=>{"use strict";$();mx();pr();gx()});function QV(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 Dg(e){if(!e)return null;let t=QV(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 Mg=p(()=>{"use strict"});function yx(e){return/\((?:401|403)\)/.test(e)?"access_denied":"transient"}var Lg=p(()=>{"use strict";$();pr();D();hx();Mg()});import{existsSync as ZV}from"node:fs";import{homedir as eG}from"node:os";import tG from"node:path";function kx(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 da(e,t,r=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<r?t:Math.floor(n)}function on(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||tG.join(eG(),".kynver","agent-os-cron.json")}function rG(e=on()){let t=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return t||`${e.replace(/\.json$/i,"")}.tick-state.json`}function nG(){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 bx(){let e=A();return Oe("KYNVER_CRON_SECRET")||Oe("OPENCLAW_CRON_SECRET")||Oe("KYNVER_RUNTIME_SECRET")||Me(e.agentOsId)?.trim()||Me()?.trim()||null}function gs(){let e=on(),t=rG(e),r=nG(),n=bx(),o=!!(r&&n),s=ZV(e),i=o&&(s||kx("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:t,lockPath:`${t}.lock`,fireBaseUrl:r,secret:n,tickEnabled:kx("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:da("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:da("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:da("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:da("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:da("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}var Sr=p(()=>{"use strict";$();Et()});import{promises as oG}from"node:fs";async function vx(e){try{return await oG.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function sG(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t.entries)?t.entries:[]}catch{return[]}}async function wu(e=on()){let t=await vx(e);return sG(t)}async function iG(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 Bg(e=on()){return await vx(e)!==null?{created:!1}:(await iG(e,[]),{created:!0})}var hs=p(()=>{"use strict";Sr()});import{existsSync as aG,readFileSync as lG}from"node:fs";import{dirname as Ug,join as wx}from"node:path";import{fileURLToPath as Rx}from"node:url";function cG(e){let t=Ug(Rx(e));for(let r=0;r<6;r+=1){if(aG(wx(t,"package.json")))return t;let n=Ug(t);if(n===t)break;t=n}throw new Error(`package.json not found above ${Ug(Rx(e))}`)}function uG(e=import.meta.url){let t=wx(cG(e),"package.json"),r=JSON.parse(lG(t,"utf8"));if(typeof r.version!="string"||!r.version.trim())throw new Error(`Missing package.json version at ${t}`);return r.version}var Xe,sn=p(()=>{"use strict";Xe=uG()});import{spawnSync as dG}from"node:child_process";import{readFileSync as pG}from"node:fs";function fG(e,t){let r=dG(e,t,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:15e3});return{status:r.status,stdout:r.stdout??""}}function mG(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 gG(e){return Number.isInteger(e)&&e>0}function Sx(e,t={}){if(!gG(e))return null;let r=t.platform??process.platform,n=t.readText??(s=>pG(s,"utf8")),o=t.run??fG;try{if(r==="linux"){let s=mG(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 Fg=p(()=>{"use strict"});import{createHash as yG,randomUUID as Px}from"node:crypto";import{closeSync as kG,constants as Wg,existsSync as bG,mkdirSync as Kg,openSync as vG,readFileSync as RG,renameSync as $g,rmSync as Su,writeFileSync as wG}from"node:fs";import{createConnection as SG,createServer as _x}from"node:net";import{homedir as _G,tmpdir as xG}from"node:os";import Vt from"node:path";function CG(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Ix(e){let t=e.stateRoot??Vt.join(_G(),".kynver"),r=e.platform??process.platform,n=yG("sha256").update(`${Vt.resolve(t)}\0${e.agentOsId}`).digest("hex").slice(0,24),o=Vt.join(t,"locks"),s=Vt.join(o,`${n.slice(0,16)}.sock`);r==="linux"?s=`\0kynver-daemon-owner-${n}`:Buffer.byteLength(s)>100&&(s=Vt.join(xG(),`kynver-owner-${n.slice(0,16)}.sock`));let i=Vt.join(t,`daemon-owner-${CG(e.agentOsId)}.json`);return{lockKey:n,lockFile:Vt.join(o,`daemon-owner-${n}.lock`),metadataFile:i,quarantineFile:i.replace(/\.json$/,".stale.json"),socketAddress:s}}function AG(e){Kg(Vt.dirname(e),{recursive:!0});let t;try{t=vG(e,Wg.O_RDWR|Wg.O_CREAT|EG)}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{kG(t)}catch{}}}}}}function xx(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 PG(e,t=2e3){return new Promise(r=>{let n=SG({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 IG(e,t){e.startsWith("\0")||Kg(Vt.dirname(e),{recursive:!0,mode:448});let r=_x(a=>a.destroy());if(await xx(r,e)==="listening")return{held:Cx(r,e)};if(!t||e.startsWith("\0"))return{busy:!0};if(await PG(e))return{busy:!0};let o=`${e}.stale-${process.pid}-${Px().slice(0,8)}`;try{$g(e,o),Su(o,{force:!0})}catch{}let s=_x(a=>a.destroy());return await xx(s,e).catch(()=>"in_use")==="listening"?{held:Cx(s,e)}:{busy:!0}}function Cx(e,t){e.unref();let r=!0;return{isHeld:()=>r&&e.listening,release:()=>{r&&(r=!1,e.close(),t.startsWith("\0")||Su(t,{force:!0}))}}}async function OG(e,t){return t==="win32"?AG(e.lockFile):IG(e.socketAddress,t!=="linux")}function TG(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 Ex(e){try{let t=JSON.parse(RG(Ix(e).metadataFile,"utf8"));return TG(t)?t:null}catch{return null}}function Ax(e,t){Kg(Vt.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;wG(r,`${JSON.stringify(t,null,2)}
|
|
86
|
+
`,{mode:384}),$g(r,e)}function NG(e){if(!bG(e.metadataFile))return null;try{return $g(e.metadataFile,e.quarantineFile),e.quarantineFile}catch{return Su(e.metadataFile,{force:!0}),null}}function Ox(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 _u(e){let t=e.platform??process.platform,r=Ix(e),n=await OG(r,t);if("busy"in n){let u=Ex(e);return{ok:!1,reason:"owner_conflict",holder:u,remedy:Ox(u)}}let o=NG(r),s=(e.now??new Date).toISOString(),i={version:1,agentOsId:e.agentOsId,ownerKind:e.ownerKind,instanceId:Px(),pid:process.pid,processStart:e.processStart!==void 0?e.processStart:Sx(process.pid),runtimeVersion:Xe,platform:t,acquiredAt:s,lastRenewedAt:s};try{Ax(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{Ax(r.metadataFile,i)}catch{}}},release(){if(l)return;l=!0,Ex(e)?.instanceId===i.instanceId&&Su(r.metadataFile,{force:!0}),a.release()}},quarantinedMetadata:o}}var EG,xu=p(()=>{"use strict";sn();Fg();EG=Wg.UV_FS_O_EXLOCK??268435456});var DG,MG,LG,BG,ys,Hg=p(()=>{"use strict";DG="embedded-1",MG=[{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"}],LG={"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
|
-
`)},
|
|
90
|
+
`)},BG={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},ys={version:DG,generatedAt:"1970-01-01T00:00:00.000Z",personas:MG,instructions:LG,policyThresholds:BG}});function Nx(){return ks}function Qn(){return ks.version}function Gt(){return Tx}function Dx(e,t){ks=e,Tx=t}function pa(e){let t=ks.instructions[e];if(typeof t=="string"&&t.trim())return t;let r=ys.instructions[e];return typeof r=="string"?r:""}function bs(e,t){let r=ks.policyThresholds[e];if(typeof r=="number"&&Number.isFinite(r))return r;let n=ys.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:t}function Mx(e){if(!e)return null;let t=e.trim().toLowerCase();return ks.personas.find(r=>r.slug===t)??null}var ks,Tx,an=p(()=>{"use strict";Hg();ks=ys,Tx="embedded"});import Lx from"node:os";function _r(e){return e?.trim()?e.trim():null}function Be(e={}){let t=e.env??process.env,r=A();return{runnerId:_r(r.runnerId)??_r(t.KYNVER_RUNTIME_ID)??_r(t.OPENCLAW_RUNTIME_ID)??_r(t.HOSTNAME)??Lx.hostname(),hostname:_r(t.HOSTNAME)??Lx.hostname(),profile:_r(t.KYNVER_RUNNER_PROFILE)??_r(t.OPENCLAW_RUNNER_PROFILE),harnessRepo:_r(t.KYNVER_HARNESS_REPO)??_r(t.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Qn()}}var xr=p(()=>{"use strict";$();an();We()});import UG from"node:os";function jg(e=A(),t=process.env){let r=ot(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=jt(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=Jc(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=ea(r.boxKind,UG.hostname()),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json`)),Wi(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=fr(r.boxKind,o);c!==o&&(o=c,i.maxConcurrentWorkers=c,s=!0,n.push(`clamped maxConcurrentWorkers to ${c} for ${r.boxKind} pool`))}return s&&He(i),{repaired:s,boxKind:r.boxKind,maxConcurrentWorkers:o??4,warnings:n}}var Vg=p(()=>{"use strict";$();We();ss();jo();Fn()});function Dt(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 vs=p(()=>{"use strict"});function FG(e){let t=e.runnerId??Be().runnerId;return`${e.baseUrl.replace(/\/+$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime-control/runner?runnerId=${encodeURIComponent(t)}`}async function Bx(e,t){try{return(await(e.fetchImpl??fetch)(FG(e),{method:"POST",headers:Dt(e.secret),body:JSON.stringify({ack:t})})).ok}catch{return!1}}var Gg=p(()=>{"use strict";vs();xr();en()});var Ux=p(()=>{"use strict";$();D();Gg();en()});function Fx(){let e=process.env.KYNVER_GIT_COMMIT_SHA?.trim();return{contractVersion:1,nodeVersion:process.versions.node,runtimePackageVersion:Xe,buildIdentity:e&&WG.test(e)?e.toLowerCase():null,platform:process.platform,arch:process.arch}}var WG,Wx=p(()=>{"use strict";sn();WG=/^[0-9a-f]{7,40}$/i});import{mkdirSync as KG,readFileSync as Bme,renameSync as $G,writeFileSync as HG}from"node:fs";import{homedir as jG}from"node:os";import Kx from"node:path";function VG(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return Kx.join(jG(),".kynver",`daemon-heartbeat-${t}.json`)}function $x(e){try{let t=VG(e.agentOsId);KG(Kx.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:Fx(),...e.owner?{owner:e.owner}:{}},n=`${t}.tmp-${process.pid}`;HG(n,JSON.stringify(r),"utf8"),$G(n,t)}catch{}}var Jg=p(()=>{"use strict";Wx();Fg()});function qg(e,t,r=6e4){let n=t-e;return n>r?n:null}var Yg=p(()=>{"use strict"});function JG(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 Hx(e,t){let r=JG(e);if(r!==null&&r>1)throw new zg(r,1);e.exec("BEGIN IMMEDIATE");try{for(let n of GG)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 zg,GG,jx=p(()=>{"use strict";zg=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"}},GG=[`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
|
|
117
|
-
`)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:
|
|
116
|
+
) STRICT`]});import{existsSync as qG,realpathSync as YG,readFileSync as zG}from"node:fs";import Vx from"node:path";function ZG(){try{return zG("/proc/self/mounts","utf8")}catch{return null}}function eJ(e){let t=Vx.resolve(e);for(let r=0;r<64;r+=1){if(qG(t))try{return YG.native(t)}catch{return t}let n=Vx.dirname(t);if(n===t)return t;t=n}return t}function tJ(e){return e.replace(/\\(\d{3})/g,(t,r)=>String.fromCharCode(Number.parseInt(r,8)))}function rJ(e){let t=[];for(let r of e.split(`
|
|
117
|
+
`)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:tJ(n[1]),fsType:n[2]})}return t}function Gx(e,t=process.platform){return t==="win32"?e.replace(/\\/g,"/"):e}function nJ(e,t){let r=null,n=Gx(e);for(let o of t){let s=Gx(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!r||o.mountPoint.length>r.mountPoint.length)&&(r=o)}return r}function Jx(e,t){let n=(t?.resolveRealPath??eJ)(e),o=(t?.mountsSource??ZG)();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=nJ(n,rJ(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 QG.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}:XG.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 XG,QG,qx=p(()=>{"use strict";XG=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),QG=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 sJ}from"node:fs";import iJ from"node:path";import{DatabaseSync as aJ}from"node:sqlite";var Eu,lJ,cJ,fa,Yx=p(()=>{"use strict";jx();qx();Eu=class extends Error{constructor(t){super(`local-run-store refused: ${t}`),this.name="FilesystemPolicyError"}},lJ="local-run-store.sqlite",cJ=5e3,fa=class e{db;now;databasePath;constructor(t,r,n){this.db=t,this.databasePath=r,this.now=n}static open(t){let r=Jx(t.directory,t.classifyOptions);if(r.verdict!=="accepted")throw new Eu(r.reason);sJ(t.directory,{recursive:!0,mode:448});let n=iJ.join(t.directory,t.filename??lJ),o=new aJ(n,{timeout:t.busyTimeoutMs??cJ}),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 Eu(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),Hx(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,162 +138,168 @@ 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
|
|
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}),
|
|
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}
|
|
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 uJ,renameSync as dJ}from"node:fs";function pJ(e,t){let r=`${e}.quarantine-${t}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;uJ(o)&&dJ(o,`${r}${n}`)}return r}function zx(e){let t=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),r=null;try{let s=fa.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=pJ(n,t);try{return{store:fa.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([r,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}var Xx=p(()=>{"use strict";Yx()});function fJ(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function mJ(){return gJ.classifyOptions??fJ()}function yJ(e){Au+=1;try{let t=mJ(),r=zx({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:Au},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:Au},failedAtMs:Date.now(),permanentRefusal:t.name==="FilesystemPolicyError"||t.name==="SchemaDowngradeRefusedError"}}}function kJ(e,t){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:t-e.failedAtMs>=hJ}function de(e=Date.now()){let t=gt();return(!Cr||Cr.status.harnessRoot!==t||kJ(Cr,e))&&(vJ(),Cr=yJ(t)),Cr.store}function bJ(){return Cr?Cr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:Au}}function Qx(){return de(),bJ()}function vJ(){try{Cr?.store?.close()}catch{}Cr=null}var gJ,hJ,Cr,Au,ln=p(()=>{"use strict";Ot();Xx();gJ={},hJ=300*1e3,Cr=null,Au=0});import{existsSync as RJ,readFileSync as wJ}from"node:fs";import{homedir as SJ}from"node:os";import _J from"node:path";function Zx(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return _J.join(SJ(),".kynver",`local-run-store-flags-${t}.json`)}function Xg(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 eC(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:Xg(r)}function tC(e,t){try{let r=Zx(e),n={contractVersion:1,agentOsId:e,flags:Xg(t),deliveredAt:new Date().toISOString()};Re(r,n),Mt={flags:n.flags,loadedAtMs:Date.now(),file:r}}catch{}}function rC(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(Mt&&e-Mt.loadedAtMs<xJ)return Mt.flags;try{let t=A().agentOsId?.trim();if(!t)return Mt={flags:{},loadedAtMs:e,file:null},Mt.flags;let r=Zx(t);if(!RJ(r))return Mt={flags:{},loadedAtMs:e,file:r},Mt.flags;let n=JSON.parse(wJ(r,"utf8")),o=n?.contractVersion===1?Xg(n.flags):{};return Mt={flags:o,loadedAtMs:e,file:r},o}catch{return Mt={flags:{},loadedAtMs:e,file:null},Mt.flags}}var xJ,Mt,Qg=p(()=>{"use strict";$();D();xJ=3e4,Mt=null});function EJ(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 Er(e=process.env){let t={},r={},n=[],o=rC();for(let s of CJ){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=EJ(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 CJ,Rs=p(()=>{"use strict";Qg();CJ=[{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 ma(e){return Er(process.env).flags[e]}function Zg(e){return`mesh-cron-lease:${e}`}function nC(e,t){if(ma("meshLease")==="off")return;let r=de();if(r)try{let n=r.latestRecoveryCheckpoint(Zg(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:Zg(e),payloadJson:JSON.stringify(t)})}catch{Qe.meshStoreFailures+=1}}function oC(e,t){let r=ma("meshLease");if(r==="off")return null;let n=de();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(Zg(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&&(Qe.meshLeaseDivergences+=1),r!=="enforce"?null:i&&t?.updatedAt&&s?.updatedAt&&Date.parse(t.updatedAt)>Date.parse(s.updatedAt)?(Qe.meshEnforceStaleInversions+=1,null):s}catch{return Qe.meshStoreFailures+=1,null}}function Pu(e){return`quota-cooldown:${e}`}function iC(e,t){if(ma("quota")==="off")return;let r=de();if(r)try{r.tryReserveAdmission(Pu(e),sC,t)}catch{Qe.quotaStoreFailures+=1}}function aC(e){if(ma("quota")==="off")return;let t=de();if(t)try{t.releaseAdmission(Pu(e),sC)}catch{Qe.quotaStoreFailures+=1}}function lC(e,t){let r=ma("quota");if(r==="off")return null;let n=de();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:Pu(e),limit:50}).find(i=>i.key===Pu(e)),s=!!o;return s!==t&&(Qe.quotaVerdictDivergences+=1),r==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return Qe.quotaStoreFailures+=1,null}}function cC(){return{"keeper.storeFailures":Qe.keeperStoreFailures,"meshLease.storeFailures":Qe.meshStoreFailures,"meshLease.divergences":Qe.meshLeaseDivergences,"meshLease.enforceStaleInversions":Qe.meshEnforceStaleInversions,"quota.storeFailures":Qe.quotaStoreFailures,"quota.verdictDivergences":Qe.quotaVerdictDivergences}}var Qe,hge,sC,ga=p(()=>{"use strict";ln();Rs();Qe={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};hge=1800*1e3;sC="quota-preflight"});function eh(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 Dge,Mge,Lge,Bge,th=p(()=>{"use strict";en();Ux();$();Jg();D();du();Yg();ga();Dge=15*6e4,Mge=2*6e4,Lge=5*6e4,Bge=30*6e4});import AJ from"node:path";function PJ(e){return AJ.resolve(Te(e.trim()))}function ws(e,t,r){let n=e?.trim();return n?{repo:PJ(n),source:t,persistedInConfig:r}:null}function uC(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function ha(e={}){let t=e.env??process.env,r=e.config??A(),n=ws(r.defaultRepo,"config",!0);if(n)return n;let o=ws(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=ws(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||uC(hc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function dC(e={}){let t=e.env??process.env,r=e.config??A(),n=ws(r.defaultRepo,"config",!0);if(n)return n;let o=ws(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=ws(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||uC(yc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl,home:e.home}))}function pC(e,t){let r={...t??A(),defaultRepo:Te(e)};return He(r),su(r)}function rh(e){return{defaultRepo:qe(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var Ss=p(()=>{"use strict";$();Bi();dt()});import IJ from"node:path";import{homedir as OJ}from"node:os";function fC(e){let t=A(),r=dC({...e,config:t});if(!r)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:qe(nh),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:qe(nh),resolved:rh(r),config:lg(t)};let n=pC(r.repo,t),o=rh({...r,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:qe(nh),resolved:o,config:lg(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}var nh,mC=p(()=>{"use strict";dt();$();Ss();nh=IJ.join(OJ(),".kynver","config.json")});import{mkdirSync as TJ,readFileSync as NJ,renameSync as DJ,writeFileSync as MJ}from"node:fs";import{homedir as LJ}from"node:os";import gC from"node:path";function hC(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return gC.join(LJ(),".kynver",`instruction-bundle-${t}.json`)}function yC(e,t){try{let r=hC(e);TJ(gC.dirname(r),{recursive:!0});let n=`${r}.tmp-${process.pid}`;MJ(n,JSON.stringify(t),{encoding:"utf8",mode:384}),DJ(n,r)}catch{}}function kC(e){try{let t=NJ(hC(e),"utf8"),r=JSON.parse(t);return sa(r)?r:null}catch{return null}}var bC=p(()=>{"use strict";rn()});function vC(e,t=process.env){let r=fs(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(r&&T_(r)===e)return r;if(e===BJ&&!pu(t))return null;let n=UJ[e];return n?fs(n):null}var BJ,UJ,RC=p(()=>{"use strict";rn();BJ="ib-3bab6314f0ba",UJ={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38","ib-49e76cb8052c":"8fc646b5c4f8f402120477452608398f035c3cddd2e7aa8bb328e97b84dcf6d8"}});import{createPublicKey as FJ,verify as WJ}from"node:crypto";function $J(e){return FJ({key:Buffer.concat([KJ,Buffer.from(e)]),format:"der",type:"spki"})}function HJ(e,t){if(!sa(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(at(e.bundle),"utf8");return WJ(null,n,$J(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 wC(e,t=process.env){if(!sa(e))return{ok:!1,reason:"malformed signed bundle payload"};let r=vC(e.publicKeyId,t);return r?HJ(e,r):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var KJ,SC=p(()=>{"use strict";RC();rn();KJ=Buffer.from("302a300506032b6570032100","hex")});function ka(e,t){console.error(JSON.stringify({event:e,...t}))}function _C(e,t,r){let n=wC(e);return n.ok?(Dx(n.bundle,t),t==="server"&&yC(r,e),!0):(ka("instruction_bundle_signature_invalid",{agentOsId:r,source:t,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function ya(e){if(Ar.diskCacheTried)return!1;Ar.diskCacheTried=!0;let t=kC(e);return t?_C(t,"disk",e):!1}async function xC(e){let t=e.nowMs??Date.now(),r=()=>({source:Gt(),version:Qn(),updated:!1});if(!e.force&&t-Ar.lastAttemptAtMs<jJ)return r();Ar.lastAttemptAtMs=t;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return Gt()==="embedded"&&ya(e.agentOsId)?{...r(),updated:!0}:r();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),VJ);try{let l=Dt(o);delete l["Content-Type"],Ar.etag&&Gt()==="server"&&(l["If-None-Match"]=Ar.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 Ar.routeMissingLogged||(Ar.routeMissingLogged=!0,ka("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),Gt()==="embedded"&&ya(e.agentOsId)?{...r(),updated:!0}:r();if(!c.ok)return ka("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),Gt()==="embedded"&&ya(e.agentOsId)?{...r(),updated:!0}:r();let u=await c.json().catch(()=>null);return!u||!_C(u,"server",e.agentOsId)?Gt()==="embedded"&&ya(e.agentOsId)?{...r(),updated:!0}:r():(Ar.etag=c.headers.get("etag"),ka("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Qn(),publicKeyId:u.publicKeyId}),{...r(),updated:!0})}catch(l){return ka("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),Gt()==="embedded"&&ya(e.agentOsId)?{...r(),updated:!0}:r()}finally{clearTimeout(a)}}var jJ,VJ,Ar,CC=p(()=>{"use strict";vs();bC();an();SC();jJ=15*6e4,VJ=1e4,Ar={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1}});import GJ from"node:os";function EC(e,t){console.error(JSON.stringify({event:"daemon_identity",level:e,message:t}))}function AC(e=A(),t=process.env){let r=ot(t,e),n=ts({config:e,totalMemBytes:GJ.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=fr(r.boxKind,i);Wi(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)EC("warn",c);for(let c of s)EC("error",c);return{ok:l,box:r,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}var PC=p(()=>{"use strict";$();We();jo();zi()});import{spawnSync as JJ}from"node:child_process";import{existsSync as qJ,readFileSync as YJ}from"node:fs";import zJ from"node:path";function QJ(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+XJ<s.startedAtMs||o.push({workerName:s.workerName,workerPid:s.pid,orphanPid:i.pid}));return o}function ZJ(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 e2(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=JJ("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:3e4});if(o.status!==0)return[];try{return ZJ(o.stdout??"")}catch{return[]}}function t2(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=zJ.join(q(r.id),"workers",B(o),"worker.json");if(!qJ(s))continue;let i=JSON.parse(YJ(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 IC(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return{checkedWorkers:0,killed:[]};let n=t.isAlive??oe,o=(t.collect??(l=>t2(l,n)))(e);if(o.length===0)return{checkedWorkers:0,killed:[]};let s=(t.query??e2)(o.map(l=>l.pid)),i=t.killTree??he,a=QJ(s,o,n).map(l=>({...l,result:i(l.orphanPid,"SIGKILL")}));return{checkedWorkers:o.length,killed:a}}var XJ,OC=p(()=>{"use strict";Q();D();Ti();XJ=5e3});import{mkdirSync as r2,readFileSync as n2,renameSync as o2,writeFileSync as s2}from"node:fs";import{homedir as i2}from"node:os";import Iu from"node:path";function TC(){return Iu.join(i2(),".kynver")}function a2(e=TC()){return Iu.join(e,"doctor-native-windows.json")}function NC(e=TC()){return Iu.join(e,"native-windows-state.json")}function l2(e,t){r2(Iu.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;s2(r,`${JSON.stringify(t,null,2)}
|
|
143
|
+
`,{mode:384}),o2(r,e)}function sh(e){try{return JSON.parse(n2(e,"utf8"))}catch{return null}}function c2(e){let t=sh(a2(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 DC(e=new Date,t){try{let r=NC(t),n=sh(r)??{};l2(r,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function u2(e){let t=sh(NC(e));return typeof t?.lastWorkerCompletedAt=="string"?t.lastWorkerCompletedAt:null}function LC(e){oh=e.admission,MC=e.ownerKind}function BC(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:Xe,ownerKind:MC,nativeWindows:n?{admission:oh?.basis??null,hostCapability:oh?.hostCapability??null,lastDoctor:c2(e.root),lastWorkerCompletedAt:u2(e.root)}:null}}var oh,MC,Ou=p(()=>{"use strict";Gc();sn();oh=null,MC=null});function d2(e){return typeof e=="string"&&UC.includes(e)}function p2(e,t){let r=e[t]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function m2(e={}){let t=e.platform??process.platform,r=e.env??process.env;return e.hostCapability!==void 0&&!d2(e.hostCapability)?{allowed:!1,reason:"invalid_host_capability",remedy:"hostCapability must be one of: "+UC.join(", ")}:t!=="win32"?{allowed:!0,basis:"not_native_windows",hostCapability:e.hostCapability??null}:e.hostCapability?{allowed:!0,basis:"host_capability",hostCapability:e.hostCapability}:p2(r,ih)?{allowed:!0,basis:"experimental_env_override",hostCapability:null}:{allowed:!1,reason:"native_windows_unqualified",remedy:f2}}function ah(e={}){let t=m2(e);return t.allowed?(t.basis==="experimental_env_override"&&console.error(JSON.stringify({event:"daemon_native_windows_experimental",override:ih,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 UC,ih,f2,lh=p(()=>{"use strict";UC=["desktop-supervised","native-windows-qualified"],ih="KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS";f2=`Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set ${ih}=1 for the experimental native path (not yet qualified; \`kynver doctor runner-install\` reports the host).`});function g2(e){return e.replace(/\/+$/,"")}async function FC(e){let t=e.fetchFn??fetch,r=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${g2(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:Dt(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 WC=p(()=>{"use strict";vs()});import{closeSync as h2,existsSync as ch,openSync as y2,readFileSync as k2,unlinkSync as KC,writeFileSync as b2}from"node:fs";function $C(e){if(!ch(e))return null;try{let t=JSON.parse(k2(e,"utf8"));if(typeof t.pid=="number"&&typeof t.at=="string")return t}catch{return null}return null}function R2(e){let t=$C(e);if(!t||!oe(t.pid))return!0;let r=Date.parse(t.at);return Number.isNaN(r)?!0:Date.now()-r>v2}function HC(e){if(ch(e)&&!R2(e)){let t=$C(e);return{acquired:!1,reason:t?`held by pid ${t.pid}`:"held by another process"}}if(ch(e))try{KC(e)}catch{}try{let t=y2(e,"wx");return b2(t,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),h2(t),{acquired:!0}}catch(t){if(t.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw t}}function jC(e){try{KC(e)}catch{}}var v2,VC=p(()=>{"use strict";D();v2=10*6e4});function S2(e){return w2.test(e.trim())}function _2(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 ba(e,t,r,n){let o=e.trim();return o==="*"?!0:_2(o,r,n).has(t)}function x2(e,t){let r=e.trim().split(/\s+/);if(r.length!==5)return!1;let[n,o,s,i,a]=r;return ba(n,t.getUTCMinutes(),0,59)&&ba(o,t.getUTCHours(),0,23)&&ba(s,t.getUTCDate(),1,31)&&ba(i,t.getUTCMonth()+1,1,12)&&ba(a,t.getUTCDay(),0,6)}function E2(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function GC(e,t){if(!S2(e))return null;let r=E2(t);r=new Date(r.getTime()+6e4);for(let n=0;n<C2;n++){if(x2(e,r))return r;r=new Date(r.getTime()+6e4)}return null}function JC(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=GC(e.cron.trim(),t);return r?r.toISOString():null}return null}function uh(e,t){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let r=GC(e.cron.trim(),t);return r?r.toISOString():null}var w2,C2,qC=p(()=>{"use strict";w2=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;C2=366*24*60});import{randomBytes as A2}from"node:crypto";import{promises as va}from"node:fs";import P2 from"node:path";async function I2(e){try{return await va.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function O2(e){if(!e)return{...Tu,jobs:{...Tu.jobs}};try{let t=JSON.parse(e);return t?.version!==1||typeof t.jobs!="object"||!t.jobs?{...Tu,jobs:{}}:t}catch{return{...Tu,jobs:{}}}}async function dh(e){let t=await I2(e);return O2(t)}async function T2(e,t){await va.mkdir(P2.dirname(e),{recursive:!0});let r=A2(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${r}`;await va.writeFile(n,`${JSON.stringify(t,null,2)}
|
|
144
|
+
`,"utf8");try{await va.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await va.unlink(n).catch(()=>{})}}async function YC(e,t){await T2(e,t)}function zC(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 Tu,ph=p(()=>{"use strict";Tu={version:1,jobs:{}}});function N2(e,t){if(!e.inflightUntil)return!1;let r=Date.parse(e.inflightUntil);return!Number.isNaN(r)&&r>t}function D2(e){return!!e.completedAt}function M2(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 L2(e,t,r){if(t.nextFireAt)return t.nextFireAt;let n=JC(e.spec,r);return t.nextFireAt=n,n}function B2(e,t,r,n){if(e.paused||D2(t)||N2(t,r)||!M2(e,t,n,r))return!1;let o=t.nextFireAt?Date.parse(t.nextFireAt):NaN;return Number.isNaN(o)?!1:r>=o}function U2(e,t,r){e.spec.scheduleKind==="cron"&&(t.nextFireAt=uh(e.spec,r))}async function fh(e={}){let t=e.env??gs(),r=e.now??new Date,n=r.getTime(),o=e.agentOsIdFilter?Me(e.agentOsIdFilter):Me();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=HC(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 wu(t.storePath),a=e.agentOsIdFilter?i.filter(h=>h.spec.target.agentOsId===e.agentOsIdFilter):i,l=await dh(t.statePath),c=[];for(let h of a){let y=zC(l,h.providerScheduleId);L2(h,y,r),B2(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=uh(h.spec,r),f++;continue}}if(m<=0){f++;continue}y.inflightUntil=new Date(n+t.inflightLeaseMs).toISOString(),y.lastAttemptAt=r.toISOString(),U2(h,y,r);try{let b=Me(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 FC({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 YC(t.statePath,l),{enabled:!0,scanned:a.length,due:c.length,fired:u,skippedJobs:f,errors:d,...g.length?{errorDetails:g}:{}}}finally{jC(t.lockPath)}}var mh=p(()=>{"use strict";Sr();WC();VC();$();qC();hs();ph()});import XC from"node:path";function Nu(e){let t=K(XC.join(q(e),QC),null);return oC(e,t)??t}function ZC(e,t){let r={...t,updatedAt:new Date().toISOString()};Re(XC.join(q(e),QC),r),nC(e,r)}function eE(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 QC,gh=p(()=>{"use strict";D();Q();ga();QC="mesh-cron-lease.json"});function nE(e){Ra=e}function oE(e=Date.now()){return!Ra||Ra.stallCount===tE&&e-rE<9e5?null:(tE=Ra.stallCount,rE=e,Ra)}var Ra,tE,rE,hh=p(()=>{"use strict";Ra=null,tE=-1,rE=0});function iE(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 sE(e){return new Error(`callback timeout after ${e}ms`)}async function aE(e,t){let r=iE(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(sE(r))},r)})])}catch(i){throw s?sE(r):i}finally{o&&clearTimeout(o)}}function lE(e,t){let r=iE(t);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:r}}}async function Zn(e,t,r,n){try{return await aE(async o=>{let s=await mt(e,{method:"POST",headers:Dt(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 lE(o,n?.timeoutMs)}}async function fe(e,t,r,n){let o=await Zn(e,t,r,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await C_(t,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Zn(e,s.token,r,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function yh(e,t,r){try{return await aE(async n=>{let o=await mt(e,{method:"GET",headers:Dt(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 lE(n,r?.timeoutMs)}}var Ve=p(()=>{"use strict";vs();pr();$()});function cE(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}var uE=p(()=>{"use strict"});function wa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function dE(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 kh(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 pE=p(()=>{"use strict"});function K2(e){return F2.includes(e)}function $2(e){return W2.includes(e)}function fE(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||K2(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:$2(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}function j2(e){if(!e)return null;let t=e.trim().toLowerCase(),r=H2.get(t)??null,n=Mx(t);if(!n)return r;let o=fE(n);return r?{...o,dispatchLane:r.dispatchLane,defaultRoleLane:r.defaultRoleLane}:o}function bh(e){return j2(e)?.defaultRoleLane??null}function gE(){return mE.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}var F2,W2,mE,H2,Du=p(()=>{"use strict";Hg();an();F2=["implementation","review","landing"],W2=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];mE=ys.personas.map(fE),H2=new Map(mE.map(e=>[e.slug,e]))});function hE(e){return(e??"").trim().toLowerCase()}function V2(e){switch(hE(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 G2(e){let t=hE(e);if(!t)return;if(t==="implementation"||t==="review"||t==="landing"||t==="any")return t;let r=V2(t);if(r)return r;if(t==="implement"||t==="repair"||t==="coding")return"implementation";if(t==="land"||t==="merge")return"landing"}function yE(e){return G2(e)??"any"}var kE=p(()=>{"use strict";Du()});function J2(e=process.env){let t=A();return Pt(t,e)!=="forge"}function Mu(e,t=process.env){if(J2(t))return e?.maxConcurrentWorkers??void 0}async function Lu(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 yh(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 vh=p(()=>{"use strict";Ve();$();We()});async function bE(e,t=q2){let r=await t.fetchPreferences(e.agentOsId,e.args),n=t.configuredOverride(r,e.env);return t.observe({runId:e.runId,configuredMaxWorkersOverride:n})}var q2,vE=p(()=>{"use strict";vh();es();q2={fetchPreferences:Lu,configuredOverride:Mu,observe:Yi}});function Bu(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Rh(e){return e.toLowerCase()}function Y2(e){let t=Bu(e,"roleLane");if(t)return t;let r=Rh(Bu(e,"executorRef")),n=Rh(Bu(e,"title")),o=Rh(Bu(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=bh(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function RE(e){let t=Y2(e);return t?{...e,roleLane:t}:e}var wE=p(()=>{"use strict";Du()});function SE(e){let t=e.trim();return z2.test(t)||X2.test(t)}function _E(e){let t=e.trim().toLowerCase();return t.startsWith("gpt-")||t.startsWith("gpt5")||t.includes("codex")}function wh(e){let t=e.trim().toLowerCase();return t.includes("composer")||t.includes("cursor")}function xE(e){return e.trim().toLowerCase().startsWith("gemini-")}function Q2(e){return _E(e)?"codex":SE(e)?"claude":xE(e)?"gemini":(wh(e),"cursor")}function Z2(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 eq(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?SE(n)||_E(n)||wh(n)||xE(n)?{lane:r,model:n,provider:Q2(n),rule:"executor_ref:harness_lane_model"}:{lane:r,rule:"executor_ref:harness_lane"}:{lane:r,rule:"executor_ref:harness_lane"}}function yt(e){let t=typeof e=="string"?e.trim():"";return t?Z2(t)??eq(t):null}function CE(e){let t=yt(e);return t?!!(t.provider&&t.provider!=="cursor"||t.model&&!wh(t.model)):!1}var z2,X2,Uu=p(()=>{"use strict";z2=/^claude[-_]/i,X2=/^(?:opus|sonnet|haiku)\b/i});function Sa(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Pr(e){if(!e?.trim())return!1;let t=e.trim().toLowerCase();return tq.has(t)?!0:t.includes("claude")||t.includes("opus")}function Fu(e){if(!e)return!1;let t=e.workerProviderOverride;if(typeof t=="string"&&Pr(t))return!0;let r=Sa(e,"executorRef").toLowerCase();if(r==="provider:claude"||r.startsWith("provider:claude:")||r.includes("claude-worker-override")||r.includes("operator-claude"))return!0;let n=yt(Sa(e,"executorRef"));if(n?.provider&&Pr(n.provider)||n?.model&&Pr(nq(n.model)))return!0;let o=Sa(e,"description");if(rq.some(i=>i.test(o)))return!0;let s=Sa(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function nq(e){let t=e.trim().toLowerCase();return/^claude[-_]/.test(t)||/^(?:opus|sonnet|haiku)\b/.test(t)?"claude":t}function oq(e,t){return{provider:Ir,model:Wu,rule:`policy:cursor_default${t}`,requestedModel:e}}function iq(e){return sq.some(t=>e.startsWith(t))}function Sh(e){if(!e)return!1;let t=e.workerProviderOverride;return typeof t=="string"&&t.trim()||yt(Sa(e,"executorRef"))?.provider?!0:Fu(e)}function EE(e){let{routing:t,task:r}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Pr(n))return{...t,provider:"claude",rule:t.rule.startsWith("explicit:")?t.rule:"explicit:operator_provider"};if(n||iq(t.rule)||Sh(r)||!Pr(t.provider))return t;let o=t.rule&&t.rule!=="default:global"?`:${t.rule.replace(/:/g,"_")}`:"";return oq(t.model,o)}function AE(e,t=Ir){let r=e?.trim();return r?Ye(r):t}var Ir,tq,rq,sq,eo=p(()=>{"use strict";Uu();Ku();ta();ta();Ir="cursor",tq=new Set(["claude","opus","anthropic"]),rq=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];sq=["explicit:","executor_ref:","factory:","task:"]});function _s(e){return PE[e]}function IE(){return Object.values(PE)}var PE,_h=p(()=>{"use strict";PE={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{createHash as OE}from"node:crypto";import{statSync as aq}from"node:fs";import{spawnSync as TE}from"node:child_process";function Jt(e){try{let t=aq(e),r=`${e}|${t.size}|${t.mtimeMs}`;return OE("sha256").update(r).digest("hex").slice(0,16)}catch{return}}function xs(e){return OE("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function kt(e,t){for(let r of t){let n=process.env[r]?.trim();if(n)return n}return e}function Lt(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=ie(e,t),i=TE(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 $u(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=ie(e,t);return TE(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 to=p(()=>{"use strict";Fe()});import{existsSync as lq}from"node:fs";import{homedir as cq}from"node:os";import _a from"node:path";function dq(){let e=cq();return[process.env.CODEX_HOME?.trim()?_a.join(_a.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,_a.join(e,".codex","auth.json"),_a.join(e,".config","codex","auth.json")].filter(r=>!!r)}function pq(e){return _a.dirname(e)}function fq(e){let t,r;for(let n of dq()){if(!lq(n))continue;t??=n;let o=Lt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:pq(n)}});if(r??=o,o.ok)return{authPath:n,login:o}}return{authPath:t,login:r??Lt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function NE(e=new Date().toISOString()){let t=kt(uq,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:xs("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}=fq(t),o=!!r&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:r?Jt(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 uq,DE=p(()=>{"use strict";to();uq="codex"});import{existsSync as mq}from"node:fs";import{homedir as gq}from"node:os";import xh from"node:path";function hq(){let e=process.env.HERMES_HOME?.trim(),t=e?xh.resolve(e):xh.join(gq(),".hermes");return xh.join(t,"auth.json")}function Hu(e=new Date().toISOString()){let t=kt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Lt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=hq(),o=mq(n),s=$u(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?Jt(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 Ch=p(()=>{"use strict";to()});function Cs(e=new Date().toISOString()){let t=NE(e);if(t.ready)return{...t,path:"codex_cli"};let r=Hu(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 ju=p(()=>{"use strict";DE();Ch()});function BE(e,t){let r=_s(e);return t==="privileged"?r.supportsPrivilegedPlatformActions:t==="low"?r.supportsLowRiskOrchestration:!0}function yq(e,t){let r=_s(e.providerId),n=_s(t.providerId),o=ME.indexOf(r.costTier)-ME.indexOf(n.costTier);if(o!==0)return o;let s=LE[e.binding.authSource]-LE[t.binding.authSource];return s!==0?s:e.providerId.localeCompare(t.providerId)}function Eh(e){let t=IE().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&BE(a.providerId,e.riskClass));if(t.length===0)return null;let n=[...t].sort(yq)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return BE(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 ME,LE,UE=p(()=>{"use strict";_h();ME=["low","medium","high"],LE={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3}});import{existsSync as kq}from"node:fs";import{homedir as bq}from"node:os";import vq from"node:path";function wq(){let e=bq();return[vq.join(e,".claude",".credentials.json")]}function FE(e=new Date().toISOString()){let t=kt(Rq,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:xs("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=Lt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=wq().find(i=>kq(i)),o=$u(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?Jt(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 Rq,WE=p(()=>{"use strict";to();Rq="claude"});function bt(e,t={}){let r=Di(e);if(!t.reviewWorker)return r;let n={...r,[Sq]:"1"};for(let o of _q)delete n[o];return n}var Sq,_q,ro=p(()=>{"use strict";Mi();Sq="KYNVER_NO_PROD_DB_CREDENTIALS",_q=["KYNVER_ENV_FILE"]});function KE(e){return e.replace(xq,"")}function Vu(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function Cq(e){let t=e.trim().toLowerCase();return t.startsWith("gemini-")||t==="auto"||t==="pro"||t==="flash"||t==="flash-lite"}function Aq(e){let t=e.trim().toLowerCase();return Eq.has(t)?"auto":null}function Ah(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=KE(r).trim()||t;return $E.test(o)||!Vu(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 Es(e,t){let r=(e??"").trim();return r?Vu(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 Ph(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 As(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=KE(r).trim()||t;return Vu(o)||!Cq(o)&&$E.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 Ps(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let n=Aq(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")`}:Vu(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 xq,$E,Eq,qt=p(()=>{"use strict";xq=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;$E=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;Eq=new Set(["cursor"])});import{existsSync as xa,readdirSync as Pq}from"node:fs";import no from"node:path";function Oq(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 Tq(e){let t=no.join(e,"versions");if(!xa(t))return null;let r=null,n=-1;for(let o of Pq(t,{withFileTypes:!0})){if(!o.isDirectory()||!Iq.test(o.name))continue;let s=Oq(o.name);s==null||s<=n||(n=s,r=no.join(t,o.name))}return r}function Gu(e){let t=e?.trim()||no.join(process.env.LOCALAPPDATA||"","cursor-agent"),r=no.join(t,"node.exe"),n=no.join(t,"index.js");if(xa(r)&&xa(n))return{nodeExe:r,indexJs:n,versionDir:t};let o=Tq(t);if(!o)return null;let s=no.join(o,"node.exe"),i=no.join(o,"index.js");return!xa(s)||!xa(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Iq,HE=p(()=>{"use strict";Iq=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i});import{closeSync as Oh,existsSync as GE,mkdirSync as Nq,openSync as Th,statSync as Dq,unlinkSync as jE}from"node:fs";import{spawn as Mq}from"node:child_process";import Lq from"node:os";import Yt from"node:path";function Wq(e,t,r){return{executable:e,prefixArgs:[t],shell:!1,detached:Se(),bundledVersionDir:r}}function Ca(e){if(process.platform==="win32"){let t=/\.(cmd|bat)$/i.test(e),r=/node\.exe$/i.test(e)&&GE(Yt.join(Yt.dirname(e),"index.js"));if(t||r||e==="agent"){let o=t?Gu(Yt.dirname(e)):r?{nodeExe:e,indexJs:Yt.join(Yt.dirname(e),"index.js"),versionDir:Yt.dirname(e)}:Gu();if(o)return Wq(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 Kq(e,t,r){return bt({...process.env,CI:"1",NO_COLOR:"1",...t.bundledVersionDir?{CURSOR_INVOKED_AS:Yt.basename(e)||"agent.cmd"}:{}},{reviewWorker:r})}function JE(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Nh(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 $q(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||Yt.join(Lq.homedir(),".kynver","locks");return Nq(e,{recursive:!0}),Yt.join(e,"cursor-agent-start.lock")}function Hq(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=$q(),t=Nh("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",Uq),r=Nh("KYNVER_CURSOR_START_LOCK_STALE_MS",Fq),n=Date.now();for(;;)try{let o=Th(e,"wx");return Oh(o),()=>{try{jE(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Dq(e).mtimeMs>r){jE(e);continue}}catch{continue}if(Date.now()-n>t)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);JE(250)}}function oo(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=Gu(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let n=Yt.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(GE(n))return n}return"agent"}function jq(){return oo(process.env)}function VE(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 Ih,Bq,Uq,Fq,qE,Is=p(()=>{"use strict";hr();D();ro();qt();HE();Ih="composer-2.5",Bq=15e3,Uq=6e4,Fq=3e4;qE={name:"cursor",defaultModel:Ih,preflightModel(e){return Ps(e,Ih)},start(e){let t=Ps(e.model,Ih);if(!t.ok)throw new Error(`cursor provider model preflight failed: ${t.note}`);let r=t.model,n=Th(e.stdoutPath,"a"),o=Th(e.stderrPath,"a"),s=["ignore",n,o],i=jq(),a=Ca(i),l=Hq(),c;try{let[u,d]=a.shell?[a.executable,VE(e,r,a.prefixArgs)]:st(a.executable,VE(e,r,a.prefixArgs),e.workerDir);c=Mq(u,d,ee({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:Kq(i,a,e.reviewWorker)})),JE(Nh("KYNVER_CURSOR_START_LOCK_HOLD_MS",Bq))}finally{l(),Oh(n),Oh(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 Vq}from"node:child_process";function Ju(e,t=process.env){try{let r;try{r=Ca(e)}catch{r={executable:e,prefixArgs:[]}}let n=Vq(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 Dh=p(()=>{"use strict";Os();Is()});import{existsSync as YE}from"node:fs";import{homedir as Gq}from"node:os";import so from"node:path";import{spawnSync as Jq}from"node:child_process";function qq(e){if(so.isAbsolute(e)||e.includes("/")||e.includes("\\"))return YE(e);try{let t=Jq(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function qu(e=process.env){let t=[],r=e.KYNVER_CURSOR_AUTH_HOME?.trim();r&&(t.push(so.join(r,".config","cursor","auth.json")),t.push(so.join(r,".cursor-agent","auth.json")));let n=Gq();if(t.push(so.join(n,".config","cursor","auth.json")),t.push(so.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&t.push(so.join(o,"cursor-agent","auth.json")),s&&t.push(so.join(s,"cursor","auth.json"))}return t}function zE(e){return`${e.error}: ${e.detail}`}function zu(e=process.env){let t=oo(e);return qq(t)?e.CURSOR_API_KEY?.trim()?{ok:!0,creds:{agentBin:t,authSource:"api_key_env"}}:qu(e).find(n=>YE(n))?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:Ju(t,e).ok?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:{ok:!1,error:Mh,detail:"Run `agent login` on this computer, or set CURSOR_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Yu,detail:"`agent` CLI not found. Install the Cursor Agent CLI (https://cursor.com/docs/cli/headless) and keep it on PATH."}}var Yu,Mh,Os=p(()=>{"use strict";Is();Dh();Yu="cursor_cli_unavailable",Mh="cursor_not_logged_in"});import{existsSync as Yq}from"node:fs";function XE(e=new Date().toISOString()){let t=kt(zq,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:xs("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=Lt(t,["-v"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=qu().find(a=>Yq(a)),o=Ju(t),s=!!n||o.ok,i=r.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?Jt(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 zq,QE=p(()=>{"use strict";Os();Dh();to();zq="agent"});import{existsSync as Xq,readFileSync as Qq}from"node:fs";import{homedir as Zq}from"node:os";import Lh from"node:path";function tY(){let e=process.env.HERMES_HOME?.trim(),t=e?Lh.resolve(e):Lh.join(Zq(),".hermes");return Lh.join(t,".env")}function rY(e){try{let t=Qq(e,"utf8"),r=[];for(let n of eY)new RegExp(`^${n}=`,"m").test(t)&&r.push(n);return r}catch{return[]}}function ZE(e=new Date().toISOString()){let t=kt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=Lt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=tY(),o=Xq(n),s=o?rY(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?Jt(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 eY,eA=p(()=>{"use strict";to();eY=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"]});function tA(e={}){let t=e.nowIso?.()??new Date().toISOString(),r=Cs(t),n={codex:r,cursor:XE(t),claude:FE(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:ZE(t),hermesOpenAiCodex:Hu(t),codexAdapterPath:r.path,readyCount:o}}var rA=p(()=>{"use strict";WE();ju();QE();eA();Ch()});function Bh(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function sY(e){let t=Bh(e,"executorRef").toLowerCase(),r=Bh(e,"title").toLowerCase(),n=Bh(e,"description").toLowerCase(),o=`${t}
|
|
145
145
|
${r}
|
|
146
|
-
${n}`;return
|
|
147
|
-
`}function
|
|
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
|
-
${
|
|
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=
|
|
152
|
-
`),a=
|
|
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.",...
|
|
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?[...
|
|
155
|
-
`)}var
|
|
156
|
-
${n}`,s=
|
|
157
|
-
`).map(t=>t.trim()).find(Boolean)??""}function
|
|
158
|
-
`)}function
|
|
146
|
+
${n}`;return nY.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":oY.some(s=>s.test(o))?"low":"elevated"}function iY(e){let t=_s(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 aY(e){let t=e.inventory??tA();return e.codexBinding?{...t,bindings:{...t.bindings,codex:e.codexBinding}}:t}function io(e){let t=iY({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 nA(e){let t=e.task??{},r=sY(t),n=aY({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Cs())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Eh({inventory:n,riskClass:r});return io(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 io({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 io({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 io({providerId:"claude",binding:c,riskClass:r,routingRule:"orchestration:explicit_claude",model:s})}let a=Eh({inventory:n,riskClass:r});if(a)return io({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 io({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 nY,oY,oA=p(()=>{"use strict";eo();_h();ju();UE();rA();nY=[/\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],oY=[/\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 Uh(e){return`${JSON.stringify(e)}
|
|
147
|
+
`}function Fh(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 Bt,Or=p(()=>{"use strict";Bt="KYNVER_WORKER_BROKER_SOCKET"});import{unlinkSync as lY,writeFileSync as cY}from"node:fs";import uY from"node:path";function Aa(e){if(!e||e.length===0)return[...Ea];let t=new Set;for(let r of e)for(let n of fY[r]??[])t.add(n);return Ea.filter(r=>t.has(r))}function iA(e){return Aa(e).map(t=>`mcp__${be}__${t}`)}function hY(e){return mY.includes(e)}function Wh(e){return gY.includes(e)}function aA(e){return hY(e)&&!Wh(e)}function Pa(e=process.env){let t=e[dY]?.trim().toLowerCase();return t?t==="1"||t==="true"||t==="yes"||t==="on":!0}function lA(e){return uY.join(e,pY)}function cA(e){let t=lA(e.workerDir),r={mcpServers:{[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Bt]:e.brokerSocketPath}}}};return cY(t,`${JSON.stringify(r,null,2)}
|
|
148
|
+
`,{mode:384}),t}function Xu(e){try{return lY(lA(e)),!0}catch{return!1}}var dY,pY,be,Ea,sA,fY,mY,gY,lt=p(()=>{"use strict";Or();dY="KYNVER_WORKER_MCP_TOOLS",pY="mcp-config.json",be="kynver",Ea=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],sA=Ea.map(e=>`mcp__${be}__${e}`),fY={"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"]};mY=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],gY=["openai-compatible","gemini-api"]});import{closeSync as uA,openSync as dA}from"node:fs";import{spawn as yY}from"node:child_process";function kY(e,t){let n=fA(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 fA(e,t,r){return["--model",t,...Ec(r),"-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:sA).join(",")}`]:[],"--",e.prompt]}var pA,Kh=p(()=>{"use strict";hr();ro();D();Fe();qt();gr();lt();gr();pA={name:"claude",defaultModel:Ke,preflightModel(e){return Ah(e,Ke)},start(e){let t=Ah(e.model,Ke);if(!t.ok)throw new Error(`claude provider model preflight failed: ${t.note}`);let r=t.model;kY(e,r);let n=Cc(r,{pinned:e.modelPinned===!0}),[o,s]=ie("claude",fA(e,r,n)),i=dA(e.stdoutPath,"a"),a=dA(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=st(o,s,e.workerDir),d=yY(c,u,ee({cwd:e.worktreePath,detached:Se(),stdio:l,env:bt(process.env,{reviewWorker:e.reviewWorker})}));if(uA(i),uA(a),!d.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return d.unref(),{pid:d.pid,model:r}}}});var Ts,Qu=p(()=>{"use strict";Ts="gpt-5.6-sol"});import{closeSync as mA,openSync as gA}from"node:fs";import{spawn as bY}from"node:child_process";function vY(e,t){return bt({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function RY(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 $h,hA,yA=p(()=>{"use strict";hr();ro();D();Fe();to();qt();Qu();$h=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Ts;hA={name:"hermes-codex",defaultModel:$h,preflightModel(e){return Es(e,$h)},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=Es(e.model,$h);if(!t.ok)throw new Error(`hermes-codex provider model preflight failed: ${t.note}`);let r=t.model,n=kt("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=ie(n,RY(r,e.prompt)),i=gA(e.stdoutPath,"a"),a=gA(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=st(o,s,e.workerDir),d=bY(c,u,ee({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:l,env:vY(e.reviewWorker,e.codexHome)}));if(mA(i),mA(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 _Y(e=process.env){return e[wY]?.trim().toLowerCase()==="elevated"?"elevated":SY}function Zu(e=process.platform,t=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${_Y(t)}"`]}var wY,SY,Hh=p(()=>{"use strict";wY="KYNVER_CODEX_WINDOWS_SANDBOX",SY="unelevated"});import{closeSync as kA,existsSync as xY,openSync as bA}from"node:fs";import{spawn as jh}from"node:child_process";function CY(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Ts}function Nr(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function EY(e,t){return bt({...process.env,CI:"1",NO_COLOR:"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function AY(e,t,r,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Zu(n,o),"--json","--sandbox",r==="read_only"?"read-only":"workspace-write","--model",e,t]}function PY(e,t,r,n){if(process.platform==="win32"){let[l,c]=ie(e,t);return jh(l,c,r)}if(!xY("/usr/bin/script")){let[l,c]=st(e,t,n);return jh(l,c,r)}let s=[e,...t].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=st("script",["-qfc",s,"/dev/null"],n);return jh(i,a,r)}var Tr,vA,ao=p(()=>{"use strict";hr();ro();D();Fe();ju();qt();yA();Hh();Qu();Tr=CY();vA={name:"codex",defaultModel:Tr,preflightModel(e){return Es(e,Tr)},start(e){if(Cs().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return hA.start(e);let r=Es(e.model,Tr);if(!r.ok)throw new Error(`codex provider model preflight failed: ${r.note}`);let n=r.model,o=bA(e.stdoutPath,"a"),s=bA(e.stderrPath,"a"),i=["ignore",o,s],a=Nr(),l=AY(n,e.prompt,e.executionMode),c;try{c=PY(a,l,ee({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:i,env:EY(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{kA(o),kA(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 ed}from"node:fs";import lo from"node:path";import{fileURLToPath as IY}from"node:url";function OY(e,t){let r=lo.resolve(e);for(;;){let n=lo.join(r,t);if(ed(n))return n;let o=lo.dirname(r);if(o===r)return null;r=o}}function TY(e){return OY(e,lo.join("node_modules",".bin","tsx"))??"npx"}function Vh(e,t){if(e.endsWith(".ts")){let r=TY(lo.dirname(e));return{command:r,argsPrefix:r==="npx"?["tsx",e]:[e],cliPath:e}}return{command:t,argsPrefix:[e],cliPath:e}}function td(e){if(e.explicitCliPath)return ed(e.explicitCliPath)?Vh(e.explicitCliPath,e.nodeExecutable):null;let t=IY(new URL(".",e.importMetaUrl)),r=lo.join(t,"cli.js");if(ed(r))return Vh(r,e.nodeExecutable);let n=lo.join(t,"cli.ts");return ed(n)?Vh(n,e.nodeExecutable):null}var Gh=p(()=>{"use strict"});function DY(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function Ia(e,t,r){let n=await e.fetchImpl(`${e.apiBaseUrl}${t}`,{method:r?.method??"GET",headers:{[NY]: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 Oa(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function rd(e,t,r){let n=DY(e);switch(t){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=Oa(r.memoryQuery);s&&o.set("memoryQuery",s);let i=Oa(r.mode);return i&&o.set("mode",i),Ia(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)),Ia(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=Oa(r.query);s&&o.set("q",s),typeof r.limit=="number"&&o.set("limit",String(r.limit));let i=o.toString();return Ia(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return Ia(e,`${n}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return Ia(e,`${n}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...Oa(r.eventKey)?{eventKey:Oa(r.eventKey)}:{}}})}}function Ns(e){return Ea.includes(e)}var NY,Ta,nd=p(()=>{"use strict";lt();NY="X-Kynver-Job-Token",Ta={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 Na(e){return Aa(e).filter(Ns).map(t=>{let r=Ta[t];return{type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema}}})}var od=p(()=>{"use strict";nd();lt()});import{closeSync as RA,openSync as wA}from"node:fs";import MY from"node:path";import{fileURLToPath as LY}from"node:url";import{spawn as BY}from"node:child_process";function Jh(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}function FY(e=process.env){let t=e.KYNVER_WORKER_BASE_URL?.trim();if(!t)throw new Da(`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 Da(`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 Da(`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):UY;return{baseUrl:t.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}function sd(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:WY},{role:"user",content:r}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function KY(){let e=LY(new URL(".",import.meta.url)),t=import.meta.url.endsWith(".ts"),r=MY.join(e,t?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=td({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 $Y(e,t,r){let n=e.workerToolGrant,o=n?Na(n.capabilities):void 0;return{provider:co,model:r,request:sd(t,r,e.prompt,o),timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function id(e,t,r){let n=KY(),o=wA(e.stdoutPath,"a"),s=wA(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=st(n.command,n.argsPrefix,e.workerDir),c=BY(a,l,ee({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:i,env:bt(process.env,{reviewWorker:e.reviewWorker})}));if(RA(o),RA(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 co,UY,Da,WY,SA,Ma=p(()=>{"use strict";hr();ro();D();Gh();qt();od();co="openai-compatible",UY=600*1e3;Da=class extends Error{};WY="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.";SA={name:co,get defaultModel(){return Jh()},preflightModel(e){return Ph(e,Jh())},start(e){let t=Ph(e.model,Jh());if(!t.ok)throw new Error(`openai-compatible provider model preflight failed: ${t.note}`);let r=t.model,n=FY(process.env),o=$Y(e,n,r);return id(e,o,r)}}});import HY from"node:path";function vt(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function Ds(e){let t=HY.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return t==="agy"||t==="antigravity"?"antigravity":"gemini"}function _A(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function xA(e){let t=e.trim().toLowerCase();return!t||jY.has(t)?[]:["--model",e.trim()]}function ad(e,t){return[...xA(t),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function CA(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 jY,uo=p(()=>{"use strict";lt();jY=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"])});import{closeSync as EA,openSync as AA}from"node:fs";import{spawn as VY}from"node:child_process";function Ge(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function GY(e,t){return bt({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...t?{GEMINI_CLI_HOME:t}:{}},{reviewWorker:e})}var zt,PA,La=p(()=>{"use strict";hr();ro();D();Fe();uo();qt();zt="gemini";PA={name:zt,get defaultModel(){return Ge()},preflightModel(e){return As(e,Ge())},start(e){let t=As(e.model,Ge());if(!t.ok)throw new Error(`gemini provider model preflight failed: ${t.note}`);let r=vt(),n=Ds(r),o=n==="antigravity"?_A(t):t.model,s=n==="antigravity"?ad(e,o):CA(e,o),[i,a]=ie(r,s),l=AA(e.stdoutPath,"a"),c=AA(e.stderrPath,"a"),u=["ignore",l,c],[d,f]=st(i,a,e.workerDir),m=VY(d,f,ee({cwd:e.worktreePath,detached:Se(),shell:!1,stdio:u,env:GY(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(EA(l),EA(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 qY(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function YY(e=process.env){let t=qY(e);if(!t)throw new Ba('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()||IA,n;try{n=new URL(r)}catch{throw new Ba(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${IA}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Ba(`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):JY;return{baseUrl:r.replace(/\/+$/,""),apiKey:t,timeoutMs:s}}function zY(e,t,r){let n=e.workerToolGrant,o=n?Na(n.capabilities):void 0,s=sd(t,r,e.prompt,o);return{provider:Xt,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var Xt,IA,JY,Ba,OA,qh=p(()=>{"use strict";Ma();od();qt();La();Xt="gemini-api",IA="https://generativelanguage.googleapis.com/v1beta/openai",JY=600*1e3,Ba=class extends Error{};OA={name:Xt,get defaultModel(){return Ge()},preflightModel(e){return As(e,Ge())},start(e){let t=As(e.model,Ge());if(!t.ok)throw new Error(`gemini-api provider model preflight failed: ${t.note}`);let r=t.model,n=YY(process.env),o=zY(e,n,r);return id(e,o,r)}}});function Ze(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function QY(e){if(!e)return;let t=Ze(e,"workerModelOverride")||Ze(e,"modelOverride");return t||`${Ze(e,"title")}
|
|
149
|
+
${Ze(e,"description")}
|
|
150
|
+
${Ze(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function TA(e){return e.toLowerCase()}function DA(e,t=A(),r=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(t.defaultModel?.trim()||r.KYNVER_DEFAULT_MODEL?.trim()):!1}function zh(e=A()){let t=e.defaultModel?.trim();if(t)return t;let r=process.env.KYNVER_DEFAULT_MODEL?.trim();return r||XY}function ld(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-")?zt:"cursor"}function ZY(e,t){let r=e.trim().toLowerCase(),n=t?.trim();return r==="cursor"?{model:Wu,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="claude"||r==="anthropic"?{model:Ke,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini"||r==="google"?{model:Ge(),provider:zt,rule:n&&n!==zt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini-api"||r==="gemini_api"||r==="google-api"?{model:Ge(),provider:Xt,rule:n&&n!==Xt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function NA(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 MA(e,t,r){return ez.has(e)?Yr:t.includes("review")||/^review[\s:]/.test(r)||r.includes("critique")?Yr:Ke}function tz(e){let t=TA(Ze(e,"executorRef")),r=Ze(e,"title").toLowerCase(),n=Ze(e,"priority")||"normal",o=TA(Ze(e,"roleLane"));if(t.includes("provider:claude")||t.startsWith("claude:")){let i=MA(o,t,r);return{provider:"claude",model:i,rule:i===Yr?"factory:claude_review":"factory:claude_implementation"}}if(t.includes("provider:codex")||t.startsWith("codex:"))return{provider:"codex",model:Tr,rule:"lane:codex_orchestration"};if(t.includes("provider:chatgpt")||t.startsWith("chatgpt:")||t.includes("provider:gpt")||t.startsWith("gpt:")){let i=yt(Ze(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Tr},rule:"lane:codex_orchestration"}}if(t.includes("provider:openai")||t.startsWith("openai-compatible:")){let i=yt(Ze(e,"executorRef"));return{provider:co,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(t.includes("provider:gemini-api")||t.startsWith("gemini-api:")){let i=yt(Ze(e,"executorRef"));return{provider:Xt,...i?.model?{model:i.model}:{model:Ge()},rule:"lane:gemini_api"}}if(t.includes("provider:gemini")||t.startsWith("gemini:")){let i=yt(Ze(e,"executorRef"));return{provider:zt,...i?.model?{model:i.model}:{model:Ge()},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:Tr,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 NA(t,r)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(NA(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=zh();return{model:s,provider:ld(s),rule:"default:global"}}function rz(e){return e?yt(Ze(e,"executorRef")):null}function nz(e){switch(Ye(e)){case zt:case Xt:return Ge();case"claude":return Ke;case"codex":return Tr;case"cursor":return Wu;default:return}}function BA(e,t,r){let n=Ye(t);return n===e.provider&&e.rule===r?e:{...e,provider:n,model:nz(n)??e.model,rule:r}}function oz(e,t){let r=t?.trim();return!r||e.rule.startsWith("explicit:")&&e.rule!==Yh?e:BA(e,r,Yh)}function sz(e,t){if(t.explicitProvider?.trim()||Sh(t.task))return e;let r=t.configuredProvider?.trim();if(!r)return e;let n=Ye(r);return n===Ir||n===e.provider?e:BA(e,n,LA)}function cd(e){let t,r=rz(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=ZY(l,e.explicitProvider);c?t=c:t={model:l,provider:e.explicitProvider?.trim()||ld(l),rule:"explicit:cli",requestedModel:l}}else if(n)t={model:n,provider:o||ld(n),rule:r?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Fu(e.task)){let l=QY(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=MA(d,f,m),u=c===Yr?"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=tz(e.task);t={...l,requestedModel:l.model}}else{let l=zh();t={model:l,provider:e.explicitProvider?.trim()||ld(l),rule:"default:global",requestedModel:l}}t=oz(t,e.explicitProvider),t=sz(t,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&Ye(e.configuredProvider)!==Ir&&t.rule==="config:worker_provider",i=EE({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===Yh||i.rule===LA||Pr(i.provider)&&(e.explicitProviderIsOperatorOverride||Fu(e.task))||i.provider===co||i.provider===zt||i.provider===Xt||i.provider==="codex")return i;let a=nA({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??Tr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function UA(e,t,r){return e||t||r||zh()||Ke}var XY,Wu,ez,Yh,LA,Ku=p(()=>{"use strict";$();Uu();oA();Kh();ao();Ma();La();qh();eo();XY=Ke,Wu="composer-2.5";ez=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);Yh="explicit:cli_provider",LA="config:worker_provider"});function iz(e){let t=e?.executorRef;return typeof t=="string"?t.trim():""}function FA(e){return e?.trim()||void 0}function WA(e){let t=iz(e.task),r=yt(t),n=e.explicitProvider?.trim().toLowerCase(),o=FA(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=FA(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||t&&CE(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&&!Pr(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 KA=p(()=>{"use strict";Uu();eo()});function $A(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function HA(){return{maxTaskAttempts:$A(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(bs("harness.maxTaskAttempts",4))),dispatchCooldownMs:$A(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(bs("harness.dispatchCooldownMs",5e3)))}}var jA=p(()=>{"use strict";an()});function Qh(e){return e?.trim()?e.trim():null}function az(e){let t=Qh(e);if(!t?.startsWith(Xh))return null;let r=t.slice(Xh.length),n=r.indexOf(VA);return n>=0?r.slice(0,n).trim()||null:r.trim()||null}function Ua(e,t){let r=e.trim(),n=t.trim();return`${Xh}${r}${VA}${n}`}function lz(e,t){let r=Qh(t);return r?az(e)===r:!1}function ud(e){let t=Qh(e.workerLeaseOwner);return t&&lz(t,e.runId)?t:Ua(e.runId,e.runnerId)}var Xh,VA,Fa=p(()=>{"use strict";Xh="kynver-harness:",VA="@runner:"});async function dd(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 Zh=p(()=>{"use strict";$();Ve()});async function pd(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 dd({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)&&re(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}var ey=p(()=>{"use strict";Zh();Q()});import cz from"node:path";function GA(e,t){return K(cz.join(q(e),"workers",B(t),"worker.json"),void 0)}async function JA(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)):ry,a=Be({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(r.workers||{})){let f=GA(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!oe(f.pid)){u.push(d);continue}if(le(f).status==="done"){u.push(d);continue}let g=ud({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await pd({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 qA(e,t){let r=se(e);for(let n of Object.keys(r.workers||{})){let o=GA(e,n);if(!(!o||o.taskId!==t||!oe(o.pid)||le(o).status==="done"))return!0}return!1}var ty=p(()=>{"use strict";$();Ve();Q();Pe();D();fd();Fa();xr();ey()});import uz from"node:path";function YA(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function zA(e,t,r,n){return YA(t)||(t.noRestartAt=new Date().toISOString(),t.noRestartSource=r,n&&(t.noRestartReason=n),t.steerRestartRequired=!1,re(e,t)),t}function md(e,t={}){let r=t.isAlive??oe,n=t.kill??he,o=t.sleep??pc;return!e||!r(e)?null:(n(e,"SIGTERM"),o(1e3),r(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function ny(e,t,r,n,o={}){zA(e,t,r,n);let s=md(t.pid,o),i=md(t.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function XA(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=K(uz.join(q(o.id),"workers",B(i),"worker.json"),void 0);!a||a.taskId!==t||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(md(a.completionSidecarPid,r),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),re(o.id,a),s.push(i))}return s}function dz(e=process.env){let t=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function QA(e,t,r,n={}){if(!dz(n.env))throw ny(e,t,"watcher_attach_failed",r,n.deps),t.status="failed",re(e,t),new Error(`watcher_attach_failed: ${r}; worker stopped instead of running unwatched`)}var Ms=p(()=>{"use strict";Q();D()});function eP(e){let t=e.baseCommit?.trim()??"",r=[];t&&t!==ZA&&r.push({ref:t,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==ZA&&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 ZA,tP=p(()=>{"use strict";ZA="unknown"});function gd(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function rP(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:gd(e)}function mz(e){let t=(e.title??"").trim().toLowerCase();if(t.startsWith("fix:")||t.startsWith("repair:"))return!0;let r=(e.executorRef??"").toLowerCase();return!!(r.startsWith(fz)||r.includes("repair")||r.includes("unblock"))}function gz(e){let t={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return t;let r=e.match(pz);if(!r?.[1])return t;try{let n=JSON.parse(r[1]),o=gd(String(n.targetPrUrl??n.target_pr_url??"")),s=gd(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?rP(o):null,targetPrBranch:s}}catch{return t}}function nP(e){if(!mz(e))return null;let t=gz(e.description),r=e.prUrl?rP(e.prUrl):null,n=t.targetPrUrl??r;return n?{targetPrUrl:n,targetPrBranch:t.targetPrBranch??gd(e.branch)}:null}function oP(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 pz,fz,oy=p(()=>{"use strict";pz=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,fz="next-action-fix:"});var sP=p(()=>{"use strict"});function iP(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=[...pa(`worker.prompt.progress.${n}`).split(`
|
|
151
|
+
`),o],i=pa(`worker.prompt.merge_gate.${n}`).split(`
|
|
152
|
+
`),a=pa(`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.",...pa("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?[...oP({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
155
|
+
`)}var aP=p(()=>{"use strict";oy();an();sP()});function cP(e){if(lP)return lP;let t=e?.trim();if(t){let o=hd[Ye(t)];if(!o)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(hd).join(", ")}`);return o}let r=AE(A().workerProvider),n=hd[r];if(!n)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(hd).join(", ")}`);return n}var hd,lP,uP=p(()=>{"use strict";$();eo();Kh();ao();Is();La();qh();Ma();hd={claude:pA,codex:vA,cursor:qE,[zt]:PA,[Xt]:OA,[co]:SA},lP=null});function dP(e){return!!e.completionReportedAt?.trim()}function yd(e,t,r){e.completionReportedAt=r.completionReportedAt,e.completionOutcome=r.completionOutcome,r.completionResponse!==void 0&&(e.completionResponse=r.completionResponse),re(t,e)}var sy=p(()=>{"use strict";Q()});function hz(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function iy(e){return!!(hz(e.completionBlocker)||e.completionOutcome==="rejected")}function Wa(e){return dP(e)&&!iy(e)}var kd=p(()=>{"use strict";sy()});function ay(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ka(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function fP(e){let t=ay(e);if(!t)return{routeOutcome:null,taskAdvanced:!1,detail:null};let r=Ka(t.outcome),n=Ka(t.detail)??Ka(t.error),o=ay(t.task),s=ay(t.closedTask),i=o?Ka(o.status):null,a=s?Ka(s.status):null,c=r==="skipped_terminal_task"&&(i!==null&&pP.has(i)||a!==null&&pP.has(a))||r!==null&&yz.has(r)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:r,taskAdvanced:c,detail:n}}function mP(e){return e.taskAdvanced}var yz,pP,gP=p(()=>{"use strict";yz=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),pP=new Set(["done","failed","cancelled"])});var hP=p(()=>{"use strict"});function Rz(e){if(!e)return null;let t=e.trim().toLowerCase();return t.length?t:null}function ly(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function wz(e,t){return e.startsWith("factory:")?e.includes("lb")||ly(t):!1}function vd(e){let t=(e.executorRef??"").toLowerCase(),r=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${r}
|
|
156
|
+
${n}`,s=Rz(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(kz)||t===bz||t.startsWith("daemon-review:")||s&&bd.has(s)&&(t.includes("evidence")||t.includes("validate")||t.includes("review")||wz(t,o)||ly(o))||t.startsWith(vz)&&e.parentTaskId&&s&&bd.has(s)||e.planId&&!e.parentTaskId&&s&&bd.has(s)&&ly(o)||r.includes("expert pr review")||e.parentTaskId&&(r.startsWith("review:")||r.includes("review required")||r.includes("runtime review"))&&s&&bd.has(s))}var kz,bz,vz,bd,cy=p(()=>{"use strict";kz="expert-lane-pr-review:",bz="plan-review-task",vz="scheduledjob:",bd=new Set(["lorentz","dalton","rhea","sentinel"])});function kP(e){return!!(e&&_z.test(e))}function Je(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function bP(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Je(e.head)}function vP(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 xz(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 Cz(e,t){if(t.changedFiles.length>0)return!1;let r=Je(e.personaSlug)?.toLowerCase();if(r&&Sz.has(r))return!0;let n=Je(e.routingRule)??"";return!!(n&&yP.test(n))}function Ez(e,t){if(e.changedFiles.length>0)return!0;let r=Je(t?.baseRef);if(r&&t?.exec&&t.worktreePath){let n=xz(t.worktreePath,r,t.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(Je(e.headCommit)||bP(e.gitAncestry))}function RP(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(vd({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&&yP.test(t))return{required:!1,reason:"review_lane"};let r=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(Cz(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 Ez(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function wP(e,t){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:Je(t?.headCommit)??bP(e.gitAncestry),prUrl:Je(t?.prUrl)??null}}var yP,Sz,_z,uy=p(()=>{"use strict";cy();Du();yP=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,Sz=new Set(gE()),_z=/no commits between/i});function _P(e){let t=e.trim();if(!t)return null;let r=t.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(r)return SP(r[1]);let n=t.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return SP(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 SP(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 xP=p(()=>{"use strict"});import{spawnSync as Az}from"node:child_process";function Pz(e,t,r){try{let n=Az(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 Iz(e){return e.split(`
|
|
157
|
+
`).map(t=>t.trim()).find(Boolean)??""}function CP(e,t){let r=t.git(e,["remote","get-url","origin"]);return r.status!==0?null:_P(r.stdout)}function po(e,t){let r=t.git(e,["rev-parse","HEAD"]);return r.status!==0?null:r.stdout.trim()||null}function Rd(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 $a(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=po(t,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function EP(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 AP(e){let t=Rd(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=Oz(r.stdout)??Rd(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 Oz(e){let r=Iz(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return r?r[0]:null}var wd,Sd=p(()=>{"use strict";xP();_e();wd={git:(e,t)=>te(e,t),gh:(e,t)=>Pz("gh",e,t)}});function PP(e){return`t-${B(e)}-a`}function IP(e,t){let r=PP(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 Ha(e){return e.trim().toLowerCase()}function OP(e,t){if(!e.length)return null;if(t){let r=Ha(t),n=e.find(o=>Ha(o.url)===r);if(n)return n}return[...e].sort((r,n)=>n.number-r.number)[0]??null}function TP(e,t){let r=Ha(t);return e.filter(n=>Ha(n.url)!==r).map(n=>n.url)}function NP(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 Tz(e){let t=new Set,r=[];for(let n of e){let o=Ha(n.url);t.has(o)||(t.add(o),r.push(n))}return r}function Nz(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?[]:NP(o.stdout).filter(s=>IP(s,r))}function Dz(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=PP(r);return NP(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||IP(i,r))}function dy(e,t,r,n){let o=r.trim();if(!o)return[];let s=Nz(e,t,o,n),i=Dz(e,t,o,n);return Tz([...s,...i])}var _d=p(()=>{"use strict";D()});function Mz(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 py(e){let t=TP(e.rows,e.canonicalPrUrl),r=[],n=[];for(let o of t){let s=Mz(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 fy=p(()=>{"use strict";_d()});function DP(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 MP=p(()=>{"use strict"});function Lz(e){return e.gh(process.cwd(),["--version"]).status===0}function Bz(e,t){return`AgentOS harness: ${e} (${t})`}function Uz(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 gy(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function Fz(e){return gy(e.prUrlHint)??vP(e.status.finalResult)??gy(e.worker.taskPrUrl)??null}function Wz(e){let{snapshot:t,canonical:r,workerName:n,exec:o}=e,s=!1,i=!1,a=t.headCommit??po(t.worktreePath,o)??void 0;if(t.changedFiles.length>0){let l=$a({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=EP({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=po(t.worktreePath,o)??a}return{ok:!0,prUrl:r.url,headCommit:a,committed:s,pushed:i}}function my(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??po(e.snapshot.worktreePath,e.exec)??void 0};let t=$a({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 hy(e,t=wd){let r=Fz(e),n=wP(e.status,{prUrl:r,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!RP({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?my({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t}):{ok:!0};if(r)return my({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:t});if(!Lz(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=CP(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,w=!1,S=n.headCommit??po(n.worktreePath,t)??void 0;if(n.changedFiles.length>0){let _=$a({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:t});if(!_.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${_.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};v=_.committed,w=_.pushed,S=_.headCommit??S}else{let _=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(_.status!==0&&!/already up to date/i.test(_.stderr||_.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${_.stderr||_.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};w=_.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:v,pushed:w}}let l=gy(e.worker.taskId),c=[];if(l){c=dy(n.worktreePath,i,l,t);let v=OP(c);if(v){let w=Wz({snapshot:n,canonical:v,workerName:e.worker.name,exec:t});return w.ok&&w.prUrl&&py({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:w.prUrl,exec:t}),w}}let u=Rd(n.worktreePath,i,n.branch,t);if(u)return my({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=$a({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??po(n.worktreePath,t)??void 0;let y=g?DP(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=AP({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:b.replace(/^origin\//,""),title:Bz(e.worker.name,e.worker.runId),body:Uz(e.worker.taskId,e.worker.name,e.worker.runId),exec:t});if(!k.ok||!k.prUrl){if(kP(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 w=[...c.length>0?c:dy(n.worktreePath,i,l,t),{url:k.prUrl,number:Number.parseInt(k.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];py({worktreePath:n.worktreePath,repo:i,rows:w,canonicalPrUrl:k.prUrl,exec:t})}return{ok:!0,prUrl:k.prUrl,headCommit:g??void 0,committed:f,pushed:m,created:k.created}}var LP=p(()=>{"use strict";uy();_d();fy();Sd();MP()});var BP=p(()=>{"use strict";hP();uy();Sd();_d();fy();LP()});import Kz from"node:path";function ky(e){clearInterval(yy.get(e)),yy.delete(e)}function by(e,t){if(ky(e),!ja.has(e))return;let r=setInterval(()=>{(K(Kz.join(e,"worker.json"),null)?.completionReportedAt||!oe(t))&&Ls(e)},1e3);r.unref(),yy.set(e,r)}function vy(e,t){ky(e);let r=ja.get(e);r&&r.close(),ja.set(e,t)}async function cn(e){ky(e);let t=ja.get(e);return t?(ja.delete(e),await t.close(),!0):!1}function Ls(e){cn(e).catch(()=>{})}var ja,yy,Ry=p(()=>{"use strict";D();ja=new Map,yy=new Map});import{appendFileSync as $z,existsSync as FP,mkdirSync as WP,readFileSync as Hz,rmSync as UP,writeFileSync as jz}from"node:fs";import Dr from"node:path";function $P(e){return Dr.join(e,KP)}function Vz(e){return ue(e,["ls-files","--error-unmatch",KP.split(Dr.sep).join("/")],{allowFailure:!0}).trim().length>0}function Gz(e){let t=ue(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Dr.isAbsolute(t)?t:Dr.join(e,t),n=Dr.join(r,"info","exclude"),o=".cursor/mcp.json";try{WP(Dr.dirname(n),{recursive:!0});let s=FP(n)?Hz(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;$z(n,`${s.endsWith(`
|
|
159
159
|
`)||!s?"":`
|
|
160
160
|
`}${o}
|
|
161
|
-
`)}catch{}}function
|
|
162
|
-
`,{mode:384}),
|
|
163
|
-
`)}function
|
|
161
|
+
`)}catch{}}function HP(e){if(Vz(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=$P(e.worktreePath);WP(Dr.dirname(t),{recursive:!0});let r={mcpServers:{[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Bt]:e.brokerSocketPath}}}};return jz(t,`${JSON.stringify(r,null,2)}
|
|
162
|
+
`,{mode:384}),Gz(e.worktreePath),{ok:!0,configPath:t}}function xd(e){let t=$P(e);if(!FP(t))return!1;try{UP(t,{force:!0});let r=Dr.dirname(t);return UP(r,{recursive:!1}),!0}catch{return!0}}var KP,wy=p(()=>{"use strict";_e();Or();lt();KP=Dr.join(".cursor","mcp.json")});import{copyFileSync as Jz,existsSync as Cd,mkdirSync as qz,readFileSync as Yz,rmSync as zz,symlinkSync as Xz,writeFileSync as Qz}from"node:fs";import{spawnSync as Zz}from"node:child_process";import{homedir as e6}from"node:os";import un from"node:path";function jP(e){return un.join(e,t6)}function r6(e=process.env){let t=e.CODEX_HOME?.trim();if(t)return un.resolve(t);let r=e6();for(let n of[un.join(r,".codex"),un.join(r,".config","codex")])if(Cd(n))return n;return null}function n6(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]`,`${Bt} = ${JSON.stringify(e)}`,""].join(`
|
|
163
|
+
`)}function o6(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${be}"?\s*[\].]`,"m").test(e)}function VP(e){let t=r6(e.env??process.env),r=t?un.join(t,"config.toml"):null,n=r&&Cd(r)?Yz(r,"utf8"):"";if(n&&o6(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=jP(e.workerDir);qz(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
164
164
|
`)?"":`
|
|
165
|
-
`;return
|
|
165
|
+
`;return Qz(un.join(o,"config.toml"),`${n}${s}${n6(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:s6(t,o)}}function s6(e,t){let r=e?un.join(e,"auth.json"):null;if(!r||!Cd(r))return"none";let n=un.join(t,"auth.json");try{return Xz(r,n,"file"),"symlink"}catch{try{return Jz(r,n),"copy"}catch{return"none"}}}function Va(e){let t=jP(e);if(!Cd(t))return!1;try{return zz(t,{recursive:!0,force:!0}),!0}catch{return!1}}function GP(e,t,r=1e4){try{let[n,o]=ie(t,["--version"]),s=Zz(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 t6,Sy=p(()=>{"use strict";Fe();Or();lt();t6="codex-home"});import{appendFileSync as i6,existsSync as _y,mkdirSync as qP,readFileSync as YP,rmSync as JP,writeFileSync as a6}from"node:fs";import Mr from"node:path";function XP(e){return Mr.join(e,zP)}function l6(e){return ue(e,["ls-files","--error-unmatch",zP.split(Mr.sep).join("/")],{allowFailure:!0}).trim().length>0}function c6(e){if(!_y(e))return{};try{let t=JSON.parse(YP(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 u6(e){let t=ue(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Mr.isAbsolute(t)?t:Mr.join(e,t),n=Mr.join(r,"info","exclude"),o=".agents/mcp_config.json";try{qP(Mr.dirname(n),{recursive:!0});let s=_y(n)?YP(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;i6(n,`${s.endsWith(`
|
|
166
166
|
`)||!s?"":`
|
|
167
167
|
`}${o}
|
|
168
|
-
`)}catch{}}function
|
|
169
|
-
`,{mode:384})
|
|
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(`
|
|
168
|
+
`)}catch{}}function QP(e){if(l6(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=XP(e.worktreePath),r=c6(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`};qP(Mr.dirname(t),{recursive:!0});let n={mcpServers:{...r,[be]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Bt]:e.brokerSocketPath}}}};return a6(t,`${JSON.stringify(n,null,2)}
|
|
169
|
+
`,{mode:384}),u6(e.worktreePath),{ok:!0,configPath:t}}function Ed(e){let t=XP(e);if(!_y(t))return!1;try{return JP(t,{force:!0}),JP(Mr.dirname(t),{recursive:!1}),!0}catch{return!0}}var zP,xy=p(()=>{"use strict";_e();Or();lt();zP=Mr.join(".agents","mcp_config.json")});import{copyFileSync as d6,existsSync as Cy,mkdirSync as p6,readFileSync as f6,rmSync as m6,symlinkSync as g6,writeFileSync as h6}from"node:fs";import{homedir as y6}from"node:os";import Lr from"node:path";function ZP(e){return Lr.join(e,k6)}function b6(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||y6()}function v6(e=process.env){let t=e.GEMINI_CLI_HOME?.trim();return t?Lr.join(Lr.resolve(t),".gemini"):Lr.join(b6(e),".gemini")}function R6(e){if(!Cy(e))return{};try{let t=JSON.parse(f6(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function w6(e){let t=e.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?!1:be in t}function S6(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function _6(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Bt]:e},trust:!0}}function eI(e){let t=e.env??process.env,r=v6(t),n=R6(Lr.join(r,"settings.json"));if(w6(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=ZP(e.workerDir),s=Lr.join(o,".gemini");p6(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...S6(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[be]:_6(e.brokerSocketPath)}};return h6(Lr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
170
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:x6(r,s)}}function x6(e,t){let r=["oauth_creds.json","google_accounts.json"],n="none";for(let o of r){let s=Lr.join(e,o);if(!Cy(s))continue;let i=Lr.join(t,o);try{g6(s,i,"file"),n==="none"&&(n="symlink")}catch{try{d6(s,i),n="copy"}catch{}}}return n}function Ad(e){let t=ZP(e);if(!Cy(t))return!1;try{return m6(t,{recursive:!0,force:!0}),!0}catch{return!1}}var k6,Ey=p(()=>{"use strict";Or();lt();k6="gemini-home"});import C6 from"node:path";function tI(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function A6(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 dn(e){let t=e.finalResult??null,r=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:A6(t);return{finalResult:t??r??"completed",summary:r}}function Pd(e,t,r){if(tI(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=dn(t),s=r?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),re(e.runId,e),e.workerDir&&(Ls(e.workerDir),Xu(e.workerDir),Va(e.workerDir),Ad(e.workerDir)),e.worktreePath&&(xd(e.worktreePath),Ed(e.worktreePath))}function P6(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 rI(e,t,r={}){let n=P6(t);if(n.size===0)return[];let o=se(e),s=[];for(let i of Object.keys(o.workers||{})){let a=K(C6.join(q(o.id),"workers",B(i),"worker.json"),void 0);if(!a?.taskId||tI(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!E6.has(l))continue;let c=le(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=ny(o.id,a,"board_task_cancelled","board task cancelled",r);u=!!(d.workerSignal||d.sidecarSignal)}Pd(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}var E6,Id=p(()=>{"use strict";Q();Pe();D();lt();Ry();wy();Sy();xy();Ey();Ms();E6=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"])});function Od(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 I6(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 O6(e){let t=Gi(e);return t?{summary:t.reason,handoffState:"exit_failure",blocked:t.blocked}:null}function T6(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 Td(e){let{worker:t,status:r}=e;if(Od(r.finalResult)){let u=Ne(t.heartbeatPath),d=mr(u),f=Od(d)&&JSON.stringify(d)===JSON.stringify(r.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:r.finalResult,source:f,snapshot:dn(r)}}if(r.alive)return null;let n=Bn(t.stdoutPath);if(Od(n.finalResult)){let u={...r,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:dn(u)}}let o=Ne(t.heartbeatPath),s=mr(o);if(Od(s)){let u={...r,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:dn(u)}}let i=O6(r.error??n.error);if(i){let u={...r,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:dn(u)}}let a=I6(o);if(a){let u={...r,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:dn(u)}}let l=T6({status:r,heartbeat:o}),c={...r,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:dn(c)}}function Nd(e,t){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=t.snapshot,e.completionHandoffSource=t.source,!0)}var Ay=p(()=>{"use strict";Ln();Lm();Id();Vi()});function Dd(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 nI(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 Py=p(()=>{"use strict"});function oI(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function sI(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function aI(e){let t=sI(e);if(!t)return[];let r=sI(t.worktreeHandoff),n=oI(r?.disposableArtifactsRemoved);return n.length?n:oI(t.disposableArtifactsRemoved)}function iI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function lI(e,t){let r=Dd(e);if(r.length===0)return!0;if(t.length===0)return!1;let n=new Set(t.map(o=>iI(o)));return r.every(o=>{let s=iI(nI(o));return n.has(s)})}var cI=p(()=>{"use strict";Py()});function Md(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function uI(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function N6(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 D6(e){let t=uI(e.disposableArtifactsRemoved),r=aI(e.finalResult);return[...new Set([...t,...r])]}function dI(e){let t=uI(e.changedFiles),r=Dd(t),n=D6(e),o=r.length===0||lI(t,n);return Md(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`}:Md(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`}:Md(e.artifactBundlePath)||Md(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}:N6(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 pI=p(()=>{"use strict";cI();Py()});function Br(e=process.env){return Er(e).flags.dispatchReceipts}function Iy(e){return Br(e)!=="off"}function Oy(e,t){return`dispatch:${e}:${t.taskId}:${t.leaseToken}`}function Ja(e,t,r){if(!Iy())return;let n=de();if(n)try{n.recordOperationReceipt({idempotencyKey:Oy(e,t),operation:`dispatch-${e}`,resultJson:r===void 0?null:JSON.stringify(r)})}catch{ct.storeFailures+=1}}function mI(e){Ja("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function Ld(e){Ja("spawned",e)}function Bs(e,t){Ja("released",e,{reasonClass:t})}function gI(e){Ja("completion-sent",e)}function Ty(e,t){Ja("completion-acked",e,{outcome:t})}function hI(e){if(!Iy())return!1;let t=de();if(!t)return!1;try{let r=t.getOperationReceipt(Oy("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 ct.completionReplaysObserved+=1,!0}}catch{ct.storeFailures+=1}return!1}function Ny(e){let t=String(e??"").split(":")[0]?.trim()??"";return t.length>0?t.slice(0,64):"unknown"}function yI(e){if(Br()!=="enforce")return!1;let t=de();if(!t)return!1;try{let r=t.getOperationReceipt(Oy("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"?(ct.completionReplaysShortCircuited+=1,!0):!1}catch{return ct.storeFailures+=1,!1}}function kI(e,t){if(Br()!=="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{ct.storeFailures+=1}}function bI(e,t){if(Br()!=="enforce")return[];let r=de();if(!r)return[];let n=t?.nowMs??Date.now(),o=t?.windowMs??M6;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 ct.storeFailures+=1,[]}}function Ga(e){let t=e.split(":")[0]??"",r=Number(t);return Number.isInteger(r)&&r>=0?r:null}function vI(e){let t={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Iy())return t;let r=de();if(!r)return t;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??L6;try{let s=r.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-fI).toISOString(),limit:U6}),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>=B6&&a.length+5<=F6&&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=Ga(u.slice(g.length+1));if((g?r.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${g}:`,limit:10}):[]).some(v=>{if(h===null)return!0;let w=v.idempotencyKey.slice(`dispatch:completion-acked:${g}:`.length),S=Ga(w);return S===null||S>=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(Br()==="enforce"){let c=r.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=fI}).map(u=>u.idempotencyKey);if(c.length>0){let u=r.deleteOperationReceiptsByKeys(c);l+=u,ct.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return ct.storeFailures+=1,t}}function RI(){return{"dispatchReceipts.storeFailures":ct.storeFailures,"dispatchReceipts.completionReplaysObserved":ct.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":ct.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":ct.agedReceiptsPruned}}var ct,M6,L6,fI,B6,U6,F6,Us=p(()=>{"use strict";ln();Rs();ct={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};M6=600*1e3;L6=900*1e3,fI=10080*60*1e3,B6=1440*60*1e3,U6=500,F6=300});function wI(){My=!1}function Ur(e=process.env){return Er(e).flags.admission}function Bd(e,t){return`${Dy}${e}:${t}`}function SI(e,t){if(Ur()==="off")return;let r=de();if(r)try{r.tryReserveAdmission(Bd(e,t),Ly,Fs)}catch{pn.storeFailures+=1}}function qa(e,t){if(Ur()==="off")return;let r=de();if(r)try{r.releaseAdmission(Bd(e,t),Ly)}catch{pn.storeFailures+=1}}function _I(e){let t={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Ur()==="off")return t;let r=de();if(!r)return t;try{let n=new Set(e.liveWorkers.map(f=>Bd(f.runId,f.workerName))),o=r.listAdmissionReservations({keyPrefix:Dy,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=!My;My=!0,!l&&i>0&&(pn.missingForLive+=i);let c=0;for(let f of e.liveWorkers)r.tryReserveAdmission(Bd(f.runId,f.workerName),Ly,Fs),c+=1;let u=0;for(let f of o)n.has(f.key)||r.releaseAdmission(f.key,f.owner)&&(u+=1,pn.deadSlotsReleased+=1);return{liveReservations:r.listAdmissionReservations({keyPrefix:Dy,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return pn.storeFailures+=1,t}}function xI(){return{"admission.storeFailures":pn.storeFailures,"admission.missingForLive":pn.missingForLive,"admission.deadSlotsReleased":pn.deadSlotsReleased}}var Fs,Ly,Dy,pn,My,fo=p(()=>{"use strict";ln();Rs();Fs=900*1e3,Ly="admission-shadow",Dy="worker-slot:",pn={storeFailures:0,missingForLive:0,deadSlotsReleased:0},My=!1});function CI(e){return`${By}${e}`}function Fd(e,t){return`${e}:${t}`}function EI(e){if(Ur()!=="enforce")return{admitted:!0};let t=de();if(!t)return{admitted:!0};let r=Math.max(0,Math.min(Ud,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=r)return fn.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Fd(e.runId,e.workerName);for(let o=0;o<r;o+=1)if(t.tryReserveAdmission(CI(o),n,Fs).acquired)return{admitted:!0,slot:o};return fn.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return fn.enforceStoreFailures+=1,{admitted:!0}}}function mn(e,t){if(Ur()==="off")return;let r=de();if(r)try{let n=Fd(e,t),o=r.listAdmissionReservations({keyPrefix:By,limit:Ud});for(let s of o)s.owner===n&&r.releaseAdmission(s.key,n)}catch{fn.enforceStoreFailures+=1}}function AI(e){let t={refreshed:0,deadReleased:0,adopted:0};if(Ur()!=="enforce")return t;let r=de();if(!r)return t;try{let n=new Set(e.liveWorkers.map(c=>Fd(c.runId,c.workerName))),o=r.listAdmissionReservations({keyPrefix:By,limit:Ud}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(r.tryReserveAdmission(c.key,c.owner,Fs),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=Fd(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Ud;d+=1)if(r.tryReserveAdmission(CI(d),u,Fs).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return fn.enforceStoreFailures+=1,t}}function PI(){return{"admission.enforceStoreFailures":fn.enforceStoreFailures,"admission.refusedSlotsExhausted":fn.admissionsRefusedSlots,"admission.refusedDiskBackstop":fn.admissionsRefusedDiskBackstop}}var By,Ud,fn,Ws=p(()=>{"use strict";ln();fo();By="worker-slot-n:",Ud=64;fn={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0}});import W6 from"node:path";function Uy(e){let t=e.trim();if(!K6.test(t))throw new Error(`invalid run id: ${e}`);return t}function H6(e){let t=e.trim();if(!$6.test(t))throw new Error(`invalid worker name: ${e}`);return t}function TI(e){return typeof e=="string"?e.trim():""}function Wd(e){let t=TI(e.run),r=TI(e.name);return(!t||II.has(t))&&pt(`missing --run RUN_ID (${OI})`),(!r||II.has(r))&&pt(`missing --name WORKER_NAME (${OI})`),{runId:Uy(t),workerName:H6(r)}}function NI(e){let t=W6.resolve(e);if(t.includes(".."))throw new Error("repo path must not contain .. segments");return t}var K6,$6,II,OI,Kd=p(()=>{"use strict";D();K6=/^[a-z0-9][a-z0-9._-]{0,127}$/i,$6=/^[a-z0-9][a-z0-9._-]{0,63}$/i,II=new Set(["undefined","null"]),OI="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME"});import{existsSync as j6,mkdirSync as V6,readFileSync as G6,writeFileSync as J6}from"node:fs";import{homedir as q6}from"node:os";import DI from"node:path";function Z6(e){let t=e?.trim();return!!(t&&Y6.test(t))}function e4(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function Fy(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(Q6,Math.max(X6,e)):z6}function MI(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||DI.join(q6(),".kynver","provider-quota-cooldowns.json")}function Ya(e){return(e??"").trim().toLowerCase()}function Wy(){let e=MI();if(!j6(e))return{};try{let t=JSON.parse(G6(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[Ya(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return r}catch{return{}}}function Ky(e){let t=MI();try{V6(DI.dirname(t),{recursive:!0}),J6(t,`${JSON.stringify(e,null,2)}
|
|
171
|
+
`,"utf8")}catch{}}function t4(e,t,r=Date.now()){let n=Ya(e);if(!n)return;let o=Wy();o[n]={lastExhaustedAt:new Date(r).toISOString(),reason:t.trim().slice(0,500)},Ky(o),iC(n,Fy()*6e4)}function r4(e){let t=Ya(e);if(!t)return!1;aC(t);let r=Wy();return t in r?(delete r[t],Ky(r),!0):!1}function LI(e,t=Date.now()){if(!e4())return{ok:!0};let r=Ya(e);if(!r)return{ok:!0};let n=Wy(),o=n[r],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+Fy()*6e4>t),i=lC(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+Fy()*6e4;if(!Number.isFinite(a)||l<=t)return delete n[r],Ky(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 n4(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 BI(e){let t=Ya(e.provider);if(!t)return"none";let r=n4(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return r?Z6(r)?(t4(t,r,e.nowMs??Date.now()),"recorded"):r4(t)?"cleared":"none":"none"}var Y6,z6,X6,Q6,$y=p(()=>{"use strict";ga();Y6=/\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,z6=30,X6=5,Q6=240});function UI(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 FI=p(()=>{"use strict"});function $d(e){return typeof e=="string"&&o4.test(e)&&!s4.has(e)&&!e.startsWith("KYNVER_")}var o4,WI,KI,Fr,s4,za=p(()=>{"use strict";o4=/^[A-Z][A-Z0-9_]{1,63}$/,WI=/^sec_[0-9a-f]{20}$/,KI=/^sr_[0-9a-f]{24}$/,Fr={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minRedactChars:6},s4=new Set(["PATH","HOME","SHELL","USER","LOGNAME","NODE_OPTIONS","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH","PWD","TMPDIR"])});import{createCipheriv as hSe,createDecipheriv as i4,createECDH as a4,createHash as l4,hkdfSync as c4,randomBytes as ySe}from"node:crypto";function u4(e){for(let t of[e.agentOsId,e.requestId,e.name])if(!t||t.includes(`
|
|
172
|
+
`))throw new Ut("invalid envelope context");return["kynver-secret/v1",e.agentOsId,e.requestId,e.name].join(`
|
|
173
|
+
`)}function HI(e){return l4("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}function d4(e,t,r){return Buffer.from(c4("sha256",e,t,Buffer.from(r,"utf8"),32))}function Hd(e,t){if(typeof e!="string"||e.length>64*1024)throw new Ut;let r=Buffer.from(e,"base64");if(t!==void 0&&r.length!==t)throw new Ut;return r}function jI(e){if(!e||typeof e!="object")return null;let t=e;if(t.v!==1||t.alg!==$I)return null;for(let r of["epk","salt","iv","ct","kid"])if(typeof t[r]!="string"||t[r].length>64*1024)return null;return{v:1,alg:$I,epk:t.epk,salt:t.salt,iv:t.iv,ct:t.ct,kid:t.kid}}function VI(e,t,r){let n=u4(r);try{let o=a4("prime256v1");o.setPrivateKey(e);let s=o.computeSecret(Hd(t.epk,65)),i=d4(s,Hd(t.salt,16),n),a=Hd(t.iv,12),l=Hd(t.ct);if(l.length<17)throw new Ut;let c=i4("aes-256-gcm",i,a);c.setAAD(Buffer.from(n,"utf8")),c.setAuthTag(l.subarray(l.length-16));let u=Buffer.concat([c.update(l.subarray(0,l.length-16)),c.final()]);if(u.length===0||u.length>Fr.maxValueBytes)throw new Ut("The secret is empty or too long.");return u.toString("utf8")}catch(o){throw o instanceof Ut?o:new Ut}}var $I,Ut,Hy=p(()=>{"use strict";za();$I="ECDH-P256+HKDF-SHA256+A256GCM",Ut=class extends Error{constructor(t="The secret could not be opened on this computer."){super(t),this.name="SecretEnvelopeError"}}});import{createECDH as YI,randomBytes as p4}from"node:crypto";import{chmodSync as zI,existsSync as GI,mkdirSync as f4,readFileSync as m4,readdirSync as g4,renameSync as h4,writeFileSync as y4}from"node:fs";import{homedir as k4}from"node:os";import XI from"node:path";function Rt(){return XI.join(k4(),".kynver","secrets")}function Xa(e){f4(e,{recursive:!0,mode:448});try{zI(e,448)}catch{}}function Vy(e,t){let r=`${e}.${process.pid}.tmp`;y4(r,t,{mode:384});try{zI(r,384)}catch{}h4(r,e)}function qI(e){if(!e)return null;try{let t=JSON.parse(e);if(t.v===1&&typeof t.ecdh=="string"&&typeof t.vault=="string")return{v:1,ecdh:t.ecdh,vault:t.vault}}catch{}return null}function jd(e,t){let r=Buffer.from(e.ecdh,"base64"),n=Buffer.from(e.vault,"base64");if(r.length!==32||n.length!==32)throw new Error("secret store keys are corrupt");let o=YI("prime256v1");o.setPrivateKey(r);let s=o.getPublicKey();return{ecdhPrivateKey:r,publicKeyRaw:s,fingerprint:HI(s),vaultKey:n,keyStore:t}}function Vd(e={}){let t=e.root??Rt(),r=e.keychain??tn(),n=r.available?qI(r.read(JI)):null;if(n)return jd(n,"keychain");let o=b4(t),s=GI(o)?qI(m4(o,"utf8")):null;if(s)return jd(s,"file");if(GI(t)&&g4(t).some(d=>d.endsWith(".vault.json")))throw new jy;let i=YI("prime256v1");i.generateKeys();let a=Buffer.alloc(32),l=i.getPrivateKey();l.copy(a,32-l.length);let c={v:1,ecdh:a.toString("base64"),vault:p4(32).toString("base64")},u=JSON.stringify(c);return r.write(JI,u)?jd(c,"keychain"):(Xa(t),Vy(o,`${u}
|
|
174
|
+
`),jd(c,"file"))}var JI,b4,jy,Qa=p(()=>{"use strict";ng();Hy();JI="secret-store-keys";b4=e=>XI.join(e,"keys.json"),jy=class extends Error{constructor(){super("Saved secrets exist on this computer but their key can't be read (is the OS keyring locked?). Unlock it and try again."),this.name="SecretKeysUnavailableError"}}});function v4(e){let t=new Set([e]),r=Buffer.from(e,"utf8").toString("base64");t.add(r),t.add(r.replace(/=+$/,"")),t.add(r.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""));let n=encodeURIComponent(e);n!==e&&t.add(n);let o=e.trim();return o&&o!==e&&t.add(o),[...t].filter(s=>s.length>=Fr.minRedactChars)}function R4(e){if(e.length<4||e.length>=Fr.minRedactChars||/\s/.test(e))return!1;let t=/[A-Za-z]/.test(e),r=/[0-9]/.test(e);return!(!/[^A-Za-z0-9]/.test(e)&&(!t||!r))}function w4(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QI(e){let t=[];for(let o of e){let s=`[redacted ${o.name}]`;R4(o.value)&&t.push({needle:o.value,label:s,token:!0});for(let i of v4(o.value))t.push({needle:i,label:s,token:!1})}t.sort((o,s)=>s.needle.length-o.needle.length||Number(o.token)-Number(s.token));let r=new Set,n=t.filter(o=>{let s=`${o.token?"t":"s"}:${o.needle}`;return r.has(s)?!1:(r.add(s),!0)});return{empty:n.length===0,maxLength:n.reduce((o,s)=>Math.max(o,s.needle.length),0),redact(o){if(!o||n.length===0)return o;let s=o;for(let i of n)if(i.token){let a=new RegExp(`(^|[^A-Za-z0-9_])${w4(i.needle)}(?=$|[^A-Za-z0-9_])`,"g");s=s.replace(a,`$1${i.label}`)}else s.includes(i.needle)&&(s=s.split(i.needle).join(i.label));return s}}}var ZI=p(()=>{"use strict";za()});import{createHash as S4,randomBytes as _4}from"node:crypto";import{existsSync as x4,readFileSync as C4,rmSync as E4}from"node:fs";import A4 from"node:path";function Za(e){return`${S4("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ue,Gd,Ks,$s,Jd=p(()=>{"use strict";Eg();Qa();za();Ue=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SecretStoreError"}code};Gd=(e,t,r)=>{for(let n of[e,t,r])if(n.includes(`
|
|
175
|
+
`))throw new Ue("invalid field","invalid");return["kynver-secret/v1/value",e,t,r].join(`
|
|
176
|
+
`)},Ks=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),$s=class{constructor(t){this.opts=t;if(!t.agentOsId.trim())throw new Ue("workspace is required","invalid");this.root=t.root??Rt(),this.file=A4.join(this.root,Za(t.agentOsId)),this.now=t.now??(()=>new Date)}opts;file;root;now;read(){if(!x4(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let t;try{t=JSON.parse(C4(this.file,"utf8"))}catch{throw new Ue("The saved-secrets file is damaged.","corrupt")}if(t.v!==1||!Array.isArray(t.secrets))throw new Ue("The saved-secrets file is damaged.","corrupt");if(t.agentOsId!==this.opts.agentOsId)throw new Ue("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:t.agentOsId,secrets:t.secrets}}write(t){Xa(this.root),Vy(this.file,`${JSON.stringify(t)}
|
|
177
|
+
`)}list(){return this.read().secrets.map(Ks)}find(t){let r=this.read().secrets.find(n=>t.handle?n.handle===t.handle:n.name===t.name);return r?Ks(r):null}put(t){if(!$d(t.name))throw new Ue("That secret name isn't allowed.","invalid");let r=Buffer.byteLength(t.value,"utf8");if(r===0)throw new Ue("The secret is empty.","invalid");if(r>Fr.maxValueBytes)throw new Ue("The secret is too long.","invalid");let n=(t.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,Fr.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===t.name);if(i)return i.value=nn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Gd(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:Ks(i),replaced:!0};if(o.secrets.length>=Fr.maxSecrets)throw new Ue("This computer already holds the most secrets allowed.","full");let a=`sec_${_4(10).toString("hex")}`,l={handle:a,name:t.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:nn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Gd(this.opts.agentOsId,a,t.name))};return o.secrets.push(l),this.write(o),{summary:Ks(l),replaced:!1}}reveal(t){let r=this.read().secrets.find(n=>t.handle?n.handle===t.handle:n.name===t.name);if(!r)throw new Ue("No saved secret by that name.","not_found");try{let n=Yn(this.opts.vaultKey,r.value,Gd(this.opts.agentOsId,r.handle,r.name)).toString("utf8");return{summary:Ks(r),value:n}}catch{throw new Ue(`The saved value for ${r.name} can't be read on this computer. Save it again.`,"unreadable")}}revealAllForRedaction(){let t=[];for(let r of this.read().secrets)try{t.push({name:r.name,value:Yn(this.opts.vaultKey,r.value,Gd(this.opts.agentOsId,r.handle,r.name)).toString("utf8")})}catch{}return t}touch(t){if(t.length===0)return;let r=this.read(),n=this.now().toISOString();for(let o of r.secrets)t.includes(o.handle)&&(o.lastUsedAt=n,o.useCount+=1);this.write(r)}remove(t){let r=this.read(),n=r.secrets.findIndex(s=>t.handle?s.handle===t.handle:s.name===t.name);if(n<0)throw new Ue("No saved secret by that name.","not_found");let[o]=r.secrets.splice(n,1);return r.secrets.length===0?E4(this.file,{force:!0}):this.write(r),Ks(o)}}});import{statSync as P4}from"node:fs";import I4 from"node:path";function T4(e,t){return`${t}\0${e}`}function N4(e){try{let t=P4(e);return t.isFile()?`${t.mtimeMs}:${t.size}`:null}catch{return null}}function Yd(e,t=Rt()){if(!e)return null;let r=I4.join(t,Za(e)),n=N4(r),o=T4(e,t);if(!n)return Hs.delete(o),null;let s=Hs.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=Vd({root:t}),a=QI(new $s({agentOsId:e,vaultKey:i.vaultKey,root:t}).revealAllForRedaction());return Hs.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Gy(e){if(!e){Hs.clear();return}let t=`\0${e}`;for(let r of Hs.keys())r.endsWith(t)&&Hs.delete(r)}function qd(e,t,r){if(typeof e=="string")return t.redact(e);if(r>O4||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>qd(o,t,r+1));let n={};for(let[o,s]of Object.entries(e))n[o]=qd(s,t,r+1);return n}function eO(e,t,r=Rt()){let n=Yd(e,r);return!n||n.empty||!t?t:n.redact(t)}function tO(e,t,r=Rt()){let n=Yd(e,r);return!n||n.empty?t:qd(t,n,0)}function rO(e,t,r=Rt()){let n=Yd(e,r);if(!n||n.empty||t.length===0)return t;let o;try{o=new TextDecoder("utf-8",{fatal:!0}).decode(t)}catch{return t}if(o.includes("\0"))return t;let s=n.redact(o);return s===o?t:Buffer.from(s,"utf8")}function zd(e,t,r=Yd(e)){return!r||r.empty?t:t.map(n=>qd(n,r,0))}var O4,Hs,js=p(()=>{"use strict";Qa();ZI();Jd();O4=64,Hs=new Map});import Qd from"node:path";async function nO(e,t,r){let n=await fetch(e,{method:"POST",headers:Dt(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 D4(e){if(e&&typeof e=="object"){let t=e.error;if(typeof t=="string"&&t.trim())return t.trim()}}function oO(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function el(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function M4(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function L4(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 iO(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function B4(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Vs(e,t){(e.completionBlocker??void 0)!==(t??void 0)&&(t?e.completionBlocker=t:delete e.completionBlocker,re(e.runId,e))}function U4(e){e.completionBlocker&&(delete e.completionBlocker,re(e.runId,e))}function Xd(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function F4(e,t){return{...e,...t.prUrl?{prUrl:t.prUrl}:{},...t.headCommit?{headCommit:t.headCommit}:{}}}async function Gs(e){let{runId:t,workerName:r}=Wd(e),n=Jn(t,r),o=se(n.runId),s=le(n,Xd(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!$e(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&&Wa(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&iy(n)&&U4(n),!s.finalResult&&s.alive===!1){let R=Td({worker:n,status:s});R&&Nd(n,R)&&(re(n.runId,n),n=Jn(t,r),s=le(n,Xd(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let R=hy({worker:n,run:o,status:s});if(!R.ok)return Vs(n,R.reason),{ok:!1,reason:R.reason,nextAction:R.nextAction,completionBlocked:!0};(R.prUrl||R.headCommit)&&(s=le(n,Xd(o)),s=F4(s,R))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let R=dI({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!R.allowed){let L=R.detail??`worktree completion blocked (${R.state})`;return Vs(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{BI({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 pd({worker:n,agentOsId:i,baseUrl:d,secret:m}),n=Jn(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=UI({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),b=tO(i,{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(hI(k),yI(k)){let R={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return yd(n,n.runId,R),Pd(n,s,{source:"harness-completion"}),Vs(n,void 0),qa(n.runId,n.name),mn(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}gI(k)}let v=await nO(g,m,b);if((v.status===401||v.status===403)&&!f){let R=await x_(i,{baseUrl:d});R&&R!==m&&(m=R,v=await nO(g,m,b))}if(v.ok){let R=fP(v.parsed);if(!mP(R)){let U=`completion acknowledged but board not advanced: ${R.detail??(R.routeOutcome?`harness completion returned ${R.routeOutcome}`:"harness completion did not advance the linked task")}`;Vs(n,U);let N={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:v.parsed};return yd(n,n.runId,N),k&&Ty(k,"rejected"),{ok:!1,httpStatus:v.status,response:v.parsed,reason:U,completionBlocked:!0}}Vs(n,void 0);let L=R.routeOutcome??"acknowledged",j={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:v.parsed};yd(n,n.runId,j),Pd(n,s,{source:"harness-completion"}),k&&Ty(k,"acknowledged"),qa(n.runId,n.name),mn(n.runId,n.name);let O=s.prUrl;return{ok:!0,httpStatus:v.status,response:v.parsed,reason:L,...O?{prHandoff:{prUrl:O}}:{}}}let w=v.status===401||v.status===403,S=D4(v.parsed)??(w?"runner token unauthorized":"non-2xx response"),_=w?`completion replay rejected (${v.status}): ${S}`:`completion replay failed (${v.status}): ${S}`;return Vs(n,_),{ok:!1,httpStatus:v.status,response:v.parsed,completionBlocked:!0}}async function aO(e){try{let{runId:t,workerName:r}=Wd(e),n=Jn(t,r),o=se(n.runId),s=le(n,Xd(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!$e(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 Gs(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 lO(e){let{run:t,workerName:r,worker:n}=e,o=le(n,{base:t.base,baseCommit:t.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=Yo({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=iO(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=oO(n.completionResponse),m=oO(f?.task),g=el(f?.outcome),h=el(f?.status),y=Array.isArray(f?.warnings)?f.warnings.filter(_=>typeof _=="string"&&_.trim().length>0):[],b=el(m?.prUrl)??el(f?.prUrl),k=el(n.completionReportedAt),v=M4({finished:$e(o),completionBlocker:c,completionOutcome:g,completionReportedAt:k}),w=L4({completionBlocker:c,completionOutcome:g,completionReportedAt:k,finished:$e(o)}),S=B4({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 _=n.instructionPolicyEvidence;if(!_||typeof _!="object")return null;let R=_.ruleSlugs;return Array.isArray(R)?R.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:S,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:w,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function W4(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&&!iO(r)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:t==="done"}function K4(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 tl(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 sO(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 $4(e){let t=e.filter(sO),r=e.filter(n=>{if(sO(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 cO(e,t,r){let n={runId:e.id,name:e.name,status:Lc(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:tl(t,"status"),attentionCounts:tl(t,"attention"),lifecycleCounts:tl(t,"lifecycleStage")},n.controller=$4(t)),n}function H4(e){return e.status==="done"&&e.attention==="done"}function Jy(e){let t=se(e),n=Object.keys(t.workers||{}).map(s=>{let i=K(Qd.join(q(t.id),"workers",B(s),"worker.json"),void 0);return i?lO({run:t,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=cO(t,n,!1);return Re(Qd.join(q(t.id),"last-board.json"),o),o}function qy(e){let t=se(e),n=Object.keys(t.workers||{}).map(i=>{let a=K(Qd.join(q(t.id),"workers",B(i),"worker.json"),void 0);return a?W4(a)?K4(i,a):lO({run:t,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!H4(i)),s=cO(t,o,!0);return s.status=Lc(t.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:tl(n,"status"),allAttentionCounts:tl(n,"attention")},Re(Qd.join(q(t.id),"last-board-compact.json"),s),s}async function uO(e,t){let r=String(e.run||""),n=String(e.agentOsId||"");if(!r||!n)return null;let o=Jy(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 Js=p(()=>{"use strict";$();Ms();vs();gP();Ve();Q();Oc();BP();Pe();Ay();Vi();pI();sy();kd();Us();fo();Ws();Id();D();Kd();ey();$y();FI();js()});var dO=p(()=>{"use strict";Ve();Q();Ms();D()});import{spawn as j4}from"node:child_process";import{existsSync as V4,openSync as G4,closeSync as pO}from"node:fs";import J4 from"node:path";function fO(e){let t=e.nodeExecutable??process.execPath,r=td({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:t});if(!r)return;let n=r.cliPath;if(!V4(n))return;let o=J4.join(e.workerDir,"auto-complete.log"),s;try{s=G4(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=j4(r.command,a,ee({detached:Se(),stdio:i,env:process.env}));return s!==void 0&&pO(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{pO(s)}catch{}return}}var M_e,mO=p(()=>{"use strict";D();kd();Q();Pe();Js();D();Kd();Gh();$();dO();M_e=360*60*1e3});var gO=p(()=>{"use strict"});function hO(e,t,r){ue(e,["fetch","origin",r,"--prune"],{allowFailure:!0});let n=`origin/${r}`,o=te(e,["worktree","add","-B",r,t,n]);if(o.status===0)return;let s=te(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 yO=p(()=>{"use strict";_e()});import{createHash as q4}from"node:crypto";import{chmodSync as Y4,mkdirSync as z4}from"node:fs";import kO from"node:os";import X4 from"node:path";function bO(e,t){return q4("sha256").update(e).digest("hex").slice(0,t)}function Yy(e){let t=e.platform??process.platform,r=bO(e.agentOsId,12),n=bO(e.workerKey,16);if(t==="win32")return{socketPath:`${Z4}kynver-worker-${r}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=X4.posix,s=e.homeDir??kO.homedir(),i=o.join(s,".kynver","brokers",r),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=Q4)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??kO.tmpdir(),`kynver-brokers-${r}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function zy(e){e.socketDir&&(z4(e.socketDir,{recursive:!0,mode:448}),Y4(e.socketDir,448))}var Q4,Z4,Xy=p(()=>{"use strict";Q4=100,Z4="\\\\.\\pipe\\"});import eX from"node:net";import{chmodSync as tX,unlinkSync as rX}from"node:fs";var rl,SO=p(()=>{"use strict";Or();nd();Xy();lt();rl=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=Aa(t.capabilities),this.server=eX.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(t){let r=new e(t);if(zy(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{tX(t.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Ns).map(t=>Ta[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{rX(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
178
|
`);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(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
|
|
175
|
-
`),
|
|
176
|
-
`)}var
|
|
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()&&(
|
|
179
|
+
`)}})}write(t,r){if(!t.destroyed)try{t.write(Uh(r))}catch{}}async handleLine(t,r){let n=Fh(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(!Ns(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 rd({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 Qy(){return _O}var _O,xO=p(()=>{"use strict";_O={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 CO=p(()=>{"use strict";Or()});var EO=p(()=>{"use strict";SO();xO();Or();nd();CO();Ry();Xy()});import{existsSync as nX,mkdirSync as oX}from"node:fs";import qs from"node:path";async function AO(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||Ir,model:t.model,rule:t.routingRule||"explicit:spawn",requestedModel:t.requestedModel??t.model}:cd({explicitModel:t.model,explicitProvider:t.provider,explicitProviderIsOperatorOverride:!!t.provider?.trim(),configuredProvider:A().workerProvider}),s=cP(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=qs.join(q(e.id),"workers",n);oX(l,{recursive:!0});let c=qs.join(a,e.id,n),u=t.repairTargetBranch?.trim()||void 0,d=u||t.branch||`agent/${e.id}/${n}`;if(nX(c))throw new Error(`worktree path already exists: ${c}`);if(ue(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)hO(e.repo,c,u);else{let x=eP({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,ze(e)),ue(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let f=qs.join(l,"stdout.jsonl"),m=qs.join(l,"stderr.log"),g=qs.join(l,"heartbeat.jsonl"),h=iP({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=vd({title:t.taskTitle,personaSlug:t.personaSlug,parentTaskId:t.parentTaskId,executorRef:t.executorRef}),v,w,S,_,R=t.workerMcpToken?.trim();if(R&&Wh(s.name)&&Pa()){let x=jn();x&&t.agentOsId&&t.taskId?(w={apiBaseUrl:x,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:R,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=aA(s.name);if(R&&L&&Pa()){let x=jn();if(x&&t.agentOsId&&t.taskId){let G=Yy({agentOsId:String(t.agentOsId),workerKey:l}),C=await rl.start({address:G,apiBaseUrl:x,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:R,capabilities:t.workerMcpCapabilities??null,expiresAt:t.workerMcpExpiresAt??Date.now()+sX,workerPid:process.pid,identity:Qy(),onRefusal:I=>console.error(`[supervisor] ${n}: worker tools refused a call (${I})`)});if(vy(l,C),s.name==="codex"){let I=VP({workerDir:l,brokerSocketPath:G.socketPath});if(I.ok){let M=GP(I.codexHome,Nr());M.ok?(S=I.codexHome,v=S):(Va(l),await cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${M.detail}); spawning with the normal environment`))}else await cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${I.detail}`)}else if(s.name==="cursor"){let I=HP({worktreePath:c,brokerSocketPath:G.socketPath});I.ok?v=I.configPath:(await cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${I.detail}`))}else if(s.name==="gemini"&&Ds(vt())==="antigravity"){let I=QP({worktreePath:c,brokerSocketPath:G.socketPath});I.ok?v=I.configPath:(await cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${I.detail}`))}else if(s.name==="gemini"){let I=eI({workerDir:l,brokerSocketPath:G.socketPath});I.ok?(_=I.geminiCliHome,v=_):(await cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${I.detail}`))}else v=cA({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?aS(lS(e.id,String(t.taskId),n)):null,O;try{O=cS(j,()=>s.start({name:n,task:t.task,ownedPaths:t.ownedPaths,model:i,modelPinned:DA(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:g,prompt:h,reviewWorker:k,executionMode:t.executionMode??"write",...w?{workerToolGrant:w}:{},...S?{codexHome:S}:{},..._?{geminiCliHome:_}:{},...v?{mcpConfigPath:v,mcpAllowedTools:iA(t.workerMcpCapabilities)}:{}}))}catch(x){throw v&&(Xu(l),xd(c),Va(l),Ad(l),Ed(c),Ls(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=UA(O.model,i,s.defaultModel),U=A(),N=ot(process.env,U),J=Be().runnerId,W=os({boxKind:N.boxKind,config:U,env:process.env}),F={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:W,runtimeId:J,startedAt:new Date().toISOString(),...j?{oomRetryHeapMb:j}:{}};if(re(e.id,F),by(l,O.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:qs.join(l,"worker.json")}},e.status="running",ze(e),F.agentOsId&&F.taskId){let x;try{x=fO({runId:e.id,workerName:n,workerDir:l,agentOsId:F.agentOsId})}catch(G){let C=`completion sidecar failed to spawn: ${G.message}`;F.completionBlocker=C,re(e.id,F)}if(x)x.pid&&(F.completionSidecarPid=x.pid,re(e.id,F));else{let G=F.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";F.completionBlocker=G,F.completionSidecarSpawnFailedAt=new Date().toISOString(),re(e.id,F),QA(e.id,F,G)}}return F}var sX,PO=p(()=>{"use strict";Ms();Mm();_e();Q();Q();tP();aP();D();Ku();eo();uP();mO();gO();yO();We();ss();$();lt();wy();Sy();ao();Ey();uo();xy();EO();xr();cy();sX=7200*1e3});function iX(e,t){let r=Me(t)?.trim();return r||Oe("KYNVER_RUNNER_TOKEN",e)||Oe("OPENCLAW_RUNNER_TOKEN",e)||null}function aX(e){let t=Ce()?.trim();return t||Oe("KYNVER_API_KEY",e)||Oe("KYNVER_RUNTIME_SECRET",e)||Oe("KYNVER_CRON_SECRET",e)||Oe("OPENCLAW_CRON_SECRET",e)||null}async function IO(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=iX(r,e.agentOsId),l=aX(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 OO=p(()=>{"use strict";$();Et()});function lX(e,t){let r=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||t.apiBaseUrl?.trim()||null;return r?dr(r)??null:null}function cX(e,t){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||t.defaultRepo?.trim()||null)??null}function uX(e,t,r){let n=e.KYNVER_HARNESS_ROOT?.trim()||t.harnessRoot?.trim()||null;return n||r||null}function TO(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.config??{},s=lX(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=cX(r,o),l=uX(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 NO=p(()=>{"use strict";pr()});var nl=p(()=>{"use strict"});var ol=p(()=>{"use strict"});var ek=p(()=>{"use strict";$();ol()});var rk=p(()=>{"use strict";nl()});import{mkdirSync as MO}from"node:fs";import{homedir as dX,tmpdir as dCe}from"node:os";import Zd from"node:path";function LO(){let e=process.env.KYNVER_STATE_ROOT;return e?Zd.resolve(e):Zd.join(dX(),".kynver","state")}function ep(){return Zd.join(LO(),"plan-outbox")}function pX(){return Zd.join(LO(),"plan-outbox-archive")}function BO(){let e=ep(),t=pX();return MO(e,{recursive:!0}),MO(t,{recursive:!0}),{outboxDir:e,archiveDir:t}}var sl=p(()=>{"use strict"});function UO(){return{"planOutbox.storeFailures":il.storeFailures,"planOutbox.corruptItemsSeen":il.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":il.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":il.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":il.halfArchivesCompleted}}var hCe,il,al=p(()=>{"use strict";ln();Rs();hCe=600*1e3,il={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0}});import{existsSync as gX,readFileSync as hX,renameSync as vCe,readdirSync as RCe,rmSync as wCe,writeFileSync as SCe,unlinkSync as _Ce}from"node:fs";import FO from"node:path";function WO(e){if(!gX(e))return null;try{return JSON.parse(hX(e,"utf8"))}catch{return null}}function tp(e){let{outboxDir:t}=BO();return{jsonPath:FO.join(t,`${e.id}.json`),bodyPath:FO.join(t,e.bodyPath)}}var ll=p(()=>{"use strict";al();nl();rk();sl()});var KO=p(()=>{"use strict";nl();ol();ek()});var nk=p(()=>{"use strict";ek();ol();rk();sl();al();ll();KO()});import wX from"node:path";function ok(e){let t=wX.join(ep(),`${e}.json`);return WO(t)}var $O=p(()=>{"use strict";ll();al();nk();sl()});function sk(e){let t=tp(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(`
|
|
180
|
+
`)}function ik(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 HO=p(()=>{"use strict";ll()});var jO=p(()=>{"use strict";nl();nk();$O();ll();HO();sl();ol()});function ak(e){return e?.trim()?e.trim():null}function VO(e,t){let r=ak(e.boxKind),n=ak(e.runnerId),o=ak(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,ze(e),{ok:!0,stamped:!0}):{ok:!0}}var GO=p(()=>{"use strict";Q()});function JO(e=process.env){return jt(A(),e,{requireExplicitBoxKind:!0})}function qO(e){return[...e.errors,...e.warnings].join("; ")}var YO=p(()=>{"use strict";$();Fn()});async function cl(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 lk=p(()=>{"use strict";Ve()});function Ys(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 zO(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 ck=p(()=>{"use strict"});function gn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function QO(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 ZO(e){let t=Array.isArray(e)?e:[],r=new Map;for(let n of t){let o=n&&typeof n=="object"?n:{},s=gn(o),i=r.get(s);(!i||QO(o)>=QO(i))&&r.set(s,o)}return[...r.values()]}function SX(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 eT(e){let t=ZO(e),r=[],n=[],o=[];for(let s of t){if(SX(s)){o.push(gn(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&&XO.has(i))){if(i){n.push(`${gn(s)}=${i}`);continue}if(!(l&&XO.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${gn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){r.push(`${gn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){r.push(`${gn(s)}=${a}`);continue}r.push(`${gn(s)}=PENDING`)}}}return{pending:r,failed:n,ignoredActions:o}}function tT(e){return ZO(e).some(r=>{let n=gn(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 rT(e,t){let r=e==="UNSTABLE"&&t.ignoredActions.length>0;return!_X.has(e)&&!r?`mergeStateStatus is ${e}`:null}var XO,_X,nT=p(()=>{"use strict";XO=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);_X=new Set(["CLEAN","HAS_HOOKS"])});import{spawnSync as xX}from"node:child_process";function oT(){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=xX("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 sT=p(()=>{"use strict"});import{createHash as CX,randomUUID as EX}from"node:crypto";import{closeSync as iT,fsyncSync as aT,mkdirSync as AX,openSync as lT,realpathSync as PX,writeFileSync as IX}from"node:fs";import uk from"node:path";function uT(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 cT(e,t,r,n){AX(e,{recursive:!0,mode:448});let o=PX(e),s=lT(uk.join(o,`${t}.${r}.json`),"wx",384);try{IX(s,JSON.stringify({...n,phase:r},null,2)+`
|
|
181
|
+
`),aT(s)}finally{iT(s)}for(let i=o;;i=uk.dirname(i)){let a=lT(i,"r");try{aT(a)}catch(l){if(!OX(l))throw l}finally{iT(a)}if(i===uk.dirname(i))break}}function OX(e,t=process.platform){return t==="win32"&&e?.code==="EPERM"}function dT(e,t,r,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:CX("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:t,invocationId:EX(),startedAt:new Date().toISOString(),finishedAt:null,headSha:r,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return cT(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return cT(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}var pT=p(()=>{"use strict"});import{spawnSync as fT}from"node:child_process";function pk(e){return e?.trim()?["--repo",e.trim()]:[]}function mT(e){let t=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}function gT(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 LX(e){let t=typeof e.title=="string"?e.title.trim():"",r=typeof e.body=="string"?e.body.trim():"",n=DX.test(t)||MX.test(r),o=TX.test(r),s=NX.test(r);return n||o||s||e.vercelCheckSuccess===!0}function BX(e){if(!LX({title:e.title,body:e.body,vercelCheckSuccess:tT(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 UX(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=eT(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=rT(e.mergeStateStatus,t);if(r)throw new Error(`PR #${e.number} ${r}`)}function FX(e){UX(e),BX(e)}function WX(e){try{return FX(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function KX(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 $X(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 HX(e,t){if(!t?.trim())return;let r=fT("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}`)&&fT("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function hT(e){let t=e.cwd??process.cwd(),r=e.exec??wd,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(!Ys(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=oT();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=gT(r,t,["pr","view",n,...pk(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=WX(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)||!uT(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(!Ys(u)||!zO(o,u))return s();let d=dT(e.operation,n,o.headSha,o),f;try{f=r.gh(t,["pr","merge",c,...pk(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=dk(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=dk(r,t,c,e.repo);if(g||(g=dk(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=$X(r,t,e.repo);KX(r,t,y,a.headRefName),HX(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 dk(e,t,r,n){try{let o=gT(e,t,["pr","view",r,...pk(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}var TX,NX,DX,MX,yT=p(()=>{"use strict";ck();Sd();nT();sT();pT();TX=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,NX=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,DX=/^docs[(:]/i,MX=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i});async function kT(e){let t=e.decision.task,r=e.decision.acceptedReview,n=String(t.prUrl??"");return hT({prUrl:n,cwd:e.cwd,repo:mT(n),exec:e.exec,operation:e.operation,acceptedReview:Ys(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&&Ys(s.acceptedReview)?s.acceptedReview:null}})}var bT=p(()=>{"use strict";Ve();ck();yT()});async function vT(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 RT=p(()=>{"use strict";$();Ve()});function wT(){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(`
|
|
182
|
+
`)}var ST=p(()=>{"use strict"});function mo(e){return`${jX} ${e.trim()}`}function VX(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 GX(e){let{snapshot:t,leaseOwner:r,expectedLeaseToken:n,worker:o}=e;if(!t)return{ok:!1,error:mo("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:r,expectedLeaseToken:n}};if(t.status!=="running")return{ok:!1,error:mo(`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:mo(`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:mo(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:t.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:t};let a=VX(o);return a?{ok:!1,error:mo(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:mo(`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:mo("AgentOS heartbeatAt missing after claim"),detail:{taskId:t.taskId},snapshot:t}}async function _T(e){let t=await dd({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return GX({snapshot:t.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}var jX,xT=p(()=>{"use strict";Zh();jX="dispatch_start_readback_failed:"});function CT(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 re(e,n),n}var ET=p(()=>{"use strict";D();Q()});function AT(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 PT(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 IT=p(()=>{"use strict";Ve()});function OT(e){let t=e.admissionExhaustion;return!t||typeof t!="object"?null:t}function TT(e){let t=e.dispatchSkipDrain;return!t||typeof t!="object"?null:t}function JX(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=YX(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,w=v&&Array.isArray(k?.capabilities)?k.capabilities.filter(_=>typeof _=="string"&&_.trim().length>0):null,S=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:w,workerMcpExpiresAt:S}}function qX(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return t.length?t:null}function YX(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 zX(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("",wT());let n=ik(e);if(n?.outboxId){let o=ok(n.outboxId);o?r.push("",sk(o)):r.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return r.join(`
|
|
183
|
+
`)}function XX(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 zs(e){let t=e.pipeline===!0||e.pipeline==="true";try{let V=function(){return C.filter(P=>P.started).length},Z=function(P,E){wa({runId:l.id,agentOsId:u,phase:P,startedCount:V(),outcomeCount:C.length,cappedStarts:O,...E})},pe=function(){return C.some(P=>(typeof P.error=="string"?P.error:"").startsWith("dispatch_start_readback_failed:"))},ge=function(P){return P.landPrDispatch===!0?!0:P.task?.executor==="land_pr"};var r=V,n=Z,o=pe,s=ge;let i=JO();if(!i.ok||!i.identity){let P=qO(i);if(t)return{ok:!1,error:P,boundary:i};console.error(`run dispatch failed: ${P}`),process.exit(1)}let a=i.identity;for(let P of i.warnings)console.error(`[dispatch] runner-boundary warning: ${P}`);let l=se(String(At(String(e.run||""),"--run"))),c=VO(l,a);if(!c.ok){let P=c.reason??"run does not belong to this runner boundary";if(t)return{ok:!1,error:P,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${P}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(At(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=Be({runId:l.id}),y=Ua(l.id,h.runnerId),b=W_(),k=b?gu(l.repo):null,v=new WeakMap;if(b&&m&&!k){let P="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(t)return{ok:!1,error:P,runId:l.id};console.error(`run dispatch failed: ${P}`),process.exit(1)}let w=e.diskPath?qr({diskPath:String(e.diskPath)}):qr({diskPath:l.repo}),S=await bE({runId:l.id,agentOsId:u,args:e}),_=XX(e),R=_.size>0,L=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,j=R?Math.min(L,_.size):L;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let P=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await fe(P,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,S.slotsAvailable);if(!g&&O<=0){let P={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:S.reason??"no resource slots",resourceGate:S};if(t)return{ok:!0,...P};console.log(JSON.stringify(P,null,2));return}let T=ps(l.id),U=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,N=(P,E)=>({agentOsId:u,...E?{claimAuthorization:E}:{},dryRun:g,maxStarts:P,leaseOwner:y,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ry,runnerDiskGate:w,runnerResourceGate:S,activeHarnessWorkers:T,runnerPresence:h,harnessBoardSnapshot:Jy(l.id),...e.lane?{lane:yE(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=cE(),W=async P=>{let E=b&&k?j_(k):void 0,H=await fe(U,f,N(P,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 ae of X.result.started)ae&&typeof ae=="object"&&v.set(ae,E.requestNonce);return{dispatch:H,result:X?.result}};g||wa({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:J});let F=await W(R||g?O:1);if(!F.dispatch.ok||!F.result){let P=kh(F.dispatch.response),E={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:F.dispatch.status,response:F.dispatch.response,authRefreshed:F.dispatch.refreshedAuth===!0,authRefreshFailure:F.dispatch.authRefreshFailure,...P?{timeout:!0}:{}};if(P&&wa({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:F.dispatch.status}),t)return{ok:!1,...E};console.log(JSON.stringify(E,null,2)),process.exit(1)}let x=F.result;if(g){let P=OT(x),E=TT(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:P?.capacityIdle===!0,admissionExhaustion:P,dispatchSkipDrain:E};if(t)return{ok:!0,...H};console.log(JSON.stringify(H,null,2));return}let G=HA(),C=[],I=[],M=Number(x.inspected)||0,ne=!1;async function Y(P,E,H){let X=await cl({baseUrl:d,secret:f,agentOsId:u,taskId:String(P.id),leaseOwner:y,leaseToken:P.leaseToken?String(P.leaseToken):null,failureDetail:E});P.leaseToken&&Bs({taskId:String(P.id),leaseToken:String(P.leaseToken).trim()},Ny(E));let ae={taskId:P.id,started:!1,error:E,released:X.released,releaseResponse:X.releaseResponse,...H};return C.push(ae),Z("outcome",{lastOutcome:ae}),!1}async function qK(P){let E=P.task,H=String(E.id);if(R&&!_.has(H))return Y(E,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});if(!(E.prUrl?String(E.prUrl):""))return Y(E,"land_pr task missing prUrl");try{let ae=await kT({decision:P,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`}}),Ct=await vT({baseUrl:d,secret:f,agentOsId:u,runId:l.id,task:E,report:ae});return Ct.ok?(C.push({taskId:H,started:!0,landPr:!0,outcome:ae.outcome,completionStatus:Ct.status}),!0):Y(E,`land_pr completion POST failed (HTTP ${Ct.status})`,{landPr:!0,outcome:ae.outcome})}catch(ae){return Y(E,ae.message)}}async function YK(P){let E="duplicate_dispatch_prevented: live local worker already owns this task",H=await cl({baseUrl:d,secret:f,agentOsId:u,taskId:String(P.id),leaseOwner:y,leaseToken:P.leaseToken?String(P.leaseToken):null,failureDetail:E});P.leaseToken&&Bs({taskId:String(P.id),leaseToken:String(P.leaseToken).trim()},Ny(E));let X={taskId:P.id,started:!1,error:E,alreadyRunning:!0,nonFatal:!0,released:H.released,releaseResponse:H.releaseResponse};return C.push(X),Z("outcome",{lastOutcome:X}),!1}async function zK(P){let E=P.task,H=JX(P),X=String(E.id);if(R&&!_.has(X))return Y(E,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});let ae=qX(E.personaSlug);if(ae&&(!H?.personaInjectionReady||!H.personaMarkdown))return Y(E,`persona_injection_required: missing anchored context-envelope persona block for "${ae}"`);if(ae&&!H?.runtimeEnvelopeReady)return Y(E,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${ae}"`);if(qA(l.id,X))return YK(E);let Ct=Number(E.attempt)||1;if(Ct>G.maxTaskAttempts)return Y(E,`task attempt ${Ct} exceeds KYNVER_MAX_TASK_ATTEMPTS (${G.maxTaskAttempts})`);let In=E.leaseToken?String(E.leaseToken).trim():"";if(!In)return Y(E,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let On=B(`t-${E.id}-a${E.attempt}`),ur=cd({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:A().workerProvider,task:RE(E)});mI({taskId:X,leaseToken:In,runId:l.id,workerName:On,provider:ur.provider??null});let am=WA({task:E,routing:ur,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!am.ok)return Y(E,am.error??"model_routing_mismatch",{modelRoutingGuard:am});if(AT(E)){let tt=await PT({agentOsId:u,taskId:X,baseUrl:d,secret:f});if(tt&&tt.dispatchable===!1)return Y(E,`pr_review_head_reconcile_blocked: ${tt.reason??tt.outcome??"stale PR head"}`,{headReconcile:tt});if(tt?.activeReviewTaskId&&tt.activeReviewTaskId!==X)return Y(E,`pr_review_head_reconcile_retargeted: active review is ${tt.activeReviewTaskId}`,{headReconcile:tt})}let oc=LI(ur.provider);if(!oc.ok)return Y(E,`provider_quota_exhausted: ${oc.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:oc.provider,retryAt:oc.retryAtIso}});try{let tt=E.planId?String(E.planId):void 0,sc=nP({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}),YR=EI({runId:l.id,workerName:On,maxSlots:S.maxConcurrentWorkers,diskActiveWorkers:Km()});if(!YR.admitted)return Y(E,`admission_refused: ${YR.reason}`,{nonFatal:!0});let ic=H?.workerMcpToken??null;if(ic&&Pa()){let Fo=TO({jobId:`dispatch:${String(E.id)}`,agentOsId:u,taskId:String(E.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!Fo.ok)console.error(`[dispatch] worker tools skipped for task ${String(E.id)}: context hydration failed (${Fo.code}: ${Fo.detail}) \u2014 spawning without tools`),ic=null;else{let lm=await IO(Fo.context);lm.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(E.id)}: tool endpoint probe failed (${lm.error??`HTTP ${lm.httpStatus}`}) \u2014 spawning without tools`),ic=null)}}XA(l.id,String(E.id),{except:On});let Ht=await AO(l,{name:On,task:zX(E,u),ownedPaths:e.owned?String(e.owned).split(",").map(Fo=>Fo.trim()).filter(Boolean):[],model:ur.model,provider:ur.provider,routingRule:ur.rule,requestedModel:ur.requestedModel,agentOsId:u,taskId:String(E.id),planId:tt,branch:sc?.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:sc?.targetPrUrl??(E.prUrl?String(E.prUrl):void 0),repairTargetPrUrl:sc?.targetPrUrl,repairTargetBranch:sc?.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??ae,personaEvidence:H?.personaEvidence??null,contextEnvelopeMarkdown:H?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:H?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:H?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:H?.runtimeEnvelopeEvidence??null,workerMcpToken:ic,workerMcpCapabilities:H?.workerMcpCapabilities??null,workerMcpExpiresAt:H?.workerMcpExpiresAt??null,leaseOwner:y,leaseToken:In,dispatched:!0,executionMode:fu(E)}),ac=await _T({agentOsId:u,taskId:String(E.id),leaseOwner:y,expectedLeaseToken:In,worker:Ht,baseUrl:d,secret:f});if(!ac.ok)return CT(l.id,Ht,ac.error??"dispatch_start_readback_failed"),mn(l.id,On),Y(E,ac.error??"dispatch_start_readback_failed",{readback:ac.detail??null});Ht.leaseToken!==In&&(Ht.leaseToken=In,Ht.leaseOwner=y,re(l.id,Ht)),Ld({taskId:X,leaseToken:In}),SI(l.id,On);let zR={taskId:E.id,started:!0,worker:Ht.name,pid:Ht.pid,branch:Ht.branch,model:Ht.model,provider:ur.provider,routingRule:ur.rule,instructionPolicyFingerprint:H?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(H?.instructionPolicyEvidence?.ruleSlugs)?H.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:H?.personaSlug??ae,personaOperatingRuleCount:H?.personaEvidence?.operatingRuleCount??null};return C.push(zR),Z("worker_started",{lastOutcome:zR}),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(tt){return mn(l.id,On),Y(E,tt.message)}}let im=new Set;for(let P of bI(l.id))im.add(P);async function jR(P){let E=P.task,H=String(E.id);if(im.has(H))return Y(E,"dispatch_retry_loop_prevented: task already failed to start this tick");let X=b?V_({decision:P,leaseOwner:y,repoIdentity:k,requestNonce:v.get(P)??null}):null,ae=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(P)?await qK(P):await zK(P);return ae||(im.add(H),kI(H,l.id)),ae}for(let P of x.started)await jR(P);if(I.push(...x.skipped??[]),R)for(let P of I){let E=String(P.task.id);_.has(E)&&C.push({taskId:E,started:!1,error:`exact_target_not_started:${P.skipReason}`,skipReason:P.skipReason,detail:P.reason??null,requestedTargetTaskIds:[..._]})}for(;!R&&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),Z("circuit_breaker",{lastOutcome:H});break}let P=await W(1);if(!P.dispatch.ok||!P.result){let H=dE(P.dispatch.response),X=V();ne=H&&X>0;let ae=kh(P.dispatch.response),Ct={started:!1,error:ae?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:P.dispatch.status,response:P.dispatch.response,...ae?{timeout:!0}:{},...ne?{nonFatal:!0,partialTopUp:!0}:{}};C.push(Ct),Z("top_up_failed",{partialTopUpInterrupted:ne,lastOutcome:Ct});break}M+=Number(P.result.inspected)||0,I.push(...P.result.skipped??[]);let E=P.result.started??[];if(E.length===0)break;for(let H of E){if(C.length>=O)break;await jR(H)}}let nc=C.filter(P=>P.started).length,Jr=OT(x),Uo=TT(x),VR=nc===0&&(Jr?.capacityIdle===!0||Number(x.resourceGate?.slotsAvailable)>0);if(VR&&Jr?.summary){let P=Jr.skipReasonCounts?.retry_ceiling_exceeded??0,E=x.overAttemptIdleRecovery??Jr.overAttemptIdleRecovery,H=E?.attempted===!0?`; over_attempt_recovery minted=${E.minted??0} started=${E.started??0}`:P>0?"; over_attempt_recovery not attempted":"",X=Uo?`; dispatch_skip_drain scanned=${Uo.scanned??0} advanced=${Uo.advanced??0}`:"",ae=Jr.progressionReport?.summary?`; ${Jr.progressionReport.summary}`:"",Ct=Uo?.prLifecycleAttempt?.summary?`; ${Uo.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${Jr.summary}${P>0?`; retry_ceiling_exceeded=${P}`:""}${H}${X}${ae}${Ct}`)}let GR={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:y,startedCount:nc,capacityIdle:VR,admissionExhaustion:Jr,dispatchSkipDrain:Uo,outcomes:C,skipped:I.map(P=>({taskId:P.task.id,skipReason:P.skipReason})),inspected:M,pagesScanned:x.pagesScanned??null,candidatesExhausted:x.candidatesExhausted??null,diskGate:x.diskGate,resourceGate:x.resourceGate,...ne?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:J},JR=P=>!P.started&&P.nonFatal!==!0,XK=C.some(JR),qR=ne&&nc>0?!0:!XK;if(wa({runId:l.id,agentOsId:u,phase:"complete",partial:ne,startedCount:nc,ok:qR}),t)return{ok:qR,...GR};console.log(JSON.stringify(GR,null,2)),C.some(JR)&&process.exit(1)}catch(i){if(t)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var ry,fd=p(()=>{"use strict";$();hu();Ve();uE();pE();kE();Ki();vE();es();Q();Q();wE();Ku();KA();jA();ty();PO();Ms();OO();NO();lt();cu();Js();D();jO();oy();Fa();xr();GO();YO();lk();$y();bT();RT();ST();xT();ET();Q();IT();mg();Us();fo();Ws();ry=3600*1e3});function Xs(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 ZX(e){let{maxStarts:t,...r}=e;return r}async function fk(e,t){if(t<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let r=ZX(e);if(r.targetTaskId||r.targetTaskIds){let u=await zs({...r,execute:!0,pipeline:!0,maxStarts:String(t)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Xs(u)}}let n=Math.min(t,QX),o=Math.max(0,t-n),s=await zs({...r,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Xs(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await zs({...r,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Xs(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}var QX,NT=p(()=>{"use strict";fd();QX=1});function DT(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 MT=p(()=>{"use strict"});function e3(e){let r=e.response?.dispatch;return r&&typeof r=="object"?r:null}function ul(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function t3(e){let t=Number(process.env[e]);return!Number.isFinite(t)||t<=0?null:Math.floor(t)}function LT(e,t){let r=e3(t),n=ul(r?.recommendedMaxStarts),o=ul(r?.actionableReady),s=ul(r?.queuedTasks),i=ul(r?.boardAdvancedThisTick)??0,a=ul(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=t3("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 BT=p(()=>{"use strict"});import r3 from"node:path";function go(e){let t=It(e);if(t.length===0)return"failed";let r=!1,n=!1,o=!1,s=!1;for(let i of t){let a=K(r3.join(q(e.id),"workers",B(i),"worker.json"),void 0);if(!a)continue;let l=le(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){r=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Wm(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return r||o||s?null:n?"completed":"failed"}function dl(){let e=[];for(let t of xe()){if(!n3.has(t.status))continue;let r=go(t);if(!r||r===t.status)continue;let n=t.status;t.status=r,ze(t),e.push({runId:t.id,from:n,to:r})}return e}var n3,Wr,hn=p(()=>{"use strict";Q();Jo();Pe();D();n3=new Set(["running","dispatching","pending","queued","needs_attention"]),Wr=new Set(["completed","failed","cancelled","done"])});import Ft from"node:path";function rp(e){return e.includes(o3)}function mk(e,t){return Ft.join(it(Le(e)),B(t))}function yn(e,t,r){return Ft.join(mk(e,t),"workers",B(r))}function UT(e,t,r){let n=Le(e);return Ft.join(n,"runs","runs",B(t),"workers",B(r))}function gk(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function ho(e){return{workerJsonPath:Ft.join(e,"worker.json"),stdoutPath:Ft.join(e,"stdout.jsonl"),stderrPath:Ft.join(e,"stderr.log"),heartbeatPath:Ft.join(e,"heartbeat.jsonl"),lastStatusPath:Ft.join(e,"last-status.json")}}function FT(e){let t=ho(yn(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!rp(e.statusPath)?e.statusPath:t}var o3,hk=p(()=>{"use strict";Ot();D();o3=`${Ft.sep}runs${Ft.sep}runs${Ft.sep}`});import{existsSync as s3,readFileSync as i3,readdirSync as a3,statSync as l3,writeFileSync as c3}from"node:fs";import u3 from"node:path";function h3(e,t=[]){if(!e)return e;let r=e,n=[...new Set(t.map(o=>o?.trim()).filter(o=>!!o&&o.length>=p3))].sort((o,s)=>s.length-o.length);for(let o of n){r.includes(o)&&(r=r.split(o).join(ut));let s=JSON.stringify(o).slice(1,-1);s!==o&&r.includes(s)&&(r=r.split(s).join(ut))}for(let[o,s]of d3)r=r.replace(o,s);return r}function WT(e=process.env,t=[]){let r=[];for(let[n,o]of Object.entries(e))o&&f3.test(n)&&r.push(o);for(let n of t)try{let o=n();o&&r.push(o)}catch{}return r}function KT(e,t=0){if(t>3||!s3(e))return[];let r=[];for(let n of a3(e,{withFileTypes:!0})){let o=u3.join(e,n.name);n.isDirectory()?r.push(...KT(o,t+1)):n.isFile()&&m3.test(n.name)&&r.push(o)}return r}function $T(e,t=[]){let r={masked:[],clean:0,failed:[]},n;try{n=KT(e)}catch{return r}for(let o of n)try{if(l3(o).size>g3){r.failed.push(o);continue}let s=i3(o,"utf8"),i=h3(s,t);if(i===s){r.clean+=1;continue}c3(o,i,"utf8"),r.masked.push(o)}catch{r.failed.push(o)}return r}var ut,yk,d3,p3,f3,m3,g3,HT=p(()=>{"use strict";ut="<redacted>",yk=`[^\\s"'\\\\,}\\]]`,d3=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${yk}+`,"gi"),ut],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${yk}+`,"gi"),ut],[/\bkynver_u_[A-Za-z0-9_-]+/g,ut],[/\bkyn_[A-Za-z0-9]{12,}/g,ut],[/\bsk-ant-[A-Za-z0-9_-]+/g,ut],[/\bsk-[A-Za-z0-9_-]{8,}/g,ut],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,ut],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,ut],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,ut],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${ut}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${yk}+`,"g"),`$1${ut}`]],p3=12,f3=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,m3=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,g3=256*1024*1024});import{existsSync as kn,mkdirSync as y3,readdirSync as VT,renameSync as k3,statSync as kk}from"node:fs";import ve from"node:path";function GT(e,t){let r=ve.resolve(e),n=ve.resolve(it(t)),o=ve.relative(n,r);return o!==".."&&!o.startsWith("..")&&!ve.isAbsolute(o)}function bk(e){if(!kn(e))return[];try{return VT(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&t.name!=="runs").map(t=>t.name)}catch{return[]}}function vk(e){let t=ve.join(e,"workers");if(!kn(t))return[];try{return VT(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name)}catch{return[]}}function JT(e){return ve.join(e,"archived-workers")}function v3(e,t){let r=ve.join(JT(e),B(t));return kn(r)?`${r}-${Date.now()}`:r}function jT(e,t,r){if(!kn(e))return!1;try{let n=t-kk(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function qT(e,t=Date.now(),r=pl){if(!kn(e))return!1;let n=ho(e),o=K(n.workerJsonPath,void 0);if(o?.status==="running"&&oe(o.pid))return!0;let s=Ne(n.heartbeatPath);if(s.lastHeartbeatAt){let i=t-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<r)return!0}return!!(jT(n.stdoutPath,t,r)||jT(n.heartbeatPath,t,r))}function R3(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-kk(ve.join(e,"worker.json")).mtimeMs}catch{return 0}}function w3(e,t,r,n){if(qT(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=R3(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 Qs(e,t=Date.now(),r=pl){for(let n of vk(e))if(qT(ve.join(e,"workers",n),t,r))return!0;return!1}function S3(){let t=ha()?.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 _3(e,t){let r=ve.join(it(e),B(t));if(!kn(r))return null;let n=vk(r);if(n.length===0)return null;let o;try{o=kk(r).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=yn(e,t,a);s[a]={workerDir:l,statusPath:ve.join(l,"worker.json")}}let i=Qs(r);return{id:t,name:t,...S3(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function Rk(e){let t=Le(e??gt()),r=it(t),n=[];for(let o of bk(r)){let s=ve.join(r,o,"run.json");if(kn(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=_3(t,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}ze(i),n.push({runId:o,action:"repaired_run_json",reason:Qs(ve.join(r,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function wk(e,t={}){let r=Le(e??gt()),n=it(r),o=t.now??Date.now(),s=t.archiveAgeMs??b3,i=[],a=null,l=()=>a??=(t.knownSecrets??(()=>WT(process.env,[Ce,()=>Me()])))();Rk(r);for(let c of bk(n)){let u=ve.join(n,c),d=ve.join(u,"run.json"),f=K(d,void 0);if(!f?.id)continue;let m=new Set([...Object.keys(f.workers||{}),...vk(u)]),g=!1;for(let h of m){let y=ve.join(u,"workers",B(h)),b=ve.join(y,"worker.json"),k=K(b,void 0);if(!k){let S=ve.join(JT(u),B(h));if(kn(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 v=w3(y,k,o,s);if(!v.eligible){i.push({runId:f.id,worker:h,action:"skipped",reason:v.reason});continue}let w=v3(u,h);y3(ve.dirname(w),{recursive:!0}),k3(y,w),$T(w,l()),delete f.workers[B(h)],delete f.workers[h],g=!0,i.push({runId:f.id,worker:h,action:"archived",reason:v.reason,archivePath:w})}g&&ze(f)}return{workers:i}}function YT(e,t=Date.now()){let r=new Set,n=it(e);for(let o of bk(n)){let s=ve.join(n,o);Qs(s,t)&&r.add(`${e}\0${o}`)}return r}var pl,b3,Zs=p(()=>{"use strict";Ss();_e();Ln();Ot();Q();hk();D();$();HT();pl=900*1e3,b3=3600*1e3});import{existsSync as bn,lstatSync as x3,readdirSync as C3,readlinkSync as E3,renameSync as Sk,unlinkSync as A3}from"node:fs";import Qt from"node:path";function P3(e,t){let r=mk(e,t),n;try{n=x3(r)}catch{return null}if(!n.isSymbolicLink())return null;let o=Qt.resolve(Qt.dirname(r),E3(r));if(Qs(o)||Qs(r))return null;let s=`${r}.materialize-${Date.now()}`;return Sk(o,s),A3(r),Sk(s,r),o}function I3(e){let t=[];for(let r of gk()){let n=Qt.join(e.fromDir,r),o=Qt.join(e.toDir,r);!bn(n)||bn(o)||(Sk(n,o),t.push(r))}return t}function zT(e,t){let r=ho(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 O3(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 T3(e){let t=ho(e.canonicalDir),r=K(t.lastStatusPath,void 0),n=bn(t.stdoutPath),o=bn(t.heartbeatPath);if(!(n||o||r!=null))return null;let i=n?Bn(t.stdoutPath):{finalResult:null},a=o?Ne(t.heartbeatPath):Ne(""),l=mr(a),c=O3({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:Qt.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}),zT(u,e.canonicalDir),u}function N3(e,t){let r=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=yn(t,e.id,o),a=Qt.join(i,"worker.json");(rp(s.workerDir)||rp(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},r=!0)}return r&&(e.workers=n,ze(e)),r}function D3(e){let t=[],r=yn(e.harnessRoot,e.run.id,e.workerName),n=UT(e.harnessRoot,e.run.id,e.workerName),o=ho(r),s=I3({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=FT({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=K(i,void 0);if(!a&&bn(o.workerJsonPath)&&(a=K(o.workerJsonPath,void 0)),!a){let l=T3({run:e.run,workerName:e.workerName,canonicalDir:r,harnessRoot:e.harnessRoot});if(l)return re(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=bn(r),u=gk().some(d=>bn(Qt.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:Qt.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 re(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 zT(a,r)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",re(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 M3(e,t){let r=Qt.join(q(e.id),"workers");if(!bn(r))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of C3(r,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function XT(){let{harnessRoot:e}=ke(),t=Rk(e),r=[];for(let n of xe()){let o=P3(e,n.id);o&&r.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),N3(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 M3(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:yn(e,n.id,i),statusPath:Qt.join(yn(e,n.id,i),"worker.json")}},ze(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(...D3({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:r,runMetadataRetention:t}}var QT=p(()=>{"use strict";Ln();Vi();hk();Zs();Q();D()});import{execFileSync as ZT}from"node:child_process";import eN from"node:path";function _k(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:null}function L3(e){let t=_k(e)?.match(/\/pull\/(\d+)$/);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function B3(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function U3(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 F3(e){let t=null;if(typeof e=="string"?t=Xo(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=_k(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 W3(e){try{let n=ZT("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=ZT("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:_k(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 K3(e){let t=Ne(e.heartbeatPath);return e.completionSnapshot?.finalResult??mr(t)}function $3(e){let t=new Map,r=q(e.id);for(let n of It(e)){let o=K(eN.join(r,"workers",B(n),"worker.json"),void 0);if(o)for(let s of F3(K3(o))){let i=L3(s.prUrl);i!=null&&!t.has(i)&&t.set(i,s)}}return t}function H3(e,t){let r=Ne(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,r.lastHeartbeatSummary,B3(t)].filter(Boolean).join(`
|
|
184
|
+
`);return U3(n)}function j3(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function xk(e={}){let t=e.lookupPr??W3,r=[],n=new Map;for(let o of xe()){let s=$3(o),i=q(o.id);for(let a of It(o)){let l=eN.join(i,"workers",B(a),"worker.json"),c=K(l,void 0);if(!c||!j3(c))continue;let u=le(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of H3(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",re(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 tN=p(()=>{"use strict";Ln();Dc();Pe();Q();Jo();D()});import V3 from"node:path";function J3(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function rN(e,t){let r=Td({worker:e,status:t}),n=r?Nd(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 q3(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 Ck(){let e=XT();if(J3()){let s=xk(),i=wk();return{workers:[],finalizedRuns:dl(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let t=[],r=Date.now();for(let s of xe())for(let i of It(s)){let a=V3.join(q(s.id),"workers",B(i),"worker.json"),l=K(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=le(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=rN(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",re(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=rN(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,q3(l,c),re(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>G3,m=Number.isFinite(d)&&r-d>Fm;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}`,re(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=xk(),o=wk();return{workers:t,finalizedRuns:dl(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}var G3,Ek=p(()=>{"use strict";hn();Q();Jo();Ay();Pe();D();QT();tN();Zs();G3=900*1e3});import{readdirSync as Y3,readFileSync as z3}from"node:fs";function t8(e){if(process.platform!=="linux"||!e.trim())return null;let t=[];try{t=Y3("/proc")}catch{return null}for(let r of t)if(/^\d+$/.test(r)&&Number(r)!==process.pid)try{if(z3(`/proc/${r}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(r)}catch{}return null}async function nN(e){let t=Br(),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??Q3,i=e.findOrphanPid??t8,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-Z3).toISOString(),limit:e8})}catch{return yo.recoveryStoreFailures+=1,r}for(let c of l){let u=c.idempotencyKey.slice(X3.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=Ga(f);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(S=>{if(g===null)return!0;let _=Ga(S.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return _===null||_>=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})){Ld({taskId:d,leaseToken:f}),a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"finalized_late"});continue}if(k&&v){let S=e.worktreePathFor({runId:k,workerName:v}),_=S?i(S):null;if(_!==null){yo.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"deferred_orphan",detail:`live pid ${_} references ${S}`});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 w=await e.releaseClaim({taskId:d,leaseToken:f,runId:k});w.released?(Bs({taskId:d,leaseToken:f},"restart_recovery"),v&&(qa(k,v),mn(k,v)),yo.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"released"})):w.transportError?a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"deferred_transport",detail:w.detail}):(Bs({taskId:d,leaseToken:f},"restart_recovery_refused"),a.push({taskId:d,leaseToken:f,runId:k,workerName:v,action:"release_refused",detail:w.detail}))}catch{yo.recoveryStoreFailures+=1}}return{mode:t,scanned:l.length,outcomes:a}}function oN(){return{"dispatchReceipts.recoveredStrandedClaims":yo.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":yo.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":yo.recoveryStoreFailures}}var X3,Q3,Z3,e8,yo,Ak=p(()=>{"use strict";ln();Us();fo();Ws();X3="dispatch:claim:",Q3=900*1e3,Z3=10080*60*1e3,e8=200,yo={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0}});import r8 from"node:path";async function iN(e){if(sN||Br()!=="enforce")return null;sN=!0;try{let t=Be().runnerId,r=await nN({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>r8.join(ke().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await cl({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:Ua(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 sN,aN=p(()=>{"use strict";Q();Fa();xr();lk();Ak();Us();sN=!1});import n8 from"node:os";function lN(e,t={}){let r=A(),n=(t.boxKind??Pt(r)).trim().toLowerCase()||"forge",o=t.hostLabel??n8.hostname();return{boxId:os({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:BC()}}var cN=p(()=>{"use strict";$();We();ss();Ou()});import o8 from"node:path";async function np(e){let t=e.pipeline===!0||e.pipeline==="true";try{let r=se(String(At(String(e.run||""),"--run"))),n=String(At(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=Be({runId:r.id}).runnerId,a=await uO({run:r.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(r.workers||{})){let m=K(o8.join(q(r.id),"workers",B(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let g=le(m);if(g.alive||g.finalResult||m.completionReportedAt)continue;try{let k=await Gs({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=ud({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 Pk=p(()=>{"use strict";$();Ve();Q();Pe();D();Fa();xr();Js()});async function uN(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 dN=p(()=>{"use strict";$();Ve()});import s8 from"node:path";async function pN(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=K(s8.join(q(r.id),"workers",B(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=le(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 uN({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,re(r.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}var fN=p(()=>{"use strict";Pe();Q();D();dN()});function mN(e){let t=e.replace(/\\/g,"/").replace(/\/+$/,"");if(t==="node_modules"||t.startsWith("node_modules/"))return!0;for(let r of Ik)if(t===r||t.startsWith(`${r}/`))return!0;return!1}var Ik,Ok=p(()=>{"use strict";Ik=[".next",".turbo","dist","build",".cache","node_modules/.cache"]});function wt(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!mN(n)})}var ko=p(()=>{"use strict";Ok()});function bo(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 fl(e){let t=e.gitAncestry?.relation;return t==="merged"||t==="synced"?wt(e.changedFiles).length>0:!!(bo(e.finalResult)||t==="ahead"||t==="diverged"||e.changedFiles.length>0&&e.finalResult)}var ml=p(()=>{"use strict";ko()});function gl(e){return e.status||(e.status=le(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Tk(e,t){if(e.status)return wt(e.status.changedFiles).length>0;let r=t?t.porcelain(e.worktreePath):Li(e.worktreePath);return wt(r).length>0}function i8(e){let t=e.worker.completionSnapshot?.finalResult;return t??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Nk(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=i8(e);if(o&&!oe(r.pid)){let i=t?.gitStatusCache?t.gitStatusCache.porcelain(e.worktreePath):Li(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"}:mc(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??bo(s)};return e.status=u,u}return gl(e)}var op=p(()=>{"use strict";_e();Pe();ko();ml();D()});function a8(e,t=Date.now(),r=pl){let n=Ne(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=t-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<r}function ei(e,t=Date.now(),r=pl){return oe(e.pid)?!0:a8(e,t,r)}var sp=p(()=>{"use strict";Ln();Zs();D()});function l8(e,t){return t?t.runTerminalCache.derive(e.run):go(e.run)}function Kr(e,t=Date.now()){return ei(e.worker,t)}function Dk(e,t){return Wr.has(e.run.status)?!1:l8(e,t)!==null}function gN(e,t,r=Date.now()){if(Kr(e,r))return!0;if(Wr.has(e.run.status)||Dk(e,t))return!1;let n=gl(e);return $e(n)?!1:!!Kr(e,r)}var Mk=p(()=>{"use strict";hn();Pe();op();sp()});function hN(e,t){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(Kr(e))return!0;let n=t??gl(e);return!!(!$e(n)||fl(n)||wt(n.changedFiles).length>0||zo({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:bo(n.finalResult)}).blocked)}var yN=p(()=>{"use strict";Nc();op();ko();Mk();Pe();ml()});import{existsSync as bN,mkdirSync as c8,writeFileSync as kN}from"node:fs";import ip from"node:path";function vN(e,t,r){return ip.join(e,"salvage",B(t),B(r))}function RN(e){return bN(ip.join(vN(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function wN(e){let t=vN(e.harnessRoot,e.indexed.runId,e.indexed.workerName);c8(t,{recursive:!0});let r=ip.join(t,"salvage.patch"),n=!1;if(bN(e.indexed.worktreePath)){let s=te(e.indexed.worktreePath,["diff","HEAD"]),i=te(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
185
|
+
`);a.trim()&&(kN(r,a.endsWith(`
|
|
180
186
|
`)?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
|
|
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
|
|
184
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(
|
|
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
|
|
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+=`
|
|
187
|
+
`),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 kN(ip.join(t,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
188
|
+
`),o}var SN=p(()=>{"use strict";_e();D()});import ap from"node:path";function d8(e){e.writeSalvageEvidence&&u8.has(e.skipReason)&&(Kr(e.indexed,e.now)||RN({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||wN({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function p8(e){let{indexed:t,worktreesAgeMs:r,terminalWorktreesAgeMs:n}=e;return t&&(Wr.has(t.run.status)||e.liveness&&Dk(t,e.liveness)||e.liveness&&$e(Nk(t,e.liveness))&&!Kr(t))?n:r}function f8(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:p8(e)}function m8(e,t){if(e.harnessRoot?.trim())return ap.resolve(e.harnessRoot);let r=t.worker.workerDir;if(!r)return null;let n=`${ap.sep}runs${ap.sep}`,o=r.indexOf(n);return o<0?null:r.slice(0,o+n.length-1)}function _N(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=f8(e);if(n<=0&&!r&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(Kr(t,a))return"active_worker";let c=Nk(t,e.liveness),u=m8(e,t),d=g=>{if(u)try{d8({indexed:t,harnessRoot:u,skipReason:g,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return g};if(hN(t,c)){let g=d("completion_blocked");if(g)return g}if(Tk(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(gN(t,e.liveness,a)||!$e(c))return"run_still_active";if(fl(c)){let g=d("pr_or_unmerged_commits");if(g)return g}if(wt(c.changedFiles).length>0){let g=d("dirty_worktree");if(g)return g}if(zo({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:bo(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 Lk(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(ap.resolve(o))||t&&Kr(t)?"active_worker":t&&Tk(t,e.gitStatusCache)?"dirty_worktree":null}function xN(e){return Lk(e)}var u8,CN=p(()=>{"use strict";Nc();op();Pe();hn();Mk();yN();SN();ko();ml();ko();ml();u8=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"])});var lp=p(()=>{"use strict"});function AN(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)EN.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||EN.has(s.skipReason)&&o(s.path,s.skipReason);return r}var EN,PN=p(()=>{"use strict";lp();EN=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"])});import IN from"node:path";function h8(e,t){return ei(e,t)}function ON(e,t=Date.now()){let r=new Set,n=new Set;for(let o of e){for(let s of lu(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=K(IN.join(oa(o,s.id),"workers",B(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=IN.resolve(l.worktreePath);h8(l,t)&&(i=!0,r.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of YT(o))n.add(s)}return{activeWorktreePaths:r,liveRunKeys:n}}function TN(e,t,r,n){return r?n.has(`${t}\0${r}`):!1}var Bk=p(()=>{"use strict";Q();Ot();Zs();sp();D()});import{existsSync as NN,readdirSync as DN,statSync as y8}from"node:fs";import MN from"node:path";function k8(e,t){try{let r=y8(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function b8(e,t){let r=MN.join(e,"runs",t,"run.json");return NN(r)?K(r,null):null}function LN(e){try{return DN(e).length===0}catch{return!1}}function BN(e){let{harnessRoot:t,runId:r,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(TN(n,t,r,i.liveRunKeys)||!LN(n))return"run_still_active";let a=b8(t,r);return a&&!Wr.has(a.status)&&!go(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function UN(e){if(!NN(e.worktreesDir))return[];let t=[],r;try{r=DN(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=MN.join(e.worktreesDir,o);LN(s)&&t.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:k8(s,e.now)})}return t}var FN=p(()=>{"use strict";Bk();hn();D()});import{execFileSync as v8}from"node:child_process";import{existsSync as WN,readdirSync as R8,statSync as w8}from"node:fs";import S8 from"node:path";function x8(e,t=_8){if(!WN(e))return 0;try{let n=v8("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 $r(e,t=5e4){if(!WN(e))return 0;let r=x8(e);if(r!==null)return r;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=R8(i)}catch{continue}for(let l of a){if(o++>t)return null;let c=S8.join(i,l),u;try{u=w8(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}var _8,hl=p(()=>{"use strict";_8=2500});import{lstatSync as C8,readdirSync as E8}from"node:fs";function KN(e){try{let t=C8(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 $N(e,t=32){let r=KN(e);if(!r)return!1;if(r.foreign)return!0;try{let n=E8(e),o=0;for(let s of n){if(o>=t)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=KN(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}var HN=p(()=>{"use strict"});import St from"node:path";function jN(e,t,r,n){let o=St.resolve(e),s=`${St.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=St.relative(r,i);if(a.startsWith("..")||St.isAbsolute(a))return"path_outside_harness";let l=a.split(St.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(St.resolve(t))?"path_outside_harness":null}function cp(e,t,r){return jN(e,t,r,"node_modules")}function up(e,t,r){return jN(e,t,r,".next")}function dp(e,t,r){let n=St.resolve(e),o=St.relative(r,n);return o.startsWith("..")||St.isAbsolute(o)||o.split(St.sep).length<3||!n.startsWith(St.resolve(t))?"path_outside_harness":null}function VN(e,t,r){let n=St.resolve(e);return cp(n,t,r)===null||up(n,t,r)===null||dp(n,t,r)===null}var Uk=p(()=>{"use strict"});import{spawnSync as A8}from"node:child_process";import GN from"node:path";function qN(){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 JN(e){let t=A8("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:t.status===0,stderr:`${t.stderr??""}${t.stdout??""}`.trim()}}function YN(e,t,r){if(!VN(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=JN(["chown","-R",`${n}:${o}`,GN.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=JN(["rm","-rf",GN.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 Fk,zN=p(()=>{"use strict";Uk();Fk="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 P8,rmSync as I8}from"node:fs";function O8(e){let t=e?.code;return t==="EACCES"||t==="EPERM"}function XN(e,t,r={}){if(!P8(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?ds(n):null,i=e.bytes??$r(e.path)??void 0,a=r.removePath??I8,l=r.hasForeignOwnedEntry??$N;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!O8(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=qN();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Fk}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=YN(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}; ${Fk}`}}}var QN=p(()=>{"use strict";hl();Ot();HN();zN()});import{existsSync as Wk,rmSync as ZN}from"node:fs";function Kk(e){let t=e.harnessRoot;return!t||!GT(e.path,t)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function $k(e,t){let r=Kk(e);if(r)return r;let n=XN(e,t);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function e0(e,t){return $k(e,t)}function t0(e,t){return $k(e,t)}function r0(e,t){return $k(e,t)}function n0(e,t){let r=Kk(e);if(r)return r;if(!Wk(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??$r(e.path);return ZN(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 o0(e,t){let r=Kk(e);if(r)return r;if(!Wk(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??$r(e.path);return n&&ue(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Wk(e.path)&&ZN(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 s0=p(()=>{"use strict";_e();hl();QN();Zs();Uk()});import{existsSync as pp,readdirSync as fp,statSync as T8}from"node:fs";import Zt from"node:path";function Hk(e,t){try{let r=T8(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function a0(e,t){let r=Zt.relative(t,e);return r===""||!r.startsWith("..")&&!Zt.isAbsolute(r)}function i0(e,t,r,n){let o=[];for(let s of Ik){if(s===".next")continue;let i=Zt.join(e,s);if(!pp(i))continue;let a=Zt.resolve(i);r.has(a)||a0(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:Hk(a,t.now)}))}return o}function l0(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||t.push(...i0(n.worktreePath,e,r,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!pp(e.worktreesDir))return t;for(let n of fp(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Zt.join(e.worktreesDir,n.name);for(let s of fp(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Zt.join(o,s.name);t.push(...i0(i,e,r,{runId:n.name,worker:s.name}))}}return t}function c0(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;pp(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:Hk(a,e.now)})))}if(!r||!pp(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Zt.resolve(i.worktreePath));for(let i of fp(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Zt.join(e.worktreesDir,i.name),l;try{l=fp(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Zt.resolve(Zt.join(a,c.name));o.has(u)||s.has(u)||a0(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Hk(u,e.now)}))}}return n}var u0=p(()=>{"use strict";Ok()});import{existsSync as f0,readdirSync as d0,statSync as N8}from"node:fs";import ti from"node:path";function M8(e,t){try{let r=N8(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function L8(e,t){let r=ti.relative(t,e);return r===""||!r.startsWith("..")&&!ti.isAbsolute(r)}function B8(e,t,r,n,o,s){if(!f0(n))return;let i=ti.resolve(n);t.has(i)||L8(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:M8(i,r.now)}))}function p0(e,t,r,n,o){for(let s of D8)B8(e,t,r,ti.join(n,s.dirName),s.kind,o)}function m0(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||p0(t,r,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!f0(e.worktreesDir))return t;for(let n of d0(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=ti.join(e.worktreesDir,n.name),s;try{s=d0(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=ti.join(o,i.name);p0(t,r,e,a,{runId:n.name,worker:i.name})}}return t}var D8,g0=p(()=>{"use strict";D8=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}]});import{existsSync as h0,statSync as U8}from"node:fs";import er from"node:path";function F8(e,t){try{let r=U8(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function W8(e){let t=[],r=null;for(let n of e.split(`
|
|
189
|
+
`)){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 K8(e,t){let r=er.relative(er.resolve(t),er.resolve(e));return r!==""&&!r.startsWith("..")&&!er.isAbsolute(r)}function y0(e){if(!e.includeOrphans||!h0(e.worktreesDir))return[];let t=new Set;for(let s of e.index.values())s.run.repo&&t.add(er.resolve(s.run.repo));let r=new Set;for(let s of e.index.values())r.add(er.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=W8(a);for(let c of l){if(i>=$8)break;let u=er.resolve(c.path);if(u===er.resolve(s)||!K8(u,e.worktreesDir)||r.has(u)||o.has(u)||!h0(u))continue;let f=er.relative(e.worktreesDir,u).split(er.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:F8(u,e.now)})}}return n}var $8,k0=p(()=>{"use strict";_e();$8=200});import yl from"node:path";function b0(e,t){let r=yl.resolve(t),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?yl.resolve(s.harnessRoot):null;i&&i!==r||n.set(o,s)}return n}function v0(e){let t=new Map;for(let r of lu(e))for(let n of Object.keys(r.workers||{})){let o=yl.join(oa(e,r.id),"workers",B(n),"worker.json"),s=K(o,void 0);s?.worktreePath&&t.set(yl.resolve(s.worktreePath),{harnessRoot:e,worktreePath:yl.resolve(s.worktreePath),runId:r.id,workerName:n,run:r,worker:s})}return t}var R0=p(()=>{"use strict";Q();D()});function kl(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function vo(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?n:t}function Vk(e={}){let t=e.execute===!0||e.execute!==!1&&kl("KYNVER_CLEANUP_EXECUTE"),r=e.finalizeStaleRuns!==!1&&!kl("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??vo("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??vo("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??vo("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??vo("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??vo("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||kl("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=kl("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&&!kl("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=vo("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),g=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,h=vo("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 x0(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 Vk({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 C0=p(()=>{"use strict";lp()});import{existsSync as Gk,statSync as j8}from"node:fs";import Ro from"node:path";function V8(e,t){let r=Ro.relative(t,e);return r===""||!r.startsWith("..")&&!Ro.isAbsolute(r)}function G8(e,t,r){if(!Gk(e))return!1;try{let n=t-j8(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function Jk(e){if(!e.runId||!e.workerName)return!1;let t=e.now??Date.now(),r=e.heartbeatFreshMs??E0,n=Ro.resolve(e.harnessRoot,"runs"),o=Ro.resolve(n,e.runId,"workers",e.workerName);if(!V8(o,n))return!1;let s=K(Ro.join(o,"worker.json"),void 0);return s&&ei(s,t,r)?!0:s?!1:G8(Ro.join(o,"heartbeat.jsonl"),t,r)}function A0(e){let t=e.now??Date.now(),r=e.heartbeatFreshMs??E0;if(!Gk(e.worktreePath))return null;if(e.runId&&e.workerName&&Jk(e))return"active_worker";let n=Ro.join(e.worktreePath,".git");if(!Gk(n))return null;let o=te(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
190
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(wt(s).length>0)return"dirty_worktree";let i=te(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=te(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 E0,P0=p(()=>{"use strict";_e();ko();sp();D();E0=1800*1e3});import{existsSync as J8,readdirSync as I0,statSync as q8}from"node:fs";import Y8 from"node:path";function O0(e={}){let t=Le(e.harnessRoot??gt()),r=ds(t),n=e.now??Date.now(),o=new Date(n).toISOString();if(!J8(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=I0(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=Y8.join(r,u.name);try{let f=q8(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of I0(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=$r(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 T0=p(()=>{"use strict";Ot();hl()});import{existsSync as z8}from"node:fs";import{homedir as X8}from"node:os";import N0 from"node:path";function qk(e,t,r){if(!r?.trim())return;let n=Le(r.trim());e.has(n)||(e.add(n),t.push(n))}function Z8(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 D0(e={}){let t=new Set,r=[];qk(t,r,e.harnessRoot??gt());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])qk(t,r,o);if(Z8(e))for(let o of Q8){let s=N0.resolve(o);!t.has(s)&&z8(s)&&qk(t,r,s)}return r}var Q8,M0=p(()=>{"use strict";Ot();Q8=["/var/tmp/kynver-harness",N0.join(X8(),".openclaw","harness")]});function e5(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function t5(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function L0(e={}){let t=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",r=t5("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=qr({...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 B0(e,t){if(!t.pressured)return e;let r=e.execute||!e5("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 U0=p(()=>{"use strict";Ki();lp()});import{unlinkSync as r5}from"node:fs";function mp(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function F0(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function n5(e,t,r){return e.length===0?[]:r?[...e]:e.length<=t?[]:e.slice(t)}function W0(e={}){let t=e.execute===!0||mp("KYNVER_WSL_CRASH_DUMP_EXECUTE")||mp("KYNVER_CLEANUP_EXECUTE"),r=e.purgeAll===!0||mp("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??F0("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",r?0:1)),o=Go({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=n5(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{r5(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 K0(e){return e?mp("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>F0("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}var $0=p(()=>{"use strict";Rc()});function _t(e,t){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let r=t?`: ${t}`:"";console.error(`[kynver cleanup] ${e}${r}`)}var H0=p(()=>{"use strict"});var gp,j0=p(()=>{"use strict";_e();gp=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=te(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 o5}from"node:child_process";import{existsSync as s5}from"node:fs";import i5 from"node:path";function l5(e,t){if(!s5(i5.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let r=o5("git",t,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:a5}),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 V0(e){let t=l5(e,["status","--short"]);return t.error==="not_a_git_repo"?[]:t.error==="git_timeout"||t.status!==0?null:t.stdout.split(`
|
|
191
|
+
`).map(r=>r.trim()).filter(Boolean)}var a5,G0=p(()=>{"use strict";a5=5e3});var hp,J0=p(()=>{"use strict";G0();hp=class{cache=new Map;porcelain(t){let r=t,n=this.cache.get(r);if(n!==void 0)return n;let o=V0(r)??[];return this.cache.set(r,o),o}}});var yp,q0=p(()=>{"use strict";hn();yp=class{cache=new Map;derive(t){let r=this.cache.get(t.id);if(r!==void 0)return r;let n=go(t);return this.cache.set(t.id,n),n}}});function c5(e){let t={};for(let r of e)t[r.kind]=(t[r.kind]??0)+1;return t}function Y0(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:c5(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 z0=p(()=>{"use strict"});import xt from"node:path";function u5(e={}){let t=e.harnessRoot?Le(e.harnessRoot):gt(),r=D0({harnessRoot:t}),n=e.now??Date.now();return{harnessRoot:t,scanRoots:r,now:n}}function d5(e){return typeof e=="string"?{reason:e}:e}function ri(e,t,r,n){e.push({path:t,reason:r,...n?{detail:n}:{}})}function kp(e,t,r){return!t||e.bytes!=null?e:{...e,bytes:$r(e.path,r)}}function X0(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 p5(e,t){return e.kind==="remove_next_cache"?t0(e,t):e0(e,t)}function f5(e,t,r){return e.kind==="remove_next_cache"?up(e.path,t,r):cp(e.path,t,r)}function m5(e){let t=new Map;for(let r of e)for(let[n,o]of v0(r))t.set(n,o);return t}function Q0(e,t){return e.runId&&e.worker?xt.join(t,e.runId,e.worker):xt.resolve(e.path,"..")}function Z0(e){return e.indexed?!1:Jk({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function g5(e={}){let t=Vk(e),r=L0();t=B0(t,r);let n=u5(e);_t("scan",`${n.scanRoots.length} harness root(s)`);let o=ON(n.scanRoots,n.now),s=t.finalizeStaleRuns?dl().map(O=>({runId:O.runId,from:O.from,to:O.to})):[];s.length>0&&_t("finalize",`${s.length} stale run(s) marked terminal`),_t("index","building worktree index");let i=m5(n.scanRoots);_t("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new yp,gitStatusCache:new hp,gitRevCache:new gp},l=[],c=[],u=new Set,d=t.maxActionsPerSweep,f=()=>c.length>=d;for(let O of n.scanRoots){if(f())break;_t("root",O);let T=xt.join(O,"worktrees"),U=b0(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?m0(N):[];_t("dependency",t.scanDependencyCaches?`${J.length} cache candidate(s) at ${O}`:"skipped (worktree-only sweep)");let W=0;for(let C of J){if(f())break;W+=1,W%50===0&&_t("dependency",`${W}/${J.length} evaluated`);let I=xt.resolve(C.path);if(u.has(I))continue;u.add(I);let M={...C,path:I},ne=f5(M,O,T);if(ne){ri(l,M.path,ne),c.push({...M,executed:!1,skipped:!0,skipReason:ne});continue}let V=Q0(M,T),Z=U.get(xt.resolve(V))??null,pe=Z0({candidate:M,indexed:Z,harnessRoot:O,now:n.now}),Y=Lk({indexed:Z,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:V,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Y){ri(l,M.path,Y),c.push({...M,executed:!1,skipped:!0,skipReason:Y});continue}c.push(p5(kp(M,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(t.scanDependencyCaches)for(let C of l0(N)){if(f())break;let I=xt.resolve(C.path);if(u.has(I))continue;u.add(I);let M={...C,path:I},ne=dp(M.path,O,T);if(ne){ri(l,M.path,ne),c.push({...M,executed:!1,skipped:!0,skipReason:ne});continue}let V=Q0(M,T),Z=U.get(xt.resolve(V))??null,pe=Z0({candidate:M,indexed:Z,harnessRoot:O,now:n.now}),Y=xN({indexed:Z,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:M.ageMs,worktreePath:V,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(Y){ri(l,M.path,Y),c.push({...M,executed:!1,skipped:!0,skipReason:Y});continue}c.push(r0(kp(M,t.accountBytes,t.byteAccountingEntryCap),t.execute))}let F=[...c0(N),...y0(N)];_t("worktrees",`${F.length} candidate(s) at ${O}`);let x=new Set,G=0;for(let C of F){if(f())break;G+=1,G%50===0&&_t("worktrees",`${G}/${F.length} evaluated`);let I=xt.resolve(C.path);if(x.has(I))continue;x.add(I);let M={...C,path:I},ne=U.get(xt.resolve(M.path))??null,V=ne?null:A0({worktreePath:M.path,harnessRoot:O,runId:M.runId,workerName:M.worker,now:n.now}),Z=_N({indexed:ne,worktreePath:xt.resolve(M.path),includeOrphans:t.includeOrphans,worktreesAgeMs:t.worktreesAgeMs,terminalWorktreesAgeMs:t.terminalWorktreesAgeMs,ageMs:M.ageMs,orphanSafety:V,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:O,writeSalvageEvidence:t.execute});if(Z){let{reason:pe,detail:Y}=d5(Z);ri(l,M.path,pe,Y),c.push({...M,executed:!1,skipped:!0,skipReason:pe});continue}c.push(o0(kp(M,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(!f()&&t.runDirectoriesAgeMs>=0)for(let C of UN({harnessRoot:O,worktreesDir:T,runDirectoriesAgeMs:t.runDirectoriesAgeMs,runIdFilter:t.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let I=xt.resolve(C.path);if(u.has(I))continue;u.add(I);let M={...C,path:I},ne=M.runId??xt.basename(I),V=BN({harnessRoot:O,runId:ne,runPath:I,ageMs:M.ageMs,runDirectoriesAgeMs:t.runDirectoriesAgeMs,activeGuards:o});if(V){ri(l,M.path,V),c.push({...M,executed:!1,skipped:!0,skipReason:V});continue}c.push(n0(kp(M,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?O0({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:t.storagePerRunEntryCap}):void 0,w=Go(),S=t.execute&&K0(w),_=S?W0({execute:!0}):null,R=w?{observed:!0,execute:S,dumpCount:w.dumpCount,totalBytes:w.totalBytes,removedCount:_?.removed.length??0,removedBytes:_?.removedBytes??0,executables:w.executables,path:w.path,reason:w.reason}:void 0;_&&_.removed.length>0&&(y+=_.removedBytes,b+=_.removed.length,_t("wsl-crashes",`removed ${_.removed.length} dump(s), ${_.removedBytes} bytes`)),_t("complete",`${c.length} action(s), ${k} skipped, ${b} removed`);let L=AN(c,l),j=Y0({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:X0(c,l)},...v?{storage:v}:{},...L.length>0?{preservedLivePaths:L}:{},...g>0?{removedRunDirectories:g}:{},...R?{wslCrashDumps:R}:{}});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:X0(c,l)},...v?{storage:v}:{},...L.length>0?{preservedLivePaths:L}:{},...g>0?{removedRunDirectories:g}:{},...R?{wslCrashDumps:R}:{},compactSummary:j}}function eD(e){let t=x0(e);return g5({execute:t.execute,finalizeStaleRuns:t.finalizeStaleRuns,accountBytes:t.accountBytes,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter})}function tD(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}var rD=p(()=>{"use strict";Ot();CN();PN();FN();s0();u0();g0();k0();R0();hn();hl();C0();P0();T0();M0();Bk();U0();$0();Rc();H0();j0();J0();q0();z0()});function nD(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 bp(e,t){let r=nD(e),n=nD(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 h5,VNe,Yk=p(()=>{"use strict";Bi();h5={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},VNe=Object.keys(h5)});import{readFile as y5}from"node:fs/promises";import{homedir as k5}from"node:os";import vn from"node:path";function ni(e){let t=e?.trim();return t||null}function v5(e){return[...new Set(e.filter(t=>!!t))]}function oD(){let e=k5(),t=ni(process.env.KYNVER_OPENCLAW_NPM_ROOT)??ni(process.env.OPENCLAW_NPM_ROOT)??vn.join(e,".openclaw","npm"),r=ni(process.env.KYNVER_NPM_GLOBAL_ROOT)??ni(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(ni(process.env.NPM_CONFIG_PREFIX)?vn.join(ni(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):vn.join(e,".npm-global","lib","node_modules"));return v5([vn.join(t,"lib","node_modules"),vn.join(t,"node_modules"),r.endsWith("node_modules")?r:vn.join(r,"lib","node_modules")])}async function R5(e){try{let t=JSON.parse(await y5(e,"utf8"));return typeof t.version=="string"&&t.version.trim()?t.version.trim():null}catch{return null}}function sD(){return oD().map(e=>vn.join(e,"@kynver-app"))}function zk(e){let t=oD(),r=new Set,n=[];for(let o of t){let s=vn.join(o,e,"package.json");r.has(s)||(r.add(s),n.push(s))}return n}async function iD(e=new Date().toISOString()){let t={};for(let r of b5){let n=null;for(let o of zk(r)){let s=await R5(o);s&&(!n||bp(s,n.version)>0)&&(n={version:s,path:o})}n&&(t[r]={version:n.version,observedAt:e,path:n.path})}return t}var b5,Xk=p(()=>{"use strict";Yk();b5=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"]});import{spawnSync as w5}from"node:child_process";var S5,_5,aD,lD=p(()=>{"use strict";S5=1e4,_5=4*1024*1024,aD=(e,t,r)=>{try{let n=w5(e,t,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:r?.timeoutMs??S5,maxBuffer:_5});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 vp(e,t,r){return`${e} ${t} ${r}`}function Qk(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 cD(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 Rp=p(()=>{"use strict"});function tb(){return Date.now()<Zk}function I5(e){let t=`${e.stdout}
|
|
192
|
+
${e.stderr}`.toLowerCase();return t.includes("api rate limit exceeded")||t.includes("rate limit exceeded")||t.includes("secondary rate limit")}function uD(e){I5(e)&&(Zk=Math.max(Zk,Date.now()+P5))}function eb(e,t){if(tb())return null;let r=e("gh",["api",...t]);if(!r.ok||!r.stdout.trim())return uD(r),null;try{return JSON.parse(r.stdout)}catch{return null}}function O5(e,t,r,n){if(tb())return null;let o=e("gh",["pr","view",String(r),"--repo",t,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return uD(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function rb(e){return tb()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function oi(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function T5(e){return Array.isArray(e)?e.map(t=>oi(t)).filter(t=>t!==null).slice(0,C5).map(t=>({context:t.context??null,state:t.state??null,target_url:t.target_url??null,description:t.description??null})):[]}function N5(e,t,r){let n=eb(e,[`repos/${t}/commits/${r}/status`]);return n?{state:n.state??null,statuses:T5(n.statuses)}:null}var x5,C5,E5,A5,P5,Zk,dD,pD,fD,mD=p(()=>{"use strict";Rp();x5=8e3,C5=30,E5=100,A5=400,P5=3600*1e3,Zk=0;dD={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:rb,collect(e,t){let r=cD(e);if(!r)return null;let n=O5(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=oi(n.author),s=oi(n.mergeCommit),i=oi(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,x5):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>oi(u)).filter(u=>u!==null).slice(0,E5).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=>oi(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,A5):[];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}}},pD={provider:"github",kind:"commit_status",version:"1",isAvailable:rb,collect(e,t){let r=Qk(e);return r?N5(t,r.repo,r.sha):null}},fD={provider:"github",kind:"branch_reachability",version:"1",isAvailable:rb,collect(e,t){let r=Qk(e);if(!r)return null;let n=eb(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=eb(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 nb(e){ob.some(t=>t.provider===e.provider&&t.kind===e.kind)||ob.push(e)}function gD(e,t){return ob.find(r=>r.provider===e&&r.kind===t)??null}function hD(){nb(dD),nb(pD),nb(fD)}var ob,yD=p(()=>{"use strict";mD();ob=[]});function kD(e,t={}){hD();let r=t.run??aD,n=t.now??(()=>new Date),o=t.maxSubjects??D5,s=Date.now()+(t.deadlineMs??M5),i=new Set,a=e.filter(m=>{let g=vp(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=vp(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=gD(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 w=b.collect(m.subject,r);if(w==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1;let S={provider:m.provider,kind:m.kind,subject:m.subject,payload:w,observedAt:n().toISOString(),collectorVersion:b.version};d.items.push(S),t.cache?.set(g,S,n())}return d}var D5,M5,bD=p(()=>{"use strict";lD();yD();Rp();D5=1,M5=25e3});import vD from"node:path";function RD(e){return vD.join(q(e),L5)}function F5(e){return vD.join(q(e),B5)}function wD(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 SD(e){let t=K(RD(e),null);return wD(t?.wanted)}function _D(e,t){Re(RD(e),{savedAt:new Date().toISOString(),wanted:t})}function xD(e,t={}){let r=t.ttlMs??U5,n=F5(e),s={...K(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 CD(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.providerEvidenceWanted;return Array.isArray(t)?wD(t):null}var L5,B5,U5,sb=p(()=>{"use strict";Q();D();Rp();L5="provider-evidence-wanted.json",B5="provider-evidence-cache.json",U5=600*1e3});import W5 from"node:path";function ib(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 V5(){return W5.join(ke().harnessRoot,K5)}function G5(e){let t=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),r=e==="github"?H5:j5;return ib(`KYNVER_PROVIDER_EVIDENCE_${t}_PER_MINUTE`,ib("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",r))}function ED(){return ib("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",$5)}function J5(e){return Math.floor(e.getTime()/6e4)*6e4}function q5(e){return`${e.provider}:${e.kind}`}function AD(e,t={}){let r=xD(e,{ttlMs:t.ttlMs??ED()}),n=t.file??V5(),o=K(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=t.ttlMs??ED(),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=G5(u.provider);if(m===0)return!0;let g=q5(u),h=J5(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 K5,$5,H5,j5,PD=p(()=>{"use strict";Q();D();sb();K5="provider-evidence-shared-cache.json",$5=6e4,H5=1,j5=1});function ID(e){let t=Qx(),r=Er(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(r.flags.dispatchReceipts!=="off"){Object.assign(o,RI());let s=vI({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,r.flags.dispatchReceipts==="enforce"&&Object.assign(o,oN())}return r.flags.planOutbox!=="off"&&Object.assign(o,UO()),r.flags.admission!=="off"&&(Object.assign(o,xI()),r.flags.admission==="enforce"&&Object.assign(o,PI())),(r.flags.keeper!=="off"||r.flags.meshLease!=="off"||r.flags.quota!=="off")&&Object.assign(o,cC()),{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 OD=p(()=>{"use strict";ln();Rs();Us();Ak();al();fo();Ws();ga()});import{createHash as TD}from"node:crypto";import{access as Y5,mkdir as I0e,readFile as ND,rename as O0e,writeFile as T0e}from"node:fs/promises";import{constants as z5}from"node:fs";import{homedir as ab}from"node:os";import et from"node:path";function Z5(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||et.join(ab(),".kynver","mcp-installations.json")}function e9(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||et.join(ab(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||et.join(ab(),".npm-global")}function t9(e){let t=et.resolve(e);if(et.basename(t)!=="node_modules")return t;let r=et.dirname(t);return et.basename(r)==="lib"?et.dirname(r):r}function r9(e,t){return[et.join(e,"lib","node_modules",t,"package.json"),et.join(e,"node_modules",t,"package.json")]}async function n9(e){try{return await Y5(e,z5.R_OK),!0}catch{return!1}}async function lb(e=Z5()){let t;try{t=JSON.parse(await ND(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||!Q5.test(r.inventoryKey)||!X5.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 o9(e,t,r){if(typeof e.bin=="string")return et.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"&&!et.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?et.join(r,s):null}function s9(e){return TD("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 i9(e){let t=[];for(let r of e){let n=t9(e9(r.prefix)),o=(await Promise.all(r9(n,r.packageName).map(async m=>({candidate:m,ok:await n9(m)})))).find(m=>m.ok)?.candidate;if(!o)continue;let s=JSON.parse(await ND(o,"utf8"));if(s.name!==r.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=et.dirname(o),a=o9(s,r,i),l=r.packageName==="@kynver-app/runtime",c=r.lifecycle??"runtime_stdio",u=TD("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:s9(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 DD(){return i9(await lb())}var X5,Q5,cb=p(()=>{"use strict";X5=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,Q5=/^[A-Za-z0-9._:-]{8,128}$/});import{createHash as a9,createHmac as l9,timingSafeEqual as c9}from"node:crypto";function ub(e){let t=e.trim().split(".");return t.length!==3||t[0]!=="krc1"||!t[1]||!t[2]?null:{tokenId:t[1],tokenHash:a9("sha256").update(`krc1.${t[1]}.${t[2]}`,"utf8").digest("hex")}}function MD(e,t,r){let n=ub(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=l9("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&c9(i,s)}var db=p(()=>{"use strict"});import{createHash as u9}from"node:crypto";import{access as pb,mkdtemp as d9,readFile as WD,rm as p9}from"node:fs/promises";import{constants as fb}from"node:fs";import{tmpdir as f9}from"node:os";import si from"node:path";import{spawn as m9}from"node:child_process";import{Client as g9}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as h9}from"@modelcontextprotocol/sdk/client/stdio.js";function KD(){return"npm"}function BD(e,t){return Buffer.byteLength(e)>=LD?e:(e+t.toString("utf8")).slice(0,LD)}function k9(e){let t=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),r=t&&si.isAbsolute(t)?t:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:mb,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 $D(e,t,r=gb,n){return new Promise((o,s)=>{let i,a;try{[i,a]=ie(e,t)}catch(m){s(m);return}let l=m9(i,a,{shell:!1,windowsHide:!0,detached:Se(),env:k9(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",m=>{c=BD(c,m)}),l.stderr.on("data",m=>{u=BD(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 b9(e,t){let[r,n]=t.split("-",2);return!n||!["sha256","sha384","sha512"].includes(r)?!1:u9(r).update(e).digest("base64")===n}async function v9(e,t,r,n){let o=await $D(KD(),["pack",`${e}@${t}`,"--json","--pack-destination",n,`--registry=${mb}`,"--ignore-scripts"],gb,si.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"||si.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=si.join(n,i);if(!b9(await WD(a),r))throw new Error("artifact_integrity_mismatch");return a}async function R9(e,t,r){if((await $D(KD(),["install","--global","--prefix",e,t,`--registry=${mb}`,"--no-audit","--fund=false"],gb,r)).code!==0)throw new Error("package_install_failed")}async function HD(e){let t=JSON.parse(await WD(e.local.packageJsonPath,"utf8"));if(t.name!==e.report.packageName||typeof t.version!="string")throw new Error("installed_identity_mismatch");return t.version}function w9(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 UD(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await pb(e.local.binPath,fb.X_OK).catch(async()=>pb(e.local.binPath,fb.R_OK));let t=new h9({command:e.local.binPath,args:[],env:w9(e.local.envAllowlist),stderr:"pipe"}),r=new g9({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")),y9)})]);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 FD(e,t,r,n,o){let s=await d9(si.join(f9(),"kynver-mcp-update-"));try{let i=await v9(t,r,n,s);if(await o(),await R9(e.local.prefix,i,si.join(s,"npm-cache")),await HD(e)!==r)throw new Error("installed_version_mismatch")}finally{await p9(s,{recursive:!0,force:!0})}}async function jD(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 pb(e.local.prefix,fb.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await HD(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 FD(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 UD(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 FD(e,t.packageName,t.installedVersion,t.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await UD(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 mb,LD,gb,y9,VD=p(()=>{"use strict";Ti();Fe();mb="https://registry.npmjs.org",LD=512*1024,gb=2*6e4,y9=2e4});import{createHmac as S9,timingSafeEqual as _9}from"node:crypto";import{mkdir as x9,readFile as C9,rename as E9,writeFile as A9}from"node:fs/promises";import{homedir as P9}from"node:os";import hb from"node:path";function bl(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||hb.join(P9(),".kynver","state","mcp-updates")}function GD(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return hb.join(bl(),`${e}.json`)}function JD(e,t){let r=ub(t);return r?S9("sha256",Buffer.from(r.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function qD(e,t){try{let r=JSON.parse(await C9(GD(e),"utf8"));if(r.version!==2||r.operationId!==e||typeof r.integrityMac!="string")return null;let{integrityMac:n,...o}=r,s=JD(o,t);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!_9(i,a)?null:r}catch{return null}}async function YD(e,t){let r=JD(e,t);if(!r)throw new Error("invalid_runner_credential_for_receipt");let n=GD(e.operationId);await x9(hb.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await A9(o,`${JSON.stringify({...e,integrityMac:r},null,2)}
|
|
193
|
+
`,{mode:384}),await E9(o,n)}var wp=p(()=>{"use strict";db()});import{randomBytes as yb}from"node:crypto";import{mkdir as kb,readFile as bb,rename as I9,rm as Sp,stat as O9,writeFile as zD}from"node:fs/promises";import wo from"node:path";function XD(){return wo.join(bl(),T9)}async function QD(){try{let e=JSON.parse(await bb(wo.join(XD(),"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:ZD(e.pid)}}catch{return null}}function ZD(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function N9(e){try{return await O9(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function eM(){return D9("mcp_update")}async function D9(e){let t=XD(),r=`${t}.reclaiming`;await kb(wo.dirname(t),{recursive:!0,mode:448});let n=!1;try{if(await N9(r))return null;for(let o=0;o<2;o+=1)try{await kb(t,{mode:448});let s={pid:process.pid,nonce:yb(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await zD(wo.join(t,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await Sp(r,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await bb(wo.join(t,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await Sp(t,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await kb(r,{mode:448}),n=!0,await zD(wo.join(r,"owner.json"),JSON.stringify({pid:process.pid,nonce:yb(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 bb(wo.join(t,"owner.json"),"utf8"))}catch{return null}if(ZD(i.pid))return null;let a=`${t}.stale-${process.pid}-${yb(8).toString("hex")}`;await I9(t,a),await Sp(a,{recursive:!0,force:!0})}return null}finally{n&&await Sp(r,{recursive:!0,force:!0})}}var T9,tM=p(()=>{"use strict";wp();T9="host-mutation.lock"});function _p(e,t,r){return`${e}/api/agent-os/by-id/${encodeURIComponent(t)}/mcp-updates/${r}`}function M9(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 rM(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 L9(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 nM(e){let t=me(e.baseUrl),r=await DD();if(r.length===0)return{ok:!0,stage:"not_configured"};let n=await Zn(_p(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 eM();if(!o){let s=await QD();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await Zn(_p(t,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=M9(s.response);if(!i)return{ok:!0,stage:"idle"};if(!MD(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await qD(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||!rM(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&&rM(a.recovery,i)?a.recovery:L9(k,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(k,v,w)=>{await YD({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:k,terminal:v,...w?{outcome:w}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let f="claimed",m=async k=>{if(!(await Zn(_p(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 jD(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 Zn(_p(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 oM=p(()=>{"use strict";$();Ve();cb();db();VD();tM();wp()});import sM from"node:path";function B9(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function U9(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=K(sM.join(q(r.id),"workers",B(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||Xr(a))continue;if(Wa(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=le(a);if(!$e(l))continue;let c=Yo({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await Gs({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 F9(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 iD(),c=ps(t),u=null;try{let S=SD(t);if(S.length>0){let _=AD(t);u=kD(S,{cache:_}),_.flush?.()}else u=null}catch{u=null}try{if(Ur()!=="off"){let S=Zo();_I({liveWorkers:S}),AI({liveWorkers:S})}else wI()}catch{}let d=({runId:S,workerName:_})=>{try{let{runsDir:R}=ke(),L=sM.join(wr(R,B(S)),"workers",B(_),"worker.json"),j=K(L,null);return j?Xr(j):!1}catch{return!1}};await iN({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let f=null;try{f=ID({hasLiveWorker:d})}catch{f=null}let m=null;try{m=Vc({control:Zr(e),supervisor:VS(),inFlightWorkers:Zo().length})}catch{m=null}let g=Nu(t),h=oE(),y=await fe(a,i,{agentOsId:e,runId:t,ingestHarness:!0,harnessBoardSnapshot:qy(t),resourceGate:r,boxResourceSnapshot:lN(r,{harnessRunId:t,boxKind:Pt(A())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Be({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=CD(y.response);if(b)try{_D(t,b)}catch{}let k=eE(y);if(k)try{ZC(t,k)}catch{}let v=eC(y);v&&tC(e,v);let w=FS(y);return w&&Vm(e,w),{ok:y.ok,httpStatus:y.status,response:y.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function xp(e){let t=String(At(String(e.run||""),"--run")),r=String(At(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";qy(t);let o=await Lu(r,e),s=Mu(o),i=Yi({runId:t,configuredMaxWorkersOverride:s}),a=tD()?eD(t):void 0,l=await F9(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 nM({agentOsId:r,secret:T,baseUrl:O,activeOwnedSessions:Zo().length})}catch(O){c={ok:!1,stage:"cycle",error:O instanceof Error?O.message:"update cycle failed"}}let u=rI(t,l),d=await JA(t,e),f=await U9(t,e);f.some(O=>O.ok&&!O.skipped)&&DC();let m=Yi({runId:t,configuredMaxWorkersOverride:s}),g=Ck(),h=await pN(t,e),y=LT(m,l),b=y.maxStarts,k=Zr(r),v=KS(k);v&&(b=0);let w=B9()?await np({run:t,agentOsId:r,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},S=null,_=0,R=DT(l),L=b;if(n&&L>0&&R.length>0){let O=Math.min(L,R.length),T=await fk({...e,run:t,agentOsId:r,targetTaskIds:R.join(",")},O),U=Xs(T);_+=U,L=Math.max(0,L-U),S={exactTargetTaskIds:R,exact:T,startedCount:_}}if(n&&L>0){let O=await fk({...e,run:t,agentOsId:r},L),T=Xs(O);_+=T,S=S&&typeof S=="object"?{...S,broad:O,startedCount:_}:O}else!n||b<=0?S||(S={ok:!0,skipped:!0,reason:v??(n?m.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:y,...R.length?{exactTargetTaskIds:R,exactOnly:!0}:{}}):S&&typeof S=="object"&&(S={...S,broadSkipped:!0,startedCount:_});let j=!y.underutilized&&b===0&&f.length===0&&_===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:w,dispatchAdvice:y,dispatch:S,idle:j,runtimeControl:k?{desiredState:k.desiredState,policyVersion:k.policyVersion}:null}}var vb=p(()=>{"use strict";en();cu();$();Ve();NT();MT();BT();Ek();es();fo();aN();Ws();cN();Ou();Q();Ot();Oc();Pe();Pk();D();fN();ty();Js();kd();Bc();vh();$();We();rD();Id();Xk();xr();bD();PD();sb();gh();OD();Qg();oM();hh()});function Cp(e){return rs(Zr(e))!=="stopped"?null:Zo().length}var Rb=p(()=>{"use strict";es();en()});function iM(e){if(!e||typeof e!="object")return!1;let t=e;return t.type==="result"&&typeof t.id=="number"&&typeof t.ok=="boolean"}var aM=p(()=>{"use strict"});import{existsSync as W9}from"node:fs";import{fileURLToPath as K9}from"node:url";import{SHARE_ENV as $9,Worker as H9}from"node:worker_threads";function V9(e=import.meta.url){for(let t of[`./${lM}`,`../${lM}`]){let r=new URL(t,e);try{if(W9(K9(r)))return r}catch{}}return null}function G9(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??rt()?{mode:"inline",reason:"desktop_sidecar"}:e.script?{mode:"thread",reason:"default"}:{mode:"inline",reason:"thread_entry_not_built"}}var lM,j9,J9,Ep,cM=p(()=>{"use strict";Et();hh();an();vb();Rb();aM();lM="daemon-tick-thread.js",j9=3;J9=(e,t)=>new H9(e,{workerData:t,env:$9,name:"kynver-pipeline-tick"}),Ep=class{constructor(t){this.options=t;this.script=t.script===void 0?V9():t.script;let r=G9({env:t.env,desktopMode:t.desktopMode,script:this.script});this.modeValue=r.mode,this.reason=r.reason,this.createWorker=t.createWorker??J9,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 nE(r),{tick:await xp(t),inFlightWorkers:Cp(this.options.agentOsId),isolation:"inline"}}bundleIfChanged(){let t=Nx(),r=Gt(),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(!iM(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>=j9&&(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 q9,performance as Y9}from"node:perf_hooks";var z9,X9,Q9,Z9,uM,Ap,dM=p(()=>{"use strict";z9=1e3,X9=250,Q9=5,Z9=5e3,uM=e=>Number.isFinite(e)?Math.round(e/1e6):0,Ap=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??z9,this.sampleIntervalMs=t.sampleIntervalMs??X9,this.now=t.now??Date.now,this.monotonicNow=t.monotonicNow??t.now??(()=>Y9.now()),this.log=t.log??(r=>console.error(r)),this.histogram=t.histogram??q9({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>Z9)return this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),null;let s=Math.max(0,Math.round(n-this.sampleIntervalMs)),i=uM(this.histogram.max),a=uM(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(-Q9),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 mM(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 gM(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 fM(e){let t=e?.code;return typeof t=="string"?t:null}function hM(e){if(!e)return!1;if(e instanceof Rn)return e7.has(e.status);let t=fM(e)??fM(e.cause);if(t&&t7.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 wb(e){return gM(e)?"aborted":hM(e)?"transient":"server"}function yM(e,t){let r=wb(e);if(r==="aborted")return t<=n7?0:o7;if(r==="transient"){let n=Math.max(0,Math.min(t-1,pM.length-1));return pM[n]}return r7}function kM(e,t){return e==="aborted"&&t<s7?{event:"chat_claim_poll_retry",level:"info"}:{event:"chat_claim_error",level:"error"}}var Rn,e7,t7,r7,n7,o7,pM,Pp,s7,Ip=p(()=>{"use strict";Rn=class extends Error{status;constructor(t){super(`claim failed: HTTP ${t}`),this.name="ClaimHttpError",this.status=t}},e7=new Set([502,503,504]),t7=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","EHOSTUNREACH","ENETUNREACH","ENETDOWN","UND_ERR_CONNECT_TIMEOUT"]),r7=5e3,n7=3,o7=1e3,pM=[0,1e3,5e3];Pp=class{counts={aborted:0,transient:0,server:0,auth:0,recovered:0};streakKind=null;streak=0;onError(t){let r=wb(t);return this.bump(r),{kind:r,consecutive:this.streak,backoffMs:yM(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}},s7=3});var i7,a7,l7,Op,bM=p(()=>{"use strict";pr();i7=5*6e4,a7=5*6e4,l7=2160*60*60,Op=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()>i7?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<a7)return;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/runner-credentials`;try{let n=await mt(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({capabilities:["chat.relay"],ttlSeconds:l7,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 mt(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 vM(e=process.env){return e.KYNVER_OPENAI_DEFAULT_MODEL?.trim()||c7}var c7,CMe,RM=p(()=>{"use strict";Ma();od();qt();c7="gpt-5.5",CMe=600*1e3});function tr(e){let t=e.chatProvider?.trim();return ii(t||e.workerProvider?.trim()||"cursor")}function ii(e){let t=Ye(e);return t==="cursor"||t==="agent"?"cursor":p7.has(t)?"gemini":wM.has(t)||wM.has(e.trim().toLowerCase())?"codex":SM.has(t)||SM.has(e.trim().toLowerCase())?"openai":(d7.has(t),"anthropic")}function So(e,t,r=process.env){let n=r.KYNVER_CHAT_MODEL?.trim();if(n){if(e==="cursor"){let s=Ps(n,vl);return s.ok?s.model:vl}if(e==="gemini"&&!Sb.test(n)&&!_b.test(n)||(e==="openai"||e==="codex")&&!Sb.test(n)&&!_M.test(n)||e==="anthropic")return n}let o=t.defaultModel?.trim();if(e==="cursor"){if(o&&!Sb.test(o)){let s=Ps(o,vl);return s.ok?s.model:vl}return vl}return e==="gemini"?o&&_M.test(o)?o:Ge(r):e==="codex"?o&&_b.test(o)?o:r.KYNVER_CODEX_DEFAULT_MODEL?.trim()||u7:e==="openai"?o&&_b.test(o)?o:vM(r):o||Ke}var vl,u7,d7,p7,wM,SM,Sb,_M,_b,wn=p(()=>{"use strict";eo();qt();La();RM();gr();Qu();vl="composer-2.5",u7=Ts,d7=new Set(["claude","anthropic","opus"]),p7=new Set(["gemini","gemini-api"]),wM=new Set(["codex","chatgpt","gpt"]),SM=new Set(["openai","openai-compatible","openai-api","openai_api"]);Sb=/^(?:claude[-_]|opus\b|sonnet\b|haiku\b)/i,_M=/^(?:gemini[-_]|flash\b|pro\b)/i,_b=/^(?:gpt-|o\d|chatgpt-)/i});var Tp,xM=p(()=>{"use strict";Tp=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 f7 from"node:os";function Rl(e=process.env){let t=A(),r=Pt(t,e);return os({boxKind:r,hostLabel:f7.hostname(),config:t,env:e})}async function m7(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(),CM);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 g7(o)}async function g7(e){let t=new AbortController,r=setTimeout(()=>t.abort(),CM);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 xb(e){return Ce()?!0:!!e&&!!ug(e)}async function Np(e=process.env){let t=A(),r=t.agentOsId?.trim(),n=Ce();if(!r||!xb(r))return null;let o=await m7(t.apiBaseUrl,n,e);if(!o)return null;let s=tr(t),i=t.apiBaseUrl?.replace(/\/$/,"")??o.replace(/\/$/,"");return{bridgeUrl:o.replace(/\/$/,""),agentOsId:r,apiKey:n??"",boxId:Rl(e),chatProvider:s,model:So(s,t,e),useClaudeOauth:t.chatUseClaudeOauth===!0,auth:new Op({apiBaseUrl:i,agentOsId:r,boxLabel:()=>Rl(e),loadApiKey:Ce,loadBoxCredential:()=>ug(r),saveBoxCredential:a=>w_(r,a),clearBoxCredential:S_}),security:new Tp,apiBaseUrl:i}}var CM,Dp=p(()=>{"use strict";$();We();ss();bM();wn();xM();CM=5e3});import{verify as h7,createPublicKey as y7}from"node:crypto";function v7(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 EM(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[k7]??null}function R7(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function w7(e,t){let r=Date.parse(e),n=Date.parse(t);return Number.isNaN(r)?!1:Number.isNaN(n)?!0:r>n}function Cb(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(!v7(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||!R7(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=qn(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(at(s),"utf8"),d=y7({key:Buffer.concat([b7,Buffer.from(i)]),format:"der",type:"spki"});l=h7(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||!w7(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 JMe,k7,b7,AM=p(()=>{"use strict";rn();ia();JMe=720*60*60,k7="change",b7=Buffer.from("302a300506032b6570032100","hex")});function PM(e){switch(e){case"off":return 0;case"folder":case"folders":return 1;case"full":return 2;default:return 0}}function S7(e,t){let r=PM(e.access),n=PM(t.access);if(r!==n)return r>n;if(r!==1)return!1;let o=new Set(Wn(t.folders));return Wn(e.folders).some(s=>!o.has(s))}function _7(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=is(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:EM(r)}}function OM(e){let t=_7(e.signedAccess,e.boxId);if(!t)return{ok:!0,website:null,raised:!1};let r=is(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:Wn(e.local.chatWorkFolders)}:{access:eu(e.engine),folders:[]});let o=n.every(c=>S7(t.level,c)),s=(e.now??(()=>new Date))().toISOString(),i=e.state.website;if(!o){let c=t.change!==null?Cb(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:IM(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=Cb(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:IM(i)}),l=i?.access??r??eu(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 IM(e){return!e||!e.changedAt&&!e.nonce?null:{changedAt:e.changedAt,nonce:e.nonce}}var TM=p(()=>{"use strict";AM();Kn()});import{existsSync as x7,mkdirSync as C7,readFileSync as E7,writeFileSync as A7}from"node:fs";import{homedir as P7}from"node:os";import Eb from"node:path";function Ab(e=P7()){return Eb.join(e,I7)}function NM(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function O7(e){return typeof e.access!="string"?null:{access:e.access,folders:NM(e.folders),source:e.source??"default",signed:e.signed===!0,at:typeof e.at=="string"?e.at:""}}function T7(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;if(typeof r.access=="string")return{access:r.access,folders:NM(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 Mp(e=Ab()){try{if(!x7(e))return{applied:null,website:null};let t=JSON.parse(E7(e,"utf8"));if(!t||typeof t!="object")return{applied:null,website:null};let r=O7(t);return{applied:r,website:T7(t.website,r)}}catch{return{applied:null,website:null}}}function DM(e,t){try{C7(Eb.dirname(e),{recursive:!0});let r={...t.applied??{},...t.website?{website:t.website}:{}};A7(e,`${JSON.stringify(r,null,2)}
|
|
194
|
+
`,{mode:384})}catch{}}function N7(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 MM(e,t={signed:!1}){let r=t.file??Ab(),n=t.now??(()=>new Date),o={access:e.access,folders:[...e.folders],source:e.source,signed:t.signed,at:n().toISOString()},s=Mp(r);return N7(s.applied,o)?null:(DM(r,{applied:o,website:s.website}),{from:s.applied,to:o})}function LM(e,t={}){let r=t.file??Ab(),n=t.now??(()=>new Date),o=Mp(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:(DM(r,{applied:o.applied,website:s}),s)}function ai(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 I7,Pb=p(()=>{"use strict";I7=Eb.join(".kynver","chat-access-state.json")});import{appendFileSync as D7,mkdirSync as M7}from"node:fs";import{homedir as L7}from"node:os";import Ib from"node:path";function Ob(e=L7()){return Ib.join(e,B7)}function Tb(e){let t=r=>r===void 0?void 0:r.length>BM?`${r.slice(0,BM)}\u2026`:r;return{...e,...e.command!==void 0?{command:t(e.command)}:{},...e.path!==void 0?{path:t(e.path)}:{}}}function li(e,t=Ob()){try{return M7(Ib.dirname(t),{recursive:!0}),D7(t,`${JSON.stringify(Tb(e))}
|
|
195
|
+
`,{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 B7,BM,wl=p(()=>{"use strict";B7=Ib.join(".kynver","logs","chat-commands.jsonl"),BM=2e3});function U7(e){let r=e.chatProvider?.trim()||e.workerProvider?.trim()||"";return Ye(r)}function _o(e,t=process.env){return U7(e)!=="gemini"?"http":Ds(vt(t))==="antigravity"?"antigravity":"http"}var Lp=p(()=>{"use strict";uo();ta()});import{spawnSync as KM}from"node:child_process";import{existsSync as F7,readFileSync as W7}from"node:fs";import{homedir as K7,platform as $7}from"node:os";import UM from"node:path";function Bp(e,t,r=process.env){return e==="cursor"?"cursor":e==="codex"?"codex":e==="gemini"?_o(t,r)==="antigravity"?"antigravity":"none":e==="anthropic"?"claude-code":"none"}function H7(e,t){return e==="cursor"?oo(t):e==="codex"?t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||Nr():e==="antigravity"?vt(t):e==="claude-code"?t.KYNVER_CLAUDE_BIN?.trim()||t.CLAUDE_BIN?.trim()||"claude":null}function Up(e,t=process.env,r=Date.now()){let n=H7(e,t);if(!n)return null;let o=FM.get(n);if(o&&r-o.at<$M)return o.version;let s=null;try{let[i,a]=ie(n,["--version"]),l=KM(i,a,ee({encoding:"utf8",timeout:5e3})),c=`${l.stdout??""} ${l.stderr??""}`;s=l.status===0?c.match(j7)?.[0]??null:null}catch{s=null}return FM.set(n,{at:r,version:s}),s}function Fp(e=process.env,t={}){if(e.ANTHROPIC_API_KEY?.trim())return!0;let r=t.home??K7(),n=t.now??Date.now(),o=WM.get(r);if(o&&n-o.at<$M)return o.signedIn;let s=V7(UM.join(e.CLAUDE_CONFIG_DIR?.trim()||UM.join(r,".claude"),".credentials.json"));return!s&&(t.os??$7())==="darwin"&&(s=(t.keychain??G7)()),WM.set(r,{at:n,signedIn:s}),s}function V7(e){if(!F7(e))return!1;try{let t=JSON.parse(W7(e,"utf8")).claudeAiOauth,r=n=>typeof n=="string"&&n.length>0;return!!t&&(r(t.refreshToken)||r(t.accessToken))}catch{return!1}}function G7(){try{return KM("security",["find-generic-password","-s","Claude Code-credentials"],{stdio:"ignore",timeout:5e3}).status===0}catch{return!1}}var j7,$M,FM,WM,Sl=p(()=>{"use strict";ao();Is();uo();Fe();D();Lp();j7=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,$M=10*6e4,FM=new Map;WM=new Map});import{createHash as J7,verify as q7,createPublicKey as Y7}from"node:crypto";function Db(e){if(!e||typeof e!="object"||Array.isArray(e))return e;let t={...e};return delete t[HM],t}function X7(e){return J7("sha256").update(at(Db(e)),"utf8").digest("hex")}function Mb(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[HM]??null}function Q7(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 Z7(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:at(r)===at(t)}function Nb(e,t){return{state:t,firstSeenAt:new Date(e.firstSeenSec*1e3).toISOString(),turnId:e.turnId}}function eQ(e){return Y7({key:Buffer.concat([z7,Buffer.from(e)]),format:"der",type:"spki"})}function jM(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3),s=Mb(e);if(s===null)return{ok:!1,code:"unsigned",reason:"turn carries no signed envelope"};if(!Q7(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=qn(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(at(i.payload),"utf8");c=q7(null,d,eQ(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(X7(e)!==i.payload.payloadHash)return{ok:!1,code:"payload_tampered",reason:"turn payload does not match its signed hash"};if(!Z7(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 (${tQ(u.replay)})`,replay:u.replay}}function tQ(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 HM,z7,Wp,Kp=p(()=>{"use strict";rn();ia();HM="turnEnvelope",z7=Buffer.from("302a300506032b6570032100","hex");Wp=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:Nb(n,"turn_mismatch")}:n.state==="verified"?{ok:!0,redelivered:!0}:{ok:!1,replay:Nb(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:Nb(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 VM(e=process.env,t={}){let r=(e[rQ]??t.chatTurnSignature??"").toString().trim().toLowerCase();return r==="optional"||r==="off"||r==="0"||r==="false"?"optional":"required"}function GM(e,t){return t?`turn_rejected_${e}: ${t}`:`turn_rejected_${e}`}function JM(e,t){if(!(Mb(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:nQ(o)?o:null,signed:!1,userId:null,redelivered:!1}}let n=jM(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 nQ(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.byBox;return!!t&&typeof t=="object"&&!Array.isArray(t)}var rQ,Lb=p(()=>{"use strict";Kp();rQ="KYNVER_CHAT_TURN_SIGNATURE"});function Bb(e){return typeof e=="string"&&iQ.test(e.trim())?e.trim():null}function $p(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 YM(e,t){let r=Bb(e);return r?{[oQ]:r,[sQ]:t}:{}}var oQ,sQ,qM,iQ,Hp=p(()=>{"use strict";oQ="KYNVER_CONVERSATION",sQ="KYNVER_AGENT_TAB_ENGINE",qM="X-Kynver-Conversation",iQ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});function lQ(e){return typeof e=="string"&&aQ.includes(e)}function XM(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.kind!=="agent-tab"||!lQ(t.engine)||typeof t.sessionKey!="string"||!fQ.test(t.sessionKey))return null;let r=typeof t.text=="string"?t.text.slice(0,zM):"",n=[],o=0;if(Array.isArray(t.attachments))for(let c of t.attachments.slice(0,dQ)){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>pQ)break;n.push({name:u.slice(0,200),mime:typeof d=="string"?d.slice(0,100):"application/octet-stream",contentBase64:f})}}let s=mQ(t.control);if(!s&&!r.trim()&&n.length===0)return null;let i=typeof t.styleNote=="string"?t.styleNote.trim().slice(0,uQ):"",a=typeof t.replyTurnId=="string"&&cQ.test(t.replyTurnId)?t.replyTurnId:null,l=Bb(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 mQ(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,zM)}:null}var aQ,jp,cQ,zM,uQ,dQ,pQ,fQ,Ub=p(()=>{"use strict";Hp();aQ=["hermes","openclaw","claude-code","grok-bot"],jp={hermes:"Hermes",openclaw:"OpenClaw","claude-code":"Claude Code","grok-bot":"Grok Bot"};cQ=/^[A-Za-z0-9-]{8,64}$/,zM=32e3,uQ=4e3,dQ=5,pQ=20*1024*1024,fQ=/^[A-Za-z0-9_.:-]{8,128}$/});import{createHash as gQ}from"node:crypto";function vQ(e){return`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box`}function RQ(e,t,r){let n=e.trim()?e:`${t} finished without writing a reply.`;return r.length>0&&(n+=`
|
|
190
196
|
|
|
191
|
-
_${r.length===1?"A file":`${r.length} files`} couldn't be attached: ${r.join(", ")}._`),n.length>
|
|
192
|
-
`).filter(Boolean)}finally{
|
|
193
|
-
`,{encoding:"utf8",mode:384})}catch{}}function
|
|
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
|
|
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
|
|
197
|
+
_${r.length===1?"A file":`${r.length} files`} couldn't be attached: ${r.join(", ")}._`),n.length>QM?`${n.slice(0,QM-1)}\u2026`:n}function eL(e){let t=e.fetchFn??fetch,r=e.wait??bQ,n=e.redactText??(c=>eO(e.agentOsId,c)),o=c=>{let u=rO(e.agentOsId,c),d;try{d=new TextDecoder("utf-8",{fatal:!0}).decode(u)}catch{return u}if(d.includes("\0"))return u;let f=n(d);return f===d?u:Buffer.from(f,"utf8")},s=vQ(e),i=new URL(e.apiBaseUrl).origin,a=async(c,u)=>{let f={Authorization:`Bearer ${await e.bearer()}`},m=u.body;u.json!==void 0&&(f["Content-Type"]="application/json",m=JSON.stringify(u.json));let g=await t(c,{method:u.method??"POST",headers:f,body:m});return g.status===401&&e.onUnauthorized?.(),g},l=async c=>{try{let u=o(Buffer.from(c.contentBase64,"base64")),d=gQ("sha256").update(u).digest("hex"),f=await a(`${s}/uploads`,{json:{name:n(c.name).slice(0,200),size:u.length,sha256:d}});if(!f.ok)return null;let m=await f.json();for(let y=0;y<m.parts;y++){let b=u.subarray(y*m.partBytes,(y+1)*m.partBytes),k=new URL(m.partUrl.replace("{index}",String(y)),i).toString(),v=!1;for(let w=0;w<3&&!v;w++)v=!!(await t(k,{method:"PUT",body:new Uint8Array(b)}).catch(()=>null))?.ok,v||await r(1e3*(w+1));if(!v)return null}let g=await a(new URL(m.completeUrl,i).toString(),{method:"POST"});if(!g.ok)return null;let h=await g.json();return typeof h.file?.id=="string"?h.file.id:null}catch{return null}};return{async heartbeat(c){try{let u=await a(`${s}/turns/${encodeURIComponent(c)}/heartbeat`,{json:{}});return u.status===404||u.status===410?"stop":"continue"}catch{return"continue"}},async deliver({replyTurnId:c,engine:u,text:d,files:f}){let m=[],g=[],h=0;for(let b of f.slice(0,kQ)){let k=b.sizeBytes??Math.floor(b.contentBase64.length*3/4),v=n(b.name).slice(0,200);if(k<=hQ&&h+k<=yQ){let S=o(Buffer.from(b.contentBase64,"base64"));h+=S.length,m.push({name:v,contentBase64:S.toString("base64")});continue}let w=await l(b);w?m.push({fileId:w}):g.push(v.slice(0,80))}let y={engine:u,idempotencyKey:`turn-reply:${c}`,turnId:c,text:RQ(n(d),wQ[u],g),attachments:m,notify:!0};for(let b=0;;b++){let k=0;try{let w=await a(`${s}/posts`,{json:y});if(k=w.status,w.ok)return!0}catch{k=0}if(!(k===0||k===401||k===408||k===429||k>=500)||b>=ZM.length)return!1;await r(ZM[b])}}}}var QM,hQ,yQ,kQ,ZM,bQ,wQ,tL=p(()=>{"use strict";js();Ub();QM=32e3,hQ=8*1024*1024,yQ=20*1024*1024,kQ=10,ZM=[2e3,4e3,8e3,16e3,32e3],bQ=e=>new Promise(t=>setTimeout(t,e));wQ=jp});async function ci(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 Hr(e,t,r){r===401&&t.kind==="box_token"&&e.auth?.invalidateToken()}var ui=p(()=>{"use strict"});import{closeSync as SQ,existsSync as _Q,fstatSync as xQ,openSync as CQ,readSync as EQ}from"node:fs";function nL(){return{lastSuccessAt:null,lastSuccessKind:null,steps24h:0,failures24h:{}}}function OQ(e,t){let r=nL();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>IQ)&&(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 TQ(e){if(!_Q(e))return[];let t=CQ(e,"r");try{let r=xQ(t).size,n=Math.min(r,AQ),o=Buffer.alloc(n);return EQ(t,o,0,n,r-n),o.toString("utf8").split(`
|
|
198
|
+
`).filter(Boolean)}finally{SQ(t)}}function Vp(e=Ob(),t=Date.now()){let r=rL.get(e);if(r&&t-r.at<PQ)return r.summary;let n;try{n=OQ(TQ(e),t)}catch{n=nL()}return rL.set(e,{at:t,summary:n}),n}var AQ,PQ,IQ,rL,Fb=p(()=>{"use strict";wl();AQ=512*1024,PQ=3e4,IQ=1440*60*1e3;rL=new Map});import{appendFileSync as NQ,mkdirSync as DQ}from"node:fs";import{homedir as MQ}from"node:os";import Wb from"node:path";function oL(e=MQ()){return Wb.join(e,LQ)}function sL(e){let r=(e instanceof Error?e.message:String(e)).split(":")[0].trim();return/^[a-z_]{1,40}$/.test(r)?r:"other"}function iL(e,t=oL()){try{DQ(Wb.dirname(t),{recursive:!0}),NQ(t,`${JSON.stringify({kind:"step",...e})}
|
|
199
|
+
`,{encoding:"utf8",mode:384})}catch{}}function aL(e=oL()){return Vp(e)}var LQ,Kb=p(()=>{"use strict";Fb();LQ=Wb.join(".kynver","logs","chat-claude-code-steps.jsonl")});function xo(e){let t=Bp(e.provider,e.config,e.env??process.env),r=e.boxId?Zc(e.payloadAccess,e.boxId):null,n=as({engine:t,local:{chatComputerAccess:e.config.chatComputerAccess,chatWorkFolders:e.config.chatWorkFolders},website:r,home:e.home});return{engine:t,access:n}}var Gp=p(()=>{"use strict";Sl();Kn()});function lL(e,t,r={}){let n=r.env??process.env,{engine:o,access:s}=xo({provider:e,config:t,env:n});return{access:s.access,folders:s.folders.map(qe),source:s.source==="website"?"local":s.source,engine:o,engineVersion:o==="none"?null:(r.version??Up)(o,n),log:(r.summary??Vp)(),...o==="claude-code"?{claudeCode:{signedIn:(r.signedIn??Fp)(n),steps:(r.stepSummary??aL)()}}:{}}}var cL=p(()=>{"use strict";dt();Sl();Kb();Gp();Fb()});function uL(e){try{return Nt().report(e)}catch{return null}}function Jp(e,t){try{return lL(e,t)}catch{return}}function _l(){try{return __().apiKey}catch{return"none"}}async function di(e,t){for(let n=0;n<e&&!t();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}var Co,qp=p(()=>{"use strict";$();ua();cL();ui();Co=ci});function dL(e){let t=null;return eL({apiBaseUrl:e.apiBaseUrl??new URL(e.bridgeUrl).origin,agentOsId:e.agentOsId,bearer:async()=>(t=await Co(e),t.bearer),onUnauthorized:()=>{t&&Hr(e,t,401)}})}async function Ee(e,t,r){let n=await Co(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:zd(e.agentOsId,r)})});return Hr(e,n,o.status),o.ok}var xl=p(()=>{"use strict";tL();ui();js();qp()});async function pL(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??{}})),li({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 Ee(e,t.turnId,[{seq:0,kind:"error",error:GM(r.code,r.detail)}]).catch(()=>{}),{ok:!1}}async function $b(e,t,r){let n=JM({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}):pL(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=OM({signedAccess:n.access,boxId:e.boxId,agentOsId:e.agentOsId,engine:Bp(e.chatProvider,o,r.env??process.env),local:{chatComputerAccess:o.chatComputerAccess,chatWorkFolders:o.chatWorkFolders},state:Mp(r.stateFile),env:r.env,nowSec:r.nowSec});if(!s.ok)return pL(e,t,{code:s.code,detail:s.detail,reason:s.reason,policy:r.policy,extra:{from:ai(s.from),to:ai(s.to),signed:n.signed}});s.website&&LM(s.website,{file:r.stateFile});let a={...Db(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 Hb=p(()=>{"use strict";$();TM();Pb();wl();Sl();Kp();Lb();xl()});var Sn,Yp=p(()=>{"use strict";Sn=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 fL(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(KQ.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
200
|
+
`)||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&&!$Q.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:FQ}:r==="run dispatch"?{ok:!1,mutating:!0,reason:UQ}:BQ.has(r)?{ok:!0,mutating:!1}:WQ.has(r)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}}var BQ,UQ,FQ,WQ,KQ,$Q,mL=p(()=>{"use strict";BQ=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list","update check","update status"]),UQ="run dispatch is blocked from runtime_command \u2014 use agent_os_submit_action_intent with kind dispatch_workers (live dispatch requires Action Required approval)",FQ='update finish is internal to `kynver update` \u2014 call ["update"] (confirmed) to update Kynver',WQ=new Set(["run create","run sweep","worker start","worker stop","worker complete","cleanup","update"]),KQ=["--secret","--api-key","--keeper-child"],$Q=new Set(["runner-install","node-runtime","local-store","context-envelope","runtime-takeover"])});import{spawn as HQ}from"node:child_process";function GQ(e,t,r,n=process.env){let o=D_(r,{agentOsId:e,argv:t},n);return o.ok?null:`command authorization proof invalid: ${o.reason}`}async function hL(e,t,r={}){if(r.agentOsId){let a=GQ(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=fL(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=r.cliEntry??process.argv[1],s=r.timeoutMs??jQ,i=new Sn(t);return new Promise(a=>{let l=0,c=!1,u=HQ(process.execPath,[o,...e],ee({stdio:["ignore","pipe","pipe"],env:process.env})),d=m=>{if(l>=gL)return;let g=m.toString("utf8").slice(0,gL-l);l+=g.length,i.push(g)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,nt(u,"SIGTERM"),setTimeout(()=>nt(u,"SIGKILL"),VQ).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 jQ,VQ,gL,yL=p(()=>{"use strict";D();Yp();mL();ia();jQ=10*6e4,VQ=5e3,gL=2e5});var _n,zp=p(()=>{"use strict";_n=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 jb(e,t){let r=0,n=!1,o=new _n,s=Array.isArray(t.payload?.argv)?t.payload.argv:[],i=await hL(s,a=>{n||o.track(Ee(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 Ee(e,t.turnId,[{seq:r++,kind:"error",error:`command_refused: ${i.refused}`}]).catch(()=>{}):await Ee(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 Vb=p(()=>{"use strict";yL();zp();xl()});function Xp(e){let t=e.appendLog??(s=>{li(s)}),r=e.now??(()=>new Date),n=0,o=(s,i)=>Tb({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 Gb=p(()=>{"use strict";wl()});import{readFileSync as JQ,statSync as qQ}from"node:fs";import kL from"node:path";function XQ(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!==YQ||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 Eo(e,t,r){return{step:{kind:"attach",path:e,ok:!1,reason:t,...r!==void 0?{outputBytes:r}:{}}}}function QQ(e,t,r={}){let n=r.stat??qQ,o=r.read??JQ,s=r.maxBytes??zQ,i=e.rawPath.trim();if(!i||i.includes("\0"))return Eo(i,"invalid_path");let a=kL.resolve(t.workDir,lc(i));if(t.access==="off")return Eo(a,"access_off");if(!tu(t,a))return Eo(a,"outside_folders");let l;try{let c=n(a);if(!c.isFile())return Eo(a,"not_a_file");l=c.size}catch{return Eo(a,"not_found")}if(l>s)return Eo(a,"too_large",l);try{let c=o(a);return{step:{kind:"attach",path:a,outputBytes:c.length,ok:!0},file:{name:kL.basename(a),sizeBytes:c.length,contentBase64:c.toString("base64")}}}catch{return Eo(a,"read_failed")}}function bL(e,t,r){let n=XQ(e);for(let o of n){let s=QQ(o,t.access);r.attach(s.step,t,{toolUseId:o.toolUseId,...s.file?{file:s.file}:{}})}return n.length}var YQ,zQ,vL=p(()=>{"use strict";Kn();dt();YQ="attach_file",zQ=50*1024*1024});import{readFileSync as ZQ}from"node:fs";import{homedir as eZ,platform as tZ}from"node:os";import rZ from"node:path";import{execFileSync as nZ}from"node:child_process";function RL(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 oZ(){if(tZ()==="darwin")try{let e=nZ("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return RL(e.trim())}catch{return null}try{let e=ZQ(rZ.join(eZ(),".claude",".credentials.json"),"utf8");return RL(e)}catch{return null}}function Cl(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=oZ();if(s)return{kind:"oauth",token:s}}return null}var Jb=p(()=>{"use strict"});import{existsSync as wL}from"node:fs";import{homedir as sZ}from"node:os";import El from"node:path";import{spawnSync as iZ}from"node:child_process";function aZ(e){if(El.isAbsolute(e)||e.includes("/")||e.includes("\\"))return wL(e);try{let t=iZ(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function lZ(e=process.env){let t=sZ(),r=[],n=e.CODEX_HOME?.trim();return n&&r.push(El.join(El.resolve(n),"auth.json")),r.push(El.join(t,".codex","auth.json")),r.push(El.join(t,".config","codex","auth.json")),r}function SL(e){return`${e.error}: ${e.detail}`}function Zp(e=process.env){let t=e.KYNVER_CODEX_BIN?.trim()||e.CODEX_BIN?.trim()||Nr();return aZ(t)?e.CODEX_API_KEY?.trim()?{ok:!0,creds:{codexBin:t,authSource:"api_key_env"}}:lZ(e).find(n=>wL(n))?{ok:!0,creds:{codexBin:t,authSource:"oauth_local"}}:{ok:!1,error:qb,detail:"Run `codex login` on this computer, or set CODEX_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Qp,detail:"`codex` CLI not found. Install the Codex CLI (https://developers.openai.com/codex/) and keep it on PATH."}}var Qp,qb,ef=p(()=>{"use strict";ao();Qp="codex_cli_unavailable",qb="codex_not_logged_in"});import{spawnSync as cZ}from"node:child_process";function dZ(e,t,r){return uZ.test(`${t}
|
|
201
|
+
${r}`)?!1:e===0}function _L(e,t=process.env){try{let[r,n]=ie(e,["models"]),o=cZ(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"}:dZ(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 uZ,xL=p(()=>{"use strict";Fe();uZ=/authentication required|not logged in|you are not logged|not authenticated/i});import{existsSync as pZ,readFileSync as fZ}from"node:fs";import{homedir as mZ}from"node:os";import CL from"node:path";import{spawnSync as gZ}from"node:child_process";function hZ(e){if(CL.isAbsolute(e)||e.includes("/")||e.includes("\\"))return pZ(e);try{let t=gZ(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function yZ(){return CL.join(mZ(),".gemini","antigravity-cli","settings.json")}function kZ(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 bZ(){try{return fZ(yZ(),"utf8")}catch{return null}}function vZ(e,t){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()?kZ(t)==="gemini":!1}function EL(e){return`${e.error}: ${e.detail}`}function nf(e=process.env,t={}){let r=vt(e);if(!(t.commandOnPath??hZ)(r))return{ok:!1,error:tf,detail:"`agy` not found. Install Google Antigravity (https://antigravity.google/docs/cli/install) and keep `agy` on PATH."};if((t.probeAuth??_L)(r,e).ok)return{ok:!0,creds:{bin:r,authSource:"keyring"}};let s=(t.readSettings??(()=>bZ()))(e);return vZ(e,s)?{ok:!0,creds:{bin:r,authSource:"api_key_settings"}}:{ok:!1,error:rf,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 tf,rf,of=p(()=>{"use strict";uo();xL();tf="antigravity_cli_unavailable",rf="antigravity_not_logged_in"});function Al(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()||RZ).replace(/\/+$/,"");return{apiKey:t,baseUrl:r,label:"gemini"}}function Pl(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()||wZ).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 RZ,wZ,Yb=p(()=>{"use strict";RZ="https://generativelanguage.googleapis.com/v1beta/openai",wZ="https://api.openai.com/v1"});function _Z(e,t=process.env){return{anthropic:()=>{let r=Cl(t,{oauthOptIn:e.chatUseClaudeOauth===!0});return r?r.kind==="oauth"?"subscription":"api_key":null},codex:()=>{let r=Zp(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},cursor:()=>{let r=zu(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},gemini:()=>{let r=t;if(_o({chatProvider:e.chatProvider,workerProvider:e.workerProvider},r)==="antigravity"){let n=nf(r);return n.ok?n.creds.authSource==="api_key_settings"?"api_key":"subscription":null}return Al(t)?"api_key":null},openai:()=>Pl(t)?"api_key":null}}function xZ(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:ii(r.slice(0,n)),model:o})}return t}function zb(e,t){let r=t?.trim();r&&!e.includes(r)&&e.push(r)}function CZ(e,t,r=process.env){let n=tr(e),o=xZ(r.KYNVER_CHAT_EXTRA_MODELS),s=[];for(let i of Xb){let a=null;try{a=t[i]()}catch{a=null}if(!a)continue;let l=i===n?So(i,e,r):So(i,{},{...r,KYNVER_CHAT_MODEL:void 0}),c=[];zb(c,l);for(let u of SZ[i])zb(c,u);for(let u of o)u.provider===i&&zb(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 pi(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(Il&&Il.key===n&&r-Il.at<EZ)return Il.value;let o=CZ(e,_Z(e,t),t);return Il={key:n,at:r,value:o},o}var Xb,SZ,EZ,Il,Ol=p(()=>{"use strict";gr();Jb();ef();Os();of();Lp();Yb();wn();Xb=["anthropic","codex","openai","gemini","cursor"],SZ={anthropic:Yw,codex:["gpt-5.6-sol","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"]};EZ=6e4,Il=null});function Tl(e){if(typeof e=="string"){let n=e.indexOf(":");return n<=0?null:Tl({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:ii(t.provider),model:r}}function PL(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 IL(e,t){for(let r of Xb){if(t.includes(r))continue;let n=e.find(o=>o.provider===r);if(n)return{provider:r,model:n.defaultModel}}return null}function OL(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return t?AZ.some(r=>r.test(t)):!1}function AL(e){return PZ[e]}function TL(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 NL(e,t){let r=`${AL(e.provider)} (${e.model})`;if(e.fallbackReason==="usage_limit")return`${t?AL(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 AZ,PZ,Qb=p(()=>{"use strict";Ol();wn();AZ=[/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/];PZ={anthropic:"Claude",codex:"ChatGPT",openai:"ChatGPT",gemini:"Gemini",cursor:"Cursor"}});async function jr(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 Zb=p(()=>{"use strict"});function ML(e){if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.type!="string"||!IZ.has(t.type)||t.type==="text"&&(typeof t.text!="string"||!t.text.trim()))}function DL(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:Nl}]}:null;if(!Array.isArray(t.content)||t.content.length===0)return null;let r=t.content[t.content.length-1];return ML(r)?{...t,content:[...t.content.slice(0,-1),{...r,cache_control:Nl}]}:null}function OZ(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function TZ(e){for(let t=e.length-1;t>=0;t-=1){let r=e[t];if(!(!r||typeof r!="object"||r.role!=="user")&&!OZ(r.content))return t}return-1}function ev(e){return JSON.stringify(e??null).includes('"cache_control"')}function LL(e){if(ev(e.system)||ev(e.tools)||ev(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:Nl},...t.slice(a+1)])}let r=e.system;if(typeof r=="string")r.trim()&&(r=[{type:"text",text:r,cache_control:Nl}]);else if(Array.isArray(r)&&r.length>0){let i=r[r.length-1];ML(i)&&(r=[...r.slice(0,-1),{...i,cache_control:Nl}])}let n=[...e.messages],o=-1;for(let i=n.length-1;i>=0;i-=1){let a=DL(n[i]);if(a){n[i]=a,o=i;break}}let s=TZ(n)-1;if(s>=0&&s<o)for(let i=s;i>=0;i-=1){let a=DL(n[i]);if(a){n[i]=a;break}}return{system:r,tools:t,messages:n}}var Nl,IZ,BL=p(()=>{"use strict";Nl={type:"ephemeral"},IZ=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 UL(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 DZ(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0}}function MZ(e){let t=e;return t.type==="content_block_start"&&t.content_block?.type==="tool_use"?!0:t.type==="content_block_delta"&&t.delta?.type==="input_json_delta"}function LZ(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 BZ(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*UZ(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(`
|
|
202
|
+
`))!==-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 FZ(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function FL(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:NZ},{type:"text",text:n.system}]);let i=LL({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(`${FZ()}/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=DZ();for await(let c of UZ(a.body)){let u=LZ(l,c);u?e.onDelta(u):MZ(c)&&e.onToolProgress?.()}return BZ(l)}var NZ,tv=p(()=>{"use strict";BL();NZ="You are Claude Code, Anthropic's official CLI for Claude."});function nr(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 KZ(e){let t=e.replace(/\s+/g," ").trim();return t.length>WL?`${t.slice(0,WL-1)}\u2026`:t}function $L(e,t=WZ){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:","",xn,'{"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.",`- ${sf}`,"","Tools:"].join(`
|
|
197
203
|
`),n=[],o=r.length,s=[];for(let c of e){let u=`
|
|
198
|
-
- ${c.name}: ${
|
|
204
|
+
- ${c.name}: ${KZ(c.description)}
|
|
199
205
|
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?`
|
|
200
206
|
|
|
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
|
|
202
|
-
${
|
|
203
|
-
${r(e.length-n)}`}function
|
|
207
|
+
[${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 jZ(e){let t=[],r=0;for(;;){let n=e.indexOf(xn,r);if(n===-1)break;let o=n+xn.length,s=e.indexOf("```",o);if(s===-1||e.startsWith(xn,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 Cn(e,t){let{fences:r,unterminated:n}=jZ(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:(HZ.exec(n.body)?.[1]?.trim()??"")||null}),i+=e.slice(a),{text:i.trim(),calls:o,rejected:s,cut:l}}function KL(e,t){return`cursor_${e}_${t}`}function En(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:KL(t,i),name:s.name,input:s.input})}),e.cut&&n.push({type:"tool_use",id:KL(t,"cut"),name:$Z,input:{tool:e.cut.name,reason:"unterminated_fence"}}),{content:n,stop_reason:e.calls.length>0||e.cut?"tool_use":"end_turn"}}function VZ(e){let t=Math.min(e.length,xn.length-1);for(let r=t;r>0;r-=1)if(xn.startsWith(e.slice(e.length-r)))return r;return 0}var xn,sf,WZ,WL,$Z,HZ,rr,fi=p(()=>{"use strict";xn="```kynver-tool",sf="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.";WZ=64e3,WL=600;$Z="kynver_tool_call_cut",HZ=/"name"\s*:\s*"([^"\\]*)"/;rr=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(xn);if(n!==-1){r+=this.held.slice(0,n),this.held=this.held.slice(n+xn.length),this.inFence=!0;continue}let o=VZ(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 HL(e){return`[\u2026 ${e} more characters of the user's message omitted to fit this prompt \u2026]`}function GZ(e){return`[\u2026 ${e} more characters of Kynver's turn context omitted to fit this prompt \u2026]`}function JZ(e,t){if(e.length<=t)return e;let r=e.indexOf(jL),n=r>=0?e.indexOf(mi,r):-1;if(r<0||n<0)return gi(e,t,HL);let o=e.slice(0,r),s=e.slice(r,n+mi.length),i=gi(e.slice(n+mi.length),Math.max(0,t-o.length),HL),a=t-o.length-i.length,l=mi.length+1,c=s.slice(0,s.length-mi.length),u=s.length<=a?s:`${gi(c,Math.max(jL.length,a-l-100),GZ)}
|
|
208
|
+
${mi}`;return`${o}${u}${i}`}function rv(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 qZ(e){return`[\u2026 ${e} more characters omitted to fit this prompt \u2026]`}function gi(e,t,r){if(e.length<=t)return e;let n=Math.max(0,t);return`${e.slice(0,n)}
|
|
209
|
+
${r(e.length-n)}`}function GL(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(`
|
|
204
210
|
|
|
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=
|
|
206
|
-
`)}function
|
|
207
|
-
`).trim():""}function
|
|
211
|
+
`);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=JZ(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?rv:qZ;r[i].kept=gi(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 VL,jL,mi,JL=p(()=>{"use strict";VL="[System reminder]";jL="<turn_context>",mi="</turn_context>"});function XZ(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(`
|
|
212
|
+
`)}function QZ(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(`
|
|
213
|
+
`).trim():""}function ZZ(e){let t=QZ(e);return t.length>0&&!t.startsWith(VL)}function eee(e){return Array.isArray(e)&&e.some(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function nv(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=XZ(o.content??o.text),i=t===void 0?s:gi(s,t,rv);r.push(o.is_error?`[tool error]
|
|
208
214
|
${i}`:`[tool result]
|
|
209
215
|
${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(`
|
|
210
|
-
`)}function
|
|
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.":
|
|
212
|
-
${k}`,ask:!1,renderShrunk:
|
|
213
|
-
${
|
|
216
|
+
`)}function nee(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[zL,tee,"Never use runtime_command run dispatch and never implement coding tasks inline in the chat workspace when a worker was requested or dispatch failed.",XL,sf].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[zL,`${n} Do the work there yourself and say what you ran and what you changed.`,`Local commands are only for this computer. ${sf}`,ree,"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).",XL].join(" ")}function oee(e){return e==="assistant"?"Assistant":e==="system"?"System":"User"}function QL(e){return nv(e)}function ov(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let o=t==="agent"?r??nr(e.tools):[],s=$L(o),i=typeof n=="string"?n:n?.access,a=[],l=typeof e.system=="string"?e.system.trim():"";l&&a.push(`System:
|
|
217
|
+
${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.":nee(n)),i==="off"&&a.push(zZ);let c=t==="agent"?UL(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=nv(b.content);if(!k.trim())continue;let v=oee(b.role);b.role!=="assistant"&&b.role!=="system"&&ZZ(b.content)&&(d=u.length);let S=b.content;u.push({text:`${v}:
|
|
218
|
+
${k}`,ask:!1,renderShrunk:eee(S)?_=>`${v}:
|
|
219
|
+
${nv(S,_)}`:null})}d>=0&&(u[d].ask=!0);let f=a.join(`
|
|
214
220
|
|
|
215
221
|
`),m=u.map(y=>y.text).join(`
|
|
216
222
|
|
|
217
|
-
`);if(!u.length||f.length+2+m.length<=
|
|
223
|
+
`);if(!u.length||f.length+2+m.length<=qL)return{head:f,body:m};let g=Math.max(YZ,qL-f.length-16),h=GL(u,g-YL.length-2);return{head:f,body:h.dropped?`${YL}
|
|
218
224
|
|
|
219
|
-
${h.body}`:h.body}}function
|
|
225
|
+
${h.body}`:h.body}}function hi(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let{head:o,body:s}=ov(e,t,r,n);return s?`${o}
|
|
220
226
|
|
|
221
|
-
${s}`:o}var
|
|
222
|
-
`):void 0}function
|
|
223
|
-
`))!==-1;){let
|
|
224
|
-
`))!==-1;){let J=
|
|
225
|
-
`))!==-1;){let
|
|
226
|
-
`):""}function
|
|
227
|
-
`)}),r}function
|
|
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
|
|
229
|
-
`;e.write(`HTTP/1.1 ${t} ${t===
|
|
227
|
+
${s}`:o}var qL,YZ,zZ,YL,zL,tee,XL,ree,Dl=p(()=>{"use strict";tv();fi();JL();qL=8e4,YZ=32e3,zZ="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.",YL=`[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.]`;zL="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.",tee="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).",XL="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.",ree="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 see}from"node:os";function yi(e,t=see()){let r=A();return as({engine:e,local:{chatComputerAccess:r.chatComputerAccess,chatWorkFolders:r.chatWorkFolders},home:t})}var af=p(()=>{"use strict";$();Kn()});function lee(e){let t=e[gm];return new Set(t?t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean):[])}function sv(e,t={}){return aee.has(e)||t.operatorAllow?.has(e)||e===av?!1:iee.some(r=>r.test(e))}function or(e=process.env){let t=Di(e);for(let n of iv)delete t[n];let r=lee(e);for(let n of Object.keys(t))sv(n,{operatorAllow:r})&&delete t[n];return t[av]="1",t}function ZL(e){let t=e.toUpperCase();return pee.has(t)||t===av?!0:uee.has(t)?!sv(t):dee.some(r=>t.startsWith(r))?!sv(t)&&!/(_KEY|_TOKEN|_SECRET|_PASSWORD)$/i.test(t):!1}function fee(e=process.env){let t={};for(let[n,o]of Object.entries(e))typeof o=="string"&&ZL(n)&&(t[n]=o);let r=or(t);for(let n of Object.keys(r))ZL(n)||delete r[n];return r}function eB(e,t){return t==="folder"||t==="folders"?fee(e):or(e)}function lv(){return[`--disallowedTools=${mee.join(",")}`]}var iv,av,iee,aee,cee,uee,dee,pee,mee,Ao=p(()=>{"use strict";Mi();iv=["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"],av="KYNVER_CHAT_CHILD",iee=[/_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],aee=new Set(mm);cee=["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"],uee=new Set(cee.map(e=>e.toUpperCase())),dee=["LC_","CLAUDE_CODE_","CLAUDE_","ANTHROPIC_","DISABLE_","MAX_THINKING_","BASH_DEFAULT_","BASH_MAX_"],pee=new Set(["CLAUDE_CODE_OAUTH_TOKEN"]);mee=["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 Ae(e){return typeof e=="string"&&e.trim()?e:void 0}function cv(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function uv(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 dv(...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 pv(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 rB(e=Date.now){let t=pv(e);return r=>{let n=Ie(r.item);if(!n)return[];let o=Ae(n.id);if(r.type==="item.started")return t.start(o),[];if(r.type!=="item.completed")return[];if(n.type==="command_execution"){let s=Ae(n.command)??"",i=cv(n.exit_code),a=uv(s,i,t.elapsed(o),dv(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&&!!Ae(a.path)).map(a=>({kind:"file_change",path:Ae(a.path),...Ae(a.kind)?{change:Ae(a.kind)}:{},durationMs:s,ok:i,...i?{}:{reason:"failed"}}))}return[]}}function nB(e=Date.now){let t=pv(e);return r=>{if(r.type!=="tool_call")return[];let n=Ae(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=Ae(Ie(i.args)?.command)??Ae(l?.command)??"",u=cv(l?.exitCode)??(a?.failure?1:null),d=cv(l?.executionTime)??s;return[uv(c,u,d,dv(l?.stdout,l?.stderr))]}for(let[a,l]of Object.entries(gee)){let c=Ie(o[a]);if(!c)continue;let u=Ie(c.result),d=Ae(Ie(c.args)?.path)??Ae(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 oB(){return e=>{if(e.event!=="step_update")return[];let t=Ie(e.step_update);if(!t||t.step_type!=="tool")return[];let r=Ae(t.tool_name);return r?[{kind:"tool",command:r.trim(),ok:!0}]:[]}}function kee(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(`
|
|
228
|
+
`):void 0}function tB(e){let t=Ie(e.message)?.content;return Array.isArray(t)?t.map(r=>Ie(r)).filter(r=>!!r):[]}function sB(e=Date.now){let t=pv(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(yee)?.[1]??1):0,h=uv(Ae(i.input.command)??"",g,a,dv(c));return u?{...h,ok:!1,reason:u}:h}let d=l||u?{reason:u??"failed"}:{},f=hee[i.name],m=Ae(i.input.file_path)??Ae(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 tB(i)){let c=Ae(l.id),u=Ae(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 tB(i)){let c=Ae(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,kee(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 gee,hee,yee,Ml=p(()=>{"use strict";gee={writeToolCall:"write",editToolCall:"update",deleteToolCall:"delete"};hee={Write:"write",Edit:"update",MultiEdit:"update",NotebookEdit:"update"},yee=/exit code (\d+)/i});function sr(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function iB(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 aB(e){let t=sr(e.type);if(!t)return null;if(t==="interactionUpdate"||t==="interaction_update"){let r=sr(e.subtype)??sr(e.updateType),n=sr(e.blockReasonType)??sr(e.blockReason?.type),o=iB(e.approvalReasonTypes)??iB(e.approval?.reasonTypes),s=sr(e.toolCallId)??sr(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=sr(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=sr(e.toolCallId)??sr(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 lf(e){if(!vee.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 cf(e){let t=[bee];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 bee,vee,lB=p(()=>{"use strict";bee="cursor_tool_approval_blocked",vee=/blockReasonType[=:]\s*(\w+)|userRejected|Shell approval gate|approvalReasonTypes|unapproved_commands/i});function uf(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 cB=p(()=>{"use strict"});import{spawn as Ree}from"node:child_process";function fv(e){return e==="ask"?"ask":"agent"}function xee(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 Cee(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 Eee(e){return e.type!=="result"?"":typeof e.result=="string"?e.result:""}function mv(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 gv(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 Aee(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 Pee(e,t){if(_ee.test(e))return`${Mh}: ${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 uB(e){let t=e.env??process.env,r=e.access??yi("cursor"),n=e.workspaceDir??r.workDir,o=nB(),s=fv(e.payload.executionMode),i=s==="agent"?nr(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=hi(e.payload,s,i,r),c=e.spawnTarget;if(!c){let f=oo(t),m=Ca(f);c={executable:m.executable,prefixArgs:m.prefixArgs}}let u=xee(e.model,n,l,c.prefixArgs,s),d={...or(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let C=ee({cwd:n,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:d});g=Ree(c.executable,u,C)}catch(C){if(C.code==="ENOENT"){m(new Error(`${Yu}: 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 rr,b="",k=C=>{let I=y.push(C);I&&(b+=I,e.onDelta(I))},v="",w="",S={input_tokens:0,output_tokens:0},_="",R="",L=!1,j=!1,O,T=lf(_),U=null,N=C=>{if(h)return;if(h=!0,clearTimeout(x),O&&clearTimeout(O),e.signal?.removeEventListener("abort",F),C){uf({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 I=lf(_);if(I&&(T=I),T){let Y=new Error(cf(T));uf({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 M=y.end();M&&(b+=M,e.onDelta(M));let ne=mv(v,w),V=Cn(ne,a);gv(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:Z,stop_reason:pe}=En(V,e.turnId??"turn");uf({requestId:e.requestId,turnId:e.turnId,event:"turn_end",exitCode:U,stopReason:pe}),f({content:Z,stop_reason:pe,usage:S})},J=C=>{g.pid?he(g.pid,C):nt(g,C)},W=()=>{J("SIGTERM"),O??=setTimeout(()=>{j||J("SIGKILL")},See),O.unref()},F=()=>{W(),N(new Error("cursor_chat_aborted"))},x=setTimeout(()=>{L=!0,W()},e.timeoutMs??wee);if(g.on("error",C=>{if(C.code==="ENOENT"){N(new Error(`${Yu}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}N(C)}),e.signal){if(e.signal.aborted){F();return}e.signal.addEventListener("abort",F)}let G=C=>{let I=C.trim();if(!I)return;let M;try{M=JSON.parse(I)}catch{return}let ne=Cee(M,v);ne&&(v+=ne,k(ne));let V=Eee(M);V&&(w=V);let Z=Aee(M);if(Z&&(S=Z),e.onActivity)for(let Y of o(M))e.onActivity(Y);let pe=aB(M);pe&&(T=pe,W(),N(new Error(cf(pe))))};g.stdout?.on("data",C=>{R+=typeof C=="string"?C:C.toString("utf8");let I;for(;(I=R.indexOf(`
|
|
229
|
+
`))!==-1;){let M=R.slice(0,I);R=R.slice(I+1),G(M)}}),g.stderr?.on("data",C=>{_+=typeof C=="string"?C:C.toString("utf8"),_.length>8e3&&(_=_.slice(-8e3));let I=lf(_);I&&(T=I,W(),N(new Error(cf(I))))}),g.on("close",C=>{if(j=!0,U=C,R.trim()&&G(R),L){N(new Error("cursor_chat_timeout"));return}if(C!==0&&!v&&!w){N(new Error(Pee(_,C)));return}N()})})}var wee,See,_ee,df=p(()=>{"use strict";Is();D();Dl();af();Ao();Ml();Os();fi();lB();cB();wee=24e4,See=1500,_ee=/not logged in|please run[`\s]+agent login|authentication required|unauthorized|invalid api key/i});import{spawn as Iee}from"node:child_process";function Nee(e){return e==="ask"?"ask":"agent"}function Dee(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 Mee(e,t,r="agent",n=[],o=process.platform,s){return[...n,"exec",...Zu(o),"--skip-git-repo-check","--json","--ask-for-approval","never",...Dee(r,s),"--model",e,t]}function Lee(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 Bee(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 Uee(e,t){if(Tee.test(e))return`${qb}: ${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 dB(e){let t=e.env??process.env,r=e.access??yi("codex"),n=e.workspaceDir??r.workDir,o=Nee(e.payload.executionMode),s=o==="agent"?nr(e.payload.tools):[],i=new Set(s.map(f=>f.name)),a=hi(e.payload,o,s,r),l=rB(),c=e.spawnTarget??{executable:t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||Nr(),prefixArgs:[]},u=Mee(e.model,a,o,c.prefixArgs,process.platform,r),d={...or(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let U=ee({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[N,J]=ie(c.executable,u);g=Iee(N,J,U)}catch(U){if(U.code==="ENOENT"){m(new Error(`${Qp}: 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 rr,b=U=>{let N=y.push(U);N&&e.onDelta(N)},k="",v={input_tokens:0,output_tokens:0},w="",S="",_=!1,R=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=Cn(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({...En(J,e.turnId??"turn"),usage:v})},L=()=>nt(g,"SIGTERM"),j=()=>{L(),R(new Error("codex_chat_aborted"))},O=setTimeout(()=>{_=!0,L()},e.timeoutMs??Oee);if(g.on("error",U=>{if(U.code==="ENOENT"){R(new Error(`${Qp}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}R(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 W=Lee(J,k);W&&(k+=W,b(W));let F=Bee(J);if(F&&(v=F),e.onActivity)for(let x of l(J))e.onActivity(x)};g.stdout?.on("data",U=>{S+=typeof U=="string"?U:U.toString("utf8");let N;for(;(N=S.indexOf(`
|
|
230
|
+
`))!==-1;){let J=S.slice(0,N);S=S.slice(N+1),T(J)}}),g.stderr?.on("data",U=>{w+=typeof U=="string"?U:U.toString("utf8"),w.length>8e3&&(w=w.slice(-8e3))}),g.on("close",U=>{if(S.trim()&&T(S),_){R(new Error("codex_chat_timeout"));return}if(U!==0&&!k){R(new Error(Uee(w,U)));return}R()})})}var Oee,Tee,pB=p(()=>{"use strict";ao();Hh();D();Fe();Dl();af();Ml();ef();Ao();fi();Oee=24e4,Tee=/not logged in|please run[`\s]+codex login|authentication required|unauthorized|invalid api key|401\b/i});import{spawn as Fee}from"node:child_process";function Kee(e,t,r="agent",n=[]){return[...n,...ad({executionMode:r==="ask"?"read_only":"write",prompt:t},e)]}function $ee(e,t){if(fB.test(e))return`${rf}: ${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 mB(e){let t=e.env??process.env,r=e.access??yi("antigravity"),n=e.workspaceDir??r.workDir,o=oB(),s=fv(e.payload.executionMode),i=s==="agent"?nr(e.payload.tools):[],a=new Set(i.map(f=>f.name)),l=hi(e.payload,s,i,r),c=e.spawnTarget??{executable:vt(t),prefixArgs:[]},u=Kee(e.model,l,s,c.prefixArgs),d={...or(t),CI:"1",NO_COLOR:"1"};return await new Promise((f,m)=>{let g;try{let N=ee({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[J,W]=ie(c.executable,u);g=Fee(J,W,N)}catch(N){if(N.code==="ENOENT"){m(new Error(`${tf}: 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 rr,b=N=>{let J=y.push(N);J&&e.onDelta(J)},k="",v="",w={input_tokens:0,output_tokens:0},S="",_="",R=!1,L=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 W=y.end();W&&e.onDelta(W);let F=Cn(J,a);f({...En(F,e.turnId??"turn"),usage:w})},j=()=>nt(g,"SIGTERM"),O=()=>{j(),L(new Error("antigravity_chat_aborted"))},T=setTimeout(()=>{R=!0,j()},e.timeoutMs??Wee);if(g.on("error",N=>{if(N.code==="ENOENT"){L(new Error(`${tf}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}L(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 W;try{W=JSON.parse(J)}catch{return}if(e.onActivity)for(let x of o(W))e.onActivity(x);let F=Ac(W);if(F&&(F.textDelta&&(k+=F.textDelta,b(F.textDelta)),F.usage&&(w={input_tokens:F.usage.inputTokens??w.input_tokens,output_tokens:F.usage.outputTokens??w.output_tokens}),!!F.terminal)){if(!F.terminal.ok){let x=F.terminal.error??"antigravity cli result error";if(j(),fB.test(x)){L(new Error(`${rf}: ${x.slice(0,240)}`));return}L(new Error(`antigravity_chat_failed: ${x.slice(0,240)}`));return}v=F.terminal.finalResult??""}};g.stdout?.on("data",N=>{_+=typeof N=="string"?N:N.toString("utf8");let J;for(;(J=_.indexOf(`
|
|
231
|
+
`))!==-1;){let W=_.slice(0,J);_=_.slice(J+1),U(W)}}),g.stderr?.on("data",N=>{S+=typeof N=="string"?N:N.toString("utf8"),S.length>8e3&&(S=S.slice(-8e3))}),g.on("close",N=>{if(_.trim()&&U(_),R){L(new Error("antigravity_chat_timeout"));return}if(!h){if(N!==0&&!k&&!v){L(new Error($ee(S,N)));return}L()}})})}var Wee,fB,gB=p(()=>{"use strict";uo();Om();D();Fe();of();Dl();af();Ao();Ml();df();fi();Wee=24e4,fB=/authentication required|not logged in|you are not logged|not authenticated/i});function Hee(){return{text:"",toolCalls:[],finishReason:null,promptTokens:0,completionTokens:0}}function jee(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 Vee(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 Gee(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 Jee(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text).join(`
|
|
232
|
+
`):""}function qee(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:Jee(i.content)}),o.push(...Gee(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(`
|
|
233
|
+
`)}),r}function Yee(e,t){let r=[];e.trim()&&r.push({role:"system",content:e});for(let n of t)r.push(...qee(n??{}));return r}function zee(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*Xee(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(`
|
|
234
|
+
`))!==-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 hB(e){let{creds:t,model:r,payload:n}=e,o=Array.isArray(n.tools)?zee(n.tools):[],s={model:r,messages:Yee(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=Hee();for await(let l of Xee(i.body)){let c=jee(a,l);c&&e.onDelta(c)}return Vee(a)}var yB=p(()=>{"use strict"});function kB(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.session!="string"||!Qee.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 bB(e){let t=typeof e.maxMs=="number"&&e.maxMs>0?e.maxMs:48e4;return Math.max(0,Math.min(t,e.timeLeftMs))}var Qee,pf=p(()=>{"use strict";Qee=/^[A-Za-z0-9_.:-]{1,128}$/});function Zee(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 vB,RB=p(()=>{"use strict";vB=Zee()});function ete(e,t){if(e.access==="off")throw new Error("claude_code_access_off");return e.access==="full"?["--permission-mode","bypassPermissions",...lv()]:["--permission-mode","acceptEdits",`--allowedTools=${(t?.shell==="disabled"?wB.filter(n=>n!=="Bash"):[...wB]).join(",")}`,...lv(),...t?["--settings",t.settingsFile]:[],...e.access==="folders"?e.extraFolders.flatMap(n=>["--add-dir",n]):[]]}function hv(e){return["-p","--output-format","stream-json","--include-partial-messages","--verbose",...e.model?["--model",e.model,...Ec(e.fallbackModel)]:[],"--append-system-prompt-file",e.systemPromptFile,...e.resumeSessionId?["--resume",e.resumeSessionId]:[],...ete(e.access,e.sandbox),"--",e.prompt]}var wB,SB=p(()=>{"use strict";Ao();gr();wB=["Bash","WebFetch","WebSearch"]});import{lookup as tte}from"node:dns/promises";import{createServer as rte,request as nte}from"node:http";import{connect as ote,isIP as CB,isIPv4 as ste}from"node:net";function EB(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 Ll(e){let t=EB(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 ate(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=EB(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 lte(e){let t=ate(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 Ll(n(t[6],t[7]));if(t[0]===8194)return Ll(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 _B(e){let t=CB(e);return t===4?Ll(e):t===6?lte(e):!0}function cte(e){return e==="localhost"||e.endsWith(".localhost")||e==="localhost6"||e==="ip6-localhost"}function ute(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 AB(e){return(await tte(e,{all:!0})).map(r=>r.address)}async function xB(e,t=AB){let r=ute(e);if(!r||r.length>ite)return{allowed:!1,host:r,reason:"invalid host"};if(cte(r))return{allowed:!1,host:r,reason:`${r} is this computer (loopback): local services are not reachable from a folder step`};if(CB(r))return _B(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=>_B(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=>ste(s))??n[0]}}function yv(e,t,r){let n=`Kynver folder sandbox: ${r}
|
|
235
|
+
`;e.write(`HTTP/1.1 ${t} ${t===kv?"Forbidden":"Bad Gateway"}\r
|
|
230
236
|
Content-Type: text/plain\r
|
|
231
237
|
Content-Length: ${Buffer.byteLength(n)}\r
|
|
232
238
|
Connection: close\r
|
|
233
239
|
\r
|
|
234
|
-
${n}`),e.end()}function
|
|
240
|
+
${n}`),e.end()}function pte(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 fte(e={}){let t=e.lookup??AB,r=e.dial??((m,g)=>ote({host:m,port:g})),n=e.idleMs??dte,o={allowed:0,denied:0},s=(m,g,h)=>{let y=pte(m.url);if(g.on("error",()=>g.destroy()),!y){o.denied+=1,yv(g,400,"CONNECT needs host:port");return}xB(y.host,t).then(b=>{if(!b.allowed){o.denied+=1,yv(g,kv,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
241
|
\r
|
|
236
|
-
`),h.length&&k.write(h),k.pipe(g),g.pipe(k)}),k.on("error",
|
|
242
|
+
`),h.length&&k.write(h),k.pipe(g),g.pipe(k)}),k.on("error",w=>{if(v){g.destroy();return}yv(g,502,`could not connect to ${b.host}:${y.port} (${w.code??w.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
243
|
`);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;
|
|
239
|
-
`);return}o.allowed+=1;let k={...m.headers};delete k["proxy-connection"],delete k["proxy-authorization"];let v=
|
|
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
|
|
244
|
+
`);return}let y=h.port?Number(h.port):80;xB(h.hostname,t).then(b=>{if(!b.allowed){o.denied+=1,g.writeHead(kv,{"Content-Type":"text/plain",Connection:"close"}).end(`Kynver folder sandbox: ${b.reason}
|
|
245
|
+
`);return}o.allowed+=1;let k={...m.headers};delete k["proxy-connection"],delete k["proxy-authorization"];let v=nte({host:b.address,port:y,method:m.method,path:`${h.pathname}${h.search}`,headers:k,setHost:!1,createConnection:()=>r(b.address,y,b.host)},w=>{g.writeHead(w.statusCode??502,w.headers),w.pipe(g)});v.setTimeout(n,()=>v.destroy(new Error("idle"))),v.on("error",w=>{g.headersSent||g.writeHead(502,{"Content-Type":"text/plain"}),g.end(`Kynver folder sandbox: could not reach ${b.host}:${y} (${w.code??w.message})
|
|
246
|
+
`)}),m.pipe(v)})},a=()=>{let m=rte(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 PB(e={}){return ki?.listening()?ki:(ff||(ff=fte(e).then(t=>(ki=t,Bl=null,t)).catch(t=>{throw ki=null,Bl=`egress proxy could not start: ${t?.message??String(t)}`.slice(0,240),new Error(Bl)}).finally(()=>{ff=null})),ff)}function IB(){return ki?.listening()?{status:"running",port:ki.port}:Bl?{status:"failed",reason:Bl}:{status:"not_started"}}var ite,dte,kv,ki,ff,Bl,bv=p(()=>{"use strict";ite=253;dte=10*6e4,kv=403;ki=null,ff=null,Bl=null});import{existsSync as mte}from"node:fs";import gf from"node:path";function Rv(e=process.env,t={}){let r=(e[gte]??t.chatFolderSandbox??"").toString().trim().toLowerCase();return r==="best-effort"||r==="best_effort"||r==="optional"?"best_effort":"required"}function DB(e=process.env,t={}){let r=[],n=e[hte];n&&r.push(...n.split(/[\s,]+/)),Array.isArray(t.chatFolderSandboxDomains)&&r.push(...t.chatFolderSandboxDomains.filter(s=>typeof s=="string"));let o=[...yte];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 mf(e){return`~/${e}`}function vte(){let e=[];for(let t of hf)e.push(`Read(${mf(t)}/**)`,`Edit(${mf(t)}/**)`);for(let t of yf)e.push(`Read(${mf(t)})`,`Edit(${mf(t)})`);for(let t of bi)e.push(`Read(//**/${t})`,`Edit(//**/${t})`);return e}function Rte(e,t=[],r={}){let n=["~/",...bte];for(let o of hf)n.push(`~/${o}`);for(let o of yf)n.push(`~/${o}`);for(let o of t)n.push(vv(o));if(r.scanComplete!==!0)for(let o of e)for(let s of bi)n.push(gf.posix.join(vv(o),"**",s));return n}function wte(e){return[...e.map(vv),...kte.map(t=>`~/${t}`)]}function vv(e){return e.split(gf.sep).join("/")}function OB(e){let t={deny:vte(),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:Rte(e.folders,e.sensitiveFiles,{scanComplete:e.sensitiveScanComplete}),allowRead:wte(e.folders)},network:{allowedDomains:e.domains,allowLocalBinding:!0,...typeof r=="number"&&r>0?{httpProxyPort:r}:{}}}}}function MB(e){return!!e&&Ste.test(e)}function _te(e,t,r){return(t.PATH??"").split(gf.delimiter).filter(Boolean).some(o=>r(gf.join(o,e)))}function xte(e={}){let t=e.platform??process.platform,r=e.env??process.env,n=e.exists??mte;if(t==="darwin")return{kind:"seatbelt",available:!0,missing:[]};if(t==="linux"){let o=["bwrap","socat"].filter(s=>!_te(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 wv(){return TB??=xte(),TB}function BB(e){LB=e.trim().slice(0,240)||"sandbox failed to start"}function Sv(){return LB}function UB(e){return e.streamed.trim()||e.exitCode===0||e.numTurns!==null&&e.numTurns>0?!1:Cte.test(e.detail)&&Ete.test(e.detail)}function FB(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:OB({folders:t,sandbox:!0,domains:e.domains,egressProxyPort:o,sensitiveFiles:e.sensitiveFiles,sensitiveScanComplete:e.sensitiveScanComplete}),note:o?`${NB} ${Ate}`:`${NB} ${Pte}`}}let n=OB({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:Ote}:{shell:"disabled",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:Ite}}function kf(e=process.env,t={},r={}){let n=r.runtime??wv(),o=r.startupFailure===void 0?Sv():r.startupFailure,s=Rv(e,t),i=n.available?o??void 0:n.reason,a=i?s==="best_effort"?"unconfined":"disabled":"sandboxed",l=r.egress??IB(),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 gte,hte,yte,hf,yf,bi,kte,bte,Po,Ste,TB,LB,Cte,Ete,NB,Ate,Pte,Ite,Ote,Ul=p(()=>{"use strict";bv();gte="KYNVER_CHAT_FOLDER_SANDBOX",hte="KYNVER_CHAT_FOLDER_SANDBOX_DOMAINS";yte=["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"];hf=[".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"],yf=[".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"],bi=[".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.*"],kte=[".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"],bte=["/home","/root","/Users","/mnt","/media","/Volumes"];Po=3128,Ste=new RegExp([`failed to connect to (?:localhost|127\\.0\\.0\\.1|::1|\\[::1\\]) port ${Po}\\b`,`(?:localhost|127\\.0\\.0\\.1|\\[::1\\]|::1):${Po}\\b[^\\n]{0,80}?(?:connection refused|econnrefused)`,`(?:connection refused|econnrefused)[^\\n]{0,80}?(?:localhost|127\\.0\\.0\\.1|::1):${Po}\\b`,`(?:cannot|could not|unable to) connect to proxy[^\\n]{0,80}?${Po}\\b`,`proxyerror[^\\n]{0,120}?${Po}\\b`].join("|"),"i");TB=null;LB=null;Cte=/sandbox/i,Ete=/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;NB="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.",Ate="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.",Pte="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.",Ite="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.",Ote="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 Tte}from"node:fs/promises";import _v from"node:path";function xv(e){let t=e.map(r=>r.split("*").map(n=>n.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*"));return new RegExp(`^(?:${t.join("|")})$`,"i")}async function KB(e,t,r={}){let n=r.now??Date.now,o=n(),s=r.maxEntries??Nte,i=r.maxMs??Dte,a=r.maxResults??Mte,l=xv(t),c=new Set,u=[...new Set(e.map(g=>_v.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+=WB){if(m()){f=!0;break}let y=u.slice(h,h+WB),b=await Promise.all(y.map(k=>Tte(k,{withFileTypes:!0}).then(v=>({dir:k,entries:v}),v=>(Lte.has(v?.code??"")||(f=!0),{dir:k,entries:[]}))));for(let{dir:k,entries:v}of b)for(let w of v){if(d>=s){f=!0;break}d+=1;let S=_v.join(k,w.name);l.test(w.name)?c.add(Bte(S)):w.isDirectory()&&!w.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 Bte(e){return e.split(_v.sep).join("/")}var Nte,Dte,Mte,WB,Lte,Cv=p(()=>{"use strict";Nte=25e4,Dte=15e3,Mte=2e3,WB=64,Lte=new Set(["ENOENT","EACCES","EPERM","ENOTDIR"])});import{spawn as Ute}from"node:child_process";import{mkdirSync as Fte,mkdtempSync as Wte,rmSync as Kte,writeFileSync as bf}from"node:fs";import{tmpdir as $te}from"node:os";import Io from"node:path";function Qte(){return{".curlrc":`retry = 5
|
|
241
247
|
retry-connrefused
|
|
242
248
|
retry-delay = 1
|
|
243
249
|
`,".wgetrc":`tries = 5
|
|
244
250
|
retry_connrefused = on
|
|
245
251
|
waitretry = 1
|
|
246
|
-
`}}function
|
|
247
|
-
`)}function
|
|
248
|
-
${n}`:"Continue."}function
|
|
252
|
+
`}}function ere(){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 ${Zte} ]; 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(`
|
|
253
|
+
`)}function tre(e){let t=Io.join(e,"net");Fte(t,{recursive:!0,mode:448});for(let[n,o]of Object.entries(Qte()))bf(Io.join(t,n),o,{encoding:"utf8",mode:420});let r=Io.join(t,"bridge-wait.sh");return bf(r,ere(),{encoding:"utf8",mode:420}),{CURL_HOME:t,WGETRC:Io.join(t,".wgetrc"),BASH_ENV:r}}function Av(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 rre(e){if(!Av(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 nre(e){if(!Av(e))return!1;let t=e.event;return t.type==="content_block_start"&&t.content_block?.type==="text"}function ore(e){if(!Av(e))return"";let t=e.event;return t.type!=="message_delta"?"":typeof t.delta?.stop_reason=="string"?t.delta.stop_reason:""}function sre(e,t){let r=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):0;if(r<=0)return e;let n=Number(e[HB]);return Number.isFinite(n)&&n>=r?e:{...e,[HB]:String(r)}}function ire(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 are(e){return typeof e.session_id=="string"&&e.session_id.trim()?e.session_id.trim():null}function lre(e){let t=Array.isArray(e.messages)?e.messages:[],r=t[t.length-1],n=r?QL(r.content).trim():"";return n?`User:
|
|
254
|
+
${n}`:"Continue."}function ure(e){return e.streamed.trim()||e.exitCode===0&&!e.resultIsError?!1:cre.test(e.detail)||e.numTurns===0}function dre(e,t){let r=e.trim().slice(0,240);return Vte.test(e)?`${jte}: ${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 pre(e){try{return{port:(await PB(e)).port}}catch(t){return{reason:t?.message??String(t)}}}async function fre(e){if(e.access.access!=="folder"&&e.access.access!=="folders")return null;let t=e.sandboxRuntime??wv(),r=Sv(),n=t.available&&!r,o=n?await pre(e.egressProxy):null,s=n?await KB(e.access.folders,bi):null;return s?.truncated&&console.error(JSON.stringify({event:"chat_folder_sensitive_scan_truncated",scanned:s.scanned,found:s.paths.length,durationMs:s.durationMs})),FB({access:e.access,policy:Rv(e.env,e.config),runtime:t,domains:DB(e.env,e.config),startupFailure:r,egress:o,sensitiveFiles:s?.paths??[],sensitiveScanComplete:s?!s.truncated:!1})}async function vf(e){let t=Date.now(),r=!1,n=null,o=null,s=(i,a)=>(e.onStepLogged??iL)({at:new Date().toISOString(),turnId:e.turnId??"",resumed:r,appVersion:n,durationMs:Date.now()-t,ok:i,...i?{}:{reason:sL(a)}});try{let i=await mre(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 mre(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??vB,a=bB(e.step);if(a<=0)throw new Error("claude_code_no_time_left");let l=nr(e.payload.tools),c=ov(e.payload,"agent",l,e.access),u=e.spawnTarget?.executable??(s.KYNVER_CLAUDE_BIN?.trim()||s.CLAUDE_BIN?.trim()||"claude"),d=Wte(Io.join(e.tempRoot??$te(),"kynver-claude-code-")),f=Io.join(d,"kynver-system-prompt.md"),m=Cc(e.model,{pinned:e.modelPinned===!0}),g=Io.join(d,"kynver-claude-code-settings.json"),h=Date.now(),y=new Set(l.map(R=>R.name)),b=()=>fre({access:e.access,env:s,config:e.config,sandboxRuntime:e.sandboxRuntime,egressProxy:e.egressProxy}),k=await b();k?.network==="domain-list"&&console.error(JSON.stringify({event:"claude_code_sandbox_egress_unavailable",turnId:e.turnId??null,reason:k.networkReason??null}));let v={},w=()=>{bf(f,k?`${c.head}
|
|
249
255
|
|
|
250
|
-
${
|
|
256
|
+
${k.note}`:c.head,{encoding:"utf8",mode:384}),k&&bf(g,JSON.stringify(k.settings,null,2),{encoding:"utf8",mode:384}),v=k?.shell==="sandboxed"?tre(d):{}},S=()=>k?{settingsFile:g,shell:k.shell}:void 0,_=async()=>{let R=i.get(e.step.session);if(R){let j=a-(Date.now()-h);if(j<=0)throw new Error("claude_code_no_time_left");r(!0);let O=await jB({...e,env:s,extraEnv:{...e.extraEnv,...v},executable:u,sessions:i,limitMs:j,advertisedNames:y,maxTokens:e.payload.maxTokens,args:hv({model:e.model,fallbackModel:m,systemPromptFile:f,access:e.access,prompt:lre(e.payload),resumeSessionId:R,sandbox:S()}),resumed:!0,sandboxed:k?.shell==="sandboxed",onAppVersion:n});if(!O.resumeRefused)return O;i.forget(e.step.session),r(!1)}let L=a-(Date.now()-h);if(L<=0)throw new Error("claude_code_no_time_left");return jB({...e,env:s,extraEnv:{...e.extraEnv,...v},executable:u,sessions:i,limitMs:L,advertisedNames:y,maxTokens:e.payload.maxTokens,args:hv({model:e.model,fallbackModel:m,systemPromptFile:f,access:e.access,prompt:c.body||"Continue.",sandbox:S()}),resumed:!1,sandboxed:k?.shell==="sandboxed",onAppVersion:n})};try{w();let R=await _();return R.sandboxUnavailable&&k&&(BB(R.sandboxUnavailable),k=await b(),console.error(JSON.stringify({event:"claude_code_sandbox_unavailable",turnId:e.turnId??null,reason:R.sandboxUnavailable,shell:k?.shell??null})),w(),R=await _(),R.sandboxUnavailable&&(R={error:new Error(`claude_code_sandbox_unavailable: ${R.sandboxUnavailable}`)})),(R.failure?.startsWith(Ev)||R.error?.message.startsWith(Ev))&&a-(Date.now()-h)>Xte&&(console.error(JSON.stringify({event:"claude_code_sandbox_proxy_down_retry",turnId:e.turnId??null})),R=await _()),o(R)}finally{Kte(d,{recursive:!0,force:!0})}}function jB(e){let t=sB();return new Promise(r=>{let n;try{let[x,G]=ie(e.executable,[...e.spawnTarget?.prefixArgs??[],...e.args]),C=ee({cwd:e.access.workDir,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:{...sre(eB(e.env,e.access.access),e.maxTokens),...e.extraEnv,NO_COLOR:"1"}});n=Ute(x,G,C)}catch(x){r({error:VB(x,e.executable)});return}let o=!1,s=new rr,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,w=!1,S=x=>{let G=s.push(x);G&&(i+=G,e.onDelta(G))},_=(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})),R=x=>{o||(o=!0,clearTimeout(J),O&&k&&clearTimeout(O),e.signal?.removeEventListener("abort",N),r(x))},L=(x="")=>{let G=s.end();G&&(i+=G,e.onDelta(G));let C=mv(a,c?"":l),I=Cn(C,e.advertisedNames);gv(I.text,i,e.onDelta),x&&e.onDelta(x),I.rejected.length>0&&_("claude_code_tool_call_rejected",{names:I.rejected.slice(0,5)});let M=En(I,e.turnId??"turn",x),ne=M.stop_reason==="end_turn"&&d==="max_tokens";return(I.cut||ne)&&_("claude_code_reply_cut",{stopReason:d||null,cutTool:I.cut?.name??null,chars:C.length}),{content:M.content,stop_reason:ne?"max_tokens":M.stop_reason,usage:f}},j=x=>{n.pid?he(n.pid,x):nt(n,x)},O,T=()=>{j("SIGTERM"),O??=setTimeout(()=>{k||(j("SIGKILL"),setTimeout(()=>{o||F(null)},$B).unref())},$B),O.unref()},U=()=>{if(e.onActivity)for(let x of t.interrupted())e.onActivity(x)},N=()=>{T(),U(),R({error:new Error("claude_code_chat_aborted")})},J=setTimeout(()=>{y=!0,T()},e.limitMs);if(n.on("error",x=>R({error:VB(x,e.executable)})),e.signal){if(e.signal.aborted){N();return}e.signal.addEventListener("abort",N)}let W=x=>{let G=x.trim();if(!G)return;let C;try{C=JSON.parse(G)}catch{return}let I=are(C);I&&e.sessions.remember(e.step.session,I);let M=Pm(C);M&&console.error(`[chat] ${M}`),C.type==="system"&&typeof C.claude_code_version=="string"&&(m=C.claude_code_version,e.onAppVersion(m)),nre(C)&&a&&!a.endsWith(`
|
|
251
257
|
`)&&(a+=`
|
|
252
258
|
|
|
253
|
-
`,
|
|
259
|
+
`,S(`
|
|
254
260
|
|
|
255
|
-
`));let
|
|
256
|
-
`).slice(0,1e3)),f=
|
|
257
|
-
`))!==-1;){let C=h.slice(0,G);h=h.slice(G+1),
|
|
261
|
+
`));let ne=rre(C);ne&&(a+=ne,S(ne));let V=ore(C);if(V&&(d=V),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(Z=>typeof Z=="string").join(`
|
|
262
|
+
`).slice(0,1e3)),f=ire(C)??f),e.onActivity)for(let Z of t(C))e.onActivity(Z);e.sandboxed&&!w&&C.type==="user"&&gre(C)&&(v+=1,_("claude_code_sandbox_proxy_down",{hits:v}),v>=zte&&(w=!0,T()))};n.stdout?.on("data",x=>{h+=typeof x=="string"?x:x.toString("utf8");let G;for(;(G=h.indexOf(`
|
|
263
|
+
`))!==-1;){let C=h.slice(0,G);h=h.slice(G+1),W(C)}}),n.stderr?.on("data",x=>{g+=typeof x=="string"?x:x.toString("utf8"),g.length>8e3&&(g=g.slice(-8e3))});let F=x=>{if(k=!0,o)return;if(h.trim()&&W(h),h="",U(),w){let M=`${Ev}: ${qte}`;R(a.trim()?{message:L(Yte),failure:M}:{error:new Error(M)});return}if(y){_("claude_code_step_timeout",{limitMs:e.limitMs}),R(a.trim()?{message:L(Jte),failure:"claude_code_step_timeout"}:{error:new Error("claude_code_step_timeout")});return}let G=`${l}
|
|
258
264
|
${b}
|
|
259
|
-
${g}`,C=x!==0||c;if(e.sandboxed&&
|
|
260
|
-
`):"";if(
|
|
265
|
+
${g}`,C=x!==0||c;if(e.sandboxed&&UB({exitCode:x,streamed:a,numTurns:u,detail:G})){R({sandboxUnavailable:G.trim().slice(0,240)||"sandbox failed to start"});return}if(e.resumed&&ure({exitCode:x,resultIsError:c,numTurns:u,streamed:a,detail:G})){_("claude_code_resume_refused",{exitCode:x}),R({resumeRefused:!0});return}if(C){let M=dre(G,x);_("claude_code_turn_error",{exitCode:x,error:M,partial:!!a.trim()}),R(a.trim()?{message:L(Gte),failure:M}:{error:new Error(M)});return}let I=L();_("claude_code_turn_end",{exitCode:x,stopReason:I.stop_reason}),R({message:I})};n.on("close",F)})}function gre(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(`
|
|
266
|
+
`):"";if(MB(o))return!0}return!1}function VB(e,t){return e?.code==="ENOENT"?new Error(`${Hte}: failed to spawn \`${t}\`. Install Claude Code and keep \`claude\` on PATH.`):e instanceof Error?e:new Error(String(e))}var Hte,jte,Vte,Gte,$B,Jte,Ev,qte,Yte,zte,Xte,Zte,HB,cre,Pv=p(()=>{"use strict";D();Fe();gr();Ml();pf();RB();SB();Ao();Ul();Cv();bv();Kb();Dl();df();fi();Hte="claude_code_unavailable",jte="claude_code_not_logged_in",Vte=/not logged in|please run \/login|invalid api key|authentication|unauthorized|401\b/i,Gte=`
|
|
261
267
|
|
|
262
|
-
(Stopped: Claude Code ended this step with an error before finishing.)
|
|
268
|
+
(Stopped: Claude Code ended this step with an error before finishing.)`,$B=5e3,Jte=`
|
|
263
269
|
|
|
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.)`,
|
|
270
|
+
(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.)`,Ev="claude_code_sandbox_proxy_down",qte=`sandbox network proxy not running (localhost:${Po} refused inside the folder sandbox)`,Yte=`
|
|
265
271
|
|
|
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.)`,
|
|
272
|
+
(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.)`,zte=2,Xte=3e4;Zte=60;HB="CLAUDE_CODE_MAX_OUTPUT_TOKENS";cre=/no conversation found|session .*not found/i});function GB(e){if(e)return e;let t=A();return{chatProvider:t.chatProvider,workerProvider:t.workerProvider}}function Iv(e,t,r=process.env,n){if(e==="cursor"){let o=zu(r);if(!o.ok)throw new ir(zE(o));return}if(e==="codex"){let o=Zp(r);if(!o.ok)throw new ir(SL(o));return}if(e==="gemini"){let o=r;if(_o(GB(n),o)==="antigravity"){let s=nf(o);if(!s.ok)throw new ir(EL(s));return}if(!Al(r))throw new ir("gemini_api_key_missing");return}if(e==="openai"){if(!Pl(r))throw new ir("openai_api_key_missing");return}if(!Cl(r,{oauthOptIn:t}))throw new ir("no_local_credentials")}async function JB(e){let t=e.env??process.env,{provider:r,model:n,payload:o,onDelta:s,signal:i}=e;Iv(r,e.useClaudeOauth,t,e.config);let a=e.config??A(),l=xo({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 uB({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,requestId:e.requestId,...u});if(r==="codex")return dB({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,...u});if(r==="gemini"&&_o(GB(e.config),t)==="antigravity")return mB({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,env:t,...u});if(r==="gemini"||r==="openai"){let m=r==="gemini"?Al(t):Pl(t);return hB({creds:m,model:n,payload:o,onDelta:s,signal:i})}let d=kB(o.claudeCode);if(d&&l.engine==="claude-code"&&l.access.access!=="off")return vf({payload:o,model:n,modelPinned:e.modelPinned,onDelta:s,signal:i,step:d,turnId:e.turnId,requestId:e.requestId,env:t,config:a,...u});let f=Cl(t,{oauthOptIn:e.useClaudeOauth});return FL({creds:f,model:n,payload:o,onDelta:s,onToolProgress:e.onToolProgress,signal:i})}var ir,Ov=p(()=>{"use strict";Jb();tv();Os();df();ef();pB();of();gB();Lp();Yb();yB();$();Gp();pf();Pv();ir=class extends Error{constructor(r){super(r);this.code=r;this.name="ChatCredentialError"}code}});function hre(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 qB(e){let t=Tl(e.payload.requestedModel),r=typeof e.payload.fallbackNoticeShown=="string"?e.payload.fallbackNoticeShown:null,{requestedModel:n,fallbackNoticeShown:o,...s}=e.payload,i=PL({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=TL(i,g),y=NL(i,g);!h||!y||h===r||d||(d=`${y}
|
|
267
273
|
|
|
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:
|
|
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
|
|
270
|
-
`,{mode:384}),
|
|
271
|
-
`);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*
|
|
272
|
-
`))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=
|
|
274
|
+
`,f=h,e.onDelta(d))};for(;;){c.push(i.provider);try{m();let g=i.fallbackReason==="usage_limit"?!1:t&&!i.fallbackReason?!0:e.primaryPinned===!0,h=await e.runTurn({provider:i.provider,model:i.model,modelPinned:g,payload:s,onDelta:b=>{b&&(u=!0),e.onDelta(b)}});return{...d?hre(h,d):h,kynverModel:{provider:i.provider,model:i.model,requested:i.fallbackReason?a:null,fallbackReason:i.fallbackReason,noticeKey:f}}}catch(g){let y=!u&&(OL(g)||g instanceof ir&&c.length>1)?IL(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 YB=p(()=>{"use strict";Qb();Ov()});function zB(e,t=1e4,r=Date.now){let n=0;return{noteToolBytes(){let o=r();n!==0&&o-n<t||(n=o,e())}}}var XB=p(()=>{"use strict"});function yre(e,t,r,n,o){try{let s=xo({provider:t.chatProvider,config:n,payloadAccess:e.payload.computerAccess,boxId:t.boxId}),i=MM(s.access,{signed:r.signed});if(!i)return;let a=i.from?ai(i.from.access):"not set",l=ai(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};li({...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 Tv(e,t,r){let n=Date.now(),o=0,s=!1,i=new _n,a=new AbortController,l=t.requestId??"",c=b=>{s||i.track(Ee(e,t.turnId,[{seq:o++,kind:"delta",text:b}]).then(k=>(k||(s=!0,a.abort()),k)))},u=new Sn(c),d=zB(()=>{s||i.track(Ee(e,t.turnId,[{seq:o++,kind:"activity",activity:{kind:"tool_progress"}}]).then(b=>(b||(s=!0,a.abort()),b)))}),f=Xp({turnId:t.turnId,chat:l||null,send:b=>{s||(u.flush(),i.track(Ee(e,t.turnId,[{seq:o++,kind:"activity",activity:b}]).then(k=>(k||(s=!0,a.abort()),k))))}}),m=e.chatProvider??"anthropic",g=A(),h=pi(g);r&&yre(t,e,r,g,b=>{s||i.track(Ee(e,t.turnId,[{seq:o++,kind:"activity",activity:b}]).then(k=>(k||(s=!0,a.abort()),k)))});try{Iv(m,e.useClaudeOauth,process.env,g)}catch(b){let k=Tl(t.payload.requestedModel);if(!(k&&h.some(w=>w.provider===k.provider&&w.models.includes(k.model)))){await Ee(e,t.turnId,[{seq:0,kind:"error",error:b instanceof Error?b.message:String(b)}]).catch(()=>{});return}}let y={provider:m,model:e.model};try{let b=await qB({payload:t.payload,catalog:h,primary:{provider:m,model:e.model},primaryPinned:!!(process.env.KYNVER_CHAT_MODEL?.trim()||g.defaultModel?.trim()),onDelta:w=>u.push(w),runTurn:w=>(y={provider:w.provider,model:w.model},JB({...w,onToolProgress:()=>d.noteToolBytes(),signal:a.signal,turnId:t.turnId,requestId:t.requestId,useClaudeOauth:e.useClaudeOauth,config:g,boxId:e.boxId,onActivity:f.sink}))});bL(b.content,xo({provider:y.provider,config:g,payloadAccess:t.payload.computerAccess,boxId:e.boxId}),f),u.close(),await i.drain();let k=o++;if(!await jr(()=>s?Ee(e,t.turnId,[{seq:k,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):Ee(e,t.turnId,[{seq:k,kind:"final",message:b}]).catch(()=>!1))){console.error(JSON.stringify({event:"chat_turn_final_rejected",requestId:l,turnId:t.turnId,model:y.model,chatProvider:y.provider}));return}console.error(JSON.stringify({event:"chat_turn_done",requestId:l,turnId:t.turnId,model:y.model,chatProvider:y.provider,fallbackReason:b.kynverModel.fallbackReason,activitySteps:f.steps,durationMs:Date.now()-n}))}catch(b){u.close(),await i.drain(),s||await Ee(e,t.turnId,[{seq:o++,kind:"error",error:b instanceof Error?b.message:String(b)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",requestId:l,turnId:t.turnId,error:b instanceof Error?b.message:String(b),durationMs:Date.now()-n}))}}var Nv=p(()=>{"use strict";$();Pb();Gb();vL();wl();Ol();Qb();Zb();Gp();YB();Ov();Yp();XB();zp();xl()});function ZB(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 Fl(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 QB.set(e,n),n}function Rf(e){return QB.get(e)??null}var QB,Dv=p(()=>{"use strict";QB=new Map});import{existsSync as eU,readFileSync as kre}from"node:fs";import{homedir as tU}from"node:os";import Oo from"node:path";function rU(e){try{return eU(e)?kre(e,"utf8"):null}catch{return null}}function bre(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 nU(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 vre(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 Rre(e){return/^(1|true|yes|on)$/i.test((e??"").trim())}function oU(e={}){let r=(e.env??process.env).HERMES_HOME?.trim();return r?Oo.resolve(r):Oo.join(e.home??tU(),".hermes")}function wre(e={}){return Oo.join(oU(e),".env")}function wf(e={}){let t=e.readFile??rU,r=wre(e),n=t(r),o=n===null?{}:vre(n),s=o.API_SERVER_KEY?.trim()||null;return{baseUrl:`http://${bre(o.API_SERVER_HOST)}:${nU(o.API_SERVER_PORT,8642)}`,key:s,enabled:Rre(o.API_SERVER_ENABLED)||s!==null&&o.API_SERVER_ENABLED===void 0,configured:n!==null||eU(oU(e)),configPath:r}}function Sre(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]!==`
|
|
275
|
+
`;)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 Wl(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 Kl(e){return typeof e=="string"&&e.trim()?e.trim():null}function _re(e={}){let t=e.env??process.env,r=t.OPENCLAW_CONFIG_PATH?.trim();if(r)return Oo.resolve(r);let n=t.OPENCLAW_STATE_DIR?.trim();return Oo.join(n?Oo.resolve(n):Oo.join(e.home??tU(),".openclaw"),"openclaw.json")}function Sf(e={}){let t=e.env??process.env,r=e.readFile??rU,n=_re(e),o=r(n),s=o===null?null:Sre(o),i=Kl(Wl(s,["gateway","auth","mode"])),a=(i==="password"?Kl(Wl(s,["gateway","auth","password"]))??Kl(t.OPENCLAW_GATEWAY_PASSWORD):Kl(Wl(s,["gateway","auth","token"]))??Kl(t.OPENCLAW_GATEWAY_TOKEN))??(i==="none"?"":null);return{baseUrl:`http://127.0.0.1:${nU(t.OPENCLAW_GATEWAY_PORT??Wl(s,["gateway","port"]),18789)}`,key:a,enabled:Wl(s,["gateway","http","endpoints","chatCompletions","enabled"])===!0,configured:o!==null,configPath:n}}var Mv=p(()=>{"use strict"});import{existsSync as xre}from"node:fs";import{homedir as Cre,platform as Ere}from"node:os";import An from"node:path";function Are(e,t,r={}){if(t==="darwin")return An.join(e,"Library","Application Support","Grok Bot");if(t==="win32"){let s=r.APPDATA?.trim();return An.join(s||An.join(e,"AppData","Roaming"),"Grok Bot")}let n=r.XDG_CONFIG_HOME?.trim(),o=n&&An.isAbsolute(n)?n:An.join(e,".config");return An.join(o,"Grok Bot")}function Pre(e){return[An.join("/opt","Grok Bot","grok-bot"),An.join(e,".local","bin","grok-bot")]}async function sU(e={}){let t=e.home??Cre(),r=e.platform??Ere(),n=e.env??process.env,o=e.exists??xre,s=e.versionOf??(async()=>null),i=r==="linux"?Pre(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(Are(t,r,n))||i.some(c=>o(c)),version:a}}var iU=p(()=>{"use strict"});async function _f(e={}){let t=await sU(e);return t.installed?{status:"not_enabled",version:t.version,detail:Ore}:{status:"not_installed",version:null,detail:Ire}}var Ire,Ore,Lv=p(()=>{"use strict";iU();Ire="Grok Bot is not installed on this computer.",Ore="Grok Bot is installed. Kynver chat for this tab does not use the desktop app."});import{execFile as Tre}from"node:child_process";async function Fre(e){let t=aU.get(e);if(t&&Date.now()-t.at<Dre)return t.version;let r=await new Promise(n=>{try{let[o,s]=ie(e,["--version"]);Tre(o,s,ee({encoding:"utf8",timeout:5e3}),(i,a,l)=>{if(i)return n(null);n(`${a??""} ${l??""}`.match(Ure)?.[0]??null)})}catch{n(null)}});return aU.set(e,{at:Date.now(),version:r}),r}async function lU(e,t,r,n=Mre){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 Bv(e){let t=uU.get(e)??null,r=Rf(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 Wt(e,t,r,n){let o=Bv(e);return{engine:e,status:t,version:r,detail:n,lastRoundTrip:Rf(e),lastReadyAt:o===null?null:new Date(o).toISOString()}}async function cU(e,t,r,n,o=Date.now){if(!t.configured&&!r)return null;let s=e==="hermes"?"Hermes":"OpenClaw";if(!t.enabled)return Wt(e,"not_enabled",r,`${s}'s local chat API is off`);if(t.key===null)return Wt(e,"no_key",r,`${s}'s local chat API has no key set`);let i=`${t.baseUrl}/v1/models`,a=await lU(n,i,t.key||null)??await lU(n,i,t.key||null,Lre);if(a===null){let l=Bv(e);return l!==null&&o()-l<Bre?Wt(e,"ready",r,null):Wt(e,"unreachable",r,`${s} is not answering on ${t.baseUrl} \u2014 is its gateway running?`)}return a===401||a===403?Wt(e,"no_key",r,`${s} refused the key in its config (HTTP ${a})`):a===404?Wt(e,"not_enabled",r,`${s} is running but its chat API is not switched on`):(uU.set(e,o()),Wt(e,"ready",r,null))}function Wre(e){let{version:t,signedIn:r}=(e.claudeCode??(()=>({version:Up("claude-code",e.env),signedIn:Fp(e.env)})))();return t?r?(e.config??A()).chatComputerAccess==="off"?Wt("claude-code","access_off",t,"Computer access for chat is off on this computer"):Wt("claude-code","ready",t,null):Wt("claude-code","not_signed_in",t,"Claude Code is installed but not signed in"):null}async function Kre(e){let t=await _f({home:e.home,env:e.env,exists:e.grokBotExists,versionOf:e.versionOf,platform:e.platform});return Wt("grok-bot",t.status,t.version,t.detail)}async function $re(e={}){let t=e.env??process.env,r=e.fetchFn??fetch,n=e.versionOf??Fre,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([cU("hermes",wf(e),i,r,e.now),cU("openclaw",Sf(e),a,r,e.now)]),u=await Kre({...e,versionOf:n});return{v:1,engines:[l,c,Wre(e),u].filter(f=>f!==null)}}function Hre(e={}){return $l||(Hl&&Date.now()-Hl.at<Nre?Promise.resolve():($l=$re(e).then(t=>{Hl={at:Date.now(),report:t}}).catch(()=>{}).finally(()=>{$l=null}),$l))}function xf(){if(Hre(),!!Hl)return{v:1,engines:Hl.report.engines.map(e=>{let t=Bv(e.engine);return{...e,lastRoundTrip:Rf(e.engine),lastReadyAt:t===null?null:new Date(t).toISOString()}})}}var Nre,Dre,Mre,Lre,Bre,Ure,aU,uU,Hl,$l,Uv=p(()=>{"use strict";$();Fe();D();Sl();Dv();Mv();Lv();Nre=3e4,Dre=10*6e4,Mre=1500,Lre=5e3,Bre=3e4,Ure=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,aU=new Map;uU=new Map;Hl=null,$l=null});function dU(){return jre}var jre,pU=p(()=>{"use strict";Lv();jre={id:"mailbox",probe:e=>_f(e),relay(){return Promise.resolve({text:"",mailbox:!0})}}});import{existsSync as Vre,mkdirSync as Gre,readFileSync as Jre,renameSync as qre,writeFileSync as Yre}from"node:fs";import{homedir as zre}from"node:os";import mU from"node:path";function Xre(e=zre()){return mU.join(e,".kynver","agent-tab-sessions.json")}function gU(e=Xre(),t=Date.now){let r=()=>{try{if(!Vre(e))return{};let o=JSON.parse(Jre(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>fU&&s.sort((i,a)=>o[i].at-o[a].at).slice(0,s.length-fU).forEach(i=>delete o[i]);try{Gre(mU.dirname(e),{recursive:!0,mode:448});let i=`${e}.${process.pid}.tmp`;Yre(i,`${JSON.stringify(o)}
|
|
276
|
+
`,{mode:384}),qre(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 fU,hU=p(()=>{"use strict";fU=500});function yU(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(`
|
|
277
|
+
`);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*Cf(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(`
|
|
278
|
+
`))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=yU(o);o=[],u&&(yield u)}else o.push(c)}}n+=r.decode(),n&&o.push(n.replace(/\r$/,""));let s=yU(o);s&&(yield s)}finally{t.releaseLock()}}var Fv=p(()=>{"use strict"});function Wv(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 kU(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 bU(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"?"":Wv(n.content)}).join(""):""}function Kv(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:bU(r.response)||null,finishReason:"stop",error:null};if(n==="response.failed"||n==="error"){let d=r.response;return{delta:"",full:null,finishReason:"error",error:kU(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?kU(r.error)??"the agent reported an error":null,i=(Array.isArray(r.choices)?r.choices:[])[0]??null,a=Wv(i?.delta?.content)||(typeof i?.text=="string"?i.text:""),l=i?.message?.content,c=l==null?null:Wv(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 vU(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:bU(t),finishReason:"stop",error:null}:Kv(null,e)}var RU=p(()=>{"use strict"});function wU(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}function Qre(e,t){if(!Array.isArray(e)||e.length===0)return null;let r=SU(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=wU(s.content);n===null&&i.trim()&&(n=i);continue}if(s.role!=="tool"&&s.role==="user")return n===null?null:!r||SU(wU(s.content)).includes(r)?n:null}}return null}async function _U(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 Qre(i?.data,e.sentText)}catch{return null}finally{clearTimeout(n),e.signal?.removeEventListener("abort",o)}}var SU,xU=p(()=>{"use strict";SU=e=>e.replace(/\s+/g," ").trim()});function Zre(e=process.env){let t=e.KYNVER_OPENCLAW_AGENT?.trim();return t?`openclaw/${t}`:"openclaw/default"}function CU(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 ene(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 $v(e,t,r,n,o){let s=`Conversation opened from Kynver chat (${t}).`,i=o?$p(o):null,a=r?.trim();if(a){let l=e==="hermes"?`${a}
|
|
273
279
|
|
|
274
280
|
${s}`:a;return i?`${l}
|
|
275
281
|
|
|
276
|
-
${i}`:l}return e==="hermes"&&!n?s:null}async function
|
|
282
|
+
${i}`:l}return e==="hermes"&&!n?s:null}async function EU(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=$v(e.engine,e.sessionKey,e.styleNote,t!==null,e.conversationId);e.conversationId&&(n[qM]=e.conversationId),i&&o.push({role:"system",content:i}),e.engine==="hermes"?(t&&(n["X-Hermes-Session-Id"]=t),o.push({role:"user",content:CU(e.text,e.attachments)}),s={model:"hermes-agent",stream:!0,messages:o}):(o.push({role:"user",content:CU(e.text,e.attachments)}),s={model:Zre(),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 Hv(e){let t=e.now??Date.now,r=e.engine==="hermes"?e.sessions.get(e.sessionKey):null,n=await EU(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 EU(e,null)),!n.ok||!n.body)throw await n.body?.cancel().catch(()=>{}),ene(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()&&tne.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=vU(f);m&&c(m)}else{let f=new Map;for await(let m of Cf(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=Kv(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 _U({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 tne,jv=p(()=>{"use strict";Hp();Fv();RU();xU();tne=/cannot be represented as an append-only response stream/i});import{mkdirSync as rne,readFileSync as nne,realpathSync as one,statSync as sne,writeFileSync as ine}from"node:fs";import{homedir as Vv}from"node:os";import ar from"node:path";function Jv(e=Vv()){return ar.join(e,".kynver","agent-tabs","inbox")}function AU(e,t=80){return e.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"_").slice(0,t)||"file"}function IU(e,t,r={}){if(t.length===0)return[];let n=ar.join(r.root??Jv(),AU(e,120));rne(n,{recursive:!0,mode:448});let o=(r.now??Date.now)();return t.map((s,i)=>{let a=Buffer.from(s.contentBase64,"base64"),l=ar.join(n,`${o}-${i}-${AU(s.name,120)}`);ine(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 Af(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
283
|
|
|
278
|
-
`)}function
|
|
284
|
+
`)}function qv(e){let t=[];return{text:e.replace(ane,(n,o,s,i,a)=>{let l=String(o??s??i??a??"").replace(/[),.;:!?\]]+$/,"");return l?(!t.includes(l)&&t.length<Ef&&t.push(l),""):n}).replace(/[ \t]+\n/g,`
|
|
279
285
|
`).replace(/\n{3,}/g,`
|
|
280
286
|
|
|
281
|
-
`).trim(),paths:t}}function
|
|
287
|
+
`).trim(),paths:t}}function PU(e,t=Vv()){let r=ar.basename(e);if(lne.test(r))return"credential_file";let n=ar.relative(t,e);if(!n.startsWith("..")&&!ar.isAbsolute(n)){let o=n.split(ar.sep).join("/");if(yf.some(s=>o===s))return"credential_file";if(hf.some(s=>o===s||o.startsWith(`${s}/`)))return"private_folder"}return null}function cne(e,t){return e==="~"?t:e.startsWith("~/")||e.startsWith("~\\")?ar.join(t,e.slice(2)):e}function Yv(e,t={}){let r=t.home??Vv(),n=ar.resolve(cne(e,r)),o={path:n,name:ar.basename(n)},s=PU(n,r);if(s)return{...o,ok:!1,reason:s,sizeBytes:null,contentBase64:null};try{let i=one(n),a=PU(i,r);if(a)return{...o,ok:!1,reason:a,sizeBytes:null,contentBase64:null};let l=sne(i);if(!l.isFile())return{...o,ok:!1,reason:"not_a_file",sizeBytes:null,contentBase64:null};if(l.size>Gv)return{...o,ok:!1,reason:"too_large",sizeBytes:l.size,contentBase64:null};let c=nne(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 Gv,Ef,ane,lne,Pf=p(()=>{"use strict";Ul();Cv();Gv=50*1024*1024,Ef=10;ane=/MEDIA:\s*(?:"([^"\n]+)"|'([^'\n]+)'|`([^`\n]+)`|((?:~|\/|[A-Za-z]:[\\/])[^\s"'`<>]*))/g;lne=xv(bi)});import{chmodSync as dne,copyFileSync as pne,mkdirSync as fne}from"node:fs";import zv from"node:path";function mne(e,t){let r=e?.trim(),n=r?`${OU}
|
|
282
288
|
|
|
283
|
-
${r}`:
|
|
289
|
+
${r}`:OU;return t?`${n}
|
|
284
290
|
|
|
285
|
-
${
|
|
291
|
+
${$p(t)}`:n}function gne(e){let t=e.config??A();return{engine:"claude-code",access:as({engine:"claude-code",local:{chatComputerAccess:t.chatComputerAccess,chatWorkFolders:t.chatWorkFolders},website:Zc(e.payloadAccess,e.boxId),home:e.home})}}function yne(e,t){if(t.access==="full"||t.access==="off")return e;let r=zv.join(t.workDir,hne);return e.map(n=>{if(tu(t,n.path))return n;fne(r,{recursive:!0,mode:448});let o=zv.join(r,zv.basename(n.path));return pne(n.path,o),dne(o,384),{...n,path:o}})}function kne(e){return e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join("")}async function TU(e){let t=gne(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=Af(e.text,yne(e.attachments,t.access)),s=await(e.run??vf)({payload:{system:mne(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:YM(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:kne(s.content)}}var OU,hne,NU=p(()=>{"use strict";Hp();$();Kn();Pv();pf();Pf();OU="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.";hne=".kynver-attachments"});import If from"node:path";import{homedir as bne}from"node:os";function xne(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 Cne(e){return e.replace(/[ \t]+\n/g,`
|
|
286
292
|
`).replace(/\n{3,}/g,`
|
|
287
293
|
|
|
288
|
-
`).trim()}function
|
|
289
|
-
`,{encoding:"utf8",mode:384})}catch{}}var
|
|
294
|
+
`).trim()}function DU(e){let t=[];return e.includes("data:image/")?{text:e.replace(vne,(n,o,s,i)=>{if(t.length>=Ef)return n;let a=s.toLowerCase(),l=`image-${t.length+1}.${Rne[a]??"png"}`,c=xne(i);return c>Gv?(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 Ene(e){let t=e.replace(_ne,n=>" ".repeat(n.length)),r=[];for(let n of t.matchAll(Sne)){let o=n[1].replace(/[),.;:!?\]]+$/,"");r.includes(o)||r.push(o)}return r}function Ane(e,t){return e.startsWith("~/")?If.join(t,e.slice(2)):e}function Pne(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 MU(e,t={}){let r=t.home??bne(),n=If.resolve(t.inboxRoot??Jv(r)),o=[],s=()=>o.length<Ef,i=DU(e);o.push(...i.files);let a=qv(i.text);for(let u of a.paths){if(!s())break;o.push({source:"tag",...Yv(u,{home:r})})}let l=a.text,c=new Set(o.map(u=>u.path));for(let u of Ene(l)){if(!s())break;let d=If.resolve(Ane(u,r));if(c.has(d)||d===n||d.startsWith(`${n}${If.sep}`))continue;let f=Yv(u,{home:r});!f.ok&&f.reason!=="too_large"||(c.add(f.path),o.push({source:"path",...f}),f.ok&&(l=Pne(l,u)))}return{text:Cne(l),files:o}}function Xv(e){return qv(DU(e).text).text}var vne,Rne,wne,Sne,_ne,LU=p(()=>{"use strict";Pf();vne=/!\[([^\]\n]{0,200})\]\(\s*data:(image\/[a-z0-9.+-]{1,40});base64,([A-Za-z0-9+/=\r\n]+)\s*\)/gi,Rne={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp"},wne=["mp4","mov","m4v","webm","mkv","mp3","m4a","wav","ogg","oga","opus","aac","flac","png","jpg","jpeg","gif","webp","heic","pdf"],Sne=new RegExp(String.raw`(?<![\w/:.~-])((?:~\/|\/)[^\s"'\`<>()\[\]{}|]*?\.(?:${wne.join("|")}))(?![\w/-])`,"gi"),_ne=/```[\s\S]*?(?:```|$)/g});import{appendFileSync as Ine,mkdirSync as One}from"node:fs";import{homedir as Tne}from"node:os";import BU from"node:path";function Nne(e=Tne()){return BU.join(e,".kynver","logs","agent-tabs.jsonl")}function UU(e,t=Nne()){try{One(BU.dirname(t),{recursive:!0});let r={...e,...e.label?{label:e.label.slice(0,300)}:{}};Ine(t,`${JSON.stringify(r)}
|
|
295
|
+
`,{encoding:"utf8",mode:384})}catch{}}var FU=p(()=>{"use strict"});function KU(e,t=45e3){let r=setInterval(()=>{try{e()}catch{}},t);return r.unref?.(),()=>clearInterval(r)}var WU,$U=p(()=>{"use strict";WU="heartbeat"});function Dne(){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 HU,jU=p(()=>{"use strict";HU=Dne()});async function VU(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 GU(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 JU=p(()=>{"use strict"});function jl(e,t=!0){let r={};return t&&(r["Content-Type"]="application/json"),e.key&&(r.Authorization=`Bearer ${e.key}`),r}async function QU(e,t={}){if((t.env??process.env).KYNVER_HERMES_RUNS==="0")return!1;let r=(t.now??Date.now)(),n=qU.get(e.baseUrl);if(n&&r-n.at<Mne)return n.ok;let o=!1;try{let s=await(t.fetchFn??fetch)(`${e.baseUrl}/v1/capabilities`,{headers:jl(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 qU.set(e.baseUrl,{at:r,ok:o}),o}async function YU(e,t,r,n){try{let o=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}/${r}`,{method:"POST",headers:jl(e.endpoint),body:JSON.stringify(n),signal:AbortSignal.timeout(XU)});return await o.body?.cancel().catch(()=>{}),o.ok?"delivered":o.status===404||o.status===409?"no_run":"failed"}catch{return"failed"}}function Lne(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 vi(`hermes_runs_http_${e}`)}function zU(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 ZU(e,t){let r=e.fetchFn??fetch,n=e.now??Date.now,o=e.sessions.get(e.sessionKey),s=$v("hermes",e.sessionKey,e.styleNote,o!==null),i;try{i=await r(`${e.endpoint.baseUrl}/v1/runs`,{method:"POST",headers:jl(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(()=>{}),Lne(i.status);let a=await i.json().catch(()=>null),l=typeof a?.run_id=="string"?a.run_id:null;if(!l)throw new vi("hermes_runs_no_run_id");let c={runId:l,steer:k=>YU(e,l,"steer",{text:k}),stop:()=>YU(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:{...jl(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 Cf(k.body)){let w=v.data&&typeof v.data=="object"?v.data:{},S=typeof w.event=="string"?w.event:v.event;if(S==="message.delta"&&typeof w.delta=="string")d+=w.delta,e.sink.onDelta(w.delta);else if(S==="message.interim"&&typeof w.text=="string"&&!w.already_streamed){let _=`${d&&!d.endsWith(`
|
|
290
296
|
`)?`
|
|
291
297
|
|
|
292
|
-
`:""}${
|
|
298
|
+
`:""}${w.text}`;d+=_,e.sink.onDelta(_)}else if(S==="tool.started"){let _=typeof w.tool_call_id=="string"?w.tool_call_id:String(w.tool??""),R=zU(w);h.set(_,{at:n(),label:R}),e.sink.onTool({label:R,status:"running",durationMs:null})}else if(S==="tool.completed"){let _=typeof w.tool_call_id=="string"?w.tool_call_id:String(w.tool??""),R=h.get(_);h.delete(_),e.sink.onTool({label:R?.label??zU(w),status:"completed",durationMs:R?n()-R.at:typeof w.duration=="number"?Math.round(w.duration*1e3):null})}else if(S==="approval.request"){let _=[w.description,w.command].find(R=>typeof R=="string"&&R);e.sink.onTool({label:`Waiting for approval in Hermes${_?`: ${_.slice(0,200)}`:""}`,status:"approval",durationMs:null})}else if(S==="run.completed"){m="completed",typeof w.output=="string"&&(f=w.output);break}else if(S==="run.failed"||S==="run.interrupted"){m="failed",g=typeof w.error=="string"?w.error:"the agent stopped with an error \u2014 check its logs";break}else if(S==="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 Bne(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 Bne(e,t){try{let r=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}`,{headers:jl(e.endpoint,!1),signal:AbortSignal.timeout(XU)});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 vi,Mne,XU,qU,eF=p(()=>{"use strict";Fv();jv();vi=class extends Error{constructor(t){super(t),this.name="HermesRunsUnavailable"}},Mne=5*6e4,XU=1e4,qU=new Map});async function nF(e,t,r={}){let n=r.now??(()=>new Date),o=r.log??UU,s=XM(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??HU;if(s.control){let W=await VU(l,s.sessionKey,s.control);o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:W==="delivered",durationMs:n().getTime()-a,reason:`control_${s.control.op}_${W}`}),await jr(()=>e([GU(0,i,s.control,W)]).catch(()=>!1));return}let c=0,u=!1,d=new AbortController,f=new _n,m=s.replyTurnId&&r.late?s.replyTurnId:null,g=!1,h=null,y=W=>{d.signal.aborted||(h=W,d.abort())},b=()=>{!m||!r.late||r.late.heartbeat(m).then(W=>{W==="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=W=>{u||f.track(e([{seq:c++,...W}]).then(F=>(F||k(),F),()=>!1))},w=KU(()=>{g?b():u||v({kind:"activity",activity:{kind:WU,at:n().toISOString(),turnId:t.turnId}})},r.heartbeatMs??45e3),S=m?setTimeout(()=>y("too_long"),r.maxTurnMs??72e5):null;S?.unref?.();let _=async(W,F)=>{if(!m||!r.late)return;let x=await r.late.deliver({replyTurnId:m,engine:i,text:W,files:F});o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"late_reply",ok:x,durationMs:n().getTime()-a})},R=new Sn(W=>v({kind:"delta",text:W}),r.flushFloorMs),L=W=>{R.flush(),v({kind:"activity",activity:W})},j=W=>{let F={at:n().toISOString(),chat:null,turnId:t.turnId,kind:"tool",engine:i,access:"own",command:W.label,folder:"",durationMs:W.durationMs,ok:W.status!=="approval",...W.status==="running"?{reason:"started"}:{},...W.status==="approval"?{reason:"awaiting_approval"}:{}};L(F),W.status!=="running"&&o({at:F.at,turnId:t.turnId,engine:i,kind:"tool",label:W.label,ok:F.ok,durationMs:W.durationMs})},O=Xp({turnId:t.turnId,chat:null,send:W=>L(W),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??dU()).relay({sessionKey:s.sessionKey,text:s.text}),Z=n().getTime()-a;if(V.mailbox){Fl(i,{ok:!0,durationMs:Z},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:Z});let ge=c++;await jr(()=>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,R.push(V.text),R.close(),await f.drain();let pe=V.text.trim();if(!pe)throw new Error("grok_bot_empty_reply");Fl(i,{ok:!0,durationMs:Z},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:Z});let Y=c++;await jr(()=>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 W=r.sessions??gU(),F=IU(s.sessionKey,s.attachments,{root:r.inboxRoot}),x;if(i==="claude-code")x=(await(r.runClaudeCode??TU)({sessionKey:s.sessionKey,text:s.text,styleNote:s.styleNote,conversationId:s.conversationId,attachments:F,payloadAccess:s.computerAccess,boxId:t.boxId,sessions:W,onDelta:Z=>{T+=Z,R.push(Z)},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"?wf():Sf()))(i),Z={engine:i,endpoint:V,sessionKey:s.sessionKey,text:Af(s.text,F.filter(ge=>!ge.imageDataUrl)),styleNote:s.styleNote,conversationId:s.conversationId,attachments:F,sessions:W,signal:d.signal,fetchFn:r.fetchFn,sink:{onDelta:ge=>{T+=ge,R.push(ge)},onTool:j}},pe=i==="hermes"&&F.every(ge=>!ge.imageDataUrl)&&await(r.hermesRuns??(ge=>QU(ge,{fetchFn:r.fetchFn})))(V),Y;if(pe)try{Y=await ZU(Z,ge=>{N=ge,l.setSteer(s.sessionKey,t.turnId,ge.steer)})}catch(ge){if(!(ge instanceof vi))throw ge;Y=await Hv(Z)}else Y=await Hv(Z);x=Y.text,U=Y.recovered===!0}let G=MU(x,{home:r.home,inboxRoot:r.inboxRoot});G.files.forEach((V,Z)=>{let pe=n().toISOString();L({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-${Z}`,...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(),R.close(),await f.drain();let C=n().getTime()-a;Fl(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 I=()=>G.files.filter(V=>V.ok&&V.contentBase64).map(V=>({name:V.name,contentBase64:V.contentBase64,sizeBytes:V.sizeBytes}));if(g){await _(G.text,I());return}let M=c++;!await jr(()=>u?e([{seq:M,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:M,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 _(G.text,I())}catch(W){J(),R.close(),await f.drain();let F=W instanceof Error?W.message:String(W),x=ZB(W),G=n().getTime()-a;if(Fl(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 I=Xv(T).trim();await _(I?`${I}
|
|
293
299
|
|
|
294
|
-
_${
|
|
300
|
+
_${Qv[i]} stopped before finishing (${x})._`:`${Qv[i]} couldn't finish this message (${x}).`,[]);return}if(u)return;let C=c++;if(T.trim()){let I=`
|
|
295
301
|
|
|
296
|
-
_${
|
|
302
|
+
_${Qv[i]} stopped before finishing (${x})._`;await jr(()=>e([{seq:C,kind:"final",message:{content:[{type:"text",text:Xv(T)+I}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,error:x}}}]).catch(()=>!1))}else await jr(()=>e([{seq:C,kind:"error",error:F.slice(0,1500)}]).catch(()=>!1))}finally{J(),w(),S&&clearTimeout(S)}}var Qv,oF=p(()=>{"use strict";Yp();zp();Zb();Gb();Ub();pU();hU();Mv();jv();NU();Pf();LU();Dv();FU();$U();jU();JU();eF();Qv=jp});function Zv(e){let t=(e??"").replace(/\s+/g," ").trim();if(!t||t.length>120)return null;for(let r of Une)if(r.re.test(t))return r.kind;return null}function iF(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 Of(e){return iF(e)?Zv(e.name):null}function aF(e){return e.tag.toLowerCase()==="textarea"?null:iF(e)?Zv(e.name):Zv(e.formSubmitLabel)}function Tf(e){if((e.type??"").toLowerCase()==="password"||Fne.test(e.autocomplete??""))return!0;let t=e.tag.toLowerCase();return t!=="input"&&t!=="textarea"?!1:sF.test(e.inputName??"")||sF.test(e.name??"")}function eR(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"}:Wne.test(r.hostname)?{ok:!1,reason:"local and private-network addresses are refused"}:{ok:!0,url:r.toString()}}function lF(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 cF(e){if(!e)return"";try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return""}}var Une,Fne,sF,Wne,tR=p(()=>{"use strict";Une=[{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}];Fne=/\b(current-password|new-password|one-time-code|cc-number|cc-csc|cc-exp|cc-exp-month|cc-exp-year)\b/i,sF=/(passw|passcode|pwd|\bpin\b|otp|one[-_ ]?time|2fa|mfa|verification[-_ ]?code|security[-_ ]?code|cvv|cvc|card[-_ ]?number|ccnum|ssn|social[-_ ]?security)/i;Wne=/^(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 uF(e){return $ne.includes(e)}function dF(e){return typeof e=="string"&&Kne.includes(e)}var Kne,$ne,pF,fF,rR,mF,nR,gF,hF,Nf,yF,kF,bF,oR,Ri=p(()=>{"use strict";Kne=["open","snapshot","click","type","select","press","scroll","screenshot","wait","tabs","close","list_logins","fill_login","save_login","request_code"],$ne=["list_logins","fill_login","save_login","request_code"];pF=12e3,fF=200,rR=16e3,mF=95e4,nR=4e3,gF=3e4,hF=25e3,Nf=3e4,yF=10*6e4,kF=5*6e4,bF=120,oR=8});function Hne(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 jne(e){let t=Tf(e),r=[`[${e.ref}] ${Hne(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)"):Of(e)&&r.push("(needs the user's approval to press)"),r.join(" ")}function vF(e,t={}){let r=t.maxChars??rR,n=`Page: ${e.title||"(untitled)"} \u2014 ${e.url}`,o=e.elements.map(jne),s=o.length?`Interactive elements (use the [ref] with browser_click / browser_type / browser_select):
|
|
297
303
|
${o.join(`
|
|
298
304
|
`)}${e.truncatedElements?`
|
|
299
305
|
\u2026more elements not shown \u2014 scroll or wait, then snapshot again`:""}`:"Interactive elements: none visible.",i=`${n}
|
|
@@ -302,30 +308,30 @@ ${s}
|
|
|
302
308
|
|
|
303
309
|
Page text:
|
|
304
310
|
`,a=Math.max(0,r-i.length),l=e.text.length>a?`${e.text.slice(0,Math.max(0,a-14))}
|
|
305
|
-
\u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function
|
|
306
|
-
\u2026[truncated]`:e}var
|
|
311
|
+
\u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function Df(e,t=rR){return e.length>t?`${e.slice(0,t-14)}
|
|
312
|
+
\u2026[truncated]`:e}var sR=p(()=>{"use strict";tR();Ri()});function RF(){return`(() => {${iR}
|
|
307
313
|
const root = document.documentElement;
|
|
308
314
|
let seq = Number(root.getAttribute("data-kynver-ref-seq") || "0");
|
|
309
315
|
const elements = [];
|
|
310
316
|
let truncatedElements = false;
|
|
311
|
-
for (const el of document.querySelectorAll(${JSON.stringify(
|
|
317
|
+
for (const el of document.querySelectorAll(${JSON.stringify(Vne)})) {
|
|
312
318
|
if (!__kvVisible(el)) continue;
|
|
313
|
-
if (elements.length >= ${
|
|
319
|
+
if (elements.length >= ${fF}) { truncatedElements = true; break; }
|
|
314
320
|
let ref = el.getAttribute("data-kynver-ref");
|
|
315
321
|
if (!ref) { seq += 1; ref = "e" + seq; el.setAttribute("data-kynver-ref", ref); }
|
|
316
322
|
elements.push(__kvFacts(el, ref));
|
|
317
323
|
}
|
|
318
324
|
root.setAttribute("data-kynver-ref-seq", String(seq));
|
|
319
325
|
const body = document.body;
|
|
320
|
-
const text = body ? String(body.innerText || "").replace(/\\n{3,}/g, "\\n\\n").slice(0, ${
|
|
326
|
+
const text = body ? String(body.innerText || "").replace(/\\n{3,}/g, "\\n\\n").slice(0, ${pF}) : "";
|
|
321
327
|
return { url: location.href, title: document.title, text, elements, truncatedElements };
|
|
322
|
-
})()`}function
|
|
328
|
+
})()`}function wF(e){return`(() => {${iR}
|
|
323
329
|
const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
|
|
324
330
|
if (!el) return null;
|
|
325
331
|
el.scrollIntoView({ block: "center", inline: "center" });
|
|
326
332
|
const r = el.getBoundingClientRect();
|
|
327
333
|
return { x: r.left + r.width / 2, y: r.top + r.height / 2, facts: __kvFacts(el, ${JSON.stringify(e)}), url: location.href };
|
|
328
|
-
})()`}function
|
|
334
|
+
})()`}function SF(e,t){return`(() => {
|
|
329
335
|
const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
|
|
330
336
|
if (!el) return false;
|
|
331
337
|
el.focus();
|
|
@@ -340,7 +346,7 @@ Page text:
|
|
|
340
346
|
}
|
|
341
347
|
}
|
|
342
348
|
return true;
|
|
343
|
-
})()`}function
|
|
349
|
+
})()`}function _F(e,t){return`(() => {
|
|
344
350
|
const el = document.querySelector('[data-kynver-ref="' + ${JSON.stringify(e)}.replace(/[^a-z0-9]/gi, "") + '"]');
|
|
345
351
|
if (!el || el.tagName !== "SELECT") return { ok: false, reason: "not_select" };
|
|
346
352
|
const want = ${JSON.stringify(t)}.trim().toLowerCase();
|
|
@@ -352,17 +358,17 @@ Page text:
|
|
|
352
358
|
el.dispatchEvent(new Event("input", { bubbles: true }));
|
|
353
359
|
el.dispatchEvent(new Event("change", { bubbles: true }));
|
|
354
360
|
return { ok: true, label: (hit.label || hit.textContent || "").trim() };
|
|
355
|
-
})()`}function
|
|
361
|
+
})()`}function xF(){return`(() => {${iR}
|
|
356
362
|
const el = document.activeElement;
|
|
357
363
|
if (!el || el === document.body) return { facts: null, url: location.href };
|
|
358
364
|
return { facts: __kvFacts(el, el.getAttribute("data-kynver-ref") || ""), url: location.href };
|
|
359
|
-
})()`}function
|
|
365
|
+
})()`}function CF(e){return`(() => { window.scrollBy(0, ${Math.trunc(e)}); return { y: Math.round(window.scrollY), max: Math.round(document.documentElement.scrollHeight - window.innerHeight) }; })()`}function EF(e,t){return`(() => {
|
|
360
366
|
const t = ${JSON.stringify(e)};
|
|
361
367
|
const s = ${JSON.stringify(t)};
|
|
362
368
|
if (t && document.body && String(document.body.innerText || "").toLowerCase().includes(t.toLowerCase())) return true;
|
|
363
369
|
if (s) { try { if (document.querySelector(s)) return true; } catch (e) { return "bad_selector"; } }
|
|
364
370
|
return false;
|
|
365
|
-
})()`}var
|
|
371
|
+
})()`}var iR,Vne,AF=p(()=>{"use strict";Ri();iR=String.raw`
|
|
366
372
|
const __kvText = (s, n) => String(s == null ? "" : s).replace(/\s+/g, " ").trim().slice(0, n);
|
|
367
373
|
const __kvName = (el) => {
|
|
368
374
|
const aria = el.getAttribute("aria-label");
|
|
@@ -425,11 +431,11 @@ const __kvVisible = (el) => {
|
|
|
425
431
|
const s = getComputedStyle(el);
|
|
426
432
|
return s.visibility !== "hidden" && s.display !== "none" && s.opacity !== "0";
|
|
427
433
|
};
|
|
428
|
-
`,
|
|
434
|
+
`,Vne='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 No(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 Gne(e,t){return No(e.session.host.conn,t,RF())}async function lr(e,t,r){let n=await Gne(e,t),o=vF(n);return{ok:!0,text:r?Df(`${r}
|
|
429
435
|
|
|
430
|
-
${o}`):o,url:n.url,title:n.title}}function
|
|
436
|
+
${o}`):o,url:n.url,title:n.title}}function Mf(e){let t=typeof e.ref=="string"?e.ref.trim():"";return/^e\d{1,6}$/.test(t)?t:null}function TF(e,t,r,n,o){let s=lF([cF(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 Vl(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??IF)(r)])}async function NF(e){let t=eR(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,hF).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 lr(e,n,a?void 0:"The page is still loading; this is what has rendered so far.")}async function aR(e,t,r){return No(e.session.host.conn,t,wF(r))}async function Jne(e){let t=Mf(e.args);if(!t)return To(t);let r=await e.manager.activeTab(e.session),n=await aR(e,r,t);if(!n)return To(t);if(n.facts.disabled)return{ok:!1,code:"failed",text:`[${t}] is disabled.`};let o=Of(n.facts);if(o){let a=TF(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 Vl(e,r,1200),lr(e,r,`Clicked [${t}] ${JSON.stringify(n.facts.name)}.`)}async function Lf(e,t,r){let n=OF[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 Bf(e,t){let r=await No(e.session.host.conn,t,xF());if(!r.facts)return null;let n=aF(r.facts);if(!n)return null;let o=r.facts.formSubmitLabel??r.facts.name;return TF(e,"press",o,n,r.url)}async function qne(e){let t=Mf(e.args);if(!t)return To(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>nR)return{ok:!1,code:"invalid_request",text:`text is limited to ${nR} characters.`};let n=await e.manager.activeTab(e.session),o=await aR(e,n,t);if(!o)return To(t);if(Tf(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 No(s,n,SF(t,e.args.clear!==!1)))return To(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 Bf(e,n);return l?{...l,text:`${a} ${l.text}`}:(await Lf(e,n,"Enter"),await Vl(e,n,1500),lr(e,n,`${a} Pressed Enter.`))}return{ok:!0,text:a}}async function Yne(e){let t=Mf(e.args);if(!t)return To(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 No(e.session.host.conn,n,_F(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 zne(e){let t=typeof e.args.key=="string"?e.args.key.trim():"",r=PF.find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return{ok:!1,code:"invalid_request",text:`key must be one of: ${PF.join(", ")}.`};let n=await e.manager.activeTab(e.session);if(r==="Enter"){let o=await Bf(e,n);if(o)return o}return await Lf(e,n,r),await Vl(e,n,r==="Enter"?1500:300),lr(e,n,`Pressed ${r}.`)}async function Xne(e){let t=await e.manager.activeTab(e.session),r=Mf(e.args);if(r)return await aR(e,t,r)?{ok:!0,text:`Scrolled [${r}] into view.`}:To(r);let n=e.args.direction==="up"?-1:1,o=Math.min(10,Math.max(1,Number(e.args.pages)||1)),s=await No(e.session.host.conn,t,CF(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 Qne(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<=mF)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 Zne(e){let t=await e.manager.activeTab(e.session),r=e.sleep??IF,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),lr(e,t,`Waited ${Math.round(l/100)/10}s.`)}let i=s||1e4,a=Date.now();for(;;){let l=await No(e.session.host.conn,t,EF(n,o));if(l==="bad_selector")return{ok:!1,code:"invalid_request",text:"That CSS selector is not valid."};if(l===!0)return lr(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 eoe(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=eR(e.args.url);return d.ok?NF({...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(()=>{}),lr(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:
|
|
431
437
|
${u.join(`
|
|
432
|
-
`)}`:"No tabs open."}}async function
|
|
438
|
+
`)}`:"No tabs open."}}async function DF(e,t){switch(e){case"open":return NF(t);case"snapshot":return lr(t,await t.manager.activeTab(t.session));case"click":return Jne(t);case"type":return qne(t);case"select":return Yne(t);case"press":return zne(t);case"scroll":return Xne(t);case"screenshot":return Qne(t);case"wait":return Zne(t);case"tabs":return eoe(t);case"close":return await t.manager.close(t.session.conversationId),{ok:!0,text:"Closed the browser for this conversation."}}}var IF,OF,PF,To,lR=p(()=>{"use strict";tR();sR();AF();Ri();IF=e=>new Promise(t=>setTimeout(t,e)),OF={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:" "}},PF=Object.keys(OF);To=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 cR,uR,dR,MF,LF=p(()=>{"use strict";cR=String.raw`
|
|
433
439
|
const __vis = (el) => {
|
|
434
440
|
const r = el.getBoundingClientRect();
|
|
435
441
|
if (r.width <= 0 || r.height <= 0) return false;
|
|
@@ -480,7 +486,7 @@ ${u.join(`
|
|
|
480
486
|
return null;
|
|
481
487
|
};
|
|
482
488
|
const __hasFrames = () => document.querySelectorAll("iframe,frame").length > 0;
|
|
483
|
-
`,
|
|
489
|
+
`,uR=`function (expectedOrigin, refs) {${cR}
|
|
484
490
|
const g = __guard(expectedOrigin);
|
|
485
491
|
if (g) return { error: g, origin: location.origin };
|
|
486
492
|
const f = __find(refs);
|
|
@@ -492,7 +498,7 @@ ${u.join(`
|
|
|
492
498
|
code: !!f.code,
|
|
493
499
|
hasFrames: __hasFrames(),
|
|
494
500
|
};
|
|
495
|
-
}`,
|
|
501
|
+
}`,dR=`function (expectedOrigin, refs, values) {${cR}
|
|
496
502
|
const g = __guard(expectedOrigin);
|
|
497
503
|
if (g) return { error: g, origin: location.origin };
|
|
498
504
|
const f = __find(refs);
|
|
@@ -518,7 +524,7 @@ ${u.join(`
|
|
|
518
524
|
const last = filled.length ? (filled[filled.length - 1] === "code" ? f.code : filled[filled.length - 1] === "password" ? f.password : f.username) : null;
|
|
519
525
|
if (last) last.focus();
|
|
520
526
|
return { origin: location.origin, filled };
|
|
521
|
-
}`,
|
|
527
|
+
}`,MF=`function (expectedOrigin, refs) {${cR}
|
|
522
528
|
const g = __guard(expectedOrigin);
|
|
523
529
|
if (g) return { error: g, origin: location.origin };
|
|
524
530
|
const f = __find(refs);
|
|
@@ -528,12 +534,14 @@ ${u.join(`
|
|
|
528
534
|
username: f.username ? String(f.username.value || "") : null,
|
|
529
535
|
password: f.password ? String(f.password.value || "") : null,
|
|
530
536
|
};
|
|
531
|
-
}`});function
|
|
537
|
+
}`});function toe(e){let t=typeof e.handle=="string"?e.handle.trim():"";return/^lg_[a-z0-9]{6,20}$/.test(t)?t:null}function fR(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 UF(e){return`${JSON.stringify(e.label)} (${e.username}) for ${e.origin}`}function Ff(e){return e.siteLogins??Nt()}async function Uf(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 Gl(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 mR(e,t,r=Nt()){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:BF};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. ${pR}`;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}):
|
|
532
538
|
${l.join(`
|
|
533
539
|
`)}
|
|
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??""}
|
|
540
|
+
Use browser_fill_login with a handle while that exact site is open.`}}async function roe(e,t){let r=Ff(e),n=r.audit(t),o=toe(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",BF);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 Uf(e,a),c=la(l),u={conversationId:e.session.conversationId,handle:o,label:i.label,username:i.username,origin:i.origin,pageOrigin:c},d=(R,L)=>({event:"fill",ok:R,origin:i.origin,label:i.label,code:L});if(!l||!Ag(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. ${pR}`,{loginActivity:d(!1,"vault_locked")});let m=fR(e.args),g;try{g=await Gl(e,a,uR,[i.origin,m])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),ce("failed",`Couldn't fill: ${R.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(R){let L=R instanceof z?R.code:"failed";return n.record({event:"fill",ok:!1,code:L,...u}),ce("failed",R instanceof z?`Couldn't use this saved login: ${R.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 R=bu(h.totp);R&&(Z_(R)<3&&await(e.sleep??(L=>new Promise(j=>setTimeout(j,L))))(3100),y.code=Q_(R))}if(h.password="",!y.username&&!y.password&&!y.code){n.record({event:"fill",ok:!1,code:"field_not_found",...u});let R=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 ce("field_not_found",`No sign-in field to fill on this page.${L}${R} Take a browser_snapshot to see where you are.`,{loginActivity:d(!1,"field_not_found")})}let b;try{b=await Gl(e,a,dR,[i.origin,m,y])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),ce("failed",`Couldn't fill: ${R.message}. Take a browser_snapshot and try again.`)}finally{y.password="",y.code=""}if(b?.error){let R=b.error==="origin"||b.error==="frame"?"origin_mismatch":"failed";return n.record({event:"fill",ok:!1,code:R,...u,pageOrigin:b.origin??c}),ce(R==="origin_mismatch"?"origin_mismatch":"failed",`Refused: the page changed to ${b.origin??"another address"} before the fill.`,{loginActivity:d(!1,R)})}let k=b?.filled??[];s.touch(o),n.record({event:"fill",ok:!0,code:null,...u,fields:k});let v=k.map(R=>R==="code"?"authenticator code":R).join(" + "),w=g.code&&!i.hasTotp&&!k.includes("code"),S=`Filled the ${v} for ${UF(i)}.`+(w?" The page also wants a one-time code: use browser_request_code so the user types it on their computer.":""),_={loginActivity:d(!0,null)};if(e.args.submit===!0){let R=await Bf(e,a);return R?{...R,..._,text:`${S} ${R.text}`}:(await Lf(e,a,"Enter"),await Vl(e,a,2e3),{...await lr(e,a,`${S} Pressed Enter.`),..._})}return{ok:!0,text:`${S} Continue with browser_click on the sign-in button (or submit:true next time).`,..._}}async function noe(e,t){let r=Ff(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. ${pR}`);let s=await e.manager.activeTab(e.session),i=await Uf(e,s),a=la(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 Gl(e,s,MF,[a,fR(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 ${UF(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 ooe(e,t){let r=Ff(e),n=await e.manager.activeTab(e.session),o=await Uf(e,n),s=la(o);if(!s)return ce("url_refused","Open the site's verification page first.");let i=fR(e.args),a;try{a=await Gl(e,n,uR,[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 Uf(e,n);if(!Ag(s,f))return{ok:!1,text:`The page is no longer ${s}, so the code was not typed.`};try{let m=await Gl(e,n,dR,[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 FF(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 mR(t.args,r,Ff(t));case"fill_login":return roe(t,r);case"save_login":return noe(t,r);case"request_code":return ooe(t,r)}}var pR,BF,WF=p(()=>{"use strict";lR();LF();Pg();ua();zn();Ig();pR="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.",BF="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 Wf,KF=p(()=>{"use strict";Ri();Wf=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.idleMs=t.idleMs??yF}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<kF),t.actionTimes.length>=bF?!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>=oR)throw new Error(`tab limit reached (${oR}) \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 cr,soe,Jl,$F=p(()=>{"use strict";cr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="CdpError"}code},soe=e=>new WebSocket(e),Jl=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??soe)(t);return await new Promise((o,s)=>{let i=setTimeout(()=>s(new cr("CDP connect timed out")),r.timeoutMs??1e4);n.addEventListener("open",()=>{clearTimeout(i),o()}),n.addEventListener("error",()=>{clearTimeout(i),s(new cr("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 cr("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 cr(`${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 cr(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 cr("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 cr("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 cr(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 ioe,readFileSync as HF}from"node:fs";function wi(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 jF(e,t){try{return e(t)}catch{return""}}function ql(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=>HF(o,"utf8"));return/microsoft|wsl/i.test(jF(n,"/proc/version"))}function aoe(e=process.env,t=process.platform,r={}){if(t!=="linux")return{available:!0,wslg:!1};let n=r.exists??ioe,o=ql(e,t,r)&&n("/mnt/wslg");return{available:!!(e.DISPLAY?.trim()||e.WAYLAND_DISPLAY?.trim()),wslg:o}}function Kf(e=process.env,t=process.platform){return/^(1|true|yes|on)$/i.test(e.KYNVER_BROWSER_HEADLESS??"")?!0:!aoe(e,t).available}function loe(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 VF(e={}){let t=e.readFile??(r=>HF(r,"utf8"));return loe(jF(t,"/etc/os-release"))}var Do=p(()=>{"use strict"});import{existsSync as coe,readdirSync as uoe}from"node:fs";import{homedir as doe}from"node:os";import Mo from"node:path";function $f(e=process.env){return e.KYNVER_BROWSER_INSTALL_DIR?.trim()||Mo.join(doe(),".kynver","browsers")}function GF(e,t=process.env){return Mo.join($f(t),`chrome-${e}`)}function Hf(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 poe(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 jf(e,t=process.env,r={}){let n=r.exists??coe,o=r.listDir??(l=>uoe(l)),s=$f(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(poe).reverse();for(let l of a){let c=Mo.join(s,`chrome-${l}`),u=Hf(c,e);if(n(u))return{executable:u,version:l,installDir:c}}return null}var gR=p(()=>{"use strict"});import{existsSync as foe,readdirSync as moe}from"node:fs";import{homedir as goe}from"node:os";import Vr from"node:path";function hoe(e,t,r=goe()){return e==="win32"?[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA].filter(o=>typeof o=="string"&&o.length>0).flatMap(o=>[Vr.join(o,"Google","Chrome","Application","chrome.exe"),Vr.join(o,"Microsoft","Edge","Application","msedge.exe"),Vr.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",Vr.join(r,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),Vr.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",Vr.join(r,".local/share/flatpak/exports/bin/com.google.Chrome"),Vr.join(r,".local/share/flatpak/exports/bin/org.chromium.Chromium"),...JF.map(n=>Vr.join(r,".local/bin",n))]}function yoe(e,t,r){let n=(e.PATH??"").split(":").filter(o=>o&&!(r&&o.startsWith("/mnt/")));for(let o of JF)for(let s of n){let i=Vr.join(s,o);if(t(i))return i}return null}function Lo(e={}){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.exists??foe,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=hoe(r,t,e.home).find(u=>o(u));if(l)return{executable:l,source:"system",version:null,configuredMissing:i};if(r==="linux"){let u=yoe(t,o,ql(t,r,{readFile:e.readFile}));if(u)return{executable:u,source:"system",version:null,configuredMissing:i}}let c=wi(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=jf(c,t,{exists:o,listDir:e.listDir??(f=>moe(f))});if(d)return{executable:d.executable,source:"managed",version:d.version,configuredMissing:i}}return{executable:null,source:"none",version:null,configuredMissing:i}}var JF,Yl=p(()=>{"use strict";$();Do();gR();JF=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","microsoft-edge-stable"]});import{createWriteStream as koe}from"node:fs";import{rm as boe}from"node:fs/promises";function woe(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(YF))return{version:r.version,url:s.url}}return null}async function zF(e,t=fetch){let r=await t(voe,{signal:AbortSignal.timeout(2e4)});if(!r.ok)throw new Error(`Chrome for Testing index returned HTTP ${r.status}`);let n=woe(await r.json(),e);if(!n)throw new Error(`No stable Chrome for Testing build is published for ${e}`);return n}async function XF(e,t,r={}){let n=r.minBytes??Roe;if(!e.startsWith(YF))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>qF))throw new Error(`browser download has an unexpected size (${a} bytes)`);let l=koe(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>qF)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 boe(t,{force:!0}).catch(()=>{}),u}}var voe,YF,Roe,qF,QF=p(()=>{"use strict";voe="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json",YF="https://storage.googleapis.com/chrome-for-testing-public/",Roe=20*1024*1024,qF=600*1024*1024});function zl(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 _oe(e){return{apt:e.t64?1:0,dnf:2,zypper:3,pacman:4,apk:5,unknown:null}[e.family]}function xoe(e,t){let r=_oe(t);if(r===null)return[];let n=new Set;for(let o of e){let s=Soe.find(([i])=>i.test(o));s&&n.add(s[1][r])}return[...n].sort()}function Coe(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 ZF(e,t){let r=xoe(e,t),n=Coe(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 Soe,Vf=p(()=>{"use strict";Soe=[[/^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 Eoe}from"node:child_process";function Poe(e){return/(\d+\.\d+\.\d+\.\d+)/.exec(e)?.[1]??null}function Ioe(e,t=process.platform,r=Aoe){let n=new Set;if(t==="linux"){let s=r("ldd",[e],{encoding:"utf8",timeout:1e4});if(!s.error)for(let i of zl(`${s.stdout??""}
|
|
535
541
|
${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
|
-
|
|
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};
|
|
542
|
+
${s.stderr??""}`;for(let a of zl(i))n.add(a);s.status===0&&(o=Poe(i))}return{version:o,missingLibs:[...n].sort()}}function eW(e,t=()=>Ioe(e),r=Date.now){let n=hR.get(e);if(n&&r()-n.at<Ooe)return n.health;let o=t();return hR.set(e,{at:r(),health:o}),o}function tW(){hR.clear()}var Aoe,Ooe,hR,yR=p(()=>{"use strict";Vf();Aoe=(e,t,r)=>Eoe(e,t,r);Ooe=10*6e4,hR=new Map});import{chmodSync as Toe,mkdirSync as kR,symlinkSync as Noe,writeFileSync as Doe}from"node:fs";import Si from"node:path";import{crc32 as Moe,inflateRawSync as Loe}from"node:zlib";function Woe(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(e.readUInt32LE(r)===Boe)return r;throw new Error("not a zip archive (no end-of-central-directory record)")}function Koe(e){let t=Woe(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)!==Uoe)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 $oe(e,t){let r=t.localHeaderOffset;if(e.readUInt32LE(r)!==Foe)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=Loe(o);else throw new Error(`unsupported zip compression method ${t.method} (${t.name})`);if(s.length!==t.size||Moe(s)>>>0!==t.crc>>>0)throw new Error(`zip entry failed its integrity check: ${t.name}`);return s}function rW(e,t){let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-zA-Z]:/.test(r))throw new Error(`unsafe zip path: ${t}`);let n=Si.resolve(e,r),o=Si.resolve(e);if(n!==o&&!n.startsWith(o+Si.sep))throw new Error(`unsafe zip path: ${t}`);return n}function nW(e,t,r=process.platform){kR(t,{recursive:!0});let n=0;for(let o of Koe(e)){let s=rW(t,o.name);if(o.name.endsWith("/")){kR(s,{recursive:!0});continue}kR(Si.dirname(s),{recursive:!0});let i=$oe(e,o);if(o.unixMode!==null&&(o.unixMode&Hoe)===joe&&r!=="win32"){let a=i.toString("utf8");rW(t,Si.posix.join(Si.posix.dirname(o.name.replace(/\\/g,"/")),a)),Noe(a,s)}else Doe(s,i),o.unixMode!==null&&r!=="win32"&&Toe(s,o.unixMode&511||420);n+=1}return n}var Boe,Uoe,Foe,Hoe,joe,oW=p(()=>{"use strict";Boe=101010256,Uoe=33639248,Foe=67324752;Hoe=61440,joe=40960});import{closeSync as sW,existsSync as bR,mkdirSync as Voe,openSync as iW,readFileSync as Goe,renameSync as Joe,rmSync as _i,statSync as qoe,chmodSync as Yoe}from"node:fs";import vR from"node:path";function Bo(){return{...Kt}}function cW(e=Kt){return e.state!=="failed"||e.failedAt===null?0:e.failedAt+aW[Math.min(e.attempts-1,aW.length-1)]}function uW(e=Kt){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 Xoe(e){let t=A();He({...t,browserManaged:{version:e.version,platform:e.platform,executable:e.executable,installedAt:new Date().toISOString()}})}function Qoe(e,t){nW(Goe(e),t)}function Zoe(e,t){try{return sW(iW(e,"wx")),!0}catch{try{if(t-qoe(e).mtimeMs>zoe)return _i(e,{force:!0}),sW(iW(e,"wx")),!0}catch{}return!1}}async function ese(e,t){let r=t.env??process.env,n=t.now??Date.now,o=t.sleep??(a=>new Promise(l=>setTimeout(l,a))),s=$f(r);Voe(s,{recursive:!0});let i=vR.join(s,".install.lock");for(;!Zoe(i,n());)if(await o(2e3),!bR(i)){let a=jf(e,r);if(a)return a}try{let a=await zF(e,t.fetchFn),l=GF(a.version,r),c=Hf(l,e);if(!bR(c)){let d=vR.join(s,`.download-${a.version}.zip`),f=vR.join(s,`.staging-${a.version}-${process.pid}`);_i(f,{recursive:!0,force:!0});try{await XF(a.url,d,{fetchFn:t.fetchFn,minBytes:t.minArchiveBytes,onProgress:g=>{Kt.receivedBytes=g.receivedBytes,Kt.totalBytes=g.totalBytes}}),(t.extract??Qoe)(d,f);let m=Hf(f,e);if(!bR(m))throw new Error("the downloaded browser archive did not contain Chrome");(t.platform??process.platform)!=="win32"&&Yoe(m,493),_i(l,{recursive:!0,force:!0}),Joe(f,l)}finally{_i(d,{force:!0}),_i(f,{recursive:!0,force:!0})}}let u={executable:c,version:a.version,installDir:l};return(t.record??Xoe)({...u,platform:e}),u}finally{_i(i,{force:!0})}}function Gf(e={}){if(Xl)return Xl;let t=wi(e.platform??process.platform,e.arch??process.arch);if(!t)return Promise.reject(new xi("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 Kt={...Kt,state:"downloading",receivedBytes:0,totalBytes:null,error:null},Xl=ese(t,e).then(n=>(Kt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},tW(),n)).catch(n=>{let o=n instanceof Error?n.message:String(n);throw Kt={...Kt,state:"failed",error:o.slice(0,300),failedAt:r(),attempts:Kt.attempts+1},new xi(`Couldn't download a browser for this computer: ${o.slice(0,200)}`,"download_failed")}).finally(()=>{Xl=null}),Xl}var lW,zoe,aW,xi,Kt,Xl,Jf=p(()=>{"use strict";$();Do();QF();yR();gR();oW();lW=150,zoe=30*6e4,aW=[6e4,5*6e4,30*6e4,120*6e4],xi=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserProvisionError"}code},Kt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},Xl=null});function nse(){let e=Bo(),t=e.state==="downloading"?` (${uW(e)})`:"";return`Setting up a browser on your computer \u2014 a one-time download of about ${lW} MB${t}. Tell the user it's being set up, wait about 30 seconds, then try the same step again.`}async function dW(e={}){let t=(e.resolve??(()=>Lo()))();if(t.executable)return t.executable;if(!(e.autoProvision??A().browserAutoProvision!==!1))throw new Gr("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??Bo)(),o=(e.now??Date.now)();if(n.state==="failed"&&n.failedAt!==null&&o-n.failedAt<rse)throw new Gr(`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??Gf)(),i,a=new Promise(l=>{i=setTimeout(()=>l("pending"),e.waitMs??tse),i.unref?.()});try{let l=await Promise.race([s,a]);if(l==="pending")throw s.catch(()=>{}),new Gr(nse(),"browser_installing");return l.executable}catch(l){if(l instanceof Gr)throw l;let c=l instanceof xi?l.message:"Couldn't set up a browser on this computer.";throw new Gr(`${c} The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found")}finally{clearTimeout(i)}}var tse,rse,Gr,pW=p(()=>{"use strict";$();Yl();Jf();tse=2e4,rse=6e4,Gr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserEnsureError"}code}});function RR(e){return ose.test(e)}function fW(e=process.platform,t=typeof process.getuid=="function"?process.getuid():null){return e==="linux"&&t===0}function qf(e){mW=e}function gW(){return mW}var ose,mW,wR=p(()=>{"use strict";ose=/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;mW=null});import{spawn as sse}from"node:child_process";import{existsSync as RHe,mkdirSync as ise,readFileSync as ase,rmSync as lse}from"node:fs";import{homedir as cse}from"node:os";import hW from"node:path";function dse(e=process.env){return e.KYNVER_BROWSER_PROFILE_DIR?.trim()||hW.join(cse(),".kynver","browser-profile")}function yW(e=process.env){return(e.KYNVER_BROWSER_CDP_URL?.trim()||A().browserCdpUrl?.trim()||use).replace(/\/$/,"")}async function kW(e,t={}){let r=t.env??process.env,n=t.platform??process.platform,o=t.allowNoSandbox??A().browserAllowNoSandbox!==!1;if((t.asRoot??fW(n))&&o){let a=await _R(e,r,n,t,!0);if("wsUrl"in a)return qf("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 SR(a.stderrTail)}let i=await _R(e,r,n,t,!1);if("wsUrl"in i)return qf("on"),i;if(n==="linux"&&o&&RR(i.stderrTail)){let a=await _R(e,r,n,t,!0);if("wsUrl"in a)return qf("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 SR(a.stderrTail)}throw SR(i.stderrTail)}function SR(e){let t=zl(e);return t.length>0?new Ql(t):RR(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 _R(e,t,r,n,o){let s=dse(t);ise(s,{recursive:!0});let i=hW.join(s,"DevToolsActivePort");lse(i,{force:!0});let a=Kf(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??sse)(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=>ase(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 bW(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 use,Ql,vW=p(()=>{"use strict";$();Do();Vf();Yl();wR();use="http://127.0.0.1:9222";Ql=class extends Error{constructor(r){super(`Chrome is missing system libraries: ${r.join(", ")}`);this.missingLibs=r;this.name="ChromeMissingLibsError"}missingLibs}});async function pse(e){if(e==="attach"){let n=yW(),o;try{o=await bW(n)}catch{throw new Ci(`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 Jl.connect(o),child:null,mode:e}}let t;try{t=await dW()}catch(n){throw n instanceof Gr?new Ci(n.message,n.code):n}let r;try{r=await kW(t)}catch(n){throw n instanceof Ql?new Ci(ZF(n.missingLibs,VF()),"missing_libs"):n}return{conn:await Jl.connect(r.wsUrl),child:r.child,mode:e}}function fse(){return Yf??=new Wf({connectHost:pse}),Yf}async function RW(){Yf&&await Yf.closeAll().catch(()=>{})}function wW(){try{let e=A();e.browserEverEnabled!==!0&&He({...e,browserEverEnabled:!0})}catch{}}function Pn(e,t){return{ok:!1,code:e,text:t}}function mse(e){if(!e||typeof e!="object")return null;let t=e,r=t.policy;if(t.kind!=="browser"||!dF(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 SW(e,t){let r=mse(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??fse();if(r.action==="list_logins")return mR(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"?Nf+5e3:gF,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([uF(c)?FF(c,l):DF(c,l),a]).finally(()=>clearTimeout(i));return{...u,text:Df(u.text)}}catch(o){if(o instanceof Ci)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 Ci,Yf,xR=p(()=>{"use strict";lR();WF();sR();KF();$F();$();pW();Vf();Do();vW();Ri();Ci=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserSetupError"}code};Yf=null});import{mkdirSync as gse,readFileSync as HHe,renameSync as hse,writeFileSync as yse}from"node:fs";import{homedir as kse}from"node:os";import CR from"node:path";function bse(e=CR.join(kse(),".kynver","state")){return CR.join(e,"chat-loop.json")}function _W(e,t=bse()){try{gse(CR.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}`;yse(r,JSON.stringify({v:1,...e}),{mode:384}),hse(r,t)}catch{}}var xW=p(()=>{"use strict"});function vse(e,t,r){if(!t||t===r)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`${n}(?=[\\\\/"'\\s<]|$)`,"gm"),()=>r)}function CW(e,t){return vse(e,t,"\0")!==e}var EW=p(()=>{"use strict"});import{accessSync as Rse,constants as wse,existsSync as Sse,lstatSync as _se,readdirSync as xse,readFileSync as Cse,readlinkSync as Ese,realpathSync as Ase}from"node:fs";import{homedir as Pse}from"node:os";import AW from"node:path";function IW(e){return e==="win32"?AW.win32:AW.posix}function Ose(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===ER)return n}catch{}let i=r.dirname(n);if(i===n)break;n=i}return null}function Nse(e,t,r){let n=IW(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 Dse(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 Mse(e,t,r,n,o){for(let s of Dse(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 Lse(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 Bse(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 zf(e={}){let t=e.platform??process.platform,r=IW(t),n=e.fs??Ise,o=e.env??process.env,s=e.home??Pse(),i=e.execPath??process.execPath,a=n.realpath(e.cliEntry??process.argv[1]??""),l=a?Ose(a,n,r):null,c={cliPath:a,packageRoot:l,nodePath:i,npmCliPath:Nse(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(PW).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=Tse.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=Mse(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(PW).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",Qi);n.exists(y)&&(g="systemd",d.supervisorFile=y,d.supervisorName=Qi)}else if(t==="darwin"){let y=Lse(m,s,n,r);y&&(g="launchd",d.supervisorFile=y.file,d.supervisorName=y.label)}else if(t==="win32"){let y=Bse(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=Use(h,n),h.unsupportedReason||delete h.unsupportedReason,h}function Use(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&&CW(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 ER,Ise,PW,Tse,Xf=p(()=>{"use strict";ns();EW();ER="@kynver-app/runtime",Ise={exists:e=>Sse(e),readText:e=>{try{return Cse(e,"utf8")}catch{return null}},readDir:e=>{try{return xse(e)}catch{return[]}},realpath:e=>{try{return Ase.native(e)}catch{return e}},readLink:e=>{try{return _se(e).isSymbolicLink()?Ese(e):null}catch{return null}},writable:e=>{try{return Rse(e,wse.W_OK),!0}catch{return!1}}},PW=/[\\/]/;Tse=/^(.*)[\\/]releases[\\/]([^\\/]+)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/});function OW(e){return`npm-${e}`}function Qf(e,t="latest"){let r=`${ER}@${t}`;switch(e.kind){case"release_dir":{let n=e.releasesRoot?`${e.releasesRoot}/${OW(t)}`:`<releases>/${OW(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 AR=p(()=>{"use strict";Xf()});var TW=p(()=>{"use strict"});import{mkdirSync as sje,readFileSync as Fse,readdirSync as ije,renameSync as aje,writeFileSync as lje}from"node:fs";import NW from"node:path";function Wse(){return NW.join(bl(),"runtime")}function Kse(e){return NW.join(e,"summary.json")}function DW(e=Wse()){try{let t=JSON.parse(Fse(Kse(e),"utf8"));if(t?.v===1)return t}catch{}return{v:1,attempts:0,succeeded:0,rolledBack:0,failed:0,last:null}}var MW=p(()=>{"use strict";wp();TW()});function Hse(e=Date.now()){if(Zf&&e-Zf.at<$se)return Zf.report;if(!Ei){let o=zf();Ei={kind:o.kind,supervisor:o.supervisor,can:!o.unsupportedReason,manual:Qf(o,"latest")}}let t=DW(),r=t.last,n={v:1,installKind:Ei.kind,supervisor:Ei.supervisor,canSelfUpdate:Ei.can,manualCommand:Ei.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 Zf={at:e,report:n},n}function em(){try{return Hse()}catch{return}}var Ei,Zf,$se,PR=p(()=>{"use strict";Xf();AR();MW();Ei=null,Zf=null,$se=3e4});import{readdir as jse,readFile as Vse}from"node:fs/promises";import{sep as Gse}from"node:path";import{fileURLToPath as Jse}from"node:url";function Xse(e=import.meta.url){let t;try{t=Jse(e)}catch{return"checkout"}return t.split(Gse).includes("node_modules")||t.split("/").includes("node_modules")?"npm":"checkout"}function Qse(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=zse?t:null}async function Zse(e){try{return Qse(JSON.parse(await Vse(e,"utf8")).version)}catch{return null}}function eie(e,t){if(!e)return t;try{return bp(t,e)>0?t:e}catch{return e}}async function tie(e={}){let t={},r=new Set;for(let n of(e.scopeRoots??sD)()){let o=[];try{o=await jse(n)}catch{continue}for(let s of o)/^[a-z0-9][a-z0-9._-]*$/i.test(s)&&r.add(`${LW}${s}`)}try{for(let n of await(e.adopted??lb)())n.packageName.startsWith(LW)&&r.add(n.packageName)}catch{}for(let n of[...r].sort().slice(0,Yse))for(let o of zk(n)){let s=await Zse(o);s&&(t[n]=eie(t[n],s))}return t}function rie(e){IR||Ai&&e-Ai.at<qse||(IR=tie().then(t=>{Ai={at:Date.now(),packages:t}}).catch(()=>{Ai={at:Date.now(),packages:Ai?.packages??{}}}).finally(()=>{IR=null}))}function tm(e=Date.now()){try{rie(e)}catch{}return{v:1,runtime:{version:Xe,source:Xse()},packages:{...Ai?.packages??{}}}}var LW,qse,Yse,zse,Ai,IR,OR=p(()=>{"use strict";sn();Xk();cb();Yk();LW="@kynver-app/",qse=10*6e4,Yse=40,zse=32;Ai=null,IR=null});async function BW(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:zd(e.agentOsId,i)})}).catch(()=>{}),s=t.payload?.action;try{let i=await(r.execute??SW)(t.payload,{boxId:e.boxId,agentOsId:e.agentOsId,localDisabled:A().browserDisabled===!0,onEnabledTurn:wW});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 UW=p(()=>{"use strict";$();xR();js()});import{appendFileSync as nie,chmodSync as oie,existsSync as FW,readFileSync as sie,renameSync as iie,statSync as aie}from"node:fs";import lie from"node:path";function WW(e,t=Rt()){return lie.join(t,Za(e).replace(/\.vault\.json$/,".audit.jsonl"))}function KW(e,t,r=Rt()){try{Xa(r);let n=WW(e,r);FW(n)&&aie(n).size>cie&&iie(n,`${n}.1`),nie(n,`${JSON.stringify({at:new Date().toISOString(),...t})}
|
|
543
|
+
`,{mode:384});try{oie(n,384)}catch{}}catch{}}function $W(e,t=50,r=Rt()){let n=WW(e,r);return FW(n)?sie(n,"utf8").split(`
|
|
544
|
+
`).filter(Boolean).slice(-t).flatMap(o=>{try{return[JSON.parse(o)]}catch{return[]}}):[]}var cie,HW=p(()=>{"use strict";Qa();Jd();cie=512*1024});function $t(e,t){return{ok:!1,code:e,text:t}}async function jW(e,t,r={}){let n=e??{};if(typeof n.boxId!="string"||n.boxId!==t.boxId)return $t("wrong_computer","This request was meant for another computer.");let o;try{o=(r.keys??Vd)()}catch(a){return $t("keys_unavailable",a instanceof Error?a.message:"This computer's secret store isn't available.")}let s=new $s({agentOsId:t.agentOsId,vaultKey:o.vaultKey,root:r.root}),i=a=>(r.audit??KW)(t.agentOsId,a,r.root);try{switch(n.op){case"describe":return{ok:!0,publicKey:o.publicKeyRaw.toString("base64"),fingerprint:o.fingerprint,keyStore:o.keyStore,secrets:s.list()};case"list":return{ok:!0,fingerprint:o.fingerprint,keyStore:o.keyStore,secrets:s.list(),audit:$W(t.agentOsId,30,r.root)};case"store":{let a=n.name,l=n.requestId;if(!$d(a))return $t("invalid_name","That secret name isn't allowed.");if(typeof l!="string"||!KI.test(l))return $t("invalid_request","That request id isn't valid.");let c=jI(n.envelope);if(!c)return $t("invalid_envelope","The sealed value is malformed.");if(c.kid!==o.fingerprint)return i({event:"refused",name:a,ok:!1,via:"chat",requestId:l,code:"key_mismatch"}),$t("key_mismatch","The value was sealed for a different computer key. Reload the card and try again.");let u;try{u=VI(o.ecdhPrivateKey,c,{agentOsId:t.agentOsId,requestId:l,name:a})}catch(m){return i({event:"refused",name:a,ok:!1,via:"chat",requestId:l,code:"open_failed"}),$t("open_failed",m instanceof Ut?m.message:"The secret could not be opened.")}let d=typeof n.purpose=="string"?n.purpose:"",f=s.put({name:a,value:u,purpose:d});return u="",Gy(t.agentOsId),i({event:f.replaced?"rotate":"store",name:a,handle:f.summary.handle,ok:!0,via:n.via==="settings"?"settings":"chat",requestId:l}),{ok:!0,handle:f.summary.handle,name:a,replaced:f.replaced}}case"delete":{let a=n.handle;if(typeof a!="string"||!WI.test(a))return $t("invalid_handle","That secret handle isn't valid.");let l=s.remove({handle:a});return Gy(t.agentOsId),i({event:"delete",name:l.name,handle:a,ok:!0,via:n.via==="chat"?"chat":"settings"}),{ok:!0,handle:a,name:l.name}}default:return $t("unknown_op","Unknown secret operation.")}}catch(a){return a instanceof Ue?$t(a.code,a.message):$t("store_failed","The secret store on this computer hit an error.")}}var VW=p(()=>{"use strict";HW();Hy();js();Qa();Jd();za()});async function GW(e,t,r,n={}){let o=t.payload?.op;try{let s=await jW(t.payload,r,n);await e([{seq:0,kind:"final",message:s}]),console.error(JSON.stringify({event:"secret_turn_done",turnId:t.turnId,op:o,ok:s.ok,code:s.ok?null:s.code}))}catch{await Promise.resolve(e([{seq:0,kind:"error",error:"secret_turn_crashed"}])).catch(()=>{}),console.error(JSON.stringify({event:"secret_turn_error",turnId:t.turnId,op:o}))}}var JW=p(()=>{"use strict";VW()});function qW(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??(()=>Lo({env:e,platform:r,config:n})))()}catch{}let s={version:null,missingLibs:[]};if(o.executable)try{s=(t.health??(i=>eW(i)))(o.executable)}catch{}return{supported:!0,chromeFound:o.executable!==null,localDisabled:n.browserDisabled===!0,browserSource:o.source,browserVersion:o.version??s.version,provisioning:Bo().state,missingLibs:s.missingLibs,wsl:ql(e,r),headless:Kf(e,r),autoProvision:n.browserAutoProvision!==!1,sandbox:gW()}}var YW=p(()=>{"use strict";$();yR();Do();Yl();Jf();wR()});function Zl(e,t,r,n,o,s,i){return{chatProvider:e,toolCalls:e==="anthropic"||e==="cursor"||e==="gemini"||e==="openai"||e==="codex",runtimePackageVersion:Xe,browser:qW(),deliveryReceipt:!0,...t?{chatModels:t}:{},...r?{computer:r}:{},...n?{security:n}:{},...o?{agentEngines:o}:{},...s?{packageVersions:s}:{},...i?{selfUpdate:i}:{}}}var TR=p(()=>{"use strict";sn();YW()});import{spawn as uie}from"node:child_process";async function zW(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=or(o),i=new Set([...iv,...fm]);return new Promise(a=>{let l="",c=!1,u=m=>{c||(c=!0,clearTimeout(f),a({...m,at:r().toISOString()}))},d;try{d=uie(t.execPath??process.execPath,["-e",die],ee({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 die,XW=p(()=>{"use strict";D();Ao();Mi();die="process.stdout.write(JSON.stringify(Object.keys(process.env)))"});function fie(e){return e>=200&&e<300?"accepted":e===409||e===410?"rejected":e===404||e===405?"unsupported":"unreachable"}function QW(e){return e!=="rejected"}async function ZW(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(),pie);try{let a=await ci(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 Hr(e,a,l.status),{outcome:fie(l.status),status:l.status}}catch{}finally{clearTimeout(i)}}return{outcome:"unreachable",status:null}}var pie,eK=p(()=>{"use strict";ui();pie=4e3});async function hie(e,t,r=fetch){let n=new AbortController,o=setTimeout(()=>n.abort(),gie);try{let s=await ci(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 Hr(e,s,a.status),a.ok}catch{return!1}finally{clearTimeout(o)}}function tK(e){let t=e.intervalMs??mie,r=!1,n=()=>{r||hie(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 mie,gie,rK=p(()=>{"use strict";ui();mie=15e3,gie=5e3});function nK(e){return e==="body"?12e4:32e3}var oK=p(()=>{"use strict"});async function sK(e,t,r,n){let o=A(),s=tr(o),i=await Co(e);if(!i.bearer)return"no_credential";let a=Zl(s,pi(o),Jp(s,o),e.security?.report({policy:n,auth:i.kind,credentialStore:_l(),folderSandbox:kf(process.env,o)}),xf(),tm(),em()),l=uL(e.agentOsId);l&&(a.browser.siteLogins=l);let c=i.kind==="box_token"?i.boxId:Rl();e.chatProvider=s,e.boxId=c,e.model=So(s,o,process.env);let u=new AbortController,d="headers",f=()=>setTimeout(()=>u.abort(),nK(d)),m=f(),g=setInterval(()=>{t()&&u.abort()},500);try{let h=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:yie,capabilities:a,claimRetries:r}),signal:u.signal});if(h.status===204)return null;if(h.status===401||h.status===403){let k=await h.text().catch(()=>"");return console.error(JSON.stringify({event:"chat_claim_auth_error",status:h.status,bridgeUrl:e.bridgeUrl,agentOsId:e.agentOsId,authKind:i.kind,detail:k.slice(0,200)})),Hr(e,i,401),"auth_error"}if(h.status===429)throw new Rn(h.status);if(!h.ok)throw new Rn(h.status);d="body",clearTimeout(m),m=f();let y;try{y=await h.json()}catch{throw new Rn(502)}let b=mM(y);if(!b)throw new Rn(502);return b.turn}catch(h){if(t())return null;throw h}finally{clearTimeout(m),clearInterval(g)}}var yie,iK=p(()=>{"use strict";$();Uv();PR();OR();TR();Ip();Ul();Ol();wn();ui();oK();Dp();qp();yie=2e4});async function NR(e){let t=await Np(),r=()=>xb(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:lK}));!t&&!e.shouldStop();){if(!r()||(await di(lK,e.shouldStop),e.shouldStop()))return;t=await Np()}if(!t||e.shouldStop())return;let n=VM(process.env,A()),o=new Wp;t.security&&(t.security.childEnv=await zW().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:Zl(t.chatProvider),useClaudeOauth:t.useClaudeOauth,turnSignature:n,credentialStore:_l(),childEnvSafe:t.security?.childEnv?.ok??null,auth:t.auth?.describe().kind??"api_key"}));let s=0,i=0,a=new Pp,l=tK({target:t,capabilities:u=>{let d=A(),f=tr(d);return Zl(f,pi(d),Jp(f,d),t.security?.report({policy:n,auth:u.kind,credentialStore:_l(),folderSandbox:kf(process.env,d)}),xf(),tm(),em())},onBeat:u=>_W({pid:process.pid,runtimeVersion:Xe,at:new Date().toISOString(),heartbeatOk:u,chatTurns:Math.max(0,s-i),commandTurns:i})}),c=Promise.resolve();for(;!e.shouldStop();)try{if(s>=kie){await di(250,e.shouldStop);continue}let u=await sK(t,e.shouldStop,a.snapshot(),n);if(u==="no_credential"){console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:"machine_not_linked"})),await di(aK,e.shouldStop);continue}if(u==="auth_error"){a.onAuthError();let d=t.auth?.describe().hasBoxCredential===!0;await di(d?5e3:aK,e.shouldStop);continue}if(a.onSuccess(),u){let d=await ZW(t,u.turnId);if(!QW(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=()=>jb(t,u);m=c.then(g,g),c=m.then(()=>{},()=>{})}else{let g=await $b(t,u,{policy:n,nonces:o});if(!g.ok){s-=1;continue}if(o.markStarted(u.turnId),f==="browser"){let h=await Co(t);m=BW({...t,apiKey:h.bearer},{turnId:u.turnId,payload:g.payload})}else f==="secret"?m=GW(h=>Ee(t,u.turnId,h),{turnId:u.turnId,payload:g.payload},{agentOsId:t.agentOsId,boxId:t.boxId}):f==="agent-tab"?m=nF(h=>Ee(t,u.turnId,h),{turnId:u.turnId,payload:g.payload,boxId:t.boxId},{late:dL(t)}):m=Tv(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=kM(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 di(m,e.shouldStop)}l(),await RW(),console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}var aK,lK,kie,cK=p(()=>{"use strict";$();Uv();oF();xR();sn();xW();PR();OR();UW();JW();TR();XW();Ip();Ul();eK();rK();Ol();wn();Kp();Lb();Dp();Nv();iK();Vb();xl();qp();Hb();aK=6e4,lK=5*6e4,kie=3});var uK=p(()=>{"use strict";Ip();Dp();Hb();Vb();Nv();cK()});import{createHash as bie}from"node:crypto";import{chmodSync as dK,existsSync as vie,mkdirSync as Rie,rmSync as pK}from"node:fs";import{createConnection as wie,createServer as Sie}from"node:net";import{homedir as _ie,userInfo as xie}from"node:os";import Cie from"node:path";function Aie(e,t=process.platform){return t==="win32"?`\\\\.\\pipe\\kynver-site-logins-${bie("sha256").update(`${xie().username}:${_ie()}`).digest("hex").slice(0,16)}`:Cie.join(e,"control.sock")}async function Pie(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 Iie(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 fK(e){let t=Aie(e.rootDir);if(process.platform!=="win32"){Rie(e.rootDir,{recursive:!0,mode:448});try{dK(e.rootDir,448)}catch{}if(vie(t)){if(await Oie(t))return null;pK(t,{force:!0})}}let r=Sie(n=>{let o="";n.setEncoding("utf8"),n.setTimeout(12e4,()=>n.destroy()),n.on("data",s=>{if(o+=s,o.length>Eie)return void n.destroy();let i=o.indexOf(`
|
|
545
|
+
`);if(i<0)return;let a=Iie(o.slice(0,i));o="";let l=c=>n.end(`${JSON.stringify(c)}
|
|
546
|
+
`);if(!a)return l({ok:!1,error:"malformed request"});Pie(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{dK(t,384)}catch{}return{path:t,close:()=>new Promise(n=>{r.close(()=>n()),process.platform!=="win32"&&pK(t,{force:!0})})}}function Oie(e){return new Promise(t=>{let r=wie(e),n=o=>{r.destroy(),t(o)};r.once("connect",()=>n(!0)),r.once("error",()=>n(!1)),setTimeout(()=>n(!1),1e3).unref?.()})}var Eie,mK=p(()=>{"use strict";zn();Eie=16*1024});function Die(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":wi(e.platform,e.arch)?null:"unsupported_platform"}async function gK(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 hK(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??(()=>Lo({env:t,platform:r,arch:n})),a=e.loadConfig??A;try{await gK(e.startDelayMs??Tie,e);for(let l=1;l<=Nie&&!e.shouldStop();l+=1){let c=Die({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=cW(Bo());if(u>o()&&await gK(u-o(),e),e.shouldStop())return;s({event:"browser_autoprovision_start",attempt:l});try{let d=await(e.provision??Gf)({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 Tie,Nie,yK=p(()=>{"use strict";$();Do();Yl();Jf();Tie=6e4,Nie=5});function DR(e){let t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Uie(e,t){let r=DR(e),n=DR(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 Fie(e,t,r={}){let n=r.manual??`${rm} 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 Wie(){try{let e=zf();return{manual:Qf(e,"latest"),selfUpdate:!e.unsupportedReason}}catch{return{manual:`${rm} then restart Kynver (or restart the computer)`,selfUpdate:!1}}}async function Kie(e={}){let t=e.installed??Xe,r={installed:t,latest:null,outdated:!1,command:rm};if((e.env??process.env).KYNVER_DISABLE_UPDATE_CHECK==="1")return r;let o=new AbortController,s=setTimeout(()=>o.abort(),Lie);try{let a=await(e.fetch??fetch)(Mie,{signal:o.signal,headers:{accept:"application/json"}});if(!a.ok)return r;let l=await a.json(),c=typeof l?.version=="string"&&DR(l.version)?l.version:null;return c?{installed:t,latest:c,outdated:Uie(t,c),command:rm}:r}catch{return r}finally{clearTimeout(s)}}function bK(e={}){let t=e.log??(s=>console.error(s)),r=null,n=async()=>{let s=await Kie(e);if(s.outdated&&s.latest&&s.latest!==r){r=s.latest;let i=(e.advice??Wie)();t(JSON.stringify({event:"runtime_update_available",installed:s.installed,latest:s.latest,command:i.manual,selfUpdate:i.selfUpdate})),t(Fie(s.installed,s.latest,i))}return s};n().catch(()=>{});let o=setInterval(()=>{n().catch(()=>{})},e.intervalMs??Bie);return o.unref?.(),{stop:()=>clearInterval(o),checkNow:n}}var kK,rm,Mie,Lie,Bie,vK=p(()=>{"use strict";sn();AR();Xf();kK="@kynver-app/runtime",rm=`npm install -g ${kK}@latest`,Mie=`https://registry.npmjs.org/${kK}/latest`,Lie=5e3,Bie=360*6e4});var _K={};XR(_K,{adoptOrAcquireOwnerLease:()=>wK,completeWorker:()=>aO,dispatchRun:()=>zs,resolveDaemonOwnerKind:()=>RK,runDaemon:()=>SK,runPipelineTick:()=>xp,sweepRun:()=>np});async function MR(e,t,r){let n=e;for(;n>0&&!t();){let o=Math.min(Vie,n),s=Date.now();await fc(o);let i=qg(o,Date.now()-s);if(i!==null){r?.(i);return}n-=o}}function RK(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 wK(e,t,r,n=_u){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 SK(e,t={}){let r=ah({hostCapability:t.hostCapability}),n=rt()?{loaded:0}:LS();n.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...n}));let o=String(e.run||"").trim();o||(console.error(eh("--run")),process.exit(1));let s=String(e.agentOsId||A().agentOsId||"").trim();s||(console.error(eh("--agent-os-id")),process.exit(1)),us(s).ok||(console.error(ag(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)):$ie,c=!1,u=0,d=I_(T=>{c||console.error(JSON.stringify({event:"daemon_stop_requested",reason:T,runId:o})),c=!0}),f=await wK(s,RK(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;jS(m.metadata.ownerKind),LC({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=IC(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=R_();(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=fC();k.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:k.resolved?.defaultRepo??null,configPath:k.configPath}));let v=AC(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})),bK();let w=gs(),S=new Ap;S.start();let _=new Ep({agentOsId:s,init:{ownerKind:m.metadata.ownerKind,admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null}});S.setTickIsolation(_.mode),console.error(JSON.stringify({event:"daemon_tick_isolation",mode:_.mode,reason:_.reason}));let R=fK(Nt()).catch(()=>null),L=NR({shouldStop:()=>c}).catch(T=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:T instanceof Error?T.message:String(T)}))});hK({shouldStop:()=>c});let j=!1;for(;!c;)try{if(y!==null){let C=y;y=null;let I=m.isHeld();if(console.error(JSON.stringify({event:"daemon_resume_detected",agentOsId:s,gapMs:C,ownerLeaseHeld:I})),!I){console.error(JSON.stringify({event:"daemon_owner_lease_lost",agentOsId:s,runId:o})),process.exitCode=1,c=!0;break}}S.setPhase("heartbeat"),m.renew(),$x({agentOsId:s,runId:o,instructionBundleVersion:Qn(),owner:g}),S.setPhase("runner_credential");let T=await iu(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`}))),S.setPhase("idle"),await MR(l,()=>c,b);continue}j&&(j=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:s}))),S.setPhase("instruction_bundle"),await xC({agentOsId:s,baseUrl:jn(e.baseUrl?String(e.baseUrl):void 0),secret:T.secret}),S.setPhase(_.mode==="thread"?"pipeline_tick_thread":"pipeline_tick_inline");let U=await _.runTick({run:o,agentOsId:s,execute:a,...e,secret:typeof e.secret=="string"&&e.secret?e.secret:T.secret},S.report());S.setTickIsolation(U.isolation);let N=U.tick;S.setPhase("tick_log"),console.error(JSON.stringify({event:"daemon_tick",tickIsolation:U.isolation,...N})),S.setPhase("runtime_control");let J=Zr(s),W=U.inFlightWorkers??Cp(s)??0;if($S(J,W)){let C=Vc({control:J,supervisor:m.metadata.ownerKind,inFlightWorkers:0,exiting:!0}),I=jn(e.baseUrl?String(e.baseUrl):void 0),M=C&&I?await Bx({baseUrl:I,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:M})),process.exitCode=jc,c=!0;break}if(w.tickEnabled){S.setPhase("cron_tick");let C=Nu(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 I=await fh({env:w,agentOsIdFilter:s});I.enabled&&(I.fired>0||I.errors>0||I.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...I}))}}N.idle?u++:u=0;let F=Math.floor(bs("daemon.maxIdleStreak",jie)),x=Math.floor(bs("daemon.idleIntervalMs",Hie)),G=u>=F?x:l;S.setPhase("idle"),await MR(G,()=>c,b)}catch(T){console.error(JSON.stringify({event:"daemon_tick_error",error:T.message})),S.setPhase("idle"),await MR(l,()=>c,b)}S.setPhase("stopping"),await L,await _.close(),S.stop(),await(await R)?.close().catch(()=>{}),Nt().lock();let O=O_(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 $ie,Hie,jie,Vie,LR=p(()=>{"use strict";$();th();mC();CC();an();PC();Jg();du();xu();Et();Yg();OC();Ou();lh();mh();Sr();yr();gh();D();cM();Rb();dM();uK();ua();mK();yK();vK();en();Gg();vb();fd();Pk();Js();$ie=6e4,Hie=5*6e4,jie=10,Vie=250});var xK=p(()=>{"use strict";Q();Jo();Ek();Pe();D()});var ec,CK=p(()=>{"use strict";ec=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 Gie,mkdirSync as Jie}from"node:fs";import qie from"node:path";function Yie(e){let t=typeof e.repo=="string"?e.repo.trim():"";if(t)return t;let r=ha();return r?r.repo:(At("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function zie(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}`};let l=e.resolveLocalOnlyBranch?.()?.trim();if(l&&e.verifyRef(l))return{base:l,source:"local-branch",note:`${t} has no git remote \u2014 cutting the run from the local branch ${l}`};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 Xie(e){let t=te(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=te(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 Qie(e){let t=te(e,["remote"]);if(t.status!==0||t.stdout.trim())return null;let r=te(e,["symbolic-ref","--quiet","--short","HEAD"]);return(r.status===0?r.stdout.trim():"")||"main"}function Zie(e,t){let r=A();try{return zie({explicitBase:typeof t.base=="string"?t.base:void 0,envBaseRef:process.env.KYNVER_RUN_BASE_REF,configDefaultBase:r.defaultBase,verifyRef:n=>te(e,["rev-parse","--verify","--quiet",`${n}^{commit}`]).status===0,resolveRemoteHeadRef:()=>Xie(e),resolveLocalOnlyBranch:()=>Qie(e),repoLabel:e})}catch(n){throw new ec(n.message,{remedy:"Diagnose: run `kynver doctor runner-install`.",cause:n})}}function BR(e){let t=NI(Yie(e));uw(t);let r=e.id?Uy(String(e.id)):cc(String(e.name||"run")),n=q(r);Gie(n)&&eae(`run already exists: ${r}`),Jie(n,{recursive:!0});let o=Zie(t,e);o.note&&console.error(o.note);let s=o.base,i=ue(t,["rev-parse",s]).trim(),a=jt(),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(qie.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 eae(e){throw new ec(e)}var UR=p(()=>{"use strict";_e();Q();xK();D();Ss();Kd();Fn();$();CK()});function EK(e,t){return e.filter(n=>n.repo===t&&!Wr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]??null}var AK=p(()=>{"use strict";_e();hn()});var PK=p(()=>{"use strict";Sr();hs();ph()});var nm=p(()=>{"use strict";Sr();yr()});var om=p(()=>{"use strict"});var FR=p(()=>{"use strict"});var WR=p(()=>{"use strict";PK();Sr();hs();nm();yr();om();FR()});var IK=p(()=>{"use strict"});var OK=p(()=>{"use strict";nm();om()});var TK=p(()=>{"use strict";yr();Sr()});var NK=p(()=>{"use strict";$();dt();Et();D();mh();IK();OK();yr();nm();TK();Hc();ns();hs();WR();om();FR();Q()});var DK=p(()=>{"use strict";WR();NK()});import{homedir as iae}from"node:os";import aae from"node:path";var BJe,UJe,MK=p(()=>{"use strict";BJe=aae.join(iae(),".kynver","logs","kynver.log"),UJe=10*6e4});var LK=p(()=>{"use strict";vm();wn()});var BK=p(()=>{"use strict";LK()});var UK=p(()=>{"use strict";ns();Hc();$();yr();Gc();Jm();Zi();Q()});function FK(e,t){return EK(e,t)?.id??null}var WK=p(()=>{"use strict";$();Lg();LR();th();lh();xu();UR();Q();AK();Ss();DK();Vg();Xm();Ss();wn();MK();BK();UK()});var VK={};XR(VK,{prepareDesktopRuntime:()=>bae,resolveDesktopRepository:()=>jK});import{spawnSync as KK}from"node:child_process";import{randomBytes as lae}from"node:crypto";import{existsSync as cae,mkdirSync as uae,readFileSync as dae,realpathSync as $K,statSync as pae,writeFileSync as fae}from"node:fs";import{homedir as mae}from"node:os";import $R from"node:path";function we(e,t){return{ok:!1,code:e,message:t}}function gae(){return $R.join(mae(),".kynver","desktop-binding.json")}function hae(e){if(!cae(e))return null;try{let t=JSON.parse(dae(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 yae(e,t){uae($R.dirname(e),{recursive:!0}),fae(e,`${JSON.stringify(t,null,2)}
|
|
547
|
+
`,{mode:384})}function HK(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 KR(e,t,r,n={}){try{let o=await mt(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 kae(e){return(e?.accessibleItems??[]).filter(t=>t.access?.isOwner===!0&&typeof t.agentOs?.id=="string").map(t=>(t.agentOs?.id).trim()).filter(Boolean)}function jK(e,t="git"){let r=KK(t,["--version"],ee({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=$K.native($R.resolve(e)),!pae(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=KK(t,["rev-parse","--is-bare-repository","--show-toplevel"],ee({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:$K.native(s[1].trim())}}catch{return we("not_a_repository","The Git working tree root could not be resolved")}}async function bae(e,t={}){let r=t.fetchImpl??fetch,n=t.acquireOwnerLease??_u,o=t.bindingPath??gae(),s=[],i=dr(e.apiBaseUrl);if(!i)return we("invalid_input","apiBaseUrl is required");let a=Fi(i),l=new URL(a).origin;if(e.agentOsId!==void 0&&!us(e.agentOsId).ok)return we("invalid_input","agentOsId is not a valid workspace id");let c;try{c=Ce()}catch(S){if(S instanceof Ii)return we("credentials_unavailable","This computer's credentials have not been provided");throw S}if(!c)return we("credentials_unavailable","This computer is not paired");let u=await KR(`${a}/api/users/me`,c,r);if(u.status!==200)return HK(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 KR(`${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 KR(`${a}/api/agent-os`,c,r);if(g.status!==200)return HK(g.status,"Workspace lookup");let h=g.body,y;if(e.agentOsId){if(!kae(h).includes(e.agentOsId))return we("agent_os_not_owned","That workspace is not owned by the paired account");y=e.agentOsId}else{let S=Dg(h);if(!S?.id)return we("no_workspace","No workspace owned by this account was found");y=S.id}let b=jK(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 w=v.lease;try{He({...A(),apiBaseUrl:a,agentOsId:y,defaultRepo:k});let S=jg(A());s.push(...S.warnings);let _=A().boxId?.trim()??"";if(!_)return w.release(),we("local_state_error","Box identity could not be established");if(await Bg(on()),!Me(y))try{let U=await Vn(y,{baseUrl:a,apiKey:c});Hn(y,U)}catch(U){let N=U.message;if(yx(N)==="access_denied")return w.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 R=hae(o),L=R!==null&&R.cloudOrigin===l&&R.accountId===d&&R.agentOsId===y&&R.repo===k,j="";if(L){let U=FK(xe().filter(N=>N.id===R.runId),k);U&&(j=U)}if(!j){let U=`${cc("desktop")}-${lae(3).toString("hex")}`;j=BR({repo:k,name:"desktop",id:U}).runId}yae(o,{version:1,cloudOrigin:l,accountId:d,agentOsId:y,repo:k,runId:j});let O=gu(k);O||s.push("the repository has no origin remote; nothing can run until it has one");let{runnerId:T}=Be({runId:j});return{ok:!0,prepared:{accountId:d,agentOsId:y,runId:j,repo:k,boxId:_,repoIdentity:O,runnerId:T},lease:w,warnings:s}}catch(S){return w.release(),we("local_state_error",S.message)}}var GK=p(()=>{"use strict";pr();Lg();Mg();$();Et();Sr();hs();xu();hu();Q();xr();Vg();WK();UR();D()});Et();import{pathToFileURL as vae}from"node:url";var nw="credential.persist";function ow(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:nw,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:nw,kind:"runnerToken",agentOsId:a,value:l})},reseed:o}}du();hu();zn();Og();var sx=/^lg_[a-z0-9]{6,20}$/,MV=/^cr_[0-9a-f]{12}$/,LV=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Xn=(e,t,r=1)=>typeof e=="string"&&e.length>=r&&e.length<=t&&!e.includes("\0");function ms(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function ix(e){let t=["v","type","id","agentOsId","op"];switch(e.op){case"key":return ms(e,[...t,"key"])??(Xn(e.key,64,40)&&/^[A-Za-z0-9+/]{43}=$/.test(e.key)?{op:"key",key:e.key}:"invalid key");case"list":case"wipe":return ms(e,t)??{op:e.op};case"remove":return ms(e,[...t,"handle"])??(typeof e.handle=="string"&&sx.test(e.handle)?{op:"remove",handle:e.handle}:"invalid handle");case"code":{let r=ms(e,[...t,"requestId","code"]);return r||(e.requestId!==void 0&&!(typeof e.requestId=="string"&&MV.test(e.requestId))?"invalid requestId":Xn(e.code,16)?{op:"code",code:e.code,...e.requestId?{requestId:e.requestId}:{}}:"invalid code")}case"add":{let r=ms(e,[...t,"login","replaceHandle"]);if(r)return r;let n=e.login;return!LV(n)||ms(n,["origin","label","username","password","totp"])||!Xn(n.origin,2048)||!Xn(n.label,ht.maxLabel)||!Xn(n.username,ht.maxUsername)||!Xn(n.password,ht.maxPassword)||n.totp!==void 0&&!Xn(n.totp,ht.maxTotp,0)?"invalid login":e.replaceHandle!==void 0&&!(typeof e.replaceHandle=="string"&&sx.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 ax(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)}}}ua();zn();var Rae=1,sm=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,Pi=/^[A-Za-z0-9_-]{1,64}$/,wae=/^[a-z0-9][a-z0-9._-]{0,127}$/i,JK=4096,Sae=4096,_ae=16;function HR(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function tc(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function rc(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!e.includes("\0")}function xae(e){if(!rc(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 Cae(e){if(!HR(e))return{ok:!1,message:"message must be an object"};if(e.v!==Rae)return{ok:!1,message:"unsupported protocol version"};let t=r=>({ok:!1,message:r});switch(e.type){case"credentials":{let r=tc(e,["v","type","apiKey","runnerTokens"]);if(r)return t(r);if(e.apiKey!==void 0&&!rc(e.apiKey,JK))return t("invalid apiKey");let n;if(e.runnerTokens!==void 0){if(!HR(e.runnerTokens))return t("invalid runnerTokens");let o=Object.entries(e.runnerTokens);if(o.length>_ae)return t("too many runnerTokens");n={};for(let[s,i]of o){if(!sm.test(s)||!rc(i,JK))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=tc(e,["v","type","id","apiBaseUrl","repo","agentOsId","expectedAccountId"]);return r?t(r):typeof e.id!="string"||!Pi.test(e.id)?t("invalid id"):xae(e.apiBaseUrl)?rc(e.repo,Sae)?e.agentOsId!==void 0&&(typeof e.agentOsId!="string"||!sm.test(e.agentOsId))?t("invalid agentOsId"):e.expectedAccountId!==void 0&&!rc(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=tc(e,["v","type","id","policy"]);if(r)return t(r);if(typeof e.id!="string"||!Pi.test(e.id))return t("invalid id");let n=U_(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=tc(e,["v","type","id","runId","agentOsId"]);return r?t(r):typeof e.id!="string"||!Pi.test(e.id)?t("invalid id"):typeof e.runId!="string"||!wae.test(e.runId)?t("invalid runId"):typeof e.agentOsId!="string"||!sm.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"||!Pi.test(e.id))return t("invalid id");if(typeof e.agentOsId!="string"||!sm.test(e.agentOsId))return t("invalid agentOsId");let r=ix(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=tc(e,["v","type","id"]);return r?t(r):typeof e.id!="string"||!Pi.test(e.id)?t("invalid id"):{ok:!0,value:{v:1,type:e.type,id:e.id}}}default:return t("unknown message type")}}function Eae(e){return HR(e)&&typeof e.id=="string"&&Pi.test(e.id)?e.id:null}function Aae(e){let t=tw()?"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(pg(l))return;let c=Cae(l);if(!c.ok){s(Eae(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=ow(d,f=>e.send(f)),ew(r)),t==="awaiting_credentials"&&(t="ready"),e.send({v:1,type:"event",name:"credentials_accepted",state:t});return}case"status":{let d=kg();i(u.id,{state:t,prepared:n,policyRevision:d?.revision??null});return}case"policy":{if(!K_(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,$_({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=kg();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 ax(Nt(),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 Pae(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}ZR();for(let s of QR)delete e.env[s];let[{prepareDesktopRuntime:t},{runDaemon:r}]=await Promise.all([Promise.resolve().then(()=>(GK(),VK)),Promise.resolve().then(()=>(LR(),_K))]),n=s=>{if(!e.connected||typeof e.send!="function")throw new Error("desktop IPC channel is closed");e.send(s)},o=Aae({send:n,prepare:s=>t(s),runDaemon:r,requestDaemonStop:()=>{e.emit("message",{type:uu},void 0)},exit:s=>e.exit(s),daemonExitCode:()=>typeof e.exitCode=="number"?e.exitCode:0});H_(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{}}),Nt().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:uu},void 0);return}e.exit(0)}),n({v:1,type:"event",name:"ready",state:o.state})}function Iae(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===vae(e).href}catch{return!1}}Iae()&&Pae();export{Rae as DESKTOP_ENTRY_PROTOCOL_VERSION,Aae as createDesktopEntryController,Cae as parseDesktopEntryMessage,Pae as startDesktopEntry};
|