@kynver-app/runtime 0.2.150 → 0.2.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +169 -169
- package/dist/daemon-tick-thread.js +51 -51
- package/dist/desktop-entry.js +120 -120
- package/dist/index.js +160 -160
- package/dist/server/dispatch-routing.js +4 -4
- package/dist/server/model-routing.js +4 -4
- 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 Cj=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 aS=(e,t)=>{for(var r in t)Cj(e,r,{get:t[r],enumerable:!0})};function cS(){
|
|
2
|
-
`),Bj(r,e)}catch(n){try{Fj(r,{force:!0})}catch{}throw n}}function W(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
1
|
+
var Cj=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 aS=(e,t)=>{for(var r in t)Cj(e,r,{get:t[r],enumerable:!0})};function cS(){ns=!0}function lt(){return ns}function uS(e){if(!ns)throw new Error("installDesktopCredentialProvider requires desktop credential mode");if(e.kind!=="desktop")throw new Error("only a desktop credential provider may be installed");if(aa)throw new Error("desktop credential provider is already installed");aa=e}function dS(){return aa!==null}function pS(e){if(!ns)return e;if(!aa)throw new ia;return aa}function Me(e,t=process.env){if(ns)return;let r=t[e]?.trim();return r||void 0}function cg(){if(ns)throw new lg}var lS,ia,lg,ns,aa,Mt=p(()=>{"use strict";lS=["KYNVER_API_KEY","KYNVER_RUNNER_TOKEN","KYNVER_CHAT_BOX_CREDENTIAL","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","OPENCLAW_RUNNER_TOKEN"],ia=class extends Error{constructor(){super("desktop credential provider is not installed; refusing to fall back to file or env credentials"),this.name="DesktopCredentialProviderMissingError"}},lg=class extends Error{constructor(){super("the credentials file is disabled in desktop mode"),this.name="LegacyCredentialStoreDisabledError"}},ns=!1,aa=null});import{homedir as ug}from"node:os";import zn from"node:path";function Kc(e){return e==="~"?ug():e.startsWith("~/")||e.startsWith("~\\")?zn.join(ug(),e.slice(2)):e}function Le(e){return zn.resolve(Kc(e))}function Ej(e){let t=Kc(e),r=zn.resolve(t),n=zn.resolve(ug());return r===n?"~":r.startsWith(`${n}${zn.sep}`)?`~/${zn.relative(n,r).split(zn.sep).join("/")}`:r.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Ze(e){return Ej(e)}var bt=p(()=>{"use strict"});import{spawnSync as Aj}from"node:child_process";function Tj(e){return["/PID",String(e),"/T","/F"]}function Oj(e){return e.error?{method:"taskkill",outcome:"failed",detail:e.error.message}:e.status===0?{method:"taskkill",outcome:"signalled"}:e.status===Ij||/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 Nj(e){let t=Aj("taskkill",e,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","pipe"],timeout:Pj});return{status:t.status,stderr:t.stderr??"",...t.error?{error:t.error}:{}}}function Dj(e){return Number.isInteger(e)&&e>0}function he(e,t="SIGTERM",r={}){if(!Dj(e))return{method:"none",outcome:"not_found"};if((r.platform??process.platform)==="win32"){let s=r.runTaskkill??Nj;return Oj(s(Tj(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 we(e=process.platform){return e!=="win32"}function ct(e,t="SIGTERM",r={}){if((r.platform??process.platform)==="win32"&&e.pid){he(e.pid,t,r);return}try{e.kill(t)}catch{}}var Ij,Pj,os=p(()=>{"use strict";Ij=128,Pj=15e3});import{existsSync as Mj,mkdirSync as Lj,readFileSync as gS,readdirSync as $pe,renameSync as Bj,rmSync as Fj,statSync as hS,writeFileSync as Uj}from"node:fs";import{randomBytes as Wj}from"node:crypto";import $j from"node:path";function vt(e){console.error(e),process.exit(1)}function X(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function Lt(e,t){return e||vt(`missing ${t}`),e}function la(e){try{return JSON.parse(e)}catch{return null}}function K(e,t){try{return JSON.parse(gS(e,"utf8"))}catch(r){if(arguments.length>1)return t;vt(`failed to read ${e}: ${r.message}`)}}function Se(e,t){Lj($j.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.${Wj(4).toString("hex")}.tmp`;try{Uj(r,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`),Bj(r,e)}catch(n){try{Fj(r,{force:!0})}catch{}throw n}}function W(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Hc(e){return W(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Xn(e){return String(e).replace(/\/+$/,"")}function jc(e){try{return hS(e).size}catch{return 0}}function Vc(e){try{return hS(e).mtime.toISOString()}catch{return null}}function ss(e,t){return Mj(e)?gS(e,"utf8").split(`
|
|
3
3
|
`).slice(-t).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(t=>t.trim()).filter(Boolean)}function Z(e,t){try{let r=bS("git",t,X({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 kS(e,t,r){let n=Z(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 Gc(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 ss(n,"missing worktree path");let s=Z(e,["rev-parse","HEAD"]);if(s.status!==0)return ss(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=Z(e,["rev-parse",n]);if(m.status!==0)return ss(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.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=kS(e,i,a),c=kS(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 ss(e,t,r=null){return{checked:!1,base:e,head:r,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:t}}var xe=p(()=>{"use strict";bt();U();la()});import{existsSync as Qj,mkdirSync as RS}from"node:fs";import{homedir as mg}from"node:os";import is from"node:path";function SS(e=mg()){return is.join(e,".kynver",Zj)}function _S(e,t=mg()){return is.resolve(e)===is.resolve(SS(t))}function e1(e){Z(e,["config","--get","user.email"]).status!==0&&Z(e,["config","user.email","kynver@local"]),Z(e,["config","--get","user.name"]).status!==0&&Z(e,["config","user.name","Kynver"])}function wS(e){Z(e,["rev-parse","--verify","HEAD^{commit}"]).status!==0&&(e1(e),Z(e,["commit","--allow-empty","-m","kynver byoc workspace"]))}function xS(e=mg()){let t=SS(e);RS(is.dirname(t),{recursive:!0});let r=!1;Qj(t)||(RS(t,{recursive:!0}),r=!0);let n=Z(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return Z(t,["init","-b",Jc]).status!==0&&(Z(t,["init"]),Z(t,["symbolic-ref","HEAD",`refs/heads/${Jc}`])),wS(t),r=!0,{repo:is.resolve(t),created:r};let o=is.resolve(n.stdout.trim()||t);return wS(o),{repo:o,created:r}}var Zj,Jc,gg=p(()=>{"use strict";xe();Zj="workspace",Jc="main"});import{existsSync as yg,readFileSync as ES}from"node:fs";import{homedir as AS}from"node:os";import Rt from"node:path";import{fileURLToPath as t1}from"node:url";function n1(e){let t=Rt.join(e,"package.json");if(!yg(t))return null;try{let r=JSON.parse(ES(t,"utf8"));return typeof r.name=="string"?r.name.trim():null}catch{return null}}function IS(e){return n1(e)==="kynver"}function CS(e){let t=Rt.resolve(e);if(!yg(t))return null;let r=Z(t,["rev-parse","--show-toplevel"]);if(r.status!==0)return null;let n=r.stdout.trim();return n.length?Rt.resolve(n):null}function o1(e=import.meta.url){let t=Rt.dirname(t1(e));for(let r=0;r<8;r+=1){let n=Rt.join(t,"package.json");if(yg(n))try{if(JSON.parse(ES(n,"utf8")).name==="@kynver-app/runtime")return t}catch{}let o=Rt.dirname(t);if(o===t)break;t=o}return null}function hg(e,t,r,n,o){if(!r)return;let s=Rt.resolve(r);e.has(s)||(o?.requireMonorepo??!0)&&!IS(s)||(e.add(s),t.push({repo:s,source:n}))}function PS(e){let t=e?.cwd??process.cwd(),r=new Set,n=[];hg(r,n,CS(t),"cwd_git",{requireMonorepo:!1});let o=o1(e?.runtimeModuleUrl??import.meta.url);o&&hg(r,n,CS(o),"runtime_checkout");let s=AS();for(let a of r1)hg(r,n,Le(Rt.join(s,a)),"well_known_path");let i=Rt.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!IS(a.repo))return!0;let l=Rt.resolve(a.repo);return i===l||i.startsWith(`${l}${Rt.sep}`)})}function Yc(e){return PS(e)[0]??null}function s1(e){let t=Rt.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 qc(e){let t=PS(e),r=t.find(o=>!s1(o.repo));if(r)return r;if(t[0])return t[0];let{repo:n}=xS(e?.home??AS());return{repo:n,source:"byoc_workspace"}}var r1,ua=p(()=>{"use strict";xe();bt();gg();r1=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as NS,readFileSync as i1}from"node:fs";import Xn from"node:path";function l1(e){return e.includes("/")||e.includes("\\")}function c1(e){return(e.PATHEXT||a1).split(";").map(t=>t.trim().toLowerCase()).filter(t=>t.startsWith("."))}function u1(e){let t=Object.keys(e).find(r=>r.toUpperCase()==="PATH");return t?e[t]??"":""}function kg(e,t={}){let r=t.env??process.env,n=t.exists??NS,o=c1(r),s=Xn.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(l1(e)||Xn.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of u1(r).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(Xn.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function OS(e){return e.replace(/^[\\/]+/,"")}function p1(e){let t=e.split(/\r?\n/),r=new Map;for(let s of t){let i=d1.exec(s);i&&r.set(i[1].toUpperCase(),i[2])}let n=t.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=TS.exec(n);if(o)return OS(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=r.get(s[1].toUpperCase()),a=i?TS.exec(i):null;if(a)return OS(a[1])}return null}function f1(e,t={}){if((t.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=kg(e,t);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=Xn.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=t.readText??(f=>i1(f,"utf8")),i=t.exists??NS,a;try{a=s(n)}catch{throw new da(n)}let l=p1(a);if(!l)throw new da(n);let c=Xn.win32.dirname(n),u=Xn.win32.join(c,l);if(!i(u))throw new da(n);let d=Xn.win32.join(c,"node.exe");return{executable:i(d)?d:t.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function oe(e,t,r={}){let n=f1(e,r);return[n.executable,[...n.prefixArgs,...t]]}var da,a1,TS,d1,Te=p(()=>{"use strict";da=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},a1=".COM;.EXE;.BAT;.CMD";TS=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,d1=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var bg=p(()=>{"use strict";Te()});function pa(e){let t=zn(e);try{let r=new URL(t);return r.hostname.toLowerCase()===DS?(r.hostname=`www.${DS}`,zn(r.toString())):t}catch{return t}}function Er(e){if(e?.trim())return pa(zn(e.trim()))}async function Ce(e,t,r=fetch){let n=pa(e),o=new Headers(t?.headers),s=0;for(;s<=MS;){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 ${MS} redirects for ${e}`)}var DS,MS,wt=p(()=>{"use strict";U();DS="kynver.com";MS=10});function Qn(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 zc(e,t){return e[t]?.trim()||null}function LS(e){let t=e?.split(":")[0]?.trim();return t?Qn(t):null}function ut(e=process.env,t={}){let r=[],n=LS(t.boxId),o=LS(zc(e,"KYNVER_BOX_ID")),s=t.boxKind?.trim();if(s)return n&&n!==Qn(s)&&r.push(`config.boxId=${t.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:Qn(s),source:"config",slugInferenceBlocked:!1,warnings:r};let i=zc(e,"KYNVER_BOX_KIND");if(i)return o&&o!==Qn(i)&&r.push(`KYNVER_BOX_ID=${zc(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:Qn(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=zc(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 Bt(e={},t=process.env){return ut(t,e).boxKind}var He=p(()=>{"use strict"});function vg(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 fa(e,t){return e==="forge"&&t>4}var as=p(()=>{"use strict"});import{readFileSync as m1}from"node:fs";import BS from"node:os";function FS(e){if(e!==void 0){let t=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return t?Number(t[1])*1024:BS.freemem()}if(process.platform==="linux")try{let r=m1("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(r)return Number(r[1])*1024}catch{}return BS.freemem()}var US=p(()=>{"use strict"});import{existsSync as g1,readFileSync as h1,statfsSync as y1}from"node:fs";function Rg(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!g1(e))continue;let t=h1(e,"utf8");if(/microsoft|wsl/i.test(t))return!0}catch{}return!1}function WS(e={}){if(!(e.forceWsl===void 0?Rg():e.forceWsl))return null;let r=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ls,n=e.wslHostFreeWarnBytes??k1,o=e.wslHostFreeCriticalBytes??b1,s=e.statfs??y1,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,m=!u&&!d,f=(a/(1024*1024*1024)).toFixed(1),g=null;return m||(g=`Windows host disk ${r} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${v1()}`),{ok:m,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:g,probeError:null}}function v1(){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 k1,b1,ls,wg=p(()=>{"use strict";k1=25*1024*1024*1024,b1=12*1024*1024*1024,ls="/mnt/c"});import{execFileSync as $S}from"node:child_process";import{existsSync as Qc,readFileSync as KS,readdirSync as R1,statSync as w1}from"node:fs";import Sg from"node:path";function Xc(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function HS(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=$S("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()||ls;return t&&Qc(Sg.join(r,"Users",t))?t:null}function E1(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()||ls,n=e.windowsUser??HS();return n?`${r.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function A1(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 I1(){try{if(Qc("/proc/sys/kernel/core_pattern"))return KS("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return $S("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function P1(e){return!!(e&&/wsl-capture-crash/i.test(e))}function T1(e,t=ls){let r=Sg.join(t,"Users",e,".wslconfig");if(!Qc(r))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=KS(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 O1(e){if(!Qc(e))return[];let t=R1(e,{withFileTypes:!0}),r=[];for(let n of t){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Sg.join(e,n.name);try{let s=w1(o),i=A1(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 cs(e={}){if(!(e.forceWsl===void 0?Rg():e.forceWsl))return null;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ls,n=e.windowsUser??HS(),o=e.warnBelowBytes??Xc("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",S1),s=e.criticalBelowBytes??Xc("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",_1),i=e.warnCount??Xc("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",x1),a=e.criticalCount??Xc("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",C1),l=(e.readCorePattern??I1)(),c=P1(l),u=null;n&&(u=(e.readWslConfig??T1)(n,r));let d=u?.maxCrashDumpCount??null,m=d===-1,f=E1({hostMount:r,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!f)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:m,reason:null,probeError:"windows_user_unresolved"};let g;try{g=(e.listDumps??O1)(f)}catch(N){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${f}: ${N.message}`,probeError:N.message}}let h=g.reduce((N,x)=>N+x.bytes,0),y=g.length,v=[...new Set(g.map(N=>N.executableHint).filter(N=>!!N))],k=h>=s,b=h>=o,S=y>=a,w=y>=i,R=!(k||S||b||w),P=null;if(!R){let N=k||S?"critical":"warning",x=(h/1024**3).toFixed(1),O=v.length>0?v.join(", "):"unknown";P=`WSL crash dumps ${N}: ${y} file(s), ${x} GiB at ${f} (executables: ${O}). `+N1({wslCaptureEnabled:c,dumpsDisabledInWslConfig:m})}return{ok:R,path:f,windowsUser:n,dumpCount:y,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:g,executables:v,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:P,probeError:null}}function N1(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 S1,_1,x1,C1,Zc=p(()=>{"use strict";wg();S1=5*1024*1024*1024,_1=10*1024*1024*1024,x1=2,C1=4});import{statfsSync as D1}from"node:fs";function ln(e={}){let t=e.diskPath?.trim()||"/",r=e.diskFreeWarnBytes??M1,n=e.diskFreeCriticalBytes??L1,o=e.diskMaxUsedPercent??B1,s=e.diskHardMaxUsedPercent??F1,i=D1(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,m=a<r*2,f=m&&c>o,g=m&&c>s,h=!u&&!d&&!f&&!g,y=e.skipWslHostCheck?null:WS(e.wslHost),v=e.skipWslCrashDumpCheck?null:cs(e.wslCrashDumps),k=h&&(y?y.ok:!0)&&(v?v.ok:!0),b=null;return k||(b=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${r} bytes`:null,g?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,y&&!y.ok?y.reason:null,v&&!v.ok?v.reason:null].filter(Boolean).join("; ")),U1({ok:k,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:r,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:b,wslHost:y,wslCrashDumps:v?{ok:v.ok,path:v.path,dumpCount:v.dumpCount,totalBytes:v.totalBytes,executables:v.executables,wslCaptureEnabled:v.wslCaptureEnabled,dumpsDisabledInWslConfig:v.dumpsDisabledInWslConfig,reason:v.reason,probeError:v.probeError}:null})}function U1(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 M1,L1,B1,F1,ma=p(()=>{"use strict";Zc();wg();M1=30*1024*1024*1024,L1=15*1024*1024*1024,B1=80,F1=90});import{existsSync as W1,readdirSync as $1}from"node:fs";import K1 from"node:path";function Ft(e){let t=new Set;for(let n of Object.keys(e.workers||{}))t.add(W(n));let r=K1.join(G(e.id),"workers");if(!W1(r))return[...t];for(let n of $1(r,{withFileTypes:!0}))n.isDirectory()&&t.add(W(n.name));return[...t]}var us=p(()=>{"use strict";Q();U()});function _g(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 jS(e){let t=e.trim();if(!t)return null;let r=_g(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let l=_g(s[1]??"");l&&n.push(l)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let l=_g(t.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function VS(e){let t=e.finalResult??e.final_result;if(t!=null)return typeof t=="string"?jS(t)??(t.trim()||null):t;let r=typeof e.summary=="string"?e.summary.trim():"";if(!r)return null;let n=jS(r);return n||r}var GS=p(()=>{"use strict"});import{existsSync as H1,readFileSync as j1}from"node:fs";function JS(e){return e==="complete"}function Ir(e){return JS(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Be(e){let t={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!H1(e))return t;let r=Date.now()+V1,n=new Date(r).toISOString(),o=j1(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
4
|
+
`):""}function Gc(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Jc(e){return new Promise(t=>setTimeout(t,e))}function ne(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function yS(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 dg(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var U=p(()=>{"use strict";os()});function Gj(e){let t=e[mg];return t?new Set(t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean)):new Set}function Jj(e,t={}){return Kj.has(e)?!0:jj.has(e)||t.operatorAllow?.has(e)||Vj.some(r=>e.endsWith(r))?!1:Hj.some(r=>e.endsWith(r))}function ca(e){let t=Gj(e),r={...e};for(let n of Object.keys(r))Jj(n,{operatorAllow:t})&&delete r[n];return r}var pg,Kj,Hj,fg,jj,Vj,mg,ua=p(()=>{"use strict";pg=["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"],Kj=new Set(pg),Hj=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],fg=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],jj=new Set(fg),Vj=["_PUBLIC_KEY"],mg="KYNVER_WORKER_ENV_ALLOW"});import{existsSync as Yj,statSync as qj}from"node:fs";import{spawnSync as bS}from"node:child_process";function pe(e,t,r={}){let n=bS("git",t,X({cwd:e,encoding:"utf8"}));if(n.status!==0&&!r.allowFailure){let o=zj(e,t,n);if(r.throwError)throw new Error(o);vt(o)}return n.stdout||""}function zj(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 Xj(e){let t=e.trim();if(!t)return"git repo path is empty";let r=Le(t);if(!Yj(r))return r===t?`git repo path does not exist: ${r}`:`git repo path does not exist: ${r} (from ${t})`;try{if(!qj(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 vS(e){let t=Xj(e);t&&vt(t),pe(Le(e.trim()),["rev-parse","--show-toplevel"])}function da(e){return pe(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(t=>t.trim()).filter(Boolean)}function Z(e,t){try{let r=bS("git",t,X({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 kS(e,t,r){let n=Z(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 Yc(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 is(n,"missing worktree path");let s=Z(e,["rev-parse","HEAD"]);if(s.status!==0)return is(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=Z(e,["rev-parse",n]);if(m.status!==0)return is(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.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=kS(e,i,a),c=kS(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 is(e,t,r=null){return{checked:!1,base:e,head:r,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:t}}var xe=p(()=>{"use strict";bt();U();ua()});import{existsSync as Qj,mkdirSync as RS}from"node:fs";import{homedir as gg}from"node:os";import as from"node:path";function SS(e=gg()){return as.join(e,".kynver",Zj)}function _S(e,t=gg()){return as.resolve(e)===as.resolve(SS(t))}function e1(e){Z(e,["config","--get","user.email"]).status!==0&&Z(e,["config","user.email","kynver@local"]),Z(e,["config","--get","user.name"]).status!==0&&Z(e,["config","user.name","Kynver"])}function wS(e){Z(e,["rev-parse","--verify","HEAD^{commit}"]).status!==0&&(e1(e),Z(e,["commit","--allow-empty","-m","kynver byoc workspace"]))}function xS(e=gg()){let t=SS(e);RS(as.dirname(t),{recursive:!0});let r=!1;Qj(t)||(RS(t,{recursive:!0}),r=!0);let n=Z(t,["rev-parse","--show-toplevel"]);if(n.status!==0)return Z(t,["init","-b",qc]).status!==0&&(Z(t,["init"]),Z(t,["symbolic-ref","HEAD",`refs/heads/${qc}`])),wS(t),r=!0,{repo:as.resolve(t),created:r};let o=as.resolve(n.stdout.trim()||t);return wS(o),{repo:o,created:r}}var Zj,qc,hg=p(()=>{"use strict";xe();Zj="workspace",qc="main"});import{existsSync as kg,readFileSync as ES}from"node:fs";import{homedir as AS}from"node:os";import Rt from"node:path";import{fileURLToPath as t1}from"node:url";function n1(e){let t=Rt.join(e,"package.json");if(!kg(t))return null;try{let r=JSON.parse(ES(t,"utf8"));return typeof r.name=="string"?r.name.trim():null}catch{return null}}function IS(e){return n1(e)==="kynver"}function CS(e){let t=Rt.resolve(e);if(!kg(t))return null;let r=Z(t,["rev-parse","--show-toplevel"]);if(r.status!==0)return null;let n=r.stdout.trim();return n.length?Rt.resolve(n):null}function o1(e=import.meta.url){let t=Rt.dirname(t1(e));for(let r=0;r<8;r+=1){let n=Rt.join(t,"package.json");if(kg(n))try{if(JSON.parse(ES(n,"utf8")).name==="@kynver-app/runtime")return t}catch{}let o=Rt.dirname(t);if(o===t)break;t=o}return null}function yg(e,t,r,n,o){if(!r)return;let s=Rt.resolve(r);e.has(s)||(o?.requireMonorepo??!0)&&!IS(s)||(e.add(s),t.push({repo:s,source:n}))}function PS(e){let t=e?.cwd??process.cwd(),r=new Set,n=[];yg(r,n,CS(t),"cwd_git",{requireMonorepo:!1});let o=o1(e?.runtimeModuleUrl??import.meta.url);o&&yg(r,n,CS(o),"runtime_checkout");let s=AS();for(let a of r1)yg(r,n,Le(Rt.join(s,a)),"well_known_path");let i=Rt.resolve(e?.cwd??process.cwd());return n.filter(a=>{if(a.source!=="runtime_checkout"||!IS(a.repo))return!0;let l=Rt.resolve(a.repo);return i===l||i.startsWith(`${l}${Rt.sep}`)})}function zc(e){return PS(e)[0]??null}function s1(e){let t=Rt.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 Xc(e){let t=PS(e),r=t.find(o=>!s1(o.repo));if(r)return r;if(t[0])return t[0];let{repo:n}=xS(e?.home??AS());return{repo:n,source:"byoc_workspace"}}var r1,pa=p(()=>{"use strict";xe();bt();hg();r1=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});import{existsSync as NS,readFileSync as i1}from"node:fs";import Qn from"node:path";function l1(e){return e.includes("/")||e.includes("\\")}function c1(e){return(e.PATHEXT||a1).split(";").map(t=>t.trim().toLowerCase()).filter(t=>t.startsWith("."))}function u1(e){let t=Object.keys(e).find(r=>r.toUpperCase()==="PATH");return t?e[t]??"":""}function bg(e,t={}){let r=t.env??process.env,n=t.exists??NS,o=c1(r),s=Qn.win32.extname(e)!=="",i=a=>s?[a]:o.map(l=>`${a}${l}`);if(l1(e)||Qn.win32.isAbsolute(e))return i(e).find(a=>n(a))??null;for(let a of u1(r).split(";").map(l=>l.trim()).filter(Boolean)){let l=i(Qn.win32.join(a,e)).find(c=>n(c));if(l)return l}return null}function OS(e){return e.replace(/^[\\/]+/,"")}function p1(e){let t=e.split(/\r?\n/),r=new Map;for(let s of t){let i=d1.exec(s);i&&r.set(i[1].toUpperCase(),i[2])}let n=t.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=TS.exec(n);if(o)return OS(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=r.get(s[1].toUpperCase()),a=i?TS.exec(i):null;if(a)return OS(a[1])}return null}function f1(e,t={}){if((t.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=bg(e,t);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=Qn.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=t.readText??(f=>i1(f,"utf8")),i=t.exists??NS,a;try{a=s(n)}catch{throw new fa(n)}let l=p1(a);if(!l)throw new fa(n);let c=Qn.win32.dirname(n),u=Qn.win32.join(c,l);if(!i(u))throw new fa(n);let d=Qn.win32.join(c,"node.exe");return{executable:i(d)?d:t.nodeExecutable??process.execPath,prefixArgs:[u],kind:"node-shim"}}function oe(e,t,r={}){let n=f1(e,r);return[n.executable,[...n.prefixArgs,...t]]}var fa,a1,TS,d1,Te=p(()=>{"use strict";fa=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},a1=".COM;.EXE;.BAT;.CMD";TS=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,d1=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i});var vg=p(()=>{"use strict";Te()});function ma(e){let t=Xn(e);try{let r=new URL(t);return r.hostname.toLowerCase()===DS?(r.hostname=`www.${DS}`,Xn(r.toString())):t}catch{return t}}function Ar(e){if(e?.trim())return ma(Xn(e.trim()))}async function Ce(e,t,r=fetch){let n=ma(e),o=new Headers(t?.headers),s=0;for(;s<=MS;){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 ${MS} redirects for ${e}`)}var DS,MS,wt=p(()=>{"use strict";U();DS="kynver.com";MS=10});function Zn(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 Qc(e,t){return e[t]?.trim()||null}function LS(e){let t=e?.split(":")[0]?.trim();return t?Zn(t):null}function ut(e=process.env,t={}){let r=[],n=LS(t.boxId),o=LS(Qc(e,"KYNVER_BOX_ID")),s=t.boxKind?.trim();if(s)return n&&n!==Zn(s)&&r.push(`config.boxId=${t.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:Zn(s),source:"config",slugInferenceBlocked:!1,warnings:r};let i=Qc(e,"KYNVER_BOX_KIND");if(i)return o&&o!==Zn(i)&&r.push(`KYNVER_BOX_ID=${Qc(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:Zn(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=Qc(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 Bt(e={},t=process.env){return ut(t,e).boxKind}var He=p(()=>{"use strict"});function Rg(e,t){return e==="forge"?4:Math.max(1,t)}function Ir(e,t){return e==="forge"?Math.min(Math.max(1,t),4):Math.max(1,t)}function ga(e,t){return e==="forge"&&t>4}var ls=p(()=>{"use strict"});import{readFileSync as m1}from"node:fs";import BS from"node:os";function FS(e){if(e!==void 0){let t=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return t?Number(t[1])*1024:BS.freemem()}if(process.platform==="linux")try{let r=m1("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(r)return Number(r[1])*1024}catch{}return BS.freemem()}var US=p(()=>{"use strict"});import{existsSync as g1,readFileSync as h1,statfsSync as y1}from"node:fs";function wg(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!g1(e))continue;let t=h1(e,"utf8");if(/microsoft|wsl/i.test(t))return!0}catch{}return!1}function WS(e={}){if(!(e.forceWsl===void 0?wg():e.forceWsl))return null;let r=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||cs,n=e.wslHostFreeWarnBytes??k1,o=e.wslHostFreeCriticalBytes??b1,s=e.statfs??y1,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,m=!u&&!d,f=(a/(1024*1024*1024)).toFixed(1),g=null;return m||(g=`Windows host disk ${r} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${v1()}`),{ok:m,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:g,probeError:null}}function v1(){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 k1,b1,cs,Sg=p(()=>{"use strict";k1=25*1024*1024*1024,b1=12*1024*1024*1024,cs="/mnt/c"});import{execFileSync as $S}from"node:child_process";import{existsSync as eu,readFileSync as KS,readdirSync as R1,statSync as w1}from"node:fs";import _g from"node:path";function Zc(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function HS(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=$S("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()||cs;return t&&eu(_g.join(r,"Users",t))?t:null}function E1(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()||cs,n=e.windowsUser??HS();return n?`${r.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function A1(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 I1(){try{if(eu("/proc/sys/kernel/core_pattern"))return KS("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return $S("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function P1(e){return!!(e&&/wsl-capture-crash/i.test(e))}function T1(e,t=cs){let r=_g.join(t,"Users",e,".wslconfig");if(!eu(r))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=KS(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 O1(e){if(!eu(e))return[];let t=R1(e,{withFileTypes:!0}),r=[];for(let n of t){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=_g.join(e,n.name);try{let s=w1(o),i=A1(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 us(e={}){if(!(e.forceWsl===void 0?wg():e.forceWsl))return null;let r=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||cs,n=e.windowsUser??HS(),o=e.warnBelowBytes??Zc("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",S1),s=e.criticalBelowBytes??Zc("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",_1),i=e.warnCount??Zc("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",x1),a=e.criticalCount??Zc("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",C1),l=(e.readCorePattern??I1)(),c=P1(l),u=null;n&&(u=(e.readWslConfig??T1)(n,r));let d=u?.maxCrashDumpCount??null,m=d===-1,f=E1({hostMount:r,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!f)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:m,reason:null,probeError:"windows_user_unresolved"};let g;try{g=(e.listDumps??O1)(f)}catch(N){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${f}: ${N.message}`,probeError:N.message}}let h=g.reduce((N,x)=>N+x.bytes,0),y=g.length,v=[...new Set(g.map(N=>N.executableHint).filter(N=>!!N))],k=h>=s,b=h>=o,S=y>=a,w=y>=i,R=!(k||S||b||w),P=null;if(!R){let N=k||S?"critical":"warning",x=(h/1024**3).toFixed(1),O=v.length>0?v.join(", "):"unknown";P=`WSL crash dumps ${N}: ${y} file(s), ${x} GiB at ${f} (executables: ${O}). `+N1({wslCaptureEnabled:c,dumpsDisabledInWslConfig:m})}return{ok:R,path:f,windowsUser:n,dumpCount:y,totalBytes:h,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:g,executables:v,corePattern:l,wslCaptureEnabled:c,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:P,probeError:null}}function N1(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 S1,_1,x1,C1,tu=p(()=>{"use strict";Sg();S1=5*1024*1024*1024,_1=10*1024*1024*1024,x1=2,C1=4});import{statfsSync as D1}from"node:fs";function cn(e={}){let t=e.diskPath?.trim()||"/",r=e.diskFreeWarnBytes??M1,n=e.diskFreeCriticalBytes??L1,o=e.diskMaxUsedPercent??B1,s=e.diskHardMaxUsedPercent??F1,i=D1(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,m=a<r*2,f=m&&c>o,g=m&&c>s,h=!u&&!d&&!f&&!g,y=e.skipWslHostCheck?null:WS(e.wslHost),v=e.skipWslCrashDumpCheck?null:us(e.wslCrashDumps),k=h&&(y?y.ok:!0)&&(v?v.ok:!0),b=null;return k||(b=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${r} bytes`:null,g?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,y&&!y.ok?y.reason:null,v&&!v.ok?v.reason:null].filter(Boolean).join("; ")),U1({ok:k,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:r,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:b,wslHost:y,wslCrashDumps:v?{ok:v.ok,path:v.path,dumpCount:v.dumpCount,totalBytes:v.totalBytes,executables:v.executables,wslCaptureEnabled:v.wslCaptureEnabled,dumpsDisabledInWslConfig:v.dumpsDisabledInWslConfig,reason:v.reason,probeError:v.probeError}:null})}function U1(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 M1,L1,B1,F1,ha=p(()=>{"use strict";tu();Sg();M1=30*1024*1024*1024,L1=15*1024*1024*1024,B1=80,F1=90});import{existsSync as W1,readdirSync as $1}from"node:fs";import K1 from"node:path";function Ft(e){let t=new Set;for(let n of Object.keys(e.workers||{}))t.add(W(n));let r=K1.join(G(e.id),"workers");if(!W1(r))return[...t];for(let n of $1(r,{withFileTypes:!0}))n.isDirectory()&&t.add(W(n.name));return[...t]}var ds=p(()=>{"use strict";Q();U()});function xg(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 jS(e){let t=e.trim();if(!t)return null;let r=xg(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let l=xg(s[1]??"");l&&n.push(l)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let l=xg(t.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function VS(e){let t=e.finalResult??e.final_result;if(t!=null)return typeof t=="string"?jS(t)??(t.trim()||null):t;let r=typeof e.summary=="string"?e.summary.trim():"";if(!r)return null;let n=jS(r);return n||r}var GS=p(()=>{"use strict"});import{existsSync as H1,readFileSync as j1}from"node:fs";function JS(e){return e==="complete"}function Pr(e){return JS(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Be(e){let t={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!H1(e))return t;let r=Date.now()+V1,n=new Date(r).toISOString(),o=j1(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=la(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)),JS(t.lastHeartbeatPhase)&&(t.terminalFinalResult=VS(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 V1,eo=p(()=>{"use strict";GS();U();V1=6e4});function qS(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ru(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 zS(e){let t=qS(e[0]);return!!(t&&G1.has(t))}function Y1(e){let t=e.trim();return t.includes("/")?t.split("/").pop()??t:t}function q1(e){if(!e||e.includes("*"))return null;let t=Y1(e);return!t||t.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(t)?t:null}function XS(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Cg(e){if(!e)return!1;let t=e.trim();return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")}function z1(e){if(!e.startsWith("--glob="))return e;let t=e.slice(7);return t.startsWith("!")&&!t.includes("/")&&!t.endsWith("/**")?`--glob=${t}/**`:e}function X1(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;YS.has(n)&&(r+=1);continue}t.push(n)}}return t}function Q1(e){let t=!1,r=e.map((o,s)=>{let i=z1(o),a=e[s-1];return a&&YS.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(t=!0),i}),n=X1(r);if(n.length===2){let[o,s]=n;if(Cg(s))return{argv:[r[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=q1(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 QS(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 nu(e){let t=e.trim();if(!t)return{command:t,wrapped:!1};let r=ru(t);if(!r.length)return{command:t,wrapped:!1};let n=qS(r[0]);if(!n||!J1.has(n))return{command:t,wrapped:!1};let o=QS(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 Z1(e,t){let r=e.trim(),n=ru(r),o=QS(n);if(o<0)return t;let s=n.slice(0,o).join(" "),i=t.includes("'")?`"${t.replace(/"/g,'\\"')}"`:`'${t}'`;return`${s} ${i}`}function eV(e){let t=e.trim(),r=nu(t),n=ru(r.command);if(!n.length||!zS(n))return{segment:t,changed:!1};let o=Q1(n);if(!o.changed)return{segment:t,changed:!1};let s=o.argv.join(" ");return r.wrapped?{segment:Z1(t,s),changed:!0}:{segment:s,changed:!0}}function Eg(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=eV(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(r),changed:!0}:{command:t,changed:!1}}function ZS(e){let t=nu(e).command,r=ru(t.trim());return r.length&&zS(r)?!0:/\b(rg|ripgrep)\b/i.test(t)}function e_(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 tV(e){let{pattern:t,target:r}=e_(e);return t?Cg(r)?{kind:"rg_exclude_syntax",pattern:t,target:r}:XS(r)?{kind:"bad_scope",pattern:t,target:r}:{kind:"not_repo_search",pattern:t,target:r}:{kind:"not_repo_search"}}function rV(e){let{pattern:t,target:r}=e_(e);if(!t)return null;if(Cg(r)){let n=`${r.trim()}/**`;return{command:`rg "${t}" -g '${n}' .`,changed:!0}}return r&&XS(r)?{command:`rg -g ${r} "${t}" .`,changed:!0}:null}function nV(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 oV(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 Ag(e){let t=e.meta?.trim()||(e.command?oV(e.command):null)||null;if(t){let r=tV(t),n=nV(r);if(n)return n;let o=rV(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=Eg(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 G1,J1,YS,t_=p(()=>{"use strict";G1=new Set(["rg","ripgrep","grep"]),J1=new Set(["bash","sh","dash","zsh"]),YS=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function ya(e,t=200){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function aV(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 ka(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function lV(e){let t=e.metadata;if(!ka(t))return null;let r=t.vulnerabilities;if(!ka(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 cV(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 uV(e,t){let r=e.error;if(ka(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?ya(o.split(`
|
|
7
7
|
`).find(Boolean)??o,160):"npm audit failed"}function dV(e){let t=`${e.stdout}
|
|
8
|
-
${e.stderr}`.trim(),r=aV(t);if(!r||!
|
|
9
|
-
`).filter(Boolean),n=null,o=a_();for(let s of r){let i=
|
|
8
|
+
${e.stderr}`.trim(),r=aV(t);if(!r||!ka(r)){let o=ya(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(ka(r.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${uV(r,e.stderr)}`};let n=lV(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:cV(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function pV(e){return sV.test(e)}function fV(e){let t=nu(e).command;return r_.test(e)||r_.test(t)||ZS(e)}function mV(e){let t=Ag({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&&iV.test(n)){let i=ya(n,160);return{kind:"command_failure",exitCode:1,summary:t??`ripgrep failed (exit 1): ${i}`}}let o=Eg(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=ya(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 n_(e){let t=e.stdout??"",r=e.stderr??"",n=e.interleavedOutput??"";if(pV(e.command)){let i=t.trim()||n.trim()||r.trim();return dV({exitCode:e.exitCode,stdout:i,stderr:r})}if(fV(e.command))return mV({command:e.command,exitCode:e.exitCode,stdout:t,stderr:r,interleaved:n});let o=Ag({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=ya(n||t||r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var sV,r_,iV,o_=p(()=>{"use strict";t_();sV=/\bnpm\s+audit\b/i,r_=/\b(rg|ripgrep)\b/i,iV=/\b(error|invalid|unknown|panic|not found)\b/i});function ba(e){return typeof e=="string"&&gV.test(e.trim())}function ou(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 gV,su=p(()=>{"use strict";gV=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function iu(e,t){if(!t.pinned)return yV[e.trim()]}function au(e){return e?["--fallback-model",e]:[]}function kV(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 Ig(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 kV(t,r)}var je,un,hV,yV,s_,i_,Tr=p(()=>{"use strict";je="claude-sonnet-5-5",un="claude-opus-5-5",hV="claude-haiku-4-5-20251001",yV={[je]:"claude-sonnet-4-6",[un]:"claude-opus-4-8"},s_=[je,un,"claude-sonnet-4-6","claude-opus-4-8","claude-opus-4-7",hV];i_=/isn't described by this version's model catalog|\bunrecognized_model\b|issue with the selected model/i});function Pg(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function bV(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 lu(e){if(e.event==="step_update"&&Pg(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"||!Pg(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=Pg(t.usage)?bV(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 Tg=p(()=>{"use strict"});function Og(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function a_(){return{assistantText:""}}function vV(e,t){if(!(t.role!=="assistant"||typeof t.content!="string")){if(t.delta===!0){e.assistantText+=t.content;return}e.assistantText=t.content}}function RV(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=(Og(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 wV(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function l_(e,t){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return vV(t,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!wV(e))return null;let r=Og(e.stats)?RV(e.stats):void 0;if(e.status==="error"){let o=Og(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 c_=p(()=>{"use strict"});import{existsSync as SV,readFileSync as _V}from"node:fs";function xV(e){let t=e.timestamp_ms;return e.timestamp||e.ts||(t?new Date(t).toISOString():void 0)}function CV(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 EV(e,t){e.finalResult=t.result||t.subtype||t.terminal_reason||"completed",ou(t)&&(e.providerTerminalError=!0,e.error=String(t.result||t.api_error_status||"stream result error"))}function ps(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function AV(e){let t=e.usage;return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function IV(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 PV(e,t){let r=AV(t);if(!r)return;let n=ps(r.input_tokens)??ps(r.inputTokens)??ps(r.prompt_tokens),o=ps(r.output_tokens)??ps(r.outputTokens)??ps(r.completion_tokens);if(n===void 0&&o===void 0)return;let s=IV(t)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function TV(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 OV(e,t){t.kind==="success"||t.kind==="search_no_matches"||(e.lastShellOutcome=t)}function to(e){let t={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!SV(e))return t;let r=_V(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=a_();for(let s of r){let i=la(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 m=i.item;if(m&&typeof m=="object"&&!Array.isArray(m)){let f=m;f.type==="agent_message"&&typeof f.text=="string"&&f.text.trim()&&(n=f.text)}}i.type==="turn.completed"&&n&&!t.providerTerminalError&&(t.finalResult=n,n=null);let a=xV(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 m=i.event.content_block;m?.type==="tool_use"&&(t.currentTool=String(m.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let m=i.message.content;if(Array.isArray(m)){let f=m.find(g=>g?.type==="tool_use");f&&(t.currentTool=String(f.name||t.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let m=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,f=CV(m);f&&(t.currentTool=f)}let l=TV(i);l&&OV(t,n_({command:l.command,exitCode:l.exitCode,stdout:l.stdout,stderr:l.stderr,interleavedOutput:l.interleaved}));let c=lu(i),u=c?null:l_(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"&&EV(t,i),i.type==="turn.failed"){n=null,t.finalResult=null,t.providerTerminalError=!0;let m=i.error;t.error=typeof m?.message=="string"?m.message:"provider turn failed"}PV(t,i)}return t}var va=p(()=>{"use strict";o_();U();su();Tr();Tg();c_()});import{accessSync as NV,constants as DV,existsSync as MV,readFileSync as LV}from"node:fs";import Ng from"node:path";function d_(e){return Ng.join(e,BV)}function FV(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 u_(e){try{return NV(e,DV.X_OK),!0}catch{return!1}}function UV(e,t=process.env){if(!e)return!1;if(e.includes("/"))return u_(e);for(let r of(t.PATH??"").split(Ng.delimiter))if(r&&u_(Ng.join(r,e)))return!0;return!1}function dt(e,t,r,n={}){let o=n.env??process.env;return!r||!FV(o,n.platform)?[e,t]:UV(e,o)?[n.nodeExecutable??process.execPath,["-e",WV,d_(r),e,...t]]:[e,t]}function $V(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function cu(e){if(!e)return null;let t=d_(e);if(!MV(t))return null;try{let r=JSON.parse(LV(t,"utf8")),n=r.oomEvidence;return{exitCode:$V(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 p_(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 BV,WV,Or=p(()=>{"use strict";BV="exit.json";WV=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);
|
|
@@ -72,25 +72,25 @@ child.on("error", (e) => {
|
|
|
72
72
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
73
73
|
});
|
|
74
74
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
75
|
-
`});import KV from"node:path";function Ng(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.handoffState;return typeof t=="string"&&jV.has(t)}function lu(e){return!!(e&&HV.test(e))}function g_(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Ng(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let t=e.error?.trim()??"",r=e.exit??null;if(r?.oomEvidence||lu(t))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":f_.test(t)||f_.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 h_(e){let t=[VV(e.stopClass)],r=p_(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 VV(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 y_(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,m_/2):m_/2;return Math.min(GV,n*2**e)}function k_(e,t,r){let n=0,o;try{o=ie(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(r&&s===r)continue;let i=K(KV.join(G(o.id),"workers",W(s),"worker.json"),void 0);if(!(!i||i.taskId!==t)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(au(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&lu(os(i.stderrPath,20))&&(n+=1)}}return n}function b_(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 HV,f_,jV,m_,GV,Dg=p(()=>{"use strict";Q();U();Tr();HV=/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,f_=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,jV=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);m_=2048,GV=8192});function v_(e,t=240){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function ba(e){let t=(e??"").trim();if(!t)return null;if(ya(t))return{blocked:!0,reason:`provider authentication failed: ${v_(t)}`};for(let r of JV)if(r.test.test(t))return{blocked:!0,reason:`${r.label}: ${v_(t)}`};return null}var JV,Mg=p(()=>{"use strict";nu();Pr();JV=[{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:i_,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 R_(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function YV(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 qV(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:R_(e.head)}function zV(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 ps(e){if(e.alive||YV(e.finalResult))return null;let t=(e.changedFiles??[]).filter(i=>i.trim()).length,r=R_(e.headCommit)??qV(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:zV(s,t,r)}}var cu=p(()=>{"use strict"});import{existsSync as XV,readFileSync as QV,statSync as __}from"node:fs";import uu from"node:path";function rG(e,t=process.env){let r=e?eG:ZV,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 nG(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Lg(e){try{return __(e).mtimeMs}catch{return-1}}function oG(e){let t=uu.join(e,".git");try{if(__(t).isDirectory())return t;let r=/^gitdir:\s*(.+)$/m.exec(QV(t,"utf8"));return r?uu.resolve(e,r[1].trim()):null}catch{return null}}function w_(e){let t=oG(e);return[Lg(e),t?Lg(uu.join(t,"HEAD")):-2,t?Lg(uu.join(t,"index")):-2].join(":")}function S_(e,t){return{changedFiles:ca(e),gitAncestry:Gc(e,{base:t.base,baseCommit:t.baseCommit})}}function sG(e,t){for(un.delete(e),un.set(e,t);un.size>tG;){let r=un.keys().next().value;if(r===void 0)break;un.delete(r)}}function x_(e,t,r){let n=nG(t);if(!e||!e.trim())return va.missingWorktree++,{changedFiles:[],gitAncestry:ss(n,"missing worktree path")};let o=`${e}\0${n}`;if(!XV(e))return un.delete(o),va.missingWorktree++,{changedFiles:[],gitAncestry:ss(n,`worktree no longer exists: ${e}`)};if(r.alive)return un.delete(o),va.liveProbes++,S_(e,t);let s=r.ttlMs??rG(!!t.baseCommit?.trim()),i=r.now??Date.now(),a=w_(e),l=un.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return va.hits++,l.probe;va.misses++;let c=S_(e,t);if(s>0){let u=.8+.4*(r.random??Math.random)();sG(o,{fingerprint:w_(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var ZV,eG,tG,un,va,C_=p(()=>{"use strict";xe();ZV=10*6e4,eG=60*6e4,tG=2048,un=new Map,va={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Ra(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function iG(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 aG(e){if(Ra(e.headCommit)||Ra(e.prUrl)||Ra(e.artifactBundlePath)||Ra(e.patchPath))return!0;let t=e.gitAncestry;return!!(t?.checked&&t.headIsAncestorOfBase===!1&&Ra(t.head))}function fs(e){return iG(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:aG(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 E_(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var du=p(()=>{"use strict"});function Bg(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 A_(e){let t=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(t)?t.length:0}function ms(e){let t=e.trim();if(!t)return null;let r=Bg(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let u=Bg(s[1]??"");u&&n.push(u)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let u=Bg(t.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=A_(l);for(let u of n){let d=A_(u);d>c&&(l=u,c=d)}return l}var pu=p(()=>{"use strict"});function I_(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 P_(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function lG(e){return new Set(e.map(t=>P_(I_(t)??t)).filter(Boolean))}function T_(e,t,r){let n=I_(e)??e;if(!n)return"unrelated";let o=P_(n);return lG(t).has(o)?"contract":r?(r.outcome==="skipped"||r.outcome==="blocked")&&r.reason?.trim()?"support":(r.outcome==="merged","unrelated"):"unrelated"}var O_=p(()=>{"use strict"});function gs(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function cG(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function to(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:gs(e)}function fu(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function N_(e){let t=null;if(typeof e=="string"){let o=ms(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=to(String(s.prUrl??s.pr_url??"")),a=gs(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:gs(s.mergeCommit??s.merge_commit),reason:gs(s.reason)})}return n}function D_(e,t){let r=[],n=to(gs(e.prUrl)??"");if(n&&r.push(n),t&&typeof t=="object"&&!Array.isArray(t)){let o=t,s=to(String(o.prUrl??o.pr_url??""));s&&r.push(s)}return[...new Set(r)]}function M_(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(!cG(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?to(gs(t.targetPrUrl)??"")??(t.targetPrUrls.length===1?to(t.targetPrUrls[0]):null):null;if(s){let d=D_(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=N_(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=N_(n),a=new Map(i.map(d=>[fu(d.prUrl),d])),l=new Set(t.targetPrUrls.map(d=>fu(to(d)??d)).filter(Boolean)),c=D_(r,n);if(t.landingOnly)for(let d of c){let m=a.get(fu(d)),f=T_(d,t.targetPrUrls,m);if(!(f==="contract"||f==="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 m=fu(to(d)??d),f=a.get(m);if(!f){u.push(m);continue}f.outcome!=="merged"&&!f.reason?.trim()&&u.push(m)}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 L_(e){if(e.blocked)return e.detail??e.reason}var B_=p(()=>{"use strict";pu();O_()});function dG(e){let t=Date.now();if(e.providerTerminalError||ru(e.finalResult)||e.finalResult&&e.error?.trim()||ya(e.error)||ya(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:ba(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!F_(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&fG(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=fs(o);if(s.blocked){let i=E_(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=M_({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=L_(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(pG(e))return{state:"done",reason:"empty abandoned worker record"};let o=ba(e.error);if(o)return{state:"blocked",reason:o.reason};let s=ps({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=lu(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>uG)return{state:"needs_attention",reason:`no first stream event ${ug(r)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&t-n>Fg?{state:"stale",reason:`no log/event/heartbeat activity for ${ug(n)}s`}:{state:"ok",reason:"recent activity"}}function F_(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function pG(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 fG(e){let t=null;if(typeof e=="string"?t=ms(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 U_(e,t,r){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:t||(n??Ir(r))}function W_(e){let t=eo(e.stdoutPath),r=Be(e.heartbeatPath);return U_(e,t.finalResult,r)}function ue(e,t={}){let r=eo(e.stdoutPath),n=Be(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=U_(e,r.finalResult,n),i=o?!1:ne(e.pid),a=Kc(e.stdoutPath),l=Kc(e.stderrPath),c=Kc(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=x_(e.worktreePath,{base:t.base,baseCommit:t.baseCommit},{alive:i}),m=yS([r.lastEventAt,n.lastHeartbeatAt,Hc(e.stdoutPath),Hc(e.stderrPath),Hc(e.heartbeatPath)]),f=i?null:au(e.workerDir),g=s&&!Ng(s)?s:null,h=r.error||!i&&!s&&os(e.stderrPath,10).trim()||void 0,y=h||!i&&s&&!g&&os(e.stderrPath,10).trim()||void 0,v=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=F_(v)?null:v,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,S=dG({alive:i,finalResult:s,firstEventAt:r.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:k,landingContract:b,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),w=k||S.state==="blocked"?"blocked":o||S.state==="done"?"done":s?"exited":i?"running":"exited",_=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,R=g_({alive:i,finalResult:s,error:y??null,stale:S.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:f}),P=_&&!i&&!g?_:R,N=P==="running"||P==="finished"?null:(_===P?e.stopReason:void 0)??h_({stopClass:P,exit:f,error:y??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:w,stopClass:P,stopReason:N,exit:f,attention:S,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:r.firstEventAt,lastEventAt:r.lastEventAt,lastActivityAt:m,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 Ve(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ug(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function mu(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 uG,Fg,Oe=p(()=>{"use strict";Zn();ka();Dg();Tr();nu();Mg();cu();C_();du();B_();pu();U();uG=18e4,Fg=6e5});import{readFileSync as mG}from"node:fs";function gG(e){if(!e||process.platform!=="linux")return null;try{return mG(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function $_(e){if(!e.pid||process.platform!=="linux")return!0;let t=gG(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 dn(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!ne(e.pid)||!$_(e)?!1:!W_(e)}var gu=p(()=>{"use strict";Oe();U()});import H_ from"node:os";import j_ from"node:path";function K_(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function hG(e=I(),t,r){let n=K_(e.perWorkerMemBytes,hu),o=K_(e.memReserveBytes,yu),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):ku)),i=ks({config:e,configuredMaxWorkersOverride:t,totalMemBytes:r??H_.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function V_(e,t={}){let r=t.perWorkerMemBytes??hu,n=t.memReserveBytes??yu,o=t.memUtilization??ku,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/r));return Math.min(i,bu)}function yG(){return FS()}function kG(e){let t=0;for(let r of Ft(e)){let n=K(j_.join(G(e.id),"workers",W(r),"worker.json"),void 0);!n||!dn(n)||t++}return t}function Wg(){let e=0;for(let t of Ee())e+=kG(t);return e}function hs(){let e=[];for(let t of Ee())for(let r of Ft(t)){let n=K(j_.join(G(t.id),"workers",W(r),"worker.json"),void 0);n&&dn(n)&&e.push({runId:t.id,workerName:r})}return e}function wa(e){let t=e.config??I(),r=e.totalMemBytes??H_.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=hG(t,e.configuredMaxWorkersOverride,r),c=Bt(t),u=e.freeMemBytes??yG(),d=e.activeWorkers??Wg(),m=Math.max(0,Math.floor(r*s)-o),f=Math.max(0,Math.floor(m/n)),g=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,y=Ar(c,i??h),v=Math.max(0,Math.min(y,f)),k=Math.max(0,v-d),S=Math.min(k,g),_=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:ln({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});_&&!_.ok&&(S=0);let R=null;return S<=0&&(_&&!_.ok?R=_.reason??"disk gate blocked worker admission":d>=v?R=`at worker limit (${d}/${v} running)`:g<=0?R="insufficient free memory \u2014 waiting for workers to finish":R="no worker slots available"),{ok:S>0,totalMemBytes:r,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:f,maxConcurrentWorkers:v,activeWorkers:d,slotsAvailable:S,reason:R,..._?{diskGate:_}:{}}}var hu,yu,ku,bu,ys=p(()=>{"use strict";US();$();He();as();Sa();ma();Q();us();gu();U();hu=500*1024*1024,yu=4*1024*1024*1024,ku=.85,bu=64});function _a(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function ks(e){let t=e.config??{},r=e.env??process.env,n=_a(t.perWorkerMemBytes,hu),o=_a(t.memReserveBytes,yu),s=Math.min(1,Math.max(.1,Number(t.memUtilization)>0?Number(t.memUtilization):ku)),i=V_(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:_a(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(t.maxConcurrentWorkers!==void 0&&t.maxConcurrentWorkers!==null){let c=_a(t.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,bu),autoCap:i,workerCapSource:"config"}}let l=(r.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||r.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&r.KYNVER_MAX_WORKERS&&_a(r.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,bu),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Sa=p(()=>{"use strict";ys()});import{existsSync as bG,mkdirSync as dge,readFileSync as vG,writeFileSync as pge}from"node:fs";import{homedir as RG}from"node:os";import wG from"node:path";function SG(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 vu(e=pn){return bG(e)?SG(vG(e,"utf8")):new Map}function G_(e=pn,t={}){let r=vu(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 pn,Or=p(()=>{"use strict";pn=wG.join(RG(),".kynver",".env")});var J_=p(()=>{"use strict"});var Y_=p(()=>{"use strict";J_()});var Ru=p(()=>{"use strict"});import{existsSync as _G,readFileSync as xG}from"node:fs";import{homedir as CG}from"node:os";import EG from"node:path";function Kg(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function $g(e){return typeof e=="string"&&e.trim()?e:null}function Hg(e){let t=Kg(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=$g(t.requestedAt);return o?{desiredState:r,policyVersion:n,requestedAt:o,requestedByLabel:$g(t.requestedByLabel),reason:$g(t.reason)}:null}function q_(e){let t=Kg(Kg(e)?.response);return!t||t.runtimeControl===void 0?null:Hg(t.runtimeControl)}function z_(e,t=CG()){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return EG.join(t,".kynver",`runtime-control-${r}.json`)}function jg(e,t,r){try{let n=fn(e,r);if(n&&n.policyVersion>t.policyVersion)return;Se(z_(e,r),{contractVersion:1,agentOsId:e,control:t,deliveredAt:new Date().toISOString()})}catch{}}function fn(e,t){try{let r=z_(e,t);if(!_G(r))return null;let n=JSON.parse(xG(r,"utf8"));return n.agentOsId!==e?null:Hg(n.control)}catch{return null}}function bs(e){return e?.desiredState??"running"}function AG(e){return e==="keeper"||e==="desktop"}function IG(e,t,r=!1){let n=bs(e);return n==="paused"?"paused":n==="stopped"?r&&t===0?"stopped":"stopping":"running"}function Su(e){return e.control?{policyVersion:e.control.policyVersion,state:IG(e.control,e.inFlightWorkers,e.exiting),supervised:AG(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function X_(e){let t=bs(e);return t==="paused"?"runtime_paused":t==="stopped"?"runtime_stopped":null}function Q_(e,t){return bs(e)==="stopped"&&t===0}function ex(e){Z_=e}function tx(){return Z_}var wu,Z_,mn=p(()=>{"use strict";U();wu=83;Z_=null});var xa,vs=p(()=>{"use strict";Y_();Ru();mn();xa="kynver-cron-daemon.service"});import{existsSync as PG,readFileSync as TG}from"node:fs";function Vg(){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(PG("/proc/version")){let e=TG("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var _u=p(()=>{"use strict"});var Gg=p(()=>{"use strict";_u()});var Ca=p(()=>{"use strict";Or();bt();$();vs();Gg()});import MG from"node:os";function Ea(e,t){let r=(t??MG.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${r}`}function nx(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function xu(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=nx(r.slice(n+1));return s?`${o}:${s}`:Ea(o)}return`${t}:${nx(r)}`}function Rs(e){let t=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return t?xu(t,e.boxKind):Ea(e.boxKind,e.hostLabel)}var ws=p(()=>{"use strict";He();He()});var ox=p(()=>{"use strict";Or();vs();Ca()});import{existsSync as Nr,mkdirSync as LG,readdirSync as Cu,renameSync as sx,statSync as BG}from"node:fs";import Dr from"node:path";function ax(e){try{return BG(e).isDirectory()}catch{return!1}}function FG(e){if(!Nr(e))return!0;for(let t of ix){let r=Dr.join(e,t);if(Nr(r)&&(!ax(r)||Cu(r).length>0))return!1}return!0}function UG(e){let t=Dr.join(e,"runs");if(!Nr(t)||!ax(t))return!1;for(let r of Cu(t,{withFileTypes:!0})){if(!r.isDirectory()||r.name==="runs")continue;let n=Dr.join(t,r.name,"run.json");if(K(n,void 0)?.id)return!0}return!1}function WG(e){let t=Dr.join(e,"runs");if(!Nr(t))return!1;for(let r of Cu(t,{withFileTypes:!0})){if(!r.isDirectory())continue;if(K(Dr.join(t,r.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function $G(e){let t=Dr.join(e,"ghost");return Nr(t)?!Nr(Dr.join(t,"runs")):WG(e)}function lx(e){return UG(e.sharedRoot)?FG(e.forgeRoot)?$G(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 cx(e,t){LG(t,{recursive:!0});for(let r of ix){let n=Dr.join(e,r),o=Dr.join(t,r);if(Nr(n)){if(Nr(o)&&Cu(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Nr(o)){sx(n,o);continue}sx(n,o)}}}var ix,ux=p(()=>{"use strict";U();ix=["runs","worktrees"]});import{existsSync as Je}from"node:fs";import{homedir as KG}from"node:os";import Fe from"node:path";function Jg(e=process.env){return e.HOME?.trim()||KG()}function Yg(e=process.env){return Fe.join(Jg(e),".kynver","harness")}function Eu(e){let t=Fe.resolve(Le(e.trim()));for(;HG.has(Fe.basename(t));)t=Fe.dirname(t);return t}function jG(e,t=process.env){return Fe.join(Yg(t),e)}function VG(e=process.env){let t=Yg(e);if(Je(Fe.join(t,"runs")))return!0;if(Je(t)&&!Je(Fe.join(t,"ghost"))&&!Je(Fe.join(t,"forge")))return Je(t);let r=Fe.join(Jg(e),dx);return Je(r)}function Au(e){let t=e.env??process.env,r=t.KYNVER_HARNESS_ROOT?.trim()||t.OPUS_HARNESS_ROOT?.trim();if(r)return{harnessRoot:Eu(r),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Eu(n),source:"config"};let o=jG(e.boxKind,t);if(Je(Fe.join(o,"runs"))||Je(o)&&!GG(o))return{harnessRoot:o,source:"box_scoped"};let i=Yg(t);if(e.boxKind==="forge"){let a=lx({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&&cx(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&VG(t)){if(Je(Fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Je(i)&&!Je(Fe.join(i,"ghost"))&&!Je(Fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=Fe.join(Jg(t),dx);if(Je(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function GG(e){if(!Je(e))return!0;for(let t of["runs","worktrees"]){let r=Fe.join(e,t);if(Je(r))return!1}return!0}var dx,HG,qg=p(()=>{"use strict";bt();ux();dx=Fe.join(".openclaw","harness");HG=new Set(["runs","worktrees"])});import px from"node:os";function Iu(e){return e?.trim()?e.trim():null}function JG(e,t){let r=t.trim().toLowerCase()||"host";return`${e}-${r}`.replace(/[^a-z0-9._-]+/g,"-")}function YG(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 rr(e=I(),t=process.env,r={}){let n=ut(t,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Iu(t.KYNVER_BOX_KIND)),a=r.strict===!0||YG(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=Iu(e.runnerId),c=Iu(t.KYNVER_RUNTIME_ID)??Iu(t.OPENCLAW_RUNTIME_ID),u=l??c??JG(n.boxKind,px.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 m=ks({config:e,env:t,totalMemBytes:px.totalmem()}),f=Ar(n.boxKind,m.configuredMaxWorkers??vg(n.boxKind,m.autoCap)),g=Au({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:f,workerCapSource:m.workerCapSource,harnessRoot:g.harnessRoot,harnessRootSource:g.source},errors:s,warnings:o}}var ro=p(()=>{"use strict";$();He();as();Sa();qg()});var zg=p(()=>{"use strict";ua();He();ws();$();Ca();ox();wt();Mt();ro()});function et(e){let t=e.trim().toLowerCase();return zG[t]??t}var gx,qG,zG,Aa=p(()=>{"use strict";gx=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],qG=gx.join("|"),zG={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","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{mkdirSync as yx}from"node:fs";import{homedir as kx}from"node:os";import Pu from"node:path";function Ss(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return bx.includes(t)?t:null}function no(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=Le(r.trim());if(t.includes(n)||t.push(n),t.length>=QG)break}return t}function Tu(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=Ss(s.access);return i?{access:i,folders:no(s.folders)}:null}function Ou(e){return XG.has(e)?"folder":"off"}function hx(e=kx()){let t=Pu.join(e,".kynver",vx);return yx(t,{recursive:!0}),t}function _s(e){let t=e.home??kx(),r=Ss(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:no(e.local?.chatWorkFolders)},o="local"):(n={access:Ou(e.engine),folders:[]},o="default");let{access:s}=n;if(s==="off")return{access:s,folders:[],workDir:hx(t),extraFolders:[],source:o};let i=n.folders;s==="folder"&&(i=i.slice(0,1)),i.length===0&&s!=="full"&&(i=[hx(t)]);for(let l of i)try{yx(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 Nu(e,t){if(e.access==="off")return!1;if(e.access==="full")return!0;let r=Pu.resolve(t);return e.folders.some(n=>{let o=Pu.relative(n,r);return o===""||!o.startsWith("..")&&!Pu.isAbsolute(o)})}var bx,XG,QG,vx,oo=p(()=>{"use strict";bt();bx=["off","folder","folders","full"],XG=new Set(["cursor","codex","antigravity"]),QG=16,vx="chat-workspace"});var Rx=p(()=>{"use strict";oo()});import{execFileSync as ZG}from"node:child_process";function Zg(e=process.env){let t=e[t2]?.trim().toLowerCase();return t==="file"?"file":t==="keychain"?"keychain":"auto"}function r2(e,t,r){if(!wx.test(e)||!wx.test(t))return null;let n=Buffer.from(r,"utf8").toString("hex");return`add-generic-password -U -s ${e} -a ${t} -l Kynver-${t} -X ${n}
|
|
76
|
-
`}function n2(e,t,r){let n={encoding:"utf8",timeout:r.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...r.input!==void 0?{input:r.input}:{}};return ZG(e,t,n)}function o2(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function
|
|
77
|
-
`,timeoutMs:
|
|
78
|
-
`,timeoutMs:
|
|
79
|
-
`,{mode:384})}function mx(e){return Ix(e)}function
|
|
80
|
-
`,{mode:384})}function Px(e,t,r,n={}){let o=Lr();if(gn().write(e,r)){let i={...o,...n};delete i[t],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Ia(i);return}Ia({...o,...n,[t]:r})}function Tx(e,t){let r=gn().read(e);return r||Lr()[t]}function Ox(){if(lt())return{backend:null,moved:[],stillInFile:[]};let e=gn(),t=Lr(),r=[],n=[],o=[[xs,"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={...Lr()};for(let i of r)delete s[i];s.store="keychain",s.keychainAccounts=Array.from(new Set([...s.keychainAccounts??[],...r.map(i=>i==="apiKey"?xs:Cs)])).sort(),Ia(s)}return{backend:e.backend,moved:r,stillInFile:n}}function lh(){return pS(f2)}function ke(){return lh().getApiKey()}function Ue(e){return lh().getRunnerToken(e)}function so(e,t){lh().persistRunnerToken(e,t)}function hn(e){let t=Me("KYNVER_CHAT_BOX_CREDENTIAL");if(t)return t;if(lt())return Mu?.agentOsId===e?Mu.credential:void 0;let r=Lr();if(!(r.chatBoxCredentialAgentOsId&&r.chatBoxCredentialAgentOsId!==e))return Tx(Cs,"chatBoxCredential")}function Fu(e,t){if(lt()){Mu={agentOsId:e,credential:t};return}Px(Cs,"chatBoxCredential",t,{chatBoxCredentialAgentOsId:e})}function Uu(){if(lt()){Mu=null;return}gn().remove(Cs);let e={...Lr()};delete e.chatBoxCredential,delete e.chatBoxCredentialAgentOsId,Ia(e)}function Nx(){let e=gn();return process.env.KYNVER_API_KEY?{backend:e.backend,apiKey:"env"}:e.read(xs)?{backend:e.backend,apiKey:"keychain"}:Lr().apiKey?{backend:e.backend,apiKey:"file"}:{backend:e.backend,apiKey:"none"}}function ge(e){let t=Pa(e);return t||Lx("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),t}function Ut(e){return Pa(e)}function Pa(e){let t=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||I().apiBaseUrl;return Er(t)}function m2(e,t){let r=e||Ue(t)||(t?void 0:Ue(I().agentOsId));if(r)return String(r);let n=Me("KYNVER_RUNTIME_SECRET")||Me("KYNVER_CRON_SECRET")||Me("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 Wu(e,t,r){let n=m2(e,t);if(n)return{ok:!0,secret:n};let o=ke(),s=Pa(r?.baseUrl);if(o&&t&&s)try{let i=await io(t,{baseUrl:s,apiKey:o});return so(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 Wu(e,t,r);if(n.ok)return n.secret;Lx(n.reason)}async function Dx(e,t){let r=ke(),n=Pa(t?.baseUrl);if(!r||!e||!n)return null;try{let o=await io(e,{baseUrl:n,apiKey:r});return so(e,o),o}catch{return null}}async function Mx(e,t,r){let n=ke(),o=Pa(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 io(t,{baseUrl:o,apiKey:n});return s&&s!==e?(so(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 io(e,t){let r=t?.apiKey||ke();if(!r)throw new Error("API key required \u2014 run `kynver login` first");let o=`${ge(t?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await Ce(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 Lx(e){console.error(e),process.exit(1)}var Lu,nh,oh,u2,d2,lye,cye,f2,Mu,$=p(()=>{"use strict";ua();bt();gg();bg();wt();He();as();Sa();ma();Ca();zg();Aa();ro();Rx();Mt();rh();Lu=sh.join(c2(),".kynver"),nh=sh.join(Lu,"config.json"),oh=sh.join(Lu,"credentials"),u2=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,d2=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);lye=500*1024*1024,cye=4*1024*1024*1024;f2={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Tx(xs,"apiKey")},getRunnerToken(e){let t=Lr();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){Px(xs,"apiKey",e)},persistRunnerToken(e,t){Ia({...Lr(),runnerToken:t,runnerTokenAgentOsId:e})}};Mu=null});import ch from"node:path";function We(e){return Eu(e)}function St(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return We(e);let t=I(),r=t.harnessRoot?.trim();if(r)return We(r);let n=rr(t,process.env);return n.identity?n.identity.harnessRoot:Au({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function pt(e){return ch.join(We(e),"runs")}function As(e){return ch.join(We(e),"worktrees")}function Bx(){let e=St();return{harnessRoot:e,runsDir:pt(e),worktreesDir:As(e)}}function Br(e,t){return ch.join(e,W(t))}var Wt=p(()=>{"use strict";$();qg();ro();U()});import{existsSync as $u,readdirSync as g2,statSync as h2}from"node:fs";import ao from"node:path";function be(){return Bx()}function ie(e){let{runsDir:t}=be(),r=ao.join(Br(t,W(e)),"run.json");return $u(r)||vt(`run '${e}' not found`),K(r)}function Ee(){let{runsDir:e}=be();return Fx(e)}function Ku(e){return Fx(pt(e))}function y2(e){try{return h2(e).isDirectory()}catch{return!1}}function Fx(e){if(!$u(e))return[];let t=[];for(let r of g2(e,{withFileTypes:!0})){if(r.name==="runs")continue;let n=ao.join(e,r.name);if(!y2(n))continue;let o=K(ao.join(n,"run.json"),void 0);o?.id&&t.push(o)}return t}function lo(e,t){let{runsDir:r}=be(),n=ao.join(Br(r,W(e)),"run.json"),o=ao.join(Br(r,W(e)),"workers",W(t),"worker.json");return $u(o)||($u(n)||vt(`run '${e}' not found`),vt(`worker '${t}' not found in run '${e}'`)),K(o)}function tt(e){let{runsDir:t}=be();Se(ao.join(Br(t,e.id),"run.json"),e)}function te(e,t){let{runsDir:r}=be();Se(ao.join(Br(r,e),"workers",t.name,"worker.json"),t)}function G(e){let{harnessRoot:t}=be();return Ta(t,e)}function Ta(e,t){return Br(pt(e),W(t))}var Q=p(()=>{"use strict";Wt();U()});import k2 from"node:path";function b2(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 Is(e){let t=ie(e),r=[];for(let n of Object.keys(t.workers||{})){let o=K(k2.join(G(t.id),"workers",W(n),"worker.json"),void 0);!o?.taskId||!dn(o)||r.push({runId:t.id,workerName:n,taskId:o.taskId,pid:o.pid,...b2(o)})}return r}var Hu=p(()=>{"use strict";Q();gu();U()});function uh(e){return typeof e=="object"&&e!==null&&e.type===ju}function Ux(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=>{uh(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 Wx(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return[];let n=t.collect??Is,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 ju,Vu=p(()=>{"use strict";Hu();ns();ju="kynver:daemon-stop"});import{createHash as v2}from"node:crypto";function ft(e){return JSON.stringify(dh(e))}function dh(e){if(Array.isArray(e))return e.map(dh);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=dh(e[r]);return t}return e}function $x(e){return`ib-${v2("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Oa(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 Gu(e){if(!e)return[];let t=[];for(let r of e.split(/[,\s]+/)){let n=Oa(r);n&&t.push(n)}return t}function Na(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 Ju(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 yn=p(()=>{"use strict"});import{createHash as R2,createPublicKey as w2,verify as S2}from"node:crypto";function C2(e){return`ca-${R2("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function co(e,t=process.env){let r=Gu(t.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(r.length>0)return r.find(o=>C2(o)===e)??null;let n=x2[e];return!n||e===Kx&&!Ju(t)?null:Oa(n)}function E2(e){return w2({key:Buffer.concat([_2,Buffer.from(e)]),format:"der",type:"spki"})}function A2(e,t){return!Array.isArray(e)||e.length!==t.length?!1:e.every((r,n)=>typeof r=="string"&&r===t[n])}function I2(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 Hx(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!I2(e))return{ok:!1,reason:"malformed command authorization proof"};if(e.payload.agentOsId!==t.agentOsId)return{ok:!1,reason:"agentOsId mismatch"};if(!A2(e.payload.argv,t.argv))return{ok:!1,reason:"argv mismatch"};if(e.payload.exp<=n)return{ok:!1,reason:"proof expired"};let o=co(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(ft(e.payload),"utf8");return S2(null,i,E2(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 _2,Kx,x2,Da=p(()=>{"use strict";yn();_2=Buffer.from("302a300506032b6570032100","hex"),Kx="ca-6297fb8e1773",x2={[Kx]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"}});function Yu(e){let t=typeof e.description=="string"?e.description:"",r=typeof e.executorRef=="string"?e.executorRef:"",o=[...t.matchAll(P2)].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(T2))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var P2,T2,ph=p(()=>{"use strict";P2=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,T2=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi});import{createPublicKey as O2,verify as N2}from"node:crypto";function fh(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 L2.test(i)&&i.length<=512?i:null}function jx(e){let t=e.task??{};return e.landPrDispatch===!0||t.executor==="land_pr"?"land_pr":t.executor==="verify_live"?"verify_live":Yu(t)==="read_only"?"read_only":"write"}function B2(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(",")!==[...M2].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)||!qu.includes(r.operationClass))}function Vx(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!B2(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+D2+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=co(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=O2({key:Buffer.concat([F2,Buffer.from(s)]),format:"der",type:"spki"});return N2(null,Buffer.from(ft(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 D2,qu,M2,L2,F2,Gx=p(()=>{"use strict";Da();yn();ph();D2=120,qu=["write","read_only","land_pr","verify_live"],M2=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"],L2=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;F2=Buffer.from("302a300506032b6570032100","hex")});import{spawnSync as U2}from"node:child_process";import{randomBytes as W2}from"node:crypto";function Jx(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!==$2)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"||!K2.test(t.agentOsId))return"invalid agentOsId";if(typeof t.repoIdentity!="string"||fh(`https://${t.repoIdentity}`)!==t.repoIdentity)return"invalid repoIdentity";let n=t.approvedOperationClasses;if(!Array.isArray(n)||n.length>qu.length)return"invalid approvedOperationClasses";let o=new Set;for(let s of n){if(typeof s!="string"||!qu.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 H2(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=jx(e.decision),a=Vx(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 qx(){return lt()}function zx(e){return Ma&&e.revision<Ma.revision?!1:(Ma=e,!0)}function hh(){return Ma}function Xx(e){Yx=e}function Qx(e){return gh.add(e),()=>gh.delete(e)}function Zx(e){return{v:1,repoIdentity:e,requestNonce:W2(16).toString("base64url")}}function zu(e){let t=U2("git",["-C",e,"remote","get-url","origin"],X({encoding:"utf8",timeout:1e4}));return t.status!==0||typeof t.stdout!="string"?null:fh(t.stdout.trim())}function eC(e){let t=H2({...e,policy:Ma,identity:Yx,consumed:j2});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 gh)try{o(n)}catch{}}return t}var $2,K2,mh,Ma,Yx,j2,gh,Xu=p(()=>{"use strict";Mt();Gx();U();$2=1,K2=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;mh=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}};Ma=null,Yx=null,j2=new mh,gh=new Set});import{createCipheriv as V2,createDecipheriv as G2,randomBytes as kh,scrypt as J2,timingSafeEqual as Y2}from"node:crypto";function rC(){return kh(bh)}function nC(e=q2){return{name:"scrypt",N:e.N,r:e.r,p:e.p,salt:kh(16).toString("base64")}}function Rh(e,t,r=z2){if(t.name!=="scrypt"||!Number.isInteger(t.N)||t.N<r||t.r<8||t.p<1)return Promise.reject(new $t("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 $t("the vault file's salt is invalid")):new Promise((o,s)=>{J2(e.normalize("NFKC"),n,bh,{N:t.N,r:t.r,p:t.p,maxmem:128*t.N*t.r*2},(i,a)=>i?s(i):o(a))})}function kn(e,t,r){if(e.length!==bh)throw new $t("bad key length");let n=kh(tC),o=V2("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 uo(e,t,r){try{let n=Buffer.from(t.n,"base64"),o=Buffer.from(t.c,"base64");if(n.length!==tC||o.length<yh)throw new $t;let s=G2("aes-256-gcm",e,n);return s.setAAD(Buffer.from(r,"utf8")),s.setAuthTag(o.subarray(o.length-yh)),Buffer.concat([s.update(o.subarray(0,o.length-yh)),s.final()])}catch(n){throw n instanceof $t?n:new $t}}function wh(e){for(let t of e)if(t.includes(`
|
|
75
|
+
`});import KV from"node:path";function Dg(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.handoffState;return typeof t=="string"&&jV.has(t)}function uu(e){return!!(e&&HV.test(e))}function g_(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Dg(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let t=e.error?.trim()??"",r=e.exit??null;if(r?.oomEvidence||uu(t))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":f_.test(t)||f_.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 h_(e){let t=[VV(e.stopClass)],r=p_(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 VV(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 y_(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,m_/2):m_/2;return Math.min(GV,n*2**e)}function k_(e,t,r){let n=0,o;try{o=ie(e)}catch{return 0}for(let s of Object.keys(o.workers||{})){if(r&&s===r)continue;let i=K(KV.join(G(o.id),"workers",W(s),"worker.json"),void 0);if(!(!i||i.taskId!==t)){if(i.stopClass==="oom"||i.oomEvidence){n+=1;continue}if(cu(i.workerDir)?.oomEvidence){n+=1;continue}!i.stopClass&&i.stderrPath&&uu(ss(i.stderrPath,20))&&(n+=1)}}return n}function b_(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 HV,f_,jV,m_,GV,Mg=p(()=>{"use strict";Q();U();Or();HV=/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,f_=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,jV=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"]);m_=2048,GV=8192});function v_(e,t=240){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}\u2026`:r}function Ra(e){let t=(e??"").trim();if(!t)return null;if(ba(t))return{blocked:!0,reason:`provider authentication failed: ${v_(t)}`};for(let r of JV)if(r.test.test(t))return{blocked:!0,reason:`${r.label}: ${v_(t)}`};return null}var JV,Lg=p(()=>{"use strict";su();Tr();JV=[{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:i_,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 R_(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function YV(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 qV(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:R_(e.head)}function zV(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 fs(e){if(e.alive||YV(e.finalResult))return null;let t=(e.changedFiles??[]).filter(i=>i.trim()).length,r=R_(e.headCommit)??qV(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:zV(s,t,r)}}var du=p(()=>{"use strict"});import{existsSync as XV,readFileSync as QV,statSync as __}from"node:fs";import pu from"node:path";function rG(e,t=process.env){let r=e?eG:ZV,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 nG(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Bg(e){try{return __(e).mtimeMs}catch{return-1}}function oG(e){let t=pu.join(e,".git");try{if(__(t).isDirectory())return t;let r=/^gitdir:\s*(.+)$/m.exec(QV(t,"utf8"));return r?pu.resolve(e,r[1].trim()):null}catch{return null}}function w_(e){let t=oG(e);return[Bg(e),t?Bg(pu.join(t,"HEAD")):-2,t?Bg(pu.join(t,"index")):-2].join(":")}function S_(e,t){return{changedFiles:da(e),gitAncestry:Yc(e,{base:t.base,baseCommit:t.baseCommit})}}function sG(e,t){for(dn.delete(e),dn.set(e,t);dn.size>tG;){let r=dn.keys().next().value;if(r===void 0)break;dn.delete(r)}}function x_(e,t,r){let n=nG(t);if(!e||!e.trim())return wa.missingWorktree++,{changedFiles:[],gitAncestry:is(n,"missing worktree path")};let o=`${e}\0${n}`;if(!XV(e))return dn.delete(o),wa.missingWorktree++,{changedFiles:[],gitAncestry:is(n,`worktree no longer exists: ${e}`)};if(r.alive)return dn.delete(o),wa.liveProbes++,S_(e,t);let s=r.ttlMs??rG(!!t.baseCommit?.trim()),i=r.now??Date.now(),a=w_(e),l=dn.get(o);if(s>0&&l&&l.fingerprint===a&&i<l.expiresAt)return wa.hits++,l.probe;wa.misses++;let c=S_(e,t);if(s>0){let u=.8+.4*(r.random??Math.random)();sG(o,{fingerprint:w_(e),expiresAt:i+Math.round(s*u),probe:c})}return c}var ZV,eG,tG,dn,wa,C_=p(()=>{"use strict";xe();ZV=10*6e4,eG=60*6e4,tG=2048,dn=new Map,wa={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Sa(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function iG(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 aG(e){if(Sa(e.headCommit)||Sa(e.prUrl)||Sa(e.artifactBundlePath)||Sa(e.patchPath))return!0;let t=e.gitAncestry;return!!(t?.checked&&t.headIsAncestorOfBase===!1&&Sa(t.head))}function ms(e){return iG(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:aG(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 E_(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var fu=p(()=>{"use strict"});function Fg(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 A_(e){let t=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(t)?t.length:0}function gs(e){let t=e.trim();if(!t)return null;let r=Fg(t);if(r)return r;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(t))!==null;){let u=Fg(s[1]??"");u&&n.push(u)}let i=t.indexOf("{"),a=t.lastIndexOf("}");if(i>=0&&a>i){let u=Fg(t.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=A_(l);for(let u of n){let d=A_(u);d>c&&(l=u,c=d)}return l}var mu=p(()=>{"use strict"});function I_(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 P_(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function lG(e){return new Set(e.map(t=>P_(I_(t)??t)).filter(Boolean))}function T_(e,t,r){let n=I_(e)??e;if(!n)return"unrelated";let o=P_(n);return lG(t).has(o)?"contract":r?(r.outcome==="skipped"||r.outcome==="blocked")&&r.reason?.trim()?"support":(r.outcome==="merged","unrelated"):"unrelated"}var O_=p(()=>{"use strict"});function hs(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function cG(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ro(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:hs(e)}function gu(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`${t[1].toLowerCase()}/pull/${t[2]}`:e.trim().toLowerCase()}function N_(e){let t=null;if(typeof e=="string"){let o=gs(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=ro(String(s.prUrl??s.pr_url??"")),a=hs(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:hs(s.mergeCommit??s.merge_commit),reason:hs(s.reason)})}return n}function D_(e,t){let r=[],n=ro(hs(e.prUrl)??"");if(n&&r.push(n),t&&typeof t=="object"&&!Array.isArray(t)){let o=t,s=ro(String(o.prUrl??o.pr_url??""));s&&r.push(s)}return[...new Set(r)]}function M_(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(!cG(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?ro(hs(t.targetPrUrl)??"")??(t.targetPrUrls.length===1?ro(t.targetPrUrls[0]):null):null;if(s){let d=D_(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=N_(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=N_(n),a=new Map(i.map(d=>[gu(d.prUrl),d])),l=new Set(t.targetPrUrls.map(d=>gu(ro(d)??d)).filter(Boolean)),c=D_(r,n);if(t.landingOnly)for(let d of c){let m=a.get(gu(d)),f=T_(d,t.targetPrUrls,m);if(!(f==="contract"||f==="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 m=gu(ro(d)??d),f=a.get(m);if(!f){u.push(m);continue}f.outcome!=="merged"&&!f.reason?.trim()&&u.push(m)}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 L_(e){if(e.blocked)return e.detail??e.reason}var B_=p(()=>{"use strict";mu();O_()});function dG(e){let t=Date.now();if(e.providerTerminalError||ou(e.finalResult)||e.finalResult&&e.error?.trim()||ba(e.error)||ba(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Ra(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!F_(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&fG(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=ms(o);if(s.blocked){let i=E_(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=M_({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=L_(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(pG(e))return{state:"done",reason:"empty abandoned worker record"};let o=Ra(e.error);if(o)return{state:"blocked",reason:o.reason};let s=fs({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=uu(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>uG)return{state:"needs_attention",reason:`no first stream event ${dg(r)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&t-n>Ug?{state:"stale",reason:`no log/event/heartbeat activity for ${dg(n)}s`}:{state:"ok",reason:"recent activity"}}function F_(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function pG(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 fG(e){let t=null;if(typeof e=="string"?t=gs(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 U_(e,t,r){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:t||(n??Pr(r))}function W_(e){let t=to(e.stdoutPath),r=Be(e.heartbeatPath);return U_(e,t.finalResult,r)}function ue(e,t={}){let r=to(e.stdoutPath),n=Be(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=U_(e,r.finalResult,n),i=o?!1:ne(e.pid),a=jc(e.stdoutPath),l=jc(e.stderrPath),c=jc(e.heartbeatPath),{changedFiles:u,gitAncestry:d}=x_(e.worktreePath,{base:t.base,baseCommit:t.baseCommit},{alive:i}),m=yS([r.lastEventAt,n.lastHeartbeatAt,Vc(e.stdoutPath),Vc(e.stderrPath),Vc(e.heartbeatPath)]),f=i?null:cu(e.workerDir),g=s&&!Dg(s)?s:null,h=r.error||!i&&!s&&ss(e.stderrPath,10).trim()||void 0,y=h||!i&&s&&!g&&ss(e.stderrPath,10).trim()||void 0,v=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=F_(v)?null:v,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,S=dG({alive:i,finalResult:s,firstEventAt:r.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,providerTerminalError:r.providerTerminalError,changedFiles:u,gitAncestry:d,completionBlocker:k,landingContract:b,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),w=k||S.state==="blocked"?"blocked":o||S.state==="done"?"done":s?"exited":i?"running":"exited",_=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,R=g_({alive:i,finalResult:s,error:y??null,stale:S.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:f}),P=_&&!i&&!g?_:R,N=P==="running"||P==="finished"?null:(_===P?e.stopReason:void 0)??h_({stopClass:P,exit:f,error:y??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:w,stopClass:P,stopReason:N,exit:f,attention:S,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:r.firstEventAt,lastEventAt:r.lastEventAt,lastActivityAt:m,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 Ve(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Wg(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function hu(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 uG,Ug,Oe=p(()=>{"use strict";eo();va();Mg();Or();su();Lg();du();C_();fu();B_();mu();U();uG=18e4,Ug=6e5});import{readFileSync as mG}from"node:fs";function gG(e){if(!e||process.platform!=="linux")return null;try{return mG(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function $_(e){if(!e.pid||process.platform!=="linux")return!0;let t=gG(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 pn(e){return typeof e.completionBlocker=="string"&&e.completionBlocker.trim()||typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||!ne(e.pid)||!$_(e)?!1:!W_(e)}var yu=p(()=>{"use strict";Oe();U()});import H_ from"node:os";import j_ from"node:path";function K_(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function hG(e=I(),t,r){let n=K_(e.perWorkerMemBytes,ku),o=K_(e.memReserveBytes,bu),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):vu)),i=bs({config:e,configuredMaxWorkersOverride:t,totalMemBytes:r??H_.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function V_(e,t={}){let r=t.perWorkerMemBytes??ku,n=t.memReserveBytes??bu,o=t.memUtilization??vu,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/r));return Math.min(i,Ru)}function yG(){return FS()}function kG(e){let t=0;for(let r of Ft(e)){let n=K(j_.join(G(e.id),"workers",W(r),"worker.json"),void 0);!n||!pn(n)||t++}return t}function $g(){let e=0;for(let t of Ee())e+=kG(t);return e}function ys(){let e=[];for(let t of Ee())for(let r of Ft(t)){let n=K(j_.join(G(t.id),"workers",W(r),"worker.json"),void 0);n&&pn(n)&&e.push({runId:t.id,workerName:r})}return e}function _a(e){let t=e.config??I(),r=e.totalMemBytes??H_.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=hG(t,e.configuredMaxWorkersOverride,r),c=Bt(t),u=e.freeMemBytes??yG(),d=e.activeWorkers??$g(),m=Math.max(0,Math.floor(r*s)-o),f=Math.max(0,Math.floor(m/n)),g=Math.max(0,Math.floor(Math.max(0,u-o)/n)),h=a,y=Ir(c,i??h),v=Math.max(0,Math.min(y,f)),k=Math.max(0,v-d),S=Math.min(k,g),_=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:cn({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});_&&!_.ok&&(S=0);let R=null;return S<=0&&(_&&!_.ok?R=_.reason??"disk gate blocked worker admission":d>=v?R=`at worker limit (${d}/${v} running)`:g<=0?R="insufficient free memory \u2014 waiting for workers to finish":R="no worker slots available"),{ok:S>0,totalMemBytes:r,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:h,capacityWorkers:f,maxConcurrentWorkers:v,activeWorkers:d,slotsAvailable:S,reason:R,..._?{diskGate:_}:{}}}var ku,bu,vu,Ru,ks=p(()=>{"use strict";US();$();He();ls();xa();ha();Q();ds();yu();U();ku=500*1024*1024,bu=4*1024*1024*1024,vu=.85,Ru=64});function Ca(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function bs(e){let t=e.config??{},r=e.env??process.env,n=Ca(t.perWorkerMemBytes,ku),o=Ca(t.memReserveBytes,bu),s=Math.min(1,Math.max(.1,Number(t.memUtilization)>0?Number(t.memUtilization):vu)),i=V_(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ca(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(t.maxConcurrentWorkers!==void 0&&t.maxConcurrentWorkers!==null){let c=Ca(t.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Ru),autoCap:i,workerCapSource:"config"}}let l=(r.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||r.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&r.KYNVER_MAX_WORKERS&&Ca(r.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Ru),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var xa=p(()=>{"use strict";ks()});import{existsSync as bG,mkdirSync as dge,readFileSync as vG,writeFileSync as pge}from"node:fs";import{homedir as RG}from"node:os";import wG from"node:path";function SG(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 wu(e=fn){return bG(e)?SG(vG(e,"utf8")):new Map}function G_(e=fn,t={}){let r=wu(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 fn,Nr=p(()=>{"use strict";fn=wG.join(RG(),".kynver",".env")});var J_=p(()=>{"use strict"});var Y_=p(()=>{"use strict";J_()});var Su=p(()=>{"use strict"});import{existsSync as _G,readFileSync as xG}from"node:fs";import{homedir as CG}from"node:os";import EG from"node:path";function Hg(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function Kg(e){return typeof e=="string"&&e.trim()?e:null}function jg(e){let t=Hg(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=Kg(t.requestedAt);return o?{desiredState:r,policyVersion:n,requestedAt:o,requestedByLabel:Kg(t.requestedByLabel),reason:Kg(t.reason)}:null}function q_(e){let t=Hg(Hg(e)?.response);return!t||t.runtimeControl===void 0?null:jg(t.runtimeControl)}function z_(e,t=CG()){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return EG.join(t,".kynver",`runtime-control-${r}.json`)}function Vg(e,t,r){try{let n=mn(e,r);if(n&&n.policyVersion>t.policyVersion)return;Se(z_(e,r),{contractVersion:1,agentOsId:e,control:t,deliveredAt:new Date().toISOString()})}catch{}}function mn(e,t){try{let r=z_(e,t);if(!_G(r))return null;let n=JSON.parse(xG(r,"utf8"));return n.agentOsId!==e?null:jg(n.control)}catch{return null}}function vs(e){return e?.desiredState??"running"}function AG(e){return e==="keeper"||e==="desktop"}function IG(e,t,r=!1){let n=vs(e);return n==="paused"?"paused":n==="stopped"?r&&t===0?"stopped":"stopping":"running"}function xu(e){return e.control?{policyVersion:e.control.policyVersion,state:IG(e.control,e.inFlightWorkers,e.exiting),supervised:AG(e.supervisor),inFlightWorkers:Math.max(0,Math.floor(e.inFlightWorkers))}:null}function X_(e){let t=vs(e);return t==="paused"?"runtime_paused":t==="stopped"?"runtime_stopped":null}function Q_(e,t){return vs(e)==="stopped"&&t===0}function ex(e){Z_=e}function tx(){return Z_}var _u,Z_,gn=p(()=>{"use strict";U();_u=83;Z_=null});var Ea,Rs=p(()=>{"use strict";Y_();Su();gn();Ea="kynver-cron-daemon.service"});import{existsSync as PG,readFileSync as TG}from"node:fs";function Gg(){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(PG("/proc/version")){let e=TG("/proc/version","utf8");if(/microsoft/i.test(e))return"wsl"}}catch{}return"linux"}return"linux"}var Cu=p(()=>{"use strict"});var Jg=p(()=>{"use strict";Cu()});var Aa=p(()=>{"use strict";Nr();bt();$();Rs();Jg()});import MG from"node:os";function Ia(e,t){let r=(t??MG.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${r}`}function nx(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Eu(e,t){let r=e.trim();if(!r)return Ia(t);let n=r.indexOf(":");if(n>=0){let o=r.slice(0,n).trim().toLowerCase()||t,s=nx(r.slice(n+1));return s?`${o}:${s}`:Ia(o)}return`${t}:${nx(r)}`}function ws(e){let t=e.explicitBoxId?.trim()||e.env?.KYNVER_BOX_ID?.trim()||e.config?.boxId?.trim();return t?Eu(t,e.boxKind):Ia(e.boxKind,e.hostLabel)}var Ss=p(()=>{"use strict";He();He()});var ox=p(()=>{"use strict";Nr();Rs();Aa()});import{existsSync as Dr,mkdirSync as LG,readdirSync as Au,renameSync as sx,statSync as BG}from"node:fs";import Mr from"node:path";function ax(e){try{return BG(e).isDirectory()}catch{return!1}}function FG(e){if(!Dr(e))return!0;for(let t of ix){let r=Mr.join(e,t);if(Dr(r)&&(!ax(r)||Au(r).length>0))return!1}return!0}function UG(e){let t=Mr.join(e,"runs");if(!Dr(t)||!ax(t))return!1;for(let r of Au(t,{withFileTypes:!0})){if(!r.isDirectory()||r.name==="runs")continue;let n=Mr.join(t,r.name,"run.json");if(K(n,void 0)?.id)return!0}return!1}function WG(e){let t=Mr.join(e,"runs");if(!Dr(t))return!1;for(let r of Au(t,{withFileTypes:!0})){if(!r.isDirectory())continue;if(K(Mr.join(t,r.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function $G(e){let t=Mr.join(e,"ghost");return Dr(t)?!Dr(Mr.join(t,"runs")):WG(e)}function lx(e){return UG(e.sharedRoot)?FG(e.forgeRoot)?$G(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 cx(e,t){LG(t,{recursive:!0});for(let r of ix){let n=Mr.join(e,r),o=Mr.join(t,r);if(Dr(n)){if(Dr(o)&&Au(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Dr(o)){sx(n,o);continue}sx(n,o)}}}var ix,ux=p(()=>{"use strict";U();ix=["runs","worktrees"]});import{existsSync as Je}from"node:fs";import{homedir as KG}from"node:os";import Fe from"node:path";function Yg(e=process.env){return e.HOME?.trim()||KG()}function qg(e=process.env){return Fe.join(Yg(e),".kynver","harness")}function Iu(e){let t=Fe.resolve(Le(e.trim()));for(;HG.has(Fe.basename(t));)t=Fe.dirname(t);return t}function jG(e,t=process.env){return Fe.join(qg(t),e)}function VG(e=process.env){let t=qg(e);if(Je(Fe.join(t,"runs")))return!0;if(Je(t)&&!Je(Fe.join(t,"ghost"))&&!Je(Fe.join(t,"forge")))return Je(t);let r=Fe.join(Yg(e),dx);return Je(r)}function Pu(e){let t=e.env??process.env,r=t.KYNVER_HARNESS_ROOT?.trim()||t.OPUS_HARNESS_ROOT?.trim();if(r)return{harnessRoot:Iu(r),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Iu(n),source:"config"};let o=jG(e.boxKind,t);if(Je(Fe.join(o,"runs"))||Je(o)&&!GG(o))return{harnessRoot:o,source:"box_scoped"};let i=qg(t);if(e.boxKind==="forge"){let a=lx({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&&cx(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&VG(t)){if(Je(Fe.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(Je(i)&&!Je(Fe.join(i,"ghost"))&&!Je(Fe.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let l=Fe.join(Yg(t),dx);if(Je(l))return{harnessRoot:l,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function GG(e){if(!Je(e))return!0;for(let t of["runs","worktrees"]){let r=Fe.join(e,t);if(Je(r))return!1}return!0}var dx,HG,zg=p(()=>{"use strict";bt();ux();dx=Fe.join(".openclaw","harness");HG=new Set(["runs","worktrees"])});import px from"node:os";function Tu(e){return e?.trim()?e.trim():null}function JG(e,t){let r=t.trim().toLowerCase()||"host";return`${e}-${r}`.replace(/[^a-z0-9._-]+/g,"-")}function YG(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 rr(e=I(),t=process.env,r={}){let n=ut(t,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Tu(t.KYNVER_BOX_KIND)),a=r.strict===!0||YG(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=Tu(e.runnerId),c=Tu(t.KYNVER_RUNTIME_ID)??Tu(t.OPENCLAW_RUNTIME_ID),u=l??c??JG(n.boxKind,px.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 m=bs({config:e,env:t,totalMemBytes:px.totalmem()}),f=Ir(n.boxKind,m.configuredMaxWorkers??Rg(n.boxKind,m.autoCap)),g=Pu({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:f,workerCapSource:m.workerCapSource,harnessRoot:g.harnessRoot,harnessRootSource:g.source},errors:s,warnings:o}}var no=p(()=>{"use strict";$();He();ls();xa();zg()});var Xg=p(()=>{"use strict";pa();He();Ss();$();Aa();ox();wt();Mt();no()});function et(e){let t=e.trim().toLowerCase();return zG[t]??t}var gx,qG,zG,Pa=p(()=>{"use strict";gx=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],qG=gx.join("|"),zG={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","venice-ai":"venice",venice_ai:"venice",veniceai:"venice",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{mkdirSync as yx}from"node:fs";import{homedir as kx}from"node:os";import Ou from"node:path";function _s(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return bx.includes(t)?t:null}function oo(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=Le(r.trim());if(t.includes(n)||t.push(n),t.length>=QG)break}return t}function Nu(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=_s(s.access);return i?{access:i,folders:oo(s.folders)}:null}function Du(e){return XG.has(e)?"folder":"off"}function hx(e=kx()){let t=Ou.join(e,".kynver",vx);return yx(t,{recursive:!0}),t}function xs(e){let t=e.home??kx(),r=_s(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:oo(e.local?.chatWorkFolders)},o="local"):(n={access:Du(e.engine),folders:[]},o="default");let{access:s}=n;if(s==="off")return{access:s,folders:[],workDir:hx(t),extraFolders:[],source:o};let i=n.folders;s==="folder"&&(i=i.slice(0,1)),i.length===0&&s!=="full"&&(i=[hx(t)]);for(let l of i)try{yx(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 Mu(e,t){if(e.access==="off")return!1;if(e.access==="full")return!0;let r=Ou.resolve(t);return e.folders.some(n=>{let o=Ou.relative(n,r);return o===""||!o.startsWith("..")&&!Ou.isAbsolute(o)})}var bx,XG,QG,vx,so=p(()=>{"use strict";bt();bx=["off","folder","folders","full"],XG=new Set(["cursor","codex","antigravity"]),QG=16,vx="chat-workspace"});var Rx=p(()=>{"use strict";so()});import{execFileSync as ZG}from"node:child_process";function eh(e=process.env){let t=e[t2]?.trim().toLowerCase();return t==="file"?"file":t==="keychain"?"keychain":"auto"}function r2(e,t,r){if(!wx.test(e)||!wx.test(t))return null;let n=Buffer.from(r,"utf8").toString("hex");return`add-generic-password -U -s ${e} -a ${t} -l Kynver-${t} -X ${n}
|
|
76
|
+
`}function n2(e,t,r){let n={encoding:"utf8",timeout:r.timeoutMs,stdio:["pipe","pipe","pipe"],windowsHide:!0,...r.input!==void 0?{input:r.input}:{}};return ZG(e,t,n)}function o2(e=process.platform){return e==="darwin"?"macos":e==="linux"?"libsecret":e==="win32"?"windows":null}function Qg(e,t,r){let n=JSON.stringify(r),o=JSON.stringify(t),s="[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]; $v = New-Object Windows.Security.Credentials.PasswordVault;";return e==="get"?`${s} try { $c = $v.Retrieve(${n}, ${o}); $c.RetrievePassword(); [Console]::Out.Write($c.Password) } catch { exit 3 }`:e==="set"?`${s} $s = [Console]::In.ReadToEnd().TrimEnd("\`r","\`n"); try { $old = $v.Retrieve(${n}, ${o}); $v.Remove($old) } catch {}; $v.Add((New-Object Windows.Security.Credentials.PasswordCredential(${n}, ${o}, $s)))`:`${s} try { $old = $v.Retrieve(${n}, ${o}); $v.Remove($old) } catch {}`}function Sx(e={}){if(eh(e.env??process.env)==="file")return null;let r=o2(e.platform??process.platform);return r?new Zg(r,e.exec,e.service):null}var e2,t2,Lr,wx,Zg,_x=p(()=>{"use strict";e2="kynver",t2="KYNVER_CREDENTIAL_STORE";Lr=5e3,wx=/^[A-Za-z0-9_.@:-]{1,128}$/;Zg=class{constructor(t,r=n2,n=e2){this.backend=t;this.exec=r;this.service=n}backend;exec;service;get(t){try{if(this.backend==="macos"){let s=this.exec("security",["find-generic-password","-s",this.service,"-a",t,"-w"],{timeoutMs:Lr}).replace(/\r?\n$/,"");return s||null}if(this.backend==="libsecret"){let s=this.exec("secret-tool",["lookup","service",this.service,"account",t],{timeoutMs:Lr}).replace(/\r?\n$/,"");return s||null}let n=this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qg("get",t,this.service)],{timeoutMs:Lr}).replace(/\r?\n$/,"");return n||null}catch{return null}}set(t,r){if(!r||/[\r\n]/.test(r))return!1;try{if(this.backend==="macos"){let n=r2(this.service,t,r);if(!n)return!1;this.exec("security",["-i"],{input:n,timeoutMs:Lr})}else this.backend==="libsecret"?this.exec("secret-tool",["store",`--label=Kynver (${t})`,"service",this.service,"account",t],{input:`${r}
|
|
77
|
+
`,timeoutMs:Lr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qg("set",t,this.service)],{input:`${r}
|
|
78
|
+
`,timeoutMs:Lr})}catch{return!1}return this.get(t)===r}delete(t){try{this.backend==="macos"?this.exec("security",["delete-generic-password","-s",this.service,"-a",t],{timeoutMs:Lr}):this.backend==="libsecret"?this.exec("secret-tool",["clear","service",this.service,"account",t],{timeoutMs:Lr}):this.exec("powershell.exe",["-NoProfile","-NonInteractive","-Command",Qg("delete",t,this.service)],{timeoutMs:Lr})}catch{}}}});function hn(){return th||(th=new rh),th}var Cs,Es,s2,Lu,rh,th,nh=p(()=>{"use strict";_x();Cs="api-key",Es="chat-box-credential",s2=6e4,Lu=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"}},rh=class{cache=new Map;keychain;env;now;constructor(t={}){this.env=t.env??process.env,this.keychain=t.keychain===void 0?Sx({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<s2)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=eh(this.env);if(!this.keychain){if(n==="keychain")throw new Lu(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 Lu(t);return o}remove(t){this.cache.delete(t),this.keychain?.delete(t)}invalidate(t){t?this.cache.delete(t):this.cache.clear()}},th=null});import{existsSync as xx,mkdirSync as Cx,readFileSync as Ex,writeFileSync as Ax}from"node:fs";import{homedir as c2,totalmem as jhe}from"node:os";import ih from"node:path";function As(e){let t=String(e??"").trim();if(!t)return{ok:!1,reason:"missing"};let r=t.toLowerCase();return d2.has(r)?{ok:!1,value:t,reason:"placeholder"}:u2.test(t)?{ok:!0,value:t}:{ok:!1,value:t,reason:"not a UUID"}}function ah(e){let t=As(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 Ix(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Le(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Le(e.defaultRepo.trim())}:{}}}function Uu(e){let t=e.defaultRepo?.trim();return!t||e.defaultBase?.trim()||!_S(Le(t))?e:{...e,defaultBase:qc}}function p2(){if(!xx(oh))return null;try{return JSON.parse(Ex(oh,"utf8"))}catch{return null}}function I(){let e=p2();return e?Uu(Ix(e)):{}}function Ge(e){Cx(Fu,{recursive:!0}),Ax(oh,`${JSON.stringify(Uu(mx(e)),null,2)}
|
|
79
|
+
`,{mode:384})}function mx(e){return Ix(e)}function lh(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Ze(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Ze(e.defaultRepo.trim())}:{},...e.chatWorkFolders?.length?{chatWorkFolders:e.chatWorkFolders.map(Ze)}:{}}}function Br(){if(cg(),!xx(sh))return{};try{return JSON.parse(Ex(sh,"utf8"))}catch{return{}}}function Ta(e){cg(),Cx(Fu,{recursive:!0}),Ax(sh,`${JSON.stringify(e,null,2)}
|
|
80
|
+
`,{mode:384})}function Px(e,t,r,n={}){let o=Br();if(hn().write(e,r)){let i={...o,...n};delete i[t],i.store="keychain",i.keychainAccounts=Array.from(new Set([...o.keychainAccounts??[],e])).sort(),Ta(i);return}Ta({...o,...n,[t]:r})}function Tx(e,t){let r=hn().read(e);return r||Br()[t]}function Ox(){if(lt())return{backend:null,moved:[],stillInFile:[]};let e=hn(),t=Br(),r=[],n=[],o=[[Cs,"apiKey"],[Es,"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={...Br()};for(let i of r)delete s[i];s.store="keychain",s.keychainAccounts=Array.from(new Set([...s.keychainAccounts??[],...r.map(i=>i==="apiKey"?Cs:Es)])).sort(),Ta(s)}return{backend:e.backend,moved:r,stillInFile:n}}function ch(){return pS(f2)}function ke(){return ch().getApiKey()}function Ue(e){return ch().getRunnerToken(e)}function io(e,t){ch().persistRunnerToken(e,t)}function yn(e){let t=Me("KYNVER_CHAT_BOX_CREDENTIAL");if(t)return t;if(lt())return Bu?.agentOsId===e?Bu.credential:void 0;let r=Br();if(!(r.chatBoxCredentialAgentOsId&&r.chatBoxCredentialAgentOsId!==e))return Tx(Es,"chatBoxCredential")}function Wu(e,t){if(lt()){Bu={agentOsId:e,credential:t};return}Px(Es,"chatBoxCredential",t,{chatBoxCredentialAgentOsId:e})}function $u(){if(lt()){Bu=null;return}hn().remove(Es);let e={...Br()};delete e.chatBoxCredential,delete e.chatBoxCredentialAgentOsId,Ta(e)}function Nx(){let e=hn();return process.env.KYNVER_API_KEY?{backend:e.backend,apiKey:"env"}:e.read(Cs)?{backend:e.backend,apiKey:"keychain"}:Br().apiKey?{backend:e.backend,apiKey:"file"}:{backend:e.backend,apiKey:"none"}}function ge(e){let t=Oa(e);return t||Lx("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),t}function Ut(e){return Oa(e)}function Oa(e){let t=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||I().apiBaseUrl;return Ar(t)}function m2(e,t){let r=e||Ue(t)||(t?void 0:Ue(I().agentOsId));if(r)return String(r);let n=Me("KYNVER_RUNTIME_SECRET")||Me("KYNVER_CRON_SECRET")||Me("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 Ku(e,t,r){let n=m2(e,t);if(n)return{ok:!0,secret:n};let o=ke(),s=Oa(r?.baseUrl);if(o&&t&&s)try{let i=await ao(t,{baseUrl:s,apiKey:o});return io(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 Ku(e,t,r);if(n.ok)return n.secret;Lx(n.reason)}async function Dx(e,t){let r=ke(),n=Oa(t?.baseUrl);if(!r||!e||!n)return null;try{let o=await ao(e,{baseUrl:n,apiKey:r});return io(e,o),o}catch{return null}}async function Mx(e,t,r){let n=ke(),o=Oa(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 ao(t,{baseUrl:o,apiKey:n});return s&&s!==e?(io(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 ao(e,t){let r=t?.apiKey||ke();if(!r)throw new Error("API key required \u2014 run `kynver login` first");let o=`${ge(t?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await Ce(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 Lx(e){console.error(e),process.exit(1)}var Fu,oh,sh,u2,d2,lye,cye,f2,Bu,$=p(()=>{"use strict";pa();bt();hg();vg();wt();He();ls();xa();ha();Aa();Xg();Pa();no();Rx();Mt();nh();Fu=ih.join(c2(),".kynver"),oh=ih.join(Fu,"config.json"),sh=ih.join(Fu,"credentials"),u2=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,d2=new Set(["aos","aos-1","agent-os-id","agentosid","agent_os_id","<agent-os-id>","<agentosid>","todo","changeme","change-me","placeholder"]);lye=500*1024*1024,cye=4*1024*1024*1024;f2={kind:"file",getApiKey(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Tx(Cs,"apiKey")},getRunnerToken(e){let t=Br();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){Px(Cs,"apiKey",e)},persistRunnerToken(e,t){Ta({...Br(),runnerToken:t,runnerTokenAgentOsId:e})}};Bu=null});import uh from"node:path";function We(e){return Iu(e)}function St(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return We(e);let t=I(),r=t.harnessRoot?.trim();if(r)return We(r);let n=rr(t,process.env);return n.identity?n.identity.harnessRoot:Pu({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function pt(e){return uh.join(We(e),"runs")}function Is(e){return uh.join(We(e),"worktrees")}function Bx(){let e=St();return{harnessRoot:e,runsDir:pt(e),worktreesDir:Is(e)}}function Fr(e,t){return uh.join(e,W(t))}var Wt=p(()=>{"use strict";$();zg();no();U()});import{existsSync as Hu,readdirSync as g2,statSync as h2}from"node:fs";import lo from"node:path";function be(){return Bx()}function ie(e){let{runsDir:t}=be(),r=lo.join(Fr(t,W(e)),"run.json");return Hu(r)||vt(`run '${e}' not found`),K(r)}function Ee(){let{runsDir:e}=be();return Fx(e)}function ju(e){return Fx(pt(e))}function y2(e){try{return h2(e).isDirectory()}catch{return!1}}function Fx(e){if(!Hu(e))return[];let t=[];for(let r of g2(e,{withFileTypes:!0})){if(r.name==="runs")continue;let n=lo.join(e,r.name);if(!y2(n))continue;let o=K(lo.join(n,"run.json"),void 0);o?.id&&t.push(o)}return t}function co(e,t){let{runsDir:r}=be(),n=lo.join(Fr(r,W(e)),"run.json"),o=lo.join(Fr(r,W(e)),"workers",W(t),"worker.json");return Hu(o)||(Hu(n)||vt(`run '${e}' not found`),vt(`worker '${t}' not found in run '${e}'`)),K(o)}function tt(e){let{runsDir:t}=be();Se(lo.join(Fr(t,e.id),"run.json"),e)}function te(e,t){let{runsDir:r}=be();Se(lo.join(Fr(r,e),"workers",t.name,"worker.json"),t)}function G(e){let{harnessRoot:t}=be();return Na(t,e)}function Na(e,t){return Fr(pt(e),W(t))}var Q=p(()=>{"use strict";Wt();U()});import k2 from"node:path";function b2(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=ie(e),r=[];for(let n of Object.keys(t.workers||{})){let o=K(k2.join(G(t.id),"workers",W(n),"worker.json"),void 0);!o?.taskId||!pn(o)||r.push({runId:t.id,workerName:n,taskId:o.taskId,pid:o.pid,...b2(o)})}return r}var Vu=p(()=>{"use strict";Q();yu();U()});function dh(e){return typeof e=="object"&&e!==null&&e.type===Gu}function Ux(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=>{dh(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 Wx(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 Gu,Ju=p(()=>{"use strict";Vu();os();Gu="kynver:daemon-stop"});import{createHash as v2}from"node:crypto";function ft(e){return JSON.stringify(ph(e))}function ph(e){if(Array.isArray(e))return e.map(ph);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=ph(e[r]);return t}return e}function $x(e){return`ib-${v2("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function Da(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 Yu(e){if(!e)return[];let t=[];for(let r of e.split(/[,\s]+/)){let n=Da(r);n&&t.push(n)}return t}function Ma(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 qu(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 kn=p(()=>{"use strict"});import{createHash as R2,createPublicKey as w2,verify as S2}from"node:crypto";function C2(e){return`ca-${R2("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function uo(e,t=process.env){let r=Yu(t.KYNVER_COMMAND_AUTH_PUBLIC_KEY);if(r.length>0)return r.find(o=>C2(o)===e)??null;let n=x2[e];return!n||e===Kx&&!qu(t)?null:Da(n)}function E2(e){return w2({key:Buffer.concat([_2,Buffer.from(e)]),format:"der",type:"spki"})}function A2(e,t){return!Array.isArray(e)||e.length!==t.length?!1:e.every((r,n)=>typeof r=="string"&&r===t[n])}function I2(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 Hx(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!I2(e))return{ok:!1,reason:"malformed command authorization proof"};if(e.payload.agentOsId!==t.agentOsId)return{ok:!1,reason:"agentOsId mismatch"};if(!A2(e.payload.argv,t.argv))return{ok:!1,reason:"argv mismatch"};if(e.payload.exp<=n)return{ok:!1,reason:"proof expired"};let o=uo(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(ft(e.payload),"utf8");return S2(null,i,E2(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 _2,Kx,x2,La=p(()=>{"use strict";kn();_2=Buffer.from("302a300506032b6570032100","hex"),Kx="ca-6297fb8e1773",x2={[Kx]:"16ae5cb2a61f8c94cf1b86e8258f9c2f2ff6aba5e6136250a422209b6e866881","ca-456fd128f3b3":"f29cbd559410c2578d7f9732ccd86570073355ccdb36af0d1b7dff15908466e7","ca-fc6a2e593f40":"9c0d2fec00bdfce3a448d3fb1b9b9ecfe0dad587dd37f4de492ad9ca91f53def"}});function zu(e){let t=typeof e.description=="string"?e.description:"",r=typeof e.executorRef=="string"?e.executorRef:"",o=[...t.matchAll(P2)].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(T2))try{let i=JSON.parse(s[1]);if(i.readOnly===!0||i.executionMode==="read_only")return"read_only"}catch{}return"write"}var P2,T2,fh=p(()=>{"use strict";P2=/\[execution-mode:\s*(write|read[_-]?only)\s*\]/gi,T2=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/gi});import{createPublicKey as O2,verify as N2}from"node:crypto";function mh(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 L2.test(i)&&i.length<=512?i:null}function jx(e){let t=e.task??{};return e.landPrDispatch===!0||t.executor==="land_pr"?"land_pr":t.executor==="verify_live"?"verify_live":zu(t)==="read_only"?"read_only":"write"}function B2(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(",")!==[...M2].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)||!Xu.includes(r.operationClass))}function Vx(e,t,r=process.env,n=Math.floor(Date.now()/1e3)){if(!B2(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+D2+60)return{ok:!1,code:"malformed",reason:"authorization lifetime exceeds the allowed window"};let s=uo(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=O2({key:Buffer.concat([F2,Buffer.from(s)]),format:"der",type:"spki"});return N2(null,Buffer.from(ft(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 D2,Xu,M2,L2,F2,Gx=p(()=>{"use strict";La();kn();fh();D2=120,Xu=["write","read_only","land_pr","verify_live"],M2=["agentOsId","attempt","exp","kind","leaseOwner","leaseToken","operationClass","repoIdentity","requestNonce","taskId","tenantId","v"],L2=/^[a-z0-9.-]+(?::\d+)?(?:\/[A-Za-z0-9._~-]+){2,}$/;F2=Buffer.from("302a300506032b6570032100","hex")});import{spawnSync as U2}from"node:child_process";import{randomBytes as W2}from"node:crypto";function Jx(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!==$2)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"||!K2.test(t.agentOsId))return"invalid agentOsId";if(typeof t.repoIdentity!="string"||mh(`https://${t.repoIdentity}`)!==t.repoIdentity)return"invalid repoIdentity";let n=t.approvedOperationClasses;if(!Array.isArray(n)||n.length>Xu.length)return"invalid approvedOperationClasses";let o=new Set;for(let s of n){if(typeof s!="string"||!Xu.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 H2(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=jx(e.decision),a=Vx(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 qx(){return lt()}function zx(e){return Ba&&e.revision<Ba.revision?!1:(Ba=e,!0)}function yh(){return Ba}function Xx(e){Yx=e}function Qx(e){return hh.add(e),()=>hh.delete(e)}function Zx(e){return{v:1,repoIdentity:e,requestNonce:W2(16).toString("base64url")}}function Qu(e){let t=U2("git",["-C",e,"remote","get-url","origin"],X({encoding:"utf8",timeout:1e4}));return t.status!==0||typeof t.stdout!="string"?null:mh(t.stdout.trim())}function eC(e){let t=H2({...e,policy:Ba,identity:Yx,consumed:j2});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 hh)try{o(n)}catch{}}return t}var $2,K2,gh,Ba,Yx,j2,hh,Zu=p(()=>{"use strict";Mt();Gx();U();$2=1,K2=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;gh=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}};Ba=null,Yx=null,j2=new gh,hh=new Set});import{createCipheriv as V2,createDecipheriv as G2,randomBytes as bh,scrypt as J2,timingSafeEqual as Y2}from"node:crypto";function rC(){return bh(vh)}function nC(e=q2){return{name:"scrypt",N:e.N,r:e.r,p:e.p,salt:bh(16).toString("base64")}}function wh(e,t,r=z2){if(t.name!=="scrypt"||!Number.isInteger(t.N)||t.N<r||t.r<8||t.p<1)return Promise.reject(new $t("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 $t("the vault file's salt is invalid")):new Promise((o,s)=>{J2(e.normalize("NFKC"),n,vh,{N:t.N,r:t.r,p:t.p,maxmem:128*t.N*t.r*2},(i,a)=>i?s(i):o(a))})}function bn(e,t,r){if(e.length!==vh)throw new $t("bad key length");let n=bh(tC),o=V2("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 po(e,t,r){try{let n=Buffer.from(t.n,"base64"),o=Buffer.from(t.c,"base64");if(n.length!==tC||o.length<kh)throw new $t;let s=G2("aes-256-gcm",e,n);return s.setAAD(Buffer.from(r,"utf8")),s.setAuthTag(o.subarray(o.length-kh)),Buffer.concat([s.update(o.subarray(0,o.length-kh)),s.final()])}catch(n){throw n instanceof $t?n:new $t}}function Sh(e){for(let t of e)if(t.includes(`
|
|
81
81
|
`))throw new $t("invalid vault field");return e.join(`
|
|
82
|
-
`)}function
|
|
83
|
-
`,{mode:384}),iJ(r,this.filePath);try{cC(this.filePath,384)}catch{}}}});import{appendFileSync as fJ,chmodSync as mJ,existsSync as yC,mkdirSync as gJ,readFileSync as kC,renameSync as hJ,statSync as yJ,writeFileSync as kJ}from"node:fs";import bJ from"node:path";var vJ,bC,RJ,
|
|
82
|
+
`)}function xh(e){return Sh(["kynver-site-login/v1/record",e.agentOsId,e.handle,e.origin,e.label,e.username,e.hasTotp?"totp":"no-totp"])}function oC(e,t){return e.length===t.length&&Y2(e,t)}var vh,tC,kh,q2,z2,Rh,$t,_h,ed,td,Ch=p(()=>{"use strict";vh=32,tC=12,kh=16,q2={N:2**17,r:8,p:1},z2=2**14,Rh=10,$t=class extends Error{constructor(t="the saved-login vault could not be decrypted"){super(t),this.name="VaultCryptoError"}};_h=e=>Sh(["kynver-site-login/v1/vault-key",e]),ed=e=>Sh(["kynver-site-login/v1/key-check",e]),td=Buffer.from("kynver-site-login-key-check-v1","utf8")});function sC(e,t={}){if(typeof e!="string"||!e.trim())return{ok:!1,reason:"a site address is required"};let r=e.trim();/^[a-z][a-z0-9+.-]*:/i.test(r)||(r=`https://${r}`);let n;try{n=new URL(r)}catch{return{ok:!1,reason:"not a valid web address"}}return n.protocol!=="https:"?{ok:!1,reason:"saved logins are only used on https:// sites"}:n.username||n.password?{ok:!1,reason:"the address must not contain a username or password"}:t.allowLan===!0&&Q2.test(n.hostname)&&n.hostname.split(".").every(s=>Number(s)<=255)?{ok:!0,origin:n.origin,unicodeHost:!1}:!n.hostname.includes(".")||X2.test(n.hostname)?{ok:!1,reason:"use the site's public address (e.g. https://www.instagram.com)"}:{ok:!0,origin:n.origin,unicodeHost:n.hostname.split(".").some(s=>s.startsWith("xn--"))}}function Fa(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 Eh(e,t){let r=Fa(t);return r!==null&&r===e}var X2,Q2,Ah=p(()=>{"use strict";X2=/^(localhost|.*\.localhost|.*\.local|.*\.internal|0\.0\.0\.0|\[.*\]|\d{1,3}(\.\d{1,3}){3})$/i,Q2=/^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$/});import{createHmac as Z2}from"node:crypto";function iC(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|eJ.indexOf(s),r+=5,r>=8&&(o.push(n>>>r-8&255),r-=8);return o.length?Buffer.from(o):null}function rd(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=iC(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=iC(t);return r?{key:r,algorithm:"SHA1",digits:6,period:30}:null}function tJ(e,t,r,n){let o=Buffer.alloc(8);o.writeBigUInt64BE(t);let s=Z2(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 aC(e,t=Date.now()){let r=BigInt(Math.floor(t/1e3/e.period));return tJ(e.key,r,e.digits,e.algorithm)}function lC(e,t=Date.now()){let r=Math.floor(t/1e3)%e.period;return e.period-r}var eJ,Ih=p(()=>{"use strict";eJ="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"});var Ye,nd=p(()=>{"use strict";Ye={maxRecords:200,maxLabel:80,maxUsername:254,maxPassword:1024,maxTotp:512}});import{createHash as rJ,randomBytes as dC}from"node:crypto";import{chmodSync as cC,existsSync as nJ,mkdirSync as oJ,readFileSync as sJ,renameSync as iJ,rmSync as aJ,writeFileSync as lJ}from"node:fs";import{homedir as cJ}from"node:os";import pC from"node:path";function Ua(){return pC.join(cJ(),".kynver","site-logins")}function Ph(e){return`${rJ("sha256").update(`kynver-site-login:${e}`).digest("hex").slice(0,32)}.vault.json`}function uC(e,t,r,n=!0){let o=typeof e=="string"?e.trim():"";if(!o&&n)throw new Y(`${t} is required`,"invalid");if(o.length>r)throw new Y(`${t} is too long (max ${r})`,"invalid");if(fC.test(o))throw new Y(`${t} contains control characters`,"invalid");return o}function uJ(){let e="abcdefghijkmnpqrstuvwxyz23456789",t=dC(10);return`lg_${Array.from(t,r=>e[r%e.length]).join("")}`}var Y,fC,od,vn=p(()=>{"use strict";Ch();Ah();Ih();nd();Y=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SiteLoginError"}code},fC=/[\u0000-\u001f\u007f]/;od=class{constructor(t){this.opts=t;let r=t.agentOsId.trim();if(!r||fC.test(r)||r.length>200)throw new Y("invalid workspace id","invalid");this.agentOsId=r,this.rootDir=t.rootDir??Ua(),this.filePath=pC.join(this.rootDir,Ph(r)),this.now=t.now??Date.now}opts;agentOsId;filePath;rootDir;now;exists(){return nJ(this.filePath)}keyMode(){return this.exists()?this.read().keyMode:null}async createWithPassphrase(t){if(this.exists())throw new Y("a saved-login vault already exists on this computer","exists");if(t.length<Rh)throw new Y(`the vault passphrase must be at least ${Rh} characters`,"invalid");let r=rC(),n=nC(this.opts.scryptCost),o=await wh(t,n,this.opts.minScryptN);return this.write({v:1,agentOsId:this.agentOsId,keyMode:"passphrase",kdf:n,wrappedKey:bn(o,r,_h(this.agentOsId)),keyCheck:bn(r,td,ed(this.agentOsId)),records:[]}),o.fill(0),r}createWithKeychainKey(t){if(this.exists())throw new Y("a saved-login vault already exists on this computer","exists");this.write({v:1,agentOsId:this.agentOsId,keyMode:"keychain",keyCheck:bn(t,td,ed(this.agentOsId)),records:[]})}async unlockWithPassphrase(t){let r=this.read();if(r.keyMode!=="passphrase"||!r.kdf||!r.wrappedKey)throw new Y("this vault is unlocked by the Kynver desktop app, not a passphrase","invalid");let n=null;try{n=await wh(t,r.kdf,this.opts.minScryptN);let o=po(n,r.wrappedKey,_h(this.agentOsId));return this.verifyKey(r,o),o}catch(o){throw o instanceof Y?o:o instanceof $t&&/unsafe|salt/.test(o.message)?new Y(o.message,"corrupt"):new Y("wrong vault passphrase","bad_key")}finally{n?.fill(0)}}unlockWithKey(t){return this.verifyKey(this.read(),t),t}wipe(){return this.exists()?(aJ(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>=Ye.maxRecords)throw new Y(`at most ${Ye.maxRecords} saved logins per workspace`,"full");let o=this.buildRecord(t,r,uJ(),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 Y("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 Y("no saved login with that id","not_found");let s;try{s=po(t,o.secret,xh({agentOsId:this.agentOsId,...o}))}catch{throw new Y("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 Y("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=sC(r.origin,{allowLan:r.allowLan===!0});if(!s.ok)throw new Y(s.reason,"invalid");let i=uC(r.label,"label",Ye.maxLabel),a=uC(r.username,"username",Ye.maxUsername),l=typeof r.password=="string"?r.password:"";if(!l)throw new Y("password is required","invalid");if(l.length>Ye.maxPassword)throw new Y("password is too long","invalid");let c=typeof r.totp=="string"&&r.totp.trim()?r.totp.trim():void 0;if(c&&(c.length>Ye.maxTotp||!rd(c)))throw new Y("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:bn(t,d,xh({agentOsId:this.agentOsId,...u}))}}finally{d.fill(0)}}verifyKey(t,r){try{let n=po(r,t.keyCheck,ed(this.agentOsId));if(!oC(n,td))throw new Error("mismatch")}catch{throw new Y("the vault key does not open this vault","bad_key")}}read(){if(!this.exists())throw new Y("no saved-login vault on this computer yet","missing");let t;try{t=JSON.parse(sJ(this.filePath,"utf8"))}catch{throw new Y("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 Y("the saved-login vault file is not a vault Kynver understands","corrupt");if(t.agentOsId!==this.agentOsId)throw new Y("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){oJ(this.rootDir,{recursive:!0,mode:448});try{cC(this.rootDir,448)}catch{}let r=`${this.filePath}.${dC(4).toString("hex")}.tmp`;lJ(r,`${JSON.stringify(t)}
|
|
83
|
+
`,{mode:384}),iJ(r,this.filePath);try{cC(this.filePath,384)}catch{}}}});import{appendFileSync as fJ,chmodSync as mJ,existsSync as yC,mkdirSync as gJ,readFileSync as kC,renameSync as hJ,statSync as yJ,writeFileSync as kJ}from"node:fs";import bJ from"node:path";var vJ,bC,RJ,sd,vC=p(()=>{"use strict";vn();vJ=512*1024,bC=1e3,RJ=10080*60*1e3,sd=class{constructor(t,r=Ua(),n=Date.now){this.rootDir=r;this.now=n;this.filePath=bJ.join(r,Ph(t).replace(/\.vault\.json$/,".audit.jsonl"))}rootDir;now;filePath;record(t){let r={at:new Date(this.now()).toISOString(),...t};try{gJ(this.rootDir,{recursive:!0,mode:448}),this.rotateIfLarge(),fJ(this.filePath,`${JSON.stringify(r)}
|
|
84
84
|
`,{mode:384}),mJ(this.filePath,384)}catch{}return r}entries(t=bC){if(!yC(this.filePath))return[];try{return kC(this.filePath,"utf8").split(`
|
|
85
85
|
`).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=RJ){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(!yC(this.filePath)||yJ(this.filePath).size<vJ)return;let t=kC(this.filePath,"utf8").split(`
|
|
86
86
|
`).filter(Boolean).slice(-bC/2),r=`${this.filePath}.tmp`;kJ(r,`${t.join(`
|
|
87
87
|
`)}
|
|
88
|
-
`,{mode:384}),hJ(r,this.filePath)}}});import{randomBytes as wJ}from"node:crypto";import{existsSync as SJ,rmSync as _J}from"node:fs";function RC(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 rt(){return wC??=new Ph,wC}var xJ,CJ,Ph,wC,Ts=p(()=>{"use strict";vC();bn();xJ=720*60*1e3,CJ=300*1e3,Ph=class{rootDir;now;idleMs;keys=new Map;codes=new Map;codeListeners=new Set;constructor(t={}){this.rootDir=t.rootDir??Ba(),this.now=t.now??Date.now,this.idleMs=t.idleMs??xJ}store(t){return new rd({agentOsId:t,rootDir:this.rootDir,now:this.now})}audit(t){return new nd(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 SJ(o)&&_J(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_${wJ(6).toString("hex")}`,createdAt:r,expiresAt:r+CJ};this.codes.set(n.id,n);let o=RC(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=>RC(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)}};wC=null});var SC=p(()=>{"use strict";U()});var _C=p(()=>{"use strict";ns()});var xC=p(()=>{"use strict";$();SC();wt();_C()});function AJ(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 Th(e){if(!e)return null;let t=AJ(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 Oh=p(()=>{"use strict"});function CC(e){return/\((?:401|403)\)/.test(e)?"access_denied":"transient"}var Nh=p(()=>{"use strict";$();wt();U();xC();Oh()});import{existsSync as IJ}from"node:fs";import{homedir as PJ}from"node:os";import TJ from"node:path";function EC(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 Fa(e,t,r=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<r?t:Math.floor(n)}function vn(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||TJ.join(PJ(),".kynver","agent-os-cron.json")}function OJ(e=vn()){let t=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return t||`${e.replace(/\.json$/i,"")}.tick-state.json`}function NJ(){let e=I();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 AC(){let e=I();return Me("KYNVER_CRON_SECRET")||Me("OPENCLAW_CRON_SECRET")||Me("KYNVER_RUNTIME_SECRET")||Ue(e.agentOsId)?.trim()||Ue()?.trim()||null}function Os(){let e=vn(),t=OJ(e),r=NJ(),n=AC(),o=!!(r&&n),s=IJ(e),i=o&&(s||EC("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:t,lockPath:`${t}.lock`,fireBaseUrl:r,secret:n,tickEnabled:EC("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Fa("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Fa("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Fa("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Fa("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Fa("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}var Fr=p(()=>{"use strict";$();Mt()});import{promises as DJ}from"node:fs";async function IC(e){try{return await DJ.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function MJ(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t.entries)?t.entries:[]}catch{return[]}}async function od(e=vn()){let t=await IC(e);return MJ(t)}async function LJ(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 Dh(e=vn()){return await IC(e)!==null?{created:!1}:(await LJ(e,[]),{created:!0})}var Ns=p(()=>{"use strict";Fr()});import{existsSync as BJ,readFileSync as FJ}from"node:fs";import{dirname as Mh,join as TC}from"node:path";import{fileURLToPath as PC}from"node:url";function UJ(e){let t=Mh(PC(e));for(let r=0;r<6;r+=1){if(BJ(TC(t,"package.json")))return t;let n=Mh(t);if(n===t)break;t=n}throw new Error(`package.json not found above ${Mh(PC(e))}`)}function WJ(e=import.meta.url){let t=TC(UJ(e),"package.json"),r=JSON.parse(FJ(t,"utf8"));if(typeof r.version!="string"||!r.version.trim())throw new Error(`Missing package.json version at ${t}`);return r.version}var nt,Rn=p(()=>{"use strict";nt=WJ()});import{spawnSync as $J}from"node:child_process";import{readFileSync as KJ}from"node:fs";function HJ(e,t){let r=$J(e,t,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:15e3});return{status:r.status,stdout:r.stdout??""}}function jJ(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:null}function VJ(e){return Number.isInteger(e)&&e>0}function OC(e,t={}){if(!VJ(e))return null;let r=t.platform??process.platform,n=t.readText??(s=>KJ(s,"utf8")),o=t.run??HJ;try{if(r==="linux"){let s=jJ(n(`/proc/${e}/stat`));if(!s)return null;let i="";try{i=n("/proc/sys/kernel/random/boot_id").trim()}catch{}return`linux:${i}:${s}`}if(r==="darwin"){let s=o("ps",["-o","lstart=","-p",String(e)]),i=s.stdout.trim();return s.status===0&&i?`darwin:${i}`:null}if(r==="win32"){let s=`$p = Get-CimInstance Win32_Process -Filter "ProcessId=${e}"; if ($p) { $p.CreationDate.ToUniversalTime().ToString('o') }`,i=o("powershell.exe",["-NoProfile","-NonInteractive","-Command",s]),a=i.stdout.trim();return i.status===0&&a?`win32:${a}`:null}}catch{return null}return null}var Lh=p(()=>{"use strict"});import{createHash as JJ,randomUUID as FC}from"node:crypto";import{closeSync as YJ,constants as Bh,existsSync as qJ,mkdirSync as Fh,openSync as zJ,readFileSync as XJ,renameSync as Uh,rmSync as sd,writeFileSync as QJ}from"node:fs";import{createConnection as ZJ,createServer as NC}from"node:net";import{homedir as eY,tmpdir as tY}from"node:os";import nr from"node:path";function rY(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function UC(e){let t=e.stateRoot??nr.join(eY(),".kynver"),r=e.platform??process.platform,n=JJ("sha256").update(`${nr.resolve(t)}\0${e.agentOsId}`).digest("hex").slice(0,24),o=nr.join(t,"locks"),s=nr.join(o,`${n.slice(0,16)}.sock`);r==="linux"?s=`\0kynver-daemon-owner-${n}`:Buffer.byteLength(s)>100&&(s=nr.join(tY(),`kynver-owner-${n.slice(0,16)}.sock`));let i=nr.join(t,`daemon-owner-${rY(e.agentOsId)}.json`);return{lockKey:n,lockFile:nr.join(o,`daemon-owner-${n}.lock`),metadataFile:i,quarantineFile:i.replace(/\.json$/,".stale.json"),socketAddress:s}}function oY(e){Fh(nr.dirname(e),{recursive:!0});let t;try{t=zJ(e,Bh.O_RDWR|Bh.O_CREAT|nY)}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{YJ(t)}catch{}}}}}}function DC(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 sY(e,t=2e3){return new Promise(r=>{let n=ZJ({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 iY(e,t){e.startsWith("\0")||Fh(nr.dirname(e),{recursive:!0,mode:448});let r=NC(a=>a.destroy());if(await DC(r,e)==="listening")return{held:MC(r,e)};if(!t||e.startsWith("\0"))return{busy:!0};if(await sY(e))return{busy:!0};let o=`${e}.stale-${process.pid}-${FC().slice(0,8)}`;try{Uh(e,o),sd(o,{force:!0})}catch{}let s=NC(a=>a.destroy());return await DC(s,e).catch(()=>"in_use")==="listening"?{held:MC(s,e)}:{busy:!0}}function MC(e,t){e.unref();let r=!0;return{isHeld:()=>r&&e.listening,release:()=>{r&&(r=!1,e.close(),t.startsWith("\0")||sd(t,{force:!0}))}}}async function aY(e,t){return t==="win32"?oY(e.lockFile):iY(e.socketAddress,t!=="linux")}function lY(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 LC(e){try{let t=JSON.parse(XJ(UC(e).metadataFile,"utf8"));return lY(t)?t:null}catch{return null}}function BC(e,t){Fh(nr.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;QJ(r,`${JSON.stringify(t,null,2)}
|
|
89
|
-
`,{mode:384}),
|
|
88
|
+
`,{mode:384}),hJ(r,this.filePath)}}});import{randomBytes as wJ}from"node:crypto";import{existsSync as SJ,rmSync as _J}from"node:fs";function RC(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 rt(){return wC??=new Th,wC}var xJ,CJ,Th,wC,Os=p(()=>{"use strict";vC();vn();xJ=720*60*1e3,CJ=300*1e3,Th=class{rootDir;now;idleMs;keys=new Map;codes=new Map;codeListeners=new Set;constructor(t={}){this.rootDir=t.rootDir??Ua(),this.now=t.now??Date.now,this.idleMs=t.idleMs??xJ}store(t){return new od({agentOsId:t,rootDir:this.rootDir,now:this.now})}audit(t){return new sd(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 SJ(o)&&_J(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_${wJ(6).toString("hex")}`,createdAt:r,expiresAt:r+CJ};this.codes.set(n.id,n);let o=RC(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=>RC(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)}};wC=null});var SC=p(()=>{"use strict";U()});var _C=p(()=>{"use strict";os()});var xC=p(()=>{"use strict";$();SC();wt();_C()});function AJ(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 Oh(e){if(!e)return null;let t=AJ(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 Nh=p(()=>{"use strict"});function CC(e){return/\((?:401|403)\)/.test(e)?"access_denied":"transient"}var Dh=p(()=>{"use strict";$();wt();U();xC();Nh()});import{existsSync as IJ}from"node:fs";import{homedir as PJ}from"node:os";import TJ from"node:path";function EC(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 Wa(e,t,r=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<r?t:Math.floor(n)}function Rn(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||TJ.join(PJ(),".kynver","agent-os-cron.json")}function OJ(e=Rn()){let t=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return t||`${e.replace(/\.json$/i,"")}.tick-state.json`}function NJ(){let e=I();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 AC(){let e=I();return Me("KYNVER_CRON_SECRET")||Me("OPENCLAW_CRON_SECRET")||Me("KYNVER_RUNTIME_SECRET")||Ue(e.agentOsId)?.trim()||Ue()?.trim()||null}function Ns(){let e=Rn(),t=OJ(e),r=NJ(),n=AC(),o=!!(r&&n),s=IJ(e),i=o&&(s||EC("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:t,lockPath:`${t}.lock`,fireBaseUrl:r,secret:n,tickEnabled:EC("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Wa("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Wa("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Wa("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Wa("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Wa("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}var Ur=p(()=>{"use strict";$();Mt()});import{promises as DJ}from"node:fs";async function IC(e){try{return await DJ.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function MJ(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t.entries)?t.entries:[]}catch{return[]}}async function id(e=Rn()){let t=await IC(e);return MJ(t)}async function LJ(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 Mh(e=Rn()){return await IC(e)!==null?{created:!1}:(await LJ(e,[]),{created:!0})}var Ds=p(()=>{"use strict";Ur()});import{existsSync as BJ,readFileSync as FJ}from"node:fs";import{dirname as Lh,join as TC}from"node:path";import{fileURLToPath as PC}from"node:url";function UJ(e){let t=Lh(PC(e));for(let r=0;r<6;r+=1){if(BJ(TC(t,"package.json")))return t;let n=Lh(t);if(n===t)break;t=n}throw new Error(`package.json not found above ${Lh(PC(e))}`)}function WJ(e=import.meta.url){let t=TC(UJ(e),"package.json"),r=JSON.parse(FJ(t,"utf8"));if(typeof r.version!="string"||!r.version.trim())throw new Error(`Missing package.json version at ${t}`);return r.version}var nt,wn=p(()=>{"use strict";nt=WJ()});import{spawnSync as $J}from"node:child_process";import{readFileSync as KJ}from"node:fs";function HJ(e,t){let r=$J(e,t,{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:15e3});return{status:r.status,stdout:r.stdout??""}}function jJ(e){let t=e.lastIndexOf(")");if(t<0)return null;let n=e.slice(t+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:null}function VJ(e){return Number.isInteger(e)&&e>0}function OC(e,t={}){if(!VJ(e))return null;let r=t.platform??process.platform,n=t.readText??(s=>KJ(s,"utf8")),o=t.run??HJ;try{if(r==="linux"){let s=jJ(n(`/proc/${e}/stat`));if(!s)return null;let i="";try{i=n("/proc/sys/kernel/random/boot_id").trim()}catch{}return`linux:${i}:${s}`}if(r==="darwin"){let s=o("ps",["-o","lstart=","-p",String(e)]),i=s.stdout.trim();return s.status===0&&i?`darwin:${i}`:null}if(r==="win32"){let s=`$p = Get-CimInstance Win32_Process -Filter "ProcessId=${e}"; if ($p) { $p.CreationDate.ToUniversalTime().ToString('o') }`,i=o("powershell.exe",["-NoProfile","-NonInteractive","-Command",s]),a=i.stdout.trim();return i.status===0&&a?`win32:${a}`:null}}catch{return null}return null}var Bh=p(()=>{"use strict"});import{createHash as JJ,randomUUID as FC}from"node:crypto";import{closeSync as YJ,constants as Fh,existsSync as qJ,mkdirSync as Uh,openSync as zJ,readFileSync as XJ,renameSync as Wh,rmSync as ad,writeFileSync as QJ}from"node:fs";import{createConnection as ZJ,createServer as NC}from"node:net";import{homedir as eY,tmpdir as tY}from"node:os";import nr from"node:path";function rY(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function UC(e){let t=e.stateRoot??nr.join(eY(),".kynver"),r=e.platform??process.platform,n=JJ("sha256").update(`${nr.resolve(t)}\0${e.agentOsId}`).digest("hex").slice(0,24),o=nr.join(t,"locks"),s=nr.join(o,`${n.slice(0,16)}.sock`);r==="linux"?s=`\0kynver-daemon-owner-${n}`:Buffer.byteLength(s)>100&&(s=nr.join(tY(),`kynver-owner-${n.slice(0,16)}.sock`));let i=nr.join(t,`daemon-owner-${rY(e.agentOsId)}.json`);return{lockKey:n,lockFile:nr.join(o,`daemon-owner-${n}.lock`),metadataFile:i,quarantineFile:i.replace(/\.json$/,".stale.json"),socketAddress:s}}function oY(e){Uh(nr.dirname(e),{recursive:!0});let t;try{t=zJ(e,Fh.O_RDWR|Fh.O_CREAT|nY)}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{YJ(t)}catch{}}}}}}function DC(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 sY(e,t=2e3){return new Promise(r=>{let n=ZJ({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 iY(e,t){e.startsWith("\0")||Uh(nr.dirname(e),{recursive:!0,mode:448});let r=NC(a=>a.destroy());if(await DC(r,e)==="listening")return{held:MC(r,e)};if(!t||e.startsWith("\0"))return{busy:!0};if(await sY(e))return{busy:!0};let o=`${e}.stale-${process.pid}-${FC().slice(0,8)}`;try{Wh(e,o),ad(o,{force:!0})}catch{}let s=NC(a=>a.destroy());return await DC(s,e).catch(()=>"in_use")==="listening"?{held:MC(s,e)}:{busy:!0}}function MC(e,t){e.unref();let r=!0;return{isHeld:()=>r&&e.listening,release:()=>{r&&(r=!1,e.close(),t.startsWith("\0")||ad(t,{force:!0}))}}}async function aY(e,t){return t==="win32"?oY(e.lockFile):iY(e.socketAddress,t!=="linux")}function lY(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 LC(e){try{let t=JSON.parse(XJ(UC(e).metadataFile,"utf8"));return lY(t)?t:null}catch{return null}}function BC(e,t){Uh(nr.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;QJ(r,`${JSON.stringify(t,null,2)}
|
|
89
|
+
`,{mode:384}),Wh(r,e)}function cY(e){if(!qJ(e.metadataFile))return null;try{return Wh(e.metadataFile,e.quarantineFile),e.quarantineFile}catch{return ad(e.metadataFile,{force:!0}),null}}function WC(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 ld(e){let t=e.platform??process.platform,r=UC(e),n=await aY(r,t);if("busy"in n){let u=LC(e);return{ok:!1,reason:"owner_conflict",holder:u,remedy:WC(u)}}let o=cY(r),s=(e.now??new Date).toISOString(),i={version:1,agentOsId:e.agentOsId,ownerKind:e.ownerKind,instanceId:FC(),pid:process.pid,processStart:e.processStart!==void 0?e.processStart:OC(process.pid),runtimeVersion:nt,platform:t,acquiredAt:s,lastRenewedAt:s};try{BC(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{BC(r.metadataFile,i)}catch{}}},release(){if(l)return;l=!0,LC(e)?.instanceId===i.instanceId&&ad(r.metadataFile,{force:!0}),a.release()}},quarantinedMetadata:o}}var nY,cd=p(()=>{"use strict";wn();Bh();nY=Fh.UV_FS_O_EXLOCK??268435456});var uY,dY,pY,fY,Ms,$h=p(()=>{"use strict";uY="embedded-1",dY=[{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"}],pY={"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(`
|
|
90
90
|
`),"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(`
|
|
91
91
|
`),"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(`
|
|
92
92
|
`),"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(`
|
|
93
|
-
`)},fY={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},
|
|
93
|
+
`)},fY={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Ms={version:uY,generatedAt:"1970-01-01T00:00:00.000Z",personas:dY,instructions:pY,policyThresholds:fY}});function KC(){return Ls}function mo(){return Ls.version}function or(){return $C}function HC(e,t){Ls=e,$C=t}function $a(e){let t=Ls.instructions[e];if(typeof t=="string"&&t.trim())return t;let r=Ms.instructions[e];return typeof r=="string"?r:""}function Bs(e,t){let r=Ls.policyThresholds[e];if(typeof r=="number"&&Number.isFinite(r))return r;let n=Ms.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:t}function jC(e){if(!e)return null;let t=e.trim().toLowerCase();return Ls.personas.find(r=>r.slug===t)??null}var Ls,$C,Sn=p(()=>{"use strict";$h();Ls=Ms,$C="embedded"});import VC from"node:os";function Wr(e){return e?.trim()?e.trim():null}function $e(e={}){let t=e.env??process.env,r=I();return{runnerId:Wr(r.runnerId)??Wr(t.KYNVER_RUNTIME_ID)??Wr(t.OPENCLAW_RUNTIME_ID)??Wr(t.HOSTNAME)??VC.hostname(),hostname:Wr(t.HOSTNAME)??VC.hostname(),profile:Wr(t.KYNVER_RUNNER_PROFILE)??Wr(t.OPENCLAW_RUNNER_PROFILE),harnessRepo:Wr(t.KYNVER_HARNESS_REPO)??Wr(t.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:mo()}}var $r=p(()=>{"use strict";$();Sn();He()});import mY from"node:os";function Kh(e=I(),t=process.env){let r=ut(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=rr(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=Eu(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=Ia(r.boxKind,mY.hostname()),s=!0,n.push(`persisted boxId=${i.boxId} to ~/.kynver/config.json`)),ga(r.boxKind,o??0))o=4,i.maxConcurrentWorkers=4,i.maxConcurrentWorkersSource="setup-auto",s=!0,n.push(`clamped Forge maxConcurrentWorkers to ${4} (was ${e.maxConcurrentWorkers}; workspace aggregate caps are Ghost-only)`);else if(o!=null){let c=Ir(r.boxKind,o);c!==o&&(o=c,i.maxConcurrentWorkers=c,s=!0,n.push(`clamped maxConcurrentWorkers to ${c} for ${r.boxKind} pool`))}return s&&Ge(i),{repaired:s,boxKind:r.boxKind,maxConcurrentWorkers:o??4,warnings:n}}var Hh=p(()=>{"use strict";$();He();Ss();ls();no()});function Kt(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 Fs=p(()=>{"use strict"});function gY(e){let t=e.runnerId??$e().runnerId;return`${e.baseUrl.replace(/\/+$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime-control/runner?runnerId=${encodeURIComponent(t)}`}async function GC(e,t){try{return(await(e.fetchImpl??fetch)(gY(e),{method:"POST",headers:Kt(e.secret),body:JSON.stringify({ack:t})})).ok}catch{return!1}}var jh=p(()=>{"use strict";Fs();$r();gn()});var JC=p(()=>{"use strict";$();U();jh();gn()});function YC(){let e=process.env.KYNVER_GIT_COMMIT_SHA?.trim();return{contractVersion:1,nodeVersion:process.versions.node,runtimePackageVersion:nt,buildIdentity:e&&hY.test(e)?e.toLowerCase():null,platform:process.platform,arch:process.arch}}var hY,qC=p(()=>{"use strict";wn();hY=/^[0-9a-f]{7,40}$/i});import{mkdirSync as yY,readFileSync as Ube,renameSync as kY,writeFileSync as bY}from"node:fs";import{homedir as vY}from"node:os";import zC from"node:path";function RY(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return zC.join(vY(),".kynver",`daemon-heartbeat-${t}.json`)}function XC(e){try{let t=RY(e.agentOsId);yY(zC.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:YC(),...e.owner?{owner:e.owner}:{}},n=`${t}.tmp-${process.pid}`;bY(n,JSON.stringify(r),"utf8"),kY(n,t)}catch{}}var Vh=p(()=>{"use strict";qC();Bh()});function Gh(e,t,r=6e4){let n=t-e;return n>r?n:null}var Jh=p(()=>{"use strict"});function SY(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 QC(e,t){let r=SY(e);if(r!==null&&r>1)throw new Yh(r,1);e.exec("BEGIN IMMEDIATE");try{for(let n of wY)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 Yh,wY,ZC=p(()=>{"use strict";Yh=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"}},wY=[`CREATE TABLE IF NOT EXISTS local_meta (
|
|
94
94
|
key TEXT PRIMARY KEY,
|
|
95
95
|
value TEXT NOT NULL
|
|
96
96
|
) STRICT`,`CREATE TABLE IF NOT EXISTS process_identity (
|
|
@@ -117,7 +117,7 @@ child.on("exit", (code, signal) => finish(code, signal));
|
|
|
117
117
|
created_at TEXT NOT NULL,
|
|
118
118
|
PRIMARY KEY (scope, seq)
|
|
119
119
|
) STRICT`]});import{existsSync as _Y,realpathSync as xY,readFileSync as CY}from"node:fs";import eE from"node:path";function IY(){try{return CY("/proc/self/mounts","utf8")}catch{return null}}function PY(e){let t=eE.resolve(e);for(let r=0;r<64;r+=1){if(_Y(t))try{return xY.native(t)}catch{return t}let n=eE.dirname(t);if(n===t)return t;t=n}return t}function TY(e){return e.replace(/\\(\d{3})/g,(t,r)=>String.fromCharCode(Number.parseInt(r,8)))}function OY(e){let t=[];for(let r of e.split(`
|
|
120
|
-
`)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:TY(n[1]),fsType:n[2]})}return t}function tE(e,t=process.platform){return t==="win32"?e.replace(/\\/g,"/"):e}function NY(e,t){let r=null,n=tE(e);for(let o of t){let s=tE(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!r||o.mountPoint.length>r.mountPoint.length)&&(r=o)}return r}function rE(e,t){let n=(t?.resolveRealPath??PY)(e),o=(t?.mountsSource??IY)();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=NY(n,OY(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 AY.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}:EY.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 EY,AY,nE=p(()=>{"use strict";EY=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),AY=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 MY}from"node:fs";import LY from"node:path";import{DatabaseSync as BY}from"node:sqlite";var
|
|
120
|
+
`)){let n=r.trim().split(/\s+/);n.length<3||t.push({mountPoint:TY(n[1]),fsType:n[2]})}return t}function tE(e,t=process.platform){return t==="win32"?e.replace(/\\/g,"/"):e}function NY(e,t){let r=null,n=tE(e);for(let o of t){let s=tE(o.mountPoint),i=s.endsWith("/")?s:`${s}/`;(n===s||`${n}/`.startsWith(i))&&(!r||o.mountPoint.length>r.mountPoint.length)&&(r=o)}return r}function rE(e,t){let n=(t?.resolveRealPath??PY)(e),o=(t?.mountsSource??IY)();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=NY(n,OY(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 AY.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}:EY.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 EY,AY,nE=p(()=>{"use strict";EY=new Set(["ext4","ext3","ext2","btrfs","xfs","f2fs","zfs","tmpfs","overlay","overlayfs"]),AY=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 MY}from"node:fs";import LY from"node:path";import{DatabaseSync as BY}from"node:sqlite";var dd,FY,UY,Ka,oE=p(()=>{"use strict";ZC();nE();dd=class extends Error{constructor(t){super(`local-run-store refused: ${t}`),this.name="FilesystemPolicyError"}},FY="local-run-store.sqlite",UY=5e3,Ka=class e{db;now;databasePath;constructor(t,r,n){this.db=t,this.databasePath=r,this.now=n}static open(t){let r=rE(t.directory,t.classifyOptions);if(r.verdict!=="accepted")throw new dd(r.reason);MY(t.directory,{recursive:!0,mode:448});let n=LY.join(t.directory,t.filename??FY),o=new BY(n,{timeout:t.busyTimeoutMs??UY}),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 dd(`journal_mode did not switch to WAL (got '${i?.journal_mode}') \u2014 filesystem unsuitable.`);o.exec("PRAGMA synchronous = NORMAL"),QC(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
|
|
121
121
|
(process_key, pid, runtime_version, node_version, started_at, registered_at)
|
|
122
122
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
123
123
|
ON CONFLICT(process_key) DO UPDATE SET
|
|
@@ -141,85 +141,85 @@ child.on("exit", (code, signal) => finish(code, signal));
|
|
|
141
141
|
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
|
|
142
142
|
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)
|
|
143
143
|
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
|
|
144
|
-
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 WY,renameSync as $Y}from"node:fs";function KY(e,t){let r=`${e}.quarantine-${t}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;WY(o)&&$Y(o,`${r}${n}`)}return r}function sE(e){let t=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),r=null;try{let s=
|
|
145
|
-
`)}var Lve,Bve,Fve,Uve,Qh=p(()=>{"use strict";mn();JC();$();jh();U();Vu();Gh();Ka();Lve=15*6e4,Bve=2*6e4,Fve=5*6e4,Uve=30*6e4});import oq from"node:path";function sq(e){return oq.resolve(Le(e.trim()))}function Us(e,t,r){let n=e?.trim();return n?{repo:sq(n),source:t,persistedInConfig:r}:null}function bE(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ha(e={}){let t=e.env??process.env,r=e.config??I(),n=Us(r.defaultRepo,"config",!0);if(n)return n;let o=Us(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Us(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||bE(Yc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function vE(e={}){let t=e.env??process.env,r=e.config??I(),n=Us(r.defaultRepo,"config",!0);if(n)return n;let o=Us(t.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Us(t.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return s||bE(qc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl,home:e.home}))}function RE(e,t){let r={...t??I(),defaultRepo:Le(e)};return Ge(r),Bu(r)}function Zh(e){return{defaultRepo:Ze(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var Ws=p(()=>{"use strict";$();ua();bt()});import iq from"node:path";import{homedir as aq}from"node:os";function wE(e){let t=I(),r=vE({...e,config:t});if(!r)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Ze(ey),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:Ze(ey),resolved:Zh(r),config:ah(t)};let n=RE(r.repo,t),o=Zh({...r,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Ze(ey),resolved:o,config:ah(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}var ey,SE=p(()=>{"use strict";bt();$();Ws();ey=iq.join(aq(),".kynver","config.json")});import{mkdirSync as lq,readFileSync as cq,renameSync as uq,writeFileSync as dq}from"node:fs";import{homedir as pq}from"node:os";import _E from"node:path";function xE(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return _E.join(pq(),".kynver",`instruction-bundle-${t}.json`)}function CE(e,t){try{let r=xE(e);lq(_E.dirname(r),{recursive:!0});let n=`${r}.tmp-${process.pid}`;dq(n,JSON.stringify(t),{encoding:"utf8",mode:384}),uq(n,r)}catch{}}function EE(e){try{let t=cq(xE(e),"utf8"),r=JSON.parse(t);return Na(r)?r:null}catch{return null}}var AE=p(()=>{"use strict";yn()});function IE(e,t=process.env){for(let n of Gu(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY))if($x(n)===e)return n;if(e===fq&&!Ju(t))return null;let r=mq[e];return r?Oa(r):null}var fq,mq,PE=p(()=>{"use strict";yn();fq="ib-3bab6314f0ba",mq={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38","ib-49e76cb8052c":"8fc646b5c4f8f402120477452608398f035c3cddd2e7aa8bb328e97b84dcf6d8","ib-f990c4fcc3dd":"fb4119813196e466429716bab7055c528cd79b4ec94c40a9c63c5c8313548df6"}});import{createPublicKey as gq,verify as hq}from"node:crypto";function kq(e){return gq({key:Buffer.concat([yq,Buffer.from(e)]),format:"der",type:"spki"})}function bq(e,t){if(!Na(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(ft(e.bundle),"utf8");return hq(null,n,kq(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 TE(e,t=process.env){if(!Na(e))return{ok:!1,reason:"malformed signed bundle payload"};let r=IE(e.publicKeyId,t);return r?bq(e,r):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var yq,OE=p(()=>{"use strict";PE();yn();yq=Buffer.from("302a300506032b6570032100","hex")});function Va(e,t){console.error(JSON.stringify({event:e,...t}))}function NE(e,t,r){let n=TE(e);return n.ok?(HC(n.bundle,t),t==="server"&&CE(r,e),!0):(Va("instruction_bundle_signature_invalid",{agentOsId:r,source:t,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function ja(e){if(Hr.diskCacheTried)return!1;Hr.diskCacheTried=!0;let t=EE(e);return t?NE(t,"disk",e):!1}async function DE(e){let t=e.nowMs??Date.now(),r=()=>({source:or(),version:fo(),updated:!1});if(!e.force&&t-Hr.lastAttemptAtMs<vq)return r();Hr.lastAttemptAtMs=t;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return or()==="embedded"&&ja(e.agentOsId)?{...r(),updated:!0}:r();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Rq);try{let l=Kt(o);delete l["Content-Type"],Hr.etag&&or()==="server"&&(l["If-None-Match"]=Hr.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 Hr.routeMissingLogged||(Hr.routeMissingLogged=!0,Va("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),or()==="embedded"&&ja(e.agentOsId)?{...r(),updated:!0}:r();if(!c.ok)return Va("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),or()==="embedded"&&ja(e.agentOsId)?{...r(),updated:!0}:r();let u=await c.json().catch(()=>null);return!u||!NE(u,"server",e.agentOsId)?or()==="embedded"&&ja(e.agentOsId)?{...r(),updated:!0}:r():(Hr.etag=c.headers.get("etag"),Va("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:fo(),publicKeyId:u.publicKeyId}),{...r(),updated:!0})}catch(l){return Va("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),or()==="embedded"&&ja(e.agentOsId)?{...r(),updated:!0}:r()}finally{clearTimeout(a)}}var vq,Rq,Hr,ME=p(()=>{"use strict";Bs();AE();wn();OE();vq=15*6e4,Rq=1e4,Hr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1}});import wq from"node:os";function LE(e,t){console.error(JSON.stringify({event:"daemon_identity",level:e,message:t}))}function BE(e=I(),t=process.env){let r=ut(t,e),n=ks({config:e,totalMemBytes:wq.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);fa(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)LE("warn",c);for(let c of s)LE("error",c);return{ok:l,box:r,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}var FE=p(()=>{"use strict";$();He();as();Sa()});import{spawnSync as Sq}from"node:child_process";import{existsSync as _q,readFileSync as xq}from"node:fs";import Cq from"node:path";function Aq(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+Eq<s.startedAtMs||o.push({workerName:s.workerName,workerPid:s.pid,orphanPid:i.pid}));return o}function Iq(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 Pq(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=Sq("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:3e4});if(o.status!==0)return[];try{return Iq(o.stdout??"")}catch{return[]}}function Tq(e,t=ne){try{let r=Ee().find(o=>o.id===e);if(!r)return[];let n=[];for(let o of Object.keys(r.workers||{})){let s=Cq.join(G(r.id),"workers",W(o),"worker.json");if(!_q(s))continue;let i=JSON.parse(xq(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 UE(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return{checkedWorkers:0,killed:[]};let n=t.isAlive??ne,o=(t.collect??(l=>Tq(l,n)))(e);if(o.length===0)return{checkedWorkers:0,killed:[]};let s=(t.query??Pq)(o.map(l=>l.pid)),i=t.killTree??he,a=Aq(s,o,n).map(l=>({...l,result:i(l.orphanPid,"SIGKILL")}));return{checkedWorkers:o.length,killed:a}}var Eq,WE=p(()=>{"use strict";Q();U();ns();Eq=5e3});import{mkdirSync as Oq,readFileSync as Nq,renameSync as Dq,writeFileSync as Mq}from"node:fs";import{homedir as Lq}from"node:os";import pd from"node:path";function $E(){return pd.join(Lq(),".kynver")}function Bq(e=$E()){return pd.join(e,"doctor-native-windows.json")}function KE(e=$E()){return pd.join(e,"native-windows-state.json")}function Fq(e,t){Oq(pd.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;Mq(r,`${JSON.stringify(t,null,2)}
|
|
146
|
-
`,{mode:384}),Dq(r,e)}function
|
|
147
|
-
`,"utf8");try{await Ja.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await Ja.unlink(n).catch(()=>{})}}async function oA(e,t){await lz(e,t)}function sA(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 md,cy=p(()=>{"use strict";md={version:1,jobs:{}}});function cz(e,t){if(!e.inflightUntil)return!1;let r=Date.parse(e.inflightUntil);return!Number.isNaN(r)&&r>t}function uz(e){return!!e.completedAt}function dz(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 pz(e,t,r){if(t.nextFireAt)return t.nextFireAt;let n=rA(e.spec,r);return t.nextFireAt=n,n}function fz(e,t,r,n){if(e.paused||uz(t)||cz(t,r)||!dz(e,t,n,r))return!1;let o=t.nextFireAt?Date.parse(t.nextFireAt):NaN;return Number.isNaN(o)?!1:r>=o}function mz(e,t,r){e.spec.scheduleKind==="cron"&&(t.nextFireAt=ay(e.spec,r))}async function uy(e={}){let t=e.env??Os(),r=e.now??new Date,n=r.getTime(),o=e.agentOsIdFilter?Ue(e.agentOsIdFilter):Ue();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=QE(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 od(t.storePath),a=e.agentOsIdFilter?i.filter(h=>h.spec.target.agentOsId===e.agentOsIdFilter):i,l=await ly(t.statePath),c=[];for(let h of a){let y=sA(l,h.providerScheduleId);pz(h,y,r),fz(h,y,n,t)&&c.push({entry:h,job:y})}c.sort((h,y)=>{let v=Date.parse(h.job.nextFireAt??"")||0,k=Date.parse(y.job.nextFireAt??"")||0;return v-k});let u=0,d=0,m=0,f=t.maxCatchUpPerTick,g=[];for(let{entry:h,job:y}of c){if(t.missedRunPolicy==="skip"&&h.spec.scheduleKind==="cron"){let v=Date.parse(y.nextFireAt??"");if(!Number.isNaN(v)&&v<n-t.tickIntervalMs*2){y.nextFireAt=ay(h.spec,r),m++;continue}}if(f<=0){m++;continue}y.inflightUntil=new Date(n+t.inflightLeaseMs).toISOString(),y.lastAttemptAt=r.toISOString(),mz(h,y,r);try{let v=Ue(h.spec.target.agentOsId)||t.secret;if(!v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:"missing_fire_credentials"});continue}let k=await YE({entry:h,baseUrl:t.fireBaseUrl,secret:v,fetchFn:e.fetchFn});y.inflightUntil=null,k.ok?(y.lastFiredAt=r.toISOString(),y.consecutiveFailures=0,h.spec.scheduleKind==="runAt"&&(y.completedAt=r.toISOString(),y.nextFireAt=null),u++,f--):(y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:v instanceof Error?v.message:String(v)})}}return await oA(t.statePath,l),{enabled:!0,scanned:a.length,due:c.length,fired:u,skippedJobs:m,errors:d,...g.length?{errorDetails:g}:{}}}finally{ZE(t.lockPath)}}var dy=p(()=>{"use strict";Fr();qE();eA();$();nA();Ns();cy()});import iA from"node:path";function gd(e){let t=K(iA.join(G(e),aA),null);return fE(e,t)??t}function lA(e,t){let r={...t,updatedAt:new Date().toISOString()};Se(iA.join(G(e),aA),r),pE(e,r)}function cA(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 aA,py=p(()=>{"use strict";U();Q();Ka();aA="mesh-cron-lease.json"});function pA(e){Ya=e}function fA(e=Date.now()){return!Ya||Ya.stallCount===uA&&e-dA<9e5?null:(uA=Ya.stallCount,dA=e,Ya)}var Ya,uA,dA,fy=p(()=>{"use strict";Ya=null,uA=-1,dA=0});function gA(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 mA(e){return new Error(`callback timeout after ${e}ms`)}async function hA(e,t){let r=gA(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(mA(r))},r)})])}catch(i){throw s?mA(r):i}finally{o&&clearTimeout(o)}}function yA(e,t){let r=gA(t);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:r}}}async function mo(e,t,r,n){try{return await hA(async o=>{let s=await Ce(e,{method:"POST",headers:Kt(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 yA(o,n?.timeoutMs)}}async function me(e,t,r,n){let o=await mo(e,t,r,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Mx(t,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await mo(e,s.token,r,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function my(e,t,r){try{return await hA(async n=>{let o=await Ce(e,{method:"GET",headers:Kt(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 yA(n,r?.timeoutMs)}}var qe=p(()=>{"use strict";Bs();wt();$()});function kA(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}var bA=p(()=>{"use strict"});function qa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function vA(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 gy(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 RA=p(()=>{"use strict"});function yz(e){return gz.includes(e)}function kz(e){return hz.includes(e)}function wA(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||yz(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:kz(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}function vz(e){if(!e)return null;let t=e.trim().toLowerCase(),r=bz.get(t)??null,n=jC(t);if(!n)return r;let o=wA(n);return r?{...o,dispatchLane:r.dispatchLane,defaultRoleLane:r.defaultRoleLane}:o}function hy(e){return vz(e)?.defaultRoleLane??null}function _A(){return SA.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}var gz,hz,SA,bz,hd=p(()=>{"use strict";Wh();wn();gz=["implementation","review","landing"],hz=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];SA=Ds.personas.map(wA),bz=new Map(SA.map(e=>[e.slug,e]))});function xA(e){return(e??"").trim().toLowerCase()}function Rz(e){switch(xA(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 wz(e){let t=xA(e);if(!t)return;if(t==="implementation"||t==="review"||t==="landing"||t==="any")return t;let r=Rz(t);if(r)return r;if(t==="implement"||t==="repair"||t==="coding")return"implementation";if(t==="land"||t==="merge")return"landing"}function CA(e){return wz(e)??"any"}var EA=p(()=>{"use strict";hd()});function Sz(e=process.env){let t=I();return Bt(t,e)!=="forge"}function yd(e,t=process.env){if(Sz(t))return e?.maxConcurrentWorkers??void 0}async function kd(e,t){let r=ge(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 my(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 yy=p(()=>{"use strict";qe();$();He()});async function AA(e,t=_z){let r=await t.fetchPreferences(e.agentOsId,e.args),n=t.configuredOverride(r,e.env);return t.observe({runId:e.runId,configuredMaxWorkersOverride:n})}var _z,IA=p(()=>{"use strict";yy();ys();_z={fetchPreferences:kd,configuredOverride:yd,observe:wa}});function bd(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function ky(e){return e.toLowerCase()}function xz(e){let t=bd(e,"roleLane");if(t)return t;let r=ky(bd(e,"executorRef")),n=ky(bd(e,"title")),o=ky(bd(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=hy(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function PA(e){let t=xz(e);return t?{...e,roleLane:t}:e}var TA=p(()=>{"use strict";hd()});function OA(e){let t=e.trim();return Cz.test(t)||Ez.test(t)}function NA(e){let t=e.trim().toLowerCase();return t.startsWith("gpt-")||t.startsWith("gpt5")||t.includes("codex")}function by(e){let t=e.trim().toLowerCase();return t.includes("composer")||t.includes("cursor")}function DA(e){return e.trim().toLowerCase().startsWith("gemini-")}function Az(e){return NA(e)?"codex":OA(e)?"claude":DA(e)?"gemini":(by(e),"cursor")}function Iz(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==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}: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 Pz(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?OA(n)||NA(n)||by(n)||DA(n)?{lane:r,model:n,provider:Az(n),rule:"executor_ref:harness_lane_model"}:{lane:r,rule:"executor_ref:harness_lane"}:{lane:r,rule:"executor_ref:harness_lane"}}function mt(e){let t=typeof e=="string"?e.trim():"";return t?Iz(t)??Pz(t):null}function MA(e){let t=mt(e);return t?!!(t.provider&&t.provider!=="cursor"||t.model&&!by(t.model)):!1}var Cz,Ez,vd=p(()=>{"use strict";Cz=/^claude[-_]/i,Ez=/^(?:opus|sonnet|haiku)\b/i});function za(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function jr(e){if(!e?.trim())return!1;let t=e.trim().toLowerCase();return Tz.has(t)?!0:t.includes("claude")||t.includes("opus")}function Rd(e){if(!e)return!1;let t=e.workerProviderOverride;if(typeof t=="string"&&jr(t))return!0;let r=za(e,"executorRef").toLowerCase();if(r==="provider:claude"||r.startsWith("provider:claude:")||r.includes("claude-worker-override")||r.includes("operator-claude"))return!0;let n=mt(za(e,"executorRef"));if(n?.provider&&jr(n.provider)||n?.model&&jr(Nz(n.model)))return!0;let o=za(e,"description");if(Oz.some(i=>i.test(o)))return!0;let s=za(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function Nz(e){let t=e.trim().toLowerCase();return/^claude[-_]/.test(t)||/^(?:opus|sonnet|haiku)\b/.test(t)?"claude":t}function Dz(e,t){return{provider:Vr,model:wd,rule:`policy:cursor_default${t}`,requestedModel:e}}function Lz(e){return Mz.some(t=>e.startsWith(t))}function vy(e){if(!e)return!1;let t=e.workerProviderOverride;return typeof t=="string"&&t.trim()||mt(za(e,"executorRef"))?.provider?!0:Rd(e)}function LA(e){let{routing:t,task:r}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&jr(n))return{...t,provider:"claude",rule:t.rule.startsWith("explicit:")?t.rule:"explicit:operator_provider"};if(n||Lz(t.rule)||vy(r)||!jr(t.provider))return t;let o=t.rule&&t.rule!=="default:global"?`:${t.rule.replace(/:/g,"_")}`:"";return Dz(t.model,o)}function BA(e,t=Vr){let r=e?.trim();return r?et(r):t}var Vr,Tz,Oz,Mz,go=p(()=>{"use strict";vd();Sd();Aa();Aa();Vr="cursor",Tz=new Set(["claude","opus","anthropic"]),Oz=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];Mz=["explicit:","executor_ref:","factory:","task:"]});function $s(e){return FA[e]}function UA(){return Object.values(FA)}var FA,Ry=p(()=>{"use strict";FA={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 WA}from"node:crypto";import{statSync as Bz}from"node:fs";import{spawnSync as $A}from"node:child_process";function sr(e){try{let t=Bz(e),r=`${e}|${t.size}|${t.mtimeMs}`;return WA("sha256").update(r).digest("hex").slice(0,16)}catch{return}}function Ks(e){return WA("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function _t(e,t){for(let r of t){let n=process.env[r]?.trim();if(n)return n}return e}function jt(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=oe(e,t),i=$A(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 _d(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=oe(e,t);return $A(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 ho=p(()=>{"use strict";Te()});import{existsSync as Fz}from"node:fs";import{homedir as Uz}from"node:os";import Xa from"node:path";function $z(){let e=Uz();return[process.env.CODEX_HOME?.trim()?Xa.join(Xa.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Xa.join(e,".codex","auth.json"),Xa.join(e,".config","codex","auth.json")].filter(r=>!!r)}function Kz(e){return Xa.dirname(e)}function Hz(e){let t,r;for(let n of $z()){if(!Fz(n))continue;t??=n;let o=jt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Kz(n)}});if(r??=o,o.ok)return{authPath:n,login:o}}return{authPath:t,login:r??jt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function KA(e=new Date().toISOString()){let t=_t(Wz,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ks("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}=Hz(t),o=!!r&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:r?sr(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 Wz,HA=p(()=>{"use strict";ho();Wz="codex"});import{existsSync as jz}from"node:fs";import{homedir as Vz}from"node:os";import wy from"node:path";function Gz(){let e=process.env.HERMES_HOME?.trim(),t=e?wy.resolve(e):wy.join(Vz(),".hermes");return wy.join(t,"auth.json")}function xd(e=new Date().toISOString()){let t=_t("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=jt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Gz(),o=jz(n),s=_d(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?sr(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 Sy=p(()=>{"use strict";ho()});function Hs(e=new Date().toISOString()){let t=KA(e);if(t.ready)return{...t,path:"codex_cli"};let r=xd(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 Cd=p(()=>{"use strict";HA();Sy()});function GA(e,t){let r=$s(e);return t==="privileged"?r.supportsPrivilegedPlatformActions:t==="low"?r.supportsLowRiskOrchestration:!0}function Jz(e,t){let r=$s(e.providerId),n=$s(t.providerId),o=jA.indexOf(r.costTier)-jA.indexOf(n.costTier);if(o!==0)return o;let s=VA[e.binding.authSource]-VA[t.binding.authSource];return s!==0?s:e.providerId.localeCompare(t.providerId)}function _y(e){let t=UA().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&GA(a.providerId,e.riskClass));if(t.length===0)return null;let n=[...t].sort(Jz)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return GA(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 jA,VA,JA=p(()=>{"use strict";Ry();jA=["low","medium","high"],VA={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3}});import{existsSync as Yz}from"node:fs";import{homedir as qz}from"node:os";import zz from"node:path";function Qz(){let e=qz();return[zz.join(e,".claude",".credentials.json")]}function YA(e=new Date().toISOString()){let t=_t(Xz,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:Ks("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=jt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Qz().find(i=>Yz(i)),o=_d(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?sr(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 Xz,qA=p(()=>{"use strict";ho();Xz="claude"});function xt(e,t={}){let r=aa(e);if(!t.reviewWorker)return r;let n={...r,[Zz]:"1"};for(let o of e4)delete n[o];return n}var Zz,e4,yo=p(()=>{"use strict";la();Zz="KYNVER_NO_PROD_DB_CREDENTIALS",e4=["KYNVER_ENV_FILE"]});function zA(e){return e.replace(t4,"")}function Ed(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function r4(e){let t=e.trim().toLowerCase();return t.startsWith("gemini-")||t==="auto"||t==="pro"||t==="flash"||t==="flash-lite"}function o4(e){let t=e.trim().toLowerCase();return n4.has(t)?"auto":null}function xy(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=zA(r).trim()||t;return XA.test(o)||!Ed(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 js(e,t){let r=(e??"").trim();return r?Ed(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 Vs(e,t){let r=(e??"").trim();if(r)return{ok:!0,model:r,normalized:!1};let n=(t??"").trim();return n?{ok:!0,model:n,normalized:!1}:{ok:!1,model:"",normalized:!1,note:'the "openai-compatible" provider has no universal default model \u2014 pass --model (any id your endpoint serves, e.g. llama3.1, qwen2.5-coder, gpt-4o-mini) or set KYNVER_WORKER_MODEL on the daemon host.'}}function Gs(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=zA(r).trim()||t;return Ed(o)||!r4(o)&&XA.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 Js(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let n=o4(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")`}:Ed(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 t4,XA,n4,Vt=p(()=>{"use strict";t4=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;XA=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;n4=new Set(["cursor"])});import{existsSync as Qa,readdirSync as s4}from"node:fs";import ko from"node:path";function a4(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 l4(e){let t=ko.join(e,"versions");if(!Qa(t))return null;let r=null,n=-1;for(let o of s4(t,{withFileTypes:!0})){if(!o.isDirectory()||!i4.test(o.name))continue;let s=a4(o.name);s==null||s<=n||(n=s,r=ko.join(t,o.name))}return r}function Ad(e){let t=e?.trim()||ko.join(process.env.LOCALAPPDATA||"","cursor-agent"),r=ko.join(t,"node.exe"),n=ko.join(t,"index.js");if(Qa(r)&&Qa(n))return{nodeExe:r,indexJs:n,versionDir:t};let o=l4(t);if(!o)return null;let s=ko.join(o,"node.exe"),i=ko.join(o,"index.js");return!Qa(s)||!Qa(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var i4,QA=p(()=>{"use strict";i4=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i});import{writeFileSync as c4}from"node:fs";import u4 from"node:path";function p4(e=process.platform,t={}){return t.shell?6e3:e==="win32"?24e3:12e4}function Id(e,t,r={}){if(e.length<=p4(r.platform,{shell:r.shell}))return{prompt:e,spilledTo:null};let n=u4.join(t,d4);return c4(n,e,"utf8"),{prompt:[`Your complete task instructions are in this file: ${n}`,"They were too long to pass on the command line.","Read the whole file first, then follow it exactly as if it were this prompt. Do not edit or commit that file."].join(`
|
|
148
|
-
`),spilledTo:n}}var d4,
|
|
144
|
+
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 WY,renameSync as $Y}from"node:fs";function KY(e,t){let r=`${e}.quarantine-${t}`;for(let n of["","-wal","-shm"]){let o=`${e}${n}`;WY(o)&&$Y(o,`${r}${n}`)}return r}function sE(e){let t=e.quarantineStamp??(e.now??(()=>new Date))().toISOString().replace(/[:.]/g,"-"),r=null;try{let s=Ka.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=KY(n,t);try{return{store:Ka.open(e),recovered:!0,quarantinedTo:o}}catch(s){throw new AggregateError([r,s].filter(Boolean),"local-run-store rebuild after quarantine failed")}}var iE=p(()=>{"use strict";oE()});function HY(){if(process.env.KYNVER_LRS_TEST_CLASSIFY_BYPASS==="1")return{mountsSource:()=>"/dev/vda / ext4 rw 0 0",resolveRealPath:()=>"/tmp/kynver-lrs-test/db"}}function jY(){return VY.classifyOptions??HY()}function JY(e,t){pd+=1;try{let r=jY(),n=sE({directory:e,...r?{classifyOptions:r}:{}});return{store:n.store,status:{state:"open",harnessRoot:e,databasePath:n.store.databasePath,schemaVersion:n.store.localSchemaVersion(),recovered:n.recovered,quarantinedTo:n.quarantinedTo,reason:null,openAttempts:pd},failedAtMs:null,permanentRefusal:!1}}catch(r){return{store:null,status:{state:"unavailable",harnessRoot:e,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:`${r.name}: ${r.message}`,openAttempts:pd},failedAtMs:t,permanentRefusal:r.name==="FilesystemPolicyError"||r.name==="SchemaDowngradeRefusedError"}}}function YY(e,t){return e.store||e.permanentRefusal?!1:e.failedAtMs===null?!0:t-e.failedAtMs>=GY}function fe(e=Date.now()){let t=St();return(!Kr||Kr.status.harnessRoot!==t||YY(Kr,e))&&(zY(),Kr=JY(t,e)),Kr.store}function qY(){return Kr?Kr.status:{state:"unopened",harnessRoot:null,databasePath:null,schemaVersion:null,recovered:!1,quarantinedTo:null,reason:null,openAttempts:pd}}function aE(){return fe(),qY()}function zY(){try{Kr?.store?.close()}catch{}Kr=null}var VY,GY,Kr,pd,_n=p(()=>{"use strict";Wt();iE();VY={},GY=300*1e3,Kr=null,pd=0});import{existsSync as XY,readFileSync as QY}from"node:fs";import{homedir as ZY}from"node:os";import eq from"node:path";function lE(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return eq.join(ZY(),".kynver",`local-run-store-flags-${t}.json`)}function qh(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 cE(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:qh(r)}function uE(e,t){try{let r=lE(e),n={contractVersion:1,agentOsId:e,flags:qh(t),deliveredAt:new Date().toISOString()};Se(r,n),Ht={flags:n.flags,loadedAtMs:Date.now(),file:r}}catch{}}function dE(e=Date.now()){if(process.env.KYNVER_LRS_REMOTE_FLAGS_DISABLED==="1")return{};if(Ht&&e-Ht.loadedAtMs<tq)return Ht.flags;try{let t=I().agentOsId?.trim();if(!t)return Ht={flags:{},loadedAtMs:e,file:null},Ht.flags;let r=lE(t);if(!XY(r))return Ht={flags:{},loadedAtMs:e,file:r},Ht.flags;let n=JSON.parse(QY(r,"utf8")),o=n?.contractVersion===1?qh(n.flags):{};return Ht={flags:o,loadedAtMs:e,file:r},o}catch{return Ht={flags:{},loadedAtMs:e,file:null},Ht.flags}}var tq,Ht,zh=p(()=>{"use strict";$();U();tq=3e4,Ht=null});function nq(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 Hr(e=process.env){let t={},r={},n=[],o=dE();for(let s of rq){let i=e[s.env];if(typeof i=="string"&&i.trim()!==""){let c=nq(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 rq,Us=p(()=>{"use strict";zh();rq=[{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 Ha(e){return Hr(process.env).flags[e]}function Xh(e){return`mesh-cron-lease:${e}`}function pE(e,t){if(Ha("meshLease")==="off")return;let r=fe();if(r)try{let n=r.latestRecoveryCheckpoint(Xh(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:Xh(e),payloadJson:JSON.stringify(t)})}catch{ot.meshStoreFailures+=1}}function fE(e,t){let r=Ha("meshLease");if(r==="off")return null;let n=fe();if(!n)return null;try{let o=n.latestRecoveryCheckpoint(Xh(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&&(ot.meshLeaseDivergences+=1),r!=="enforce"?null:i&&t?.updatedAt&&s?.updatedAt&&Date.parse(t.updatedAt)>Date.parse(s.updatedAt)?(ot.meshEnforceStaleInversions+=1,null):s}catch{return ot.meshStoreFailures+=1,null}}function fd(e){return`quota-cooldown:${e}`}function gE(e,t){if(Ha("quota")==="off")return;let r=fe();if(r)try{r.tryReserveAdmission(fd(e),mE,t)}catch{ot.quotaStoreFailures+=1}}function hE(e){if(Ha("quota")==="off")return;let t=fe();if(t)try{t.releaseAdmission(fd(e),mE)}catch{ot.quotaStoreFailures+=1}}function yE(e,t){let r=Ha("quota");if(r==="off")return null;let n=fe();if(!n)return null;try{let o=n.listAdmissionReservations({keyPrefix:fd(e),limit:50}).find(i=>i.key===fd(e)),s=!!o;return s!==t&&(ot.quotaVerdictDivergences+=1),r==="enforce"?{blocked:s,retryAtIso:o?.expiresAt??null}:null}catch{return ot.quotaStoreFailures+=1,null}}function kE(){return{"keeper.storeFailures":ot.keeperStoreFailures,"meshLease.storeFailures":ot.meshStoreFailures,"meshLease.divergences":ot.meshLeaseDivergences,"meshLease.enforceStaleInversions":ot.meshEnforceStaleInversions,"quota.storeFailures":ot.quotaStoreFailures,"quota.verdictDivergences":ot.quotaVerdictDivergences}}var ot,kve,mE,ja=p(()=>{"use strict";_n();Us();ot={keeperStoreFailures:0,meshStoreFailures:0,quotaStoreFailures:0,meshLeaseDivergences:0,meshEnforceStaleInversions:0,quotaVerdictDivergences:0};kve=1800*1e3;mE="quota-preflight"});function Qh(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(`
|
|
145
|
+
`)}var Lve,Bve,Fve,Uve,Zh=p(()=>{"use strict";gn();JC();$();Vh();U();Ju();Jh();ja();Lve=15*6e4,Bve=2*6e4,Fve=5*6e4,Uve=30*6e4});import oq from"node:path";function sq(e){return oq.resolve(Le(e.trim()))}function Ws(e,t,r){let n=e?.trim();return n?{repo:sq(n),source:t,persistedInConfig:r}:null}function bE(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Va(e={}){let t=e.env??process.env,r=e.config??I(),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||bE(zc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}function vE(e={}){let t=e.env??process.env,r=e.config??I(),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||bE(Xc({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl,home:e.home}))}function RE(e,t){let r={...t??I(),defaultRepo:Le(e)};return Ge(r),Uu(r)}function ey(e){return{defaultRepo:Ze(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}var $s=p(()=>{"use strict";$();pa();bt()});import iq from"node:path";import{homedir as aq}from"node:os";function wE(e){let t=I(),r=vE({...e,config:t});if(!r)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Ze(ty),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:Ze(ty),resolved:ey(r),config:lh(t)};let n=RE(r.repo,t),o=ey({...r,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Ze(ty),resolved:o,config:lh(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}var ty,SE=p(()=>{"use strict";bt();$();$s();ty=iq.join(aq(),".kynver","config.json")});import{mkdirSync as lq,readFileSync as cq,renameSync as uq,writeFileSync as dq}from"node:fs";import{homedir as pq}from"node:os";import _E from"node:path";function xE(e){let t=e.replace(/[^A-Za-z0-9_-]/g,"_");return _E.join(pq(),".kynver",`instruction-bundle-${t}.json`)}function CE(e,t){try{let r=xE(e);lq(_E.dirname(r),{recursive:!0});let n=`${r}.tmp-${process.pid}`;dq(n,JSON.stringify(t),{encoding:"utf8",mode:384}),uq(n,r)}catch{}}function EE(e){try{let t=cq(xE(e),"utf8"),r=JSON.parse(t);return Ma(r)?r:null}catch{return null}}var AE=p(()=>{"use strict";kn()});function IE(e,t=process.env){for(let n of Yu(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY))if($x(n)===e)return n;if(e===fq&&!qu(t))return null;let r=mq[e];return r?Da(r):null}var fq,mq,PE=p(()=>{"use strict";kn();fq="ib-3bab6314f0ba",mq={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38","ib-49e76cb8052c":"8fc646b5c4f8f402120477452608398f035c3cddd2e7aa8bb328e97b84dcf6d8","ib-f990c4fcc3dd":"fb4119813196e466429716bab7055c528cd79b4ec94c40a9c63c5c8313548df6"}});import{createPublicKey as gq,verify as hq}from"node:crypto";function kq(e){return gq({key:Buffer.concat([yq,Buffer.from(e)]),format:"der",type:"spki"})}function bq(e,t){if(!Ma(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(ft(e.bundle),"utf8");return hq(null,n,kq(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 TE(e,t=process.env){if(!Ma(e))return{ok:!1,reason:"malformed signed bundle payload"};let r=IE(e.publicKeyId,t);return r?bq(e,r):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var yq,OE=p(()=>{"use strict";PE();kn();yq=Buffer.from("302a300506032b6570032100","hex")});function Ja(e,t){console.error(JSON.stringify({event:e,...t}))}function NE(e,t,r){let n=TE(e);return n.ok?(HC(n.bundle,t),t==="server"&&CE(r,e),!0):(Ja("instruction_bundle_signature_invalid",{agentOsId:r,source:t,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Ga(e){if(jr.diskCacheTried)return!1;jr.diskCacheTried=!0;let t=EE(e);return t?NE(t,"disk",e):!1}async function DE(e){let t=e.nowMs??Date.now(),r=()=>({source:or(),version:mo(),updated:!1});if(!e.force&&t-jr.lastAttemptAtMs<vq)return r();jr.lastAttemptAtMs=t;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return or()==="embedded"&&Ga(e.agentOsId)?{...r(),updated:!0}:r();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Rq);try{let l=Kt(o);delete l["Content-Type"],jr.etag&&or()==="server"&&(l["If-None-Match"]=jr.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 jr.routeMissingLogged||(jr.routeMissingLogged=!0,Ja("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),or()==="embedded"&&Ga(e.agentOsId)?{...r(),updated:!0}:r();if(!c.ok)return Ja("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),or()==="embedded"&&Ga(e.agentOsId)?{...r(),updated:!0}:r();let u=await c.json().catch(()=>null);return!u||!NE(u,"server",e.agentOsId)?or()==="embedded"&&Ga(e.agentOsId)?{...r(),updated:!0}:r():(jr.etag=c.headers.get("etag"),Ja("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:mo(),publicKeyId:u.publicKeyId}),{...r(),updated:!0})}catch(l){return Ja("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),or()==="embedded"&&Ga(e.agentOsId)?{...r(),updated:!0}:r()}finally{clearTimeout(a)}}var vq,Rq,jr,ME=p(()=>{"use strict";Fs();AE();Sn();OE();vq=15*6e4,Rq=1e4,jr={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1}});import wq from"node:os";function LE(e,t){console.error(JSON.stringify({event:"daemon_identity",level:e,message:t}))}function BE(e=I(),t=process.env){let r=ut(t,e),n=bs({config:e,totalMemBytes:wq.totalmem(),env:t}),o=[...r.warnings],s=[];if(!e.boxKind?.trim()&&!t.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers get boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before starting the daemon"),r.slugInferenceBlocked){let c=t.KYNVER_DAEMON_STRICT_IDENTITY==="1"||t.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as a customer box (boxKind=box), not forge/ghost";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=Ir(r.boxKind,i);ga(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)LE("warn",c);for(let c of s)LE("error",c);return{ok:l,box:r,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}var FE=p(()=>{"use strict";$();He();ls();xa()});import{spawnSync as Sq}from"node:child_process";import{existsSync as _q,readFileSync as xq}from"node:fs";import Cq from"node:path";function Aq(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+Eq<s.startedAtMs||o.push({workerName:s.workerName,workerPid:s.pid,orphanPid:i.pid}));return o}function Iq(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 Pq(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=Sq("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"],timeout:3e4});if(o.status!==0)return[];try{return Iq(o.stdout??"")}catch{return[]}}function Tq(e,t=ne){try{let r=Ee().find(o=>o.id===e);if(!r)return[];let n=[];for(let o of Object.keys(r.workers||{})){let s=Cq.join(G(r.id),"workers",W(o),"worker.json");if(!_q(s))continue;let i=JSON.parse(xq(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 UE(e,t={}){if((t.platform??process.platform)!=="win32"||!e)return{checkedWorkers:0,killed:[]};let n=t.isAlive??ne,o=(t.collect??(l=>Tq(l,n)))(e);if(o.length===0)return{checkedWorkers:0,killed:[]};let s=(t.query??Pq)(o.map(l=>l.pid)),i=t.killTree??he,a=Aq(s,o,n).map(l=>({...l,result:i(l.orphanPid,"SIGKILL")}));return{checkedWorkers:o.length,killed:a}}var Eq,WE=p(()=>{"use strict";Q();U();os();Eq=5e3});import{mkdirSync as Oq,readFileSync as Nq,renameSync as Dq,writeFileSync as Mq}from"node:fs";import{homedir as Lq}from"node:os";import md from"node:path";function $E(){return md.join(Lq(),".kynver")}function Bq(e=$E()){return md.join(e,"doctor-native-windows.json")}function KE(e=$E()){return md.join(e,"native-windows-state.json")}function Fq(e,t){Oq(md.dirname(e),{recursive:!0});let r=`${e}.tmp-${process.pid}`;Mq(r,`${JSON.stringify(t,null,2)}
|
|
146
|
+
`,{mode:384}),Dq(r,e)}function ny(e){try{return JSON.parse(Nq(e,"utf8"))}catch{return null}}function Uq(e){let t=ny(Bq(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 HE(e=new Date,t){try{let r=KE(t),n=ny(r)??{};Fq(r,{...n,lastWorkerCompletedAt:e.toISOString()})}catch{}}function Wq(e){let t=ny(KE(e));return typeof t?.lastWorkerCompletedAt=="string"?t.lastWorkerCompletedAt:null}function VE(e){ry=e.admission,jE=e.ownerKind}function GE(e={}){let t=e.platform??process.platform,r=e.hostKind??Gg(),n=r==="win32";return{hostKind:r,wsl:r==="wsl",platform:t,arch:process.arch,nodeVersion:process.versions.node,runtimeVersion:nt,ownerKind:jE,nativeWindows:n?{admission:ry?.basis??null,hostCapability:ry?.hostCapability??null,lastDoctor:Uq(e.root),lastWorkerCompletedAt:Wq(e.root)}:null}}var ry,jE,gd=p(()=>{"use strict";Cu();wn();ry=null,jE=null});function $q(e){return typeof e=="string"&&JE.includes(e)}function Kq(e,t){let r=e[t]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function jq(e={}){let t=e.platform??process.platform,r=e.env??process.env;return e.hostCapability!==void 0&&!$q(e.hostCapability)?{allowed:!1,reason:"invalid_host_capability",remedy:"hostCapability must be one of: "+JE.join(", ")}:t!=="win32"?{allowed:!0,basis:"not_native_windows",hostCapability:e.hostCapability??null}:e.hostCapability?{allowed:!0,basis:"host_capability",hostCapability:e.hostCapability}:Kq(r,oy)?{allowed:!0,basis:"experimental_env_override",hostCapability:null}:{allowed:!1,reason:"native_windows_unqualified",remedy:Hq}}function sy(e={}){let t=jq(e);return t.allowed?(t.basis==="experimental_env_override"&&console.error(JSON.stringify({event:"daemon_native_windows_experimental",override:oy,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 JE,oy,Hq,iy=p(()=>{"use strict";JE=["desktop-supervised","native-windows-qualified"],oy="KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS";Hq=`Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set ${oy}=1 for the experimental native path (not yet qualified; \`kynver doctor runner-install\` reports the host).`});function Vq(e){return e.replace(/\/+$/,"")}async function YE(e){let t=e.fetchFn??fetch,r=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Vq(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:Kt(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 qE=p(()=>{"use strict";Fs()});import{closeSync as Gq,existsSync as ay,openSync as Jq,readFileSync as Yq,unlinkSync as zE,writeFileSync as qq}from"node:fs";function XE(e){if(!ay(e))return null;try{let t=JSON.parse(Yq(e,"utf8"));if(typeof t.pid=="number"&&typeof t.at=="string")return t}catch{return null}return null}function Xq(e){let t=XE(e);if(!t||!ne(t.pid))return!0;let r=Date.parse(t.at);return Number.isNaN(r)?!0:Date.now()-r>zq}function QE(e){if(ay(e)&&!Xq(e)){let t=XE(e);return{acquired:!1,reason:t?`held by pid ${t.pid}`:"held by another process"}}if(ay(e))try{zE(e)}catch{}try{let t=Jq(e,"wx");return qq(t,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Gq(t),{acquired:!0}}catch(t){if(t.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw t}}function ZE(e){try{zE(e)}catch{}}var zq,eA=p(()=>{"use strict";U();zq=10*6e4});function Zq(e){return Qq.test(e.trim())}function ez(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])),m=Math.min(r,Number(c[2]));for(let f=d;f<=m;f+=l)n.add(f);continue}let u=Number(a);Number.isInteger(u)&&u>=t&&u<=r&&n.add(u)}return n}function Ya(e,t,r,n){let o=e.trim();return o==="*"?!0:ez(o,r,n).has(t)}function tz(e,t){let r=e.trim().split(/\s+/);if(r.length!==5)return!1;let[n,o,s,i,a]=r;return Ya(n,t.getUTCMinutes(),0,59)&&Ya(o,t.getUTCHours(),0,23)&&Ya(s,t.getUTCDate(),1,31)&&Ya(i,t.getUTCMonth()+1,1,12)&&Ya(a,t.getUTCDay(),0,6)}function nz(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function tA(e,t){if(!Zq(e))return null;let r=nz(t);r=new Date(r.getTime()+6e4);for(let n=0;n<rz;n++){if(tz(e,r))return r;r=new Date(r.getTime()+6e4)}return null}function rA(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=tA(e.cron.trim(),t);return r?r.toISOString():null}return null}function ly(e,t){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let r=tA(e.cron.trim(),t);return r?r.toISOString():null}var Qq,rz,nA=p(()=>{"use strict";Qq=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;rz=366*24*60});import{randomBytes as oz}from"node:crypto";import{promises as qa}from"node:fs";import sz from"node:path";async function iz(e){try{return await qa.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function az(e){if(!e)return{...hd,jobs:{...hd.jobs}};try{let t=JSON.parse(e);return t?.version!==1||typeof t.jobs!="object"||!t.jobs?{...hd,jobs:{}}:t}catch{return{...hd,jobs:{}}}}async function cy(e){let t=await iz(e);return az(t)}async function lz(e,t){await qa.mkdir(sz.dirname(e),{recursive:!0});let r=oz(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${r}`;await qa.writeFile(n,`${JSON.stringify(t,null,2)}
|
|
147
|
+
`,"utf8");try{await qa.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await qa.unlink(n).catch(()=>{})}}async function oA(e,t){await lz(e,t)}function sA(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 hd,uy=p(()=>{"use strict";hd={version:1,jobs:{}}});function cz(e,t){if(!e.inflightUntil)return!1;let r=Date.parse(e.inflightUntil);return!Number.isNaN(r)&&r>t}function uz(e){return!!e.completedAt}function dz(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 pz(e,t,r){if(t.nextFireAt)return t.nextFireAt;let n=rA(e.spec,r);return t.nextFireAt=n,n}function fz(e,t,r,n){if(e.paused||uz(t)||cz(t,r)||!dz(e,t,n,r))return!1;let o=t.nextFireAt?Date.parse(t.nextFireAt):NaN;return Number.isNaN(o)?!1:r>=o}function mz(e,t,r){e.spec.scheduleKind==="cron"&&(t.nextFireAt=ly(e.spec,r))}async function dy(e={}){let t=e.env??Ns(),r=e.now??new Date,n=r.getTime(),o=e.agentOsIdFilter?Ue(e.agentOsIdFilter):Ue();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=QE(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 id(t.storePath),a=e.agentOsIdFilter?i.filter(h=>h.spec.target.agentOsId===e.agentOsIdFilter):i,l=await cy(t.statePath),c=[];for(let h of a){let y=sA(l,h.providerScheduleId);pz(h,y,r),fz(h,y,n,t)&&c.push({entry:h,job:y})}c.sort((h,y)=>{let v=Date.parse(h.job.nextFireAt??"")||0,k=Date.parse(y.job.nextFireAt??"")||0;return v-k});let u=0,d=0,m=0,f=t.maxCatchUpPerTick,g=[];for(let{entry:h,job:y}of c){if(t.missedRunPolicy==="skip"&&h.spec.scheduleKind==="cron"){let v=Date.parse(y.nextFireAt??"");if(!Number.isNaN(v)&&v<n-t.tickIntervalMs*2){y.nextFireAt=ly(h.spec,r),m++;continue}}if(f<=0){m++;continue}y.inflightUntil=new Date(n+t.inflightLeaseMs).toISOString(),y.lastAttemptAt=r.toISOString(),mz(h,y,r);try{let v=Ue(h.spec.target.agentOsId)||t.secret;if(!v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:"missing_fire_credentials"});continue}let k=await YE({entry:h,baseUrl:t.fireBaseUrl,secret:v,fetchFn:e.fetchFn});y.inflightUntil=null,k.ok?(y.lastFiredAt=r.toISOString(),y.consecutiveFailures=0,h.spec.scheduleKind==="runAt"&&(y.completedAt=r.toISOString(),y.nextFireAt=null),u++,f--):(y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,url:k.url,status:k.status,body:k.body}))}catch(v){y.inflightUntil=null,y.consecutiveFailures+=1,d++,g.push({providerScheduleId:h.providerScheduleId,callbackPath:h.spec.callbackPath,error:v instanceof Error?v.message:String(v)})}}return await oA(t.statePath,l),{enabled:!0,scanned:a.length,due:c.length,fired:u,skippedJobs:m,errors:d,...g.length?{errorDetails:g}:{}}}finally{ZE(t.lockPath)}}var py=p(()=>{"use strict";Ur();qE();eA();$();nA();Ds();uy()});import iA from"node:path";function yd(e){let t=K(iA.join(G(e),aA),null);return fE(e,t)??t}function lA(e,t){let r={...t,updatedAt:new Date().toISOString()};Se(iA.join(G(e),aA),r),pE(e,r)}function cA(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 aA,fy=p(()=>{"use strict";U();Q();ja();aA="mesh-cron-lease.json"});function pA(e){za=e}function fA(e=Date.now()){return!za||za.stallCount===uA&&e-dA<9e5?null:(uA=za.stallCount,dA=e,za)}var za,uA,dA,my=p(()=>{"use strict";za=null,uA=-1,dA=0});function gA(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 mA(e){return new Error(`callback timeout after ${e}ms`)}async function hA(e,t){let r=gA(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(mA(r))},r)})])}catch(i){throw s?mA(r):i}finally{o&&clearTimeout(o)}}function yA(e,t){let r=gA(t);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:r}}}async function go(e,t,r,n){try{return await hA(async o=>{let s=await Ce(e,{method:"POST",headers:Kt(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 yA(o,n?.timeoutMs)}}async function me(e,t,r,n){let o=await go(e,t,r,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await Mx(t,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await go(e,s.token,r,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function gy(e,t,r){try{return await hA(async n=>{let o=await Ce(e,{method:"GET",headers:Kt(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 yA(n,r?.timeoutMs)}}var qe=p(()=>{"use strict";Fs();wt();$()});function kA(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e5}var bA=p(()=>{"use strict"});function Xa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function vA(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 hy(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 RA=p(()=>{"use strict"});function yz(e){return gz.includes(e)}function kz(e){return hz.includes(e)}function wA(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||yz(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:kz(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}function vz(e){if(!e)return null;let t=e.trim().toLowerCase(),r=bz.get(t)??null,n=jC(t);if(!n)return r;let o=wA(n);return r?{...o,dispatchLane:r.dispatchLane,defaultRoleLane:r.defaultRoleLane}:o}function yy(e){return vz(e)?.defaultRoleLane??null}function _A(){return SA.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}var gz,hz,SA,bz,kd=p(()=>{"use strict";$h();Sn();gz=["implementation","review","landing"],hz=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];SA=Ms.personas.map(wA),bz=new Map(SA.map(e=>[e.slug,e]))});function xA(e){return(e??"").trim().toLowerCase()}function Rz(e){switch(xA(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 wz(e){let t=xA(e);if(!t)return;if(t==="implementation"||t==="review"||t==="landing"||t==="any")return t;let r=Rz(t);if(r)return r;if(t==="implement"||t==="repair"||t==="coding")return"implementation";if(t==="land"||t==="merge")return"landing"}function CA(e){return wz(e)??"any"}var EA=p(()=>{"use strict";kd()});function Sz(e=process.env){let t=I();return Bt(t,e)!=="forge"}function bd(e,t=process.env){if(Sz(t))return e?.maxConcurrentWorkers??void 0}async function vd(e,t){let r=ge(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 gy(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 ky=p(()=>{"use strict";qe();$();He()});async function AA(e,t=_z){let r=await t.fetchPreferences(e.agentOsId,e.args),n=t.configuredOverride(r,e.env);return t.observe({runId:e.runId,configuredMaxWorkersOverride:n})}var _z,IA=p(()=>{"use strict";ky();ks();_z={fetchPreferences:vd,configuredOverride:bd,observe:_a}});function Rd(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function by(e){return e.toLowerCase()}function xz(e){let t=Rd(e,"roleLane");if(t)return t;let r=by(Rd(e,"executorRef")),n=by(Rd(e,"title")),o=by(Rd(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=yy(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function PA(e){let t=xz(e);return t?{...e,roleLane:t}:e}var TA=p(()=>{"use strict";kd()});function OA(e){let t=e.trim();return Cz.test(t)||Ez.test(t)}function NA(e){let t=e.trim().toLowerCase();return t.startsWith("gpt-")||t.startsWith("gpt5")||t.includes("codex")}function vy(e){let t=e.trim().toLowerCase();return t.includes("composer")||t.includes("cursor")}function DA(e){return e.trim().toLowerCase().startsWith("gemini-")}function Az(e){return NA(e)?"codex":OA(e)?"claude":DA(e)?"gemini":(vy(e),"cursor")}function Iz(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==="venice"||n==="venice-ai"||n==="venice_ai"||n==="veniceai"?{provider:"venice",model:o,rule:"executor_ref:provider_venice"}: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 Pz(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?OA(n)||NA(n)||vy(n)||DA(n)?{lane:r,model:n,provider:Az(n),rule:"executor_ref:harness_lane_model"}:{lane:r,rule:"executor_ref:harness_lane"}:{lane:r,rule:"executor_ref:harness_lane"}}function mt(e){let t=typeof e=="string"?e.trim():"";return t?Iz(t)??Pz(t):null}function MA(e){let t=mt(e);return t?!!(t.provider&&t.provider!=="cursor"||t.model&&!vy(t.model)):!1}var Cz,Ez,wd=p(()=>{"use strict";Cz=/^claude[-_]/i,Ez=/^(?:opus|sonnet|haiku)\b/i});function Qa(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function Vr(e){if(!e?.trim())return!1;let t=e.trim().toLowerCase();return Tz.has(t)?!0:t.includes("claude")||t.includes("opus")}function Sd(e){if(!e)return!1;let t=e.workerProviderOverride;if(typeof t=="string"&&Vr(t))return!0;let r=Qa(e,"executorRef").toLowerCase();if(r==="provider:claude"||r.startsWith("provider:claude:")||r.includes("claude-worker-override")||r.includes("operator-claude"))return!0;let n=mt(Qa(e,"executorRef"));if(n?.provider&&Vr(n.provider)||n?.model&&Vr(Nz(n.model)))return!0;let o=Qa(e,"description");if(Oz.some(i=>i.test(o)))return!0;let s=Qa(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function Nz(e){let t=e.trim().toLowerCase();return/^claude[-_]/.test(t)||/^(?:opus|sonnet|haiku)\b/.test(t)?"claude":t}function Dz(e,t){return{provider:Gr,model:_d,rule:`policy:cursor_default${t}`,requestedModel:e}}function Lz(e){return Mz.some(t=>e.startsWith(t))}function Ry(e){if(!e)return!1;let t=e.workerProviderOverride;return typeof t=="string"&&t.trim()||mt(Qa(e,"executorRef"))?.provider?!0:Sd(e)}function LA(e){let{routing:t,task:r}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Vr(n))return{...t,provider:"claude",rule:t.rule.startsWith("explicit:")?t.rule:"explicit:operator_provider"};if(n||Lz(t.rule)||Ry(r)||!Vr(t.provider))return t;let o=t.rule&&t.rule!=="default:global"?`:${t.rule.replace(/:/g,"_")}`:"";return Dz(t.model,o)}function BA(e,t=Gr){let r=e?.trim();return r?et(r):t}var Gr,Tz,Oz,Mz,ho=p(()=>{"use strict";wd();xd();Pa();Pa();Gr="cursor",Tz=new Set(["claude","opus","anthropic"]),Oz=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];Mz=["explicit:","executor_ref:","factory:","task:"]});function Ks(e){return FA[e]}function UA(){return Object.values(FA)}var FA,wy=p(()=>{"use strict";FA={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 WA}from"node:crypto";import{statSync as Bz}from"node:fs";import{spawnSync as $A}from"node:child_process";function sr(e){try{let t=Bz(e),r=`${e}|${t.size}|${t.mtimeMs}`;return WA("sha256").update(r).digest("hex").slice(0,16)}catch{return}}function Hs(e){return WA("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function _t(e,t){for(let r of t){let n=process.env[r]?.trim();if(n)return n}return e}function jt(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=oe(e,t),i=$A(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 Cd(e,t,r={}){let n=r.timeoutMs??8e3;try{let[o,s]=oe(e,t);return $A(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 yo=p(()=>{"use strict";Te()});import{existsSync as Fz}from"node:fs";import{homedir as Uz}from"node:os";import Za from"node:path";function $z(){let e=Uz();return[process.env.CODEX_HOME?.trim()?Za.join(Za.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,Za.join(e,".codex","auth.json"),Za.join(e,".config","codex","auth.json")].filter(r=>!!r)}function Kz(e){return Za.dirname(e)}function Hz(e){let t,r;for(let n of $z()){if(!Fz(n))continue;t??=n;let o=jt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Kz(n)}});if(r??=o,o.ok)return{authPath:n,login:o}}return{authPath:t,login:r??jt(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function KA(e=new Date().toISOString()){let t=_t(Wz,["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}=Hz(t),o=!!r&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:r?sr(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 Wz,HA=p(()=>{"use strict";yo();Wz="codex"});import{existsSync as jz}from"node:fs";import{homedir as Vz}from"node:os";import Sy from"node:path";function Gz(){let e=process.env.HERMES_HOME?.trim(),t=e?Sy.resolve(e):Sy.join(Vz(),".hermes");return Sy.join(t,"auth.json")}function Ed(e=new Date().toISOString()){let t=_t("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=jt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Gz(),o=jz(n),s=Cd(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?sr(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 _y=p(()=>{"use strict";yo()});function js(e=new Date().toISOString()){let t=KA(e);if(t.ready)return{...t,path:"codex_cli"};let r=Ed(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 Ad=p(()=>{"use strict";HA();_y()});function GA(e,t){let r=Ks(e);return t==="privileged"?r.supportsPrivilegedPlatformActions:t==="low"?r.supportsLowRiskOrchestration:!0}function Jz(e,t){let r=Ks(e.providerId),n=Ks(t.providerId),o=jA.indexOf(r.costTier)-jA.indexOf(n.costTier);if(o!==0)return o;let s=VA[e.binding.authSource]-VA[t.binding.authSource];return s!==0?s:e.providerId.localeCompare(t.providerId)}function xy(e){let t=UA().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&GA(a.providerId,e.riskClass));if(t.length===0)return null;let n=[...t].sort(Jz)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return GA(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 jA,VA,JA=p(()=>{"use strict";wy();jA=["low","medium","high"],VA={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3}});import{existsSync as Yz}from"node:fs";import{homedir as qz}from"node:os";import zz from"node:path";function Qz(){let e=qz();return[zz.join(e,".claude",".credentials.json")]}function YA(e=new Date().toISOString()){let t=_t(Xz,["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=jt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Qz().find(i=>Yz(i)),o=Cd(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?sr(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 Xz,qA=p(()=>{"use strict";yo();Xz="claude"});function xt(e,t={}){let r=ca(e);if(!t.reviewWorker)return r;let n={...r,[Zz]:"1"};for(let o of e4)delete n[o];return n}var Zz,e4,ko=p(()=>{"use strict";ua();Zz="KYNVER_NO_PROD_DB_CREDENTIALS",e4=["KYNVER_ENV_FILE"]});function zA(e){return e.replace(t4,"")}function Id(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}function r4(e){let t=e.trim().toLowerCase();return t.startsWith("gemini-")||t==="auto"||t==="pro"||t==="flash"||t==="flash-lite"}function o4(e){let t=e.trim().toLowerCase();return n4.has(t)?"auto":null}function Cy(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=zA(r).trim()||t;return XA.test(o)||!Id(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 Vs(e,t){let r=(e??"").trim();return r?Id(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 Gs(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 Js(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let o=zA(r).trim()||t;return Id(o)||!r4(o)&&XA.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 Ys(e,t){let r=(e??"").trim();if(!r)return{ok:!0,model:t,normalized:!1};let n=o4(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")`}:Id(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 t4,XA,n4,Vt=p(()=>{"use strict";t4=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;XA=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;n4=new Set(["cursor"])});import{existsSync as el,readdirSync as s4}from"node:fs";import bo from"node:path";function a4(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 l4(e){let t=bo.join(e,"versions");if(!el(t))return null;let r=null,n=-1;for(let o of s4(t,{withFileTypes:!0})){if(!o.isDirectory()||!i4.test(o.name))continue;let s=a4(o.name);s==null||s<=n||(n=s,r=bo.join(t,o.name))}return r}function Pd(e){let t=e?.trim()||bo.join(process.env.LOCALAPPDATA||"","cursor-agent"),r=bo.join(t,"node.exe"),n=bo.join(t,"index.js");if(el(r)&&el(n))return{nodeExe:r,indexJs:n,versionDir:t};let o=l4(t);if(!o)return null;let s=bo.join(o,"node.exe"),i=bo.join(o,"index.js");return!el(s)||!el(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var i4,QA=p(()=>{"use strict";i4=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i});import{writeFileSync as c4}from"node:fs";import u4 from"node:path";function p4(e=process.platform,t={}){return t.shell?6e3:e==="win32"?24e3:12e4}function ir(e,t,r={}){if(e.length<=p4(r.platform,{shell:r.shell}))return{prompt:e,spilledTo:null};let n=u4.join(t,d4);return c4(n,e,"utf8"),{prompt:[`Your complete task instructions are in this file: ${n}`,"They were too long to pass on the command line.","Read the whole file first, then follow it exactly as if it were this prompt. Do not edit or commit that file."].join(`
|
|
148
|
+
`),spilledTo:n}}var d4,qs=p(()=>{"use strict";d4="worker-prompt.md"});import{closeSync as Ay,existsSync as eI,mkdirSync as f4,openSync as Iy,statSync as m4,unlinkSync as ZA}from"node:fs";import{spawn as g4}from"node:child_process";import h4 from"node:os";import ar from"node:path";function v4(e,t,r){return{executable:e,prefixArgs:[t],shell:!1,detached:we(),bundledVersionDir:r}}function tl(e){if(process.platform==="win32"){let t=/\.(cmd|bat)$/i.test(e),r=/node\.exe$/i.test(e)&&eI(ar.join(ar.dirname(e),"index.js"));if(t||r||e==="agent"){let o=t?Pd(ar.dirname(e)):r?{nodeExe:e,indexJs:ar.join(ar.dirname(e),"index.js"),versionDir:ar.dirname(e)}:Pd();if(o)return v4(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:we()}}function R4(e,t,r){return xt({...process.env,CI:"1",NO_COLOR:"1",...t.bundledVersionDir?{CURSOR_INVOKED_AS:ar.basename(e)||"agent.cmd"}:{}},{reviewWorker:r})}function tI(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Py(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 w4(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||ar.join(h4.homedir(),".kynver","locks");return f4(e,{recursive:!0}),ar.join(e,"cursor-agent-start.lock")}function S4(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=w4(),t=Py("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",k4),r=Py("KYNVER_CURSOR_START_LOCK_STALE_MS",b4),n=Date.now();for(;;)try{let o=Iy(e,"wx");return Ay(o),()=>{try{ZA(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-m4(e).mtimeMs>r){ZA(e);continue}}catch{continue}if(Date.now()-n>t)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);tI(250)}}function vo(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=Pd(e.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let n=ar.join(e.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(eI(n))return n}return"agent"}function _4(){return vo(process.env)}function x4(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 Ey,y4,k4,b4,rI,zs=p(()=>{"use strict";Or();U();ko();Vt();QA();qs();Ey="composer-2.5",y4=15e3,k4=6e4,b4=3e4;rI={name:"cursor",defaultModel:Ey,preflightModel(e){return Ys(e,Ey)},start(e){let t=Ys(e.model,Ey);if(!t.ok)throw new Error(`cursor provider model preflight failed: ${t.note}`);let r=t.model,n=Iy(e.stdoutPath,"a"),o=Iy(e.stderrPath,"a"),s=["ignore",n,o],i=_4(),a=tl(i),l=ir(e.prompt,e.workerDir,{shell:a.shell}),c=x4({...e,prompt:l.prompt},r,a.prefixArgs),u=S4(),d;try{let[m,f]=a.shell?[a.executable,c]:dt(a.executable,c,e.workerDir);d=g4(m,f,X({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:R4(i,a,e.reviewWorker)})),tI(Py("KYNVER_CURSOR_START_LOCK_HOLD_MS",y4))}finally{u(),Ay(n),Ay(o)}if(!d.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return d.unref(),{pid:d.pid,model:r}}}});import{spawnSync as C4}from"node:child_process";function Td(e,t=process.env){try{let r;try{r=tl(e)}catch{r={executable:e,prefixArgs:[]}}let n=C4(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 Ty=p(()=>{"use strict";Xs();zs()});import{existsSync as nI}from"node:fs";import{homedir as E4}from"node:os";import Ro from"node:path";import{spawnSync as A4}from"node:child_process";function I4(e){if(Ro.isAbsolute(e)||e.includes("/")||e.includes("\\"))return nI(e);try{let t=A4(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function Od(e=process.env){let t=[],r=e.KYNVER_CURSOR_AUTH_HOME?.trim();r&&(t.push(Ro.join(r,".config","cursor","auth.json")),t.push(Ro.join(r,".cursor-agent","auth.json")));let n=E4();if(t.push(Ro.join(n,".config","cursor","auth.json")),t.push(Ro.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&t.push(Ro.join(o,"cursor-agent","auth.json")),s&&t.push(Ro.join(s,"cursor","auth.json"))}return t}function oI(e){return`${e.error}: ${e.detail}`}function Dd(e=process.env){let t=vo(e);return I4(t)?e.CURSOR_API_KEY?.trim()?{ok:!0,creds:{agentBin:t,authSource:"api_key_env"}}:Od(e).find(n=>nI(n))?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:Td(t,e).ok?{ok:!0,creds:{agentBin:t,authSource:"oauth_local"}}:{ok:!1,error:Oy,detail:"Run `agent login` on this computer, or set CURSOR_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Nd,detail:"`agent` CLI not found. Install the Cursor Agent CLI (https://cursor.com/docs/cli/headless) and keep it on PATH."}}var Nd,Oy,Xs=p(()=>{"use strict";zs();Ty();Nd="cursor_cli_unavailable",Oy="cursor_not_logged_in"});import{existsSync as P4}from"node:fs";function sI(e=new Date().toISOString()){let t=_t(T4,["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=jt(t,["-v"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=Od().find(a=>P4(a)),o=Td(t),s=!!n||o.ok,i=r.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?sr(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 T4,iI=p(()=>{"use strict";Xs();Ty();yo();T4="agent"});import{existsSync as O4,readFileSync as N4}from"node:fs";import{homedir as D4}from"node:os";import Ny from"node:path";function L4(){let e=process.env.HERMES_HOME?.trim(),t=e?Ny.resolve(e):Ny.join(D4(),".hermes");return Ny.join(t,".env")}function B4(e){try{let t=N4(e,"utf8"),r=[];for(let n of M4)new RegExp(`^${n}=`,"m").test(t)&&r.push(n);return r}catch{return[]}}function aI(e=new Date().toISOString()){let t=_t("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),r=jt(t,["--version"],{okNote:`${t} CLI available`,failPrefix:`${t} CLI not available`}),n=L4(),o=O4(n),s=o?B4(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?sr(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 M4,lI=p(()=>{"use strict";yo();M4=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"]});function cI(e={}){let t=e.nowIso?.()??new Date().toISOString(),r=js(t),n={codex:r,cursor:sI(t),claude:YA(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:aI(t),hermesOpenAiCodex:Ed(t),codexAdapterPath:r.path,readyCount:o}}var uI=p(()=>{"use strict";qA();Ad();iI();lI();_y()});function Dy(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function W4(e){let t=Dy(e,"executorRef").toLowerCase(),r=Dy(e,"title").toLowerCase(),n=Dy(e,"description").toLowerCase(),o=`${t}
|
|
149
149
|
${r}
|
|
150
|
-
${n}`;return F4.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":U4.some(s=>s.test(o))?"low":"elevated"}function $4(e){let t
|
|
151
|
-
`}function Ly(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 Gt,
|
|
152
|
-
`,{mode:384}),t}function Dd(e){try{return H4(hI(e)),!0}catch{return!1}}var G4,J4,ve,el,fI,Y4,q4,z4,gt=p(()=>{"use strict";Gr();G4="KYNVER_WORKER_MCP_TOOLS",J4="mcp-config.json",ve="kynver",el=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],fI=el.map(e=>`mcp__${ve}__${e}`),Y4={"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"]};q4=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],z4=["openai-compatible","gemini-api"]});import{closeSync as kI,openSync as bI}from"node:fs";import{spawn as Q4}from"node:child_process";function Z4(e,t){let n=RI(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 RI(e,t,r){return["--model",t,...su(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:fI).join(",")}`]:[],"--",e.prompt]}var vI,Fy=p(()=>{"use strict";Tr();yo();U();Te();Vt();Pr();gt();Cy();Pr();vI={name:"claude",defaultModel:je,preflightModel(e){return xy(e,je)},start(e){let t=xy(e.model,je);if(!t.ok)throw new Error(`claude provider model preflight failed: ${t.note}`);let r=t.model;Z4(e,r);let n=ou(r,{pinned:e.modelPinned===!0}),o=Id(e.prompt,e.workerDir),[s,i]=oe("claude",RI({...e,prompt:o.prompt},r,n)),a=bI(e.stdoutPath,"a"),l=bI(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=dt(s,i,e.workerDir),m=Q4(u,d,X({cwd:e.worktreePath,detached:we(),stdio:c,env:xt(process.env,{reviewWorker:e.reviewWorker})}));if(kI(a),kI(l),!m.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return m.unref(),{pid:m.pid,model:r}}}});var zs,Md=p(()=>{"use strict";zs="gpt-5.6-sol"});import{closeSync as wI,openSync as SI}from"node:fs";import{spawn as e6}from"node:child_process";function t6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function r6(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 Uy,_I,xI=p(()=>{"use strict";Tr();yo();U();Te();ho();Vt();Md();Uy=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs;_I={name:"hermes-codex",defaultModel:Uy,preflightModel(e){return js(e,Uy)},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=js(e.model,Uy);if(!t.ok)throw new Error(`hermes-codex provider model preflight failed: ${t.note}`);let r=t.model,n=_t("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),[o,s]=oe(n,r6(r,e.prompt)),i=SI(e.stdoutPath,"a"),a=SI(e.stderrPath,"a"),l=["ignore",i,a],[c,u]=dt(o,s,e.workerDir),d=e6(c,u,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:l,env:t6(e.reviewWorker,e.codexHome)}));if(wI(i),wI(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 s6(e=process.env){return e[n6]?.trim().toLowerCase()==="elevated"?"elevated":o6}function Ld(e=process.platform,t=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${s6(t)}"`]}var n6,o6,Wy=p(()=>{"use strict";n6="KYNVER_CODEX_WINDOWS_SANDBOX",o6="unelevated"});import{closeSync as CI,existsSync as i6,openSync as EI}from"node:fs";import{spawn as $y}from"node:child_process";function a6(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||zs}function Yr(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function l6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function c6(e,t,r,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Ld(n,o),"--json","--sandbox",r==="read_only"?"read-only":"workspace-write","--model",e,t]}function u6(e,t,r,n){if(process.platform==="win32"){let[l,c]=oe(e,t);return $y(l,c,r)}if(!i6("/usr/bin/script")){let[l,c]=dt(e,t,n);return $y(l,c,r)}let s=[e,...t].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=dt("script",["-qfc",s,"/dev/null"],n);return $y(i,a,r)}var Jr,AI,wo=p(()=>{"use strict";Tr();yo();U();Te();Cd();Vt();xI();Wy();Md();Jr=a6();AI={name:"codex",defaultModel:Jr,preflightModel(e){return js(e,Jr)},start(e){if(Hs().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return _I.start(e);let r=js(e.model,Jr);if(!r.ok)throw new Error(`codex provider model preflight failed: ${r.note}`);let n=r.model,o=EI(e.stdoutPath,"a"),s=EI(e.stderrPath,"a"),i=["ignore",o,s],a=Yr(),l=c6(n,e.prompt,e.executionMode),c;try{c=u6(a,l,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:i,env:l6(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{CI(o),CI(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 Bd}from"node:fs";import So from"node:path";import{fileURLToPath as d6}from"node:url";function p6(e,t){let r=So.resolve(e);for(;;){let n=So.join(r,t);if(Bd(n))return n;let o=So.dirname(r);if(o===r)return null;r=o}}function f6(e){return p6(e,So.join("node_modules",".bin","tsx"))??"npx"}function Ky(e,t){if(e.endsWith(".ts")){let r=f6(So.dirname(e));return{command:r,argsPrefix:r==="npx"?["tsx",e]:[e],cliPath:e}}return{command:t,argsPrefix:[e],cliPath:e}}function Fd(e){if(e.explicitCliPath)return Bd(e.explicitCliPath)?Ky(e.explicitCliPath,e.nodeExecutable):null;let t=d6(new URL(".",e.importMetaUrl)),r=So.join(t,"cli.js");if(Bd(r))return Ky(r,e.nodeExecutable);let n=So.join(t,"cli.ts");return Bd(n)?Ky(n,e.nodeExecutable):null}var Hy=p(()=>{"use strict"});function g6(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function nl(e,t,r){let n=await e.fetchImpl(`${e.apiBaseUrl}${t}`,{method:r?.method??"GET",headers:{[m6]: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 ol(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Ud(e,t,r){let n=g6(e);switch(t){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=ol(r.memoryQuery);s&&o.set("memoryQuery",s);let i=ol(r.mode);return i&&o.set("mode",i),nl(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)),nl(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=ol(r.query);s&&o.set("q",s),typeof r.limit=="number"&&o.set("limit",String(r.limit));let i=o.toString();return nl(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return nl(e,`${n}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return nl(e,`${n}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...ol(r.eventKey)?{eventKey:ol(r.eventKey)}:{}}})}}function Xs(e){return el.includes(e)}var m6,sl,Wd=p(()=>{"use strict";gt();m6="X-Kynver-Job-Token",sl={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 _o(e){return tl(e).filter(Xs).map(t=>{let r=sl[t];return{type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema}}})}var il=p(()=>{"use strict";Wd();gt()});import{closeSync as II,openSync as PI}from"node:fs";import h6 from"node:path";import{fileURLToPath as y6}from"node:url";import{spawn as k6}from"node:child_process";function jy(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}function v6(e=process.env){let t=e.KYNVER_WORKER_BASE_URL?.trim();if(!t)throw new al(`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 al(`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 al(`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):b6;return{baseUrl:t.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}function Qs(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:R6},{role:"user",content:r}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function w6(){let e=y6(new URL(".",import.meta.url)),t=import.meta.url.endsWith(".ts"),r=h6.join(e,t?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Fd({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 S6(e,t,r){let n=e.workerToolGrant,o=n?_o(n.capabilities):void 0;return{provider:xo,model:r,request:Qs(t,r,e.prompt,o),timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function Zs(e,t,r){let n=w6(),o=PI(e.stdoutPath,"a"),s=PI(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=dt(n.command,n.argsPrefix,e.workerDir),c=k6(a,l,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:i,env:xt(process.env,{reviewWorker:e.reviewWorker})}));if(II(o),II(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 xo,b6,al,R6,TI,ei=p(()=>{"use strict";Tr();yo();U();Hy();Vt();il();xo="openai-compatible",b6=600*1e3;al=class extends Error{};R6="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.";TI={name:xo,get defaultModel(){return jy()},preflightModel(e){return Vs(e,jy())},start(e){let t=Vs(e.model,jy());if(!t.ok)throw new Error(`openai-compatible provider model preflight failed: ${t.note}`);let r=t.model,n=v6(process.env),o=S6(e,n,r);return Zs(e,o,r)}}});import _6 from"node:path";function Ct(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ti(e){let t=_6.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return t==="agy"||t==="antigravity"?"antigravity":"gemini"}function OI(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function NI(e){let t=e.trim().toLowerCase();return!t||x6.has(t)?[]:["--model",e.trim()]}function $d(e,t){return[...NI(t),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function DI(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",ve]:[],"--prompt",e.prompt]}var x6,Co=p(()=>{"use strict";gt();x6=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"])});import{closeSync as MI,openSync as LI}from"node:fs";import{spawn as C6}from"node:child_process";function ze(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function E6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...t?{GEMINI_CLI_HOME:t}:{}},{reviewWorker:e})}var ar,BI,ll=p(()=>{"use strict";Tr();yo();U();Te();Co();Vt();ar="gemini";BI={name:ar,get defaultModel(){return ze()},preflightModel(e){return Gs(e,ze())},start(e){let t=Gs(e.model,ze());if(!t.ok)throw new Error(`gemini provider model preflight failed: ${t.note}`);let r=Ct(),n=ti(r),o=n==="antigravity"?OI(t):t.model,s=n==="antigravity"?$d(e,o):DI(e,o),[i,a]=oe(r,s),l=LI(e.stdoutPath,"a"),c=LI(e.stderrPath,"a"),u=["ignore",l,c],[d,m]=dt(i,a,e.workerDir),f=C6(d,m,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:u,env:E6(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(MI(l),MI(c),!f.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 f.unref(),{pid:f.pid,model:o}}}});function I6(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function P6(e=process.env){let t=I6(e);if(!t)throw new cl('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()||FI,n;try{n=new URL(r)}catch{throw new cl(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${FI}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new cl(`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):A6;return{baseUrl:r.replace(/\/+$/,""),apiKey:t,timeoutMs:s}}function T6(e,t,r){let n=e.workerToolGrant,o=n?_o(n.capabilities):void 0,s=Qs(t,r,e.prompt,o);return{provider:lr,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var lr,FI,A6,cl,UI,Vy=p(()=>{"use strict";ei();il();Vt();ll();lr="gemini-api",FI="https://generativelanguage.googleapis.com/v1beta/openai",A6=600*1e3,cl=class extends Error{};UI={name:lr,get defaultModel(){return ze()},preflightModel(e){return Gs(e,ze())},start(e){let t=Gs(e.model,ze());if(!t.ok)throw new Error(`gemini-api provider model preflight failed: ${t.note}`);let r=t.model,n=P6(process.env),o=T6(e,n,r);return Zs(e,o,r)}}});function Kd(e=process.env){return e[N6]?.trim()||e[D6]?.trim()||void 0}function Hd(e=process.env){return(e[M6]?.trim()||Gy).replace(/\/+$/,"")}function cr(e=process.env){return e[L6]?.trim()||O6}function WI(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var Jt,Gy,O6,N6,D6,M6,L6,ri=p(()=>{"use strict";Jt="venice",Gy="https://api.venice.ai/api/v1",O6="venice-uncensored-1-2",N6="KYNVER_VENICE_API_KEY",D6="VENICE_API_KEY",M6="KYNVER_VENICE_BASE_URL",L6="KYNVER_VENICE_DEFAULT_MODEL"});function Xe(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function F6(e){if(!e)return;let t=Xe(e,"workerModelOverride")||Xe(e,"modelOverride");return t||`${Xe(e,"title")}
|
|
150
|
+
${n}`;return F4.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":U4.some(s=>s.test(o))?"low":"elevated"}function $4(e){let t=Ks(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 K4(e){let t=e.inventory??cI();return e.codexBinding?{...t,bindings:{...t.bindings,codex:e.codexBinding}}:t}function wo(e){let t=$4({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 dI(e){let t=e.task??{},r=W4(t),n=K4({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:js())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Gr;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=xy({inventory:n,riskClass:r});return wo(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 wo({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 wo({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 wo({providerId:"claude",binding:c,riskClass:r,routingRule:"orchestration:explicit_claude",model:s})}let a=xy({inventory:n,riskClass:r});if(a)return wo({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 wo({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 F4,U4,pI=p(()=>{"use strict";ho();wy();Ad();JA();uI();F4=[/\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],U4=[/\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 My(e){return`${JSON.stringify(e)}
|
|
151
|
+
`}function Ly(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 Gt,Jr=p(()=>{"use strict";Gt="KYNVER_WORKER_BROKER_SOCKET"});import{unlinkSync as H4,writeFileSync as j4}from"node:fs";import V4 from"node:path";function nl(e){if(!e||e.length===0)return[...rl];let t=new Set;for(let r of e)for(let n of Y4[r]??[])t.add(n);return rl.filter(r=>t.has(r))}function mI(e){return nl(e).map(t=>`mcp__${ve}__${t}`)}function X4(e){return q4.includes(e)}function By(e){return z4.includes(e)}function gI(e){return X4(e)&&!By(e)}function ol(e=process.env){let t=e[G4]?.trim().toLowerCase();return t?t==="1"||t==="true"||t==="yes"||t==="on":!0}function hI(e){return V4.join(e,J4)}function yI(e){let t=hI(e.workerDir),r={mcpServers:{[ve]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Gt]:e.brokerSocketPath}}}};return j4(t,`${JSON.stringify(r,null,2)}
|
|
152
|
+
`,{mode:384}),t}function Md(e){try{return H4(hI(e)),!0}catch{return!1}}var G4,J4,ve,rl,fI,Y4,q4,z4,gt=p(()=>{"use strict";Jr();G4="KYNVER_WORKER_MCP_TOOLS",J4="mcp-config.json",ve="kynver",rl=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],fI=rl.map(e=>`mcp__${ve}__${e}`),Y4={"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"]};q4=["claude","cursor","codex","openai-compatible","gemini","gemini-api"],z4=["openai-compatible","gemini-api"]});import{closeSync as kI,openSync as bI}from"node:fs";import{spawn as Q4}from"node:child_process";function Z4(e,t){let n=RI(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 RI(e,t,r){return["--model",t,...au(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:fI).join(",")}`]:[],"--",e.prompt]}var vI,Fy=p(()=>{"use strict";Or();ko();U();Te();Vt();Tr();gt();qs();Tr();vI={name:"claude",defaultModel:je,preflightModel(e){return Cy(e,je)},start(e){let t=Cy(e.model,je);if(!t.ok)throw new Error(`claude provider model preflight failed: ${t.note}`);let r=t.model;Z4(e,r);let n=iu(r,{pinned:e.modelPinned===!0}),o=ir(e.prompt,e.workerDir),[s,i]=oe("claude",RI({...e,prompt:o.prompt},r,n)),a=bI(e.stdoutPath,"a"),l=bI(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=dt(s,i,e.workerDir),m=Q4(u,d,X({cwd:e.worktreePath,detached:we(),stdio:c,env:xt(process.env,{reviewWorker:e.reviewWorker})}));if(kI(a),kI(l),!m.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return m.unref(),{pid:m.pid,model:r}}}});var Qs,Ld=p(()=>{"use strict";Qs="gpt-5.6-sol"});import{closeSync as wI,openSync as SI}from"node:fs";import{spawn as e6}from"node:child_process";function t6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function r6(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 Uy,_I,xI=p(()=>{"use strict";Or();ko();U();Te();yo();Vt();Ld();qs();Uy=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Qs;_I={name:"hermes-codex",defaultModel:Uy,preflightModel(e){return Vs(e,Uy)},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=Vs(e.model,Uy);if(!t.ok)throw new Error(`hermes-codex provider model preflight failed: ${t.note}`);let r=t.model,n=_t("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),o=ir(e.prompt,e.workerDir),[s,i]=oe(n,r6(r,o.prompt)),a=SI(e.stdoutPath,"a"),l=SI(e.stderrPath,"a"),c=["ignore",a,l],[u,d]=dt(s,i,e.workerDir),m=e6(u,d,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:c,env:t6(e.reviewWorker,e.codexHome)}));if(wI(a),wI(l),!m.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${n}\` on PATH? run \`hermes auth status openai-codex\`)`);return m.unref(),{pid:m.pid,model:r}}}});function s6(e=process.env){return e[n6]?.trim().toLowerCase()==="elevated"?"elevated":o6}function Bd(e=process.platform,t=process.env){return e!=="win32"?[]:["-c",`windows.sandbox="${s6(t)}"`]}var n6,o6,Wy=p(()=>{"use strict";n6="KYNVER_CODEX_WINDOWS_SANDBOX",o6="unelevated"});import{closeSync as CI,existsSync as i6,openSync as EI}from"node:fs";import{spawn as $y}from"node:child_process";function a6(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||Qs}function qr(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function l6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",...t?{CODEX_HOME:t}:{}},{reviewWorker:e})}function c6(e,t,r,n=process.platform,o=process.env){return["--ask-for-approval","never","exec",...Bd(n,o),"--json","--sandbox",r==="read_only"?"read-only":"workspace-write","--model",e,t]}function u6(e,t,r,n){if(process.platform==="win32"){let[l,c]=oe(e,t);return $y(l,c,r)}if(!i6("/usr/bin/script")){let[l,c]=dt(e,t,n);return $y(l,c,r)}let s=[e,...t].map(l=>`'${l.replace(/'/g,"'\\''")}'`).join(" "),[i,a]=dt("script",["-qfc",s,"/dev/null"],n);return $y(i,a,r)}var Yr,AI,So=p(()=>{"use strict";Or();ko();U();Te();Ad();Vt();xI();Wy();Ld();qs();Yr=a6();AI={name:"codex",defaultModel:Yr,preflightModel(e){return Vs(e,Yr)},start(e){if(js().path==="hermes_openai_codex"&&e.executionMode!=="read_only")return _I.start(e);let r=Vs(e.model,Yr);if(!r.ok)throw new Error(`codex provider model preflight failed: ${r.note}`);let n=r.model,o=EI(e.stdoutPath,"a"),s=EI(e.stderrPath,"a"),i=["ignore",o,s],a=qr(),l=ir(e.prompt,e.workerDir),c=c6(n,l.prompt,e.executionMode),u;try{u=u6(a,c,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:i,env:l6(e.reviewWorker,e.codexHome)}),e.workerDir)}finally{CI(o),CI(s)}if(!u.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return u.unref(),{pid:u.pid,model:n}}}});import{existsSync as Fd}from"node:fs";import _o from"node:path";import{fileURLToPath as d6}from"node:url";function p6(e,t){let r=_o.resolve(e);for(;;){let n=_o.join(r,t);if(Fd(n))return n;let o=_o.dirname(r);if(o===r)return null;r=o}}function f6(e){return p6(e,_o.join("node_modules",".bin","tsx"))??"npx"}function Ky(e,t){if(e.endsWith(".ts")){let r=f6(_o.dirname(e));return{command:r,argsPrefix:r==="npx"?["tsx",e]:[e],cliPath:e}}return{command:t,argsPrefix:[e],cliPath:e}}function Ud(e){if(e.explicitCliPath)return Fd(e.explicitCliPath)?Ky(e.explicitCliPath,e.nodeExecutable):null;let t=d6(new URL(".",e.importMetaUrl)),r=_o.join(t,"cli.js");if(Fd(r))return Ky(r,e.nodeExecutable);let n=_o.join(t,"cli.ts");return Fd(n)?Ky(n,e.nodeExecutable):null}var Hy=p(()=>{"use strict"});function g6(e){return`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/worker`}async function sl(e,t,r){let n=await e.fetchImpl(`${e.apiBaseUrl}${t}`,{method:r?.method??"GET",headers:{[m6]: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 il(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Wd(e,t,r){let n=g6(e);switch(t){case"agent_os_context_envelope":{let o=new URLSearchParams({task:e.taskId}),s=il(r.memoryQuery);s&&o.set("memoryQuery",s);let i=il(r.mode);return i&&o.set("mode",i),sl(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)),sl(e,`${n}/memory-search?${o.toString()}`)}case"agent_os_search_skills":{let o=new URLSearchParams,s=il(r.query);s&&o.set("q",s),typeof r.limit=="number"&&o.set("limit",String(r.limit));let i=o.toString();return sl(e,`${n}/skills${i?`?${i}`:""}`)}case"agent_os_get_skill":return sl(e,`${n}/skills/${encodeURIComponent(String(r.slug??""))}`);case"agent_os_progress_note":return sl(e,`${n}/progress-note`,{method:"POST",body:{note:String(r.note??""),...r.kind==="blocked"?{kind:"blocked"}:{},...il(r.eventKey)?{eventKey:il(r.eventKey)}:{}}})}}function Zs(e){return rl.includes(e)}var m6,al,$d=p(()=>{"use strict";gt();m6="X-Kynver-Job-Token",al={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 xo(e){return nl(e).filter(Zs).map(t=>{let r=al[t];return{type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema}}})}var ll=p(()=>{"use strict";$d();gt()});import{closeSync as II,openSync as PI}from"node:fs";import h6 from"node:path";import{fileURLToPath as y6}from"node:url";import{spawn as k6}from"node:child_process";function jy(e=process.env){return e.KYNVER_WORKER_MODEL?.trim()||void 0}function v6(e=process.env){let t=e.KYNVER_WORKER_BASE_URL?.trim();if(!t)throw new cl(`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 cl(`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 cl(`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):b6;return{baseUrl:t.replace(/\/+$/,""),...e.KYNVER_WORKER_API_KEY?.trim()?{apiKey:e.KYNVER_WORKER_API_KEY.trim()}:{},timeoutMs:o}}function ei(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:R6},{role:"user",content:r}],...n&&n.length?{tools:n,tool_choice:"auto"}:{}}}}function w6(){let e=y6(new URL(".",import.meta.url)),t=import.meta.url.endsWith(".ts"),r=h6.join(e,t?"openai-compatible-runner.ts":"openai-compatible-runner.js"),n=Ud({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 S6(e,t,r){let n=e.workerToolGrant,o=n?xo(n.capabilities):void 0;return{provider:Co,model:r,request:ei(t,r,e.prompt,o),timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}function ti(e,t,r){let n=w6(),o=PI(e.stdoutPath,"a"),s=PI(e.stderrPath,"a"),i=["pipe",o,s],[a,l]=dt(n.command,n.argsPrefix,e.workerDir),c=k6(a,l,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:i,env:xt(process.env,{reviewWorker:e.reviewWorker})}));if(II(o),II(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,b6,cl,R6,TI,ri=p(()=>{"use strict";Or();ko();U();Hy();Vt();ll();Co="openai-compatible",b6=600*1e3;cl=class extends Error{};R6="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.";TI={name:Co,get defaultModel(){return jy()},preflightModel(e){return Gs(e,jy())},start(e){let t=Gs(e.model,jy());if(!t.ok)throw new Error(`openai-compatible provider model preflight failed: ${t.note}`);let r=t.model,n=v6(process.env),o=S6(e,n,r);return ti(e,o,r)}}});import _6 from"node:path";function Ct(e=process.env){return e.KYNVER_GEMINI_BIN?.trim()||e.GEMINI_BIN?.trim()||"agy"}function ni(e){let t=_6.basename(e).toLowerCase().replace(/\.cmd$/i,"").replace(/\.exe$/i,"");return t==="agy"||t==="antigravity"?"antigravity":"gemini"}function OI(e){return e.requested&&/-(?:high|medium|low)$/i.test(e.requested)?e.requested:e.model}function NI(e){let t=e.trim().toLowerCase();return!t||x6.has(t)?[]:["--model",e.trim()]}function Kd(e,t){return[...NI(t),"--output-format","stream-json",...e.executionMode==="read_only"?[]:["--dangerously-skip-permissions"],"--prompt",e.prompt]}function DI(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",ve]:[],"--prompt",e.prompt]}var x6,Eo=p(()=>{"use strict";gt();x6=new Set(["gemini-2.5-pro","gemini-2.5-flash","auto","pro","flash","flash-lite"])});import{closeSync as MI,openSync as LI}from"node:fs";import{spawn as C6}from"node:child_process";function ze(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}function E6(e,t){return xt({...process.env,CI:"1",NO_COLOR:"1",GEMINI_CLI_TRUST_WORKSPACE:"true",...t?{GEMINI_CLI_HOME:t}:{}},{reviewWorker:e})}var lr,BI,ul=p(()=>{"use strict";Or();ko();U();Te();Eo();Vt();qs();lr="gemini";BI={name:lr,get defaultModel(){return ze()},preflightModel(e){return Js(e,ze())},start(e){let t=Js(e.model,ze());if(!t.ok)throw new Error(`gemini provider model preflight failed: ${t.note}`);let r=Ct(),n=ni(r),o=n==="antigravity"?OI(t):t.model,s={...e,prompt:ir(e.prompt,e.workerDir).prompt},i=n==="antigravity"?Kd(s,o):DI(s,o),[a,l]=oe(r,i),c=LI(e.stdoutPath,"a"),u=LI(e.stderrPath,"a"),d=["ignore",c,u],[m,f]=dt(a,l,e.workerDir),g=C6(m,f,X({cwd:e.worktreePath,detached:we(),shell:!1,stdio:d,env:E6(e.reviewWorker,n==="gemini"?e.geminiCliHome:void 0)}));if(MI(c),MI(u),!g.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 g.unref(),{pid:g.pid,model:o}}}});function I6(e=process.env){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()||void 0}function P6(e=process.env){let t=I6(e);if(!t)throw new dl('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()||FI,n;try{n=new URL(r)}catch{throw new dl(`KYNVER_GEMINI_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${FI}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new dl(`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):A6;return{baseUrl:r.replace(/\/+$/,""),apiKey:t,timeoutMs:s}}function T6(e,t,r){let n=e.workerToolGrant,o=n?xo(n.capabilities):void 0,s=ei(t,r,e.prompt,o);return{provider:cr,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var cr,FI,A6,dl,UI,Vy=p(()=>{"use strict";ri();ll();Vt();ul();cr="gemini-api",FI="https://generativelanguage.googleapis.com/v1beta/openai",A6=600*1e3,dl=class extends Error{};UI={name:cr,get defaultModel(){return ze()},preflightModel(e){return Js(e,ze())},start(e){let t=Js(e.model,ze());if(!t.ok)throw new Error(`gemini-api provider model preflight failed: ${t.note}`);let r=t.model,n=P6(process.env),o=T6(e,n,r);return ti(e,o,r)}}});function Hd(e=process.env){return e[N6]?.trim()||e[D6]?.trim()||void 0}function jd(e=process.env){return(e[M6]?.trim()||Gy).replace(/\/+$/,"")}function ur(e=process.env){return e[L6]?.trim()||O6}function WI(e){return{"content-type":"application/json",authorization:`Bearer ${e}`}}var Jt,Gy,O6,N6,D6,M6,L6,oi=p(()=>{"use strict";Jt="venice",Gy="https://api.venice.ai/api/v1",O6="venice-uncensored-1-2",N6="KYNVER_VENICE_API_KEY",D6="VENICE_API_KEY",M6="KYNVER_VENICE_BASE_URL",L6="KYNVER_VENICE_DEFAULT_MODEL"});function Xe(e,t){let r=e[t];return typeof r=="string"?r.trim():""}function F6(e){if(!e)return;let t=Xe(e,"workerModelOverride")||Xe(e,"modelOverride");return t||`${Xe(e,"title")}
|
|
153
153
|
${Xe(e,"description")}
|
|
154
|
-
${Xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function $I(e){return e.toLowerCase()}function HI(e,t=I(),r=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(t.defaultModel?.trim()||r.KYNVER_DEFAULT_MODEL?.trim()):!1}function Yy(e=I()){let t=e.defaultModel?.trim();if(t)return t;let r=process.env.KYNVER_DEFAULT_MODEL?.trim();return r||B6}function jd(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-")?ar:"cursor"}function U6(e,t){let r=e.trim().toLowerCase(),n=t?.trim();return r==="cursor"?{model:wd,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="claude"||r==="anthropic"?{model:je,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini"||r==="google"?{model:ze(),provider:ar,rule:n&&n!==ar?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini-api"||r==="gemini_api"||r==="google-api"?{model:ze(),provider:lr,rule:n&&n!==lr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="venice"||r==="venice-ai"||r==="venice_ai"?{model:cr(),provider:Jt,rule:n&&n!==Jt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function KI(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 jI(e,t,r){return W6.has(e)?cn:t.includes("review")||/^review[\s:]/.test(r)||r.includes("critique")?cn:je}function $6(e){let t=$I(Xe(e,"executorRef")),r=Xe(e,"title").toLowerCase(),n=Xe(e,"priority")||"normal",o=$I(Xe(e,"roleLane"));if(t.includes("provider:claude")||t.startsWith("claude:")){let i=jI(o,t,r);return{provider:"claude",model:i,rule:i===cn?"factory:claude_review":"factory:claude_implementation"}}if(t.includes("provider:codex")||t.startsWith("codex:"))return{provider:"codex",model:Jr,rule:"lane:codex_orchestration"};if(t.includes("provider:chatgpt")||t.startsWith("chatgpt:")||t.includes("provider:gpt")||t.startsWith("gpt:")){let i=mt(Xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Jr},rule:"lane:codex_orchestration"}}if(t.includes("provider:openai")||t.startsWith("openai-compatible:")){let i=mt(Xe(e,"executorRef"));return{provider:xo,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(t.includes("provider:venice")||t.startsWith("venice:")){let i=mt(Xe(e,"executorRef"));return{provider:Jt,...i?.model?{model:i.model}:{model:cr()},rule:"lane:venice"}}if(t.includes("provider:gemini-api")||t.startsWith("gemini-api:")){let i=mt(Xe(e,"executorRef"));return{provider:lr,...i?.model?{model:i.model}:{model:ze()},rule:"lane:gemini_api"}}if(t.includes("provider:gemini")||t.startsWith("gemini:")){let i=mt(Xe(e,"executorRef"));return{provider:ar,...i?.model?{model:i.model}:{model:ze()},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:Jr,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 KI(t,r)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(KI(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=Yy();return{model:s,provider:jd(s),rule:"default:global"}}function K6(e){return e?mt(Xe(e,"executorRef")):null}function H6(e){switch(et(e)){case ar:case lr:return ze();case Jt:return cr();case"claude":return je;case"codex":return Jr;case"cursor":return wd;default:return}}function GI(e,t,r){let n=et(t);return n===e.provider&&e.rule===r?e:{...e,provider:n,model:H6(n)??e.model,rule:r}}function j6(e,t){let r=t?.trim();return!r||e.rule.startsWith("explicit:")&&e.rule!==Jy?e:GI(e,r,Jy)}function V6(e,t){if(t.explicitProvider?.trim()||vy(t.task))return e;let r=t.configuredProvider?.trim();if(!r)return e;let n=et(r);return n===Vr||n===e.provider?e:GI(e,n,VI)}function Vd(e){let t,r=K6(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=U6(l,e.explicitProvider);c?t=c:t={model:l,provider:e.explicitProvider?.trim()||jd(l),rule:"explicit:cli",requestedModel:l}}else if(n)t={model:n,provider:o||jd(n),rule:r?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Rd(e.task)){let l=F6(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",m=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",f=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=jI(d,m,f),u=c===cn?"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=$6(e.task);t={...l,requestedModel:l.model}}else{let l=Yy();t={model:l,provider:e.explicitProvider?.trim()||jd(l),rule:"default:global",requestedModel:l}}t=j6(t,e.explicitProvider),t=V6(t,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&et(e.configuredProvider)!==Vr&&t.rule==="config:worker_provider",i=LA({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===Jy||i.rule===VI||jr(i.provider)&&(e.explicitProviderIsOperatorOverride||Rd(e.task))||i.provider===xo||i.provider===ar||i.provider===lr||i.provider===Jt||i.provider==="codex")return i;let a=dI({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??Jr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function JI(e,t,r){return e||t||r||Yy()||je}var B6,wd,W6,Jy,VI,Sd=p(()=>{"use strict";$();vd();pI();Fy();wo();ei();ll();Vy();ri();go();B6=je,wd="composer-2.5";W6=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);Jy="explicit:cli_provider",VI="config:worker_provider"});function G6(e){let t=e?.executorRef;return typeof t=="string"?t.trim():""}function YI(e){return e?.trim()||void 0}function qI(e){let t=G6(e.task),r=mt(t),n=e.explicitProvider?.trim().toLowerCase(),o=YI(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=YI(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||t&&MA(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&&!jr(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 zI=p(()=>{"use strict";vd();go()});function XI(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function QI(){return{maxTaskAttempts:XI(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ls("harness.maxTaskAttempts",4))),dispatchCooldownMs:XI(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ls("harness.dispatchCooldownMs",5e3)))}}var ZI=p(()=>{"use strict";wn()});function zy(e){return e?.trim()?e.trim():null}function J6(e){let t=zy(e);if(!t?.startsWith(qy))return null;let r=t.slice(qy.length),n=r.indexOf(eP);return n>=0?r.slice(0,n).trim()||null:r.trim()||null}function ul(e,t){let r=e.trim(),n=t.trim();return`${qy}${r}${eP}${n}`}function Y6(e,t){let r=zy(t);return r?J6(e)===r:!1}function Gd(e){let t=zy(e.workerLeaseOwner);return t&&Y6(t,e.runId)?t:ul(e.runId,e.runnerId)}var qy,eP,dl=p(()=>{"use strict";qy="kynver-harness:",eP="@runner:"});async function Jd(e){let t=new Map,r=e.agentOsId?.trim();if(!r||e.taskIds.length===0)return t;let n=ge(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 me(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 Xy=p(()=>{"use strict";$();qe()});async function Yd(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 Jd({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)&&te(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}var Qy=p(()=>{"use strict";Xy();Q()});import q6 from"node:path";function tP(e,t){return K(q6.join(G(e),"workers",W(t),"worker.json"),void 0)}async function rP(e,t){let r=ie(e),n=String(t.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=ge(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)):ek,a=$e({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(r.workers||{})){let m=tP(e,d);if(!m?.taskId||!m.agentOsId){u.push(d);continue}if(!ne(m.pid)){u.push(d);continue}if(ue(m).status==="done"){u.push(d);continue}let g=Gd({runId:e,workerLeaseOwner:m.leaseOwner??null,runnerId:a}),h=await Yd({worker:m,agentOsId:n,baseUrl:o,secret:s}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(m.taskId)}/renew-lease`,v=await me(y,s,{leaseOwner:h.leaseOwner??g,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(v.ok){l.push(d);continue}let k=v.response&&typeof v.response=="object"&&"reason"in v.response?String(v.response.reason??`http ${v.status}`):`http ${v.status}`;c.push({worker:d,reason:k})}return{renewed:l,failed:c,skipped:u}}function nP(e,t){let r=ie(e);for(let n of Object.keys(r.workers||{})){let o=tP(e,n);if(!(!o||o.taskId!==t||!ne(o.pid)||ue(o).status==="done"))return!0}return!1}var Zy=p(()=>{"use strict";$();qe();Q();Oe();U();qd();dl();Wr();Qy()});import z6 from"node:path";function oP(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function sP(e,t,r,n){return oP(t)||(t.noRestartAt=new Date().toISOString(),t.noRestartSource=r,n&&(t.noRestartReason=n),t.steerRestartRequired=!1,te(e,t)),t}function zd(e,t={}){let r=t.isAlive??ne,n=t.kill??he,o=t.sleep??jc;return!e||!r(e)?null:(n(e,"SIGTERM"),o(1e3),r(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function tk(e,t,r,n,o={}){sP(e,t,r,n);let s=zd(t.pid,o),i=zd(t.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function iP(e,t,r={}){let n=r.isAlive??ne,o=ie(e),s=[];for(let i of Object.keys(o.workers||{})){if(r.except&&i===r.except)continue;let a=K(z6.join(G(o.id),"workers",W(i),"worker.json"),void 0);!a||a.taskId!==t||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(zd(a.completionSidecarPid,r),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),te(o.id,a),s.push(i))}return s}function X6(e=process.env){let t=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function aP(e,t,r,n={}){if(!X6(n.env))throw tk(e,t,"watcher_attach_failed",r,n.deps),t.status="failed",te(e,t),new Error(`watcher_attach_failed: ${r}; worker stopped instead of running unwatched`)}var ni=p(()=>{"use strict";Q();U()});function cP(e){let t=e.baseCommit?.trim()??"",r=[];t&&t!==lP&&r.push({ref:t,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==lP&&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 lP,uP=p(()=>{"use strict";lP="unknown"});function Xd(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function dP(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Xd(e)}function eX(e){let t=(e.title??"").trim().toLowerCase();if(t.startsWith("fix:")||t.startsWith("repair:"))return!0;let r=(e.executorRef??"").toLowerCase();return!!(r.startsWith(Z6)||r.includes("repair")||r.includes("unblock"))}function tX(e){let t={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return t;let r=e.match(Q6);if(!r?.[1])return t;try{let n=JSON.parse(r[1]),o=Xd(String(n.targetPrUrl??n.target_pr_url??"")),s=Xd(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?dP(o):null,targetPrBranch:s}}catch{return t}}function pP(e){if(!eX(e))return null;let t=tX(e.description),r=e.prUrl?dP(e.prUrl):null,n=t.targetPrUrl??r;return n?{targetPrUrl:n,targetPrBranch:t.targetPrBranch??Xd(e.branch)}:null}function fP(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 Q6,Z6,rk=p(()=>{"use strict";Q6=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Z6="next-action-fix:"});var mP=p(()=>{"use strict"});function gP(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=[...Ua(`worker.prompt.progress.${n}`).split(`
|
|
155
|
-
`),o],i
|
|
156
|
-
`),a
|
|
157
|
-
`);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
|
+
${Xe(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function $I(e){return e.toLowerCase()}function HI(e,t=I(),r=process.env){return e==="explicit:cli"||e==="explicit:spawn"?!0:e==="default:global"?!!(t.defaultModel?.trim()||r.KYNVER_DEFAULT_MODEL?.trim()):!1}function Yy(e=I()){let t=e.defaultModel?.trim();if(t)return t;let r=process.env.KYNVER_DEFAULT_MODEL?.trim();return r||B6}function Vd(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-")?lr:"cursor"}function U6(e,t){let r=e.trim().toLowerCase(),n=t?.trim();return r==="cursor"?{model:_d,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="claude"||r==="anthropic"?{model:je,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini"||r==="google"?{model:ze(),provider:lr,rule:n&&n!==lr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="gemini-api"||r==="gemini_api"||r==="google-api"?{model:ze(),provider:cr,rule:n&&n!==cr?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:r==="venice"||r==="venice-ai"||r==="venice_ai"?{model:ur(),provider:Jt,rule:n&&n!==Jt?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function KI(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 jI(e,t,r){return W6.has(e)?un:t.includes("review")||/^review[\s:]/.test(r)||r.includes("critique")?un:je}function $6(e){let t=$I(Xe(e,"executorRef")),r=Xe(e,"title").toLowerCase(),n=Xe(e,"priority")||"normal",o=$I(Xe(e,"roleLane"));if(t.includes("provider:claude")||t.startsWith("claude:")){let i=jI(o,t,r);return{provider:"claude",model:i,rule:i===un?"factory:claude_review":"factory:claude_implementation"}}if(t.includes("provider:codex")||t.startsWith("codex:"))return{provider:"codex",model:Yr,rule:"lane:codex_orchestration"};if(t.includes("provider:chatgpt")||t.startsWith("chatgpt:")||t.includes("provider:gpt")||t.startsWith("gpt:")){let i=mt(Xe(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:Yr},rule:"lane:codex_orchestration"}}if(t.includes("provider:openai")||t.startsWith("openai-compatible:")){let i=mt(Xe(e,"executorRef"));return{provider:Co,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(t.includes("provider:venice")||t.startsWith("venice:")){let i=mt(Xe(e,"executorRef"));return{provider:Jt,...i?.model?{model:i.model}:{model:ur()},rule:"lane:venice"}}if(t.includes("provider:gemini-api")||t.startsWith("gemini-api:")){let i=mt(Xe(e,"executorRef"));return{provider:cr,...i?.model?{model:i.model}:{model:ze()},rule:"lane:gemini_api"}}if(t.includes("provider:gemini")||t.startsWith("gemini:")){let i=mt(Xe(e,"executorRef"));return{provider:lr,...i?.model?{model:i.model}:{model:ze()},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:Yr,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 KI(t,r)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(KI(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=Yy();return{model:s,provider:Vd(s),rule:"default:global"}}function K6(e){return e?mt(Xe(e,"executorRef")):null}function H6(e){switch(et(e)){case lr:case cr:return ze();case Jt:return ur();case"claude":return je;case"codex":return Yr;case"cursor":return _d;default:return}}function GI(e,t,r){let n=et(t);return n===e.provider&&e.rule===r?e:{...e,provider:n,model:H6(n)??e.model,rule:r}}function j6(e,t){let r=t?.trim();return!r||e.rule.startsWith("explicit:")&&e.rule!==Jy?e:GI(e,r,Jy)}function V6(e,t){if(t.explicitProvider?.trim()||Ry(t.task))return e;let r=t.configuredProvider?.trim();if(!r)return e;let n=et(r);return n===Gr||n===e.provider?e:GI(e,n,VI)}function Gd(e){let t,r=K6(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=U6(l,e.explicitProvider);c?t=c:t={model:l,provider:e.explicitProvider?.trim()||Vd(l),rule:"explicit:cli",requestedModel:l}}else if(n)t={model:n,provider:o||Vd(n),rule:r?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&Sd(e.task)){let l=F6(e.task),c,u;if(l)c=l,u="task:provider_override";else{let d=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",m=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",f=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=jI(d,m,f),u=c===un?"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=$6(e.task);t={...l,requestedModel:l.model}}else{let l=Yy();t={model:l,provider:e.explicitProvider?.trim()||Vd(l),rule:"default:global",requestedModel:l}}t=j6(t,e.explicitProvider),t=V6(t,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&et(e.configuredProvider)!==Gr&&t.rule==="config:worker_provider",i=LA({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===Jy||i.rule===VI||Vr(i.provider)&&(e.explicitProviderIsOperatorOverride||Sd(e.task))||i.provider===Co||i.provider===lr||i.provider===cr||i.provider===Jt||i.provider==="codex")return i;let a=dI({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??Yr:i.model,rule:a.rule,requestedModel:i.requestedModel,orchestrationAudit:a.audit}}function JI(e,t,r){return e||t||r||Yy()||je}var B6,_d,W6,Jy,VI,xd=p(()=>{"use strict";$();wd();pI();Fy();So();ri();ul();Vy();oi();ho();B6=je,_d="composer-2.5";W6=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);Jy="explicit:cli_provider",VI="config:worker_provider"});function G6(e){let t=e?.executorRef;return typeof t=="string"?t.trim():""}function YI(e){return e?.trim()||void 0}function qI(e){let t=G6(e.task),r=mt(t),n=e.explicitProvider?.trim().toLowerCase(),o=YI(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=YI(e.routing.model),u={provider:l,model:c,rule:e.routing.rule};return s&&s!=="cursor"||t&&MA(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&&!Vr(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 zI=p(()=>{"use strict";wd();ho()});function XI(e,t){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.floor(r)}function QI(){return{maxTaskAttempts:XI(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Bs("harness.maxTaskAttempts",4))),dispatchCooldownMs:XI(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Bs("harness.dispatchCooldownMs",5e3)))}}var ZI=p(()=>{"use strict";Sn()});function zy(e){return e?.trim()?e.trim():null}function J6(e){let t=zy(e);if(!t?.startsWith(qy))return null;let r=t.slice(qy.length),n=r.indexOf(eP);return n>=0?r.slice(0,n).trim()||null:r.trim()||null}function pl(e,t){let r=e.trim(),n=t.trim();return`${qy}${r}${eP}${n}`}function Y6(e,t){let r=zy(t);return r?J6(e)===r:!1}function Jd(e){let t=zy(e.workerLeaseOwner);return t&&Y6(t,e.runId)?t:pl(e.runId,e.runnerId)}var qy,eP,fl=p(()=>{"use strict";qy="kynver-harness:",eP="@runner:"});async function Yd(e){let t=new Map,r=e.agentOsId?.trim();if(!r||e.taskIds.length===0)return t;let n=ge(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 me(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 Xy=p(()=>{"use strict";$();qe()});async function qd(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 Yd({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)&&te(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}var Qy=p(()=>{"use strict";Xy();Q()});import q6 from"node:path";function tP(e,t){return K(q6.join(G(e),"workers",W(t),"worker.json"),void 0)}async function rP(e,t){let r=ie(e),n=String(t.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=ge(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)):ek,a=$e({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(r.workers||{})){let m=tP(e,d);if(!m?.taskId||!m.agentOsId){u.push(d);continue}if(!ne(m.pid)){u.push(d);continue}if(ue(m).status==="done"){u.push(d);continue}let g=Jd({runId:e,workerLeaseOwner:m.leaseOwner??null,runnerId:a}),h=await qd({worker:m,agentOsId:n,baseUrl:o,secret:s}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(m.taskId)}/renew-lease`,v=await me(y,s,{leaseOwner:h.leaseOwner??g,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(v.ok){l.push(d);continue}let k=v.response&&typeof v.response=="object"&&"reason"in v.response?String(v.response.reason??`http ${v.status}`):`http ${v.status}`;c.push({worker:d,reason:k})}return{renewed:l,failed:c,skipped:u}}function nP(e,t){let r=ie(e);for(let n of Object.keys(r.workers||{})){let o=tP(e,n);if(!(!o||o.taskId!==t||!ne(o.pid)||ue(o).status==="done"))return!0}return!1}var Zy=p(()=>{"use strict";$();qe();Q();Oe();U();zd();fl();$r();Qy()});import z6 from"node:path";function oP(e){return typeof e?.noRestartAt=="string"&&e.noRestartAt.trim().length>0}function sP(e,t,r,n){return oP(t)||(t.noRestartAt=new Date().toISOString(),t.noRestartSource=r,n&&(t.noRestartReason=n),t.steerRestartRequired=!1,te(e,t)),t}function Xd(e,t={}){let r=t.isAlive??ne,n=t.kill??he,o=t.sleep??Gc;return!e||!r(e)?null:(n(e,"SIGTERM"),o(1e3),r(e)?(n(e,"SIGKILL"),"SIGKILL"):"SIGTERM")}function tk(e,t,r,n,o={}){sP(e,t,r,n);let s=Xd(t.pid,o),i=Xd(t.completionSidecarPid,o);return{workerSignal:s,sidecarSignal:i}}function iP(e,t,r={}){let n=r.isAlive??ne,o=ie(e),s=[];for(let i of Object.keys(o.workers||{})){if(r.except&&i===r.except)continue;let a=K(z6.join(G(o.id),"workers",W(i),"worker.json"),void 0);!a||a.taskId!==t||n(a.pid)||!a.completionSidecarPid||!n(a.completionSidecarPid)||(Xd(a.completionSidecarPid,r),a.completionSidecarPid=void 0,a.watcherClearedForRelaunchAt=new Date().toISOString(),te(o.id,a),s.push(i))}return s}function X6(e=process.env){let t=String(e.KYNVER_ALLOW_UNWATCHED_WORKER??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function aP(e,t,r,n={}){if(!X6(n.env))throw tk(e,t,"watcher_attach_failed",r,n.deps),t.status="failed",te(e,t),new Error(`watcher_attach_failed: ${r}; worker stopped instead of running unwatched`)}var si=p(()=>{"use strict";Q();U()});function cP(e){let t=e.baseCommit?.trim()??"",r=[];t&&t!==lP&&r.push({ref:t,source:"baseCommit"});let n=e.base?.trim()??"";n&&n!==lP&&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 lP,uP=p(()=>{"use strict";lP="unknown"});function Qd(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function dP(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:Qd(e)}function eX(e){let t=(e.title??"").trim().toLowerCase();if(t.startsWith("fix:")||t.startsWith("repair:"))return!0;let r=(e.executorRef??"").toLowerCase();return!!(r.startsWith(Z6)||r.includes("repair")||r.includes("unblock"))}function tX(e){let t={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return t;let r=e.match(Q6);if(!r?.[1])return t;try{let n=JSON.parse(r[1]),o=Qd(String(n.targetPrUrl??n.target_pr_url??"")),s=Qd(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?dP(o):null,targetPrBranch:s}}catch{return t}}function pP(e){if(!eX(e))return null;let t=tX(e.description),r=e.prUrl?dP(e.prUrl):null,n=t.targetPrUrl??r;return n?{targetPrUrl:n,targetPrBranch:t.targetPrBranch??Qd(e.branch)}:null}function fP(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 Q6,Z6,rk=p(()=>{"use strict";Q6=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Z6="next-action-fix:"});var mP=p(()=>{"use strict"});function gP(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=[...$a(`worker.prompt.progress.${n}`).split(`
|
|
155
|
+
`),o],i=$a(`worker.prompt.merge_gate.${n}`).split(`
|
|
156
|
+
`),a=$a(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
157
|
+
`);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.",...$a("worker.prompt.core_rules").split(`
|
|
158
158
|
`),"",...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?[...fP({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
159
|
-
`)}var hP=p(()=>{"use strict";rk();
|
|
160
|
-
${n}`,s=uX(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(aX)||t===lX||t.startsWith("daemon-review:")||s&&
|
|
161
|
-
`).map(t=>t.trim()).find(Boolean)??""}function FP(e,t){let r=t.git(e,["remote","get-url","origin"]);return r.status!==0?null:MP(r.stdout)}function
|
|
159
|
+
`)}var hP=p(()=>{"use strict";rk();Sn();mP()});function nX(e=process.env){let t=Hd(e);if(!t)throw new ml('the "venice" worker provider requires KYNVER_VENICE_API_KEY (or VENICE_API_KEY) on the daemon host \u2014 create a key at https://venice.ai/settings/api.');let r=jd(e),n;try{n=new URL(r)}catch{throw new ml(`KYNVER_VENICE_BASE_URL is not a valid URL: "${r}" \u2014 expected e.g. ${Gy}`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw new ml(`KYNVER_VENICE_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):rX;return{baseUrl:r,apiKey:t,timeoutMs:s}}function oX(e,t,r){let n=e.workerToolGrant,o=n?xo(n.capabilities):void 0,s=ei(t,r,e.prompt,o);return s.headers=WI(t.apiKey??""),{provider:Jt,model:r,request:s,timeoutMs:t.timeoutMs,heartbeatPath:e.heartbeatPath,endpointOrigin:new URL(t.baseUrl).origin,...n&&o&&o.length?{workerTools:n}:{}}}var rX,ml,yP,kP=p(()=>{"use strict";ri();ll();Vt();oi();rX=600*1e3,ml=class extends Error{};yP={name:Jt,get defaultModel(){return ur()},preflightModel(e){return Gs(e,ur())},start(e){let t=Gs(e.model,ur());if(!t.ok)throw new Error(`venice provider model preflight failed: ${t.note}`);let r=nX(process.env);return ti(e,oX(e,r,t.model),t.model)}}});function vP(e){if(bP)return bP;let t=e?.trim();if(t){let o=Zd[et(t)];if(!o)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Zd).join(", ")}`);return o}let r=BA(I().workerProvider),n=Zd[r];if(!n)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Zd).join(", ")}`);return n}var Zd,bP,RP=p(()=>{"use strict";$();ho();Fy();So();zs();ul();Vy();kP();oi();ri();Zd={claude:vI,codex:AI,cursor:rI,[lr]:BI,[cr]:UI,[Co]:TI,[Jt]:yP},bP=null});function wP(e){return!!e.completionReportedAt?.trim()}function ep(e,t,r){e.completionReportedAt=r.completionReportedAt,e.completionOutcome=r.completionOutcome,r.completionResponse!==void 0&&(e.completionResponse=r.completionResponse),te(t,e)}var nk=p(()=>{"use strict";Q()});function sX(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function ok(e){return!!(sX(e.completionBlocker)||e.completionOutcome==="rejected")}function gl(e){return wP(e)&&!ok(e)}var tp=p(()=>{"use strict";nk()});function sk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function hl(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function _P(e){let t=sk(e);if(!t)return{routeOutcome:null,taskAdvanced:!1,detail:null};let r=hl(t.outcome),n=hl(t.detail)??hl(t.error),o=sk(t.task),s=sk(t.closedTask),i=o?hl(o.status):null,a=s?hl(s.status):null,c=r==="skipped_terminal_task"&&(i!==null&&SP.has(i)||a!==null&&SP.has(a))||r!==null&&iX.has(r)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:r,taskAdvanced:c,detail:n}}function xP(e){return e.taskAdvanced}var iX,SP,CP=p(()=>{"use strict";iX=new Set(["review_scheduled","review_already_scheduled","closed","dispatched","dispatch_already_done","steer_restart_required"]),SP=new Set(["done","failed","cancelled"])});var EP=p(()=>{"use strict"});function uX(e){if(!e)return null;let t=e.trim().toLowerCase();return t.length?t:null}function ik(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|runtime verification)\b/.test(e)}function dX(e,t){return e.startsWith("factory:")?e.includes("lb")||ik(t):!1}function np(e){let t=(e.executorRef??"").toLowerCase(),r=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${r}
|
|
160
|
+
${n}`,s=uX(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(aX)||t===lX||t.startsWith("daemon-review:")||s&&rp.has(s)&&(t.includes("evidence")||t.includes("validate")||t.includes("review")||dX(t,o)||ik(o))||t.startsWith(cX)&&e.parentTaskId&&s&&rp.has(s)||e.planId&&!e.parentTaskId&&s&&rp.has(s)&&ik(o)||r.includes("expert pr review")||e.parentTaskId&&(r.startsWith("review:")||r.includes("review required")||r.includes("runtime review"))&&s&&rp.has(s))}var aX,lX,cX,rp,ak=p(()=>{"use strict";aX="expert-lane-pr-review:",lX="plan-review-task",cX="scheduledjob:",rp=new Set(["lorentz","dalton","rhea","sentinel"])});function IP(e){return!!(e&&fX.test(e))}function Qe(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function PP(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Qe(e.head)}function TP(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?Qe(r[0]):null}function mX(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 gX(e,t){if(t.changedFiles.length>0)return!1;let r=Qe(e.personaSlug)?.toLowerCase();if(r&&pX.has(r))return!0;let n=Qe(e.routingRule)??"";return!!(n&&AP.test(n))}function hX(e,t){if(e.changedFiles.length>0)return!0;let r=Qe(t?.baseRef);if(r&&t?.exec&&t.worktreePath){let n=mX(t.worktreePath,r,t.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(Qe(e.headCommit)||PP(e.gitAncestry))}function OP(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(np({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let t=Qe(e.routingRule)??"";if(t&&AP.test(t))return{required:!1,reason:"review_lane"};let r=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(gX(r,e.snapshot))return{required:!1,reason:"review_artifact"};if(Qe(e.patchPath)||Qe(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(Qe(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(Qe(e.prUrl)??Qe(e.taskPrUrl)??Qe(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 hX(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function NP(e,t){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:Qe(t?.headCommit)??PP(e.gitAncestry),prUrl:Qe(t?.prUrl)??null}}var AP,pX,fX,lk=p(()=>{"use strict";ak();kd();AP=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,pX=new Set(_A()),fX=/no commits between/i});function MP(e){let t=e.trim();if(!t)return null;let r=t.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(r)return DP(r[1]);let n=t.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return DP(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 DP(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 LP=p(()=>{"use strict"});import{spawnSync as yX}from"node:child_process";function kX(e,t,r){try{let n=yX(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 bX(e){return e.split(`
|
|
161
|
+
`).map(t=>t.trim()).find(Boolean)??""}function FP(e,t){let r=t.git(e,["remote","get-url","origin"]);return r.status!==0?null:MP(r.stdout)}function Ao(e,t){let r=t.git(e,["rev-parse","HEAD"]);return r.status!==0?null:r.stdout.trim()||null}function op(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 vX(e,t){let r=t?.trim();return!r||!/^[\w.-]{1,128}$/.test(r)||new RegExp(`^${BP}:`,"m").test(e)?e:`${e.trimEnd()}
|
|
162
162
|
|
|
163
|
-
${BP}: ${r}`}function
|
|
164
|
-
`)}function
|
|
163
|
+
${BP}: ${r}`}function yl(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",vX(n,e.taskId)]);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=Ao(t,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function UP(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 WP(e){let t=op(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=RX(r.stdout)??op(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 RX(e){let r=bX(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return r?r[0]:null}var sp,BP,ip=p(()=>{"use strict";LP();xe();sp={git:(e,t)=>Z(e,t),gh:(e,t)=>kX("gh",e,t)};BP="Kynver-Task"});function $P(e){return`t-${W(e)}-a`}function KP(e,t){let r=$P(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 kl(e){return e.trim().toLowerCase()}function HP(e,t){if(!e.length)return null;if(t){let r=kl(t),n=e.find(o=>kl(o.url)===r);if(n)return n}return[...e].sort((r,n)=>n.number-r.number)[0]??null}function jP(e,t){let r=kl(t);return e.filter(n=>kl(n.url)!==r).map(n=>n.url)}function VP(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 wX(e){let t=new Set,r=[];for(let n of e){let o=kl(n.url);t.has(o)||(t.add(o),r.push(n))}return r}function SX(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?[]:VP(o.stdout).filter(s=>KP(s,r))}function _X(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=$P(r);return VP(o.stdout).filter(i=>i.headRefName.toLowerCase().includes(s)||KP(i,r))}function ck(e,t,r,n){let o=r.trim();if(!o)return[];let s=SX(e,t,o,n),i=_X(e,t,o,n);return wX([...s,...i])}var ap=p(()=>{"use strict";U()});function xX(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 uk(e){let t=jP(e.rows,e.canonicalPrUrl),r=[],n=[];for(let o of t){let s=xX(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 dk=p(()=>{"use strict";ap()});function GP(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 JP=p(()=>{"use strict"});function CX(e){return e.gh(process.cwd(),["--version"]).status===0}function EX(e,t){return`AgentOS harness: ${e} (${t})`}function AX(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(`
|
|
164
|
+
`)}function xn(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function IX(e){return xn(e.prUrlHint)??TP(e.status.finalResult)??xn(e.worker.taskPrUrl)??null}function PX(e){let{snapshot:t,canonical:r,workerName:n,exec:o}=e,s=!1,i=!1,a=t.headCommit??Ao(t.worktreePath,o)??void 0;if(t.changedFiles.length>0){let l=yl({worktreePath:t.worktreePath,branch:t.branch,commitMessage:`chore(harness): update PR handoff for ${n}`,taskId:e.taskId,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=UP({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=Ao(t.worktreePath,o)??a}return{ok:!0,prUrl:r.url,headCommit:a,committed:s,pushed:i}}function pk(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Ao(e.snapshot.worktreePath,e.exec)??void 0};let t=yl({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,taskId:e.taskId,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 fk(e,t=sp){let r=IX(e),n=NP(e.status,{prUrl:r,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!OP({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?pk({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:xn(e.worker.taskId),exec:t}):{ok:!0};if(r)return pk({snapshot:n,prUrl:r,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:xn(e.worker.taskId),exec:t});if(!CX(t)){let b=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${b?`${b} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=FP(n.worktreePath,t);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let b=!1,S=!1,w=n.headCommit??Ao(n.worktreePath,t)??void 0;if(n.changedFiles.length>0){let _=yl({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,taskId:xn(e.worker.taskId),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`."};b=_.committed,S=_.pushed,w=_.headCommit??w}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`."};S=_.status===0}return{ok:!0,prUrl:a,headCommit:w,committed:b,pushed:S}}let l=xn(e.worker.taskId),c=[];if(l){c=ck(n.worktreePath,i,l,t);let b=HP(c);if(b){let S=PX({snapshot:n,canonical:b,workerName:e.worker.name,taskId:l,exec:t});return S.ok&&S.prUrl&&uk({worktreePath:n.worktreePath,repo:i,rows:c,canonicalPrUrl:S.prUrl,exec:t}),S}}let u=op(n.worktreePath,i,n.branch,t);if(u)return pk({snapshot:n,prUrl:u,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,taskId:xn(e.worker.taskId),exec:t});let d=n.changedFiles.length>0,m=!1,f=!1,g=n.headCommit??void 0,h=yl({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,taskId:xn(e.worker.taskId),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(m=h.committed,f=h.pushed,!h.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${h.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let b=t.git(n.worktreePath,["push","-u","origin",n.branch]);if(b.status!==0&&!/already up to date/i.test(b.stderr||b.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${b.stderr||b.stdout||b.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};f=b.status===0}g=h.headCommit??g??Ao(n.worktreePath,t)??void 0;let y=g?GP(n.worktreePath,i,g,t):null;if(y)return{ok:!0,prUrl:y.prUrl,headCommit:g,committed:m,pushed:f,created:!1};let v=e.run.base?.trim()||"main",k=WP({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:v.replace(/^origin\//,""),title:EX(e.worker.name,e.worker.runId),body:AX(e.worker.taskId,e.worker.name,e.worker.runId),exec:t});if(!k.ok||!k.prUrl){if(IP(k.detail))return{ok:!0,headCommit:g??void 0,committed:m,pushed:f};let b=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${b?`${b} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${k.detail?` (${k.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}if(l&&k.prUrl){let S=[...c.length>0?c:ck(n.worktreePath,i,l,t),{url:k.prUrl,number:Number.parseInt(k.prUrl.match(/\/pull\/(\d+)/)?.[1]??"",10)||0,headRefName:n.branch,createdAt:""}];uk({worktreePath:n.worktreePath,repo:i,rows:S,canonicalPrUrl:k.prUrl,exec:t})}return{ok:!0,prUrl:k.prUrl,headCommit:g??void 0,committed:m,pushed:f,created:k.created}}var YP=p(()=>{"use strict";lk();ap();dk();ip();JP()});var qP=p(()=>{"use strict";EP();lk();ip();ap();dk();YP()});import TX from"node:path";function gk(e){clearInterval(mk.get(e)),mk.delete(e)}function hk(e,t){if(gk(e),!bl.has(e))return;let r=setInterval(()=>{(K(TX.join(e,"worker.json"),null)?.completionReportedAt||!ne(t))&&ii(e)},1e3);r.unref(),mk.set(e,r)}function yk(e,t){gk(e);let r=bl.get(e);r&&r.close(),bl.set(e,t)}async function Cn(e){gk(e);let t=bl.get(e);return t?(bl.delete(e),await t.close(),!0):!1}function ii(e){Cn(e).catch(()=>{})}var bl,mk,kk=p(()=>{"use strict";U();bl=new Map,mk=new Map});import{appendFileSync as OX,existsSync as XP,mkdirSync as QP,readFileSync as NX,rmSync as zP,writeFileSync as DX}from"node:fs";import zr from"node:path";function eT(e){return zr.join(e,ZP)}function MX(e){return pe(e,["ls-files","--error-unmatch",ZP.split(zr.sep).join("/")],{allowFailure:!0}).trim().length>0}function LX(e){let t=pe(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=zr.isAbsolute(t)?t:zr.join(e,t),n=zr.join(r,"info","exclude"),o=".cursor/mcp.json";try{QP(zr.dirname(n),{recursive:!0});let s=XP(n)?NX(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;OX(n,`${s.endsWith(`
|
|
165
165
|
`)||!s?"":`
|
|
166
166
|
`}${o}
|
|
167
|
-
`)}catch{}}function tT(e){if(MX(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=eT(e.worktreePath);QP(
|
|
168
|
-
`,{mode:384}),LX(e.worktreePath),{ok:!0,configPath:t}}function
|
|
169
|
-
`)}function YX(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${ve}"?\s*[\].]`,"m").test(e)}function nT(e){let t=GX(e.env??process.env),r=t?
|
|
167
|
+
`)}catch{}}function tT(e){if(MX(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=eT(e.worktreePath);QP(zr.dirname(t),{recursive:!0});let r={mcpServers:{[ve]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Gt]:e.brokerSocketPath}}}};return DX(t,`${JSON.stringify(r,null,2)}
|
|
168
|
+
`,{mode:384}),LX(e.worktreePath),{ok:!0,configPath:t}}function lp(e){let t=eT(e);if(!XP(t))return!1;try{zP(t,{force:!0});let r=zr.dirname(t);return zP(r,{recursive:!1}),!0}catch{return!0}}var ZP,bk=p(()=>{"use strict";xe();Jr();gt();ZP=zr.join(".cursor","mcp.json")});import{copyFileSync as BX,existsSync as cp,mkdirSync as FX,readFileSync as UX,rmSync as WX,symlinkSync as $X,writeFileSync as KX}from"node:fs";import{spawnSync as HX}from"node:child_process";import{homedir as jX}from"node:os";import En from"node:path";function rT(e){return En.join(e,VX)}function GX(e=process.env){let t=e.CODEX_HOME?.trim();if(t)return En.resolve(t);let r=jX();for(let n of[En.join(r,".codex"),En.join(r,".config","codex")])if(cp(n))return n;return null}function JX(e){return["","# Added per task by the Kynver harness. Carries a broker socket path, never a credential.",`[mcp_servers.${ve}]`,'command = "npx"','args = ["-y", "-p", "@kynver-app/mcp-agent-os", "kynver-worker-mcp"]',"",`[mcp_servers.${ve}.env]`,`${Gt} = ${JSON.stringify(e)}`,""].join(`
|
|
169
|
+
`)}function YX(e){return new RegExp(String.raw`^\s*\[\s*mcp_servers\s*\.\s*"?${ve}"?\s*[\].]`,"m").test(e)}function nT(e){let t=GX(e.env??process.env),r=t?En.join(t,"config.toml"):null,n=r&&cp(r)?UX(r,"utf8"):"";if(n&&YX(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Codex config already declares an "${ve}" MCP server \u2014 refusing to write a duplicate stanza`};let o=rT(e.workerDir);FX(o,{recursive:!0,mode:448});let s=!n||n.endsWith(`
|
|
170
170
|
`)?"":`
|
|
171
|
-
`;return KX(
|
|
171
|
+
`;return KX(En.join(o,"config.toml"),`${n}${s}${JX(e.brokerSocketPath)}`,{mode:384}),{ok:!0,codexHome:o,authMode:qX(t,o)}}function qX(e,t){let r=e?En.join(e,"auth.json"):null;if(!r||!cp(r))return"none";let n=En.join(t,"auth.json");try{return $X(r,n,"file"),"symlink"}catch{try{return BX(r,n),"copy"}catch{return"none"}}}function vl(e){let t=rT(e);if(!cp(t))return!1;try{return WX(t,{recursive:!0,force:!0}),!0}catch{return!1}}function oT(e,t,r=1e4){try{let[n,o]=oe(t,["--version"]),s=HX(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 VX,vk=p(()=>{"use strict";Te();Jr();gt();VX="codex-home"});import{appendFileSync as zX,existsSync as Rk,mkdirSync as iT,readFileSync as aT,rmSync as sT,writeFileSync as XX}from"node:fs";import Xr from"node:path";function cT(e){return Xr.join(e,lT)}function QX(e){return pe(e,["ls-files","--error-unmatch",lT.split(Xr.sep).join("/")],{allowFailure:!0}).trim().length>0}function ZX(e){if(!Rk(e))return{};try{let t=JSON.parse(aT(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 e3(e){let t=pe(e,["rev-parse","--git-common-dir"],{allowFailure:!0}).trim();if(!t)return;let r=Xr.isAbsolute(t)?t:Xr.join(e,t),n=Xr.join(r,"info","exclude"),o=".agents/mcp_config.json";try{iT(Xr.dirname(n),{recursive:!0});let s=Rk(n)?aT(n,"utf8"):"";if(s.split(/\r?\n/).some(i=>i.trim()===o))return;zX(n,`${s.endsWith(`
|
|
172
172
|
`)||!s?"":`
|
|
173
173
|
`}${o}
|
|
174
|
-
`)}catch{}}function uT(e){if(QX(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=cT(e.worktreePath),r=ZX(t);if(ve in r)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${ve}" server \u2014 refusing to overwrite it`};iT(
|
|
175
|
-
`,{mode:384}),e3(e.worktreePath),{ok:!0,configPath:t}}function
|
|
176
|
-
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:g3(r,s)}}function g3(e,t){let r=["oauth_creds.json","google_accounts.json"],n="none";for(let o of r){let s=Xr.join(e,o);if(!Sk(s))continue;let i=Xr.join(t,o);try{s3(s,i,"file"),n==="none"&&(n="symlink")}catch{try{t3(s,i),n="copy"}catch{}}}return n}function up(e){let t=dT(e);if(!Sk(t))return!1;try{return o3(t,{recursive:!0,force:!0}),!0}catch{return!1}}var l3,_k=p(()=>{"use strict";Gr();gt();l3="gemini-home"});import h3 from"node:path";function fT(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function k3(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 En(e){let t=e.finalResult??null,r=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:k3(t);return{finalResult:t??r??"completed",summary:r}}function dp(e,t,r){if(fT(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=En(t),s=r?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),te(e.runId,e),e.workerDir&&(oi(e.workerDir),Dd(e.workerDir),kl(e.workerDir),up(e.workerDir)),e.worktreePath&&(ap(e.worktreePath),cp(e.worktreePath))}function b3(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 mT(e,t,r={}){let n=b3(t);if(n.size===0)return[];let o=ie(e),s=[];for(let i of Object.keys(o.workers||{})){let a=K(h3.join(G(o.id),"workers",W(i),"worker.json"),void 0);if(!a?.taskId||fT(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!y3.has(l))continue;let c=ue(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=tk(o.id,a,"board_task_cancelled","board task cancelled",r);u=!!(d.workerSignal||d.sidecarSignal)}dp(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}var y3,pp=p(()=>{"use strict";Q();Oe();U();gt();kk();bk();vk();wk();_k();ni();y3=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"])});function fp(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 v3(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 R3(e){let t=ba(e);return t?{summary:t.reason,handoffState:"exit_failure",blocked:t.blocked}:null}function w3(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 mp(e){let{worker:t,status:r}=e;if(fp(r.finalResult)){let u=Be(t.heartbeatPath),d=Ir(u),m=fp(d)&&JSON.stringify(d)===JSON.stringify(r.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:r.finalResult,source:m,snapshot:En(r)}}if(r.alive)return null;let n=eo(t.stdoutPath);if(fp(n.finalResult)){let u={...r,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:En(u)}}let o=Be(t.heartbeatPath),s=Ir(o);if(fp(s)){let u={...r,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:En(u)}}let i=R3(r.error??n.error);if(i){let u={...r,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:En(u)}}let a=v3(o);if(a){let u={...r,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:En(u)}}let l=w3({status:r,heartbeat:o}),c={...r,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:En(c)}}function gp(e,t){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=t.snapshot,e.completionHandoffSource=t.source,!0)}var xk=p(()=>{"use strict";Zn();Mg();pp();ka()});function hp(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 gT(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 Ck=p(()=>{"use strict"});function hT(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function yT(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function bT(e){let t=yT(e);if(!t)return[];let r=yT(t.worktreeHandoff),n=hT(r?.disposableArtifactsRemoved);return n.length?n:hT(t.disposableArtifactsRemoved)}function kT(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function vT(e,t){let r=hp(e);if(r.length===0)return!0;if(t.length===0)return!1;let n=new Set(t.map(o=>kT(o)));return r.every(o=>{let s=kT(gT(o));return n.has(s)})}var RT=p(()=>{"use strict";Ck()});function yp(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function wT(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function S3(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 _3(e){let t=wT(e.disposableArtifactsRemoved),r=bT(e.finalResult);return[...new Set([...t,...r])]}function ST(e){let t=wT(e.changedFiles),r=hp(t),n=_3(e),o=r.length===0||vT(t,n);return yp(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`}:yp(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`}:yp(e.artifactBundlePath)||yp(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}:S3(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 _T=p(()=>{"use strict";RT();Ck()});function Qr(e=process.env){return Kr(e).flags.dispatchReceipts}function Ek(e){return Qr(e)!=="off"}function Ak(e,t){return`dispatch:${e}:${t.taskId}:${t.leaseToken}`}function vl(e,t,r){if(!Ek())return;let n=fe();if(n)try{n.recordOperationReceipt({idempotencyKey:Ak(e,t),operation:`dispatch-${e}`,resultJson:r===void 0?null:JSON.stringify(r)})}catch{ht.storeFailures+=1}}function CT(e){vl("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function kp(e){vl("spawned",e)}function si(e,t){vl("released",e,{reasonClass:t})}function ET(e){vl("completion-sent",e)}function Ik(e,t){vl("completion-acked",e,{outcome:t})}function AT(e){if(!Ek())return!1;let t=fe();if(!t)return!1;try{let r=t.getOperationReceipt(Ak("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 ht.completionReplaysObserved+=1,!0}}catch{ht.storeFailures+=1}return!1}function Pk(e){let t=String(e??"").split(":")[0]?.trim()??"";return t.length>0?t.slice(0,64):"unknown"}function IT(e){if(Qr()!=="enforce")return!1;let t=fe();if(!t)return!1;try{let r=t.getOperationReceipt(Ak("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"?(ht.completionReplaysShortCircuited+=1,!0):!1}catch{return ht.storeFailures+=1,!1}}function PT(e,t){if(Qr()!=="enforce")return;let r=fe();if(r)try{r.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${t}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:t})})}catch{ht.storeFailures+=1}}function TT(e,t){if(Qr()!=="enforce")return[];let r=fe();if(!r)return[];let n=t?.nowMs??Date.now(),o=t?.windowMs??x3;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 ht.storeFailures+=1,[]}}function bl(e){let t=e.split(":")[0]??"",r=Number(t);return Number.isInteger(r)&&r>=0?r:null}function OT(e){let t={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Ek())return t;let r=fe();if(!r)return t;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??C3;try{let s=r.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-xT).toISOString(),limit:A3}),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 m=r.getOperationReceipt(`dispatch:spawned:${u}`),f=r.getOperationReceipt(`dispatch:released:${u}`);if(m||f){n-d>=E3&&a.length+5<=I3&&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=bl(u.slice(g.length+1));if((g?r.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${g}:`,limit:10}):[]).some(b=>{if(h===null)return!0;let S=b.idempotencyKey.slice(`dispatch:completion-acked:${g}:`.length),w=bl(S);return w===null||w>=h}))continue;let k=!1;if(e?.hasLiveWorker&&c.resultJson)try{let b=JSON.parse(c.resultJson);b.runId&&b.workerName&&(k=e.hasLiveWorker({runId:b.runId,workerName:b.workerName}))}catch{k=!1}k||(i+=1)}let l=a.length>0?r.deleteOperationReceiptsByKeys(a):0;if(Qr()==="enforce"){let c=r.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=xT}).map(u=>u.idempotencyKey);if(c.length>0){let u=r.deleteOperationReceiptsByKeys(c);l+=u,ht.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return ht.storeFailures+=1,t}}function NT(){return{"dispatchReceipts.storeFailures":ht.storeFailures,"dispatchReceipts.completionReplaysObserved":ht.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":ht.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":ht.agedReceiptsPruned}}var ht,x3,C3,xT,E3,A3,I3,ii=p(()=>{"use strict";Sn();Fs();ht={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};x3=600*1e3;C3=900*1e3,xT=10080*60*1e3,E3=1440*60*1e3,A3=500,I3=300});function DT(){Ok=!1}function Zr(e=process.env){return Kr(e).flags.admission}function bp(e,t){return`${Tk}${e}:${t}`}function MT(e,t){if(Zr()==="off")return;let r=fe();if(r)try{r.tryReserveAdmission(bp(e,t),Nk,ai)}catch{An.storeFailures+=1}}function Rl(e,t){if(Zr()==="off")return;let r=fe();if(r)try{r.releaseAdmission(bp(e,t),Nk)}catch{An.storeFailures+=1}}function LT(e){let t={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(Zr()==="off")return t;let r=fe();if(!r)return t;try{let n=new Set(e.liveWorkers.map(m=>bp(m.runId,m.workerName))),o=r.listAdmissionReservations({keyPrefix:Tk,limit:500}),s=new Set(o.map(m=>m.key)),i=[...n].filter(m=>!s.has(m)).length,a=o.filter(m=>!n.has(m.key)).length,l=!Ok;Ok=!0,!l&&i>0&&(An.missingForLive+=i);let c=0;for(let m of e.liveWorkers)r.tryReserveAdmission(bp(m.runId,m.workerName),Nk,ai),c+=1;let u=0;for(let m of o)n.has(m.key)||r.releaseAdmission(m.key,m.owner)&&(u+=1,An.deadSlotsReleased+=1);return{liveReservations:r.listAdmissionReservations({keyPrefix:Tk,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return An.storeFailures+=1,t}}function BT(){return{"admission.storeFailures":An.storeFailures,"admission.missingForLive":An.missingForLive,"admission.deadSlotsReleased":An.deadSlotsReleased}}var ai,Nk,Tk,An,Ok,Ao=p(()=>{"use strict";Sn();Fs();ai=900*1e3,Nk="admission-shadow",Tk="worker-slot:",An={storeFailures:0,missingForLive:0,deadSlotsReleased:0},Ok=!1});function FT(e){return`${Dk}${e}`}function Rp(e,t){return`${e}:${t}`}function UT(e){if(Zr()!=="enforce")return{admitted:!0};let t=fe();if(!t)return{admitted:!0};let r=Math.max(0,Math.min(vp,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=r)return In.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=Rp(e.runId,e.workerName);for(let o=0;o<r;o+=1)if(t.tryReserveAdmission(FT(o),n,ai).acquired)return{admitted:!0,slot:o};return In.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return In.enforceStoreFailures+=1,{admitted:!0}}}function Pn(e,t){if(Zr()==="off")return;let r=fe();if(r)try{let n=Rp(e,t),o=r.listAdmissionReservations({keyPrefix:Dk,limit:vp});for(let s of o)s.owner===n&&r.releaseAdmission(s.key,n)}catch{In.enforceStoreFailures+=1}}function WT(e){let t={refreshed:0,deadReleased:0,adopted:0};if(Zr()!=="enforce")return t;let r=fe();if(!r)return t;try{let n=new Set(e.liveWorkers.map(c=>Rp(c.runId,c.workerName))),o=r.listAdmissionReservations({keyPrefix:Dk,limit:vp}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(r.tryReserveAdmission(c.key,c.owner,ai),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=Rp(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<vp;d+=1)if(r.tryReserveAdmission(FT(d),u,ai).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return In.enforceStoreFailures+=1,t}}function $T(){return{"admission.enforceStoreFailures":In.enforceStoreFailures,"admission.refusedSlotsExhausted":In.admissionsRefusedSlots,"admission.refusedDiskBackstop":In.admissionsRefusedDiskBackstop}}var Dk,vp,In,li=p(()=>{"use strict";Sn();Ao();Dk="worker-slot-n:",vp=64;In={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0}});import P3 from"node:path";function Mk(e){let t=e.trim();if(!T3.test(t))throw new Error(`invalid run id: ${e}`);return t}function N3(e){let t=e.trim();if(!O3.test(t))throw new Error(`invalid worker name: ${e}`);return t}function jT(e){return typeof e=="string"?e.trim():""}function wp(e){let t=jT(e.run),r=jT(e.name);return(!t||KT.has(t))&&vt(`missing --run RUN_ID (${HT})`),(!r||KT.has(r))&&vt(`missing --name WORKER_NAME (${HT})`),{runId:Mk(t),workerName:N3(r)}}function VT(e){let t=P3.resolve(e);if(t.includes(".."))throw new Error("repo path must not contain .. segments");return t}var T3,O3,KT,HT,Sp=p(()=>{"use strict";U();T3=/^[a-z0-9][a-z0-9._-]{0,127}$/i,O3=/^[a-z0-9][a-z0-9._-]{0,63}$/i,KT=new Set(["undefined","null"]),HT="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME"});import{existsSync as D3,mkdirSync as M3,readFileSync as L3,writeFileSync as B3}from"node:fs";import{homedir as F3}from"node:os";import GT from"node:path";function Bk(e){let t=e?.trim();return!!(t&&U3.test(t))}function H3(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function Lk(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(K3,Math.max($3,e)):W3}function JT(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||GT.join(F3(),".kynver","provider-quota-cooldowns.json")}function wl(e){return(e??"").trim().toLowerCase()}function Fk(){let e=JT();if(!D3(e))return{};try{let t=JSON.parse(L3(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[wl(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return r}catch{return{}}}function Uk(e){let t=JT();try{M3(GT.dirname(t),{recursive:!0}),B3(t,`${JSON.stringify(e,null,2)}
|
|
177
|
-
`,"utf8")}catch{}}function j3(e,t,r=Date.now()){let n=
|
|
174
|
+
`)}catch{}}function uT(e){if(QX(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=cT(e.worktreePath),r=ZX(t);if(ve in r)return{ok:!1,reason:"user_config_owns_server",detail:`the workspace MCP config already declares an "${ve}" server \u2014 refusing to overwrite it`};iT(Xr.dirname(t),{recursive:!0});let n={mcpServers:{...r,[ve]:{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Gt]:e.brokerSocketPath}}}};return XX(t,`${JSON.stringify(n,null,2)}
|
|
175
|
+
`,{mode:384}),e3(e.worktreePath),{ok:!0,configPath:t}}function up(e){let t=cT(e);if(!Rk(t))return!1;try{return sT(t,{force:!0}),sT(Xr.dirname(t),{recursive:!1}),!0}catch{return!0}}var lT,wk=p(()=>{"use strict";xe();Jr();gt();lT=Xr.join(".agents","mcp_config.json")});import{copyFileSync as t3,existsSync as Sk,mkdirSync as r3,readFileSync as n3,rmSync as o3,symlinkSync as s3,writeFileSync as i3}from"node:fs";import{homedir as a3}from"node:os";import Qr from"node:path";function dT(e){return Qr.join(e,l3)}function c3(e){return e.HOME?.trim()||e.USERPROFILE?.trim()||a3()}function u3(e=process.env){let t=e.GEMINI_CLI_HOME?.trim();return t?Qr.join(Qr.resolve(t),".gemini"):Qr.join(c3(e),".gemini")}function d3(e){if(!Sk(e))return{};try{let t=JSON.parse(n3(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function p3(e){let t=e.mcpServers;return!t||typeof t!="object"||Array.isArray(t)?!1:ve in t}function f3(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function m3(e){return{command:"npx",args:["-y","-p","@kynver-app/mcp-agent-os","kynver-worker-mcp"],env:{[Gt]:e},trust:!0}}function pT(e){let t=e.env??process.env,r=u3(t),n=d3(Qr.join(r,"settings.json"));if(p3(n))return{ok:!1,reason:"user_config_owns_server",detail:`the Gemini CLI settings already declare an "${ve}" MCP server \u2014 refusing to write a duplicate stanza`};let o=dT(e.workerDir),s=Qr.join(o,".gemini");r3(s,{recursive:!0,mode:448});let i=n.mcpServers&&typeof n.mcpServers=="object"&&!Array.isArray(n.mcpServers)?n.mcpServers:{},a={...n,mcp:{...f3(n.mcp),autoAllowInHeadless:!0},mcpServers:{...i,[ve]:m3(e.brokerSocketPath)}};return i3(Qr.join(s,"settings.json"),`${JSON.stringify(a,null,2)}
|
|
176
|
+
`,{mode:384}),{ok:!0,geminiCliHome:o,authMode:g3(r,s)}}function g3(e,t){let r=["oauth_creds.json","google_accounts.json"],n="none";for(let o of r){let s=Qr.join(e,o);if(!Sk(s))continue;let i=Qr.join(t,o);try{s3(s,i,"file"),n==="none"&&(n="symlink")}catch{try{t3(s,i),n="copy"}catch{}}}return n}function dp(e){let t=dT(e);if(!Sk(t))return!1;try{return o3(t,{recursive:!0,force:!0}),!0}catch{return!1}}var l3,_k=p(()=>{"use strict";Jr();gt();l3="gemini-home"});import h3 from"node:path";function fT(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function k3(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 An(e){let t=e.finalResult??null,r=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:k3(t);return{finalResult:t??r??"completed",summary:r}}function pp(e,t,r){if(fT(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=An(t),s=r?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),te(e.runId,e),e.workerDir&&(ii(e.workerDir),Md(e.workerDir),vl(e.workerDir),dp(e.workerDir)),e.worktreePath&&(lp(e.worktreePath),up(e.worktreePath))}function b3(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 mT(e,t,r={}){let n=b3(t);if(n.size===0)return[];let o=ie(e),s=[];for(let i of Object.keys(o.workers||{})){let a=K(h3.join(G(o.id),"workers",W(i),"worker.json"),void 0);if(!a?.taskId||fT(a))continue;let l=n.get(a.taskId);if(!l||l==="running"||!y3.has(l))continue;let c=ue(a,{base:o.base,baseCommit:o.baseCommit}),u;if(l==="cancelled"){let d=tk(o.id,a,"board_task_cancelled","board task cancelled",r);u=!!(d.workerSignal||d.sidecarSignal)}pp(a,c,{source:`board-task-${l}`}),s.push({worker:i,taskId:a.taskId,taskStatus:l,...u?{stopped:u}:{}})}return s}var y3,fp=p(()=>{"use strict";Q();Oe();U();gt();kk();bk();vk();wk();_k();si();y3=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"])});function mp(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 v3(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 R3(e){let t=Ra(e);return t?{summary:t.reason,handoffState:"exit_failure",blocked:t.blocked}:null}function w3(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 gp(e){let{worker:t,status:r}=e;if(mp(r.finalResult)){let u=Be(t.heartbeatPath),d=Pr(u),m=mp(d)&&JSON.stringify(d)===JSON.stringify(r.finalResult)?"heartbeat_complete":"stdout_stream";return{finalResult:r.finalResult,source:m,snapshot:An(r)}}if(r.alive)return null;let n=to(t.stdoutPath);if(mp(n.finalResult)){let u={...r,finalResult:n.finalResult};return{finalResult:n.finalResult,source:"stdout_stream",snapshot:An(u)}}let o=Be(t.heartbeatPath),s=Pr(o);if(mp(s)){let u={...r,finalResult:s,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:s,source:"heartbeat_complete",snapshot:An(u)}}let i=R3(r.error??n.error);if(i){let u={...r,finalResult:i};return{finalResult:i,source:"exit_failure",snapshot:An(u)}}let a=v3(o);if(a){let u={...r,finalResult:a,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:a,source:"heartbeat_summary",snapshot:An(u)}}let l=w3({status:r,heartbeat:o}),c={...r,finalResult:l,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary};return{finalResult:l,source:"exit_no_final_result",snapshot:An(c)}}function hp(e,t){return e.completionSnapshot?.finalResult!=null?!1:(e.completionSnapshot=t.snapshot,e.completionHandoffSource=t.source,!0)}var xk=p(()=>{"use strict";eo();Lg();fp();va()});function yp(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 gT(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 Ck=p(()=>{"use strict"});function hT(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function yT(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function bT(e){let t=yT(e);if(!t)return[];let r=yT(t.worktreeHandoff),n=hT(r?.disposableArtifactsRemoved);return n.length?n:hT(t.disposableArtifactsRemoved)}function kT(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function vT(e,t){let r=yp(e);if(r.length===0)return!0;if(t.length===0)return!1;let n=new Set(t.map(o=>kT(o)));return r.every(o=>{let s=kT(gT(o));return n.has(s)})}var RT=p(()=>{"use strict";Ck()});function kp(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function wT(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function S3(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 _3(e){let t=wT(e.disposableArtifactsRemoved),r=bT(e.finalResult);return[...new Set([...t,...r])]}function ST(e){let t=wT(e.changedFiles),r=yp(t),n=_3(e),o=r.length===0||vT(t,n);return kp(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`}:kp(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`}:kp(e.artifactBundlePath)||kp(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}:S3(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 _T=p(()=>{"use strict";RT();Ck()});function Zr(e=process.env){return Hr(e).flags.dispatchReceipts}function Ek(e){return Zr(e)!=="off"}function Ak(e,t){return`dispatch:${e}:${t.taskId}:${t.leaseToken}`}function wl(e,t,r){if(!Ek())return;let n=fe();if(n)try{n.recordOperationReceipt({idempotencyKey:Ak(e,t),operation:`dispatch-${e}`,resultJson:r===void 0?null:JSON.stringify(r)})}catch{ht.storeFailures+=1}}function CT(e){wl("claim",e,{runId:e.runId,workerName:e.workerName,provider:e.provider})}function bp(e){wl("spawned",e)}function ai(e,t){wl("released",e,{reasonClass:t})}function ET(e){wl("completion-sent",e)}function Ik(e,t){wl("completion-acked",e,{outcome:t})}function AT(e){if(!Ek())return!1;let t=fe();if(!t)return!1;try{let r=t.getOperationReceipt(Ak("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 ht.completionReplaysObserved+=1,!0}}catch{ht.storeFailures+=1}return!1}function Pk(e){let t=String(e??"").split(":")[0]?.trim()??"";return t.length>0?t.slice(0,64):"unknown"}function IT(e){if(Zr()!=="enforce")return!1;let t=fe();if(!t)return!1;try{let r=t.getOperationReceipt(Ak("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"?(ht.completionReplaysShortCircuited+=1,!0):!1}catch{return ht.storeFailures+=1,!1}}function PT(e,t){if(Zr()!=="enforce")return;let r=fe();if(r)try{r.recordOperationReceipt({idempotencyKey:`dispatch:start-failed:${e}:${t}`,operation:"dispatch-start-failed",resultJson:JSON.stringify({runId:t})})}catch{ht.storeFailures+=1}}function TT(e,t){if(Zr()!=="enforce")return[];let r=fe();if(!r)return[];let n=t?.nowMs??Date.now(),o=t?.windowMs??x3;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 ht.storeFailures+=1,[]}}function Rl(e){let t=e.split(":")[0]??"",r=Number(t);return Number.isInteger(r)&&r>=0?r:null}function OT(e){let t={scannedClaims:0,strandedClaimCandidates:0,prunedReceipts:0};if(!Ek())return t;let r=fe();if(!r)return t;let n=e?.nowMs??Date.now(),o=e?.strandedAfterMs??C3;try{let s=r.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(n-xT).toISOString(),limit:A3}),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 m=r.getOperationReceipt(`dispatch:spawned:${u}`),f=r.getOperationReceipt(`dispatch:released:${u}`);if(m||f){n-d>=E3&&a.length+5<=I3&&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=Rl(u.slice(g.length+1));if((g?r.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${g}:`,limit:10}):[]).some(b=>{if(h===null)return!0;let S=b.idempotencyKey.slice(`dispatch:completion-acked:${g}:`.length),w=Rl(S);return w===null||w>=h}))continue;let k=!1;if(e?.hasLiveWorker&&c.resultJson)try{let b=JSON.parse(c.resultJson);b.runId&&b.workerName&&(k=e.hasLiveWorker({runId:b.runId,workerName:b.workerName}))}catch{k=!1}k||(i+=1)}let l=a.length>0?r.deleteOperationReceiptsByKeys(a):0;if(Zr()==="enforce"){let c=r.listOperationReceipts({limit:100}).filter(u=>{let d=Date.parse(u.recordedAt);return Number.isFinite(d)&&n-d>=xT}).map(u=>u.idempotencyKey);if(c.length>0){let u=r.deleteOperationReceiptsByKeys(c);l+=u,ht.agedReceiptsPruned+=u}}return{scannedClaims:s.length,strandedClaimCandidates:i,prunedReceipts:l}}catch{return ht.storeFailures+=1,t}}function NT(){return{"dispatchReceipts.storeFailures":ht.storeFailures,"dispatchReceipts.completionReplaysObserved":ht.completionReplaysObserved,"dispatchReceipts.completionReplaysShortCircuited":ht.completionReplaysShortCircuited,"dispatchReceipts.agedReceiptsPruned":ht.agedReceiptsPruned}}var ht,x3,C3,xT,E3,A3,I3,li=p(()=>{"use strict";_n();Us();ht={storeFailures:0,completionReplaysObserved:0,completionReplaysShortCircuited:0,agedReceiptsPruned:0};x3=600*1e3;C3=900*1e3,xT=10080*60*1e3,E3=1440*60*1e3,A3=500,I3=300});function DT(){Ok=!1}function en(e=process.env){return Hr(e).flags.admission}function vp(e,t){return`${Tk}${e}:${t}`}function MT(e,t){if(en()==="off")return;let r=fe();if(r)try{r.tryReserveAdmission(vp(e,t),Nk,ci)}catch{In.storeFailures+=1}}function Sl(e,t){if(en()==="off")return;let r=fe();if(r)try{r.releaseAdmission(vp(e,t),Nk)}catch{In.storeFailures+=1}}function LT(e){let t={liveReservations:0,refreshed:0,deadReleased:0,missingForLive:0,orphaned:0,adoptionPass:!1};if(en()==="off")return t;let r=fe();if(!r)return t;try{let n=new Set(e.liveWorkers.map(m=>vp(m.runId,m.workerName))),o=r.listAdmissionReservations({keyPrefix:Tk,limit:500}),s=new Set(o.map(m=>m.key)),i=[...n].filter(m=>!s.has(m)).length,a=o.filter(m=>!n.has(m.key)).length,l=!Ok;Ok=!0,!l&&i>0&&(In.missingForLive+=i);let c=0;for(let m of e.liveWorkers)r.tryReserveAdmission(vp(m.runId,m.workerName),Nk,ci),c+=1;let u=0;for(let m of o)n.has(m.key)||r.releaseAdmission(m.key,m.owner)&&(u+=1,In.deadSlotsReleased+=1);return{liveReservations:r.listAdmissionReservations({keyPrefix:Tk,limit:500}).length,refreshed:c,deadReleased:u,missingForLive:i,orphaned:a,adoptionPass:l}}catch{return In.storeFailures+=1,t}}function BT(){return{"admission.storeFailures":In.storeFailures,"admission.missingForLive":In.missingForLive,"admission.deadSlotsReleased":In.deadSlotsReleased}}var ci,Nk,Tk,In,Ok,Io=p(()=>{"use strict";_n();Us();ci=900*1e3,Nk="admission-shadow",Tk="worker-slot:",In={storeFailures:0,missingForLive:0,deadSlotsReleased:0},Ok=!1});function FT(e){return`${Dk}${e}`}function wp(e,t){return`${e}:${t}`}function UT(e){if(en()!=="enforce")return{admitted:!0};let t=fe();if(!t)return{admitted:!0};let r=Math.max(0,Math.min(Rp,Math.floor(e.maxSlots)));if(e.diskActiveWorkers>=r)return Pn.admissionsRefusedDiskBackstop+=1,{admitted:!1,reason:"disk_backstop"};try{let n=wp(e.runId,e.workerName);for(let o=0;o<r;o+=1)if(t.tryReserveAdmission(FT(o),n,ci).acquired)return{admitted:!0,slot:o};return Pn.admissionsRefusedSlots+=1,{admitted:!1,reason:"slots_exhausted"}}catch{return Pn.enforceStoreFailures+=1,{admitted:!0}}}function Tn(e,t){if(en()==="off")return;let r=fe();if(r)try{let n=wp(e,t),o=r.listAdmissionReservations({keyPrefix:Dk,limit:Rp});for(let s of o)s.owner===n&&r.releaseAdmission(s.key,n)}catch{Pn.enforceStoreFailures+=1}}function WT(e){let t={refreshed:0,deadReleased:0,adopted:0};if(en()!=="enforce")return t;let r=fe();if(!r)return t;try{let n=new Set(e.liveWorkers.map(c=>wp(c.runId,c.workerName))),o=r.listAdmissionReservations({keyPrefix:Dk,limit:Rp}),s=0,i=0,a=new Set;for(let c of o)n.has(c.owner)?(r.tryReserveAdmission(c.key,c.owner,ci),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=wp(c.runId,c.workerName);if(!a.has(u)){for(let d=0;d<Rp;d+=1)if(r.tryReserveAdmission(FT(d),u,ci).acquired){l+=1;break}}}return{refreshed:s,deadReleased:i,adopted:l}}catch{return Pn.enforceStoreFailures+=1,t}}function $T(){return{"admission.enforceStoreFailures":Pn.enforceStoreFailures,"admission.refusedSlotsExhausted":Pn.admissionsRefusedSlots,"admission.refusedDiskBackstop":Pn.admissionsRefusedDiskBackstop}}var Dk,Rp,Pn,ui=p(()=>{"use strict";_n();Io();Dk="worker-slot-n:",Rp=64;Pn={enforceStoreFailures:0,admissionsRefusedSlots:0,admissionsRefusedDiskBackstop:0}});import P3 from"node:path";function Mk(e){let t=e.trim();if(!T3.test(t))throw new Error(`invalid run id: ${e}`);return t}function N3(e){let t=e.trim();if(!O3.test(t))throw new Error(`invalid worker name: ${e}`);return t}function jT(e){return typeof e=="string"?e.trim():""}function Sp(e){let t=jT(e.run),r=jT(e.name);return(!t||KT.has(t))&&vt(`missing --run RUN_ID (${HT})`),(!r||KT.has(r))&&vt(`missing --name WORKER_NAME (${HT})`),{runId:Mk(t),workerName:N3(r)}}function VT(e){let t=P3.resolve(e);if(t.includes(".."))throw new Error("repo path must not contain .. segments");return t}var T3,O3,KT,HT,_p=p(()=>{"use strict";U();T3=/^[a-z0-9][a-z0-9._-]{0,127}$/i,O3=/^[a-z0-9][a-z0-9._-]{0,63}$/i,KT=new Set(["undefined","null"]),HT="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME"});import{existsSync as D3,mkdirSync as M3,readFileSync as L3,writeFileSync as B3}from"node:fs";import{homedir as F3}from"node:os";import GT from"node:path";function Bk(e){let t=e?.trim();return!!(t&&U3.test(t))}function H3(){let e=(process.env.KYNVER_PROVIDER_QUOTA_PREFLIGHT??"on").trim().toLowerCase();return e!=="off"&&e!=="0"&&e!=="false"&&e!=="no"}function Lk(){let e=Number.parseInt(process.env.KYNVER_PROVIDER_QUOTA_COOLDOWN_MINUTES??"",10);return Number.isFinite(e)?Math.min(K3,Math.max($3,e)):W3}function JT(){let e=process.env.KYNVER_PROVIDER_QUOTA_STORE_PATH?.trim();return e||GT.join(F3(),".kynver","provider-quota-cooldowns.json")}function _l(e){return(e??"").trim().toLowerCase()}function Fk(){let e=JT();if(!D3(e))return{};try{let t=JSON.parse(L3(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[_l(n)]={lastExhaustedAt:s,reason:typeof i=="string"?i.slice(0,500):""})}return r}catch{return{}}}function Uk(e){let t=JT();try{M3(GT.dirname(t),{recursive:!0}),B3(t,`${JSON.stringify(e,null,2)}
|
|
177
|
+
`,"utf8")}catch{}}function j3(e,t,r=Date.now()){let n=_l(e);if(!n)return;let o=Fk();o[n]={lastExhaustedAt:new Date(r).toISOString(),reason:t.trim().slice(0,500)},Uk(o),gE(n,Lk()*6e4)}function V3(e){let t=_l(e);if(!t)return!1;hE(t);let r=Fk();return t in r?(delete r[t],Uk(r),!0):!1}function YT(e,t=Date.now()){if(!H3())return{ok:!0};let r=_l(e);if(!r)return{ok:!0};let n=Fk(),o=n[r],s=!!(o&&Number.isFinite(Date.parse(o.lastExhaustedAt))&&Date.parse(o.lastExhaustedAt)+Lk()*6e4>t),i=yE(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+Lk()*6e4;if(!Number.isFinite(a)||l<=t)return delete n[r],Uk(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 G3(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 qT(e){let t=_l(e.provider);if(!t)return"none";let r=G3(e.finalResult)??(typeof e.error=="string"&&e.error.trim()?e.error.trim():null);return r?Bk(r)?(j3(t,r,e.nowMs??Date.now()),"recorded"):V3(t)?"cleared":"none":"none"}var U3,W3,$3,K3,xp=p(()=>{"use strict";ja();U3=/\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,W3=30,$3=5,K3=240});function zT(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 XT=p(()=>{"use strict"});function Ep(e){return typeof e=="string"&&J3.test(e)&&!Y3.has(e)&&!e.startsWith("KYNVER_")}var J3,QT,Cp,Et,Y3,di=p(()=>{"use strict";J3=/^[A-Z][A-Z0-9_]{1,63}$/,QT=/^sec_[0-9a-f]{20}$/,Cp=/^sr_[0-9a-f]{24}$/,Et={maxSecrets:100,maxValueBytes:16384,maxPurposeChars:200,minValueChars:4,minRedactChars:6},Y3=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 MAe,createDecipheriv as q3,createECDH as z3,createHash as X3,hkdfSync as Q3,randomBytes as LAe}from"node:crypto";function Z3(e){for(let t of[e.agentOsId,e.requestId,e.name])if(!t||t.includes(`
|
|
178
178
|
`))throw new yt("invalid envelope context");return["kynver-secret/v1",e.agentOsId,e.requestId,e.name].join(`
|
|
179
|
-
`)}function eO(e){return X3("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}function e8(e,t,r){return Buffer.from(Q3("sha256",e,t,Buffer.from(r,"utf8"),32))}function
|
|
180
|
-
`),
|
|
179
|
+
`)}function eO(e){return X3("sha256").update(e).digest("hex").slice(0,16).toUpperCase().match(/.{4}/g).join("-")}function e8(e,t,r){return Buffer.from(Q3("sha256",e,t,Buffer.from(r,"utf8"),32))}function Ap(e,t){if(typeof e!="string"||e.length>64*1024)throw new yt;let r=Buffer.from(e,"base64");if(t!==void 0&&r.length!==t)throw new yt;return r}function Ip(e){if(!e||typeof e!="object")return null;let t=e;if(t.v!==1||t.alg!==ZT)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:ZT,epk:t.epk,salt:t.salt,iv:t.iv,ct:t.ct,kid:t.kid}}function Pp(e,t,r){let n=Z3(r);try{let o=z3("prime256v1");o.setPrivateKey(e);let s=o.computeSecret(Ap(t.epk,65)),i=e8(s,Ap(t.salt,16),n),a=Ap(t.iv,12),l=Ap(t.ct);if(l.length<17)throw new yt;let c=q3("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>Et.maxValueBytes)throw new yt("The secret is empty or too long.");return u.toString("utf8")}catch(o){throw o instanceof yt?o:new yt}}var ZT,yt,Tp=p(()=>{"use strict";di();ZT="ECDH-P256+HKDF-SHA256+A256GCM",yt=class extends Error{constructor(t="The secret could not be opened on this computer."){super(t),this.name="SecretEnvelopeError"}}});import{createECDH as oO,randomBytes as t8}from"node:crypto";import{chmodSync as sO,existsSync as tO,mkdirSync as r8,readFileSync as n8,readdirSync as o8,renameSync as s8,writeFileSync as i8}from"node:fs";import{homedir as a8}from"node:os";import iO from"node:path";function At(){return iO.join(a8(),".kynver","secrets")}function xl(e){r8(e,{recursive:!0,mode:448});try{sO(e,448)}catch{}}function $k(e,t){let r=`${e}.${process.pid}.tmp`;i8(r,t,{mode:384});try{sO(r,384)}catch{}s8(r,e)}function nO(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 Op(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=oO("prime256v1");o.setPrivateKey(r);let s=o.getPublicKey();return{ecdhPrivateKey:r,publicKeyRaw:s,fingerprint:eO(s),vaultKey:n,keyStore:t}}function Np(e={}){let t=e.root??At(),r=e.keychain??hn(),n=r.available?nO(r.read(rO)):null;if(n)return Op(n,"keychain");let o=l8(t),s=tO(o)?nO(n8(o,"utf8")):null;if(s)return Op(s,"file");if(tO(t)&&o8(t).some(d=>d.endsWith(".vault.json")))throw new Wk;let i=oO("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:t8(32).toString("base64")},u=JSON.stringify(c);return r.write(rO,u)?Op(c,"keychain"):(xl(t),$k(o,`${u}
|
|
180
|
+
`),Op(c,"file"))}var rO,l8,Wk,Cl=p(()=>{"use strict";nh();Tp();rO="secret-store-keys";l8=e=>iO.join(e,"keys.json"),Wk=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 c8(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>=Et.minRedactChars)}function u8(e){return e.length>=Et.minValueChars&&e.length<Et.minRedactChars}function d8(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function aO(e){let t=[];for(let o of e){let s=`[redacted ${o.name}]`;u8(o.value)&&t.push({needle:o.value,label:s,token:!0});for(let i of c8(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),partialSuffixLength(o){let s=0;for(let i of n){let a=i.needle[0];for(let l=Math.min(i.needle.length-1,o.length);l>s;l--)if(o[o.length-l]===a&&o.endsWith(i.needle.slice(0,l))){s=l;break}}return s},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_])${d8(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}}}function lO(e,t){let r="";return{write(n){if(e.empty)return void t(n);let o=e.redact(r+n),s=e.partialSuffixLength(o),i=o.slice(0,o.length-s);r=o.slice(o.length-s),i&&t(i)},flush(){r&&t(e.redact(r)),r=""}}}var Kk=p(()=>{"use strict";di()});import{createHash as p8,randomBytes as f8}from"node:crypto";import{existsSync as m8,readFileSync as g8,rmSync as h8}from"node:fs";import y8 from"node:path";function El(e){return`${p8("sha256").update(`kynver-secret:${e}`).digest("hex").slice(0,32)}.vault.json`}var Ne,Dp,pi,fi,Mp=p(()=>{"use strict";Ch();Cl();di();Ne=class extends Error{constructor(r,n){super(r);this.code=n;this.name="SecretStoreError"}code};Dp=(e,t,r)=>{for(let n of[e,t,r])if(n.includes(`
|
|
181
181
|
`))throw new Ne("invalid field","invalid");return["kynver-secret/v1/value",e,t,r].join(`
|
|
182
|
-
`)},
|
|
183
|
-
`)}list(){return this.read().secrets.map(ui)}find(t){let r=this.read().secrets.find(n=>t.handle?n.handle===t.handle:n.name===t.name);return r?ui(r):null}put(t){if(!Cp(t.name))throw new Ne("That secret name isn't allowed.","invalid");let r=Buffer.byteLength(t.value,"utf8");if(r===0)throw new Ne("The secret is empty.","invalid");if(t.value.trim().length<Et.minValueChars)throw new Ne(`The secret is too short \u2014 use at least ${Et.minValueChars} characters.`,"invalid");if(r>Et.maxValueBytes)throw new Ne("The secret is too long.","invalid");let n=(t.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,Et.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===t.name);if(i)return i.value=kn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Np(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:ui(i),replaced:!0};if(o.secrets.length>=Et.maxSecrets)throw new Ne("This computer already holds the most secrets allowed.","full");let a=`sec_${f8(10).toString("hex")}`,l={handle:a,name:t.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:kn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Np(this.opts.agentOsId,a,t.name))};return o.secrets.push(l),this.write(o),{summary:ui(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 Ne("No saved secret by that name.","not_found");try{let n=uo(this.opts.vaultKey,r.value,Np(this.opts.agentOsId,r.handle,r.name)).toString("utf8");return{summary:ui(r),value:n}}catch{throw new Ne(`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:uo(this.opts.vaultKey,r.value,Np(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 Ne("No saved secret by that name.","not_found");let[o]=r.secrets.splice(n,1);return r.secrets.length===0?h8(this.file,{force:!0}):this.write(r),ui(o)}}});import{statSync as k8}from"node:fs";import b8 from"node:path";function R8(e,t){return`${t}\0${e}`}function w8(e){try{let t=k8(e);return t.isFile()?`${t.mtimeMs}:${t.size}`:null}catch{return null}}function ur(e,t=At()){if(!e)return null;let r=b8.join(t,xl(e)),n=w8(r),o=R8(e,t);if(!n)return pi.delete(o),null;let s=pi.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=Op({root:t}),a=aO(new di({agentOsId:e,vaultKey:i.vaultKey,root:t}).revealAllForRedaction());return pi.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Hk(e){if(!e){pi.clear();return}let t=`\0${e}`;for(let r of pi.keys())r.endsWith(t)&&pi.delete(r)}function Mp(e,t,r){if(typeof e=="string")return t.redact(e);if(r>v8||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Mp(o,t,r+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Mp(s,t,r+1);return n}function Cl(e,t,r=At()){let n=ur(e,r);return!n||n.empty||!t?t:n.redact(t)}function cO(e,t,r=At()){let n=ur(e,r);return!n||n.empty?t:Mp(t,n,0)}function Lp(e,t,r=At()){let n=ur(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 Bp(e,t,r=ur(e)){return!r||r.empty?t:t.map(n=>Mp(n,r,0))}var v8,pi,dr=p(()=>{"use strict";_l();Kk();Dp();v8=64,pi=new Map});import Up from"node:path";async function uO(e,t,r){let n=await fetch(e,{method:"POST",headers:Kt(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 S8(e){if(e&&typeof e=="object"){let t=e.error;if(typeof t=="string"&&t.trim())return t.trim()}}function dO(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 _8(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function x8(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 fO(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function C8(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function fi(e,t){(e.completionBlocker??void 0)!==(t??void 0)&&(t?e.completionBlocker=t:delete e.completionBlocker,te(e.runId,e))}function E8(e){e.completionBlocker&&(delete e.completionBlocker,te(e.runId,e))}function Fp(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function A8(e,t){return{...e,...t.prUrl?{prUrl:t.prUrl}:{},...t.headCommit?{headCommit:t.headCommit}:{}}}async function mi(e){let{runId:t,workerName:r}=wp(e),n=lo(t,r),o=ie(n.runId),s=ue(n,Fp(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Ve(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&&fl(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&ok(n)&&E8(n),!s.finalResult&&s.alive===!1){let R=mp({worker:n,status:s});R&&gp(n,R)&&(te(n.runId,n),n=lo(t,r),s=ue(n,Fp(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let R=fk({worker:n,run:o,status:s});if(!R.ok)return fi(n,R.reason),{ok:!1,reason:R.reason,nextAction:R.nextAction,completionBlocked:!0};(R.prUrl||R.headCommit)&&(s=ue(n,Fp(o)),s=A8(s,R))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let R=ST({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!R.allowed){let P=R.detail??`worktree completion blocked (${R.state})`;return fi(n,P),{ok:!1,reason:P,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{qT({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=ge(e.baseUrl?String(e.baseUrl):void 0),m=e.secret?String(e.secret):void 0,f=await ye(m,i,{baseUrl:d});a&&(await Yd({worker:n,agentOsId:i,baseUrl:d,secret:f}),n=lo(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=zT({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),v=cO(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(AT(k),IT(k)){let R={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return Zd(n,n.runId,R),dp(n,s,{source:"harness-completion"}),fi(n,void 0),Rl(n.runId,n.name),Pn(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}ET(k)}let b=await uO(g,f,v);if((b.status===401||b.status===403)&&!m){let R=await Dx(i,{baseUrl:d});R&&R!==f&&(f=R,b=await uO(g,f,v))}if(b.ok){let R=_P(b.parsed);if(!xP(R)){let M=`completion acknowledged but board not advanced: ${R.detail??(R.routeOutcome?`harness completion returned ${R.routeOutcome}`:"harness completion did not advance the linked task")}`;fi(n,M);let F={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:b.parsed};return Zd(n,n.runId,F),k&&Ik(k,"rejected"),{ok:!1,httpStatus:b.status,response:b.parsed,reason:M,completionBlocked:!0}}fi(n,void 0);let P=R.routeOutcome??"acknowledged",N={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:b.parsed};Zd(n,n.runId,N),dp(n,s,{source:"harness-completion"}),k&&Ik(k,"acknowledged"),Rl(n.runId,n.name),Pn(n.runId,n.name);let x=s.prUrl;return{ok:!0,httpStatus:b.status,response:b.parsed,reason:P,...x?{prHandoff:{prUrl:x}}:{}}}let S=b.status===401||b.status===403,w=S8(b.parsed)??(S?"runner token unauthorized":"non-2xx response"),_=S?`completion replay rejected (${b.status}): ${w}`:`completion replay failed (${b.status}): ${w}`;return fi(n,_),{ok:!1,httpStatus:b.status,response:b.parsed,completionBlocked:!0}}async function mO(e){try{let{runId:t,workerName:r}=wp(e),n=lo(t,r),o=ie(n.runId),s=ue(n,Fp(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Ve(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 mi(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 gO(e){let{run:t,workerName:r,worker:n}=e,o=ue(n,{base:t.base,baseCommit:t.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=ps({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=fO(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,m=dO(n.completionResponse),f=dO(m?.task),g=El(m?.outcome),h=El(m?.status),y=Array.isArray(m?.warnings)?m.warnings.filter(_=>typeof _=="string"&&_.trim().length>0):[],v=El(f?.prUrl)??El(m?.prUrl),k=El(n.completionReportedAt),b=_8({finished:Ve(o),completionBlocker:c,completionOutcome:g,completionReportedAt:k}),S=x8({completionBlocker:c,completionOutcome:g,completionReportedAt:k,finished:Ve(o)}),w=C8({changedFiles:o.changedFiles,headCommit:s,prUrl:v??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let _=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:v,handoffState:w,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:b,completionReportedAt:k,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:g,completionWarnings:y,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:S,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function I8(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&&!fO(r)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:t==="done"}function P8(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 Al(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 pO(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 T8(e){let t=e.filter(pO),r=e.filter(n=>{if(pO(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 hO(e,t,r){let n={runId:e.id,name:e.name,status:mu(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:Al(t,"status"),attentionCounts:Al(t,"attention"),lifecycleCounts:Al(t,"lifecycleStage")},n.controller=T8(t)),n}function O8(e){return e.status==="done"&&e.attention==="done"}function jk(e){let t=ie(e),n=Object.keys(t.workers||{}).map(s=>{let i=K(Up.join(G(t.id),"workers",W(s),"worker.json"),void 0);return i?gO({run:t,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=hO(t,n,!1);return Se(Up.join(G(t.id),"last-board.json"),o),o}function Vk(e){let t=ie(e),n=Object.keys(t.workers||{}).map(i=>{let a=K(Up.join(G(t.id),"workers",W(i),"worker.json"),void 0);return a?I8(a)?P8(i,a):gO({run:t,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!O8(i)),s=hO(t,o,!0);return s.status=mu(t.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Al(n,"status"),allAttentionCounts:Al(n,"attention")},Se(Up.join(G(t.id),"last-board-compact.json"),s),s}async function yO(e,t){let r=String(e.run||""),n=String(e.agentOsId||"");if(!r||!n)return null;let o=jk(r),s=ge(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 me(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 gi=p(()=>{"use strict";$();ni();Bs();CP();qe();Q();cu();qP();Oe();xk();ka();_T();nk();ep();ii();Ao();li();pp();U();Sp();Qy();_p();XT();dr()});var kO=p(()=>{"use strict";qe();Q();ni();U()});import{spawn as N8}from"node:child_process";import{existsSync as D8,openSync as M8,closeSync as bO}from"node:fs";import L8 from"node:path";function vO(e){let t=e.nodeExecutable??process.execPath,r=Fd({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:t});if(!r)return;let n=r.cliPath;if(!D8(n))return;let o=L8.join(e.workerDir,"auto-complete.log"),s;try{s=M8(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=N8(r.command,a,X({detached:we(),stdio:i,env:process.env}));return s!==void 0&&bO(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{bO(s)}catch{}return}}var XIe,RO=p(()=>{"use strict";U();ep();Q();Oe();gi();U();Sp();Hy();$();kO();XIe=360*60*1e3});var wO=p(()=>{"use strict"});function SO(e,t,r){pe(e,["fetch","origin",r,"--prune"],{allowFailure:!0});let n=`origin/${r}`,o=Z(e,["worktree","add","-B",r,t,n]);if(o.status===0)return;let s=Z(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 _O=p(()=>{"use strict";xe()});import{createHash as B8}from"node:crypto";import{chmodSync as F8,mkdirSync as U8}from"node:fs";import xO from"node:os";import W8 from"node:path";function CO(e,t){return B8("sha256").update(e).digest("hex").slice(0,t)}function Gk(e){let t=e.platform??process.platform,r=CO(e.agentOsId,12),n=CO(e.workerKey,16);if(t==="win32")return{socketPath:`${K8}kynver-worker-${r}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=W8.posix,s=e.homeDir??xO.homedir(),i=o.join(s,".kynver","brokers",r),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=$8)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??xO.tmpdir(),`kynver-brokers-${r}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Jk(e){e.socketDir&&(U8(e.socketDir,{recursive:!0,mode:448}),F8(e.socketDir,448))}var $8,K8,Yk=p(()=>{"use strict";$8=100,K8="\\\\.\\pipe\\"});import H8 from"node:net";import{chmodSync as j8,unlinkSync as V8}from"node:fs";var Il,PO=p(()=>{"use strict";Gr();Wd();Yk();gt();Il=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=tl(t.capabilities),this.server=H8.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(t){let r=new e(t);if(Jk(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{j8(t.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Xs).map(t=>sl[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{V8(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(`
|
|
182
|
+
`)},pi=e=>({handle:e.handle,name:e.name,purpose:e.purpose,createdAt:e.createdAt,updatedAt:e.updatedAt,lastUsedAt:e.lastUsedAt,useCount:e.useCount}),fi=class{constructor(t){this.opts=t;if(!t.agentOsId.trim())throw new Ne("workspace is required","invalid");this.root=t.root??At(),this.file=y8.join(this.root,El(t.agentOsId)),this.now=t.now??(()=>new Date)}opts;file;root;now;read(){if(!m8(this.file))return{v:1,agentOsId:this.opts.agentOsId,secrets:[]};let t;try{t=JSON.parse(g8(this.file,"utf8"))}catch{throw new Ne("The saved-secrets file is damaged.","corrupt")}if(t.v!==1||!Array.isArray(t.secrets))throw new Ne("The saved-secrets file is damaged.","corrupt");if(t.agentOsId!==this.opts.agentOsId)throw new Ne("This saved-secrets file belongs to another workspace.","corrupt");return{v:1,agentOsId:t.agentOsId,secrets:t.secrets}}write(t){xl(this.root),$k(this.file,`${JSON.stringify(t)}
|
|
183
|
+
`)}list(){return this.read().secrets.map(pi)}find(t){let r=this.read().secrets.find(n=>t.handle?n.handle===t.handle:n.name===t.name);return r?pi(r):null}put(t){if(!Ep(t.name))throw new Ne("That secret name isn't allowed.","invalid");let r=Buffer.byteLength(t.value,"utf8");if(r===0)throw new Ne("The secret is empty.","invalid");if(t.value.trim().length<Et.minValueChars)throw new Ne(`The secret is too short \u2014 use at least ${Et.minValueChars} characters.`,"invalid");if(r>Et.maxValueBytes)throw new Ne("The secret is too long.","invalid");let n=(t.purpose??"").replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,Et.maxPurposeChars),o=this.read(),s=this.now().toISOString(),i=o.secrets.find(c=>c.name===t.name);if(i)return i.value=bn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Dp(this.opts.agentOsId,i.handle,i.name)),i.updatedAt=s,n&&(i.purpose=n),this.write(o),{summary:pi(i),replaced:!0};if(o.secrets.length>=Et.maxSecrets)throw new Ne("This computer already holds the most secrets allowed.","full");let a=`sec_${f8(10).toString("hex")}`,l={handle:a,name:t.name,purpose:n,createdAt:s,updatedAt:s,lastUsedAt:null,useCount:0,value:bn(this.opts.vaultKey,Buffer.from(t.value,"utf8"),Dp(this.opts.agentOsId,a,t.name))};return o.secrets.push(l),this.write(o),{summary:pi(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 Ne("No saved secret by that name.","not_found");try{let n=po(this.opts.vaultKey,r.value,Dp(this.opts.agentOsId,r.handle,r.name)).toString("utf8");return{summary:pi(r),value:n}}catch{throw new Ne(`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:po(this.opts.vaultKey,r.value,Dp(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 Ne("No saved secret by that name.","not_found");let[o]=r.secrets.splice(n,1);return r.secrets.length===0?h8(this.file,{force:!0}):this.write(r),pi(o)}}});import{statSync as k8}from"node:fs";import b8 from"node:path";function R8(e,t){return`${t}\0${e}`}function w8(e){try{let t=k8(e);return t.isFile()?`${t.mtimeMs}:${t.size}`:null}catch{return null}}function dr(e,t=At()){if(!e)return null;let r=b8.join(t,El(e)),n=w8(r),o=R8(e,t);if(!n)return mi.delete(o),null;let s=mi.get(o);if(s&&s.stamp===n)return s.redactor;try{let i=Np({root:t}),a=aO(new fi({agentOsId:e,vaultKey:i.vaultKey,root:t}).revealAllForRedaction());return mi.set(o,{stamp:n,redactor:a}),a}catch{return null}}function Hk(e){if(!e){mi.clear();return}let t=`\0${e}`;for(let r of mi.keys())r.endsWith(t)&&mi.delete(r)}function Lp(e,t,r){if(typeof e=="string")return t.redact(e);if(r>v8||e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>Lp(o,t,r+1));let n={};for(let[o,s]of Object.entries(e))n[o]=Lp(s,t,r+1);return n}function Al(e,t,r=At()){let n=dr(e,r);return!n||n.empty||!t?t:n.redact(t)}function cO(e,t,r=At()){let n=dr(e,r);return!n||n.empty?t:Lp(t,n,0)}function Bp(e,t,r=At()){let n=dr(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 Fp(e,t,r=dr(e)){return!r||r.empty?t:t.map(n=>Lp(n,r,0))}var v8,mi,pr=p(()=>{"use strict";Cl();Kk();Mp();v8=64,mi=new Map});import Wp from"node:path";async function uO(e,t,r){let n=await fetch(e,{method:"POST",headers:Kt(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 S8(e){if(e&&typeof e=="object"){let t=e.error;if(typeof t=="string"&&t.trim())return t.trim()}}function dO(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Il(e){if(typeof e!="string")return null;let t=e.trim();return t.length?t:null}function _8(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function x8(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 fO(e){let t=e?.trim();return t?/completion acknowledged but board not advanced/i.test(t)&&/task already terminal/i.test(t):!1}function C8(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function gi(e,t){(e.completionBlocker??void 0)!==(t??void 0)&&(t?e.completionBlocker=t:delete e.completionBlocker,te(e.runId,e))}function E8(e){e.completionBlocker&&(delete e.completionBlocker,te(e.runId,e))}function Up(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function A8(e,t){return{...e,...t.prUrl?{prUrl:t.prUrl}:{},...t.headCommit?{headCommit:t.headCommit}:{}}}async function hi(e){let{runId:t,workerName:r}=Sp(e),n=co(t,r),o=ie(n.runId),s=ue(n,Up(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Ve(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&&gl(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&ok(n)&&E8(n),!s.finalResult&&s.alive===!1){let R=gp({worker:n,status:s});R&&hp(n,R)&&(te(n.runId,n),n=co(t,r),s=ue(n,Up(o)))}if(!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&!n.steerRestartRequired&&n.dispatched&&a){let R=fk({worker:n,run:o,status:s});if(!R.ok)return gi(n,R.reason),{ok:!1,reason:R.reason,nextAction:R.nextAction,completionBlocked:!0};(R.prUrl||R.headCommit)&&(s=ue(n,Up(o)),s=A8(s,R))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched&&!n.steerRestartRequired){let R=ST({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!R.allowed){let P=R.detail??`worktree completion blocked (${R.state})`;return gi(n,P),{ok:!1,reason:P,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}try{qT({provider:n.provider??s.provider??null,finalResult:s.finalResult})}catch{}let d=ge(e.baseUrl?String(e.baseUrl):void 0),m=e.secret?String(e.secret):void 0,f=await ye(m,i,{baseUrl:d});a&&(await qd({worker:n,agentOsId:i,baseUrl:d,secret:f}),n=co(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=zT({usage:s.usage,provider:n.provider??s.provider??null,model:typeof n.model=="string"?n.model:s.model??null}),v=cO(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(AT(k),IT(k)){let R={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:{replayShortCircuited:!0}};return ep(n,n.runId,R),pp(n,s,{source:"harness-completion"}),gi(n,void 0),Sl(n.runId,n.name),Tn(n.runId,n.name),{ok:!0,httpStatus:200,response:{ok:!0,replayShortCircuited:!0},reason:"completion_replay_short_circuited",...s.prUrl?{prHandoff:{prUrl:s.prUrl}}:{}}}ET(k)}let b=await uO(g,f,v);if((b.status===401||b.status===403)&&!m){let R=await Dx(i,{baseUrl:d});R&&R!==f&&(f=R,b=await uO(g,f,v))}if(b.ok){let R=_P(b.parsed);if(!xP(R)){let M=`completion acknowledged but board not advanced: ${R.detail??(R.routeOutcome?`harness completion returned ${R.routeOutcome}`:"harness completion did not advance the linked task")}`;gi(n,M);let F={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:b.parsed};return ep(n,n.runId,F),k&&Ik(k,"rejected"),{ok:!1,httpStatus:b.status,response:b.parsed,reason:M,completionBlocked:!0}}gi(n,void 0);let P=R.routeOutcome??"acknowledged",N={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:b.parsed};ep(n,n.runId,N),pp(n,s,{source:"harness-completion"}),k&&Ik(k,"acknowledged"),Sl(n.runId,n.name),Tn(n.runId,n.name);let x=s.prUrl;return{ok:!0,httpStatus:b.status,response:b.parsed,reason:P,...x?{prHandoff:{prUrl:x}}:{}}}let S=b.status===401||b.status===403,w=S8(b.parsed)??(S?"runner token unauthorized":"non-2xx response"),_=S?`completion replay rejected (${b.status}): ${w}`:`completion replay failed (${b.status}): ${w}`;return gi(n,_),{ok:!1,httpStatus:b.status,response:b.parsed,completionBlocked:!0}}async function mO(e){try{let{runId:t,workerName:r}=Sp(e),n=co(t,r),o=ie(n.runId),s=ue(n,Up(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Ve(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 hi(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 gO(e){let{run:t,workerName:r,worker:n}=e,o=ue(n,{base:t.base,baseCommit:t.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=fs({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=fO(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,m=dO(n.completionResponse),f=dO(m?.task),g=Il(m?.outcome),h=Il(m?.status),y=Array.isArray(m?.warnings)?m.warnings.filter(_=>typeof _=="string"&&_.trim().length>0):[],v=Il(f?.prUrl)??Il(m?.prUrl),k=Il(n.completionReportedAt),b=_8({finished:Ve(o),completionBlocker:c,completionOutcome:g,completionReportedAt:k}),S=x8({completionBlocker:c,completionOutcome:g,completionReportedAt:k,finished:Ve(o)}),w=C8({changedFiles:o.changedFiles,headCommit:s,prUrl:v??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let _=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:v,handoffState:w,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:b,completionReportedAt:k,completionOutcome:n.completionOutcome??null,completionRouteStatus:h,completionRouteOutcome:g,completionWarnings:y,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:S,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function I8(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&&!fO(r)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:t==="done"}function P8(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 Pl(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 pO(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 T8(e){let t=e.filter(pO),r=e.filter(n=>{if(pO(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 hO(e,t,r){let n={runId:e.id,name:e.name,status:hu(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:Pl(t,"status"),attentionCounts:Pl(t,"attention"),lifecycleCounts:Pl(t,"lifecycleStage")},n.controller=T8(t)),n}function O8(e){return e.status==="done"&&e.attention==="done"}function jk(e){let t=ie(e),n=Object.keys(t.workers||{}).map(s=>{let i=K(Wp.join(G(t.id),"workers",W(s),"worker.json"),void 0);return i?gO({run:t,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=hO(t,n,!1);return Se(Wp.join(G(t.id),"last-board.json"),o),o}function Vk(e){let t=ie(e),n=Object.keys(t.workers||{}).map(i=>{let a=K(Wp.join(G(t.id),"workers",W(i),"worker.json"),void 0);return a?I8(a)?P8(i,a):gO({run:t,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!O8(i)),s=hO(t,o,!0);return s.status=hu(t.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:Pl(n,"status"),allAttentionCounts:Pl(n,"attention")},Se(Wp.join(G(t.id),"last-board-compact.json"),s),s}async function yO(e,t){let r=String(e.run||""),n=String(e.agentOsId||"");if(!r||!n)return null;let o=jk(r),s=ge(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 me(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 yi=p(()=>{"use strict";$();si();Fs();CP();qe();Q();du();qP();Oe();xk();va();_T();nk();tp();li();Io();ui();fp();U();_p();Qy();xp();XT();pr()});var kO=p(()=>{"use strict";qe();Q();si();U()});import{spawn as N8}from"node:child_process";import{existsSync as D8,openSync as M8,closeSync as bO}from"node:fs";import L8 from"node:path";function vO(e){let t=e.nodeExecutable??process.execPath,r=Ud({importMetaUrl:import.meta.url,explicitCliPath:e.cliPath,nodeExecutable:t});if(!r)return;let n=r.cliPath;if(!D8(n))return;let o=L8.join(e.workerDir,"auto-complete.log"),s;try{s=M8(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=N8(r.command,a,X({detached:we(),stdio:i,env:process.env}));return s!==void 0&&bO(s),l.unref(),{pid:l.pid,logPath:o,cliPath:n}}catch{if(s!==void 0)try{bO(s)}catch{}return}}var ePe,RO=p(()=>{"use strict";U();tp();Q();Oe();yi();U();_p();Hy();$();kO();ePe=360*60*1e3});var wO=p(()=>{"use strict"});function SO(e,t,r){pe(e,["fetch","origin",r,"--prune"],{allowFailure:!0});let n=`origin/${r}`,o=Z(e,["worktree","add","-B",r,t,n]);if(o.status===0)return;let s=Z(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 _O=p(()=>{"use strict";xe()});import{createHash as B8}from"node:crypto";import{chmodSync as F8,mkdirSync as U8}from"node:fs";import xO from"node:os";import W8 from"node:path";function CO(e,t){return B8("sha256").update(e).digest("hex").slice(0,t)}function Gk(e){let t=e.platform??process.platform,r=CO(e.agentOsId,12),n=CO(e.workerKey,16);if(t==="win32")return{socketPath:`${K8}kynver-worker-${r}-${n}`,socketDir:null,isNamedPipe:!0,relocated:!1};let o=W8.posix,s=e.homeDir??xO.homedir(),i=o.join(s,".kynver","brokers",r),a=o.join(i,`${n}.sock`);if(Buffer.byteLength(a,"utf8")<=$8)return{socketPath:a,socketDir:i,isNamedPipe:!1,relocated:!1};let l=o.join(e.tmpDir??xO.tmpdir(),`kynver-brokers-${r}`);return{socketPath:o.join(l,`${n}.sock`),socketDir:l,isNamedPipe:!1,relocated:!0}}function Jk(e){e.socketDir&&(U8(e.socketDir,{recursive:!0,mode:448}),F8(e.socketDir,448))}var $8,K8,Yk=p(()=>{"use strict";$8=100,K8="\\\\.\\pipe\\"});import H8 from"node:net";import{chmodSync as j8,unlinkSync as V8}from"node:fs";var Tl,PO=p(()=>{"use strict";Jr();$d();Yk();gt();Tl=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=nl(t.capabilities),this.server=H8.createServer(r=>{this.handleConnection(r)}),this.server.on("error",()=>{})}static async start(t){let r=new e(t);if(Jk(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{j8(t.address.socketPath,384)}catch{}return r}get identitySummary(){return this.opts.identity.summary}get toolDescriptors(){return this.grantedTools.filter(Zs).map(t=>al[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{V8(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(`
|
|
184
184
|
`);for(;s>=0;){let i=n.slice(0,s);n=n.slice(s+1),i.trim()&&this.handleLine(t,i),s=n.indexOf(`
|
|
185
|
-
`)}})}write(t,r){if(!t.destroyed)try{t.write(My(r))}catch{}}async handleLine(t,r){let n=Ly(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(!Xs(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 Ud({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 qk(){return TO}var TO,OO=p(()=>{"use strict";TO={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 NO=p(()=>{"use strict";Gr()});var DO=p(()=>{"use strict";PO();OO();Gr();Wd();NO();kk();Yk()});import{existsSync as G8,mkdirSync as J8}from"node:fs";import hi from"node:path";async function MO(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=W(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||Vr,model:t.model,rule:t.routingRule||"explicit:spawn",requestedModel:t.requestedModel??t.model}:Vd({explicitModel:t.model,explicitProvider:t.provider,explicitProviderIsOperatorOverride:!!t.provider?.trim(),configuredProvider:I().workerProvider}),s=vP(o.provider),i=o.model;if(s.preflightModel){let C=s.preflightModel(t.model);if(!C.ok)throw new Error(`model preflight failed for provider "${s.name}": ${C.note??"invalid model/provider combination"}`);C.normalized&&console.error(`[supervisor] ${n}: ${C.note}`),i=C.model}let{worktreesDir:a}=be(),l=hi.join(G(e.id),"workers",n);J8(l,{recursive:!0});let c=hi.join(a,e.id,n),u=t.repairTargetBranch?.trim()||void 0,d=u||t.branch||`agent/${e.id}/${n}`;if(G8(c))throw new Error(`worktree path already exists: ${c}`);if(pe(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)SO(e.repo,c,u);else{let C=cP({baseCommit:e.baseCommit,base:e.base,verifyRef:j=>pe(e.repo,["rev-parse","--verify","--quiet",`${j}^{commit}`],{allowFailure:!0}).trim().length>0});C.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${C.ref} (${C.source})`),e.baseCommit=pe(e.repo,["rev-parse",C.ref],{allowFailure:!0}).trim()||C.ref,tt(e)),pe(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let m=hi.join(l,"stdout.jsonl"),f=hi.join(l,"stderr.log"),g=hi.join(l,"heartbeat.jsonl"),h=gP({task:t.task,ownedPaths:t.ownedPaths||[],worktreePath:c,heartbeatPath:g,planId:t.planId,taskId:t.taskId,instructionPolicyMarkdown:t.instructionPolicyMarkdown,memoryQualityMarkdown:t.memoryQualityPromptMarkdown??t.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:t.personaMarkdown,contextEnvelopeMarkdown:t.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:t.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:t.repairTargetPrUrl,repairTargetBranch:t.repairTargetBranch??(u||void 0)}),y=process.env.KYNVER_HARNESS_TASK_ID,v=process.env.KYNVER_HARNESS_AGENT_OS_ID;t.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(t.taskId)),t.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(t.agentOsId));let k=rp({title:t.taskTitle,personaSlug:t.personaSlug,parentTaskId:t.parentTaskId,executorRef:t.executorRef}),b,S,w,_,R=t.workerMcpToken?.trim();if(R&&By(s.name)&&rl()){let C=Ut();C&&t.agentOsId&&t.taskId?(S={apiBaseUrl:C,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 P=gI(s.name);if(R&&P&&rl()){let C=Ut();if(C&&t.agentOsId&&t.taskId){let j=Gk({agentOsId:String(t.agentOsId),workerKey:l}),B=await Il.start({address:j,apiBaseUrl:C,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:R,capabilities:t.workerMcpCapabilities??null,expiresAt:t.workerMcpExpiresAt??Date.now()+Y8,workerPid:process.pid,identity:qk(),onRefusal:E=>console.error(`[supervisor] ${n}: worker tools refused a call (${E})`)});if(yk(l,B),s.name==="codex"){let E=nT({workerDir:l,brokerSocketPath:j.socketPath});if(E.ok){let L=oT(E.codexHome,Yr());L.ok?(w=E.codexHome,b=w):(kl(l),await xn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${L.detail}); spawning with the normal environment`))}else await xn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`)}else if(s.name==="cursor"){let E=tT({worktreePath:c,brokerSocketPath:j.socketPath});E.ok?b=E.configPath:(await xn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else if(s.name==="gemini"&&ti(Ct())==="antigravity"){let E=uT({worktreePath:c,brokerSocketPath:j.socketPath});E.ok?b=E.configPath:(await xn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else if(s.name==="gemini"){let E=pT({workerDir:l,brokerSocketPath:j.socketPath});E.ok?(_=E.geminiCliHome,b=_):(await xn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else b=yI({workerDir:l,brokerSocketPath:j.socketPath});b&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${B.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let N=t.taskId?y_(k_(e.id,String(t.taskId),n)):null,x;try{x=b_(N,()=>s.start({name:n,task:t.task,ownedPaths:t.ownedPaths,model:i,modelPinned:HI(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:m,stderrPath:f,heartbeatPath:g,prompt:h,reviewWorker:k,executionMode:t.executionMode??"write",...S?{workerToolGrant:S}:{},...w?{codexHome:w}:{},..._?{geminiCliHome:_}:{},...b?{mcpConfigPath:b,mcpAllowedTools:mI(t.workerMcpCapabilities)}:{}}))}catch(C){throw b&&(Dd(l),ap(c),kl(l),up(l),cp(c),oi(l)),pe(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),pe(e.repo,["branch","-D",d],{allowFailure:!0}),C}finally{y===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=y,v===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=v}let O=JI(x.model,i,s.defaultModel),M=I(),F=ut(process.env,M),V=$e().runnerId,re=Rs({boxKind:F.boxKind,config:M,env:process.env}),T={name:n,runId:e.id,status:"running",pid:x.pid,model:O,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:m,stderrPath:f,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:F.boxKind,boxId:re,runtimeId:V,startedAt:new Date().toISOString(),...N?{oomRetryHeapMb:N}:{}};if(te(e.id,T),hk(l,x.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:hi.join(l,"worker.json")}},e.status="running",tt(e),T.agentOsId&&T.taskId){let C;try{C=vO({runId:e.id,workerName:n,workerDir:l,agentOsId:T.agentOsId})}catch(j){let B=`completion sidecar failed to spawn: ${j.message}`;T.completionBlocker=B,te(e.id,T)}if(C)C.pid&&(T.completionSidecarPid=C.pid,te(e.id,T));else{let j=T.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";T.completionBlocker=j,T.completionSidecarSpawnFailedAt=new Date().toISOString(),te(e.id,T),aP(e.id,T,j)}}return T}var Y8,LO=p(()=>{"use strict";ni();Dg();xe();Q();Q();uP();hP();U();Sd();go();RP();RO();wO();_O();He();ws();$();gt();bk();vk();wo();_k();Co();wk();DO();Wr();ak();Y8=7200*1e3});function q8(e,t){let r=Ue(t)?.trim();return r||Me("KYNVER_RUNNER_TOKEN",e)||Me("OPENCLAW_RUNNER_TOKEN",e)||null}function z8(e){let t=ke()?.trim();return t||Me("KYNVER_API_KEY",e)||Me("KYNVER_RUNTIME_SECRET",e)||Me("KYNVER_CRON_SECRET",e)||Me("OPENCLAW_CRON_SECRET",e)||null}async function BO(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=q8(r,e.agentOsId),l=z8(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`,m=Date.now();try{let f=AbortSignal.timeout(o),g=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:f}),h=Date.now()-m,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(f){let g=Date.now()-m,h=f instanceof Error?f.message:String(f);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:g,probedAt:s,error:`MCP endpoint unreachable: ${h}`}}}var FO=p(()=>{"use strict";$();Mt()});function X8(e,t){let r=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||t.apiBaseUrl?.trim()||null;return r?Er(r)??null:null}function Q8(e,t){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||t.defaultRepo?.trim()||null)??null}function Z8(e,t,r){let n=e.KYNVER_HARNESS_ROOT?.trim()||t.harnessRoot?.trim()||null;return n||r||null}function UO(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.config??{},s=X8(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=Q8(r,o),l=Z8(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 WO=p(()=>{"use strict";wt()});var Pl=p(()=>{"use strict"});var Tl=p(()=>{"use strict"});var Xk=p(()=>{"use strict";$();Tl()});var Zk=p(()=>{"use strict";Pl()});import{mkdirSync as KO}from"node:fs";import{homedir as e5,tmpdir as ETe}from"node:os";import Wp from"node:path";function HO(){let e=process.env.KYNVER_STATE_ROOT;return e?Wp.resolve(e):Wp.join(e5(),".kynver","state")}function $p(){return Wp.join(HO(),"plan-outbox")}function t5(){return Wp.join(HO(),"plan-outbox-archive")}function jO(){let e=$p(),t=t5();return KO(e,{recursive:!0}),KO(t,{recursive:!0}),{outboxDir:e,archiveDir:t}}var Ol=p(()=>{"use strict"});function VO(){return{"planOutbox.storeFailures":Nl.storeFailures,"planOutbox.corruptItemsSeen":Nl.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Nl.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Nl.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Nl.halfArchivesCompleted}}var OTe,Nl,Dl=p(()=>{"use strict";Sn();Fs();OTe=600*1e3,Nl={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0}});import{existsSync as o5,readFileSync as s5,renameSync as LTe,readdirSync as BTe,rmSync as FTe,writeFileSync as UTe,unlinkSync as WTe}from"node:fs";import GO from"node:path";function JO(e){if(!o5(e))return null;try{return JSON.parse(s5(e,"utf8"))}catch{return null}}function Kp(e){let{outboxDir:t}=jO();return{jsonPath:GO.join(t,`${e.id}.json`),bodyPath:GO.join(t,e.bodyPath)}}var Ml=p(()=>{"use strict";Dl();Pl();Zk();Ol()});var YO=p(()=>{"use strict";Pl();Tl();Xk()});var eb=p(()=>{"use strict";Xk();Tl();Zk();Ol();Dl();Ml();YO()});import d5 from"node:path";function tb(e){let t=d5.join($p(),`${e}.json`);return JO(t)}var qO=p(()=>{"use strict";Ml();Dl();eb();Ol()});function rb(e){let t=Kp(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(`
|
|
186
|
-
`)}function nb(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 zO=p(()=>{"use strict";
|
|
187
|
-
`),mN(s)}finally{fN(s)}for(let i=o;;i=ab.dirname(i)){let a=gN(i,"r");try{mN(a)}catch(l){if(!v5(l))throw l}finally{fN(a)}if(i===ab.dirname(i))break}}function v5(e,t=process.platform){return t==="win32"&&e?.code==="EPERM"}function kN(e,t,r,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:g5("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:t,invocationId:h5(),startedAt:new Date().toISOString(),finishedAt:null,headSha:r,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return hN(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return hN(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}var bN=p(()=>{"use strict"});import{spawnSync as vN}from"node:child_process";function cb(e){return e?.trim()?["--repo",e.trim()]:[]}function RN(e){let t=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}function wN(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 x5(e){let t=typeof e.title=="string"?e.title.trim():"",r=typeof e.body=="string"?e.body.trim():"",n=S5.test(t)||_5.test(r),o=R5.test(r),s=w5.test(r);return n||o||s||e.vercelCheckSuccess===!0}function C5(e){if(!x5({title:e.title,body:e.body,vercelCheckSuccess:lN(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 E5(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=aN(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=cN(e.mergeStateStatus,t);if(r)throw new Error(`PR #${e.number} ${r}`)}function A5(e){E5(e),C5(e)}function I5(e){try{return A5(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function P5(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 T5(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 O5(e,t){if(!t?.trim())return;let r=vN("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}`)&&vN("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function SN(e){let t=e.cwd??process.cwd(),r=e.exec??
|
|
188
|
-
`)}var PN=p(()=>{"use strict"});function
|
|
189
|
-
`)}function W5(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 ki(e){let t=e.pipeline===!0||e.pipeline==="true";try{let ae=function(){return B.filter(D=>D.started).length},se=function(D,A){qa({runId:l.id,agentOsId:u,phase:D,startedCount:ae(),outcomeCount:B.length,cappedStarts:x,...A})},Pe=function(){return B.some(D=>(typeof D.error=="string"?D.error:"").startsWith("dispatch_start_readback_failed:"))},q=function(D){return D.landPrDispatch===!0?!0:D.task?.executor==="land_pr"};var r=ae,n=se,o=Pe,s=q;let i=eN();if(!i.ok||!i.identity){let D=tN(i);if(t)return{ok:!1,error:D,boundary:i};console.error(`run dispatch failed: ${D}`),process.exit(1)}let a=i.identity;for(let D of i.warnings)console.error(`[dispatch] runner-boundary warning: ${D}`);let l=ie(String(Lt(String(e.run||""),"--run"))),c=QO(l,a);if(!c.ok){let D=c.reason??"run does not belong to this runner boundary";if(t)return{ok:!1,error:D,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${D}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(Lt(String(e.agentOsId||""),"--agent-os-id")),d=ge(e.baseUrl?String(e.baseUrl):void 0),m=await ye(e.secret?String(e.secret):void 0,u,{baseUrl:d}),f=e.execute===!0||e.execute==="true",g=!f,h=$e({runId:l.id}),y=ul(l.id,h.runnerId),v=qx(),k=v?zu(l.repo):null,b=new WeakMap;if(v&&f&&!k){let D="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(t)return{ok:!1,error:D,runId:l.id};console.error(`run dispatch failed: ${D}`),process.exit(1)}let S=e.diskPath?ln({diskPath:String(e.diskPath)}):ln({diskPath:l.repo}),w=await AA({runId:l.id,agentOsId:u,args:e}),_=W5(e),R=_.size>0,P=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,N=R?Math.min(P,_.size):P;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let D=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await me(D,m,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(A){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${A.message}`)}}let x=g?N:Math.min(N,w.slotsAvailable);if(!g&&x<=0){let D={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:w.reason??"no resource slots",resourceGate:w};if(t)return{ok:!0,...D};console.log(JSON.stringify(D,null,2));return}let O=Is(l.id),M=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,F=(D,A)=>({agentOsId:u,...A?{claimAuthorization:A}:{},dryRun:g,maxStarts:D,leaseOwner:y,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ek,runnerDiskGate:S,runnerResourceGate:w,activeHarnessWorkers:O,runnerPresence:h,harnessBoardSnapshot:jk(l.id),...e.lane?{lane:CA(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)}:{}}),V=kA(),re=async D=>{let A=v&&k?Zx(k):void 0,H=await me(M,m,F(D,A),{agentOsId:u,baseUrl:d,timeoutMs:V})??{ok:!1,status:0,response:null},z=H.response;if(A&&Array.isArray(z?.result?.started))for(let ce of z.result.started)ce&&typeof ce=="object"&&b.set(ce,A.requestNonce);return{dispatch:H,result:z?.result}};g||qa({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:V});let T=await re(R||g?x:1);if(!T.dispatch.ok||!T.result){let D=gy(T.dispatch.response),A={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:T.dispatch.status,response:T.dispatch.response,authRefreshed:T.dispatch.refreshedAuth===!0,authRefreshFailure:T.dispatch.authRefreshFailure,...D?{timeout:!0}:{}};if(D&&qa({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:T.dispatch.status}),t)return{ok:!1,...A};console.log(JSON.stringify(A,null,2)),process.exit(1)}let C=T.result;if(g){let D=FN(C),A=UN(C),H={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:C.started.map(z=>({taskId:z.task.id,title:z.task.title,reason:z.reason})),skipped:C.skipped.map(z=>({taskId:z.task.id,skipReason:z.skipReason,reason:z.reason})),diskGate:C.diskGate,resourceGate:C.resourceGate,inspected:C.inspected,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,capacityIdle:D?.capacityIdle===!0,admissionExhaustion:D,dispatchSkipDrain:A};if(t)return{ok:!0,...H};console.log(JSON.stringify(H,null,2));return}let j=QI(),B=[],E=[],L=Number(C.inspected)||0,J=!1;async function ee(D,A,H){let z=await Ll({baseUrl:d,secret:m,agentOsId:u,taskId:String(D.id),leaseOwner:y,leaseToken:D.leaseToken?String(D.leaseToken):null,failureDetail:A});D.leaseToken&&si({taskId:String(D.id),leaseToken:String(D.leaseToken).trim()},Pk(A));let ce={taskId:D.id,started:!1,error:A,released:z.released,releaseResponse:z.releaseResponse,...H};return B.push(ce),se("outcome",{lastOutcome:ce}),!1}async function Ke(D){let A=D.task,H=String(A.id);if(R&&!_.has(H))return ee(A,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});if(!(A.prUrl?String(A.prUrl):""))return ee(A,"land_pr task missing prUrl");try{let ce=await xN({decision:D,baseUrl:d,secret:m,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:H,runId:l.id,workerName:`land-pr-${H}`,leaseOwner:y,leaseToken:typeof A.leaseToken=="string"?A.leaseToken:"",receiptDir:`${G(l.id)}/land-pr-operations`}}),Dt=await EN({baseUrl:d,secret:m,agentOsId:u,runId:l.id,task:A,report:ce});return Dt.ok?(B.push({taskId:H,started:!0,landPr:!0,outcome:ce.outcome,completionStatus:Dt.status}),!0):ee(A,`land_pr completion POST failed (HTTP ${Dt.status})`,{landPr:!0,outcome:ce.outcome})}catch(ce){return ee(A,ce.message)}}async function _r(D){let A="duplicate_dispatch_prevented: live local worker already owns this task",H=await Ll({baseUrl:d,secret:m,agentOsId:u,taskId:String(D.id),leaseOwner:y,leaseToken:D.leaseToken?String(D.leaseToken):null,failureDetail:A});D.leaseToken&&si({taskId:String(D.id),leaseToken:String(D.leaseToken).trim()},Pk(A));let z={taskId:D.id,started:!1,error:A,alreadyRunning:!0,nonFatal:!0,released:H.released,releaseResponse:H.releaseResponse};return B.push(z),se("outcome",{lastOutcome:z}),!1}async function er(D){let A=D.task,H=L5(D),z=String(A.id);if(R&&!_.has(z))return ee(A,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});let ce=B5(A.personaSlug);if(ce&&(!H?.personaInjectionReady||!H.personaMarkdown))return ee(A,`persona_injection_required: missing anchored context-envelope persona block for "${ce}"`);if(ce&&!H?.runtimeEnvelopeReady)return ee(A,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${ce}"`);if(nP(l.id,z))return _r(A);let Dt=Number(A.attempt)||1;if(Dt>j.maxTaskAttempts)return ee(A,`task attempt ${Dt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${j.maxTaskAttempts})`);let Jn=A.leaseToken?String(A.leaseToken).trim():"";if(!Jn)return ee(A,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let Yn=W(`t-${A.id}-a${A.attempt}`),Cr=Vd({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:I().workerProvider,task:PA(A)});CT({taskId:z,leaseToken:Jn,runId:l.id,workerName:Yn,provider:Cr.provider??null});let sg=qI({task:A,routing:Cr,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!sg.ok)return ee(A,sg.error??"model_routing_mismatch",{modelRoutingGuard:sg});if(MN(A)){let at=await LN({agentOsId:u,taskId:z,baseUrl:d,secret:m});if(at&&at.dispatchable===!1)return ee(A,`pr_review_head_reconcile_blocked: ${at.reason??at.outcome??"stale PR head"}`,{headReconcile:at});if(at?.activeReviewTaskId&&at.activeReviewTaskId!==z)return ee(A,`pr_review_head_reconcile_retargeted: active review is ${at.activeReviewTaskId}`,{headReconcile:at})}let Lc=YT(Cr.provider);if(!Lc.ok)return ee(A,`provider_quota_exhausted: ${Lc.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Lc.provider,retryAt:Lc.retryAtIso}});try{let at=A.planId?String(A.planId):void 0,Bc=pP({title:A.title?String(A.title):void 0,description:A.description?String(A.description):null,executorRef:A.executorRef?String(A.executorRef):null,prUrl:A.prUrl?String(A.prUrl):null,branch:A.branch?String(A.branch):null}),sS=UT({runId:l.id,workerName:Yn,maxSlots:w.maxConcurrentWorkers,diskActiveWorkers:Wg()});if(!sS.admitted)return ee(A,`admission_refused: ${sS.reason}`,{nonFatal:!0});let Fc=H?.workerMcpToken??null;if(Fc&&rl()){let ts=UO({jobId:`dispatch:${String(A.id)}`,agentOsId:u,taskId:String(A.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!ts.ok)console.error(`[dispatch] worker tools skipped for task ${String(A.id)}: context hydration failed (${ts.code}: ${ts.detail}) \u2014 spawning without tools`),Fc=null;else{let ig=await BO(ts.context);ig.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(A.id)}: tool endpoint probe failed (${ig.error??`HTTP ${ig.httpStatus}`}) \u2014 spawning without tools`),Fc=null)}}iP(l.id,String(A.id),{except:Yn});let tr=await MO(l,{name:Yn,task:U5(A,u),ownedPaths:e.owned?String(e.owned).split(",").map(ts=>ts.trim()).filter(Boolean):[],model:Cr.model,provider:Cr.provider,routingRule:Cr.rule,requestedModel:Cr.requestedModel,agentOsId:u,taskId:String(A.id),planId:at,branch:Bc?.targetPrBranch??void 0,executorRef:A.executorRef?String(A.executorRef):void 0,parentTaskId:A.parentTaskId?String(A.parentTaskId):void 0,taskTitle:A.title?String(A.title):void 0,taskPrUrl:Bc?.targetPrUrl??(A.prUrl?String(A.prUrl):void 0),repairTargetPrUrl:Bc?.targetPrUrl,repairTargetBranch:Bc?.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??ce,personaEvidence:H?.personaEvidence??null,contextEnvelopeMarkdown:H?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:H?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:H?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:H?.runtimeEnvelopeEvidence??null,workerMcpToken:Fc,workerMcpCapabilities:H?.workerMcpCapabilities??null,workerMcpExpiresAt:H?.workerMcpExpiresAt??null,leaseOwner:y,leaseToken:Jn,dispatched:!0,executionMode:Yu(A)}),Uc=await TN({agentOsId:u,taskId:String(A.id),leaseOwner:y,expectedLeaseToken:Jn,worker:tr,baseUrl:d,secret:m});if(!Uc.ok)return NN(l.id,tr,Uc.error??"dispatch_start_readback_failed"),Pn(l.id,Yn),ee(A,Uc.error??"dispatch_start_readback_failed",{readback:Uc.detail??null});tr.leaseToken!==Jn&&(tr.leaseToken=Jn,tr.leaseOwner=y,te(l.id,tr)),kp({taskId:z,leaseToken:Jn}),MT(l.id,Yn);let iS={taskId:A.id,started:!0,worker:tr.name,pid:tr.pid,branch:tr.branch,model:tr.model,provider:Cr.provider,routingRule:Cr.rule,instructionPolicyFingerprint:H?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(H?.instructionPolicyEvidence?.ruleSlugs)?H.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:H?.personaSlug??ce,personaOperatingRuleCount:H?.personaEvidence?.operatingRuleCount??null};return B.push(iS),se("worker_started",{lastOutcome:iS}),H?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${z}: instruction policy injected fingerprint=${H.instructionPolicyFingerprint}`),H?.personaSlug&&console.error(`[dispatch] task ${z}: persona context injected slug=${H.personaSlug}`),H?.contextEnvelopeReady&&console.error(`[dispatch] task ${z}: context envelope injected anchor=${H.contextEnvelopeEvidence?.anchorTaskId??z}`),H?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${z}: runtime envelope injected id=${H.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(at){return Pn(l.id,Yn),ee(A,at.message)}}let le=new Set;for(let D of TT(l.id))le.add(D);async function na(D){let A=D.task,H=String(A.id);if(le.has(H))return ee(A,"dispatch_retry_loop_prevented: task already failed to start this tick");let z=v?eC({decision:D,leaseOwner:y,repoIdentity:k,requestNonce:b.get(D)??null}):null,ce=z&&!z.allow?await ee(A,`desktop_execution_policy_denied:${z.code}: ${z.reason}`,{desktopPolicyDenied:z.code,...z.code==="operation_not_approved"?{nonFatal:!0}:{}}):q(D)?await Ke(D):await er(D);return ce||(le.add(H),PT(H,l.id)),ce}for(let D of C.started)await na(D);if(E.push(...C.skipped??[]),R)for(let D of E){let A=String(D.task.id);_.has(A)&&B.push({taskId:A,started:!1,error:`exact_target_not_started:${D.skipReason}`,skipReason:D.skipReason,detail:D.reason??null,requestedTargetTaskIds:[..._]})}for(;!R&&B.length<x;){if(Pe()){let H={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};B.push(H),se("circuit_breaker",{lastOutcome:H});break}let D=await re(1);if(!D.dispatch.ok||!D.result){let H=vA(D.dispatch.response),z=ae();J=H&&z>0;let ce=gy(D.dispatch.response),Dt={started:!1,error:ce?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:D.dispatch.status,response:D.dispatch.response,...ce?{timeout:!0}:{},...J?{nonFatal:!0,partialTopUp:!0}:{}};B.push(Dt),se("top_up_failed",{partialTopUpInterrupted:J,lastOutcome:Dt});break}L+=Number(D.result.inspected)||0,E.push(...D.result.skipped??[]);let A=D.result.started??[];if(A.length===0)break;for(let H of A){if(B.length>=x)break;await na(H)}}let xr=B.filter(D=>D.started).length,an=FN(C),es=UN(C),tS=xr===0&&(an?.capacityIdle===!0||Number(C.resourceGate?.slotsAvailable)>0);if(tS&&an?.summary){let D=an.skipReasonCounts?.retry_ceiling_exceeded??0,A=C.overAttemptIdleRecovery??an.overAttemptIdleRecovery,H=A?.attempted===!0?`; over_attempt_recovery minted=${A.minted??0} started=${A.started??0}`:D>0?"; over_attempt_recovery not attempted":"",z=es?`; dispatch_skip_drain scanned=${es.scanned??0} advanced=${es.advanced??0}`:"",ce=an.progressionReport?.summary?`; ${an.progressionReport.summary}`:"",Dt=es?.prLifecycleAttempt?.summary?`; ${es.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${an.summary}${D>0?`; retry_ceiling_exceeded=${D}`:""}${H}${z}${ce}${Dt}`)}let rS={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:y,startedCount:xr,capacityIdle:tS,admissionExhaustion:an,dispatchSkipDrain:es,outcomes:B,skipped:E.map(D=>({taskId:D.task.id,skipReason:D.skipReason})),inspected:L,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,diskGate:C.diskGate,resourceGate:C.resourceGate,...J?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:V},nS=D=>!D.started&&D.nonFatal!==!0,xj=B.some(nS),oS=J&&xr>0?!0:!xj;if(qa({runId:l.id,agentOsId:u,phase:"complete",partial:J,startedCount:xr,ok:oS}),t)return{ok:oS,...rS};console.log(JSON.stringify(rS,null,2)),B.some(nS)&&process.exit(1)}catch(i){if(t)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var ek,qd=p(()=>{"use strict";$();Xu();qe();bA();RA();EA();ma();IA();ys();Q();Q();TA();Sd();zI();ZI();Zy();LO();ni();FO();WO();gt();Hu();gi();U();XO();rk();dl();Wr();ZO();rN();sb();_p();CN();AN();PN();ON();DN();Q();BN();ph();ii();Ao();li();ek=3600*1e3});function bi(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 K5(e){let{maxStarts:t,...r}=e;return r}async function ub(e,t){if(t<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let r=K5(e);if(r.targetTaskId||r.targetTaskIds){let u=await ki({...r,execute:!0,pipeline:!0,maxStarts:String(t)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:bi(u)}}let n=Math.min(t,$5),o=Math.max(0,t-n),s=await ki({...r,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=bi(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await ki({...r,execute:!0,pipeline:!0,maxStarts:String(a)}),c=bi(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}var $5,WN=p(()=>{"use strict";qd();$5=1});function $N(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 KN=p(()=>{"use strict"});function H5(e){let r=e.response?.dispatch;return r&&typeof r=="object"?r:null}function Bl(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function j5(e){let t=Number(process.env[e]);return!Number.isFinite(t)||t<=0?null:Math.floor(t)}function HN(e,t){let r=H5(t),n=Bl(r?.recommendedMaxStarts),o=Bl(r?.actionableReady),s=Bl(r?.queuedTasks),i=Bl(r?.boardAdvancedThisTick)??0,a=Bl(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 m=j5("KYNVER_DAEMON_MAX_DISPATCH_STARTS");m!==null&&(u=Math.min(u,m));let f=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:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}var jN=p(()=>{"use strict"});import V5 from"node:path";function Po(e){let t=Ft(e);if(t.length===0)return"failed";let r=!1,n=!1,o=!1,s=!1;for(let i of t){let a=K(V5.join(G(e.id),"workers",W(i),"worker.json"),void 0);if(!a)continue;let l=ue(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){r=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Ug(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return r||o||s?null:n?"completed":"failed"}function Fl(){let e=[];for(let t of Ee()){if(!G5.has(t.status))continue;let r=Po(t);if(!r||r===t.status)continue;let n=t.status;t.status=r,tt(t),e.push({runId:t.id,from:n,to:r})}return e}var G5,en,On=p(()=>{"use strict";Q();us();Oe();U();G5=new Set(["running","dispatching","pending","queued","needs_attention"]),en=new Set(["completed","failed","cancelled","done"])});import Yt from"node:path";function Hp(e){return e.includes(J5)}function db(e,t){return Yt.join(pt(We(e)),W(t))}function Nn(e,t,r){return Yt.join(db(e,t),"workers",W(r))}function VN(e,t,r){let n=We(e);return Yt.join(n,"runs","runs",W(t),"workers",W(r))}function pb(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function To(e){return{workerJsonPath:Yt.join(e,"worker.json"),stdoutPath:Yt.join(e,"stdout.jsonl"),stderrPath:Yt.join(e,"stderr.log"),heartbeatPath:Yt.join(e,"heartbeat.jsonl"),lastStatusPath:Yt.join(e,"last-status.json")}}function GN(e){let t=To(Nn(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Hp(e.statusPath)?e.statusPath:t}var J5,fb=p(()=>{"use strict";Wt();U();J5=`${Yt.sep}runs${Yt.sep}runs${Yt.sep}`});import{existsSync as Y5,readFileSync as q5,readdirSync as z5,statSync as X5,writeFileSync as Q5}from"node:fs";import Z5 from"node:path";function s9(e,t=[]){if(!e)return e;let r=e,n=[...new Set(t.map(o=>o?.trim()).filter(o=>!!o&&o.length>=t9))].sort((o,s)=>s.length-o.length);for(let o of n){r.includes(o)&&(r=r.split(o).join(kt));let s=JSON.stringify(o).slice(1,-1);s!==o&&r.includes(s)&&(r=r.split(s).join(kt))}for(let[o,s]of e9)r=r.replace(o,s);return r}function JN(e=process.env,t=[]){let r=[];for(let[n,o]of Object.entries(e))o&&r9.test(n)&&r.push(o);for(let n of t)try{let o=n();o&&r.push(o)}catch{}return r}function YN(e,t=0){if(t>3||!Y5(e))return[];let r=[];for(let n of z5(e,{withFileTypes:!0})){let o=Z5.join(e,n.name);n.isDirectory()?r.push(...YN(o,t+1)):n.isFile()&&n9.test(n.name)&&r.push(o)}return r}function qN(e,t=[]){let r={masked:[],clean:0,failed:[]},n;try{n=YN(e)}catch{return r}for(let o of n)try{if(X5(o).size>o9){r.failed.push(o);continue}let s=q5(o,"utf8"),i=s9(s,t);if(i===s){r.clean+=1;continue}Q5(o,i,"utf8"),r.masked.push(o)}catch{r.failed.push(o)}return r}var kt,mb,e9,t9,r9,n9,o9,zN=p(()=>{"use strict";kt="<redacted>",mb=`[^\\s"'\\\\,}\\]]`,e9=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${mb}+`,"gi"),kt],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${mb}+`,"gi"),kt],[/\bkynver_u_[A-Za-z0-9_-]+/g,kt],[/\bkyn_[A-Za-z0-9]{12,}/g,kt],[/\bsk-ant-[A-Za-z0-9_-]+/g,kt],[/\bsk-[A-Za-z0-9_-]{8,}/g,kt],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,kt],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,kt],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,kt],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${kt}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${mb}+`,"g"),`$1${kt}`]],t9=12,r9=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,n9=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,o9=256*1024*1024});import{existsSync as Dn,mkdirSync as i9,readdirSync as QN,renameSync as a9,statSync as gb}from"node:fs";import Re from"node:path";function ZN(e,t){let r=Re.resolve(e),n=Re.resolve(pt(t)),o=Re.relative(n,r);return o!==".."&&!o.startsWith("..")&&!Re.isAbsolute(o)}function hb(e){if(!Dn(e))return[];try{return QN(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&t.name!=="runs").map(t=>t.name)}catch{return[]}}function yb(e){let t=Re.join(e,"workers");if(!Dn(t))return[];try{return QN(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name)}catch{return[]}}function e0(e){return Re.join(e,"archived-workers")}function c9(e,t){let r=Re.join(e0(e),W(t));return Dn(r)?`${r}-${Date.now()}`:r}function XN(e,t,r){if(!Dn(e))return!1;try{let n=t-gb(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function t0(e,t=Date.now(),r=Ul){if(!Dn(e))return!1;let n=To(e),o=K(n.workerJsonPath,void 0);if(o?.status==="running"&&ne(o.pid))return!0;let s=Be(n.heartbeatPath);if(s.lastHeartbeatAt){let i=t-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<r)return!0}return!!(XN(n.stdoutPath,t,r)||XN(n.heartbeatPath,t,r))}function u9(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-gb(Re.join(e,"worker.json")).mtimeMs}catch{return 0}}function d9(e,t,r,n){if(t0(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=u9(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 vi(e,t=Date.now(),r=Ul){for(let n of yb(e))if(t0(Re.join(e,"workers",n),t,r))return!0;return!1}function p9(){let t=Ha()?.repo??"",r="unknown";if(t)try{let n=pe(t,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(r=n)}catch{}return{repo:t,base:"origin/main",baseCommit:r}}function f9(e,t){let r=Re.join(pt(e),W(t));if(!Dn(r))return null;let n=yb(r);if(n.length===0)return null;let o;try{o=gb(r).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Nn(e,t,a);s[a]={workerDir:l,statusPath:Re.join(l,"worker.json")}}let i=vi(r);return{id:t,name:t,...p9(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function kb(e){let t=We(e??St()),r=pt(t),n=[];for(let o of hb(r)){let s=Re.join(r,o,"run.json");if(Dn(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=f9(t,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}tt(i),n.push({runId:o,action:"repaired_run_json",reason:vi(Re.join(r,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function bb(e,t={}){let r=We(e??St()),n=pt(r),o=t.now??Date.now(),s=t.archiveAgeMs??l9,i=[],a=null,l=()=>a??=(t.knownSecrets??(()=>JN(process.env,[ke,()=>Ue()])))();kb(r);for(let c of hb(n)){let u=Re.join(n,c),d=Re.join(u,"run.json"),m=K(d,void 0);if(!m?.id)continue;let f=new Set([...Object.keys(m.workers||{}),...yb(u)]),g=!1;for(let h of f){let y=Re.join(u,"workers",W(h)),v=Re.join(y,"worker.json"),k=K(v,void 0);if(!k){let w=Re.join(e0(u),W(h));if(Dn(w)&&(m.workers[W(h)]||m.workers[h])){delete m.workers[W(h)],delete m.workers[h],g=!0,i.push({runId:m.id,worker:h,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:w});continue}i.push({runId:m.id,worker:h,action:"skipped",reason:"worker.json missing"});continue}let b=d9(y,k,o,s);if(!b.eligible){i.push({runId:m.id,worker:h,action:"skipped",reason:b.reason});continue}let S=c9(u,h);i9(Re.dirname(S),{recursive:!0}),a9(y,S),qN(S,l()),delete m.workers[W(h)],delete m.workers[h],g=!0,i.push({runId:m.id,worker:h,action:"archived",reason:b.reason,archivePath:S})}g&&tt(m)}return{workers:i}}function r0(e,t=Date.now()){let r=new Set,n=pt(e);for(let o of hb(n)){let s=Re.join(n,o);vi(s,t)&&r.add(`${e}\0${o}`)}return r}var Ul,l9,Ri=p(()=>{"use strict";Ws();xe();Zn();Wt();Q();fb();U();$();zN();Ul=900*1e3,l9=3600*1e3});import{existsSync as Mn,lstatSync as m9,readdirSync as g9,readlinkSync as h9,renameSync as vb,unlinkSync as y9}from"node:fs";import pr from"node:path";function k9(e,t){let r=db(e,t),n;try{n=m9(r)}catch{return null}if(!n.isSymbolicLink())return null;let o=pr.resolve(pr.dirname(r),h9(r));if(vi(o)||vi(r))return null;let s=`${r}.materialize-${Date.now()}`;return vb(o,s),y9(r),vb(s,r),o}function b9(e){let t=[];for(let r of pb()){let n=pr.join(e.fromDir,r),o=pr.join(e.toDir,r);!Mn(n)||Mn(o)||(vb(n,o),t.push(r))}return t}function n0(e,t){let r=To(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 v9(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 R9(e){let t=To(e.canonicalDir),r=K(t.lastStatusPath,void 0),n=Mn(t.stdoutPath),o=Mn(t.heartbeatPath);if(!(n||o||r!=null))return null;let i=n?eo(t.stdoutPath):{finalResult:null},a=o?Be(t.heartbeatPath):Be(""),l=Ir(a),c=v9({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:pr.join(be().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}),n0(u,e.canonicalDir),u}function w9(e,t){let r=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Nn(t,e.id,o),a=pr.join(i,"worker.json");(Hp(s.workerDir)||Hp(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},r=!0)}return r&&(e.workers=n,tt(e)),r}function S9(e){let t=[],r=Nn(e.harnessRoot,e.run.id,e.workerName),n=VN(e.harnessRoot,e.run.id,e.workerName),o=To(r),s=b9({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=GN({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=K(i,void 0);if(!a&&Mn(o.workerJsonPath)&&(a=K(o.workerJsonPath,void 0)),!a){let l=R9({run:e.run,workerName:e.workerName,canonicalDir:r,harnessRoot:e.harnessRoot});if(l)return te(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=Mn(r),u=pb().some(d=>Mn(pr.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:pr.join(be().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 te(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 n0(a,r)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",te(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 _9(e,t){let r=pr.join(G(e.id),"workers");if(!Mn(r))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of g9(r,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function o0(){let{harnessRoot:e}=be(),t=kb(e),r=[];for(let n of Ee()){let o=k9(e,n.id);o&&r.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),w9(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 _9(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Nn(e,n.id,i),statusPath:pr.join(Nn(e,n.id,i),"worker.json")}},tt(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(...S9({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:r,runMetadataRetention:t}}var s0=p(()=>{"use strict";Zn();ka();fb();Ri();Q();U()});import{execFileSync as i0}from"node:child_process";import a0 from"node:path";function Rb(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:null}function x9(e){let t=Rb(e)?.match(/\/pull\/(\d+)$/);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function C9(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function E9(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 A9(e){let t=null;if(typeof e=="string"?t=ms(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=Rb(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 I9(e){try{let n=i0("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=i0("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:Rb(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 P9(e){let t=Be(e.heartbeatPath);return e.completionSnapshot?.finalResult??Ir(t)}function T9(e){let t=new Map,r=G(e.id);for(let n of Ft(e)){let o=K(a0.join(r,"workers",W(n),"worker.json"),void 0);if(o)for(let s of A9(P9(o))){let i=x9(s.prUrl);i!=null&&!t.has(i)&&t.set(i,s)}}return t}function O9(e,t){let r=Be(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,r.lastHeartbeatSummary,C9(t)].filter(Boolean).join(`
|
|
190
|
-
`);return E9(n)}function N9(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function wb(e={}){let t=e.lookupPr??I9,r=[],n=new Map;for(let o of Ee()){let s=T9(o),i=G(o.id);for(let a of Ft(o)){let l=a0.join(i,"workers",W(a),"worker.json"),c=K(l,void 0);if(!c||!N9(c))continue;let u=ue(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let f of O9(c,u.finalResult)){if(d=s.get(f)??null,!d){let g=o.repo||c.worktreePath,h=`${g}#${f}`,y=n.has(h)?n.get(h)??null:t({repoDir:g,prNumber:f});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 m=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=m,c.reconcileReason="local-only needs_attention superseded by merged PR",te(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 l0=p(()=>{"use strict";Zn();pu();Oe();Q();us();U()});import D9 from"node:path";function L9(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function c0(e,t){let r=mp({worker:e,status:t}),n=r?gp(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 B9(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 Sb(){let e=o0();if(L9()){let s=wb(),i=bb();return{workers:[],finalizedRuns:Fl(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let t=[],r=Date.now();for(let s of Ee())for(let i of Ft(s)){let a=D9.join(G(s.id),"workers",W(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=ue(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c0(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",te(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=c0(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,B9(l,c),te(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&&ne(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,m=!Number.isFinite(u)||r-u>M9,f=Number.isFinite(d)&&r-d>Fg;if(m&&f){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}`,te(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=wb(),o=bb();return{workers:t,finalizedRuns:Fl(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}var M9,_b=p(()=>{"use strict";On();Q();us();xk();Oe();U();s0();l0();Ri();M9=900*1e3});import{readdirSync as F9,readFileSync as U9}from"node:fs";function j9(e){if(process.platform!=="linux"||!e.trim())return null;let t=[];try{t=F9("/proc")}catch{return null}for(let r of t)if(/^\d+$/.test(r)&&Number(r)!==process.pid)try{if(U9(`/proc/${r}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(r)}catch{}return null}async function u0(e){let t=Qr(),r={mode:t,scanned:0,outcomes:[]};if(t!=="enforce")return r;let n=fe();if(!n)return r;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??$9,i=e.findOrphanPid??j9,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-K9).toISOString(),limit:H9})}catch{return Oo.recoveryStoreFailures+=1,r}for(let c of l){let u=c.idempotencyKey.slice(W9.length),d=u.split(":")[0]??"",m=u.slice(d.length+1);if(!(!d||!m))try{let f=Date.parse(c.recordedAt);if(!Number.isFinite(f)||o-f<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let g=bl(m);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(w=>{if(g===null)return!0;let _=bl(w.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return _===null||_>=g}))continue;let v={};try{v=c.resultJson?JSON.parse(c.resultJson):{}}catch{v={}}let k=v.runId??null,b=v.workerName??null;if(k&&b&&e.hasLiveWorker({runId:k,workerName:b})){kp({taskId:d,leaseToken:m}),a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"finalized_late"});continue}if(k&&b){let w=e.worktreePathFor({runId:k,workerName:b}),_=w?i(w):null;if(_!==null){Oo.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"deferred_orphan",detail:`live pid ${_} references ${w}`});continue}}if(!k){a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let S=await e.releaseClaim({taskId:d,leaseToken:m,runId:k});S.released?(si({taskId:d,leaseToken:m},"restart_recovery"),b&&(Rl(k,b),Pn(k,b)),Oo.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"released"})):S.transportError?a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"deferred_transport",detail:S.detail}):(si({taskId:d,leaseToken:m},"restart_recovery_refused"),a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"release_refused",detail:S.detail}))}catch{Oo.recoveryStoreFailures+=1}}return{mode:t,scanned:l.length,outcomes:a}}function d0(){return{"dispatchReceipts.recoveredStrandedClaims":Oo.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":Oo.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":Oo.recoveryStoreFailures}}var W9,$9,K9,H9,Oo,xb=p(()=>{"use strict";Sn();ii();Ao();li();W9="dispatch:claim:",$9=900*1e3,K9=10080*60*1e3,H9=200,Oo={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0}});import V9 from"node:path";async function f0(e){if(p0||Qr()!=="enforce")return null;p0=!0;try{let t=$e().runnerId,r=await u0({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>V9.join(be().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Ll({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:ul(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 p0,m0=p(()=>{"use strict";Q();dl();Wr();sb();xb();ii();p0=!1});import G9 from"node:os";function g0(e,t={}){let r=I(),n=(t.boxKind??Bt(r)).trim().toLowerCase()||"forge",o=t.hostLabel??G9.hostname();return{boxId:Rs({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:GE()}}var h0=p(()=>{"use strict";$();He();ws();fd()});import J9 from"node:path";async function jp(e){let t=e.pipeline===!0||e.pipeline==="true";try{let r=ie(String(Lt(String(e.run||""),"--run"))),n=String(Lt(String(e.agentOsId||""),"--agent-os-id")),o=ge(e.baseUrl?String(e.baseUrl):void 0),s=await ye(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=$e({runId:r.id}).runnerId,a=await yO({run:r.id,agentOsId:n,...e},"run_sweep"),l=[];for(let m of Object.keys(r.workers||{})){let f=K(J9.join(G(r.id),"workers",W(m),"worker.json"),void 0);if(!f||!f.dispatched||!f.taskId)continue;let g=ue(f);if(g.alive||g.finalResult||f.completionReportedAt)continue;try{let k=await mi({run:r.id,name:m,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(k.ok&&!k.skipped){l.push({worker:m,taskId:f.taskId,pid:f.pid,released:!1,deathReported:!0,stopClass:g.stopClass??null});continue}}catch{}let h=Gd({runId:r.id,workerLeaseOwner:f.leaseOwner??null,runnerId:i}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(f.taskId))}/release`,v;try{v=await me(y,s,{agentOsId:n,leaseOwner:h,...f.leaseToken?.trim()?{leaseToken:f.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(k){v={ok:!1,error:k.message}}l.push({worker:m,taskId:f.taskId,pid:f.pid,released:v.ok===!0||v.response?.ok===!0,response:v.response??v})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await me(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(m){u={ok:!1,error:m.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 Cb=p(()=>{"use strict";$();qe();Q();Oe();U();dl();Wr();gi()});async function y0(e){let t=ge(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 me(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 k0=p(()=>{"use strict";$();qe()});import Y9 from"node:path";async function b0(e,t){let r=ie(e),n=String(t.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(r.workers||{})){let i=K(Y9.join(G(r.id),"workers",W(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=ue(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 y0({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,te(r.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}var v0=p(()=>{"use strict";Oe();Q();U();k0()});function R0(e){let t=e.replace(/\\/g,"/").replace(/\/+$/,"");if(t==="node_modules"||t.startsWith("node_modules/"))return!0;for(let r of Eb)if(t===r||t.startsWith(`${r}/`))return!0;return!1}var Eb,Ab=p(()=>{"use strict";Eb=[".next",".turbo","dist","build",".cache","node_modules/.cache"]});function It(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!R0(n)})}var No=p(()=>{"use strict";Ab()});function Do(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 Wl(e){let t=e.gitAncestry?.relation;return t==="merged"||t==="synced"?It(e.changedFiles).length>0:!!(Do(e.finalResult)||t==="ahead"||t==="diverged"||e.changedFiles.length>0&&e.finalResult)}var $l=p(()=>{"use strict";No()});function Kl(e){return e.status||(e.status=ue(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Ib(e,t){if(e.status)return It(e.status.changedFiles).length>0;let r=t?t.porcelain(e.worktreePath):ca(e.worktreePath);return It(r).length>0}function q9(e){let t=e.worker.completionSnapshot?.finalResult;return t??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Pb(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=q9(e);if(o&&!ne(r.pid)){let i=t?.gitStatusCache?t.gitStatusCache.porcelain(e.worktreePath):ca(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"}:Gc(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??Do(s)};return e.status=u,u}return Kl(e)}var Vp=p(()=>{"use strict";xe();Oe();No();$l();U()});function z9(e,t=Date.now(),r=Ul){let n=Be(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=t-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<r}function wi(e,t=Date.now(),r=Ul){return ne(e.pid)?!0:z9(e,t,r)}var Gp=p(()=>{"use strict";Zn();Ri();U()});function X9(e,t){return t?t.runTerminalCache.derive(e.run):Po(e.run)}function tn(e,t=Date.now()){return wi(e.worker,t)}function Tb(e,t){return en.has(e.run.status)?!1:X9(e,t)!==null}function w0(e,t,r=Date.now()){if(tn(e,r))return!0;if(en.has(e.run.status)||Tb(e,t))return!1;let n=Kl(e);return Ve(n)?!1:!!tn(e,r)}var Ob=p(()=>{"use strict";On();Oe();Vp();Gp()});function S0(e,t){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(tn(e))return!0;let n=t??Kl(e);return!!(!Ve(n)||Wl(n)||It(n.changedFiles).length>0||fs({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Do(n.finalResult)}).blocked)}var _0=p(()=>{"use strict";du();Vp();No();Ob();Oe();$l()});import{existsSync as C0,mkdirSync as Q9,writeFileSync as x0}from"node:fs";import Jp from"node:path";function E0(e,t,r){return Jp.join(e,"salvage",W(t),W(r))}function A0(e){return C0(Jp.join(E0(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function I0(e){let t=E0(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Q9(t,{recursive:!0});let r=Jp.join(t,"salvage.patch"),n=!1;if(C0(e.indexed.worktreePath)){let s=Z(e.indexed.worktreePath,["diff","HEAD"]),i=Z(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
185
|
+
`)}})}write(t,r){if(!t.destroyed)try{t.write(My(r))}catch{}}async handleLine(t,r){let n=Ly(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(!Zs(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 Wd({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 qk(){return TO}var TO,OO=p(()=>{"use strict";TO={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 NO=p(()=>{"use strict";Jr()});var DO=p(()=>{"use strict";PO();OO();Jr();$d();NO();kk();Yk()});import{existsSync as G8,mkdirSync as J8}from"node:fs";import ki from"node:path";async function MO(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=W(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||Gr,model:t.model,rule:t.routingRule||"explicit:spawn",requestedModel:t.requestedModel??t.model}:Gd({explicitModel:t.model,explicitProvider:t.provider,explicitProviderIsOperatorOverride:!!t.provider?.trim(),configuredProvider:I().workerProvider}),s=vP(o.provider),i=o.model;if(s.preflightModel){let C=s.preflightModel(t.model);if(!C.ok)throw new Error(`model preflight failed for provider "${s.name}": ${C.note??"invalid model/provider combination"}`);C.normalized&&console.error(`[supervisor] ${n}: ${C.note}`),i=C.model}let{worktreesDir:a}=be(),l=ki.join(G(e.id),"workers",n);J8(l,{recursive:!0});let c=ki.join(a,e.id,n),u=t.repairTargetBranch?.trim()||void 0,d=u||t.branch||`agent/${e.id}/${n}`;if(G8(c))throw new Error(`worktree path already exists: ${c}`);if(pe(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u)SO(e.repo,c,u);else{let C=cP({baseCommit:e.baseCommit,base:e.base,verifyRef:j=>pe(e.repo,["rev-parse","--verify","--quiet",`${j}^{commit}`],{allowFailure:!0}).trim().length>0});C.repaired&&(console.error(`[supervisor] ${n}: run baseCommit ${e.baseCommit||"<empty>"} invalid \u2014 repaired to ${C.ref} (${C.source})`),e.baseCommit=pe(e.repo,["rev-parse",C.ref],{allowFailure:!0}).trim()||C.ref,tt(e)),pe(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0})}let m=ki.join(l,"stdout.jsonl"),f=ki.join(l,"stderr.log"),g=ki.join(l,"heartbeat.jsonl"),h=gP({task:t.task,ownedPaths:t.ownedPaths||[],worktreePath:c,heartbeatPath:g,planId:t.planId,taskId:t.taskId,instructionPolicyMarkdown:t.instructionPolicyMarkdown,memoryQualityMarkdown:t.memoryQualityPromptMarkdown??t.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:t.personaMarkdown,contextEnvelopeMarkdown:t.contextEnvelopeMarkdown,runtimeEnvelopeMarkdown:t.runtimeEnvelopeMarkdown,model:i,repairTargetPrUrl:t.repairTargetPrUrl,repairTargetBranch:t.repairTargetBranch??(u||void 0)}),y=process.env.KYNVER_HARNESS_TASK_ID,v=process.env.KYNVER_HARNESS_AGENT_OS_ID;t.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(t.taskId)),t.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(t.agentOsId));let k=np({title:t.taskTitle,personaSlug:t.personaSlug,parentTaskId:t.parentTaskId,executorRef:t.executorRef}),b,S,w,_,R=t.workerMcpToken?.trim();if(R&&By(s.name)&&ol()){let C=Ut();C&&t.agentOsId&&t.taskId?(S={apiBaseUrl:C,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 P=gI(s.name);if(R&&P&&ol()){let C=Ut();if(C&&t.agentOsId&&t.taskId){let j=Gk({agentOsId:String(t.agentOsId),workerKey:l}),B=await Tl.start({address:j,apiBaseUrl:C,agentOsId:String(t.agentOsId),taskId:String(t.taskId),token:R,capabilities:t.workerMcpCapabilities??null,expiresAt:t.workerMcpExpiresAt??Date.now()+Y8,workerPid:process.pid,identity:qk(),onRefusal:E=>console.error(`[supervisor] ${n}: worker tools refused a call (${E})`)});if(yk(l,B),s.name==="codex"){let E=nT({workerDir:l,brokerSocketPath:j.socketPath});if(E.ok){let L=oT(E.codexHome,qr());L.ok?(w=E.codexHome,b=w):(vl(l),await Cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 codex rejected the generated config (${L.detail}); spawning with the normal environment`))}else await Cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`)}else if(s.name==="cursor"){let E=tT({worktreePath:c,brokerSocketPath:j.socketPath});E.ok?b=E.configPath:(await Cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else if(s.name==="gemini"&&ni(Ct())==="antigravity"){let E=uT({worktreePath:c,brokerSocketPath:j.socketPath});E.ok?b=E.configPath:(await Cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else if(s.name==="gemini"){let E=pT({workerDir:l,brokerSocketPath:j.socketPath});E.ok?(_=E.geminiCliHome,b=_):(await Cn(l),console.error(`[supervisor] ${n}: worker tools skipped \u2014 ${E.detail}`))}else b=yI({workerDir:l,brokerSocketPath:j.socketPath});b&&console.error(`[supervisor] ${n}: worker tools enabled via broker (${B.identitySummary})`)}else console.error(`[supervisor] ${n}: worker MCP tools skipped (missing API base URL or task identity) \u2014 spawning without tools`)}let N=t.taskId?y_(k_(e.id,String(t.taskId),n)):null,x;try{x=b_(N,()=>s.start({name:n,task:t.task,ownedPaths:t.ownedPaths,model:i,modelPinned:HI(o.rule),branch:d,worktreePath:c,workerDir:l,stdoutPath:m,stderrPath:f,heartbeatPath:g,prompt:h,reviewWorker:k,executionMode:t.executionMode??"write",...S?{workerToolGrant:S}:{},...w?{codexHome:w}:{},..._?{geminiCliHome:_}:{},...b?{mcpConfigPath:b,mcpAllowedTools:mI(t.workerMcpCapabilities)}:{}}))}catch(C){throw b&&(Md(l),lp(c),vl(l),dp(l),up(c),ii(l)),pe(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),pe(e.repo,["branch","-D",d],{allowFailure:!0}),C}finally{y===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=y,v===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=v}let O=JI(x.model,i,s.defaultModel),M=I(),F=ut(process.env,M),V=$e().runnerId,re=ws({boxKind:F.boxKind,config:M,env:process.env}),T={name:n,runId:e.id,status:"running",pid:x.pid,model:O,provider:o.provider,branch:d,worktreePath:c,workerDir:l,stdoutPath:m,stderrPath:f,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:F.boxKind,boxId:re,runtimeId:V,startedAt:new Date().toISOString(),...N?{oomRetryHeapMb:N}:{}};if(te(e.id,T),hk(l,x.pid),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:ki.join(l,"worker.json")}},e.status="running",tt(e),T.agentOsId&&T.taskId){let C;try{C=vO({runId:e.id,workerName:n,workerDir:l,agentOsId:T.agentOsId})}catch(j){let B=`completion sidecar failed to spawn: ${j.message}`;T.completionBlocker=B,te(e.id,T)}if(C)C.pid&&(T.completionSidecarPid=C.pid,te(e.id,T));else{let j=T.completionBlocker??"completion sidecar failed to spawn (CLI not found or spawn error)";T.completionBlocker=j,T.completionSidecarSpawnFailedAt=new Date().toISOString(),te(e.id,T),aP(e.id,T,j)}}return T}var Y8,LO=p(()=>{"use strict";si();Mg();xe();Q();Q();uP();hP();U();xd();ho();RP();RO();wO();_O();He();Ss();$();gt();bk();vk();So();_k();Eo();wk();DO();$r();ak();Y8=7200*1e3});function q8(e,t){let r=Ue(t)?.trim();return r||Me("KYNVER_RUNNER_TOKEN",e)||Me("OPENCLAW_RUNNER_TOKEN",e)||null}function z8(e){let t=ke()?.trim();return t||Me("KYNVER_API_KEY",e)||Me("KYNVER_RUNTIME_SECRET",e)||Me("KYNVER_CRON_SECRET",e)||Me("OPENCLAW_CRON_SECRET",e)||null}async function BO(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=q8(r,e.agentOsId),l=z8(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`,m=Date.now();try{let f=AbortSignal.timeout(o),g=await i(d,{method:"GET",headers:{...u,Accept:"application/json","X-Kynver-Agent-Os-Id":e.agentOsId},signal:f}),h=Date.now()-m,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(f){let g=Date.now()-m,h=f instanceof Error?f.message:String(f);return{reachable:!1,authSource:c,endpoint:d,httpStatus:null,responseMs:g,probedAt:s,error:`MCP endpoint unreachable: ${h}`}}}var FO=p(()=>{"use strict";$();Mt()});function X8(e,t){let r=e.KYNVER_API_URL?.trim()||e.KYNVER_CRON_FIRE_BASE_URL?.trim()||t.apiBaseUrl?.trim()||null;return r?Ar(r)??null:null}function Q8(e,t){return(e.KYNVER_DEFAULT_REPO?.trim()||e.KYNVER_HARNESS_REPO?.trim()||t.defaultRepo?.trim()||null)??null}function Z8(e,t,r){let n=e.KYNVER_HARNESS_ROOT?.trim()||t.harnessRoot?.trim()||null;return n||r||null}function UO(e,t={}){let r=t.env??process.env,n=t.nowMs??Date.now(),o=t.config??{},s=X8(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=Q8(r,o),l=Z8(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 WO=p(()=>{"use strict";wt()});var Ol=p(()=>{"use strict"});var Nl=p(()=>{"use strict"});var Xk=p(()=>{"use strict";$();Nl()});var Zk=p(()=>{"use strict";Ol()});import{mkdirSync as KO}from"node:fs";import{homedir as e5,tmpdir as PTe}from"node:os";import $p from"node:path";function HO(){let e=process.env.KYNVER_STATE_ROOT;return e?$p.resolve(e):$p.join(e5(),".kynver","state")}function Kp(){return $p.join(HO(),"plan-outbox")}function t5(){return $p.join(HO(),"plan-outbox-archive")}function jO(){let e=Kp(),t=t5();return KO(e,{recursive:!0}),KO(t,{recursive:!0}),{outboxDir:e,archiveDir:t}}var Dl=p(()=>{"use strict"});function VO(){return{"planOutbox.storeFailures":Ml.storeFailures,"planOutbox.corruptItemsSeen":Ml.corruptItemsSeen,"planOutbox.corruptItemsQuarantined":Ml.corruptItemsQuarantined,"planOutbox.duplicateDrainsObserved":Ml.duplicateDrainsObserved,"planOutbox.halfArchivesCompleted":Ml.halfArchivesCompleted}}var MTe,Ml,Ll=p(()=>{"use strict";_n();Us();MTe=600*1e3,Ml={storeFailures:0,corruptItemsSeen:0,corruptItemsQuarantined:0,duplicateDrainsObserved:0,halfArchivesCompleted:0}});import{existsSync as o5,readFileSync as s5,renameSync as UTe,readdirSync as WTe,rmSync as $Te,writeFileSync as KTe,unlinkSync as HTe}from"node:fs";import GO from"node:path";function JO(e){if(!o5(e))return null;try{return JSON.parse(s5(e,"utf8"))}catch{return null}}function Hp(e){let{outboxDir:t}=jO();return{jsonPath:GO.join(t,`${e.id}.json`),bodyPath:GO.join(t,e.bodyPath)}}var Bl=p(()=>{"use strict";Ll();Ol();Zk();Dl()});var YO=p(()=>{"use strict";Ol();Nl();Xk()});var eb=p(()=>{"use strict";Xk();Nl();Zk();Dl();Ll();Bl();YO()});import d5 from"node:path";function tb(e){let t=d5.join(Kp(),`${e}.json`);return JO(t)}var qO=p(()=>{"use strict";Bl();Ll();eb();Dl()});function rb(e){let t=Hp(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(`
|
|
186
|
+
`)}function nb(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 zO=p(()=>{"use strict";Bl()});var XO=p(()=>{"use strict";Ol();eb();qO();Bl();zO();Dl();Nl()});function ob(e){return e?.trim()?e.trim():null}function QO(e,t){let r=ob(e.boxKind),n=ob(e.runnerId),o=ob(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,tt(e),{ok:!0,stamped:!0}):{ok:!0}}var ZO=p(()=>{"use strict";Q()});function eN(e=process.env){return rr(I(),e,{requireExplicitBoxKind:!0})}function tN(e){return[...e.errors,...e.warnings].join("; ")}var rN=p(()=>{"use strict";$();no()});async function Fl(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,r;try{r=await me(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 sb=p(()=>{"use strict";qe()});function bi(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 nN(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 ib=p(()=>{"use strict"});function On(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function sN(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 iN(e){let t=Array.isArray(e)?e:[],r=new Map;for(let n of t){let o=n&&typeof n=="object"?n:{},s=On(o),i=r.get(s);(!i||sN(o)>=sN(i))&&r.set(s,o)}return[...r.values()]}function p5(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 aN(e){let t=iN(e),r=[],n=[],o=[];for(let s of t){if(p5(s)){o.push(On(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&&oN.has(i))){if(i){n.push(`${On(s)}=${i}`);continue}if(!(l&&oN.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${On(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){r.push(`${On(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){r.push(`${On(s)}=${a}`);continue}r.push(`${On(s)}=PENDING`)}}}return{pending:r,failed:n,ignoredActions:o}}function lN(e){return iN(e).some(r=>{let n=On(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 cN(e,t){let r=e==="UNSTABLE"&&t.ignoredActions.length>0;return!f5.has(e)&&!r?`mergeStateStatus is ${e}`:null}var oN,f5,uN=p(()=>{"use strict";oN=new Set(["SUCCESS","SKIPPED","NEUTRAL"]);f5=new Set(["CLEAN","HAS_HOOKS"])});import{spawnSync as m5}from"node:child_process";function dN(){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=m5("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 pN=p(()=>{"use strict"});import{createHash as g5,randomUUID as h5}from"node:crypto";import{closeSync as fN,fsyncSync as mN,mkdirSync as y5,openSync as gN,realpathSync as k5,writeFileSync as b5}from"node:fs";import ab from"node:path";function yN(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 hN(e,t,r,n){y5(e,{recursive:!0,mode:448});let o=k5(e),s=gN(ab.join(o,`${t}.${r}.json`),"wx",384);try{b5(s,JSON.stringify({...n,phase:r},null,2)+`
|
|
187
|
+
`),mN(s)}finally{fN(s)}for(let i=o;;i=ab.dirname(i)){let a=gN(i,"r");try{mN(a)}catch(l){if(!v5(l))throw l}finally{fN(a)}if(i===ab.dirname(i))break}}function v5(e,t=process.platform){return t==="win32"&&e?.code==="EPERM"}function kN(e,t,r,n){let o={acceptedReview:n,agentOsId:e.agentOsId,taskId:e.taskId,runId:e.runId,workerName:e.workerName,leaseOwner:e.leaseOwner,leaseTokenSha256:g5("sha256").update(e.leaseToken).digest("hex")},s={...o,prUrl:t,invocationId:h5(),startedAt:new Date().toISOString(),finishedAt:null,headSha:r,mergedAt:null,mergeCommit:null,source:"daemon_land_pr",mergeInvoked:!1};return hN(e.receiptDir,s.invocationId,"pending",s),{finish(i){let a={...o,...i,invocationId:s.invocationId,startedAt:s.startedAt,finishedAt:new Date().toISOString()};return hN(e.receiptDir,s.invocationId,"finished",{...s,...a}),a}}}var bN=p(()=>{"use strict"});import{spawnSync as vN}from"node:child_process";function cb(e){return e?.trim()?["--repo",e.trim()]:[]}function RN(e){let t=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}function wN(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 x5(e){let t=typeof e.title=="string"?e.title.trim():"",r=typeof e.body=="string"?e.body.trim():"",n=S5.test(t)||_5.test(r),o=R5.test(r),s=w5.test(r);return n||o||s||e.vercelCheckSuccess===!0}function C5(e){if(!x5({title:e.title,body:e.body,vercelCheckSuccess:lN(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 E5(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=aN(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=cN(e.mergeStateStatus,t);if(r)throw new Error(`PR #${e.number} ${r}`)}function A5(e){E5(e),C5(e)}function I5(e){try{return A5(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function P5(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 T5(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 O5(e,t){if(!t?.trim())return;let r=vN("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}`)&&vN("git",["worktree","remove","--force",o],{windowsHide:!0,cwd:e,encoding:"utf8"}))}}async function SN(e){let t=e.cwd??process.cwd(),r=e.exec??sp,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(!bi(o)||o.prUrl!==n||o.agentOsId!==e.operation?.agentOsId||!e.revalidateAcceptedReview)return s();let i=dN();if(!i.configured)return{prUrl:n,outcome:"blocked",reason:i.reason};let a=wN(r,t,["pr","view",n,...cb(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=I5(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)||!yN(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(!bi(u)||!nN(o,u))return s();let d=kN(e.operation,n,o.headSha,o),m;try{m=r.gh(t,["pr","merge",c,...cb(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 f=(y,v)=>d.finish({attribution:v,mergeInvoked:!0,headSha:a.headRefOid,mergedAt:y?.mergedAt??null,mergeCommit:y?.mergeCommit?.oid??null,mergeExitCode:m.status});if(m.status!==0){let y=lb(r,t,c,e.repo);return y?{prUrl:y.url||a.url||n,outcome:"skipped",mergeCommit:y.mergeCommit?.oid??null,provenance:f(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:m.stderr||m.stdout||"gh pr merge failed",provenance:f(null,"unconfirmed")}}let g=lb(r,t,c,e.repo);if(g||(g=lb(r,t,c,e.repo)),!g)return{prUrl:n,outcome:"blocked",reason:"merge command completed but merged state is unconfirmed",provenance:f(null,"unconfirmed")};let h=f(g,"invoked_merge_observed");try{let y=T5(r,t,e.repo);P5(r,t,y,a.headRefName),O5(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 lb(e,t,r,n){try{let o=wN(e,t,["pr","view",r,...cb(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"?o:null}catch{return null}}var R5,w5,S5,_5,_N=p(()=>{"use strict";ib();ip();uN();pN();bN();R5=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,w5=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,S5=/^docs[(:]/i,_5=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i});async function xN(e){let t=e.decision.task,r=e.decision.acceptedReview,n=String(t.prUrl??"");return SN({prUrl:n,cwd:e.cwd,repo:RN(n),exec:e.exec,operation:e.operation,acceptedReview:bi(r)?r:void 0,revalidateAcceptedReview:async()=>{let o=await me(`${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&&bi(s.acceptedReview)?s.acceptedReview:null}})}var CN=p(()=>{"use strict";qe();ib();_N()});async function EN(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 me(n,t,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}var AN=p(()=>{"use strict";$();qe()});function IN(){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(`
|
|
188
|
+
`)}var PN=p(()=>{"use strict"});function Po(e){return`${N5} ${e.trim()}`}function D5(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 M5(e){let{snapshot:t,leaseOwner:r,expectedLeaseToken:n,worker:o}=e;if(!t)return{ok:!1,error:Po("task lease snapshot missing after spawn"),detail:{taskId:o.taskId,leaseOwner:r,expectedLeaseToken:n}};if(t.status!=="running")return{ok:!1,error:Po(`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:Po(`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:Po(`leaseToken mismatch (board=${i||"null"}, expected=${n})`),detail:{taskId:t.taskId,boardLeaseToken:i||null,expectedLeaseToken:n},snapshot:t};let a=D5(o);return a?{ok:!1,error:Po(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:Po(`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:Po("AgentOS heartbeatAt missing after claim"),detail:{taskId:t.taskId},snapshot:t}}async function TN(e){let t=await Yd({agentOsId:e.agentOsId,taskIds:[e.taskId],baseUrl:e.baseUrl,secret:e.secret});return M5({snapshot:t.get(e.taskId)??null,leaseOwner:e.leaseOwner,expectedLeaseToken:e.expectedLeaseToken,worker:e.worker})}var N5,ON=p(()=>{"use strict";Xy();N5="dispatch_start_readback_failed:"});function NN(e,t,r){t.pid&&ne(t.pid)&&(he(t.pid,"SIGTERM"),ne(t.pid)&&he(t.pid,"SIGKILL"));let n={...t,status:"failed",pid:void 0,completionBlocker:r,dispatchStartReadbackFailed:!0};return te(e,n),n}var DN=p(()=>{"use strict";U();Q()});function MN(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 LN(e){let t=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/review-head-reconcile`,r=await me(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 BN=p(()=>{"use strict";qe()});function FN(e){let t=e.admissionExhaustion;return!t||typeof t!="object"?null:t}function UN(e){let t=e.dispatchSkipDrain;return!t||typeof t!="object"?null:t}function L5(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,m=r.contextEnvelopeReady===!0,f=typeof r.runtimeEnvelopeMarkdown=="string"?r.runtimeEnvelopeMarkdown:null,g=F5(r.runtimeEnvelopeReceipt),h=r.runtimeEnvelopeReady===!0,y=r.memoryQualityCapture&&typeof r.memoryQualityCapture=="object"?r.memoryQualityCapture:null,v=typeof r.memoryQualityPromptMarkdown=="string"?r.memoryQualityPromptMarkdown:typeof y?.promptMarkdown=="string"?y.promptMarkdown:null,k=r.workerMcpToolGrant&&typeof r.workerMcpToolGrant=="object"?r.workerMcpToolGrant:null,b=k&&typeof k.token=="string"&&k.token.trim()?k.token.trim():null,S=b&&Array.isArray(k?.capabilities)?k.capabilities.filter(_=>typeof _=="string"&&_.trim().length>0):null,w=b&&typeof k?.exp=="number"&&Number.isFinite(k.exp)?k.exp*1e3:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:y,memoryQualityPromptMarkdown:v,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:m,runtimeEnvelopeMarkdown:f,runtimeEnvelopeEvidence:g,runtimeEnvelopeReady:h,workerMcpToken:b,workerMcpCapabilities:S,workerMcpExpiresAt:w}}function B5(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return t.length?t:null}function F5(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 U5(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("",IN());let n=nb(e);if(n?.outboxId){let o=tb(n.outboxId);o?r.push("",rb(o)):r.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return r.join(`
|
|
189
|
+
`)}function W5(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 vi(e){let t=e.pipeline===!0||e.pipeline==="true";try{let ae=function(){return B.filter(D=>D.started).length},se=function(D,A){Xa({runId:l.id,agentOsId:u,phase:D,startedCount:ae(),outcomeCount:B.length,cappedStarts:x,...A})},Pe=function(){return B.some(D=>(typeof D.error=="string"?D.error:"").startsWith("dispatch_start_readback_failed:"))},q=function(D){return D.landPrDispatch===!0?!0:D.task?.executor==="land_pr"};var r=ae,n=se,o=Pe,s=q;let i=eN();if(!i.ok||!i.identity){let D=tN(i);if(t)return{ok:!1,error:D,boundary:i};console.error(`run dispatch failed: ${D}`),process.exit(1)}let a=i.identity;for(let D of i.warnings)console.error(`[dispatch] runner-boundary warning: ${D}`);let l=ie(String(Lt(String(e.run||""),"--run"))),c=QO(l,a);if(!c.ok){let D=c.reason??"run does not belong to this runner boundary";if(t)return{ok:!1,error:D,runId:l.id,runnerBoundary:a};console.error(`run dispatch failed: ${D}`),process.exit(1)}c.stamped&&console.error(`[dispatch] stamped run ${l.id} with boxKind=${a.boxKind} runnerId=${a.runnerId}`);let u=String(Lt(String(e.agentOsId||""),"--agent-os-id")),d=ge(e.baseUrl?String(e.baseUrl):void 0),m=await ye(e.secret?String(e.secret):void 0,u,{baseUrl:d}),f=e.execute===!0||e.execute==="true",g=!f,h=$e({runId:l.id}),y=pl(l.id,h.runnerId),v=qx(),k=v?Qu(l.repo):null,b=new WeakMap;if(v&&f&&!k){let D="desktop_execution_policy_denied:repo_identity_unavailable: the repository has no origin remote";if(t)return{ok:!1,error:D,runId:l.id};console.error(`run dispatch failed: ${D}`),process.exit(1)}let S=e.diskPath?cn({diskPath:String(e.diskPath)}):cn({diskPath:l.repo}),w=await AA({runId:l.id,agentOsId:u,args:e}),_=W5(e),R=_.size>0,P=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,N=R?Math.min(P,_.size):P;if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let D=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/lane-hygiene`;try{await me(D,m,{agentOsId:u,dryRun:!1,includeBoardReconcile:!0},{agentOsId:u,baseUrl:d})}catch(A){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${A.message}`)}}let x=g?N:Math.min(N,w.slotsAvailable);if(!g&&x<=0){let D={runId:l.id,agentOsId:u,dryRun:!1,skipped:!0,reason:w.reason??"no resource slots",resourceGate:w};if(t)return{ok:!0,...D};console.log(JSON.stringify(D,null,2));return}let O=Ps(l.id),M=`${d}/api/agent-os/by-id/${encodeURIComponent(u)}/tasks/dispatch-next`,F=(D,A)=>({agentOsId:u,...A?{claimAuthorization:A}:{},dryRun:g,maxStarts:D,leaseOwner:y,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ek,runnerDiskGate:S,runnerResourceGate:w,activeHarnessWorkers:O,runnerPresence:h,harnessBoardSnapshot:jk(l.id),...e.lane?{lane:CA(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)}:{}}),V=kA(),re=async D=>{let A=v&&k?Zx(k):void 0,H=await me(M,m,F(D,A),{agentOsId:u,baseUrl:d,timeoutMs:V})??{ok:!1,status:0,response:null},z=H.response;if(A&&Array.isArray(z?.result?.started))for(let ce of z.result.started)ce&&typeof ce=="object"&&b.set(ce,A.requestNonce);return{dispatch:H,result:z?.result}};g||Xa({runId:l.id,agentOsId:u,phase:"awaiting_dispatch_next",timeoutMs:V});let T=await re(R||g?x:1);if(!T.dispatch.ok||!T.result){let D=hy(T.dispatch.response),A={runId:l.id,agentOsId:u,action:"dispatch",httpStatus:T.dispatch.status,response:T.dispatch.response,authRefreshed:T.dispatch.refreshedAuth===!0,authRefreshFailure:T.dispatch.authRefreshFailure,...D?{timeout:!0}:{}};if(D&&Xa({runId:l.id,agentOsId:u,phase:"timeout",timeout:!0,httpStatus:T.dispatch.status}),t)return{ok:!1,...A};console.log(JSON.stringify(A,null,2)),process.exit(1)}let C=T.result;if(g){let D=FN(C),A=UN(C),H={runId:l.id,agentOsId:u,dryRun:!0,wouldStart:C.started.map(z=>({taskId:z.task.id,title:z.task.title,reason:z.reason})),skipped:C.skipped.map(z=>({taskId:z.task.id,skipReason:z.skipReason,reason:z.reason})),diskGate:C.diskGate,resourceGate:C.resourceGate,inspected:C.inspected,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,capacityIdle:D?.capacityIdle===!0,admissionExhaustion:D,dispatchSkipDrain:A};if(t)return{ok:!0,...H};console.log(JSON.stringify(H,null,2));return}let j=QI(),B=[],E=[],L=Number(C.inspected)||0,J=!1;async function ee(D,A,H){let z=await Fl({baseUrl:d,secret:m,agentOsId:u,taskId:String(D.id),leaseOwner:y,leaseToken:D.leaseToken?String(D.leaseToken):null,failureDetail:A});D.leaseToken&&ai({taskId:String(D.id),leaseToken:String(D.leaseToken).trim()},Pk(A));let ce={taskId:D.id,started:!1,error:A,released:z.released,releaseResponse:z.releaseResponse,...H};return B.push(ce),se("outcome",{lastOutcome:ce}),!1}async function Ke(D){let A=D.task,H=String(A.id);if(R&&!_.has(H))return ee(A,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});if(!(A.prUrl?String(A.prUrl):""))return ee(A,"land_pr task missing prUrl");try{let ce=await xN({decision:D,baseUrl:d,secret:m,agentOsId:u,cwd:l.repo,operation:{agentOsId:u,taskId:H,runId:l.id,workerName:`land-pr-${H}`,leaseOwner:y,leaseToken:typeof A.leaseToken=="string"?A.leaseToken:"",receiptDir:`${G(l.id)}/land-pr-operations`}}),Dt=await EN({baseUrl:d,secret:m,agentOsId:u,runId:l.id,task:A,report:ce});return Dt.ok?(B.push({taskId:H,started:!0,landPr:!0,outcome:ce.outcome,completionStatus:Dt.status}),!0):ee(A,`land_pr completion POST failed (HTTP ${Dt.status})`,{landPr:!0,outcome:ce.outcome})}catch(ce){return ee(A,ce.message)}}async function xr(D){let A="duplicate_dispatch_prevented: live local worker already owns this task",H=await Fl({baseUrl:d,secret:m,agentOsId:u,taskId:String(D.id),leaseOwner:y,leaseToken:D.leaseToken?String(D.leaseToken):null,failureDetail:A});D.leaseToken&&ai({taskId:String(D.id),leaseToken:String(D.leaseToken).trim()},Pk(A));let z={taskId:D.id,started:!1,error:A,alreadyRunning:!0,nonFatal:!0,released:H.released,releaseResponse:H.releaseResponse};return B.push(z),se("outcome",{lastOutcome:z}),!1}async function er(D){let A=D.task,H=L5(D),z=String(A.id);if(R&&!_.has(z))return ee(A,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[..._]});let ce=B5(A.personaSlug);if(ce&&(!H?.personaInjectionReady||!H.personaMarkdown))return ee(A,`persona_injection_required: missing anchored context-envelope persona block for "${ce}"`);if(ce&&!H?.runtimeEnvelopeReady)return ee(A,`runtime_envelope_required: missing AgentRuntimeEnvelope launch receipt for persona "${ce}"`);if(nP(l.id,z))return xr(A);let Dt=Number(A.attempt)||1;if(Dt>j.maxTaskAttempts)return ee(A,`task attempt ${Dt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${j.maxTaskAttempts})`);let Yn=A.leaseToken?String(A.leaseToken).trim():"";if(!Yn)return ee(A,"dispatch_start_failed: claimed task missing leaseToken \u2014 refusing local spawn");let qn=W(`t-${A.id}-a${A.attempt}`),Er=Gd({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,configuredProvider:I().workerProvider,task:PA(A)});CT({taskId:z,leaseToken:Yn,runId:l.id,workerName:qn,provider:Er.provider??null});let ig=qI({task:A,routing:Er,explicitProvider:e.provider?String(e.provider):void 0,explicitModel:e.model?String(e.model):void 0});if(!ig.ok)return ee(A,ig.error??"model_routing_mismatch",{modelRoutingGuard:ig});if(MN(A)){let at=await LN({agentOsId:u,taskId:z,baseUrl:d,secret:m});if(at&&at.dispatchable===!1)return ee(A,`pr_review_head_reconcile_blocked: ${at.reason??at.outcome??"stale PR head"}`,{headReconcile:at});if(at?.activeReviewTaskId&&at.activeReviewTaskId!==z)return ee(A,`pr_review_head_reconcile_retargeted: active review is ${at.activeReviewTaskId}`,{headReconcile:at})}let Fc=YT(Er.provider);if(!Fc.ok)return ee(A,`provider_quota_exhausted: ${Fc.reason}`,{nonFatal:!0,providerQuotaPreflight:{provider:Fc.provider,retryAt:Fc.retryAtIso}});try{let at=A.planId?String(A.planId):void 0,Uc=pP({title:A.title?String(A.title):void 0,description:A.description?String(A.description):null,executorRef:A.executorRef?String(A.executorRef):null,prUrl:A.prUrl?String(A.prUrl):null,branch:A.branch?String(A.branch):null}),sS=UT({runId:l.id,workerName:qn,maxSlots:w.maxConcurrentWorkers,diskActiveWorkers:$g()});if(!sS.admitted)return ee(A,`admission_refused: ${sS.reason}`,{nonFatal:!0});let Wc=H?.workerMcpToken??null;if(Wc&&ol()){let rs=UO({jobId:`dispatch:${String(A.id)}`,agentOsId:u,taskId:String(A.id)},{config:{agentOsId:u,apiBaseUrl:d}});if(!rs.ok)console.error(`[dispatch] worker tools skipped for task ${String(A.id)}: context hydration failed (${rs.code}: ${rs.detail}) \u2014 spawning without tools`),Wc=null;else{let ag=await BO(rs.context);ag.reachable||(console.error(`[dispatch] worker tools skipped for task ${String(A.id)}: tool endpoint probe failed (${ag.error??`HTTP ${ag.httpStatus}`}) \u2014 spawning without tools`),Wc=null)}}iP(l.id,String(A.id),{except:qn});let tr=await MO(l,{name:qn,task:U5(A,u),ownedPaths:e.owned?String(e.owned).split(",").map(rs=>rs.trim()).filter(Boolean):[],model:Er.model,provider:Er.provider,routingRule:Er.rule,requestedModel:Er.requestedModel,agentOsId:u,taskId:String(A.id),planId:at,branch:Uc?.targetPrBranch??void 0,executorRef:A.executorRef?String(A.executorRef):void 0,parentTaskId:A.parentTaskId?String(A.parentTaskId):void 0,taskTitle:A.title?String(A.title):void 0,taskPrUrl:Uc?.targetPrUrl??(A.prUrl?String(A.prUrl):void 0),repairTargetPrUrl:Uc?.targetPrUrl,repairTargetBranch:Uc?.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??ce,personaEvidence:H?.personaEvidence??null,contextEnvelopeMarkdown:H?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:H?.contextEnvelopeEvidence??null,runtimeEnvelopeMarkdown:H?.runtimeEnvelopeMarkdown??null,runtimeEnvelopeEvidence:H?.runtimeEnvelopeEvidence??null,workerMcpToken:Wc,workerMcpCapabilities:H?.workerMcpCapabilities??null,workerMcpExpiresAt:H?.workerMcpExpiresAt??null,leaseOwner:y,leaseToken:Yn,dispatched:!0,executionMode:zu(A)}),$c=await TN({agentOsId:u,taskId:String(A.id),leaseOwner:y,expectedLeaseToken:Yn,worker:tr,baseUrl:d,secret:m});if(!$c.ok)return NN(l.id,tr,$c.error??"dispatch_start_readback_failed"),Tn(l.id,qn),ee(A,$c.error??"dispatch_start_readback_failed",{readback:$c.detail??null});tr.leaseToken!==Yn&&(tr.leaseToken=Yn,tr.leaseOwner=y,te(l.id,tr)),bp({taskId:z,leaseToken:Yn}),MT(l.id,qn);let iS={taskId:A.id,started:!0,worker:tr.name,pid:tr.pid,branch:tr.branch,model:tr.model,provider:Er.provider,routingRule:Er.rule,instructionPolicyFingerprint:H?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(H?.instructionPolicyEvidence?.ruleSlugs)?H.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:H?.personaSlug??ce,personaOperatingRuleCount:H?.personaEvidence?.operatingRuleCount??null};return B.push(iS),se("worker_started",{lastOutcome:iS}),H?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${z}: instruction policy injected fingerprint=${H.instructionPolicyFingerprint}`),H?.personaSlug&&console.error(`[dispatch] task ${z}: persona context injected slug=${H.personaSlug}`),H?.contextEnvelopeReady&&console.error(`[dispatch] task ${z}: context envelope injected anchor=${H.contextEnvelopeEvidence?.anchorTaskId??z}`),H?.runtimeEnvelopeReady&&console.error(`[dispatch] task ${z}: runtime envelope injected id=${H.runtimeEnvelopeEvidence?.envelopeId??"unknown"}`),!0}catch(at){return Tn(l.id,qn),ee(A,at.message)}}let le=new Set;for(let D of TT(l.id))le.add(D);async function sa(D){let A=D.task,H=String(A.id);if(le.has(H))return ee(A,"dispatch_retry_loop_prevented: task already failed to start this tick");let z=v?eC({decision:D,leaseOwner:y,repoIdentity:k,requestNonce:b.get(D)??null}):null,ce=z&&!z.allow?await ee(A,`desktop_execution_policy_denied:${z.code}: ${z.reason}`,{desktopPolicyDenied:z.code,...z.code==="operation_not_approved"?{nonFatal:!0}:{}}):q(D)?await Ke(D):await er(D);return ce||(le.add(H),PT(H,l.id)),ce}for(let D of C.started)await sa(D);if(E.push(...C.skipped??[]),R)for(let D of E){let A=String(D.task.id);_.has(A)&&B.push({taskId:A,started:!1,error:`exact_target_not_started:${D.skipReason}`,skipReason:D.skipReason,detail:D.reason??null,requestedTargetTaskIds:[..._]})}for(;!R&&B.length<x;){if(Pe()){let H={started:!1,error:"dispatch_circuit_breaker: start readback failed; stopping top-up for this tick",nonFatal:!0};B.push(H),se("circuit_breaker",{lastOutcome:H});break}let D=await re(1);if(!D.dispatch.ok||!D.result){let H=vA(D.dispatch.response),z=ae();J=H&&z>0;let ce=hy(D.dispatch.response),Dt={started:!1,error:ce?"dispatch_next timed out during top-up":"dispatch_next request failed during top-up",httpStatus:D.dispatch.status,response:D.dispatch.response,...ce?{timeout:!0}:{},...J?{nonFatal:!0,partialTopUp:!0}:{}};B.push(Dt),se("top_up_failed",{partialTopUpInterrupted:J,lastOutcome:Dt});break}L+=Number(D.result.inspected)||0,E.push(...D.result.skipped??[]);let A=D.result.started??[];if(A.length===0)break;for(let H of A){if(B.length>=x)break;await sa(H)}}let Cr=B.filter(D=>D.started).length,ln=FN(C),ts=UN(C),tS=Cr===0&&(ln?.capacityIdle===!0||Number(C.resourceGate?.slotsAvailable)>0);if(tS&&ln?.summary){let D=ln.skipReasonCounts?.retry_ceiling_exceeded??0,A=C.overAttemptIdleRecovery??ln.overAttemptIdleRecovery,H=A?.attempted===!0?`; over_attempt_recovery minted=${A.minted??0} started=${A.started??0}`:D>0?"; over_attempt_recovery not attempted":"",z=ts?`; dispatch_skip_drain scanned=${ts.scanned??0} advanced=${ts.advanced??0}`:"",ce=ln.progressionReport?.summary?`; ${ln.progressionReport.summary}`:"",Dt=ts?.prLifecycleAttempt?.summary?`; ${ts.prLifecycleAttempt.summary}`:"";console.error(`[dispatch] ${ln.summary}${D>0?`; retry_ceiling_exceeded=${D}`:""}${H}${z}${ce}${Dt}`)}let rS={runId:l.id,agentOsId:u,dryRun:!1,leaseOwner:y,startedCount:Cr,capacityIdle:tS,admissionExhaustion:ln,dispatchSkipDrain:ts,outcomes:B,skipped:E.map(D=>({taskId:D.task.id,skipReason:D.skipReason})),inspected:L,pagesScanned:C.pagesScanned??null,candidatesExhausted:C.candidatesExhausted??null,diskGate:C.diskGate,resourceGate:C.resourceGate,...J?{partialTopUpInterrupted:!0}:{},dispatchCallbackTimeoutMs:V},nS=D=>!D.started&&D.nonFatal!==!0,xj=B.some(nS),oS=J&&Cr>0?!0:!xj;if(Xa({runId:l.id,agentOsId:u,phase:"complete",partial:J,startedCount:Cr,ok:oS}),t)return{ok:oS,...rS};console.log(JSON.stringify(rS,null,2)),B.some(nS)&&process.exit(1)}catch(i){if(t)return{ok:!1,error:i.message};console.error(`run dispatch failed: ${i.message}`),process.exit(1)}}var ek,zd=p(()=>{"use strict";$();Zu();qe();bA();RA();EA();ha();IA();ks();Q();Q();TA();xd();zI();ZI();Zy();LO();si();FO();WO();gt();Vu();yi();U();XO();rk();fl();$r();ZO();rN();sb();xp();CN();AN();PN();ON();DN();Q();BN();fh();li();Io();ui();ek=3600*1e3});function Ri(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 K5(e){let{maxStarts:t,...r}=e;return r}async function ub(e,t){if(t<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let r=K5(e);if(r.targetTaskId||r.targetTaskIds){let u=await vi({...r,execute:!0,pipeline:!0,maxStarts:String(t)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Ri(u)}}let n=Math.min(t,$5),o=Math.max(0,t-n),s=await vi({...r,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Ri(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await vi({...r,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Ri(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}var $5,WN=p(()=>{"use strict";zd();$5=1});function $N(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 KN=p(()=>{"use strict"});function H5(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 j5(e){let t=Number(process.env[e]);return!Number.isFinite(t)||t<=0?null:Math.floor(t)}function HN(e,t){let r=H5(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 m=j5("KYNVER_DAEMON_MAX_DISPATCH_STARTS");m!==null&&(u=Math.min(u,m));let f=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:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}var jN=p(()=>{"use strict"});import V5 from"node:path";function To(e){let t=Ft(e);if(t.length===0)return"failed";let r=!1,n=!1,o=!1,s=!1;for(let i of t){let a=K(V5.join(G(e.id),"workers",W(i),"worker.json"),void 0);if(!a)continue;let l=ue(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){r=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Wg(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return r||o||s?null:n?"completed":"failed"}function Wl(){let e=[];for(let t of Ee()){if(!G5.has(t.status))continue;let r=To(t);if(!r||r===t.status)continue;let n=t.status;t.status=r,tt(t),e.push({runId:t.id,from:n,to:r})}return e}var G5,tn,Nn=p(()=>{"use strict";Q();ds();Oe();U();G5=new Set(["running","dispatching","pending","queued","needs_attention"]),tn=new Set(["completed","failed","cancelled","done"])});import Yt from"node:path";function jp(e){return e.includes(J5)}function db(e,t){return Yt.join(pt(We(e)),W(t))}function Dn(e,t,r){return Yt.join(db(e,t),"workers",W(r))}function VN(e,t,r){let n=We(e);return Yt.join(n,"runs","runs",W(t),"workers",W(r))}function pb(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Oo(e){return{workerJsonPath:Yt.join(e,"worker.json"),stdoutPath:Yt.join(e,"stdout.jsonl"),stderrPath:Yt.join(e,"stderr.log"),heartbeatPath:Yt.join(e,"heartbeat.jsonl"),lastStatusPath:Yt.join(e,"last-status.json")}}function GN(e){let t=Oo(Dn(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!jp(e.statusPath)?e.statusPath:t}var J5,fb=p(()=>{"use strict";Wt();U();J5=`${Yt.sep}runs${Yt.sep}runs${Yt.sep}`});import{existsSync as Y5,readFileSync as q5,readdirSync as z5,statSync as X5,writeFileSync as Q5}from"node:fs";import Z5 from"node:path";function s9(e,t=[]){if(!e)return e;let r=e,n=[...new Set(t.map(o=>o?.trim()).filter(o=>!!o&&o.length>=t9))].sort((o,s)=>s.length-o.length);for(let o of n){r.includes(o)&&(r=r.split(o).join(kt));let s=JSON.stringify(o).slice(1,-1);s!==o&&r.includes(s)&&(r=r.split(s).join(kt))}for(let[o,s]of e9)r=r.replace(o,s);return r}function JN(e=process.env,t=[]){let r=[];for(let[n,o]of Object.entries(e))o&&r9.test(n)&&r.push(o);for(let n of t)try{let o=n();o&&r.push(o)}catch{}return r}function YN(e,t=0){if(t>3||!Y5(e))return[];let r=[];for(let n of z5(e,{withFileTypes:!0})){let o=Z5.join(e,n.name);n.isDirectory()?r.push(...YN(o,t+1)):n.isFile()&&n9.test(n.name)&&r.push(o)}return r}function qN(e,t=[]){let r={masked:[],clean:0,failed:[]},n;try{n=YN(e)}catch{return r}for(let o of n)try{if(X5(o).size>o9){r.failed.push(o);continue}let s=q5(o,"utf8"),i=s9(s,t);if(i===s){r.clean+=1;continue}Q5(o,i,"utf8"),r.masked.push(o)}catch{r.failed.push(o)}return r}var kt,mb,e9,t9,r9,n9,o9,zN=p(()=>{"use strict";kt="<redacted>",mb=`[^\\s"'\\\\,}\\]]`,e9=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${mb}+`,"gi"),kt],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${mb}+`,"gi"),kt],[/\bkynver_u_[A-Za-z0-9_-]+/g,kt],[/\bkyn_[A-Za-z0-9]{12,}/g,kt],[/\bsk-ant-[A-Za-z0-9_-]+/g,kt],[/\bsk-[A-Za-z0-9_-]{8,}/g,kt],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,kt],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,kt],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,kt],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${kt}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${mb}+`,"g"),`$1${kt}`]],t9=12,r9=/(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)$/i,n9=/(?:\.jsonl|\.log|\.txt|^stdout.*|^stderr.*)$/i,o9=256*1024*1024});import{existsSync as Mn,mkdirSync as i9,readdirSync as QN,renameSync as a9,statSync as gb}from"node:fs";import Re from"node:path";function ZN(e,t){let r=Re.resolve(e),n=Re.resolve(pt(t)),o=Re.relative(n,r);return o!==".."&&!o.startsWith("..")&&!Re.isAbsolute(o)}function hb(e){if(!Mn(e))return[];try{return QN(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&t.name!=="runs").map(t=>t.name)}catch{return[]}}function yb(e){let t=Re.join(e,"workers");if(!Mn(t))return[];try{return QN(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name)}catch{return[]}}function e0(e){return Re.join(e,"archived-workers")}function c9(e,t){let r=Re.join(e0(e),W(t));return Mn(r)?`${r}-${Date.now()}`:r}function XN(e,t,r){if(!Mn(e))return!1;try{let n=t-gb(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function t0(e,t=Date.now(),r=$l){if(!Mn(e))return!1;let n=Oo(e),o=K(n.workerJsonPath,void 0);if(o?.status==="running"&&ne(o.pid))return!0;let s=Be(n.heartbeatPath);if(s.lastHeartbeatAt){let i=t-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<r)return!0}return!!(XN(n.stdoutPath,t,r)||XN(n.heartbeatPath,t,r))}function u9(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-gb(Re.join(e,"worker.json")).mtimeMs}catch{return 0}}function d9(e,t,r,n){if(t0(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=u9(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 wi(e,t=Date.now(),r=$l){for(let n of yb(e))if(t0(Re.join(e,"workers",n),t,r))return!0;return!1}function p9(){let t=Va()?.repo??"",r="unknown";if(t)try{let n=pe(t,["rev-parse","origin/main"],{allowFailure:!0}).trim();n&&(r=n)}catch{}return{repo:t,base:"origin/main",baseCommit:r}}function f9(e,t){let r=Re.join(pt(e),W(t));if(!Mn(r))return null;let n=yb(r);if(n.length===0)return null;let o;try{o=gb(r).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=Dn(e,t,a);s[a]={workerDir:l,statusPath:Re.join(l,"worker.json")}}let i=wi(r);return{id:t,name:t,...p9(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function kb(e){let t=We(e??St()),r=pt(t),n=[];for(let o of hb(r)){let s=Re.join(r,o,"run.json");if(Mn(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=f9(t,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}tt(i),n.push({runId:o,action:"repaired_run_json",reason:wi(Re.join(r,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function bb(e,t={}){let r=We(e??St()),n=pt(r),o=t.now??Date.now(),s=t.archiveAgeMs??l9,i=[],a=null,l=()=>a??=(t.knownSecrets??(()=>JN(process.env,[ke,()=>Ue()])))();kb(r);for(let c of hb(n)){let u=Re.join(n,c),d=Re.join(u,"run.json"),m=K(d,void 0);if(!m?.id)continue;let f=new Set([...Object.keys(m.workers||{}),...yb(u)]),g=!1;for(let h of f){let y=Re.join(u,"workers",W(h)),v=Re.join(y,"worker.json"),k=K(v,void 0);if(!k){let w=Re.join(e0(u),W(h));if(Mn(w)&&(m.workers[W(h)]||m.workers[h])){delete m.workers[W(h)],delete m.workers[h],g=!0,i.push({runId:m.id,worker:h,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:w});continue}i.push({runId:m.id,worker:h,action:"skipped",reason:"worker.json missing"});continue}let b=d9(y,k,o,s);if(!b.eligible){i.push({runId:m.id,worker:h,action:"skipped",reason:b.reason});continue}let S=c9(u,h);i9(Re.dirname(S),{recursive:!0}),a9(y,S),qN(S,l()),delete m.workers[W(h)],delete m.workers[h],g=!0,i.push({runId:m.id,worker:h,action:"archived",reason:b.reason,archivePath:S})}g&&tt(m)}return{workers:i}}function r0(e,t=Date.now()){let r=new Set,n=pt(e);for(let o of hb(n)){let s=Re.join(n,o);wi(s,t)&&r.add(`${e}\0${o}`)}return r}var $l,l9,Si=p(()=>{"use strict";$s();xe();eo();Wt();Q();fb();U();$();zN();$l=900*1e3,l9=3600*1e3});import{existsSync as Ln,lstatSync as m9,readdirSync as g9,readlinkSync as h9,renameSync as vb,unlinkSync as y9}from"node:fs";import fr from"node:path";function k9(e,t){let r=db(e,t),n;try{n=m9(r)}catch{return null}if(!n.isSymbolicLink())return null;let o=fr.resolve(fr.dirname(r),h9(r));if(wi(o)||wi(r))return null;let s=`${r}.materialize-${Date.now()}`;return vb(o,s),y9(r),vb(s,r),o}function b9(e){let t=[];for(let r of pb()){let n=fr.join(e.fromDir,r),o=fr.join(e.toDir,r);!Ln(n)||Ln(o)||(vb(n,o),t.push(r))}return t}function n0(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 v9(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 R9(e){let t=Oo(e.canonicalDir),r=K(t.lastStatusPath,void 0),n=Ln(t.stdoutPath),o=Ln(t.heartbeatPath);if(!(n||o||r!=null))return null;let i=n?to(t.stdoutPath):{finalResult:null},a=o?Be(t.heartbeatPath):Be(""),l=Pr(a),c=v9({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:fr.join(be().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}),n0(u,e.canonicalDir),u}function w9(e,t){let r=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=Dn(t,e.id,o),a=fr.join(i,"worker.json");(jp(s.workerDir)||jp(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},r=!0)}return r&&(e.workers=n,tt(e)),r}function S9(e){let t=[],r=Dn(e.harnessRoot,e.run.id,e.workerName),n=VN(e.harnessRoot,e.run.id,e.workerName),o=Oo(r),s=b9({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=GN({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=K(i,void 0);if(!a&&Ln(o.workerJsonPath)&&(a=K(o.workerJsonPath,void 0)),!a){let l=R9({run:e.run,workerName:e.workerName,canonicalDir:r,harnessRoot:e.harnessRoot});if(l)return te(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=Ln(r),u=pb().some(d=>Ln(fr.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:fr.join(be().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 te(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 n0(a,r)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",te(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 _9(e,t){let r=fr.join(G(e.id),"workers");if(!Ln(r))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of g9(r,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function o0(){let{harnessRoot:e}=be(),t=kb(e),r=[];for(let n of Ee()){let o=k9(e,n.id);o&&r.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),w9(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 _9(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:Dn(e,n.id,i),statusPath:fr.join(Dn(e,n.id,i),"worker.json")}},tt(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(...S9({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:r,runMetadataRetention:t}}var s0=p(()=>{"use strict";eo();va();fb();Si();Q();U()});import{execFileSync as i0}from"node:child_process";import a0 from"node:path";function Rb(e){let t=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return t?`https://github.com/${t[1]}/pull/${t[2]}`:null}function x9(e){let t=Rb(e)?.match(/\/pull\/(\d+)$/);if(!t)return null;let r=Number.parseInt(t[1],10);return Number.isFinite(r)?r:null}function C9(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function E9(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 A9(e){let t=null;if(typeof e=="string"?t=gs(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=Rb(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 I9(e){try{let n=i0("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=i0("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:Rb(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 P9(e){let t=Be(e.heartbeatPath);return e.completionSnapshot?.finalResult??Pr(t)}function T9(e){let t=new Map,r=G(e.id);for(let n of Ft(e)){let o=K(a0.join(r,"workers",W(n),"worker.json"),void 0);if(o)for(let s of A9(P9(o))){let i=x9(s.prUrl);i!=null&&!t.has(i)&&t.set(i,s)}}return t}function O9(e,t){let r=Be(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,r.lastHeartbeatSummary,C9(t)].filter(Boolean).join(`
|
|
190
|
+
`);return E9(n)}function N9(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function wb(e={}){let t=e.lookupPr??I9,r=[],n=new Map;for(let o of Ee()){let s=T9(o),i=G(o.id);for(let a of Ft(o)){let l=a0.join(i,"workers",W(a),"worker.json"),c=K(l,void 0);if(!c||!N9(c))continue;let u=ue(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let f of O9(c,u.finalResult)){if(d=s.get(f)??null,!d){let g=o.repo||c.worktreePath,h=`${g}#${f}`,y=n.has(h)?n.get(h)??null:t({repoDir:g,prNumber:f});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 m=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=m,c.reconcileReason="local-only needs_attention superseded by merged PR",te(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 l0=p(()=>{"use strict";eo();mu();Oe();Q();ds();U()});import D9 from"node:path";function L9(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function c0(e,t){let r=gp({worker:e,status:t}),n=r?hp(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 B9(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 Sb(){let e=o0();if(L9()){let s=wb(),i=bb();return{workers:[],finalizedRuns:Wl(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let t=[],r=Date.now();for(let s of Ee())for(let i of Ft(s)){let a=D9.join(G(s.id),"workers",W(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=ue(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c0(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,l.stopClass="finished",te(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=c0(l,c);l.status=u.nextStatus,l.reconciledAt=new Date().toISOString(),l.reconcileReason=u.reason,B9(l,c),te(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&&ne(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,m=!Number.isFinite(u)||r-u>M9,f=Number.isFinite(d)&&r-d>Ug;if(m&&f){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}`,te(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=wb(),o=bb();return{workers:t,finalizedRuns:Wl(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}var M9,_b=p(()=>{"use strict";Nn();Q();ds();xk();Oe();U();s0();l0();Si();M9=900*1e3});import{readdirSync as F9,readFileSync as U9}from"node:fs";function j9(e){if(process.platform!=="linux"||!e.trim())return null;let t=[];try{t=F9("/proc")}catch{return null}for(let r of t)if(/^\d+$/.test(r)&&Number(r)!==process.pid)try{if(U9(`/proc/${r}/cmdline`,"utf8").replace(/\0/g," ").includes(e))return Number(r)}catch{}return null}async function u0(e){let t=Zr(),r={mode:t,scanned:0,outcomes:[]};if(t!=="enforce")return r;let n=fe();if(!n)return r;let o=e.nowMs??Date.now(),s=e.strandedAfterMs??$9,i=e.findOrphanPid??j9,a=[],l;try{l=n.listOperationReceipts({operation:"dispatch-claim",recordedAfter:new Date(o-K9).toISOString(),limit:H9})}catch{return No.recoveryStoreFailures+=1,r}for(let c of l){let u=c.idempotencyKey.slice(W9.length),d=u.split(":")[0]??"",m=u.slice(d.length+1);if(!(!d||!m))try{let f=Date.parse(c.recordedAt);if(!Number.isFinite(f)||o-f<s||n.getOperationReceipt(`dispatch:spawned:${u}`)||n.getOperationReceipt(`dispatch:released:${u}`))continue;let g=Rl(m);if(n.listOperationReceipts({keyPrefix:`dispatch:completion-acked:${d}:`,limit:10}).some(w=>{if(g===null)return!0;let _=Rl(w.idempotencyKey.slice(`dispatch:completion-acked:${d}:`.length));return _===null||_>=g}))continue;let v={};try{v=c.resultJson?JSON.parse(c.resultJson):{}}catch{v={}}let k=v.runId??null,b=v.workerName??null;if(k&&b&&e.hasLiveWorker({runId:k,workerName:b})){bp({taskId:d,leaseToken:m}),a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"finalized_late"});continue}if(k&&b){let w=e.worktreePathFor({runId:k,workerName:b}),_=w?i(w):null;if(_!==null){No.recoveryDeferredOrphans+=1,a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"deferred_orphan",detail:`live pid ${_} references ${w}`});continue}}if(!k){a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"skipped",detail:"claim intent missing runId \u2014 cannot resolve lease owner"});continue}let S=await e.releaseClaim({taskId:d,leaseToken:m,runId:k});S.released?(ai({taskId:d,leaseToken:m},"restart_recovery"),b&&(Sl(k,b),Tn(k,b)),No.recoveredStrandedClaims+=1,a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"released"})):S.transportError?a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"deferred_transport",detail:S.detail}):(ai({taskId:d,leaseToken:m},"restart_recovery_refused"),a.push({taskId:d,leaseToken:m,runId:k,workerName:b,action:"release_refused",detail:S.detail}))}catch{No.recoveryStoreFailures+=1}}return{mode:t,scanned:l.length,outcomes:a}}function d0(){return{"dispatchReceipts.recoveredStrandedClaims":No.recoveredStrandedClaims,"dispatchReceipts.recoveryDeferredOrphans":No.recoveryDeferredOrphans,"dispatchReceipts.recoveryStoreFailures":No.recoveryStoreFailures}}var W9,$9,K9,H9,No,xb=p(()=>{"use strict";_n();li();Io();ui();W9="dispatch:claim:",$9=900*1e3,K9=10080*60*1e3,H9=200,No={recoveredStrandedClaims:0,recoveryDeferredOrphans:0,recoveryStoreFailures:0}});import V9 from"node:path";async function f0(e){if(p0||Zr()!=="enforce")return null;p0=!0;try{let t=$e().runnerId,r=await u0({hasLiveWorker:e.hasLiveWorker,worktreePathFor:({runId:n,workerName:o})=>V9.join(be().worktreesDir,n,o),releaseClaim:async({taskId:n,leaseToken:o,runId:s})=>{let i=await Fl({baseUrl:e.baseUrl,secret:e.secret,agentOsId:e.agentOsId,taskId:n,leaseOwner:pl(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 p0,m0=p(()=>{"use strict";Q();fl();$r();sb();xb();li();p0=!1});import G9 from"node:os";function g0(e,t={}){let r=I(),n=(t.boxKind??Bt(r)).trim().toLowerCase()||"forge",o=t.hostLabel??G9.hostname();return{boxId:ws({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:GE()}}var h0=p(()=>{"use strict";$();He();Ss();gd()});import J9 from"node:path";async function Vp(e){let t=e.pipeline===!0||e.pipeline==="true";try{let r=ie(String(Lt(String(e.run||""),"--run"))),n=String(Lt(String(e.agentOsId||""),"--agent-os-id")),o=ge(e.baseUrl?String(e.baseUrl):void 0),s=await ye(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=$e({runId:r.id}).runnerId,a=await yO({run:r.id,agentOsId:n,...e},"run_sweep"),l=[];for(let m of Object.keys(r.workers||{})){let f=K(J9.join(G(r.id),"workers",W(m),"worker.json"),void 0);if(!f||!f.dispatched||!f.taskId)continue;let g=ue(f);if(g.alive||g.finalResult||f.completionReportedAt)continue;try{let k=await hi({run:r.id,name:m,agentOsId:n,...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});if(k.ok&&!k.skipped){l.push({worker:m,taskId:f.taskId,pid:f.pid,released:!1,deathReported:!0,stopClass:g.stopClass??null});continue}}catch{}let h=Jd({runId:r.id,workerLeaseOwner:f.leaseOwner??null,runnerId:i}),y=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(f.taskId))}/release`,v;try{v=await me(y,s,{agentOsId:n,leaseOwner:h,...f.leaseToken?.trim()?{leaseToken:f.leaseToken.trim()}:{}},{agentOsId:n,baseUrl:o})}catch(k){v={ok:!1,error:k.message}}l.push({worker:m,taskId:f.taskId,pid:f.pid,released:v.ok===!0||v.response?.ok===!0,response:v.response??v})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await me(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(m){u={ok:!1,error:m.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 Cb=p(()=>{"use strict";$();qe();Q();Oe();U();fl();$r();yi()});async function y0(e){let t=ge(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 me(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 k0=p(()=>{"use strict";$();qe()});import Y9 from"node:path";async function b0(e,t){let r=ie(e),n=String(t.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(r.workers||{})){let i=K(Y9.join(G(r.id),"workers",W(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=ue(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 y0({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,te(r.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}var v0=p(()=>{"use strict";Oe();Q();U();k0()});function R0(e){let t=e.replace(/\\/g,"/").replace(/\/+$/,"");if(t==="node_modules"||t.startsWith("node_modules/"))return!0;for(let r of Eb)if(t===r||t.startsWith(`${r}/`))return!0;return!1}var Eb,Ab=p(()=>{"use strict";Eb=[".next",".turbo","dist","build",".cache","node_modules/.cache"]});function It(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!R0(n)})}var Do=p(()=>{"use strict";Ab()});function Mo(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 Kl(e){let t=e.gitAncestry?.relation;return t==="merged"||t==="synced"?It(e.changedFiles).length>0:!!(Mo(e.finalResult)||t==="ahead"||t==="diverged"||e.changedFiles.length>0&&e.finalResult)}var Hl=p(()=>{"use strict";Do()});function jl(e){return e.status||(e.status=ue(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Ib(e,t){if(e.status)return It(e.status.changedFiles).length>0;let r=t?t.porcelain(e.worktreePath):da(e.worktreePath);return It(r).length>0}function q9(e){let t=e.worker.completionSnapshot?.finalResult;return t??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Pb(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=q9(e);if(o&&!ne(r.pid)){let i=t?.gitStatusCache?t.gitStatusCache.porcelain(e.worktreePath):da(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"}:Yc(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??Mo(s)};return e.status=u,u}return jl(e)}var Gp=p(()=>{"use strict";xe();Oe();Do();Hl();U()});function z9(e,t=Date.now(),r=$l){let n=Be(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=t-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<r}function _i(e,t=Date.now(),r=$l){return ne(e.pid)?!0:z9(e,t,r)}var Jp=p(()=>{"use strict";eo();Si();U()});function X9(e,t){return t?t.runTerminalCache.derive(e.run):To(e.run)}function rn(e,t=Date.now()){return _i(e.worker,t)}function Tb(e,t){return tn.has(e.run.status)?!1:X9(e,t)!==null}function w0(e,t,r=Date.now()){if(rn(e,r))return!0;if(tn.has(e.run.status)||Tb(e,t))return!1;let n=jl(e);return Ve(n)?!1:!!rn(e,r)}var Ob=p(()=>{"use strict";Nn();Oe();Gp();Jp()});function S0(e,t){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(rn(e))return!0;let n=t??jl(e);return!!(!Ve(n)||Kl(n)||It(n.changedFiles).length>0||ms({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Mo(n.finalResult)}).blocked)}var _0=p(()=>{"use strict";fu();Gp();Do();Ob();Oe();Hl()});import{existsSync as C0,mkdirSync as Q9,writeFileSync as x0}from"node:fs";import Yp from"node:path";function E0(e,t,r){return Yp.join(e,"salvage",W(t),W(r))}function A0(e){return C0(Yp.join(E0(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function I0(e){let t=E0(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Q9(t,{recursive:!0});let r=Yp.join(t,"salvage.patch"),n=!1;if(C0(e.indexed.worktreePath)){let s=Z(e.indexed.worktreePath,["diff","HEAD"]),i=Z(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
191
191
|
`);a.trim()&&(x0(r,a.endsWith(`
|
|
192
192
|
`)?a:`${a}
|
|
193
|
-
`),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 x0(
|
|
194
|
-
`),o}var P0=p(()=>{"use strict";xe();U()});import Yp from"node:path";function e7(e){e.writeSalvageEvidence&&Z9.has(e.skipReason)&&(tn(e.indexed,e.now)||A0({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||I0({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function t7(e){let{indexed:t,worktreesAgeMs:r,terminalWorktreesAgeMs:n}=e;return t&&(en.has(t.run.status)||e.liveness&&Tb(t,e.liveness)||e.liveness&&Ve(Pb(t,e.liveness))&&!tn(t))?n:r}function r7(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:t7(e)}function n7(e,t){if(e.harnessRoot?.trim())return Yp.resolve(e.harnessRoot);let r=t.worker.workerDir;if(!r)return null;let n=`${Yp.sep}runs${Yp.sep}`,o=r.indexOf(n);return o<0?null:r.slice(0,o+n.length-1)}function T0(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=r7(e);if(n<=0&&!r&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(tn(t,a))return"active_worker";let c=Pb(t,e.liveness),u=n7(e,t),d=g=>{if(u)try{e7({indexed:t,harnessRoot:u,skipReason:g,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return g};if(S0(t,c)){let g=d("completion_blocked");if(g)return g}if(Ib(t,e.liveness?.gitStatusCache)){let g=d("dirty_worktree");if(g)return g}let m=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(m!=null&&m>0){let g=d("pr_or_unmerged_commits");if(g)return g}if(w0(t,e.liveness,a)||!Ve(c))return"run_still_active";if(Wl(c)){let g=d("pr_or_unmerged_commits");if(g)return g}if(It(c.changedFiles).length>0){let g=d("dirty_worktree");if(g)return g}if(fs({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Do(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 Nb(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(Yp.resolve(o))||t&&tn(t)?"active_worker":t&&Ib(t,e.gitStatusCache)?"dirty_worktree":null}function O0(e){return Nb(e)}var Z9,N0=p(()=>{"use strict";du();Vp();Oe();On();Ob();_0();P0();No();$l();No();$l();Z9=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"])});var qp=p(()=>{"use strict"});function M0(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)D0.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||D0.has(s.skipReason)&&o(s.path,s.skipReason);return r}var D0,L0=p(()=>{"use strict";qp();D0=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"])});import B0 from"node:path";function s7(e,t){return wi(e,t)}function F0(e,t=Date.now()){let r=new Set,n=new Set;for(let o of e){for(let s of Ku(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=K(B0.join(Ta(o,s.id),"workers",W(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=B0.resolve(l.worktreePath);s7(l,t)&&(i=!0,r.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of r0(o))n.add(s)}return{activeWorktreePaths:r,liveRunKeys:n}}function U0(e,t,r,n){return r?n.has(`${t}\0${r}`):!1}var Db=p(()=>{"use strict";Q();Wt();Ri();Gp();U()});import{existsSync as W0,readdirSync as $0,statSync as i7}from"node:fs";import K0 from"node:path";function a7(e,t){try{let r=i7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function l7(e,t){let r=K0.join(e,"runs",t,"run.json");return W0(r)?K(r,null):null}function H0(e){try{return $0(e).length===0}catch{return!1}}function j0(e){let{harnessRoot:t,runId:r,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(U0(n,t,r,i.liveRunKeys)||!H0(n))return"run_still_active";let a=l7(t,r);return a&&!en.has(a.status)&&!Po(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function V0(e){if(!W0(e.worktreesDir))return[];let t=[],r;try{r=$0(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=K0.join(e.worktreesDir,o);H0(s)&&t.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:a7(s,e.now)})}return t}var G0=p(()=>{"use strict";Db();On();U()});import{execFileSync as c7}from"node:child_process";import{existsSync as J0,readdirSync as u7,statSync as d7}from"node:fs";import p7 from"node:path";function m7(e,t=f7){if(!J0(e))return 0;try{let n=c7("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 rn(e,t=5e4){if(!J0(e))return 0;let r=m7(e);if(r!==null)return r;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=u7(i)}catch{continue}for(let l of a){if(o++>t)return null;let c=p7.join(i,l),u;try{u=d7(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}var f7,Hl=p(()=>{"use strict";f7=2500});import{lstatSync as g7,readdirSync as h7}from"node:fs";function Y0(e){try{let t=g7(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 q0(e,t=32){let r=Y0(e);if(!r)return!1;if(r.foreign)return!0;try{let n=h7(e),o=0;for(let s of n){if(o>=t)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Y0(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}var z0=p(()=>{"use strict"});import Pt from"node:path";function X0(e,t,r,n){let o=Pt.resolve(e),s=`${Pt.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Pt.relative(r,i);if(a.startsWith("..")||Pt.isAbsolute(a))return"path_outside_harness";let l=a.split(Pt.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Pt.resolve(t))?"path_outside_harness":null}function zp(e,t,r){return X0(e,t,r,"node_modules")}function Xp(e,t,r){return X0(e,t,r,".next")}function Qp(e,t,r){let n=Pt.resolve(e),o=Pt.relative(r,n);return o.startsWith("..")||Pt.isAbsolute(o)||o.split(Pt.sep).length<3||!n.startsWith(Pt.resolve(t))?"path_outside_harness":null}function Q0(e,t,r){let n=Pt.resolve(e);return zp(n,t,r)===null||Xp(n,t,r)===null||Qp(n,t,r)===null}var Mb=p(()=>{"use strict"});import{spawnSync as y7}from"node:child_process";import Z0 from"node:path";function tD(){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 eD(e){let t=y7("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:t.status===0,stderr:`${t.stderr??""}${t.stdout??""}`.trim()}}function rD(e,t,r){if(!Q0(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=eD(["chown","-R",`${n}:${o}`,Z0.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=eD(["rm","-rf",Z0.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 Lb,nD=p(()=>{"use strict";Mb();Lb="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 k7,rmSync as b7}from"node:fs";function v7(e){let t=e?.code;return t==="EACCES"||t==="EPERM"}function oD(e,t,r={}){if(!k7(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?As(n):null,i=e.bytes??rn(e.path)??void 0,a=r.removePath??b7,l=r.hasForeignOwnedEntry??q0;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!v7(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=tD();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Lb}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let f=rD(e.path,n,o);if(f.ok&&f.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(f.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: ${f.error}; ${Lb}`}}}var sD=p(()=>{"use strict";Hl();Wt();z0();nD()});import{existsSync as Bb,rmSync as iD}from"node:fs";function Fb(e){let t=e.harnessRoot;return!t||!ZN(e.path,t)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ub(e,t){let r=Fb(e);if(r)return r;let n=oD(e,t);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function aD(e,t){return Ub(e,t)}function lD(e,t){return Ub(e,t)}function cD(e,t){return Ub(e,t)}function uD(e,t){let r=Fb(e);if(r)return r;if(!Bb(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??rn(e.path);return iD(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 dD(e,t){let r=Fb(e);if(r)return r;if(!Bb(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??rn(e.path);return n&&pe(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Bb(e.path)&&iD(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 pD=p(()=>{"use strict";xe();Hl();sD();Ri();Mb()});import{existsSync as Zp,readdirSync as ef,statSync as R7}from"node:fs";import fr from"node:path";function Wb(e,t){try{let r=R7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function mD(e,t){let r=fr.relative(t,e);return r===""||!r.startsWith("..")&&!fr.isAbsolute(r)}function fD(e,t,r,n){let o=[];for(let s of Eb){if(s===".next")continue;let i=fr.join(e,s);if(!Zp(i))continue;let a=fr.resolve(i);r.has(a)||mD(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:Wb(a,t.now)}))}return o}function gD(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||t.push(...fD(n.worktreePath,e,r,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Zp(e.worktreesDir))return t;for(let n of ef(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=fr.join(e.worktreesDir,n.name);for(let s of ef(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=fr.join(o,s.name);t.push(...fD(i,e,r,{runId:n.name,worker:s.name}))}}return t}function hD(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;Zp(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:Wb(a,e.now)})))}if(!r||!Zp(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(fr.resolve(i.worktreePath));for(let i of ef(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=fr.join(e.worktreesDir,i.name),l;try{l=ef(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=fr.resolve(fr.join(a,c.name));o.has(u)||s.has(u)||mD(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Wb(u,e.now)}))}}return n}var yD=p(()=>{"use strict";Ab()});import{existsSync as vD,readdirSync as kD,statSync as w7}from"node:fs";import Si from"node:path";function _7(e,t){try{let r=w7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function x7(e,t){let r=Si.relative(t,e);return r===""||!r.startsWith("..")&&!Si.isAbsolute(r)}function C7(e,t,r,n,o,s){if(!vD(n))return;let i=Si.resolve(n);t.has(i)||x7(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:_7(i,r.now)}))}function bD(e,t,r,n,o){for(let s of S7)C7(e,t,r,Si.join(n,s.dirName),s.kind,o)}function RD(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||bD(t,r,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!vD(e.worktreesDir))return t;for(let n of kD(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Si.join(e.worktreesDir,n.name),s;try{s=kD(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Si.join(o,i.name);bD(t,r,e,a,{runId:n.name,worker:i.name})}}return t}var S7,wD=p(()=>{"use strict";S7=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}]});import{existsSync as SD,statSync as E7}from"node:fs";import mr from"node:path";function A7(e,t){try{let r=E7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function I7(e){let t=[],r=null;for(let n of e.split(`
|
|
195
|
-
`)){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 P7(e,t){let r=
|
|
196
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(It(s).length>0)return"dirty_worktree";let i=Z(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=Z(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 DD,LD=p(()=>{"use strict";xe();
|
|
197
|
-
`).map(r=>r.trim()).filter(Boolean)}var z7,ZD=p(()=>{"use strict";z7=5e3});var nf,eM=p(()=>{"use strict";ZD();nf=class{cache=new Map;porcelain(t){let r=t,n=this.cache.get(r);if(n!==void 0)return n;let o=QD(r)??[];return this.cache.set(r,o),o}}});var of,tM=p(()=>{"use strict";On();of=class{cache=new Map;derive(t){let r=this.cache.get(t.id);if(r!==void 0)return r;let n=Po(t);return this.cache.set(t.id,n),n}}});function Q7(e){let t={};for(let r of e)t[r.kind]=(t[r.kind]??0)+1;return t}function rM(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:Q7(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 nM=p(()=>{"use strict"});import Ot from"node:path";function Z7(e={}){let t=e.harnessRoot?We(e.harnessRoot):St(),r=$D({harnessRoot:t}),n=e.now??Date.now();return{harnessRoot:t,scanRoots:r,now:n}}function eQ(e){return typeof e=="string"?{reason:e}:e}function _i(e,t,r,n){e.push({path:t,reason:r,...n?{detail:n}:{}})}function sf(e,t,r){return!t||e.bytes!=null?e:{...e,bytes:rn(e.path,r)}}function oM(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 tQ(e,t){return e.kind==="remove_next_cache"?lD(e,t):aD(e,t)}function rQ(e,t,r){return e.kind==="remove_next_cache"?Xp(e.path,t,r):zp(e.path,t,r)}function nQ(e){let t=new Map;for(let r of e)for(let[n,o]of ED(r))t.set(n,o);return t}function sM(e,t){return e.runId&&e.worker?Ot.join(t,e.runId,e.worker):Ot.resolve(e.path,"..")}function iM(e){return e.indexed?!1:jb({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function oQ(e={}){let t=Kb(e),r=HD();t=jD(t,r);let n=Z7(e);Tt("scan",`${n.scanRoots.length} harness root(s)`);let o=F0(n.scanRoots,n.now),s=t.finalizeStaleRuns?Fl().map(x=>({runId:x.runId,from:x.from,to:x.to})):[];s.length>0&&Tt("finalize",`${s.length} stale run(s) marked terminal`),Tt("index","building worktree index");let i=nQ(n.scanRoots);Tt("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new of,gitStatusCache:new nf,gitRevCache:new rf},l=[],c=[],u=new Set,d=t.maxActionsPerSweep,m=()=>c.length>=d;for(let x of n.scanRoots){if(m())break;Tt("root",x);let O=Ot.join(x,"worktrees"),M=CD(i,x),F={harnessRoot:x,worktreesDir:O,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter,index:M,now:n.now},V=t.scanDependencyCaches?RD(F):[];Tt("dependency",t.scanDependencyCaches?`${V.length} cache candidate(s) at ${x}`:"skipped (worktree-only sweep)");let re=0;for(let B of V){if(m())break;re+=1,re%50===0&&Tt("dependency",`${re}/${V.length} evaluated`);let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=rQ(L,x,O);if(J){_i(l,L.path,J),c.push({...L,executed:!1,skipped:!0,skipReason:J});continue}let ae=sM(L,O),se=M.get(Ot.resolve(ae))??null,Pe=iM({candidate:L,indexed:se,harnessRoot:x,now:n.now}),ee=Nb({indexed:se,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:ae,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(ee){_i(l,L.path,ee),c.push({...L,executed:!1,skipped:!0,skipReason:ee});continue}c.push(tQ(sf(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(t.scanDependencyCaches)for(let B of gD(F)){if(m())break;let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=Qp(L.path,x,O);if(J){_i(l,L.path,J),c.push({...L,executed:!1,skipped:!0,skipReason:J});continue}let ae=sM(L,O),se=M.get(Ot.resolve(ae))??null,Pe=iM({candidate:L,indexed:se,harnessRoot:x,now:n.now}),ee=O0({indexed:se,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:ae,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(ee){_i(l,L.path,ee),c.push({...L,executed:!1,skipped:!0,skipReason:ee});continue}c.push(cD(sf(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}let T=[...hD(F),..._D(F)];Tt("worktrees",`${T.length} candidate(s) at ${x}`);let C=new Set,j=0;for(let B of T){if(m())break;j+=1,j%50===0&&Tt("worktrees",`${j}/${T.length} evaluated`);let E=Ot.resolve(B.path);if(C.has(E))continue;C.add(E);let L={...B,path:E},J=M.get(Ot.resolve(L.path))??null,ae=J?null:MD({worktreePath:L.path,harnessRoot:x,runId:L.runId,workerName:L.worker,now:n.now}),se=T0({indexed:J,worktreePath:Ot.resolve(L.path),includeOrphans:t.includeOrphans,worktreesAgeMs:t.worktreesAgeMs,terminalWorktreesAgeMs:t.terminalWorktreesAgeMs,ageMs:L.ageMs,orphanSafety:ae,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:x,writeSalvageEvidence:t.execute});if(se){let{reason:Pe,detail:ee}=eQ(se);_i(l,L.path,Pe,ee),c.push({...L,executed:!1,skipped:!0,skipReason:Pe});continue}c.push(dD(sf(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(!m()&&t.runDirectoriesAgeMs>=0)for(let B of V0({harnessRoot:x,worktreesDir:O,runDirectoriesAgeMs:t.runDirectoriesAgeMs,runIdFilter:t.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=L.runId??Ot.basename(E),ae=j0({harnessRoot:x,runId:J,runPath:E,ageMs:L.ageMs,runDirectoriesAgeMs:t.runDirectoriesAgeMs,activeGuards:o});if(ae){_i(l,L.path,ae),c.push({...L,executed:!1,skipped:!0,skipReason:ae});continue}c.push(uD(sf(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}}let f=0,g=0,h=0,y=0,v=0,k=0;for(let x of c)x.bytes&&(f+=x.bytes),!x.skipped&&!x.executed&&x.bytes&&(h+=x.bytes),x.executed?(v+=1,y+=x.bytes??0,x.kind==="remove_run_directory"&&(g+=1)):x.skipped&&(k+=1,x.skipReason==="dry_run"&&x.bytes&&(h+=x.bytes));let b=t.accountBytes?FD({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:t.storagePerRunEntryCap}):void 0,S=cs(),w=t.execute&&YD(S),_=w?JD({execute:!0}):null,R=S?{observed:!0,execute:w,dumpCount:S.dumpCount,totalBytes:S.totalBytes,removedCount:_?.removed.length??0,removedBytes:_?.removedBytes??0,executables:S.executables,path:S.path,reason:S.reason}:void 0;_&&_.removed.length>0&&(y+=_.removedBytes,v+=_.removed.length,Tt("wsl-crashes",`removed ${_.removed.length} dump(s), ${_.removedBytes} bytes`)),Tt("complete",`${c.length} action(s), ${k} skipped, ${v} removed`);let P=M0(c,l),N=rM({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:f,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:oM(c,l)},...b?{storage:b}:{},...P.length>0?{preservedLivePaths:P}:{},...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:f,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:oM(c,l)},...b?{storage:b}:{},...P.length>0?{preservedLivePaths:P}:{},...g>0?{removedRunDirectories:g}:{},...R?{wslCrashDumps:R}:{},compactSummary:N}}function aM(e){let t=OD(e);return oQ({execute:t.execute,finalizeStaleRuns:t.finalizeStaleRuns,accountBytes:t.accountBytes,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter})}function lM(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}var cM=p(()=>{"use strict";Wt();N0();L0();G0();pD();yD();wD();xD();AD();On();Hl();ND();LD();UD();KD();Db();VD();qD();Zc();zD();XD();eM();tM();nM()});function uM(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 af(e,t){let r=uM(e),n=uM(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 sQ,aFe,Gb=p(()=>{"use strict";ua();sQ={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},aFe=Object.keys(sQ)});import{readFile as iQ}from"node:fs/promises";import{homedir as aQ}from"node:os";import Ln from"node:path";function xi(e){let t=e?.trim();return t||null}function cQ(e){return[...new Set(e.filter(t=>!!t))]}function dM(){let e=aQ(),t=xi(process.env.KYNVER_OPENCLAW_NPM_ROOT)??xi(process.env.OPENCLAW_NPM_ROOT)??Ln.join(e,".openclaw","npm"),r=xi(process.env.KYNVER_NPM_GLOBAL_ROOT)??xi(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(xi(process.env.NPM_CONFIG_PREFIX)?Ln.join(xi(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Ln.join(e,".npm-global","lib","node_modules"));return cQ([Ln.join(t,"lib","node_modules"),Ln.join(t,"node_modules"),r.endsWith("node_modules")?r:Ln.join(r,"lib","node_modules")])}async function uQ(e){try{let t=JSON.parse(await iQ(e,"utf8"));return typeof t.version=="string"&&t.version.trim()?t.version.trim():null}catch{return null}}function pM(){return dM().map(e=>Ln.join(e,"@kynver-app"))}function Jb(e){let t=dM(),r=new Set,n=[];for(let o of t){let s=Ln.join(o,e,"package.json");r.has(s)||(r.add(s),n.push(s))}return n}async function fM(e=new Date().toISOString()){let t={};for(let r of lQ){let n=null;for(let o of Jb(r)){let s=await uQ(o);s&&(!n||af(s,n.version)>0)&&(n={version:s,path:o})}n&&(t[r]={version:n.version,observedAt:e,path:n.path})}return t}var lQ,Yb=p(()=>{"use strict";Gb();lQ=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"]});import{spawnSync as dQ}from"node:child_process";var pQ,fQ,mM,gM=p(()=>{"use strict";pQ=1e4,fQ=4*1024*1024,mM=(e,t,r)=>{try{let n=dQ(e,t,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:r?.timeoutMs??pQ,maxBuffer:fQ});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 lf(e,t,r){return`${e} ${t} ${r}`}function qb(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 hM(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 cf=p(()=>{"use strict"});function Qb(){return Date.now()<zb}function bQ(e){let t=`${e.stdout}
|
|
198
|
-
${e.stderr}`.toLowerCase();return t.includes("api rate limit exceeded")||t.includes("rate limit exceeded")||t.includes("secondary rate limit")}function yM(e){bQ(e)&&(zb=Math.max(zb,Date.now()+kQ))}function Xb(e,t){if(Qb())return null;let r=e("gh",["api",...t]);if(!r.ok||!r.stdout.trim())return yM(r),null;try{return JSON.parse(r.stdout)}catch{return null}}function vQ(e,t,r,n){if(Qb())return null;let o=e("gh",["pr","view",String(r),"--repo",t,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return yM(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Zb(e){return Qb()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Ci(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function RQ(e){return Array.isArray(e)?e.map(t=>Ci(t)).filter(t=>t!==null).slice(0,gQ).map(t=>({context:t.context??null,state:t.state??null,target_url:t.target_url??null,description:t.description??null})):[]}function wQ(e,t,r){let n=Xb(e,[`repos/${t}/commits/${r}/status`]);return n?{state:n.state??null,statuses:RQ(n.statuses)}:null}var mQ,gQ,hQ,yQ,kQ,zb,kM,bM,vM,RM=p(()=>{"use strict";cf();mQ=8e3,gQ=30,hQ=100,yQ=400,kQ=3600*1e3,zb=0;kM={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Zb,collect(e,t){let r=hM(e);if(!r)return null;let n=vQ(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=Ci(n.author),s=Ci(n.mergeCommit),i=Ci(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,mQ):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Ci(u)).filter(u=>u!==null).slice(0,hQ).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=>Ci(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,yQ):[];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}}},bM={provider:"github",kind:"commit_status",version:"1",isAvailable:Zb,collect(e,t){let r=qb(e);return r?wQ(t,r.repo,r.sha):null}},vM={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Zb,collect(e,t){let r=qb(e);if(!r)return null;let n=Xb(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=Xb(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 ev(e){tv.some(t=>t.provider===e.provider&&t.kind===e.kind)||tv.push(e)}function wM(e,t){return tv.find(r=>r.provider===e&&r.kind===t)??null}function SM(){ev(kM),ev(bM),ev(vM)}var tv,_M=p(()=>{"use strict";RM();tv=[]});function xM(e,t={}){SM();let r=t.run??mM,n=t.now??(()=>new Date),o=t.maxSubjects??SQ,s=Date.now()+(t.deadlineMs??_Q),i=new Set,a=e.filter(f=>{let g=lf(f.provider,f.kind,f.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((f,g)=>a[(l+g)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},m=new Map;for(let f of u){let g=lf(f.provider,f.kind,f.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({...f,reason:"budget_exhausted"});continue}let v=wM(f.provider,f.kind);if(!v){d.skipped.push({...f,reason:"no_recipe"});continue}let k=`${v.provider} ${v.kind}`,b=m.get(k);if(b===void 0&&(b=v.isAvailable(r),m.set(k,b)),!b){d.skipped.push({...f,reason:"provider_unavailable"});continue}if(t.cache?.reserve?.(f,g,n())===!1){d.skipped.push({...f,reason:"budget_exhausted"});continue}d.attempted+=1;let S=v.collect(f.subject,r);if(S==null){d.skipped.push({...f,reason:"collect_failed"});continue}d.collected+=1;let w={provider:f.provider,kind:f.kind,subject:f.subject,payload:S,observedAt:n().toISOString(),collectorVersion:v.version};d.items.push(w),t.cache?.set(g,w,n())}return d}var SQ,_Q,CM=p(()=>{"use strict";gM();_M();cf();SQ=1,_Q=25e3});import EM from"node:path";function AM(e){return EM.join(G(e),xQ)}function AQ(e){return EM.join(G(e),CQ)}function IM(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 PM(e){let t=K(AM(e),null);return IM(t?.wanted)}function TM(e,t){Se(AM(e),{savedAt:new Date().toISOString(),wanted:t})}function OM(e,t={}){let r=t.ttlMs??EQ,n=AQ(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&&(Se(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function NM(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.providerEvidenceWanted;return Array.isArray(t)?IM(t):null}var xQ,CQ,EQ,rv=p(()=>{"use strict";Q();U();cf();xQ="provider-evidence-wanted.json",CQ="provider-evidence-cache.json",EQ=600*1e3});import IQ from"node:path";function nv(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 DQ(){return IQ.join(be().harnessRoot,PQ)}function MQ(e){let t=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),r=e==="github"?OQ:NQ;return nv(`KYNVER_PROVIDER_EVIDENCE_${t}_PER_MINUTE`,nv("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",r))}function DM(){return nv("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",TQ)}function LQ(e){return Math.floor(e.getTime()/6e4)*6e4}function BQ(e){return`${e.provider}:${e.kind}`}function MM(e,t={}){let r=OM(e,{ttlMs:t.ttlMs??DM()}),n=t.file??DQ(),o=K(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=t.ttlMs??DM(),l=!1;return{get(u,d){let m=r.get(u,d);if(m)return m;let f=s[u];if(!f)return null;let g=Date.parse(f.observedAt);return!Number.isFinite(g)||d.getTime()-g>a?(delete s[u],l=!0,null):(r.set(u,f,d),f)},set(u,d,m){r.set(u,d,m),s[u]=d,l=!0},reserve(u,d,m){let f=MQ(u.provider);if(f===0)return!0;let g=BQ(u),h=LQ(m),y=i[g];return!y||y.windowStartMs!==h?(i[g]={windowStartMs:h,used:1},l=!0,!0):y.used>=f?!1:(y.used+=1,l=!0,!0)},flush(){r.flush(),l&&(Se(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}var PQ,TQ,OQ,NQ,LM=p(()=>{"use strict";Q();U();rv();PQ="provider-evidence-shared-cache.json",TQ=6e4,OQ=1,NQ=1});function BM(e){let t=aE(),r=Kr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(r.flags.dispatchReceipts!=="off"){Object.assign(o,NT());let s=OT({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,r.flags.dispatchReceipts==="enforce"&&Object.assign(o,d0())}return r.flags.planOutbox!=="off"&&Object.assign(o,VO()),r.flags.admission!=="off"&&(Object.assign(o,BT()),r.flags.admission==="enforce"&&Object.assign(o,$T())),(r.flags.keeper!=="off"||r.flags.meshLease!=="off"||r.flags.quota!=="off")&&Object.assign(o,kE()),{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 FM=p(()=>{"use strict";Sn();Fs();ii();xb();Dl();Ao();li();Ka()});import{createHash as UM}from"node:crypto";import{access as FQ,mkdir as GFe,readFile as WM,rename as JFe,writeFile as YFe}from"node:fs/promises";import{constants as UQ}from"node:fs";import{homedir as ov}from"node:os";import st from"node:path";function KQ(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||st.join(ov(),".kynver","mcp-installations.json")}function HQ(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||st.join(ov(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||st.join(ov(),".npm-global")}function jQ(e){let t=st.resolve(e);if(st.basename(t)!=="node_modules")return t;let r=st.dirname(t);return st.basename(r)==="lib"?st.dirname(r):r}function VQ(e,t){return[st.join(e,"lib","node_modules",t,"package.json"),st.join(e,"node_modules",t,"package.json")]}async function GQ(e){try{return await FQ(e,UQ.R_OK),!0}catch{return!1}}async function sv(e=KQ()){let t;try{t=JSON.parse(await WM(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||!$Q.test(r.inventoryKey)||!WQ.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 JQ(e,t,r){if(typeof e.bin=="string")return st.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"&&!st.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?st.join(r,s):null}function YQ(e){return UM("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 qQ(e){let t=[];for(let r of e){let n=jQ(HQ(r.prefix)),o=(await Promise.all(VQ(n,r.packageName).map(async f=>({candidate:f,ok:await GQ(f)})))).find(f=>f.ok)?.candidate;if(!o)continue;let s=JSON.parse(await WM(o,"utf8"));if(s.name!==r.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=st.dirname(o),a=JQ(s,r,i),l=r.packageName==="@kynver-app/runtime",c=r.lifecycle??"runtime_stdio",u=UM("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"],m={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:{...m,displayName:r.displayName?.trim()||r.packageName,inventoryFingerprint:YQ(m),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 $M(){return qQ(await sv())}var WQ,$Q,iv=p(()=>{"use strict";WQ=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,$Q=/^[A-Za-z0-9._:-]{8,128}$/});import{createHash as zQ,createHmac as XQ,timingSafeEqual as QQ}from"node:crypto";function av(e){let t=e.trim().split(".");return t.length!==3||t[0]!=="krc1"||!t[1]||!t[2]?null:{tokenId:t[1],tokenHash:zQ("sha256").update(`krc1.${t[1]}.${t[2]}`,"utf8").digest("hex")}}function KM(e,t,r){let n=av(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=XQ("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&QQ(i,s)}var lv=p(()=>{"use strict"});import{createHash as ZQ}from"node:crypto";import{access as cv,mkdtemp as eZ,readFile as JM,rm as tZ}from"node:fs/promises";import{constants as uv}from"node:fs";import{tmpdir as rZ}from"node:os";import Ei from"node:path";import{spawn as nZ}from"node:child_process";import{Client as oZ}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as sZ}from"@modelcontextprotocol/sdk/client/stdio.js";function YM(){return"npm"}function jM(e,t){return Buffer.byteLength(e)>=HM?e:(e+t.toString("utf8")).slice(0,HM)}function aZ(e){let t=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),r=t&&Ei.isAbsolute(t)?t:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:dv,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 qM(e,t,r=pv,n){return new Promise((o,s)=>{let i,a;try{[i,a]=oe(e,t)}catch(f){s(f);return}let l=nZ(i,a,{shell:!1,windowsHide:!0,detached:we(),env:aZ(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",f=>{c=jM(c,f)}),l.stderr.on("data",f=>{u=jM(u,f)});let m=setTimeout(()=>{d=!0,l.pid&&he(l.pid,"SIGKILL")},r);l.once("error",f=>{clearTimeout(m),s(f)}),l.once("close",f=>{clearTimeout(m),d?s(new Error("process_timeout")):o({code:f,stdout:c,stderr:u})})})}function lZ(e,t){let[r,n]=t.split("-",2);return!n||!["sha256","sha384","sha512"].includes(r)?!1:ZQ(r).update(e).digest("base64")===n}async function cZ(e,t,r,n){let o=await qM(YM(),["pack",`${e}@${t}`,"--json","--pack-destination",n,`--registry=${dv}`,"--ignore-scripts"],pv,Ei.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"||Ei.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Ei.join(n,i);if(!lZ(await JM(a),r))throw new Error("artifact_integrity_mismatch");return a}async function uZ(e,t,r){if((await qM(YM(),["install","--global","--prefix",e,t,`--registry=${dv}`,"--no-audit","--fund=false"],pv,r)).code!==0)throw new Error("package_install_failed")}async function zM(e){let t=JSON.parse(await JM(e.local.packageJsonPath,"utf8"));if(t.name!==e.report.packageName||typeof t.version!="string")throw new Error("installed_identity_mismatch");return t.version}function dZ(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 VM(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await cv(e.local.binPath,uv.X_OK).catch(async()=>cv(e.local.binPath,uv.R_OK));let t=new sZ({command:e.local.binPath,args:[],env:dZ(e.local.envAllowlist),stderr:"pipe"}),r=new oZ({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")),iZ)})]);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 GM(e,t,r,n,o){let s=await eZ(Ei.join(rZ(),"kynver-mcp-update-"));try{let i=await cZ(t,r,n,s);if(await o(),await uZ(e.local.prefix,i,Ei.join(s,"npm-cache")),await zM(e)!==r)throw new Error("installed_version_mismatch")}finally{await tZ(s,{recursive:!0,force:!0})}}async function XM(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 cv(e.local.prefix,uv.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await zM(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 GM(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 VM(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 GM(e,t.packageName,t.installedVersion,t.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await VM(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 dv,HM,pv,iZ,QM=p(()=>{"use strict";ns();Te();dv="https://registry.npmjs.org",HM=512*1024,pv=2*6e4,iZ=2e4});import{createHmac as pZ,timingSafeEqual as fZ}from"node:crypto";import{mkdir as mZ,readFile as gZ,rename as hZ,writeFile as yZ}from"node:fs/promises";import{homedir as kZ}from"node:os";import fv from"node:path";function Gl(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||fv.join(kZ(),".kynver","state","mcp-updates")}function ZM(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return fv.join(Gl(),`${e}.json`)}function eL(e,t){let r=av(t);return r?pZ("sha256",Buffer.from(r.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function tL(e,t){try{let r=JSON.parse(await gZ(ZM(e),"utf8"));if(r.version!==2||r.operationId!==e||typeof r.integrityMac!="string")return null;let{integrityMac:n,...o}=r,s=eL(o,t);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!fZ(i,a)?null:r}catch{return null}}async function rL(e,t){let r=eL(e,t);if(!r)throw new Error("invalid_runner_credential_for_receipt");let n=ZM(e.operationId);await mZ(fv.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await yZ(o,`${JSON.stringify({...e,integrityMac:r},null,2)}
|
|
199
|
-
`,{mode:384}),await hZ(o,n)}var uf=p(()=>{"use strict";lv()});import{randomBytes as mv}from"node:crypto";import{mkdir as gv,readFile as hv,rename as bZ,rm as df,stat as vZ,writeFile as nL}from"node:fs/promises";import Bo from"node:path";function oL(){return Bo.join(Gl(),RZ)}async function sL(){try{let e=JSON.parse(await hv(Bo.join(oL(),"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:iL(e.pid)}}catch{return null}}function iL(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function wZ(e){try{return await vZ(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function aL(){return SZ("mcp_update")}async function SZ(e){let t=oL(),r=`${t}.reclaiming`;await gv(Bo.dirname(t),{recursive:!0,mode:448});let n=!1;try{if(await wZ(r))return null;for(let o=0;o<2;o+=1)try{await gv(t,{mode:448});let s={pid:process.pid,nonce:mv(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await nL(Bo.join(t,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await df(r,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await hv(Bo.join(t,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await df(t,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await gv(r,{mode:448}),n=!0,await nL(Bo.join(r,"owner.json"),JSON.stringify({pid:process.pid,nonce:mv(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 hv(Bo.join(t,"owner.json"),"utf8"))}catch{return null}if(iL(i.pid))return null;let a=`${t}.stale-${process.pid}-${mv(8).toString("hex")}`;await bZ(t,a),await df(a,{recursive:!0,force:!0})}return null}finally{n&&await df(r,{recursive:!0,force:!0})}}var RZ,lL=p(()=>{"use strict";uf();RZ="host-mutation.lock"});function pf(e,t,r){return`${e}/api/agent-os/by-id/${encodeURIComponent(t)}/mcp-updates/${r}`}function _Z(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 cL(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 xZ(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 uL(e){let t=ge(e.baseUrl),r=await $M();if(r.length===0)return{ok:!0,stage:"not_configured"};let n=await mo(pf(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 aL();if(!o){let s=await sL();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await mo(pf(t,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=_Z(s.response);if(!i)return{ok:!0,stage:"idle"};if(!KM(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await tL(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||!cL(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let k=r.find(b=>b.report.inventoryKey===i.claims.inventoryKey);if(!k||k.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=k,c=a&&cL(a.recovery,i)?a.recovery:xZ(k,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(k,b,S)=>{await rL({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:k,terminal:b,...S?{outcome:S}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let m="claimed",f=async k=>{if(!(await mo(pf(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");m=k,await d(k,!1)},g=k=>f(k),h=()=>f(m),y;try{y=await XM(l,i.claims,g,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:h,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(k){y={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:k instanceof Error?k.message:"update_failed"}}let v=await mo(pf(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...y});return v.ok?(await d(y.outcome,!0,y.outcome),{ok:y.outcome==="succeeded",stage:"complete",outcome:y.outcome}):{ok:!1,stage:"complete",status:v.status,outcome:y.outcome}}finally{await o.release()}}var dL=p(()=>{"use strict";$();qe();iv();lv();QM();lL();uf()});import pL from"node:path";function CZ(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function EZ(e,t){let r=ie(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(pL.join(G(r.id),"workers",W(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||dn(a))continue;if(fl(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=ue(a);if(!Ve(l))continue;let c=ps({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await mi({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 AZ(e,t,r,n,o){let s=ge(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 fM(),c=Is(t),u=null;try{let w=PM(t);if(w.length>0){let _=MM(t);u=xM(w,{cache:_}),_.flush?.()}else u=null}catch{u=null}try{if(Zr()!=="off"){let w=hs();LT({liveWorkers:w}),WT({liveWorkers:w})}else DT()}catch{}let d=({runId:w,workerName:_})=>{try{let{runsDir:R}=be(),P=pL.join(Br(R,W(w)),"workers",W(_),"worker.json"),N=K(P,null);return N?dn(N):!1}catch{return!1}};await f0({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let m=null;try{m=BM({hasLiveWorker:d})}catch{m=null}let f=null;try{f=Su({control:fn(e),supervisor:tx(),inFlightWorkers:hs().length})}catch{f=null}let g=gd(t),h=fA(),y=await me(a,i,{agentOsId:e,runId:t,ingestHarness:!0,harnessBoardSnapshot:Vk(t),resourceGate:r,boxResourceSnapshot:g0(r,{harnessRunId:t,boxKind:Bt(I())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:$e({runId:t}),activeHarnessWorkers:c,...g?.leaseToken?{meshCronLeaseToken:g.leaseToken}:{},...m?{localRunStore:m}:{},...f?{runtimeControlAck:f}:{},...h?{daemonEventLoop:h}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),v=NM(y.response);if(v)try{TM(t,v)}catch{}let k=cA(y);if(k)try{lA(t,k)}catch{}let b=cE(y);b&&uE(e,b);let S=q_(y);return S&&jg(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 ff(e){let t=String(Lt(String(e.run||""),"--run")),r=String(Lt(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Vk(t);let o=await kd(r,e),s=yd(o),i=wa({runId:t,configuredMaxWorkersOverride:s}),a=lM()?aM(t):void 0,l=await AZ(r,t,i,e,a),c;if(n)try{let x=ge(e.baseUrl?String(e.baseUrl):void 0),O=await ye(e.secret?String(e.secret):void 0,r,{baseUrl:x});c=await uL({agentOsId:r,secret:O,baseUrl:x,activeOwnedSessions:hs().length})}catch(x){c={ok:!1,stage:"cycle",error:x instanceof Error?x.message:"update cycle failed"}}let u=mT(t,l),d=await rP(t,e),m=await EZ(t,e);m.some(x=>x.ok&&!x.skipped)&&HE();let f=wa({runId:t,configuredMaxWorkersOverride:s}),g=Sb(),h=await b0(t,e),y=HN(f,l),v=y.maxStarts,k=fn(r),b=X_(k);b&&(v=0);let S=CZ()?await jp({run:t,agentOsId:r,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},w=null,_=0,R=$N(l),P=v;if(n&&P>0&&R.length>0){let x=Math.min(P,R.length),O=await ub({...e,run:t,agentOsId:r,targetTaskIds:R.join(",")},x),M=bi(O);_+=M,P=Math.max(0,P-M),w={exactTargetTaskIds:R,exact:O,startedCount:_}}if(n&&P>0){let x=await ub({...e,run:t,agentOsId:r},P),O=bi(x);_+=O,w=w&&typeof w=="object"?{...w,broad:x,startedCount:_}:x}else!n||v<=0?w||(w={ok:!0,skipped:!0,reason:b??(n?f.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:y,...R.length?{exactTargetTaskIds:R,exactOnly:!0}:{}}):w&&typeof w=="object"&&(w={...w,broadSkipped:!0,startedCount:_});let N=!y.underutilized&&v===0&&m.length===0&&_===0;return{runId:t,agentOsId:r,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:d,completedWorkers:m,staleReconcile:g,harnessCleanup:a,planProgressSync:h,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:S,dispatchAdvice:y,dispatch:w,idle:N,runtimeControl:k?{desiredState:k.desiredState,policyVersion:k.policyVersion}:null}}var yv=p(()=>{"use strict";mn();Hu();$();qe();WN();KN();jN();_b();ys();Ao();m0();li();h0();fd();Q();Wt();cu();Oe();Cb();U();v0();Zy();gi();ep();gu();yy();$();He();cM();pp();Yb();Wr();CM();LM();rv();py();FM();qh();dL();fy()});function mf(e){return bs(fn(e))!=="stopped"?null:hs().length}var kv=p(()=>{"use strict";ys();mn()});function fL(e){if(!e||typeof e!="object")return!1;let t=e;return t.type==="result"&&typeof t.id=="number"&&typeof t.ok=="boolean"}var mL=p(()=>{"use strict"});import{existsSync as IZ}from"node:fs";import{fileURLToPath as PZ}from"node:url";import{SHARE_ENV as TZ,Worker as OZ}from"node:worker_threads";function DZ(e=import.meta.url){for(let t of[`./${gL}`,`../${gL}`]){let r=new URL(t,e);try{if(IZ(PZ(r)))return r}catch{}}return null}function MZ(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??lt()?{mode:"inline",reason:"desktop_sidecar"}:e.script?{mode:"thread",reason:"default"}:{mode:"inline",reason:"thread_entry_not_built"}}var gL,NZ,LZ,gf,hL=p(()=>{"use strict";Mt();fy();wn();yv();kv();mL();gL="daemon-tick-thread.js",NZ=3;LZ=(e,t)=>new OZ(e,{workerData:t,env:TZ,name:"kynver-pipeline-tick"}),gf=class{constructor(t){this.options=t;this.script=t.script===void 0?DZ():t.script;let r=MZ({env:t.env,desktopMode:t.desktopMode,script:this.script});this.modeValue=r.mode,this.reason=r.reason,this.createWorker=t.createWorker??LZ,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 pA(r),{tick:await ff(t),inFlightWorkers:mf(this.options.agentOsId),isolation:"inline"}}bundleIfChanged(){let t=KC(),r=or(),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(!fL(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>=NZ&&(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 BZ,performance as FZ}from"node:perf_hooks";var UZ,WZ,$Z,KZ,yL,hf,kL=p(()=>{"use strict";UZ=1e3,WZ=250,$Z=5,KZ=5e3,yL=e=>Number.isFinite(e)?Math.round(e/1e6):0,hf=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??UZ,this.sampleIntervalMs=t.sampleIntervalMs??WZ,this.now=t.now??Date.now,this.monotonicNow=t.monotonicNow??t.now??(()=>FZ.now()),this.log=t.log??(r=>console.error(r)),this.histogram=t.histogram??BZ({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>KZ)return this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),null;let s=Math.max(0,Math.round(n-this.sampleIntervalMs)),i=yL(this.histogram.max),a=yL(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(-$Z),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 RL(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 wL(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 vL(e){let t=e?.code;return typeof t=="string"?t:null}function SL(e){if(!e)return!1;if(e instanceof Bn)return HZ.has(e.status);let t=vL(e)??vL(e.cause);if(t&&jZ.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 bv(e){return wL(e)?"aborted":SL(e)?"transient":"server"}function _L(e,t){let r=bv(e);if(r==="aborted")return t<=GZ?0:JZ;if(r==="transient"){let n=Math.max(0,Math.min(t-1,bL.length-1));return bL[n]}return VZ}function xL(e,t){return e==="aborted"&&t<YZ?{event:"chat_claim_poll_retry",level:"info"}:{event:"chat_claim_error",level:"error"}}var Bn,HZ,jZ,VZ,GZ,JZ,bL,yf,YZ,kf=p(()=>{"use strict";Bn=class extends Error{status;constructor(t){super(`claim failed: HTTP ${t}`),this.name="ClaimHttpError",this.status=t}},HZ=new Set([502,503,504]),jZ=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","EHOSTUNREACH","ENETUNREACH","ENETDOWN","UND_ERR_CONNECT_TIMEOUT"]),VZ=5e3,GZ=3,JZ=1e3,bL=[0,1e3,5e3];yf=class{counts={aborted:0,transient:0,server:0,auth:0,recovered:0};streakKind=null;streak=0;onError(t){let r=bv(t);return this.bump(r),{kind:r,consecutive:this.streak,backoffMs:_L(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}},YZ=3});var qZ,zZ,XZ,Ai,vv=p(()=>{"use strict";wt();qZ=5*6e4,zZ=5*6e4,XZ=2160*60*60,Ai=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()>qZ?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<zZ)return;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/runner-credentials`;try{let n=await Ce(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({capabilities:["chat.relay"],ttlSeconds:XZ,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 Ce(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 CL(e=process.env){return e.KYNVER_OPENAI_DEFAULT_MODEL?.trim()||QZ}var QZ,KWe,EL=p(()=>{"use strict";ei();il();Vt();QZ="gpt-5.5",KWe=600*1e3});function gr(e){let t=e.chatProvider?.trim();return Ii(t||e.workerProvider?.trim()||"cursor")}function Ii(e){let t=et(e);return t==="cursor"||t==="agent"?"cursor":tee.has(t)?"gemini":ree.has(t)?"venice":AL.has(t)||AL.has(e.trim().toLowerCase())?"codex":IL.has(t)||IL.has(e.trim().toLowerCase())?"openai":(eee.has(t),"anthropic")}function Fo(e,t,r=process.env){let n=r.KYNVER_CHAT_MODEL?.trim();if(n){if(e==="cursor"){let s=Js(n,Jl);return s.ok?s.model:Jl}if(e==="gemini"&&!Yl.test(n)&&!wv.test(n)||(e==="openai"||e==="codex")&&!Yl.test(n)&&!Rv.test(n)||e==="venice"&&!Yl.test(n)||e==="anthropic")return n}let o=t.defaultModel?.trim();if(e==="cursor"){if(o&&!Yl.test(o)){let s=Js(o,Jl);return s.ok?s.model:Jl}return Jl}return e==="gemini"?o&&Rv.test(o)?o:ze(r):e==="codex"?o&&wv.test(o)?o:r.KYNVER_CODEX_DEFAULT_MODEL?.trim()||ZZ:e==="venice"?o&&!Yl.test(o)&&!Rv.test(o)?o:cr(r):e==="openai"?o&&wv.test(o)?o:CL(r):o||je}var Jl,ZZ,eee,tee,AL,ree,IL,Yl,Rv,wv,Fn=p(()=>{"use strict";go();Vt();ll();EL();ri();Pr();Md();Jl="composer-2.5",ZZ=zs,eee=new Set(["claude","anthropic","opus"]),tee=new Set(["gemini","gemini-api"]),AL=new Set(["codex","chatgpt","gpt"]),ree=new Set(["venice","venice-ai","venice_ai","veniceai"]),IL=new Set(["openai","openai-compatible","openai-api","openai_api"]);Yl=/^(?:claude[-_]|opus\b|sonnet\b|haiku\b)/i,Rv=/^(?:gemini[-_]|flash\b|pro\b)/i,wv=/^(?:gpt-|o\d|chatgpt-)/i});var bf,PL=p(()=>{"use strict";bf=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 nee from"node:os";function Uo(e=process.env){let t=I(),r=Bt(t,e);return Rs({boxKind:r,hostLabel:nee.hostname(),config:t,env:e})}async function oee(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(),TL);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 see(o)}async function see(e){let t=new AbortController,r=setTimeout(()=>t.abort(),TL);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 Sv(e){return ke()?!0:!!e&&!!hn(e)}async function vf(e=process.env){let t=I(),r=t.agentOsId?.trim(),n=ke();if(!r||!Sv(r))return null;let o=await oee(t.apiBaseUrl,n,e);if(!o)return null;let s=gr(t),i=t.apiBaseUrl?.replace(/\/$/,"")??o.replace(/\/$/,"");return{bridgeUrl:o.replace(/\/$/,""),agentOsId:r,apiKey:n??"",boxId:Uo(e),chatProvider:s,model:Fo(s,t,e),useClaudeOauth:t.chatUseClaudeOauth===!0,auth:new Ai({apiBaseUrl:i,agentOsId:r,boxLabel:()=>Uo(e),loadApiKey:ke,loadBoxCredential:()=>hn(r),saveBoxCredential:a=>Fu(r,a),clearBoxCredential:Uu}),security:new bf,apiBaseUrl:i}}var TL,Rf=p(()=>{"use strict";$();He();ws();vv();Fn();PL();TL=5e3});import{verify as iee,createPublicKey as aee}from"node:crypto";function uee(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 OL(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[lee]??null}function dee(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function pee(e,t){let r=Date.parse(e),n=Date.parse(t);return Number.isNaN(r)?!1:Number.isNaN(n)?!0:r>n}function _v(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(!uee(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||!dee(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=co(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(ft(s),"utf8"),d=aee({key:Buffer.concat([cee,Buffer.from(i)]),format:"der",type:"spki"});l=iee(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||!pee(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 u$e,lee,cee,NL=p(()=>{"use strict";yn();Da();u$e=720*60*60,lee="change",cee=Buffer.from("302a300506032b6570032100","hex")});function DL(e){switch(e){case"off":return 0;case"folder":case"folders":return 1;case"full":return 2;default:return 0}}function fee(e,t){let r=DL(e.access),n=DL(t.access);if(r!==n)return r>n;if(r!==1)return!1;let o=new Set(no(t.folders));return no(e.folders).some(s=>!o.has(s))}function mee(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=Ss(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:OL(r)}}function LL(e){let t=mee(e.signedAccess,e.boxId);if(!t)return{ok:!0,website:null,raised:!1};let r=Ss(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:no(e.local.chatWorkFolders)}:{access:Ou(e.engine),folders:[]});let o=n.every(c=>fee(t.level,c)),s=(e.now??(()=>new Date))().toISOString(),i=e.state.website;if(!o){let c=t.change!==null?_v(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:ML(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=_v(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:ML(i)}),l=i?.access??r??Ou(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 ML(e){return!e||!e.changedAt&&!e.nonce?null:{changedAt:e.changedAt,nonce:e.nonce}}var BL=p(()=>{"use strict";NL();oo()});import{existsSync as gee,mkdirSync as hee,readFileSync as yee,writeFileSync as kee}from"node:fs";import{homedir as bee}from"node:os";import xv from"node:path";function Cv(e=bee()){return xv.join(e,vee)}function FL(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Ree(e){return typeof e.access!="string"?null:{access:e.access,folders:FL(e.folders),source:e.source??"default",signed:e.signed===!0,at:typeof e.at=="string"?e.at:""}}function wee(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;if(typeof r.access=="string")return{access:r.access,folders:FL(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 wf(e=Cv()){try{if(!gee(e))return{applied:null,website:null};let t=JSON.parse(yee(e,"utf8"));if(!t||typeof t!="object")return{applied:null,website:null};let r=Ree(t);return{applied:r,website:wee(t.website,r)}}catch{return{applied:null,website:null}}}function UL(e,t){try{hee(xv.dirname(e),{recursive:!0});let r={...t.applied??{},...t.website?{website:t.website}:{}};kee(e,`${JSON.stringify(r,null,2)}
|
|
200
|
-
`,{mode:384})}catch{}}function See(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 WL(e,t={signed:!1}){let r=t.file??Cv(),n=t.now??(()=>new Date),o={access:e.access,folders:[...e.folders],source:e.source,signed:t.signed,at:n().toISOString()},s=
|
|
201
|
-
`,{encoding:"utf8",mode:384}),!0}catch(r){return console.error(JSON.stringify({event:"chat_command_log_write_failed",error:r instanceof Error?r.message:String(r)})),!1}}var Eee,KL,ql=p(()=>{"use strict";Eee=Av.join(".kynver","logs","chat-commands.jsonl"),KL=2e3});function Aee(e){let r=e.chatProvider?.trim()||e.workerProvider?.trim()||"";return et(r)}function Wo(e,t=process.env){return Aee(e)!=="gemini"?"http":ti(Ct(t))==="antigravity"?"antigravity":"http"}var Sf=p(()=>{"use strict";Co();Aa()});import{execFile as Iee,spawnSync as GL}from"node:child_process";import{existsSync as Pee,readFileSync as Tee}from"node:fs";import{homedir as Oee,platform as Nee}from"node:os";import HL from"node:path";function Cf(e,t,r=process.env){return e==="cursor"?"cursor":e==="codex"?"codex":e==="gemini"?Wo(t,r)==="antigravity"?"antigravity":"none":e==="anthropic"?"claude-code":"none"}function Dee(e,t){return e==="cursor"?bo(t):e==="codex"?t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||Yr():e==="antigravity"?Ct(t):e==="claude-code"?t.KYNVER_CLAUDE_BIN?.trim()||t.CLAUDE_BIN?.trim()||"claude":null}function jL(e,t,r){let n=`${t??""} ${r??""}`;return e===0?n.match(Mee)?.[0]??null:null}function Ef(e,t=process.env,r=Date.now()){let n=Dee(e,t);if(!n)return null;let o=_f.get(n);if(o&&r-o.at<JL)return o.version;if(o){if(!xf.has(n)){xf.add(n);try{let[i,a]=oe(n,["--version"]);Iee(i,a,X({encoding:"utf8",timeout:5e3}),(l,c,u)=>{xf.delete(n),_f.set(n,{at:Date.now(),version:l?null:jL(0,c,u)})})}catch{xf.delete(n),_f.set(n,{at:r,version:o.version})}}return o.version}let s=null;try{let[i,a]=oe(n,["--version"]),l=GL(i,a,X({encoding:"utf8",timeout:5e3}));s=jL(l.status,l.stdout,l.stderr)}catch{s=null}return _f.set(n,{at:r,version:s}),s}function Af(e=process.env,t={}){if(e.ANTHROPIC_API_KEY?.trim())return!0;let r=t.home??Oee(),n=t.now??Date.now(),o=VL.get(r);if(o&&n-o.at<JL)return o.signedIn;let s=Lee(HL.join(e.CLAUDE_CONFIG_DIR?.trim()||HL.join(r,".claude"),".credentials.json"));return!s&&(t.os??Nee())==="darwin"&&(s=(t.keychain??Bee)()),VL.set(r,{at:n,signedIn:s}),s}function Lee(e){if(!Pee(e))return!1;try{let t=JSON.parse(Tee(e,"utf8")).claudeAiOauth,r=n=>typeof n=="string"&&n.length>0;return!!t&&(r(t.refreshToken)||r(t.accessToken))}catch{return!1}}function Bee(){try{return GL("security",["find-generic-password","-s","Claude Code-credentials"],{stdio:"ignore",timeout:5e3}).status===0}catch{return!1}}var Mee,JL,_f,xf,VL,zl=p(()=>{"use strict";wo();Ys();Co();Te();U();Sf();Mee=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,JL=10*6e4,_f=new Map,xf=new Set;VL=new Map});import{createHash as Fee,verify as Uee,createPublicKey as Wee}from"node:crypto";function Ov(e){if(!e||typeof e!="object"||Array.isArray(e))return e;let t={...e};return delete t[YL],t}function Kee(e){return Fee("sha256").update(ft(Ov(e)),"utf8").digest("hex")}function Nv(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[YL]??null}function Hee(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 jee(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:ft(r)===ft(t)}function Tv(e,t){return{state:t,firstSeenAt:new Date(e.firstSeenSec*1e3).toISOString(),turnId:e.turnId}}function Vee(e){return Wee({key:Buffer.concat([$ee,Buffer.from(e)]),format:"der",type:"spki"})}function qL(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3),s=Nv(e);if(s===null)return{ok:!1,code:"unsigned",reason:"turn carries no signed envelope"};if(!Hee(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=co(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(ft(i.payload),"utf8");c=Uee(null,d,Vee(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(Kee(e)!==i.payload.payloadHash)return{ok:!1,code:"payload_tampered",reason:"turn payload does not match its signed hash"};if(!jee(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 (${Gee(u.replay)})`,replay:u.replay}}function Gee(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 YL,$ee,If,Pf=p(()=>{"use strict";yn();Da();YL="turnEnvelope",$ee=Buffer.from("302a300506032b6570032100","hex");If=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:Tv(n,"turn_mismatch")}:n.state==="verified"?{ok:!0,redelivered:!0}:{ok:!1,replay:Tv(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:Tv(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 zL(e=process.env,t={}){let r=(e[Jee]??t.chatTurnSignature??"").toString().trim().toLowerCase();return r==="optional"||r==="off"||r==="0"||r==="false"?"optional":"required"}function XL(e,t){return t?`turn_rejected_${e}: ${t}`:`turn_rejected_${e}`}function QL(e,t){if(!(Nv(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:Yee(o)?o:null,signed:!1,userId:null,redelivered:!1}}let n=qL(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 Yee(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.byBox;return!!t&&typeof t=="object"&&!Array.isArray(t)}var Jee,Dv=p(()=>{"use strict";Pf();Jee="KYNVER_CHAT_TURN_SIGNATURE"});function Tf(e){return typeof e=="string"&&qee.test(e.trim())?e.trim():null}function Of(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 rB(e,t){let r=Tf(e);return r?{[ZL]:r,[eB]:t}:{}}var ZL,eB,tB,qee,Xl=p(()=>{"use strict";ZL="KYNVER_CONVERSATION",eB="KYNVER_AGENT_TAB_ENGINE",tB="X-Kynver-Conversation",qee=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});function oB(e){return typeof e=="string"&&zee.includes(e)}function iB(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.kind!=="agent-tab"||!oB(t.engine)||typeof t.sessionKey!="string"||!rte.test(t.sessionKey))return null;let r=typeof t.text=="string"?t.text.slice(0,sB):"",n=[],o=0;if(Array.isArray(t.attachments))for(let u of t.attachments.slice(0,nB)){if(!u||typeof u!="object")continue;let{name:d,mime:m,contentBase64:f}=u;if(!(typeof d!="string"||typeof f!="string")){if(o+=Math.floor(f.length*3/4),o>Zee)break;n.push({name:d.slice(0,200),mime:typeof m=="string"?m.slice(0,100):"application/octet-stream",contentBase64:f})}}let s=nte(t.remoteAttachments,nB-n.length),i=ote(t.control);if(!i&&!r.trim()&&n.length===0&&s.length===0)return null;let a=typeof t.styleNote=="string"?t.styleNote.trim().slice(0,Qee):"",l=typeof t.replyTurnId=="string"&&Xee.test(t.replyTurnId)?t.replyTurnId:null,c=Tf(t.conversationId);return{kind:"agent-tab",engine:t.engine,sessionKey:t.sessionKey,text:r,attachments:n,...s.length>0?{remoteAttachments:s}:{},...t.computerAccess!==void 0?{computerAccess:t.computerAccess}:{},...a?{styleNote:a}:{},...l?{replyTurnId:l}:{},...i?{control:i}:{},...c?{conversationId:c}:{},...t.kynverTools===!1?{kynverTools:!1}:{}}}function nte(e,t){if(!Array.isArray(e)||t<=0)return[];let r=[];for(let n of e.slice(0,t)){if(!n||typeof n!="object")continue;let{name:o,mime:s,fileId:i,size:a}=n;typeof o!="string"||typeof i!="string"||!tte.test(i)||typeof a!="number"||!Number.isSafeInteger(a)||a<=0||a>ete||r.push({name:o.slice(0,200),mime:typeof s=="string"?s.slice(0,100):"application/octet-stream",fileId:i.toLowerCase(),size:a})}return r}function ote(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.op==="stop")return{op:"stop"};if(t.op==="steer"&&typeof t.text=="string"&&t.text.trim())return{op:"steer",text:t.text.slice(0,sB)};if(t.op==="approve"&&typeof t.choice=="string"&&Df.includes(t.choice)){let r=typeof t.approvalId=="string"&&/^[A-Za-z0-9._:-]{1,120}$/.test(t.approvalId)?t.approvalId:void 0;return{op:"approve",choice:t.choice,...r?{approvalId:r}:{}}}return null}var zee,Nf,Xee,Df,sB,Qee,nB,Zee,ete,tte,rte,Ql=p(()=>{"use strict";Xl();zee=["hermes","openclaw","claude-code","grok-bot"],Nf={hermes:"Hermes",openclaw:"OpenClaw","claude-code":"Claude Code","grok-bot":"Grok Bot"};Xee=/^[A-Za-z0-9-]{8,64}$/,Df=["once","session","always","deny"],sB=32e3,Qee=4e3,nB=5,Zee=20*1024*1024,ete=300*1024*1024,tte=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,rte=/^[A-Za-z0-9_.:-]{8,128}$/});import{createHash as ste}from"node:crypto";function ute(e){return`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box`}function dte(e,t,r){let n=e.trim()?e:`${t} finished without writing a reply.`;return r.length>0&&(n+=`
|
|
202
|
-
|
|
203
|
-
_${r.length===1?"A file":`${r.length} files`} couldn't be attached: ${r.join(", ")}._`),n.length>aB?`${n.slice(0,aB-1)}\u2026`:n}function cB(e){let t=e.fetchFn??fetch,r=e.wait??cte,n=e.redactText??(c=>
|
|
204
|
-
`).filter(Boolean)}finally{Rte(t)}}function
|
|
205
|
-
`,{encoding:"utf8",mode:384})}catch{}}function wB(e=bB()){return
|
|
206
|
-
`)||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&&!Kte.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:Ute}:r==="run dispatch"?{ok:!1,mutating:!0,reason:Fte}:Bte.has(r)?{ok:!0,mutating:!1}:Wte.has(r)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}}var Bte,Fte,Ute,Wte,$te,Kte,PB=p(()=>{"use strict";Bte=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list","update check","update status"]),Fte="run dispatch is blocked from runtime_command \u2014 use agent_os_submit_action_intent with kind dispatch_workers (live dispatch requires Action Required approval)",Ute='update finish is internal to `kynver update` \u2014 call ["update"] (confirmed) to update Kynver',Wte=new Set(["run create","run sweep","worker start","worker stop","worker complete","cleanup","update"]),$te=["--secret","--api-key","--keeper-child"],Kte=new Set(["runner-install","node-runtime","local-store","context-envelope","runtime-takeover"])});import{spawn as Hte}from"node:child_process";function Gte(e,t,r,n=process.env){let o=Hx(r,{agentOsId:e,argv:t},n);return o.ok?null:`command authorization proof invalid: ${o.reason}`}async function OB(e,t,r={}){if(r.agentOsId){let a=Gte(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=IB(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=r.cliEntry??process.argv[1],s=r.timeoutMs??jte,i=new
|
|
207
|
-
${r}`)?!1:e===0}function HB(e,t=process.env){try{let[r,n]=oe(e,["models"]),o=cre(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"}:dre(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 ure,jB=p(()=>{"use strict";Te();ure=/authentication required|not logged in|you are not logged|not authenticated/i});import{existsSync as pre,readFileSync as fre}from"node:fs";import{homedir as mre}from"node:os";import VB from"node:path";import{spawnSync as gre}from"node:child_process";function hre(e){if(VB.isAbsolute(e)||e.includes("/")||e.includes("\\"))return pre(e);try{let t=gre(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function yre(){return VB.join(mre(),".gemini","antigravity-cli","settings.json")}function kre(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 bre(){try{return fre(yre(),"utf8")}catch{return null}}function vre(e,t){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()?kre(t)==="gemini":!1}function GB(e){return`${e.error}: ${e.detail}`}function Jf(e=process.env,t={}){let r=Ct(e);if(!(t.commandOnPath??hre)(r))return{ok:!1,error:Vf,detail:"`agy` not found. Install Google Antigravity (https://antigravity.google/docs/cli/install) and keep `agy` on PATH."};if((t.probeAuth??HB)(r,e).ok)return{ok:!0,creds:{bin:r,authSource:"keyring"}};let s=(t.readSettings??(()=>bre()))(e);return vre(e,s)?{ok:!0,creds:{bin:r,authSource:"api_key_settings"}}:{ok:!1,error:Gf,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 Vf,Gf,Yf=p(()=>{"use strict";Co();jB();Vf="antigravity_cli_unavailable",Gf="antigravity_not_logged_in"});function nc(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()||Rre).replace(/\/+$/,"");return{apiKey:t,baseUrl:r,label:"gemini"}}function oc(e=process.env){let t=Kd(e);return t?{apiKey:t,baseUrl:Hd(e),label:"venice"}:null}function sc(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()||wre).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 Rre,wre,Vv=p(()=>{"use strict";ri();Rre="https://generativelanguage.googleapis.com/v1beta/openai",wre="https://api.openai.com/v1"});function _re(e,t=process.env){return{anthropic:()=>{let r=tc(t,{oauthOptIn:e.chatUseClaudeOauth===!0});return r?r.kind==="oauth"?"subscription":"api_key":null},codex:()=>{let r=Hf(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},cursor:()=>{let r=Nd(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},gemini:()=>{let r=t;if(Wo({chatProvider:e.chatProvider,workerProvider:e.workerProvider},r)==="antigravity"){let n=Jf(r);return n.ok?n.creds.authSource==="api_key_settings"?"api_key":"subscription":null}return nc(t)?"api_key":null},openai:()=>sc(t)?"api_key":null,venice:()=>oc(t)?"api_key":null}}function xre(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 Gv(e,t){let r=t?.trim();r&&!e.includes(r)&&e.push(r)}function Cre(e,t,r=process.env){let n=gr(e),o=xre(r.KYNVER_CHAT_EXTRA_MODELS),s=[];for(let i of Jv){let a=null;try{a=t[i]()}catch{a=null}if(!a)continue;let l=i===n?Fo(i,e,r):Fo(i,{},{...r,KYNVER_CHAT_MODEL:void 0}),c=[];Gv(c,l);for(let u of Sre[i])Gv(c,u);for(let u of o)u.provider===i&&Gv(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 Li(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(ic&&ic.key===n&&r-ic.at<Ere)return ic.value;let o=Cre(e,_re(e,t),t);return ic={key:n,at:r,value:o},o}var Jv,Sre,Ere,ic,ac=p(()=>{"use strict";Pr();Hv();jf();qs();Yf();Sf();Vv();Fn();Jv=["anthropic","codex","openai","gemini","venice","cursor"],Sre={anthropic:s_,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"],venice:["venice-uncensored-1-2","qwen-3-6-plus"],cursor:["composer-2.5"]};Ere=6e4,ic=null});function lc(e){if(typeof e=="string"){let n=e.indexOf(":");return n<=0?null:lc({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 YB(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 qB(e,t){for(let r of Jv){if(t.includes(r))continue;let n=e.find(o=>o.provider===r);if(n)return{provider:r,model:n.defaultModel}}return null}function zB(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return t?Are.some(r=>r.test(t)):!1}function JB(e){return Ire[e]}function XB(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 QB(e,t){let r=`${JB(e.provider)} (${e.model})`;if(e.fallbackReason==="usage_limit")return`${t?JB(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 Are,Ire,Yv=p(()=>{"use strict";ac();Fn();Are=[/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/];Ire={anthropic:"Claude",codex:"ChatGPT",openai:"ChatGPT",gemini:"Gemini",venice:"Venice",cursor:"Cursor"}});async function qt(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 qv=p(()=>{"use strict"});function eF(e){if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.type!="string"||!Pre.has(t.type)||t.type==="text"&&(typeof t.text!="string"||!t.text.trim()))}function ZB(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:cc}]}:null;if(!Array.isArray(t.content)||t.content.length===0)return null;let r=t.content[t.content.length-1];return eF(r)?{...t,content:[...t.content.slice(0,-1),{...r,cache_control:cc}]}:null}function Tre(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function Ore(e){for(let t=e.length-1;t>=0;t-=1){let r=e[t];if(!(!r||typeof r!="object"||r.role!=="user")&&!Tre(r.content))return t}return-1}function zv(e){return JSON.stringify(e??null).includes('"cache_control"')}function tF(e){if(zv(e.system)||zv(e.tools)||zv(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:cc},...t.slice(a+1)])}let r=e.system;if(typeof r=="string")r.trim()&&(r=[{type:"text",text:r,cache_control:cc}]);else if(Array.isArray(r)&&r.length>0){let i=r[r.length-1];eF(i)&&(r=[...r.slice(0,-1),{...i,cache_control:cc}])}let n=[...e.messages],o=-1;for(let i=n.length-1;i>=0;i-=1){let a=ZB(n[i]);if(a){n[i]=a,o=i;break}}let s=Ore(n)-1;if(s>=0&&s<o)for(let i=s;i>=0;i-=1){let a=ZB(n[i]);if(a){n[i]=a;break}}return{system:r,tools:t,messages:n}}var cc,Pre,rF=p(()=>{"use strict";cc={type:"ephemeral"},Pre=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 nF(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 Dre(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0}}function Mre(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 Lre(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 Bre(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*Fre(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(`
|
|
208
|
-
`))!==-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 Ure(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function oF(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:Nre},{type:"text",text:n.system}]);let i=tF({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(`${Ure()}/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=Dre();for await(let c of Fre(a.body)){let u=Lre(l,c);u?e.onDelta(u):Mre(c)&&e.onToolProgress?.()}return Bre(l)}var Nre,Xv=p(()=>{"use strict";rF();Nre="You are Claude Code, Anthropic's official CLI for Claude."});function Wre(e){let t=e?.stepTimeoutMs;if(!(typeof t!="number"||!Number.isFinite(t)||t<=0))return Math.min(72e5,Math.max(6e4,Math.round(t)))}function
|
|
193
|
+
`),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 x0(Yp.join(t,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
194
|
+
`),o}var P0=p(()=>{"use strict";xe();U()});import qp from"node:path";function e7(e){e.writeSalvageEvidence&&Z9.has(e.skipReason)&&(rn(e.indexed,e.now)||A0({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||I0({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function t7(e){let{indexed:t,worktreesAgeMs:r,terminalWorktreesAgeMs:n}=e;return t&&(tn.has(t.run.status)||e.liveness&&Tb(t,e.liveness)||e.liveness&&Ve(Pb(t,e.liveness))&&!rn(t))?n:r}function r7(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:t7(e)}function n7(e,t){if(e.harnessRoot?.trim())return qp.resolve(e.harnessRoot);let r=t.worker.workerDir;if(!r)return null;let n=`${qp.sep}runs${qp.sep}`,o=r.indexOf(n);return o<0?null:r.slice(0,o+n.length-1)}function T0(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=r7(e);if(n<=0&&!r&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(rn(t,a))return"active_worker";let c=Pb(t,e.liveness),u=n7(e,t),d=g=>{if(u)try{e7({indexed:t,harnessRoot:u,skipReason:g,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return g};if(S0(t,c)){let g=d("completion_blocked");if(g)return g}if(Ib(t,e.liveness?.gitStatusCache)){let g=d("dirty_worktree");if(g)return g}let m=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(m!=null&&m>0){let g=d("pr_or_unmerged_commits");if(g)return g}if(w0(t,e.liveness,a)||!Ve(c))return"run_still_active";if(Kl(c)){let g=d("pr_or_unmerged_commits");if(g)return g}if(It(c.changedFiles).length>0){let g=d("dirty_worktree");if(g)return g}if(ms({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Mo(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 Nb(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(qp.resolve(o))||t&&rn(t)?"active_worker":t&&Ib(t,e.gitStatusCache)?"dirty_worktree":null}function O0(e){return Nb(e)}var Z9,N0=p(()=>{"use strict";fu();Gp();Oe();Nn();Ob();_0();P0();Do();Hl();Do();Hl();Z9=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"])});var zp=p(()=>{"use strict"});function M0(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)D0.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||D0.has(s.skipReason)&&o(s.path,s.skipReason);return r}var D0,L0=p(()=>{"use strict";zp();D0=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"])});import B0 from"node:path";function s7(e,t){return _i(e,t)}function F0(e,t=Date.now()){let r=new Set,n=new Set;for(let o of e){for(let s of ju(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=K(B0.join(Na(o,s.id),"workers",W(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=B0.resolve(l.worktreePath);s7(l,t)&&(i=!0,r.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of r0(o))n.add(s)}return{activeWorktreePaths:r,liveRunKeys:n}}function U0(e,t,r,n){return r?n.has(`${t}\0${r}`):!1}var Db=p(()=>{"use strict";Q();Wt();Si();Jp();U()});import{existsSync as W0,readdirSync as $0,statSync as i7}from"node:fs";import K0 from"node:path";function a7(e,t){try{let r=i7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function l7(e,t){let r=K0.join(e,"runs",t,"run.json");return W0(r)?K(r,null):null}function H0(e){try{return $0(e).length===0}catch{return!1}}function j0(e){let{harnessRoot:t,runId:r,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(U0(n,t,r,i.liveRunKeys)||!H0(n))return"run_still_active";let a=l7(t,r);return a&&!tn.has(a.status)&&!To(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function V0(e){if(!W0(e.worktreesDir))return[];let t=[],r;try{r=$0(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=K0.join(e.worktreesDir,o);H0(s)&&t.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:a7(s,e.now)})}return t}var G0=p(()=>{"use strict";Db();Nn();U()});import{execFileSync as c7}from"node:child_process";import{existsSync as J0,readdirSync as u7,statSync as d7}from"node:fs";import p7 from"node:path";function m7(e,t=f7){if(!J0(e))return 0;try{let n=c7("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 nn(e,t=5e4){if(!J0(e))return 0;let r=m7(e);if(r!==null)return r;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=u7(i)}catch{continue}for(let l of a){if(o++>t)return null;let c=p7.join(i,l),u;try{u=d7(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}var f7,Vl=p(()=>{"use strict";f7=2500});import{lstatSync as g7,readdirSync as h7}from"node:fs";function Y0(e){try{let t=g7(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 q0(e,t=32){let r=Y0(e);if(!r)return!1;if(r.foreign)return!0;try{let n=h7(e),o=0;for(let s of n){if(o>=t)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Y0(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}var z0=p(()=>{"use strict"});import Pt from"node:path";function X0(e,t,r,n){let o=Pt.resolve(e),s=`${Pt.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Pt.relative(r,i);if(a.startsWith("..")||Pt.isAbsolute(a))return"path_outside_harness";let l=a.split(Pt.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Pt.resolve(t))?"path_outside_harness":null}function Xp(e,t,r){return X0(e,t,r,"node_modules")}function Qp(e,t,r){return X0(e,t,r,".next")}function Zp(e,t,r){let n=Pt.resolve(e),o=Pt.relative(r,n);return o.startsWith("..")||Pt.isAbsolute(o)||o.split(Pt.sep).length<3||!n.startsWith(Pt.resolve(t))?"path_outside_harness":null}function Q0(e,t,r){let n=Pt.resolve(e);return Xp(n,t,r)===null||Qp(n,t,r)===null||Zp(n,t,r)===null}var Mb=p(()=>{"use strict"});import{spawnSync as y7}from"node:child_process";import Z0 from"node:path";function tD(){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 eD(e){let t=y7("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:t.status===0,stderr:`${t.stderr??""}${t.stdout??""}`.trim()}}function rD(e,t,r){if(!Q0(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=eD(["chown","-R",`${n}:${o}`,Z0.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=eD(["rm","-rf",Z0.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 Lb,nD=p(()=>{"use strict";Mb();Lb="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 k7,rmSync as b7}from"node:fs";function v7(e){let t=e?.code;return t==="EACCES"||t==="EPERM"}function oD(e,t,r={}){if(!k7(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?Is(n):null,i=e.bytes??nn(e.path)??void 0,a=r.removePath??b7,l=r.hasForeignOwnedEntry??q0;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!v7(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=tD();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Lb}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let f=rD(e.path,n,o);if(f.ok&&f.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(f.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: ${f.error}; ${Lb}`}}}var sD=p(()=>{"use strict";Vl();Wt();z0();nD()});import{existsSync as Bb,rmSync as iD}from"node:fs";function Fb(e){let t=e.harnessRoot;return!t||!ZN(e.path,t)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ub(e,t){let r=Fb(e);if(r)return r;let n=oD(e,t);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function aD(e,t){return Ub(e,t)}function lD(e,t){return Ub(e,t)}function cD(e,t){return Ub(e,t)}function uD(e,t){let r=Fb(e);if(r)return r;if(!Bb(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??nn(e.path);return iD(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 dD(e,t){let r=Fb(e);if(r)return r;if(!Bb(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??nn(e.path);return n&&pe(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Bb(e.path)&&iD(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 pD=p(()=>{"use strict";xe();Vl();sD();Si();Mb()});import{existsSync as ef,readdirSync as tf,statSync as R7}from"node:fs";import mr from"node:path";function Wb(e,t){try{let r=R7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function mD(e,t){let r=mr.relative(t,e);return r===""||!r.startsWith("..")&&!mr.isAbsolute(r)}function fD(e,t,r,n){let o=[];for(let s of Eb){if(s===".next")continue;let i=mr.join(e,s);if(!ef(i))continue;let a=mr.resolve(i);r.has(a)||mD(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:Wb(a,t.now)}))}return o}function gD(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||t.push(...fD(n.worktreePath,e,r,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ef(e.worktreesDir))return t;for(let n of tf(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=mr.join(e.worktreesDir,n.name);for(let s of tf(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=mr.join(o,s.name);t.push(...fD(i,e,r,{runId:n.name,worker:s.name}))}}return t}function hD(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;ef(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:Wb(a,e.now)})))}if(!r||!ef(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(mr.resolve(i.worktreePath));for(let i of tf(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=mr.join(e.worktreesDir,i.name),l;try{l=tf(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=mr.resolve(mr.join(a,c.name));o.has(u)||s.has(u)||mD(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Wb(u,e.now)}))}}return n}var yD=p(()=>{"use strict";Ab()});import{existsSync as vD,readdirSync as kD,statSync as w7}from"node:fs";import xi from"node:path";function _7(e,t){try{let r=w7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function x7(e,t){let r=xi.relative(t,e);return r===""||!r.startsWith("..")&&!xi.isAbsolute(r)}function C7(e,t,r,n,o,s){if(!vD(n))return;let i=xi.resolve(n);t.has(i)||x7(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:_7(i,r.now)}))}function bD(e,t,r,n,o){for(let s of S7)C7(e,t,r,xi.join(n,s.dirName),s.kind,o)}function RD(e){let t=[],r=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||bD(t,r,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!vD(e.worktreesDir))return t;for(let n of kD(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=xi.join(e.worktreesDir,n.name),s;try{s=kD(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=xi.join(o,i.name);bD(t,r,e,a,{runId:n.name,worker:i.name})}}return t}var S7,wD=p(()=>{"use strict";S7=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}]});import{existsSync as SD,statSync as E7}from"node:fs";import gr from"node:path";function A7(e,t){try{let r=E7(e).mtimeMs;return Math.max(0,t-r)}catch{return 0}}function I7(e){let t=[],r=null;for(let n of e.split(`
|
|
195
|
+
`)){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 P7(e,t){let r=gr.relative(gr.resolve(t),gr.resolve(e));return r!==""&&!r.startsWith("..")&&!gr.isAbsolute(r)}function _D(e){if(!e.includeOrphans||!SD(e.worktreesDir))return[];let t=new Set;for(let s of e.index.values())s.run.repo&&t.add(gr.resolve(s.run.repo));let r=new Set;for(let s of e.index.values())r.add(gr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of t){let i=0,a;try{a=pe(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=I7(a);for(let c of l){if(i>=T7)break;let u=gr.resolve(c.path);if(u===gr.resolve(s)||!P7(u,e.worktreesDir)||r.has(u)||o.has(u)||!SD(u))continue;let m=gr.relative(e.worktreesDir,u).split(gr.sep),f=m[0],g=m[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:f,worker:g,repo:s,ageMs:A7(u,e.now)})}}return n}var T7,xD=p(()=>{"use strict";xe();T7=200});import Gl from"node:path";function CD(e,t){let r=Gl.resolve(t),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Gl.resolve(s.harnessRoot):null;i&&i!==r||n.set(o,s)}return n}function ED(e){let t=new Map;for(let r of ju(e))for(let n of Object.keys(r.workers||{})){let o=Gl.join(Na(e,r.id),"workers",W(n),"worker.json"),s=K(o,void 0);s?.worktreePath&&t.set(Gl.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Gl.resolve(s.worktreePath),runId:r.id,workerName:n,run:r,worker:s})}return t}var AD=p(()=>{"use strict";Q();U()});function Jl(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function Lo(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)&&n>=0?n:t}function Kb(e={}){let t=e.execute===!0||e.execute!==!1&&Jl("KYNVER_CLEANUP_EXECUTE"),r=e.finalizeStaleRuns!==!1&&!Jl("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Lo("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??Lo("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Lo("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Lo("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Lo("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Jl("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Jl("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),m=e.accountBytes!==!1&&!Jl("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),f=Lo("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),g=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:m&&f>0?f:null,h=Lo("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),y=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):2e3);return{execute:t,finalizeStaleRuns:r,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:m,storagePerRunEntryCap:g,byteAccountingEntryCap:y}}function OD(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 Kb({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 ND=p(()=>{"use strict";zp()});import{existsSync as Hb,statSync as N7}from"node:fs";import Bo from"node:path";function D7(e,t){let r=Bo.relative(t,e);return r===""||!r.startsWith("..")&&!Bo.isAbsolute(r)}function M7(e,t,r){if(!Hb(e))return!1;try{let n=t-N7(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<r}catch{return!1}}function jb(e){if(!e.runId||!e.workerName)return!1;let t=e.now??Date.now(),r=e.heartbeatFreshMs??DD,n=Bo.resolve(e.harnessRoot,"runs"),o=Bo.resolve(n,e.runId,"workers",e.workerName);if(!D7(o,n))return!1;let s=K(Bo.join(o,"worker.json"),void 0);return s&&_i(s,t,r)?!0:s?!1:M7(Bo.join(o,"heartbeat.jsonl"),t,r)}function MD(e){let t=e.now??Date.now(),r=e.heartbeatFreshMs??DD;if(!Hb(e.worktreePath))return null;if(e.runId&&e.workerName&&jb(e))return"active_worker";let n=Bo.join(e.worktreePath,".git");if(!Hb(n))return null;let o=Z(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
196
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(It(s).length>0)return"dirty_worktree";let i=Z(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=Z(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 DD,LD=p(()=>{"use strict";xe();Do();Jp();U();DD=1800*1e3});import{existsSync as L7,readdirSync as BD,statSync as B7}from"node:fs";import F7 from"node:path";function FD(e={}){let t=We(e.harnessRoot??St()),r=Is(t),n=e.now??Date.now(),o=new Date(n).toISOString();if(!L7(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=BD(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=F7.join(r,u.name);try{let m=B7(d);l=l===null?m.mtimeMs:Math.min(l,m.mtimeMs)}catch{}try{for(let m of BD(d,{withFileTypes:!0}))m.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let m=e.perRunEntryCap??5e4;if(m<=0)s=null;else{let f=nn(d,m);f===null?s=null:s+=f}}}return{harnessRoot:t,worktreesDir:r,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}var UD=p(()=>{"use strict";Wt();Vl()});import{existsSync as U7}from"node:fs";import{homedir as W7}from"node:os";import WD from"node:path";function Vb(e,t,r){if(!r?.trim())return;let n=We(r.trim());e.has(n)||(e.add(n),t.push(n))}function K7(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 $D(e={}){let t=new Set,r=[];Vb(t,r,e.harnessRoot??St());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Vb(t,r,o);if(K7(e))for(let o of $7){let s=WD.resolve(o);!t.has(s)&&U7(s)&&Vb(t,r,s)}return r}var $7,KD=p(()=>{"use strict";Wt();$7=["/var/tmp/kynver-harness",WD.join(W7(),".openclaw","harness")]});function H7(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function j7(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function HD(e={}){let t=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",r=j7("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=cn({...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 jD(e,t){if(!t.pressured)return e;let r=e.execute||!H7("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 VD=p(()=>{"use strict";ha();zp()});import{unlinkSync as V7}from"node:fs";function rf(e){let t=process.env[e];return t==="1"||t==="true"||t==="yes"}function GD(e,t){let r=process.env[e];if(!r)return t;let n=Number(r);return Number.isFinite(n)?n:t}function G7(e,t,r){return e.length===0?[]:r?[...e]:e.length<=t?[]:e.slice(t)}function JD(e={}){let t=e.execute===!0||rf("KYNVER_WSL_CRASH_DUMP_EXECUTE")||rf("KYNVER_CLEANUP_EXECUTE"),r=e.purgeAll===!0||rf("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??GD("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",r?0:1)),o=us({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=G7(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{V7(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 YD(e){return e?rf("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>GD("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}var qD=p(()=>{"use strict";tu()});function Tt(e,t){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let r=t?`: ${t}`:"";console.error(`[kynver cleanup] ${e}${r}`)}var zD=p(()=>{"use strict"});var nf,XD=p(()=>{"use strict";xe();nf=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=Z(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 J7}from"node:child_process";import{existsSync as Y7}from"node:fs";import q7 from"node:path";function X7(e,t){if(!Y7(q7.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let r=J7("git",t,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:z7}),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 QD(e){let t=X7(e,["status","--short"]);return t.error==="not_a_git_repo"?[]:t.error==="git_timeout"||t.status!==0?null:t.stdout.split(`
|
|
197
|
+
`).map(r=>r.trim()).filter(Boolean)}var z7,ZD=p(()=>{"use strict";z7=5e3});var of,eM=p(()=>{"use strict";ZD();of=class{cache=new Map;porcelain(t){let r=t,n=this.cache.get(r);if(n!==void 0)return n;let o=QD(r)??[];return this.cache.set(r,o),o}}});var sf,tM=p(()=>{"use strict";Nn();sf=class{cache=new Map;derive(t){let r=this.cache.get(t.id);if(r!==void 0)return r;let n=To(t);return this.cache.set(t.id,n),n}}});function Q7(e){let t={};for(let r of e)t[r.kind]=(t[r.kind]??0)+1;return t}function rM(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:Q7(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 nM=p(()=>{"use strict"});import Ot from"node:path";function Z7(e={}){let t=e.harnessRoot?We(e.harnessRoot):St(),r=$D({harnessRoot:t}),n=e.now??Date.now();return{harnessRoot:t,scanRoots:r,now:n}}function eQ(e){return typeof e=="string"?{reason:e}:e}function Ci(e,t,r,n){e.push({path:t,reason:r,...n?{detail:n}:{}})}function af(e,t,r){return!t||e.bytes!=null?e:{...e,bytes:nn(e.path,r)}}function oM(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 tQ(e,t){return e.kind==="remove_next_cache"?lD(e,t):aD(e,t)}function rQ(e,t,r){return e.kind==="remove_next_cache"?Qp(e.path,t,r):Xp(e.path,t,r)}function nQ(e){let t=new Map;for(let r of e)for(let[n,o]of ED(r))t.set(n,o);return t}function sM(e,t){return e.runId&&e.worker?Ot.join(t,e.runId,e.worker):Ot.resolve(e.path,"..")}function iM(e){return e.indexed?!1:jb({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function oQ(e={}){let t=Kb(e),r=HD();t=jD(t,r);let n=Z7(e);Tt("scan",`${n.scanRoots.length} harness root(s)`);let o=F0(n.scanRoots,n.now),s=t.finalizeStaleRuns?Wl().map(x=>({runId:x.runId,from:x.from,to:x.to})):[];s.length>0&&Tt("finalize",`${s.length} stale run(s) marked terminal`),Tt("index","building worktree index");let i=nQ(n.scanRoots);Tt("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new sf,gitStatusCache:new of,gitRevCache:new nf},l=[],c=[],u=new Set,d=t.maxActionsPerSweep,m=()=>c.length>=d;for(let x of n.scanRoots){if(m())break;Tt("root",x);let O=Ot.join(x,"worktrees"),M=CD(i,x),F={harnessRoot:x,worktreesDir:O,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter,index:M,now:n.now},V=t.scanDependencyCaches?RD(F):[];Tt("dependency",t.scanDependencyCaches?`${V.length} cache candidate(s) at ${x}`:"skipped (worktree-only sweep)");let re=0;for(let B of V){if(m())break;re+=1,re%50===0&&Tt("dependency",`${re}/${V.length} evaluated`);let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=rQ(L,x,O);if(J){Ci(l,L.path,J),c.push({...L,executed:!1,skipped:!0,skipReason:J});continue}let ae=sM(L,O),se=M.get(Ot.resolve(ae))??null,Pe=iM({candidate:L,indexed:se,harnessRoot:x,now:n.now}),ee=Nb({indexed:se,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:ae,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(ee){Ci(l,L.path,ee),c.push({...L,executed:!1,skipped:!0,skipReason:ee});continue}c.push(tQ(af(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(t.scanDependencyCaches)for(let B of gD(F)){if(m())break;let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=Zp(L.path,x,O);if(J){Ci(l,L.path,J),c.push({...L,executed:!1,skipped:!0,skipReason:J});continue}let ae=sM(L,O),se=M.get(Ot.resolve(ae))??null,Pe=iM({candidate:L,indexed:se,harnessRoot:x,now:n.now}),ee=O0({indexed:se,includeOrphans:!0,nodeModulesAgeMs:t.nodeModulesAgeMs,ageMs:L.ageMs,worktreePath:ae,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Pe,diskPressure:t.diskPressure,gitStatusCache:a.gitStatusCache});if(ee){Ci(l,L.path,ee),c.push({...L,executed:!1,skipped:!0,skipReason:ee});continue}c.push(cD(af(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}let T=[...hD(F),..._D(F)];Tt("worktrees",`${T.length} candidate(s) at ${x}`);let C=new Set,j=0;for(let B of T){if(m())break;j+=1,j%50===0&&Tt("worktrees",`${j}/${T.length} evaluated`);let E=Ot.resolve(B.path);if(C.has(E))continue;C.add(E);let L={...B,path:E},J=M.get(Ot.resolve(L.path))??null,ae=J?null:MD({worktreePath:L.path,harnessRoot:x,runId:L.runId,workerName:L.worker,now:n.now}),se=T0({indexed:J,worktreePath:Ot.resolve(L.path),includeOrphans:t.includeOrphans,worktreesAgeMs:t.worktreesAgeMs,terminalWorktreesAgeMs:t.terminalWorktreesAgeMs,ageMs:L.ageMs,orphanSafety:ae,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:x,writeSalvageEvidence:t.execute});if(se){let{reason:Pe,detail:ee}=eQ(se);Ci(l,L.path,Pe,ee),c.push({...L,executed:!1,skipped:!0,skipReason:Pe});continue}c.push(dD(af(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}if(!m()&&t.runDirectoriesAgeMs>=0)for(let B of V0({harnessRoot:x,worktreesDir:O,runDirectoriesAgeMs:t.runDirectoriesAgeMs,runIdFilter:t.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let E=Ot.resolve(B.path);if(u.has(E))continue;u.add(E);let L={...B,path:E},J=L.runId??Ot.basename(E),ae=j0({harnessRoot:x,runId:J,runPath:E,ageMs:L.ageMs,runDirectoriesAgeMs:t.runDirectoriesAgeMs,activeGuards:o});if(ae){Ci(l,L.path,ae),c.push({...L,executed:!1,skipped:!0,skipReason:ae});continue}c.push(uD(af(L,t.accountBytes,t.byteAccountingEntryCap),t.execute))}}let f=0,g=0,h=0,y=0,v=0,k=0;for(let x of c)x.bytes&&(f+=x.bytes),!x.skipped&&!x.executed&&x.bytes&&(h+=x.bytes),x.executed?(v+=1,y+=x.bytes??0,x.kind==="remove_run_directory"&&(g+=1)):x.skipped&&(k+=1,x.skipReason==="dry_run"&&x.bytes&&(h+=x.bytes));let b=t.accountBytes?FD({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:t.storagePerRunEntryCap}):void 0,S=us(),w=t.execute&&YD(S),_=w?JD({execute:!0}):null,R=S?{observed:!0,execute:w,dumpCount:S.dumpCount,totalBytes:S.totalBytes,removedCount:_?.removed.length??0,removedBytes:_?.removedBytes??0,executables:S.executables,path:S.path,reason:S.reason}:void 0;_&&_.removed.length>0&&(y+=_.removedBytes,v+=_.removed.length,Tt("wsl-crashes",`removed ${_.removed.length} dump(s), ${_.removedBytes} bytes`)),Tt("complete",`${c.length} action(s), ${k} skipped, ${v} removed`);let P=M0(c,l),N=rM({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:f,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:oM(c,l)},...b?{storage:b}:{},...P.length>0?{preservedLivePaths:P}:{},...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:f,reclaimableBytes:h,removedBytes:y,removedPaths:v,skippedPaths:k,skipReasons:oM(c,l)},...b?{storage:b}:{},...P.length>0?{preservedLivePaths:P}:{},...g>0?{removedRunDirectories:g}:{},...R?{wslCrashDumps:R}:{},compactSummary:N}}function aM(e){let t=OD(e);return oQ({execute:t.execute,finalizeStaleRuns:t.finalizeStaleRuns,accountBytes:t.accountBytes,nodeModulesAgeMs:t.nodeModulesAgeMs,worktreesAgeMs:t.worktreesAgeMs,includeOrphans:t.includeOrphans,runIdFilter:t.runIdFilter})}function lM(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}var cM=p(()=>{"use strict";Wt();N0();L0();G0();pD();yD();wD();xD();AD();Nn();Vl();ND();LD();UD();KD();Db();VD();qD();tu();zD();XD();eM();tM();nM()});function uM(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 lf(e,t){let r=uM(e),n=uM(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 sQ,uFe,Gb=p(()=>{"use strict";pa();sQ={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},uFe=Object.keys(sQ)});import{readFile as iQ}from"node:fs/promises";import{homedir as aQ}from"node:os";import Bn from"node:path";function Ei(e){let t=e?.trim();return t||null}function cQ(e){return[...new Set(e.filter(t=>!!t))]}function dM(){let e=aQ(),t=Ei(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Ei(process.env.OPENCLAW_NPM_ROOT)??Bn.join(e,".openclaw","npm"),r=Ei(process.env.KYNVER_NPM_GLOBAL_ROOT)??Ei(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Ei(process.env.NPM_CONFIG_PREFIX)?Bn.join(Ei(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Bn.join(e,".npm-global","lib","node_modules"));return cQ([Bn.join(t,"lib","node_modules"),Bn.join(t,"node_modules"),r.endsWith("node_modules")?r:Bn.join(r,"lib","node_modules")])}async function uQ(e){try{let t=JSON.parse(await iQ(e,"utf8"));return typeof t.version=="string"&&t.version.trim()?t.version.trim():null}catch{return null}}function pM(){return dM().map(e=>Bn.join(e,"@kynver-app"))}function Jb(e){let t=dM(),r=new Set,n=[];for(let o of t){let s=Bn.join(o,e,"package.json");r.has(s)||(r.add(s),n.push(s))}return n}async function fM(e=new Date().toISOString()){let t={};for(let r of lQ){let n=null;for(let o of Jb(r)){let s=await uQ(o);s&&(!n||lf(s,n.version)>0)&&(n={version:s,path:o})}n&&(t[r]={version:n.version,observedAt:e,path:n.path})}return t}var lQ,Yb=p(()=>{"use strict";Gb();lQ=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"]});import{spawnSync as dQ}from"node:child_process";var pQ,fQ,mM,gM=p(()=>{"use strict";pQ=1e4,fQ=4*1024*1024,mM=(e,t,r)=>{try{let n=dQ(e,t,{windowsHide:!0,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:r?.timeoutMs??pQ,maxBuffer:fQ});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 cf(e,t,r){return`${e} ${t} ${r}`}function qb(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 hM(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 uf=p(()=>{"use strict"});function Qb(){return Date.now()<zb}function bQ(e){let t=`${e.stdout}
|
|
198
|
+
${e.stderr}`.toLowerCase();return t.includes("api rate limit exceeded")||t.includes("rate limit exceeded")||t.includes("secondary rate limit")}function yM(e){bQ(e)&&(zb=Math.max(zb,Date.now()+kQ))}function Xb(e,t){if(Qb())return null;let r=e("gh",["api",...t]);if(!r.ok||!r.stdout.trim())return yM(r),null;try{return JSON.parse(r.stdout)}catch{return null}}function vQ(e,t,r,n){if(Qb())return null;let o=e("gh",["pr","view",String(r),"--repo",t,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return yM(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function Zb(e){return Qb()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function Ai(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function RQ(e){return Array.isArray(e)?e.map(t=>Ai(t)).filter(t=>t!==null).slice(0,gQ).map(t=>({context:t.context??null,state:t.state??null,target_url:t.target_url??null,description:t.description??null})):[]}function wQ(e,t,r){let n=Xb(e,[`repos/${t}/commits/${r}/status`]);return n?{state:n.state??null,statuses:RQ(n.statuses)}:null}var mQ,gQ,hQ,yQ,kQ,zb,kM,bM,vM,RM=p(()=>{"use strict";uf();mQ=8e3,gQ=30,hQ=100,yQ=400,kQ=3600*1e3,zb=0;kM={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:Zb,collect(e,t){let r=hM(e);if(!r)return null;let n=vQ(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=Ai(n.author),s=Ai(n.mergeCommit),i=Ai(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,mQ):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>Ai(u)).filter(u=>u!==null).slice(0,hQ).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=>Ai(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,yQ):[];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}}},bM={provider:"github",kind:"commit_status",version:"1",isAvailable:Zb,collect(e,t){let r=qb(e);return r?wQ(t,r.repo,r.sha):null}},vM={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Zb,collect(e,t){let r=qb(e);if(!r)return null;let n=Xb(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=Xb(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 ev(e){tv.some(t=>t.provider===e.provider&&t.kind===e.kind)||tv.push(e)}function wM(e,t){return tv.find(r=>r.provider===e&&r.kind===t)??null}function SM(){ev(kM),ev(bM),ev(vM)}var tv,_M=p(()=>{"use strict";RM();tv=[]});function xM(e,t={}){SM();let r=t.run??mM,n=t.now??(()=>new Date),o=t.maxSubjects??SQ,s=Date.now()+(t.deadlineMs??_Q),i=new Set,a=e.filter(f=>{let g=cf(f.provider,f.kind,f.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((f,g)=>a[(l+g)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},m=new Map;for(let f of u){let g=cf(f.provider,f.kind,f.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({...f,reason:"budget_exhausted"});continue}let v=wM(f.provider,f.kind);if(!v){d.skipped.push({...f,reason:"no_recipe"});continue}let k=`${v.provider} ${v.kind}`,b=m.get(k);if(b===void 0&&(b=v.isAvailable(r),m.set(k,b)),!b){d.skipped.push({...f,reason:"provider_unavailable"});continue}if(t.cache?.reserve?.(f,g,n())===!1){d.skipped.push({...f,reason:"budget_exhausted"});continue}d.attempted+=1;let S=v.collect(f.subject,r);if(S==null){d.skipped.push({...f,reason:"collect_failed"});continue}d.collected+=1;let w={provider:f.provider,kind:f.kind,subject:f.subject,payload:S,observedAt:n().toISOString(),collectorVersion:v.version};d.items.push(w),t.cache?.set(g,w,n())}return d}var SQ,_Q,CM=p(()=>{"use strict";gM();_M();uf();SQ=1,_Q=25e3});import EM from"node:path";function AM(e){return EM.join(G(e),xQ)}function AQ(e){return EM.join(G(e),CQ)}function IM(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 PM(e){let t=K(AM(e),null);return IM(t?.wanted)}function TM(e,t){Se(AM(e),{savedAt:new Date().toISOString(),wanted:t})}function OM(e,t={}){let r=t.ttlMs??EQ,n=AQ(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&&(Se(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function NM(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.providerEvidenceWanted;return Array.isArray(t)?IM(t):null}var xQ,CQ,EQ,rv=p(()=>{"use strict";Q();U();uf();xQ="provider-evidence-wanted.json",CQ="provider-evidence-cache.json",EQ=600*1e3});import IQ from"node:path";function nv(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 DQ(){return IQ.join(be().harnessRoot,PQ)}function MQ(e){let t=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),r=e==="github"?OQ:NQ;return nv(`KYNVER_PROVIDER_EVIDENCE_${t}_PER_MINUTE`,nv("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",r))}function DM(){return nv("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",TQ)}function LQ(e){return Math.floor(e.getTime()/6e4)*6e4}function BQ(e){return`${e.provider}:${e.kind}`}function MM(e,t={}){let r=OM(e,{ttlMs:t.ttlMs??DM()}),n=t.file??DQ(),o=K(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=t.ttlMs??DM(),l=!1;return{get(u,d){let m=r.get(u,d);if(m)return m;let f=s[u];if(!f)return null;let g=Date.parse(f.observedAt);return!Number.isFinite(g)||d.getTime()-g>a?(delete s[u],l=!0,null):(r.set(u,f,d),f)},set(u,d,m){r.set(u,d,m),s[u]=d,l=!0},reserve(u,d,m){let f=MQ(u.provider);if(f===0)return!0;let g=BQ(u),h=LQ(m),y=i[g];return!y||y.windowStartMs!==h?(i[g]={windowStartMs:h,used:1},l=!0,!0):y.used>=f?!1:(y.used+=1,l=!0,!0)},flush(){r.flush(),l&&(Se(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}var PQ,TQ,OQ,NQ,LM=p(()=>{"use strict";Q();U();rv();PQ="provider-evidence-shared-cache.json",TQ=6e4,OQ=1,NQ=1});function BM(e){let t=aE(),r=Hr(e?.env??process.env),n=(e?.now??(()=>new Date))().getTime(),o={};if(r.flags.dispatchReceipts!=="off"){Object.assign(o,NT());let s=OT({nowMs:n,hasLiveWorker:e?.hasLiveWorker});o["dispatchReceipts.strandedClaimCandidates"]=s.strandedClaimCandidates,r.flags.dispatchReceipts==="enforce"&&Object.assign(o,d0())}return r.flags.planOutbox!=="off"&&Object.assign(o,VO()),r.flags.admission!=="off"&&(Object.assign(o,BT()),r.flags.admission==="enforce"&&Object.assign(o,$T())),(r.flags.keeper!=="off"||r.flags.meshLease!=="off"||r.flags.quota!=="off")&&Object.assign(o,kE()),{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 FM=p(()=>{"use strict";_n();Us();li();xb();Ll();Io();ui();ja()});import{createHash as UM}from"node:crypto";import{access as FQ,mkdir as qFe,readFile as WM,rename as zFe,writeFile as XFe}from"node:fs/promises";import{constants as UQ}from"node:fs";import{homedir as ov}from"node:os";import st from"node:path";function KQ(){return process.env.KYNVER_MCP_UPDATE_INVENTORY_FILE?.trim()||st.join(ov(),".kynver","mcp-installations.json")}function HQ(e){return e==="openclaw"?process.env.KYNVER_OPENCLAW_NPM_ROOT?.trim()||st.join(ov(),".openclaw","npm"):process.env.KYNVER_NPM_GLOBAL_ROOT?.trim()||process.env.NPM_CONFIG_PREFIX?.trim()||st.join(ov(),".npm-global")}function jQ(e){let t=st.resolve(e);if(st.basename(t)!=="node_modules")return t;let r=st.dirname(t);return st.basename(r)==="lib"?st.dirname(r):r}function VQ(e,t){return[st.join(e,"lib","node_modules",t,"package.json"),st.join(e,"node_modules",t,"package.json")]}async function GQ(e){try{return await FQ(e,UQ.R_OK),!0}catch{return!1}}async function sv(e=KQ()){let t;try{t=JSON.parse(await WM(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||!$Q.test(r.inventoryKey)||!WQ.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 JQ(e,t,r){if(typeof e.bin=="string")return st.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"&&!st.isAbsolute(s)&&!s.split(/[\\/]/).includes("..")?st.join(r,s):null}function YQ(e){return UM("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 qQ(e){let t=[];for(let r of e){let n=jQ(HQ(r.prefix)),o=(await Promise.all(VQ(n,r.packageName).map(async f=>({candidate:f,ok:await GQ(f)})))).find(f=>f.ok)?.candidate;if(!o)continue;let s=JSON.parse(await WM(o,"utf8"));if(s.name!==r.packageName||typeof s.version!="string"||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(s.version))continue;let i=st.dirname(o),a=JQ(s,r,i),l=r.packageName==="@kynver-app/runtime",c=r.lifecycle??"runtime_stdio",u=UM("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"],m={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:{...m,displayName:r.displayName?.trim()||r.packageName,inventoryFingerprint:YQ(m),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 $M(){return qQ(await sv())}var WQ,$Q,iv=p(()=>{"use strict";WQ=/^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/i,$Q=/^[A-Za-z0-9._:-]{8,128}$/});import{createHash as zQ,createHmac as XQ,timingSafeEqual as QQ}from"node:crypto";function av(e){let t=e.trim().split(".");return t.length!==3||t[0]!=="krc1"||!t[1]||!t[2]?null:{tokenId:t[1],tokenHash:zQ("sha256").update(`krc1.${t[1]}.${t[2]}`,"utf8").digest("hex")}}function KM(e,t,r){let n=av(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=XQ("sha256",Buffer.from(n.tokenHash,"hex")).update(JSON.stringify(e.claims),"utf8").digest(),i=Buffer.from(e.signature,"base64url");return i.length===s.length&&QQ(i,s)}var lv=p(()=>{"use strict"});import{createHash as ZQ}from"node:crypto";import{access as cv,mkdtemp as eZ,readFile as JM,rm as tZ}from"node:fs/promises";import{constants as uv}from"node:fs";import{tmpdir as rZ}from"node:os";import Ii from"node:path";import{spawn as nZ}from"node:child_process";import{Client as oZ}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as sZ}from"@modelcontextprotocol/sdk/client/stdio.js";function YM(){return"npm"}function jM(e,t){return Buffer.byteLength(e)>=HM?e:(e+t.toString("utf8")).slice(0,HM)}function aZ(e){let t=process.env.KYNVER_MCP_UPDATE_NPM_CACHE?.trim(),r=t&&Ii.isAbsolute(t)?t:e,n={PATH:process.env.PATH,SystemRoot:process.env.SystemRoot,TEMP:process.env.TEMP,TMP:process.env.TMP,npm_config_registry:dv,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 qM(e,t,r=pv,n){return new Promise((o,s)=>{let i,a;try{[i,a]=oe(e,t)}catch(f){s(f);return}let l=nZ(i,a,{shell:!1,windowsHide:!0,detached:we(),env:aZ(n),stdio:["ignore","pipe","pipe"]}),c="",u="",d=!1;l.stdout.on("data",f=>{c=jM(c,f)}),l.stderr.on("data",f=>{u=jM(u,f)});let m=setTimeout(()=>{d=!0,l.pid&&he(l.pid,"SIGKILL")},r);l.once("error",f=>{clearTimeout(m),s(f)}),l.once("close",f=>{clearTimeout(m),d?s(new Error("process_timeout")):o({code:f,stdout:c,stderr:u})})})}function lZ(e,t){let[r,n]=t.split("-",2);return!n||!["sha256","sha384","sha512"].includes(r)?!1:ZQ(r).update(e).digest("base64")===n}async function cZ(e,t,r,n){let o=await qM(YM(),["pack",`${e}@${t}`,"--json","--pack-destination",n,`--registry=${dv}`,"--ignore-scripts"],pv,Ii.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"||Ii.basename(i)!==i)throw new Error("artifact_receipt_invalid");let a=Ii.join(n,i);if(!lZ(await JM(a),r))throw new Error("artifact_integrity_mismatch");return a}async function uZ(e,t,r){if((await qM(YM(),["install","--global","--prefix",e,t,`--registry=${dv}`,"--no-audit","--fund=false"],pv,r)).code!==0)throw new Error("package_install_failed")}async function zM(e){let t=JSON.parse(await JM(e.local.packageJsonPath,"utf8"));if(t.name!==e.report.packageName||typeof t.version!="string")throw new Error("installed_identity_mismatch");return t.version}function dZ(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 VM(e){if(!e.local.binPath)throw new Error("mcp_binary_missing");await cv(e.local.binPath,uv.X_OK).catch(async()=>cv(e.local.binPath,uv.R_OK));let t=new sZ({command:e.local.binPath,args:[],env:dZ(e.local.envAllowlist),stderr:"pipe"}),r=new oZ({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")),iZ)})]);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 GM(e,t,r,n,o){let s=await eZ(Ii.join(rZ(),"kynver-mcp-update-"));try{let i=await cZ(t,r,n,s);if(await o(),await uZ(e.local.prefix,i,Ii.join(s,"npm-cache")),await zM(e)!==r)throw new Error("installed_version_mismatch")}finally{await tZ(s,{recursive:!0,force:!0})}}async function XM(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 cv(e.local.prefix,uv.W_OK).catch(()=>{throw new Error("npm_prefix_not_writable")});let o=await zM(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 GM(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 VM(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 GM(e,t.packageName,t.installedVersion,t.rollbackIntegrity,async()=>{await n.beforePackageMutation?.()}),e.local.lifecycle==="runtime_stdio"){let c=await VM(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 dv,HM,pv,iZ,QM=p(()=>{"use strict";os();Te();dv="https://registry.npmjs.org",HM=512*1024,pv=2*6e4,iZ=2e4});import{createHmac as pZ,timingSafeEqual as fZ}from"node:crypto";import{mkdir as mZ,readFile as gZ,rename as hZ,writeFile as yZ}from"node:fs/promises";import{homedir as kZ}from"node:os";import fv from"node:path";function Yl(){return process.env.KYNVER_MCP_UPDATE_STATE_ROOT?.trim()||fv.join(kZ(),".kynver","state","mcp-updates")}function ZM(e){if(!/^[A-Za-z0-9_-]{8,128}$/.test(e))throw new Error("invalid update operation identity");return fv.join(Yl(),`${e}.json`)}function eL(e,t){let r=av(t);return r?pZ("sha256",Buffer.from(r.tokenHash,"hex")).update(JSON.stringify(e),"utf8").digest("base64url"):null}async function tL(e,t){try{let r=JSON.parse(await gZ(ZM(e),"utf8"));if(r.version!==2||r.operationId!==e||typeof r.integrityMac!="string")return null;let{integrityMac:n,...o}=r,s=eL(o,t);if(!s)return null;let i=Buffer.from(n,"utf8"),a=Buffer.from(s,"utf8");return i.length!==a.length||!fZ(i,a)?null:r}catch{return null}}async function rL(e,t){let r=eL(e,t);if(!r)throw new Error("invalid_runner_credential_for_receipt");let n=ZM(e.operationId);await mZ(fv.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.tmp`;await yZ(o,`${JSON.stringify({...e,integrityMac:r},null,2)}
|
|
199
|
+
`,{mode:384}),await hZ(o,n)}var df=p(()=>{"use strict";lv()});import{randomBytes as mv}from"node:crypto";import{mkdir as gv,readFile as hv,rename as bZ,rm as pf,stat as vZ,writeFile as nL}from"node:fs/promises";import Fo from"node:path";function oL(){return Fo.join(Yl(),RZ)}async function sL(){try{let e=JSON.parse(await hv(Fo.join(oL(),"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:iL(e.pid)}}catch{return null}}function iL(e){if(!Number.isSafeInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function wZ(e){try{return await vZ(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}async function aL(){return SZ("mcp_update")}async function SZ(e){let t=oL(),r=`${t}.reclaiming`;await gv(Fo.dirname(t),{recursive:!0,mode:448});let n=!1;try{if(await wZ(r))return null;for(let o=0;o<2;o+=1)try{await gv(t,{mode:448});let s={pid:process.pid,nonce:mv(18).toString("base64url"),acquiredAt:new Date().toISOString(),holder:e};return await nL(Fo.join(t,"owner.json"),JSON.stringify(s),{mode:384}),n&&(await pf(r,{recursive:!0,force:!0}),n=!1),{release:async()=>{try{let i=JSON.parse(await hv(Fo.join(t,"owner.json"),"utf8"));i.pid===s.pid&&i.nonce===s.nonce&&await pf(t,{recursive:!0,force:!0})}catch{}}}}catch(s){if(s.code!=="EEXIST")throw s;if(!n)try{await gv(r,{mode:448}),n=!0,await nL(Fo.join(r,"owner.json"),JSON.stringify({pid:process.pid,nonce:mv(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 hv(Fo.join(t,"owner.json"),"utf8"))}catch{return null}if(iL(i.pid))return null;let a=`${t}.stale-${process.pid}-${mv(8).toString("hex")}`;await bZ(t,a),await pf(a,{recursive:!0,force:!0})}return null}finally{n&&await pf(r,{recursive:!0,force:!0})}}var RZ,lL=p(()=>{"use strict";df();RZ="host-mutation.lock"});function ff(e,t,r){return`${e}/api/agent-os/by-id/${encodeURIComponent(t)}/mcp-updates/${r}`}function _Z(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 cL(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 xZ(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 uL(e){let t=ge(e.baseUrl),r=await $M();if(r.length===0)return{ok:!0,stage:"not_configured"};let n=await go(ff(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 aL();if(!o){let s=await sL();return{ok:!0,stage:"host_mutation_busy",...s?{heldBy:s.holder}:{}}}try{let s=await go(ff(t,e.agentOsId,"claim"),e.secret,{activeOwnedSessions:e.activeOwnedSessions});if(!s.ok)return{ok:!1,stage:"claim",status:s.status};let i=_Z(s.response);if(!i)return{ok:!0,stage:"idle"};if(!KM(i,e.secret,e.agentOsId))return{ok:!1,stage:"command_auth"};let a=await tL(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||!cL(a.recovery,i))return{ok:!1,stage:"recovery_receipt_invalid"};c=a.recovery,l={...c.item,report:{...c.item.report,inventoryFingerprint:i.claims.inventoryFingerprint}}}else{let k=r.find(b=>b.report.inventoryKey===i.claims.inventoryKey);if(!k||k.report.inventoryFingerprint!==i.claims.inventoryFingerprint)return{ok:!1,stage:"inventory_changed"};l=k,c=a&&cL(a.recovery,i)?a.recovery:xZ(k,i)}let u=a?.acceptedAt??new Date().toISOString(),d=async(k,b,S)=>{await rL({version:2,operationId:i.claims.operationId,attempt:i.claims.attempt,nonce:i.claims.nonce,acceptedAt:u,phase:k,terminal:b,...S?{outcome:S}:{},recovery:c},e.secret)};await d(a?.attempt===i.claims.attempt?a.phase:"claimed",!1);let m="claimed",f=async k=>{if(!(await go(ff(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");m=k,await d(k,!1)},g=k=>f(k),h=()=>f(m),y;try{y=await XM(l,i.claims,g,{recoveryVerifiedTargetInstalled:c.verifiedTargetInstalled,beforePackageMutation:h,onTargetInstalled:async()=>{c={...c,verifiedTargetInstalled:!0},await d("target_installed",!1)}})}catch(k){y={outcome:"failed",observedVersion:null,handshakeVerified:!1,toolCount:null,failureCode:k instanceof Error?k.message:"update_failed"}}let v=await go(ff(t,e.agentOsId,`operations/${encodeURIComponent(i.claims.operationId)}/complete`),e.secret,{attempt:i.claims.attempt,fenceToken:i.claims.fenceToken,...y});return v.ok?(await d(y.outcome,!0,y.outcome),{ok:y.outcome==="succeeded",stage:"complete",outcome:y.outcome}):{ok:!1,stage:"complete",status:v.status,outcome:y.outcome}}finally{await o.release()}}var dL=p(()=>{"use strict";$();qe();iv();lv();QM();lL();df()});import pL from"node:path";function CZ(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function EZ(e,t){let r=ie(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(pL.join(G(r.id),"workers",W(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||pn(a))continue;if(gl(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=ue(a);if(!Ve(l))continue;let c=fs({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await hi({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 AZ(e,t,r,n,o){let s=ge(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 fM(),c=Ps(t),u=null;try{let w=PM(t);if(w.length>0){let _=MM(t);u=xM(w,{cache:_}),_.flush?.()}else u=null}catch{u=null}try{if(en()!=="off"){let w=ys();LT({liveWorkers:w}),WT({liveWorkers:w})}else DT()}catch{}let d=({runId:w,workerName:_})=>{try{let{runsDir:R}=be(),P=pL.join(Fr(R,W(w)),"workers",W(_),"worker.json"),N=K(P,null);return N?pn(N):!1}catch{return!1}};await f0({agentOsId:e,baseUrl:s,secret:i,hasLiveWorker:d});let m=null;try{m=BM({hasLiveWorker:d})}catch{m=null}let f=null;try{f=xu({control:mn(e),supervisor:tx(),inFlightWorkers:ys().length})}catch{f=null}let g=yd(t),h=fA(),y=await me(a,i,{agentOsId:e,runId:t,ingestHarness:!0,harnessBoardSnapshot:Vk(t),resourceGate:r,boxResourceSnapshot:g0(r,{harnessRunId:t,boxKind:Bt(I())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:$e({runId:t}),activeHarnessWorkers:c,...g?.leaseToken?{meshCronLeaseToken:g.leaseToken}:{},...m?{localRunStore:m}:{},...f?{runtimeControlAck:f}:{},...h?{daemonEventLoop:h}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}},{agentOsId:e,baseUrl:s}),v=NM(y.response);if(v)try{TM(t,v)}catch{}let k=cA(y);if(k)try{lA(t,k)}catch{}let b=cE(y);b&&uE(e,b);let S=q_(y);return S&&Vg(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 mf(e){let t=String(Lt(String(e.run||""),"--run")),r=String(Lt(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Vk(t);let o=await vd(r,e),s=bd(o),i=_a({runId:t,configuredMaxWorkersOverride:s}),a=lM()?aM(t):void 0,l=await AZ(r,t,i,e,a),c;if(n)try{let x=ge(e.baseUrl?String(e.baseUrl):void 0),O=await ye(e.secret?String(e.secret):void 0,r,{baseUrl:x});c=await uL({agentOsId:r,secret:O,baseUrl:x,activeOwnedSessions:ys().length})}catch(x){c={ok:!1,stage:"cycle",error:x instanceof Error?x.message:"update cycle failed"}}let u=mT(t,l),d=await rP(t,e),m=await EZ(t,e);m.some(x=>x.ok&&!x.skipped)&&HE();let f=_a({runId:t,configuredMaxWorkersOverride:s}),g=Sb(),h=await b0(t,e),y=HN(f,l),v=y.maxStarts,k=mn(r),b=X_(k);b&&(v=0);let S=CZ()?await Vp({run:t,agentOsId:r,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},w=null,_=0,R=$N(l),P=v;if(n&&P>0&&R.length>0){let x=Math.min(P,R.length),O=await ub({...e,run:t,agentOsId:r,targetTaskIds:R.join(",")},x),M=Ri(O);_+=M,P=Math.max(0,P-M),w={exactTargetTaskIds:R,exact:O,startedCount:_}}if(n&&P>0){let x=await ub({...e,run:t,agentOsId:r},P),O=Ri(x);_+=O,w=w&&typeof w=="object"?{...w,broad:x,startedCount:_}:x}else!n||v<=0?w||(w={ok:!0,skipped:!0,reason:b??(n?f.reason??"no slots or queued work":"execute disabled"),maxStarts:0,dispatchAdvice:y,...R.length?{exactTargetTaskIds:R,exactOnly:!0}:{}}):w&&typeof w=="object"&&(w={...w,broadSkipped:!0,startedCount:_});let N=!y.underutilized&&v===0&&m.length===0&&_===0;return{runId:t,agentOsId:r,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:d,completedWorkers:m,staleReconcile:g,harnessCleanup:a,planProgressSync:h,completionAckSync:u,operatorTick:l,mcpUpdates:c,sweep:S,dispatchAdvice:y,dispatch:w,idle:N,runtimeControl:k?{desiredState:k.desiredState,policyVersion:k.policyVersion}:null}}var yv=p(()=>{"use strict";gn();Vu();$();qe();WN();KN();jN();_b();ks();Io();m0();ui();h0();gd();Q();Wt();du();Oe();Cb();U();v0();Zy();yi();tp();yu();ky();$();He();cM();fp();Yb();$r();CM();LM();rv();fy();FM();zh();dL();my()});function gf(e){return vs(mn(e))!=="stopped"?null:ys().length}var kv=p(()=>{"use strict";ks();gn()});function fL(e){if(!e||typeof e!="object")return!1;let t=e;return t.type==="result"&&typeof t.id=="number"&&typeof t.ok=="boolean"}var mL=p(()=>{"use strict"});import{existsSync as IZ}from"node:fs";import{fileURLToPath as PZ}from"node:url";import{SHARE_ENV as TZ,Worker as OZ}from"node:worker_threads";function DZ(e=import.meta.url){for(let t of[`./${gL}`,`../${gL}`]){let r=new URL(t,e);try{if(IZ(PZ(r)))return r}catch{}}return null}function MZ(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??lt()?{mode:"inline",reason:"desktop_sidecar"}:e.script?{mode:"thread",reason:"default"}:{mode:"inline",reason:"thread_entry_not_built"}}var gL,NZ,LZ,hf,hL=p(()=>{"use strict";Mt();my();Sn();yv();kv();mL();gL="daemon-tick-thread.js",NZ=3;LZ=(e,t)=>new OZ(e,{workerData:t,env:TZ,name:"kynver-pipeline-tick"}),hf=class{constructor(t){this.options=t;this.script=t.script===void 0?DZ():t.script;let r=MZ({env:t.env,desktopMode:t.desktopMode,script:this.script});this.modeValue=r.mode,this.reason=r.reason,this.createWorker=t.createWorker??LZ,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 pA(r),{tick:await mf(t),inFlightWorkers:gf(this.options.agentOsId),isolation:"inline"}}bundleIfChanged(){let t=KC(),r=or(),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(!fL(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>=NZ&&(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 BZ,performance as FZ}from"node:perf_hooks";var UZ,WZ,$Z,KZ,yL,yf,kL=p(()=>{"use strict";UZ=1e3,WZ=250,$Z=5,KZ=5e3,yL=e=>Number.isFinite(e)?Math.round(e/1e6):0,yf=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??UZ,this.sampleIntervalMs=t.sampleIntervalMs??WZ,this.now=t.now??Date.now,this.monotonicNow=t.monotonicNow??t.now??(()=>FZ.now()),this.log=t.log??(r=>console.error(r)),this.histogram=t.histogram??BZ({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>KZ)return this.histogram.reset(),this.phasesInWindow=new Set([this.phase]),null;let s=Math.max(0,Math.round(n-this.sampleIntervalMs)),i=yL(this.histogram.max),a=yL(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(-$Z),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 RL(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 wL(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 vL(e){let t=e?.code;return typeof t=="string"?t:null}function SL(e){if(!e)return!1;if(e instanceof Fn)return HZ.has(e.status);let t=vL(e)??vL(e.cause);if(t&&jZ.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 bv(e){return wL(e)?"aborted":SL(e)?"transient":"server"}function _L(e,t){let r=bv(e);if(r==="aborted")return t<=GZ?0:JZ;if(r==="transient"){let n=Math.max(0,Math.min(t-1,bL.length-1));return bL[n]}return VZ}function xL(e,t){return e==="aborted"&&t<YZ?{event:"chat_claim_poll_retry",level:"info"}:{event:"chat_claim_error",level:"error"}}var Fn,HZ,jZ,VZ,GZ,JZ,bL,kf,YZ,bf=p(()=>{"use strict";Fn=class extends Error{status;constructor(t){super(`claim failed: HTTP ${t}`),this.name="ClaimHttpError",this.status=t}},HZ=new Set([502,503,504]),jZ=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","EHOSTUNREACH","ENETUNREACH","ENETDOWN","UND_ERR_CONNECT_TIMEOUT"]),VZ=5e3,GZ=3,JZ=1e3,bL=[0,1e3,5e3];kf=class{counts={aborted:0,transient:0,server:0,auth:0,recovered:0};streakKind=null;streak=0;onError(t){let r=bv(t);return this.bump(r),{kind:r,consecutive:this.streak,backoffMs:_L(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}},YZ=3});var qZ,zZ,XZ,Pi,vv=p(()=>{"use strict";wt();qZ=5*6e4,zZ=5*6e4,XZ=2160*60*60,Pi=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()>qZ?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<zZ)return;let r=`${this.deps.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(this.deps.agentOsId)}/runner-credentials`;try{let n=await Ce(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({capabilities:["chat.relay"],ttlSeconds:XZ,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 Ce(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 CL(e=process.env){return e.KYNVER_OPENAI_DEFAULT_MODEL?.trim()||QZ}var QZ,VWe,EL=p(()=>{"use strict";ri();ll();Vt();QZ="gpt-5.5",VWe=600*1e3});function hr(e){let t=e.chatProvider?.trim();return Ti(t||e.workerProvider?.trim()||"cursor")}function Ti(e){let t=et(e);return t==="cursor"||t==="agent"?"cursor":tee.has(t)?"gemini":ree.has(t)?"venice":AL.has(t)||AL.has(e.trim().toLowerCase())?"codex":IL.has(t)||IL.has(e.trim().toLowerCase())?"openai":(eee.has(t),"anthropic")}function Uo(e,t,r=process.env){let n=r.KYNVER_CHAT_MODEL?.trim();if(n){if(e==="cursor"){let s=Ys(n,ql);return s.ok?s.model:ql}if(e==="gemini"&&!zl.test(n)&&!wv.test(n)||(e==="openai"||e==="codex")&&!zl.test(n)&&!Rv.test(n)||e==="venice"&&!zl.test(n)||e==="anthropic")return n}let o=t.defaultModel?.trim();if(e==="cursor"){if(o&&!zl.test(o)){let s=Ys(o,ql);return s.ok?s.model:ql}return ql}return e==="gemini"?o&&Rv.test(o)?o:ze(r):e==="codex"?o&&wv.test(o)?o:r.KYNVER_CODEX_DEFAULT_MODEL?.trim()||ZZ:e==="venice"?o&&!zl.test(o)&&!Rv.test(o)?o:ur(r):e==="openai"?o&&wv.test(o)?o:CL(r):o||je}var ql,ZZ,eee,tee,AL,ree,IL,zl,Rv,wv,Un=p(()=>{"use strict";ho();Vt();ul();EL();oi();Tr();Ld();ql="composer-2.5",ZZ=Qs,eee=new Set(["claude","anthropic","opus"]),tee=new Set(["gemini","gemini-api"]),AL=new Set(["codex","chatgpt","gpt"]),ree=new Set(["venice","venice-ai","venice_ai","veniceai"]),IL=new Set(["openai","openai-compatible","openai-api","openai_api"]);zl=/^(?:claude[-_]|opus\b|sonnet\b|haiku\b)/i,Rv=/^(?:gemini[-_]|flash\b|pro\b)/i,wv=/^(?:gpt-|o\d|chatgpt-)/i});var vf,PL=p(()=>{"use strict";vf=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 nee from"node:os";function Wo(e=process.env){let t=I(),r=Bt(t,e);return ws({boxKind:r,hostLabel:nee.hostname(),config:t,env:e})}async function oee(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(),TL);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 see(o)}async function see(e){let t=new AbortController,r=setTimeout(()=>t.abort(),TL);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 Sv(e){return ke()?!0:!!e&&!!yn(e)}async function Rf(e=process.env){let t=I(),r=t.agentOsId?.trim(),n=ke();if(!r||!Sv(r))return null;let o=await oee(t.apiBaseUrl,n,e);if(!o)return null;let s=hr(t),i=t.apiBaseUrl?.replace(/\/$/,"")??o.replace(/\/$/,"");return{bridgeUrl:o.replace(/\/$/,""),agentOsId:r,apiKey:n??"",boxId:Wo(e),chatProvider:s,model:Uo(s,t,e),useClaudeOauth:t.chatUseClaudeOauth===!0,auth:new Pi({apiBaseUrl:i,agentOsId:r,boxLabel:()=>Wo(e),loadApiKey:ke,loadBoxCredential:()=>yn(r),saveBoxCredential:a=>Wu(r,a),clearBoxCredential:$u}),security:new vf,apiBaseUrl:i}}var TL,wf=p(()=>{"use strict";$();He();Ss();vv();Un();PL();TL=5e3});import{verify as iee,createPublicKey as aee}from"node:crypto";function uee(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 OL(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[lee]??null}function dee(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function pee(e,t){let r=Date.parse(e),n=Date.parse(t);return Number.isNaN(r)?!1:Number.isNaN(n)?!0:r>n}function _v(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(!uee(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||!dee(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=uo(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(ft(s),"utf8"),d=aee({key:Buffer.concat([cee,Buffer.from(i)]),format:"der",type:"spki"});l=iee(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||!pee(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 f$e,lee,cee,NL=p(()=>{"use strict";kn();La();f$e=720*60*60,lee="change",cee=Buffer.from("302a300506032b6570032100","hex")});function DL(e){switch(e){case"off":return 0;case"folder":case"folders":return 1;case"full":return 2;default:return 0}}function fee(e,t){let r=DL(e.access),n=DL(t.access);if(r!==n)return r>n;if(r!==1)return!1;let o=new Set(oo(t.folders));return oo(e.folders).some(s=>!o.has(s))}function mee(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=_s(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:OL(r)}}function LL(e){let t=mee(e.signedAccess,e.boxId);if(!t)return{ok:!0,website:null,raised:!1};let r=_s(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:oo(e.local.chatWorkFolders)}:{access:Du(e.engine),folders:[]});let o=n.every(c=>fee(t.level,c)),s=(e.now??(()=>new Date))().toISOString(),i=e.state.website;if(!o){let c=t.change!==null?_v(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:ML(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=_v(t.change,{agentOsId:e.agentOsId,boxId:e.boxId,access:t.level.access,folders:t.level.folders},{env:e.env,nowSec:e.nowSec,lastApplied:ML(i)}),l=i?.access??r??Du(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 ML(e){return!e||!e.changedAt&&!e.nonce?null:{changedAt:e.changedAt,nonce:e.nonce}}var BL=p(()=>{"use strict";NL();so()});import{existsSync as gee,mkdirSync as hee,readFileSync as yee,writeFileSync as kee}from"node:fs";import{homedir as bee}from"node:os";import xv from"node:path";function Cv(e=bee()){return xv.join(e,vee)}function FL(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Ree(e){return typeof e.access!="string"?null:{access:e.access,folders:FL(e.folders),source:e.source??"default",signed:e.signed===!0,at:typeof e.at=="string"?e.at:""}}function wee(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e;if(typeof r.access=="string")return{access:r.access,folders:FL(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 Sf(e=Cv()){try{if(!gee(e))return{applied:null,website:null};let t=JSON.parse(yee(e,"utf8"));if(!t||typeof t!="object")return{applied:null,website:null};let r=Ree(t);return{applied:r,website:wee(t.website,r)}}catch{return{applied:null,website:null}}}function UL(e,t){try{hee(xv.dirname(e),{recursive:!0});let r={...t.applied??{},...t.website?{website:t.website}:{}};kee(e,`${JSON.stringify(r,null,2)}
|
|
200
|
+
`,{mode:384})}catch{}}function See(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 WL(e,t={signed:!1}){let r=t.file??Cv(),n=t.now??(()=>new Date),o={access:e.access,folders:[...e.folders],source:e.source,signed:t.signed,at:n().toISOString()},s=Sf(r);return See(s.applied,o)?null:(UL(r,{applied:o,website:s.website}),{from:s.applied,to:o})}function $L(e,t={}){let r=t.file??Cv(),n=t.now??(()=>new Date),o=Sf(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:(UL(r,{applied:o.applied,website:s}),s)}function Oi(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 vee,Ev=p(()=>{"use strict";vee=xv.join(".kynver","chat-access-state.json")});import{appendFileSync as _ee,mkdirSync as xee}from"node:fs";import{homedir as Cee}from"node:os";import Av from"node:path";function Iv(e=Cee()){return Av.join(e,Eee)}function Pv(e){let t=r=>r===void 0?void 0:r.length>KL?`${r.slice(0,KL)}\u2026`:r;return{...e,...e.command!==void 0?{command:t(e.command)}:{},...e.path!==void 0?{path:t(e.path)}:{}}}function Ni(e,t=Iv()){try{return xee(Av.dirname(t),{recursive:!0}),_ee(t,`${JSON.stringify(Pv(e))}
|
|
201
|
+
`,{encoding:"utf8",mode:384}),!0}catch(r){return console.error(JSON.stringify({event:"chat_command_log_write_failed",error:r instanceof Error?r.message:String(r)})),!1}}var Eee,KL,Xl=p(()=>{"use strict";Eee=Av.join(".kynver","logs","chat-commands.jsonl"),KL=2e3});function Aee(e){let r=e.chatProvider?.trim()||e.workerProvider?.trim()||"";return et(r)}function $o(e,t=process.env){return Aee(e)!=="gemini"?"http":ni(Ct(t))==="antigravity"?"antigravity":"http"}var _f=p(()=>{"use strict";Eo();Pa()});import{execFile as Iee,spawnSync as GL}from"node:child_process";import{existsSync as Pee,readFileSync as Tee}from"node:fs";import{homedir as Oee,platform as Nee}from"node:os";import HL from"node:path";function Ef(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 Dee(e,t){return e==="cursor"?vo(t):e==="codex"?t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||qr():e==="antigravity"?Ct(t):e==="claude-code"?t.KYNVER_CLAUDE_BIN?.trim()||t.CLAUDE_BIN?.trim()||"claude":null}function jL(e,t,r){let n=`${t??""} ${r??""}`;return e===0?n.match(Mee)?.[0]??null:null}function Af(e,t=process.env,r=Date.now()){let n=Dee(e,t);if(!n)return null;let o=xf.get(n);if(o&&r-o.at<JL)return o.version;if(o){if(!Cf.has(n)){Cf.add(n);try{let[i,a]=oe(n,["--version"]);Iee(i,a,X({encoding:"utf8",timeout:5e3}),(l,c,u)=>{Cf.delete(n),xf.set(n,{at:Date.now(),version:l?null:jL(0,c,u)})})}catch{Cf.delete(n),xf.set(n,{at:r,version:o.version})}}return o.version}let s=null;try{let[i,a]=oe(n,["--version"]),l=GL(i,a,X({encoding:"utf8",timeout:5e3}));s=jL(l.status,l.stdout,l.stderr)}catch{s=null}return xf.set(n,{at:r,version:s}),s}function If(e=process.env,t={}){if(e.ANTHROPIC_API_KEY?.trim())return!0;let r=t.home??Oee(),n=t.now??Date.now(),o=VL.get(r);if(o&&n-o.at<JL)return o.signedIn;let s=Lee(HL.join(e.CLAUDE_CONFIG_DIR?.trim()||HL.join(r,".claude"),".credentials.json"));return!s&&(t.os??Nee())==="darwin"&&(s=(t.keychain??Bee)()),VL.set(r,{at:n,signedIn:s}),s}function Lee(e){if(!Pee(e))return!1;try{let t=JSON.parse(Tee(e,"utf8")).claudeAiOauth,r=n=>typeof n=="string"&&n.length>0;return!!t&&(r(t.refreshToken)||r(t.accessToken))}catch{return!1}}function Bee(){try{return GL("security",["find-generic-password","-s","Claude Code-credentials"],{stdio:"ignore",timeout:5e3}).status===0}catch{return!1}}var Mee,JL,xf,Cf,VL,Ql=p(()=>{"use strict";So();zs();Eo();Te();U();_f();Mee=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,JL=10*6e4,xf=new Map,Cf=new Set;VL=new Map});import{createHash as Fee,verify as Uee,createPublicKey as Wee}from"node:crypto";function Ov(e){if(!e||typeof e!="object"||Array.isArray(e))return e;let t={...e};return delete t[YL],t}function Kee(e){return Fee("sha256").update(ft(Ov(e)),"utf8").digest("hex")}function Nv(e){return!e||typeof e!="object"||Array.isArray(e)?null:e[YL]??null}function Hee(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 jee(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:ft(r)===ft(t)}function Tv(e,t){return{state:t,firstSeenAt:new Date(e.firstSeenSec*1e3).toISOString(),turnId:e.turnId}}function Vee(e){return Wee({key:Buffer.concat([$ee,Buffer.from(e)]),format:"der",type:"spki"})}function qL(e,t,r={}){let n=r.env??process.env,o=r.nowSec??Math.floor(Date.now()/1e3),s=Nv(e);if(s===null)return{ok:!1,code:"unsigned",reason:"turn carries no signed envelope"};if(!Hee(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=uo(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(ft(i.payload),"utf8");c=Uee(null,d,Vee(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(Kee(e)!==i.payload.payloadHash)return{ok:!1,code:"payload_tampered",reason:"turn payload does not match its signed hash"};if(!jee(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 (${Gee(u.replay)})`,replay:u.replay}}function Gee(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 YL,$ee,Pf,Tf=p(()=>{"use strict";kn();La();YL="turnEnvelope",$ee=Buffer.from("302a300506032b6570032100","hex");Pf=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:Tv(n,"turn_mismatch")}:n.state==="verified"?{ok:!0,redelivered:!0}:{ok:!1,replay:Tv(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:Tv(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 zL(e=process.env,t={}){let r=(e[Jee]??t.chatTurnSignature??"").toString().trim().toLowerCase();return r==="optional"||r==="off"||r==="0"||r==="false"?"optional":"required"}function XL(e,t){return t?`turn_rejected_${e}: ${t}`:`turn_rejected_${e}`}function QL(e,t){if(!(Nv(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:Yee(o)?o:null,signed:!1,userId:null,redelivered:!1}}let n=qL(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 Yee(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.byBox;return!!t&&typeof t=="object"&&!Array.isArray(t)}var Jee,Dv=p(()=>{"use strict";Tf();Jee="KYNVER_CHAT_TURN_SIGNATURE"});function Of(e){return typeof e=="string"&&qee.test(e.trim())?e.trim():null}function Nf(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 rB(e,t){let r=Of(e);return r?{[ZL]:r,[eB]:t}:{}}var ZL,eB,tB,qee,Zl=p(()=>{"use strict";ZL="KYNVER_CONVERSATION",eB="KYNVER_AGENT_TAB_ENGINE",tB="X-Kynver-Conversation",qee=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});function oB(e){return typeof e=="string"&&zee.includes(e)}function iB(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.kind!=="agent-tab"||!oB(t.engine)||typeof t.sessionKey!="string"||!rte.test(t.sessionKey))return null;let r=typeof t.text=="string"?t.text.slice(0,sB):"",n=[],o=0;if(Array.isArray(t.attachments))for(let u of t.attachments.slice(0,nB)){if(!u||typeof u!="object")continue;let{name:d,mime:m,contentBase64:f}=u;if(!(typeof d!="string"||typeof f!="string")){if(o+=Math.floor(f.length*3/4),o>Zee)break;n.push({name:d.slice(0,200),mime:typeof m=="string"?m.slice(0,100):"application/octet-stream",contentBase64:f})}}let s=nte(t.remoteAttachments,nB-n.length),i=ote(t.control);if(!i&&!r.trim()&&n.length===0&&s.length===0)return null;let a=typeof t.styleNote=="string"?t.styleNote.trim().slice(0,Qee):"",l=typeof t.replyTurnId=="string"&&Xee.test(t.replyTurnId)?t.replyTurnId:null,c=Of(t.conversationId);return{kind:"agent-tab",engine:t.engine,sessionKey:t.sessionKey,text:r,attachments:n,...s.length>0?{remoteAttachments:s}:{},...t.computerAccess!==void 0?{computerAccess:t.computerAccess}:{},...a?{styleNote:a}:{},...l?{replyTurnId:l}:{},...i?{control:i}:{},...c?{conversationId:c}:{},...t.kynverTools===!1?{kynverTools:!1}:{}}}function nte(e,t){if(!Array.isArray(e)||t<=0)return[];let r=[];for(let n of e.slice(0,t)){if(!n||typeof n!="object")continue;let{name:o,mime:s,fileId:i,size:a}=n;typeof o!="string"||typeof i!="string"||!tte.test(i)||typeof a!="number"||!Number.isSafeInteger(a)||a<=0||a>ete||r.push({name:o.slice(0,200),mime:typeof s=="string"?s.slice(0,100):"application/octet-stream",fileId:i.toLowerCase(),size:a})}return r}function ote(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.op==="stop")return{op:"stop"};if(t.op==="steer"&&typeof t.text=="string"&&t.text.trim())return{op:"steer",text:t.text.slice(0,sB)};if(t.op==="approve"&&typeof t.choice=="string"&&Mf.includes(t.choice)){let r=typeof t.approvalId=="string"&&/^[A-Za-z0-9._:-]{1,120}$/.test(t.approvalId)?t.approvalId:void 0;return{op:"approve",choice:t.choice,...r?{approvalId:r}:{}}}return null}var zee,Df,Xee,Mf,sB,Qee,nB,Zee,ete,tte,rte,ec=p(()=>{"use strict";Zl();zee=["hermes","openclaw","claude-code","grok-bot"],Df={hermes:"Hermes",openclaw:"OpenClaw","claude-code":"Claude Code","grok-bot":"Grok Bot"};Xee=/^[A-Za-z0-9-]{8,64}$/,Mf=["once","session","always","deny"],sB=32e3,Qee=4e3,nB=5,Zee=20*1024*1024,ete=300*1024*1024,tte=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,rte=/^[A-Za-z0-9_.:-]{8,128}$/});import{createHash as ste}from"node:crypto";function ute(e){return`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box`}function dte(e,t,r){let n=e.trim()?e:`${t} finished without writing a reply.`;return r.length>0&&(n+=`
|
|
202
|
+
|
|
203
|
+
_${r.length===1?"A file":`${r.length} files`} couldn't be attached: ${r.join(", ")}._`),n.length>aB?`${n.slice(0,aB-1)}\u2026`:n}function cB(e){let t=e.fetchFn??fetch,r=e.wait??cte,n=e.redactText??(c=>Al(e.agentOsId,c)),o=c=>{let u=Bp(e.agentOsId,c),d;try{d=new TextDecoder("utf-8",{fatal:!0}).decode(u)}catch{return u}if(d.includes("\0"))return u;let m=n(d);return m===d?u:Buffer.from(m,"utf8")},s=ute(e),i=new URL(e.apiBaseUrl).origin,a=async(c,u)=>{let m={Authorization:`Bearer ${await e.bearer()}`},f=u.body;u.json!==void 0&&(m["Content-Type"]="application/json",f=JSON.stringify(u.json));let g=await t(c,{method:u.method??"POST",headers:m,body:f});return g.status===401&&e.onUnauthorized?.(),g},l=async c=>{try{let u=o(Buffer.from(c.contentBase64,"base64")),d=ste("sha256").update(u).digest("hex"),m=await a(`${s}/uploads`,{json:{name:n(c.name).slice(0,200),size:u.length,sha256:d}});if(!m.ok)return null;let f=await m.json();for(let y=0;y<f.parts;y++){let v=u.subarray(y*f.partBytes,(y+1)*f.partBytes),k=new URL(f.partUrl.replace("{index}",String(y)),i).toString(),b=!1;for(let S=0;S<3&&!b;S++)b=!!(await t(k,{method:"PUT",body:new Uint8Array(v)}).catch(()=>null))?.ok,b||await r(1e3*(S+1));if(!b)return null}let g=await a(new URL(f.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:{}});if(u.status!==404&&u.status!==410)return"continue";let d=await u.json().catch(()=>null);return d?.code==="turn_stopped"?"stop":u.status===404&&d?.code==="turn_unknown"?"continue":"gone"}catch{return"continue"}},async deliver({replyTurnId:c,engine:u,text:d,files:m}){let f=[],g=[],h=0;for(let v of m.slice(0,lte)){let k=v.sizeBytes??Math.floor(v.contentBase64.length*3/4),b=n(v.name).slice(0,200);if(k<=ite&&h+k<=ate){let w=o(Buffer.from(v.contentBase64,"base64"));h+=w.length,f.push({name:b,contentBase64:w.toString("base64")});continue}let S=await l(v);S?f.push({fileId:S}):g.push(b.slice(0,80))}let y={engine:u,idempotencyKey:`turn-reply:${c}`,turnId:c,text:dte(n(d),pte[u],g),attachments:f,notify:!0};for(let v=0;;v++){let k=0;try{let S=await a(`${s}/posts`,{json:y});if(k=S.status,S.ok)return!0}catch{k=0}if(!(k===0||k===401||k===408||k===429||k>=500)||v>=lB.length)return!1;await r(lB[v])}}}}var aB,ite,ate,lte,lB,cte,pte,uB=p(()=>{"use strict";pr();ec();aB=32e3,ite=8*1024*1024,ate=20*1024*1024,lte=10,lB=[2e3,4e3,8e3,16e3,32e3],cte=e=>new Promise(t=>setTimeout(t,e));pte=Df});import{closeSync as dB,mkdirSync as fte,openSync as mte,rmSync as gte,writeSync as pB}from"node:fs";import hte from"node:path";function fB(e){let t=e.fetchFn??fetch,r=e.wait??vte,n=e.rangeBytes??yte,o=Math.max(1,e.attempts??kte),s=`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box/files`;async function i(l,c,u){let d=await t(`${s}/${encodeURIComponent(l)}`,{headers:{Authorization:`Bearer ${await e.bearer()}`,Range:c},signal:u});if(d.status===401&&e.onUnauthorized?.(),d.status===200||d.status===206)return d;let m=d.status>=400&&d.status<500&&d.status!==429&&d.status!==408&&d.status!==401;throw new Di(`HTTP ${d.status}`,m)}async function a(l){let c;for(let u=0;u<o;u+=1){let d=new AbortController,m=setTimeout(()=>d.abort(),e.rangeTimeoutMs??bte);try{return await l(d.signal)}catch(f){if(c=f,f instanceof Di&&f.final)throw f}finally{clearTimeout(m)}u<o-1&&await r(1e3*2**u)}throw c instanceof Error?c:new Error("download failed")}return{async download(l,c){fte(hte.dirname(c),{recursive:!0,mode:448});let u=mte(c,"w",384);try{let d=0,m=!1;for(;d<l.size&&!m;){let f=Math.min(l.size-1,d+n-1),g=await a(async h=>{let y=await i(l.fileId,`bytes=${d}-${f}`,h);if(y.status===200){let k=0,b=y.body?.getReader();if(!b)throw new Di("empty body",!1);for(;;){let{done:S,value:w}=await b.read();if(S)break;pB(u,w,0,w.length,k),k+=w.length}return k}let v=new Uint8Array(await y.arrayBuffer());if(v.length!==f-d+1)throw new Di("short range",!1);return pB(u,v,0,v.length,d),-1});if(g>=0){if(g!==l.size)throw new Error("size mismatch");m=!0}else d=f+1}}catch(d){throw dB(u),gte(c,{force:!0}),new Error(d instanceof Error?d.message:"download failed")}dB(u)}}}var yte,kte,bte,vte,Di,mB=p(()=>{"use strict";yte=8*1024*1024,kte=4,bte=9e4,vte=e=>new Promise(t=>setTimeout(t,e)),Di=class extends Error{constructor(r,n){super(r);this.final=n}final}});async function Mi(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 yr(e,t,r){r===401&&t.kind==="box_token"&&e.auth?.invalidateToken()}var Li=p(()=>{"use strict"});import{closeSync as Rte,existsSync as wte,fstatSync as Ste,openSync as _te,readSync as xte}from"node:fs";function hB(e){if(!(typeof e!="string"||!e.trim()))return e.length>gB?`${e.slice(0,gB)}\u2026`:e}function kB(){return{lastSuccessAt:null,lastSuccessKind:null,steps24h:0,failures24h:{},recentFailures:[]}}function Pte(e,t){let r=kB(),n=[];for(let o of e){let s;try{s=JSON.parse(o)}catch{continue}let i=typeof s.at=="string"?Date.parse(s.at):Number.NaN;if(!Number.isNaN(i)&&(s.ok===!0&&(!r.lastSuccessAt||i>=Date.parse(r.lastSuccessAt))&&(r.lastSuccessAt=new Date(i).toISOString(),r.lastSuccessKind=s.kind??null),!(t-i>Ite)&&(r.steps24h+=1,s.ok===!1))){let a=typeof s.reason=="string"&&/^[a-z_]{1,40}$/.test(s.reason)?s.reason:"other";r.failures24h[a]=(r.failures24h[a]??0)+1;let l=hB(s.command),c=hB(s.path);n.push({at:new Date(i).toISOString(),kind:typeof s.kind=="string"?s.kind:null,...l?{command:l}:{},...c?{path:c}:{},...typeof s.exitCode=="number"&&Number.isFinite(s.exitCode)?{exitCode:Math.trunc(s.exitCode)}:{},reason:a})}}return r.recentFailures=n.sort((o,s)=>Date.parse(s.at)-Date.parse(o.at)).slice(0,Cte),r}function Tte(e){if(!wte(e))return[];let t=_te(e,"r");try{let r=Ste(t).size,n=Math.min(r,Ete),o=Buffer.alloc(n);return xte(t,o,0,n,r-n),o.toString("utf8").split(`
|
|
204
|
+
`).filter(Boolean)}finally{Rte(t)}}function Lf(e=Iv(),t=Date.now()){let r=yB.get(e);if(r&&t-r.at<Ate)return r.summary;let n;try{n=Pte(Tte(e),t)}catch{n=kB()}return yB.set(e,{at:t,summary:n}),n}var Cte,gB,Ete,Ate,Ite,yB,Mv=p(()=>{"use strict";Xl();Cte=20,gB=240;Ete=512*1024,Ate=3e4,Ite=1440*60*1e3;yB=new Map});import{appendFileSync as Ote,mkdirSync as Nte}from"node:fs";import{homedir as Dte}from"node:os";import Lv from"node:path";function bB(e=Dte()){return Lv.join(e,Mte)}function vB(e){let r=(e instanceof Error?e.message:String(e)).split(":")[0].trim();return/^[a-z_]{1,40}$/.test(r)?r:"other"}function RB(e,t=bB()){try{Nte(Lv.dirname(t),{recursive:!0}),Ote(t,`${JSON.stringify({kind:"step",...e})}
|
|
205
|
+
`,{encoding:"utf8",mode:384})}catch{}}function wB(e=bB()){return Lf(e)}var Mte,Bv=p(()=>{"use strict";Mv();Mte=Lv.join(".kynver","logs","chat-claude-code-steps.jsonl")});function Ko(e){let t=Ef(e.provider,e.config,e.env??process.env),r=e.boxId?Nu(e.payloadAccess,e.boxId):null,n=xs({engine:t,local:{chatComputerAccess:e.config.chatComputerAccess,chatWorkFolders:e.config.chatWorkFolders},website:r,home:e.home});return{engine:t,access:n}}var Bf=p(()=>{"use strict";Ql();so()});function SB(e,t,r={}){let n=r.env??process.env,{engine:o,access:s}=Ko({provider:e,config:t,env:n});return{access:s.access,folders:s.folders.map(Ze),source:s.source==="website"?"local":s.source,engine:o,engineVersion:o==="none"?null:(r.version??Af)(o,n),log:(r.summary??Lf)(),...o==="claude-code"?{claudeCode:{signedIn:(r.signedIn??If)(n),steps:(r.stepSummary??wB)()}}:{}}}var _B=p(()=>{"use strict";bt();Ql();Bv();Bf();Mv()});function xB(e){try{return rt().report(e)}catch{return null}}function Ff(e,t){try{return SB(e,t)}catch{return}}function tc(){try{return Nx().apiKey}catch{return"none"}}async function Bi(e,t){for(let n=0;n<e&&!t();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}var Wn,Uf=p(()=>{"use strict";$();Os();_B();Li();Wn=Mi});function CB(e){let t=null;return cB({apiBaseUrl:e.apiBaseUrl??new URL(e.bridgeUrl).origin,agentOsId:e.agentOsId,bearer:async()=>(t=await Wn(e),t.bearer),onUnauthorized:()=>{t&&yr(e,t,401)}})}function EB(e){let t=null;return fB({apiBaseUrl:e.apiBaseUrl??new URL(e.bridgeUrl).origin,agentOsId:e.agentOsId,bearer:async()=>(t=await Wn(e),t.bearer),onUnauthorized:()=>{t&&yr(e,t,401)}})}async function Ae(e,t,r){let n=await Wn(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:Fp(e.agentOsId,r)})});return yr(e,n,o.status),o.ok}var rc=p(()=>{"use strict";uB();mB();Li();pr();Uf()});async function AB(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??{}})),Ni({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 Ae(e,t.turnId,[{seq:0,kind:"error",error:XL(r.code,r.detail)}]).catch(()=>{}),{ok:!1}}async function Fv(e,t,r){let n=QL({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}):AB(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=I()}catch{o={}}let s=LL({signedAccess:n.access,boxId:e.boxId,agentOsId:e.agentOsId,engine:Ef(e.chatProvider,o,r.env??process.env),local:{chatComputerAccess:o.chatComputerAccess,chatWorkFolders:o.chatWorkFolders},state:Sf(r.stateFile),env:r.env,nowSec:r.nowSec});if(!s.ok)return AB(e,t,{code:s.code,detail:s.detail,reason:s.reason,policy:r.policy,extra:{from:Oi(s.from),to:Oi(s.to),signed:n.signed}});s.website&&$L(s.website,{file:r.stateFile});let a={...Ov(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 Uv=p(()=>{"use strict";$();BL();Ev();Xl();Ql();Tf();Dv();rc()});var Lte,$n,Wf=p(()=>{"use strict";Kk();Lte=150,$n=class{constructor(t,r=Lte,n,o=!1){this.flushFn=t;this.floorMs=r;this.leading=o;this.stream=n&&!n.empty?lO(n,s=>{s&&this.flushFn(s)}):null}flushFn;floorMs;leading;buffer="";timer=null;closed=!1;sentAny=!1;stream;push(t){if(!(this.closed||!t)){if(this.buffer+=t,this.leading&&!this.sentAny){this.sentAny=!0,this.flushNow();return}this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.flushNow()},this.floorMs))}}flushNow(t=!1){let r=this.buffer;if(this.buffer="",this.stream){r&&this.stream.write(r),t&&this.stream.flush();return}r&&this.flushFn(r)}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(!0))}}});function IB(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($te.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
206
|
+
`)||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&&!Kte.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:Ute}:r==="run dispatch"?{ok:!1,mutating:!0,reason:Fte}:Bte.has(r)?{ok:!0,mutating:!1}:Wte.has(r)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${r}`}}var Bte,Fte,Ute,Wte,$te,Kte,PB=p(()=>{"use strict";Bte=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list","update check","update status"]),Fte="run dispatch is blocked from runtime_command \u2014 use agent_os_submit_action_intent with kind dispatch_workers (live dispatch requires Action Required approval)",Ute='update finish is internal to `kynver update` \u2014 call ["update"] (confirmed) to update Kynver',Wte=new Set(["run create","run sweep","worker start","worker stop","worker complete","cleanup","update"]),$te=["--secret","--api-key","--keeper-child"],Kte=new Set(["runner-install","node-runtime","local-store","context-envelope","runtime-takeover"])});import{spawn as Hte}from"node:child_process";function Gte(e,t,r,n=process.env){let o=Hx(r,{agentOsId:e,argv:t},n);return o.ok?null:`command authorization proof invalid: ${o.reason}`}async function OB(e,t,r={}){if(r.agentOsId){let a=Gte(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=IB(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=r.cliEntry??process.argv[1],s=r.timeoutMs??jte,i=new $n(t,void 0,dr(r.agentOsId??""));return new Promise(a=>{let l=0,c=!1,u=Hte(process.execPath,[o,...e],X({stdio:["ignore","pipe","pipe"],env:process.env})),d=f=>{if(l>=TB)return;let g=f.toString("utf8").slice(0,TB-l);l+=g.length,i.push(g)};u.stdout?.on("data",d),u.stderr?.on("data",d);let m=setTimeout(()=>{c=!0,ct(u,"SIGTERM"),setTimeout(()=>ct(u,"SIGKILL"),Vte).unref()},s);u.on("error",f=>{clearTimeout(m),i.push(`spawn failed: ${f.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",f=>{clearTimeout(m),i.close(),a({exitCode:f,timedOut:c})})})}var jte,Vte,TB,NB=p(()=>{"use strict";U();Wf();pr();PB();La();jte=10*6e4,Vte=5e3,TB=2e5});var Kn,$f=p(()=>{"use strict";Kn=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 Wv(e,t){let r=0,n=!1,o=new Kn,s=Array.isArray(t.payload?.argv)?t.payload.argv:[],i=await OB(s,a=>{n||o.track(Ae(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 Ae(e,t.turnId,[{seq:r++,kind:"error",error:`command_refused: ${i.refused}`}]).catch(()=>{}):await Ae(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 $v=p(()=>{"use strict";NB();$f();rc()});function Kf(e){let t=e.appendLog??(s=>{Ni(s)}),r=e.now??(()=>new Date),n=0,o=(s,i)=>Pv({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 Kv=p(()=>{"use strict";Xl()});import{readFileSync as Jte,statSync as Yte}from"node:fs";import DB from"node:path";function Xte(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!==qte||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 Ho(e,t,r){return{step:{kind:"attach",path:e,ok:!1,reason:t,...r!==void 0?{outputBytes:r}:{}}}}function Qte(e,t,r={}){let n=r.stat??Yte,o=r.read??Jte,s=r.maxBytes??zte,i=e.rawPath.trim();if(!i||i.includes("\0"))return Ho(i,"invalid_path");let a=DB.resolve(t.workDir,Kc(i));if(t.access==="off")return Ho(a,"access_off");if(!Mu(t,a))return Ho(a,"outside_folders");let l;try{let c=n(a);if(!c.isFile())return Ho(a,"not_a_file");l=c.size}catch{return Ho(a,"not_found")}if(l>s)return Ho(a,"too_large",l);try{let c=o(a);return{step:{kind:"attach",path:a,outputBytes:c.length,ok:!0},file:{name:DB.basename(a),sizeBytes:c.length,contentBase64:c.toString("base64")}}}catch{return Ho(a,"read_failed")}}function MB(e,t,r){let n=Xte(e);for(let o of n){let s=Qte(o,t.access);r.attach(s.step,t,{toolUseId:o.toolUseId,...s.file?{file:s.file}:{}})}return n.length}var qte,zte,LB=p(()=>{"use strict";so();bt();qte="attach_file",zte=50*1024*1024});function FB(e){if(e.startsWith(`${BB}:`)||!Bk(e))return e;let t=e.replace(/\s+/g," ").trim().slice(0,300);return`${BB}: ${t}`}var BB,UB=p(()=>{"use strict";xp();BB="provider_usage_exhausted"});import{readFileSync as Zte}from"node:fs";import{homedir as ere,platform as tre}from"node:os";import rre from"node:path";import{execFileSync as nre}from"node:child_process";function WB(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 ore(){if(tre()==="darwin")try{let e=nre("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return WB(e.trim())}catch{return null}try{let e=Zte(rre.join(ere(),".claude",".credentials.json"),"utf8");return WB(e)}catch{return null}}function nc(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=ore();if(s)return{kind:"oauth",token:s}}return null}var Hv=p(()=>{"use strict"});import{existsSync as $B}from"node:fs";import{homedir as sre}from"node:os";import oc from"node:path";import{spawnSync as ire}from"node:child_process";function are(e){if(oc.isAbsolute(e)||e.includes("/")||e.includes("\\"))return $B(e);try{let t=ire(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function lre(e=process.env){let t=sre(),r=[],n=e.CODEX_HOME?.trim();return n&&r.push(oc.join(oc.resolve(n),"auth.json")),r.push(oc.join(t,".codex","auth.json")),r.push(oc.join(t,".config","codex","auth.json")),r}function KB(e){return`${e.error}: ${e.detail}`}function jf(e=process.env){let t=e.KYNVER_CODEX_BIN?.trim()||e.CODEX_BIN?.trim()||qr();return are(t)?e.CODEX_API_KEY?.trim()?{ok:!0,creds:{codexBin:t,authSource:"api_key_env"}}:lre(e).find(n=>$B(n))?{ok:!0,creds:{codexBin:t,authSource:"oauth_local"}}:{ok:!1,error:jv,detail:"Run `codex login` on this computer, or set CODEX_API_KEY. Website chat will not fall back to hosted models."}:{ok:!1,error:Hf,detail:"`codex` CLI not found. Install the Codex CLI (https://developers.openai.com/codex/) and keep it on PATH."}}var Hf,jv,Vf=p(()=>{"use strict";So();Hf="codex_cli_unavailable",jv="codex_not_logged_in"});import{spawnSync as cre}from"node:child_process";function dre(e,t,r){return ure.test(`${t}
|
|
207
|
+
${r}`)?!1:e===0}function HB(e,t=process.env){try{let[r,n]=oe(e,["models"]),o=cre(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"}:dre(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 ure,jB=p(()=>{"use strict";Te();ure=/authentication required|not logged in|you are not logged|not authenticated/i});import{existsSync as pre,readFileSync as fre}from"node:fs";import{homedir as mre}from"node:os";import VB from"node:path";import{spawnSync as gre}from"node:child_process";function hre(e){if(VB.isAbsolute(e)||e.includes("/")||e.includes("\\"))return pre(e);try{let t=gre(process.platform==="win32"?"where":"which",[e],{windowsHide:!0,encoding:"utf8",timeout:3e3});return t.status===0&&!!t.stdout?.trim()}catch{return!1}}function yre(){return VB.join(mre(),".gemini","antigravity-cli","settings.json")}function kre(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 bre(){try{return fre(yre(),"utf8")}catch{return null}}function vre(e,t){return e.KYNVER_GEMINI_API_KEY?.trim()||e.GEMINI_API_KEY?.trim()?kre(t)==="gemini":!1}function GB(e){return`${e.error}: ${e.detail}`}function Yf(e=process.env,t={}){let r=Ct(e);if(!(t.commandOnPath??hre)(r))return{ok:!1,error:Gf,detail:"`agy` not found. Install Google Antigravity (https://antigravity.google/docs/cli/install) and keep `agy` on PATH."};if((t.probeAuth??HB)(r,e).ok)return{ok:!0,creds:{bin:r,authSource:"keyring"}};let s=(t.readSettings??(()=>bre()))(e);return vre(e,s)?{ok:!0,creds:{bin:r,authSource:"api_key_settings"}}:{ok:!1,error:Jf,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 Gf,Jf,qf=p(()=>{"use strict";Eo();jB();Gf="antigravity_cli_unavailable",Jf="antigravity_not_logged_in"});function sc(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()||Rre).replace(/\/+$/,"");return{apiKey:t,baseUrl:r,label:"gemini"}}function ic(e=process.env){let t=Hd(e);return t?{apiKey:t,baseUrl:jd(e),label:"venice"}:null}function ac(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()||wre).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 Rre,wre,Vv=p(()=>{"use strict";oi();Rre="https://generativelanguage.googleapis.com/v1beta/openai",wre="https://api.openai.com/v1"});function _re(e,t=process.env){return{anthropic:()=>{let r=nc(t,{oauthOptIn:e.chatUseClaudeOauth===!0});return r?r.kind==="oauth"?"subscription":"api_key":null},codex:()=>{let r=jf(t);return r.ok?r.creds.authSource==="api_key_env"?"api_key":"subscription":null},cursor:()=>{let r=Dd(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=Yf(r);return n.ok?n.creds.authSource==="api_key_settings"?"api_key":"subscription":null}return sc(t)?"api_key":null},openai:()=>ac(t)?"api_key":null,venice:()=>ic(t)?"api_key":null}}function xre(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:Ti(r.slice(0,n)),model:o})}return t}function Gv(e,t){let r=t?.trim();r&&!e.includes(r)&&e.push(r)}function Cre(e,t,r=process.env){let n=hr(e),o=xre(r.KYNVER_CHAT_EXTRA_MODELS),s=[];for(let i of Jv){let a=null;try{a=t[i]()}catch{a=null}if(!a)continue;let l=i===n?Uo(i,e,r):Uo(i,{},{...r,KYNVER_CHAT_MODEL:void 0}),c=[];Gv(c,l);for(let u of Sre[i])Gv(c,u);for(let u of o)u.provider===i&&Gv(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 Fi(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(lc&&lc.key===n&&r-lc.at<Ere)return lc.value;let o=Cre(e,_re(e,t),t);return lc={key:n,at:r,value:o},o}var Jv,Sre,Ere,lc,cc=p(()=>{"use strict";Tr();Hv();Vf();Xs();qf();_f();Vv();Un();Jv=["anthropic","codex","openai","gemini","venice","cursor"],Sre={anthropic:s_,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"],venice:["venice-uncensored-1-2","qwen-3-6-plus"],cursor:["composer-2.5"]};Ere=6e4,lc=null});function uc(e){if(typeof e=="string"){let n=e.indexOf(":");return n<=0?null:uc({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:Ti(t.provider),model:r}}function YB(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 qB(e,t){for(let r of Jv){if(t.includes(r))continue;let n=e.find(o=>o.provider===r);if(n)return{provider:r,model:n.defaultModel}}return null}function zB(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"";return t?Are.some(r=>r.test(t)):!1}function JB(e){return Ire[e]}function XB(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 QB(e,t){let r=`${JB(e.provider)} (${e.model})`;if(e.fallbackReason==="usage_limit")return`${t?JB(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 Are,Ire,Yv=p(()=>{"use strict";cc();Un();Are=[/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/];Ire={anthropic:"Claude",codex:"ChatGPT",openai:"ChatGPT",gemini:"Gemini",venice:"Venice",cursor:"Cursor"}});async function qt(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 qv=p(()=>{"use strict"});function eF(e){if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.type!="string"||!Pre.has(t.type)||t.type==="text"&&(typeof t.text!="string"||!t.text.trim()))}function ZB(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:dc}]}:null;if(!Array.isArray(t.content)||t.content.length===0)return null;let r=t.content[t.content.length-1];return eF(r)?{...t,content:[...t.content.slice(0,-1),{...r,cache_control:dc}]}:null}function Tre(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function Ore(e){for(let t=e.length-1;t>=0;t-=1){let r=e[t];if(!(!r||typeof r!="object"||r.role!=="user")&&!Tre(r.content))return t}return-1}function zv(e){return JSON.stringify(e??null).includes('"cache_control"')}function tF(e){if(zv(e.system)||zv(e.tools)||zv(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:dc},...t.slice(a+1)])}let r=e.system;if(typeof r=="string")r.trim()&&(r=[{type:"text",text:r,cache_control:dc}]);else if(Array.isArray(r)&&r.length>0){let i=r[r.length-1];eF(i)&&(r=[...r.slice(0,-1),{...i,cache_control:dc}])}let n=[...e.messages],o=-1;for(let i=n.length-1;i>=0;i-=1){let a=ZB(n[i]);if(a){n[i]=a,o=i;break}}let s=Ore(n)-1;if(s>=0&&s<o)for(let i=s;i>=0;i-=1){let a=ZB(n[i]);if(a){n[i]=a;break}}return{system:r,tools:t,messages:n}}var dc,Pre,rF=p(()=>{"use strict";dc={type:"ephemeral"},Pre=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 nF(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 Dre(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0}}function Mre(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 Lre(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 Bre(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*Fre(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(`
|
|
208
|
+
`))!==-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 Ure(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function oF(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:Nre},{type:"text",text:n.system}]);let i=tF({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(`${Ure()}/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=Dre();for await(let c of Fre(a.body)){let u=Lre(l,c);u?e.onDelta(u):Mre(c)&&e.onToolProgress?.()}return Bre(l)}var Nre,Xv=p(()=>{"use strict";rF();Nre="You are Claude Code, Anthropic's official CLI for Claude."});function Wre(e){let t=e?.stepTimeoutMs;if(!(typeof t!="number"||!Number.isFinite(t)||t<=0))return Math.min(72e5,Math.max(6e4,Math.round(t)))}function Ui(e,t,r=24e4){return e??Wre(t)??r}var zf=p(()=>{"use strict"});function br(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 Kre(e){let t=e.replace(/\s+/g," ").trim();return t.length>sF?`${t.slice(0,sF-1)}\u2026`:t}function aF(e,t=$re){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:","",Hn,'{"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.",`- ${Xf}`,"","Tools:"].join(`
|
|
209
209
|
`),n=[],o=r.length,s=[];for(let c of e){let u=`
|
|
210
210
|
- ${c.name}: ${Kre(c.description)}
|
|
211
211
|
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?`
|
|
212
212
|
|
|
213
|
-
[${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 Vre(e){let t=[],r=0;for(;;){let n=e.indexOf(
|
|
214
|
-
${
|
|
213
|
+
[${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 Vre(e){let t=[],r=0;for(;;){let n=e.indexOf(Hn,r);if(n===-1)break;let o=n+Hn.length,s=e.indexOf("```",o);if(s===-1||e.startsWith(Hn,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 jn(e,t){let{fences:r,unterminated:n}=Vre(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,m=typeof d?.name=="string"?d.name.trim():"";if(!m||!t.has(m)){s.push(m||"unnamed");continue}let f=d.input&&typeof d.input=="object"&&!Array.isArray(d.input)?d.input:{};o.push({name:m,input:f})}let l=null;return n&&(i+=e.slice(a,n.start),a=e.length,l={name:(jre.exec(n.body)?.[1]?.trim()??"")||null}),i+=e.slice(a),{text:i.trim(),calls:o,rejected:s,cut:l}}function iF(e,t){return`cursor_${e}_${t}`}function Vn(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:iF(t,i),name:s.name,input:s.input})}),e.cut&&n.push({type:"tool_use",id:iF(t,"cut"),name:Hre,input:{tool:e.cut.name,reason:"unterminated_fence"}}),{content:n,stop_reason:e.calls.length>0||e.cut?"tool_use":"end_turn"}}function Gre(e){let t=Math.min(e.length,Hn.length-1);for(let r=t;r>0;r-=1)if(Hn.startsWith(e.slice(e.length-r)))return r;return 0}var Hn,Xf,$re,sF,Hre,jre,kr,Wi=p(()=>{"use strict";Hn="```kynver-tool",Xf="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.";$re=64e3,sF=600;Hre="kynver_tool_call_cut",jre=/"name"\s*:\s*"([^"\\]*)"/;kr=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(Hn);if(n!==-1){r+=this.held.slice(0,n),this.held=this.held.slice(n+Hn.length),this.inFence=!0;continue}let o=Gre(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 lF(e){return`[\u2026 ${e} more characters of the user's message omitted to fit this prompt \u2026]`}function Jre(e){return`[\u2026 ${e} more characters of Kynver's turn context omitted to fit this prompt \u2026]`}function Yre(e,t){if(e.length<=t)return e;let r=e.indexOf(cF),n=r>=0?e.indexOf($i,r):-1;if(r<0||n<0)return Ki(e,t,lF);let o=e.slice(0,r),s=e.slice(r,n+$i.length),i=Ki(e.slice(n+$i.length),Math.max(0,t-o.length),lF),a=t-o.length-i.length,l=$i.length+1,c=s.slice(0,s.length-$i.length),u=s.length<=a?s:`${Ki(c,Math.max(cF.length,a-l-100),Jre)}
|
|
214
|
+
${$i}`;return`${o}${u}${i}`}function Qv(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 qre(e){return`[\u2026 ${e} more characters omitted to fit this prompt \u2026]`}function Ki(e,t,r){if(e.length<=t)return e;let n=Math.max(0,t);return`${e.slice(0,n)}
|
|
215
215
|
${r(e.length-n)}`}function dF(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(`
|
|
216
216
|
|
|
217
|
-
`);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=Yre(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?Qv:qre;r[i].kept=
|
|
217
|
+
`);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=Yre(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?Qv:qre;r[i].kept=Ki(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 uF,cF,$i,pF=p(()=>{"use strict";uF="[System reminder]";cF="<turn_context>",$i="</turn_context>"});function Qre(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(`
|
|
218
218
|
`)}function Zre(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(`
|
|
219
|
-
`).trim():""}function ene(e){let t=Zre(e);return t.length>0&&!t.startsWith(uF)}function tne(e){return Array.isArray(e)&&e.some(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function Zv(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=Qre(o.content??o.text),i=t===void 0?s:
|
|
219
|
+
`).trim():""}function ene(e){let t=Zre(e);return t.length>0&&!t.startsWith(uF)}function tne(e){return Array.isArray(e)&&e.some(t=>!!t&&typeof t=="object"&&t.type==="tool_result")}function Zv(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=Qre(o.content??o.text),i=t===void 0?s:Ki(s,t,Qv);r.push(o.is_error?`[tool error]
|
|
220
220
|
${i}`:`[tool result]
|
|
221
221
|
${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(`
|
|
222
|
-
`)}function one(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[gF,rne,"Never use runtime_command run dispatch and never implement coding tasks inline in the chat workspace when a worker was requested or dispatch failed.",hF,
|
|
222
|
+
`)}function one(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[gF,rne,"Never use runtime_command run dispatch and never implement coding tasks inline in the chat workspace when a worker was requested or dispatch failed.",hF,Xf].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[gF,`${n} Do the work there yourself and say what you ran and what you changed.`,`Local commands are only for this computer. ${Xf}`,nne,"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).",hF].join(" ")}function sne(e){return e==="assistant"?"Assistant":e==="system"?"System":"User"}function yF(e){return Zv(e)}function eR(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let o=t==="agent"?r??br(e.tools):[],s=aF(o),i=typeof n=="string"?n:n?.access,a=[],l=typeof e.system=="string"?e.system.trim():"";l&&a.push(`System:
|
|
223
223
|
${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.":one(n)),i==="off"&&a.push(Xre);let c=t==="agent"?nF(e.longJob):null;c&&a.push(`Long job in progress: step ${c.stepsUsed} of up to ${c.maxSteps} (segment ${c.segment}). Keep working through the plan \u2014 don't settle for partial data \u2014 and save progress with long_job_checkpoint after each sub-task.`),s&&a.push(s);let u=[],d=-1;if(Array.isArray(e.messages))for(let y of e.messages){if(!y||typeof y!="object")continue;let v=y,k=Zv(v.content);if(!k.trim())continue;let b=sne(v.role);v.role!=="assistant"&&v.role!=="system"&&ene(v.content)&&(d=u.length);let w=v.content;u.push({text:`${b}:
|
|
224
224
|
${k}`,ask:!1,renderShrunk:tne(w)?_=>`${b}:
|
|
225
225
|
${Zv(w,_)}`:null})}d>=0&&(u[d].ask=!0);let m=a.join(`
|
|
@@ -228,16 +228,16 @@ ${Zv(w,_)}`:null})}d>=0&&(u[d].ask=!0);let m=a.join(`
|
|
|
228
228
|
|
|
229
229
|
`);if(!u.length||m.length+2+f.length<=fF)return{head:m,body:f};let g=Math.max(zre,fF-m.length-16),h=dF(u,g-mF.length-2);return{head:m,body:h.dropped?`${mF}
|
|
230
230
|
|
|
231
|
-
${h.body}`:h.body}}function
|
|
231
|
+
${h.body}`:h.body}}function Hi(e,t=e.executionMode==="ask"?"ask":"agent",r,n){let{head:o,body:s}=eR(e,t,r,n);return s?`${o}
|
|
232
232
|
|
|
233
|
-
${s}`:o}var fF,zre,Xre,mF,gF,rne,hF,nne,
|
|
234
|
-
`):void 0}function SF(e){let t=De(e.message)?.content;return Array.isArray(t)?t.map(r=>De(r)).filter(r=>!!r):[]}function EF(e=Date.now){let t=cR(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(bne)?.[1]??1):0,h=aR(Ie(i.input.command)??"",g,a,lR(c));return u?{...h,ok:!1,reason:u}:h}let d=l||u?{reason:u??"failed"}:{},m=kne[i.name],f=Ie(i.input.file_path)??Ie(i.input.notebook_path);return m&&f?{kind:"file_change",path:f,change:m,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 SF(i)){let c=Ie(l.id),u=Ie(l.name);l.type!=="tool_use"||!c||!u||r.has(c)||n.has(c)||(r.set(c,{name:u,input:De(l.input)??{}}),t.start(c))}return[]}if(i.type!=="user")return[];let a=[];for(let l of SF(i)){let c=Ie(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,vne(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 yne,kne,bne,
|
|
235
|
-
`))!==-1;){let J=P.slice(0,L);P=P.slice(L+1),B(J)}}),g.stderr?.on("data",E=>{R+=typeof E=="string"?E:E.toString("utf8"),R.length>8e3&&(R=R.slice(-8e3));let L=
|
|
236
|
-
`))!==-1;){let V=w.slice(0,F);w=w.slice(F+1),O(V)}}),g.stderr?.on("data",M=>{S+=typeof M=="string"?M:M.toString("utf8"),S.length>8e3&&(S=S.slice(-8e3))}),g.on("close",M=>{if(w.trim()&&O(w),_){R(new Error("codex_chat_timeout"));return}if(M!==0&&!k){R(new Error(Wne(S,M)));return}R()})})}var Nne,Dne,DF=p(()=>{"use strict";
|
|
237
|
-
`))!==-1;){let re=_.slice(0,V);_=_.slice(V+1),M(re)}}),g.stderr?.on("data",F=>{w+=typeof F=="string"?F:F.toString("utf8"),w.length>8e3&&(w=w.slice(-8e3))}),g.on("close",F=>{if(_.trim()&&M(_),R){P(new Error("antigravity_chat_timeout"));return}if(!h){if(F!==0&&!k&&!b){P(new Error(jne(w,F)));return}P()}})})}var Kne,MF,BF=p(()=>{"use strict";
|
|
233
|
+
${s}`:o}var fF,zre,Xre,mF,gF,rne,hF,nne,pc=p(()=>{"use strict";Xv();Wi();pF();fF=8e4,zre=32e3,Xre="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.",mF=`[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.]`;gF="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.",rne="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).",hF="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.",nne="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."});function kF(e,t=1e4,r=Date.now){let n=0;return{noteToolBytes(){let o=r();n!==0&&o-n<t||(n=o,e())}}}var tR=p(()=>{"use strict"});function bF(e,t=1e4){let r=setInterval(e,t);return typeof r.unref=="function"&&r.unref(),()=>clearInterval(r)}var vF=p(()=>{"use strict";tR()});import{homedir as ane}from"node:os";function ji(e,t=ane()){let r=I();return xs({engine:e,local:{chatComputerAccess:r.chatComputerAccess,chatWorkFolders:r.chatWorkFolders},home:t})}var Qf=p(()=>{"use strict";$();so()});function une(e){let t=e[mg];return new Set(t?t.split(/[\s,]+/).map(r=>r.trim()).filter(Boolean):[])}function rR(e,t={}){return cne.has(e)||t.operatorAllow?.has(e)||e===oR?!1:lne.some(r=>r.test(e))}function vr(e=process.env){let t=ca(e);for(let n of nR)delete t[n];let r=une(e);for(let n of Object.keys(t))rR(n,{operatorAllow:r})&&delete t[n];return t[oR]="1",t}function RF(e){let t=e.toUpperCase();return mne.has(t)||t===oR?!0:pne.has(t)?!rR(t):fne.some(r=>t.startsWith(r))?!rR(t)&&!/(_KEY|_TOKEN|_SECRET|_PASSWORD)$/i.test(t):!1}function gne(e=process.env){let t={};for(let[n,o]of Object.entries(e))typeof o=="string"&&RF(n)&&(t[n]=o);let r=vr(t);for(let n of Object.keys(r))RF(n)||delete r[n];return r}function wF(e,t){return t==="folder"||t==="folders"?gne(e):vr(e)}function sR(){return[`--disallowedTools=${hne.join(",")}`]}var nR,oR,lne,cne,dne,pne,fne,mne,hne,jo=p(()=>{"use strict";ua();nR=["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"],oR="KYNVER_CHAT_CHILD",lne=[/_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],cne=new Set(fg);dne=["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"],pne=new Set(dne.map(e=>e.toUpperCase())),fne=["LC_","CLAUDE_CODE_","CLAUDE_","ANTHROPIC_","DISABLE_","MAX_THINKING_","BASH_DEFAULT_","BASH_MAX_"],mne=new Set(["CLAUDE_CODE_OAUTH_TOKEN"]);hne=["Read(~/.kynver/credentials)","Read(~/.kynver/credentials.*)","Read(~/.kynver/chat-box-credential)","Read(~/.kynver/site-logins/**)"]});function De(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ie(e){return typeof e=="string"&&e.trim()?e:void 0}function iR(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function aR(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 lR(...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 cR(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 _F(e=Date.now){let t=cR(e);return r=>{let n=De(r.item);if(!n)return[];let o=Ie(n.id);if(r.type==="item.started")return t.start(o),[];if(r.type!=="item.completed")return[];if(n.type==="command_execution"){let s=Ie(n.command)??"",i=iR(n.exit_code),a=aR(s,i,t.elapsed(o),lR(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=>De(a)).filter(a=>!!a&&!!Ie(a.path)).map(a=>({kind:"file_change",path:Ie(a.path),...Ie(a.kind)?{change:Ie(a.kind)}:{},durationMs:s,ok:i,...i?{}:{reason:"failed"}}))}return[]}}function xF(e=Date.now){let t=cR(e);return r=>{if(r.type!=="tool_call")return[];let n=Ie(r.call_id);if(r.subtype==="started")return t.start(n),[];if(r.subtype!=="completed")return[];let o=De(r.tool_call);if(!o)return[];let s=t.elapsed(n),i=De(o.shellToolCall);if(i){let a=De(i.result),l=De(a?.success)??De(a?.failure),c=Ie(De(i.args)?.command)??Ie(l?.command)??"",u=iR(l?.exitCode)??(a?.failure?1:null),d=iR(l?.executionTime)??s;return[aR(c,u,d,lR(l?.stdout,l?.stderr))]}for(let[a,l]of Object.entries(yne)){let c=De(o[a]);if(!c)continue;let u=De(c.result),d=Ie(De(c.args)?.path)??Ie(De(u?.success)?.path);if(!d)return[];let m=!u?.failure;return[{kind:"file_change",path:d,change:l,durationMs:s,ok:m,...m?{}:{reason:"failed"}}]}return[]}}function CF(){return e=>{if(e.event!=="step_update")return[];let t=De(e.step_update);if(!t||t.step_type!=="tool")return[];let r=Ie(t.tool_name);return r?[{kind:"tool",command:r.trim(),ok:!0}]:[]}}function vne(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=e.map(r=>De(r)).filter(r=>!!r&&typeof r.text=="string").map(r=>r.text);return t.length?t.join(`
|
|
234
|
+
`):void 0}function SF(e){let t=De(e.message)?.content;return Array.isArray(t)?t.map(r=>De(r)).filter(r=>!!r):[]}function EF(e=Date.now){let t=cR(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(bne)?.[1]??1):0,h=aR(Ie(i.input.command)??"",g,a,lR(c));return u?{...h,ok:!1,reason:u}:h}let d=l||u?{reason:u??"failed"}:{},m=kne[i.name],f=Ie(i.input.file_path)??Ie(i.input.notebook_path);return m&&f?{kind:"file_change",path:f,change:m,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 SF(i)){let c=Ie(l.id),u=Ie(l.name);l.type!=="tool_use"||!c||!u||r.has(c)||n.has(c)||(r.set(c,{name:u,input:De(l.input)??{}}),t.start(c))}return[]}if(i.type!=="user")return[];let a=[];for(let l of SF(i)){let c=Ie(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,vne(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 yne,kne,bne,fc=p(()=>{"use strict";yne={writeToolCall:"write",editToolCall:"update",deleteToolCall:"delete"};kne={Write:"write",Edit:"update",MultiEdit:"update",NotebookEdit:"update"},bne=/exit code (\d+)/i});function Rr(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function AF(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 IF(e){let t=Rr(e.type);if(!t)return null;if(t==="interactionUpdate"||t==="interaction_update"){let r=Rr(e.subtype)??Rr(e.updateType),n=Rr(e.blockReasonType)??Rr(e.blockReason?.type),o=AF(e.approvalReasonTypes)??AF(e.approval?.reasonTypes),s=Rr(e.toolCallId)??Rr(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=Rr(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=Rr(e.toolCallId)??Rr(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 Zf(e){if(!wne.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 em(e){let t=[Rne];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 Rne,wne,PF=p(()=>{"use strict";Rne="cursor_tool_approval_blocked",wne=/blockReasonType[=:]\s*(\w+)|userRejected|Shell approval gate|approvalReasonTypes|unapproved_commands/i});function tm(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 TF=p(()=>{"use strict"});import{spawn as Sne}from"node:child_process";function uR(e){return e==="ask"?"ask":"agent"}function Ene(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 Ane(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 Ine(e){return e.type!=="result"?"":typeof e.result=="string"?e.result:""}function dR(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 pR(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 Pne(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 Tne(e,t){if(Cne.test(e))return`${Oy}: ${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 OF(e){let t=e.env??process.env,r=e.access??ji("cursor"),n=e.workspaceDir??r.workDir,o=xF(),s=uR(e.payload.executionMode),i=s==="agent"?br(e.payload.tools):[],a=new Set(i.map(m=>m.name)),l=Hi(e.payload,s,i,r),c=e.spawnTarget;if(!c){let m=vo(t),f=tl(m);c={executable:f.executable,prefixArgs:f.prefixArgs}}let u=Ene(e.model,n,l,c.prefixArgs,s),d={...vr(t),CI:"1",NO_COLOR:"1"};return await new Promise((m,f)=>{let g;try{let E=X({cwd:n,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:d});g=Sne(c.executable,u,E)}catch(E){if(E.code==="ENOENT"){f(new Error(`${Nd}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}f(E instanceof Error?E:new Error(String(E)));return}let h=e.onToolProgress?bF(e.onToolProgress,e.heartbeatMs):()=>{},y=!1,v=new kr,k="",b=E=>{let L=v.push(E);L&&(k+=L,e.onDelta(L))},S="",w="",_={input_tokens:0,output_tokens:0},R="",P="",N=!1,x=!1,O,M=Zf(R),F=null,V=E=>{if(y)return;if(y=!0,h(),clearTimeout(j),O&&clearTimeout(O),e.signal?.removeEventListener("abort",C),E){tm({requestId:e.requestId,turnId:e.turnId,event:"turn_error",exitCode:F,error:E.message,...M?.toolCallId?{toolCallId:M.toolCallId}:{},...M?.toolName?{toolName:M.toolName}:{},...M?.blockReasonType?{blockReason:M.blockReasonType}:{}}),f(E);return}let L=Zf(R);if(L&&(M=L),M){let q=new Error(em(M));tm({requestId:e.requestId,turnId:e.turnId,event:"turn_approval_blocked",exitCode:F,toolCallId:M.toolCallId,toolName:M.toolName,blockReason:M.blockReasonType,error:q.message}),f(q);return}let J=v.end();J&&(k+=J,e.onDelta(J));let ae=dR(S,w),se=jn(ae,a);pR(se.text,k,e.onDelta),se.rejected.length>0&&console.error(JSON.stringify({event:"cursor_tool_call_rejected",names:se.rejected.slice(0,5),advertised:a.size}));let{content:Pe,stop_reason:ee}=Vn(se,e.turnId??"turn");tm({requestId:e.requestId,turnId:e.turnId,event:"turn_end",exitCode:F,stopReason:ee}),m({content:Pe,stop_reason:ee,usage:_})},re=E=>{g.pid?he(g.pid,E):ct(g,E)},T=()=>{re("SIGTERM"),O??=setTimeout(()=>{x||re("SIGKILL")},xne),O.unref()},C=()=>{T(),V(new Error("cursor_chat_aborted"))},j=setTimeout(()=>{N=!0,T()},Ui(e.timeoutMs,e.payload,_ne));if(g.on("error",E=>{if(E.code==="ENOENT"){V(new Error(`${Nd}: failed to spawn \`${c.executable}\`. Install the Cursor Agent CLI and keep \`agent\` on PATH.`));return}V(E)}),e.signal){if(e.signal.aborted){C();return}e.signal.addEventListener("abort",C)}let B=E=>{let L=E.trim();if(!L)return;let J;try{J=JSON.parse(L)}catch{return}let ae=Ane(J,S);ae&&(S+=ae,b(ae));let se=Ine(J);se&&(w=se);let Pe=Pne(J);if(Pe&&(_=Pe),e.onActivity)for(let q of o(J))e.onActivity(q);let ee=IF(J);ee&&(M=ee,T(),V(new Error(em(ee))))};g.stdout?.on("data",E=>{P+=typeof E=="string"?E:E.toString("utf8");let L;for(;(L=P.indexOf(`
|
|
235
|
+
`))!==-1;){let J=P.slice(0,L);P=P.slice(L+1),B(J)}}),g.stderr?.on("data",E=>{R+=typeof E=="string"?E:E.toString("utf8"),R.length>8e3&&(R=R.slice(-8e3));let L=Zf(R);L&&(M=L,T(),V(new Error(em(L))))}),g.on("close",E=>{if(x=!0,F=E,P.trim()&&B(P),N){V(new Error("cursor_chat_timeout"));return}if(E!==0&&!S&&!w){V(new Error(Tne(R,E)));return}V()})})}var _ne,xne,Cne,rm=p(()=>{"use strict";zf();zs();U();pc();vF();Qf();jo();fc();Xs();Wi();PF();TF();_ne=24e4,xne=1500,Cne=/not logged in|please run[`\s]+agent login|authentication required|unauthorized|invalid api key/i});import{spawn as One}from"node:child_process";function Mne(e){return e==="ask"?"ask":"agent"}function Lne(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 Bne(e,t,r="agent",n=[],o=process.platform,s){return[...n,"exec",...Bd(o),"--skip-git-repo-check","--json","--ask-for-approval","never",...Lne(r,s),"--model",e,t]}function Fne(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 Une(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 Wne(e,t){if(Dne.test(e))return`${jv}: ${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 NF(e){let t=e.env??process.env,r=e.access??ji("codex"),n=e.workspaceDir??r.workDir,o=Mne(e.payload.executionMode),s=o==="agent"?br(e.payload.tools):[],i=new Set(s.map(m=>m.name)),a=Hi(e.payload,o,s,r),l=_F(),c=e.spawnTarget??{executable:t.KYNVER_CODEX_BIN?.trim()||t.CODEX_BIN?.trim()||qr(),prefixArgs:[]},u=Bne(e.model,a,o,c.prefixArgs,process.platform,r),d={...vr(t),CI:"1",NO_COLOR:"1"};return await new Promise((m,f)=>{let g;try{let M=X({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[F,V]=oe(c.executable,u);g=One(F,V,M)}catch(M){if(M.code==="ENOENT"){f(new Error(`${Hf}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}f(M instanceof Error?M:new Error(String(M)));return}let h=!1,y=new kr,v=M=>{let F=y.push(M);F&&e.onDelta(F)},k="",b={input_tokens:0,output_tokens:0},S="",w="",_=!1,R=M=>{if(h)return;if(h=!0,clearTimeout(x),e.signal?.removeEventListener("abort",N),M){f(M);return}let F=y.end();F&&e.onDelta(F);let V=jn(k,i);V.rejected.length>0&&console.error(JSON.stringify({event:"codex_tool_call_rejected",names:V.rejected.slice(0,5),advertised:i.size})),m({...Vn(V,e.turnId??"turn"),usage:b})},P=()=>ct(g,"SIGTERM"),N=()=>{P(),R(new Error("codex_chat_aborted"))},x=setTimeout(()=>{_=!0,P()},Ui(e.timeoutMs,e.payload,Nne));if(g.on("error",M=>{if(M.code==="ENOENT"){R(new Error(`${Hf}: failed to spawn \`${c.executable}\`. Install the Codex CLI and keep \`codex\` on PATH.`));return}R(M)}),e.signal){if(e.signal.aborted){N();return}e.signal.addEventListener("abort",N)}let O=M=>{let F=M.trim();if(!F)return;let V;try{V=JSON.parse(F)}catch{return}let re=Fne(V,k);re&&(k+=re,v(re));let T=Une(V);if(T&&(b=T),e.onActivity)for(let C of l(V))e.onActivity(C)};g.stdout?.on("data",M=>{w+=typeof M=="string"?M:M.toString("utf8");let F;for(;(F=w.indexOf(`
|
|
236
|
+
`))!==-1;){let V=w.slice(0,F);w=w.slice(F+1),O(V)}}),g.stderr?.on("data",M=>{S+=typeof M=="string"?M:M.toString("utf8"),S.length>8e3&&(S=S.slice(-8e3))}),g.on("close",M=>{if(w.trim()&&O(w),_){R(new Error("codex_chat_timeout"));return}if(M!==0&&!k){R(new Error(Wne(S,M)));return}R()})})}var Nne,Dne,DF=p(()=>{"use strict";zf();So();Wy();U();Te();pc();Qf();fc();Vf();jo();Wi();Nne=24e4,Dne=/not logged in|please run[`\s]+codex login|authentication required|unauthorized|invalid api key|401\b/i});import{spawn as $ne}from"node:child_process";function Hne(e,t,r="agent",n=[]){return[...n,...Kd({executionMode:r==="ask"?"read_only":"write",prompt:t},e)]}function jne(e,t){if(MF.test(e))return`${Jf}: ${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 LF(e){let t=e.env??process.env,r=e.access??ji("antigravity"),n=e.workspaceDir??r.workDir,o=CF(),s=uR(e.payload.executionMode),i=s==="agent"?br(e.payload.tools):[],a=new Set(i.map(m=>m.name)),l=Hi(e.payload,s,i,r),c=e.spawnTarget??{executable:Ct(t),prefixArgs:[]},u=Hne(e.model,l,s,c.prefixArgs),d={...vr(t),CI:"1",NO_COLOR:"1"};return await new Promise((m,f)=>{let g;try{let F=X({cwd:n,detached:!1,shell:!1,stdio:["ignore","pipe","pipe"],env:d}),[V,re]=oe(c.executable,u);g=$ne(V,re,F)}catch(F){if(F.code==="ENOENT"){f(new Error(`${Gf}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}f(F instanceof Error?F:new Error(String(F)));return}let h=!1,y=new kr,v=F=>{let V=y.push(F);V&&e.onDelta(V)},k="",b="",S={input_tokens:0,output_tokens:0},w="",_="",R=!1,P=F=>{if(h)return;if(h=!0,clearTimeout(O),e.signal?.removeEventListener("abort",x),F){f(F);return}let V=b.length>=k.length&&b?b:k;b.startsWith(k)&&b.length>k.length?v(b.slice(k.length)):!k&&b&&v(b);let re=y.end();re&&e.onDelta(re);let T=jn(V,a);m({...Vn(T,e.turnId??"turn"),usage:S})},N=()=>ct(g,"SIGTERM"),x=()=>{N(),P(new Error("antigravity_chat_aborted"))},O=setTimeout(()=>{R=!0,N()},Ui(e.timeoutMs,e.payload,Kne));if(g.on("error",F=>{if(F.code==="ENOENT"){P(new Error(`${Gf}: failed to spawn \`${c.executable}\`. Install Google Antigravity and keep \`agy\` on PATH.`));return}P(F)}),e.signal){if(e.signal.aborted){x();return}e.signal.addEventListener("abort",x)}let M=F=>{let V=F.trim();if(!V)return;let re;try{re=JSON.parse(V)}catch{return}if(e.onActivity)for(let C of o(re))e.onActivity(C);let T=lu(re);if(T&&(T.textDelta&&(k+=T.textDelta,v(T.textDelta)),T.usage&&(S={input_tokens:T.usage.inputTokens??S.input_tokens,output_tokens:T.usage.outputTokens??S.output_tokens}),!!T.terminal)){if(!T.terminal.ok){let C=T.terminal.error??"antigravity cli result error";if(N(),MF.test(C)){P(new Error(`${Jf}: ${C.slice(0,240)}`));return}P(new Error(`antigravity_chat_failed: ${C.slice(0,240)}`));return}b=T.terminal.finalResult??""}};g.stdout?.on("data",F=>{_+=typeof F=="string"?F:F.toString("utf8");let V;for(;(V=_.indexOf(`
|
|
237
|
+
`))!==-1;){let re=_.slice(0,V);_=_.slice(V+1),M(re)}}),g.stderr?.on("data",F=>{w+=typeof F=="string"?F:F.toString("utf8"),w.length>8e3&&(w=w.slice(-8e3))}),g.on("close",F=>{if(_.trim()&&M(_),R){P(new Error("antigravity_chat_timeout"));return}if(!h){if(F!==0&&!k&&!b){P(new Error(jne(w,F)));return}P()}})})}var Kne,MF,BF=p(()=>{"use strict";zf();Eo();Tg();U();Te();qf();pc();Qf();jo();fc();rm();Wi();Kne=24e4,MF=/authentication required|not logged in|you are not logged|not authenticated/i});function Vne(){return{text:"",toolCalls:[],finishReason:null,promptTokens:0,completionTokens:0}}function Gne(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 Jne(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 Yne(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 qne(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text).join(`
|
|
238
238
|
`):""}function zne(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:qne(i.content)}),o.push(...Yne(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(`
|
|
239
239
|
`)}),r}function Xne(e,t){let r=[];e.trim()&&r.push({role:"system",content:e});for(let n of t)r.push(...zne(n??{}));return r}function Qne(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*Zne(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(`
|
|
240
|
-
`))!==-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 FF(e){let{creds:t,model:r,payload:n}=e,o=Array.isArray(n.tools)?Qne(n.tools):[],s={model:r,messages:Xne(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=Vne();for await(let l of Zne(i.body)){let c=Gne(a,l);c&&e.onDelta(c)}return Jne(a)}var UF=p(()=>{"use strict"});function WF(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.session!="string"||!eoe.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 $F(e){let t=typeof e.maxMs=="number"&&e.maxMs>0?e.maxMs:48e4;return Math.max(0,Math.min(t,e.timeLeftMs))}var eoe,
|
|
240
|
+
`))!==-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 FF(e){let{creds:t,model:r,payload:n}=e,o=Array.isArray(n.tools)?Qne(n.tools):[],s={model:r,messages:Xne(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=Vne();for await(let l of Zne(i.body)){let c=Gne(a,l);c&&e.onDelta(c)}return Jne(a)}var UF=p(()=>{"use strict"});function WF(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.session!="string"||!eoe.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 $F(e){let t=typeof e.maxMs=="number"&&e.maxMs>0?e.maxMs:48e4;return Math.max(0,Math.min(t,e.timeLeftMs))}var eoe,nm=p(()=>{"use strict";eoe=/^[A-Za-z0-9_.:-]{1,128}$/});function toe(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 KF,HF=p(()=>{"use strict";KF=toe()});function roe(e,t,r=[]){if(e.access==="off")throw new Error("claude_code_access_off");return e.access==="full"?["--permission-mode","bypassPermissions",...sR()]:["--permission-mode","acceptEdits",`--allowedTools=${[...t?.shell==="disabled"?jF.filter(o=>o!=="Bash"):jF,...r].join(",")}`,...sR(),...t?["--settings",t.settingsFile]:[],...e.access==="folders"?e.extraFolders.flatMap(o=>["--add-dir",o]):[]]}function fR(e){return["-p","--output-format","stream-json","--include-partial-messages","--verbose",...e.model?["--model",e.model,...au(e.fallbackModel)]:[],"--append-system-prompt-file",e.systemPromptFile,...e.resumeSessionId?["--resume",e.resumeSessionId]:[],...e.mcp?["--mcp-config",e.mcp.configFile]:[],...roe(e.access,e.sandbox,e.mcp?.allowedTools??[]),"--",e.prompt]}var jF,VF=p(()=>{"use strict";jo();Tr();jF=["Bash","WebFetch","WebSearch"]});import{lookup as noe}from"node:dns/promises";import{createServer as ooe,request as soe}from"node:http";import{connect as ioe,isIP as YF,isIPv4 as aoe}from"node:net";function qF(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 mc(e){let t=qF(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 coe(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=qF(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 uoe(e){let t=coe(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 mc(n(t[6],t[7]));if(t[0]===8194)return mc(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 GF(e){let t=YF(e);return t===4?mc(e):t===6?uoe(e):!0}function doe(e){return e==="localhost"||e.endsWith(".localhost")||e==="localhost6"||e==="ip6-localhost"}function poe(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 zF(e){return(await noe(e,{all:!0})).map(r=>r.address)}async function JF(e,t=zF){let r=poe(e);if(!r||r.length>loe)return{allowed:!1,host:r,reason:"invalid host"};if(doe(r))return{allowed:!1,host:r,reason:`${r} is this computer (loopback): local services are not reachable from a folder step`};if(YF(r))return GF(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=>GF(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=>aoe(s))??n[0]}}function mR(e,t,r){let n=`Kynver folder sandbox: ${r}
|
|
241
241
|
`;e.write(`HTTP/1.1 ${t} ${t===gR?"Forbidden":"Bad Gateway"}\r
|
|
242
242
|
Content-Type: text/plain\r
|
|
243
243
|
Content-Length: ${Buffer.byteLength(n)}\r
|
|
@@ -249,17 +249,17 @@ ${n}`),e.end()}function moe(e){if(!e)return null;let t=e.lastIndexOf(":");if(t<=
|
|
|
249
249
|
`);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
|
|
250
250
|
`);return}let y=h.port?Number(h.port):80;JF(h.hostname,t).then(v=>{if(!v.allowed){o.denied+=1,g.writeHead(gR,{"Content-Type":"text/plain",Connection:"close"}).end(`Kynver folder sandbox: ${v.reason}
|
|
251
251
|
`);return}o.allowed+=1;let k={...f.headers};delete k["proxy-connection"],delete k["proxy-authorization"];let b=soe({host:v.address,port:y,method:f.method,path:`${h.pathname}${h.search}`,headers:k,setHost:!1,createConnection:()=>r(v.address,y,v.host)},S=>{g.writeHead(S.statusCode??502,S.headers),S.pipe(g)});b.setTimeout(n,()=>b.destroy(new Error("idle"))),b.on("error",S=>{g.headersSent||g.writeHead(502,{"Content-Type":"text/plain"}),g.end(`Kynver folder sandbox: could not reach ${v.host}:${y} (${S.code??S.message})
|
|
252
|
-
`)}),f.pipe(b)})},a=()=>{let f=ooe(i);return f.on("connect",s),f.on("clientError",(g,h)=>h.destroy()),f.unref(),f},l=a(),c=await new Promise((f,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}f(h.port)})}),u=a(),m=await new Promise(f=>{u.once("error",()=>f(!1)),u.listen(c,"::1",()=>f(!0))})?[l,u]:[l];return{port:c,listening:()=>l.listening,counts:()=>({...o}),close:()=>Promise.all(m.map(f=>new Promise(g=>f.close(()=>g())))).then(()=>{})}}async function XF(e={}){return Hi?.listening()?Hi:(nm||(nm=goe(e).then(t=>(Hi=t,fc=null,t)).catch(t=>{throw Hi=null,fc=`egress proxy could not start: ${t?.message??String(t)}`.slice(0,240),new Error(fc)}).finally(()=>{nm=null})),nm)}function QF(){return Hi?.listening()?{status:"running",port:Hi.port}:fc?{status:"failed",reason:fc}:{status:"not_started"}}var loe,foe,gR,Hi,nm,fc,hR=p(()=>{"use strict";loe=253;foe=10*6e4,gR=403;Hi=null,nm=null,fc=null});import{existsSync as hoe}from"node:fs";import sm from"node:path";function kR(e=process.env,t={}){let r=(e[yoe]??t.chatFolderSandbox??"").toString().trim().toLowerCase();return r==="best-effort"||r==="best_effort"||r==="optional"?"best_effort":"required"}function rU(e=process.env,t={}){let r=[],n=e[koe];n&&r.push(...n.split(/[\s,]+/)),Array.isArray(t.chatFolderSandboxDomains)&&r.push(...t.chatFolderSandboxDomains.filter(s=>typeof s=="string"));let o=[...boe];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 om(e){return`~/${e}`}function woe(){let e=[];for(let t of im)e.push(`Read(${om(t)}/**)`,`Edit(${om(t)}/**)`);for(let t of am)e.push(`Read(${om(t)})`,`Edit(${om(t)})`);for(let t of ji)e.push(`Read(//**/${t})`,`Edit(//**/${t})`);return e}function Soe(e,t=[],r={}){let n=["~/",...Roe];for(let o of im)n.push(`~/${o}`);for(let o of am)n.push(`~/${o}`);for(let o of t)n.push(yR(o));if(r.scanComplete!==!0)for(let o of e)for(let s of ji)n.push(sm.posix.join(yR(o),"**",s));return n}function _oe(e){return[...e.map(yR),...voe.map(t=>`~/${t}`)]}function yR(e){return e.split(sm.sep).join("/")}function ZF(e){let t={deny:woe(),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:Soe(e.folders,e.sensitiveFiles,{scanComplete:e.sensitiveScanComplete}),allowRead:_oe(e.folders)},network:{allowedDomains:e.domains,allowLocalBinding:!0,...typeof r=="number"&&r>0?{httpProxyPort:r}:{}}}}}function nU(e){return!!e&&xoe.test(e)}function Coe(e,t,r){return(t.PATH??"").split(sm.delimiter).filter(Boolean).some(o=>r(sm.join(o,e)))}function Eoe(e={}){let t=e.platform??process.platform,r=e.env??process.env,n=e.exists??hoe;if(t==="darwin")return{kind:"seatbelt",available:!0,missing:[]};if(t==="linux"){let o=["bwrap","socat"].filter(s=>!Coe(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 bR(){return eU??=Eoe(),eU}function sU(e){oU=e.trim().slice(0,240)||"sandbox failed to start"}function vR(){return oU}function iU(e){return e.streamed.trim()||e.exitCode===0||e.numTurns!==null&&e.numTurns>0?!1:Aoe.test(e.detail)&&Ioe.test(e.detail)}function aU(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:ZF({folders:t,sandbox:!0,domains:e.domains,egressProxyPort:o,sensitiveFiles:e.sensitiveFiles,sensitiveScanComplete:e.sensitiveScanComplete}),note:o?`${tU} ${Poe}`:`${tU} ${Toe}`}}let n=ZF({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:Noe}:{shell:"disabled",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:Ooe}}function lm(e=process.env,t={},r={}){let n=r.runtime??bR(),o=r.startupFailure===void 0?vR():r.startupFailure,s=kR(e,t),i=n.available?o??void 0:n.reason,a=i?s==="best_effort"?"unconfined":"disabled":"sandboxed",l=r.egress??QF(),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 yoe,koe,boe,im,am,ji,voe,Roe,jo,xoe,eU,oU,Aoe,Ioe,tU,Poe,Toe,Ooe,Noe,mc=p(()=>{"use strict";hR();yoe="KYNVER_CHAT_FOLDER_SANDBOX",koe="KYNVER_CHAT_FOLDER_SANDBOX_DOMAINS";boe=["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"];im=[".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"],am=[".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"],ji=[".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.*"],voe=[".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"],Roe=["/home","/root","/Users","/mnt","/media","/Volumes"];jo=3128,xoe=new RegExp([`failed to connect to (?:localhost|127\\.0\\.0\\.1|::1|\\[::1\\]) port ${jo}\\b`,`(?:localhost|127\\.0\\.0\\.1|\\[::1\\]|::1):${jo}\\b[^\\n]{0,80}?(?:connection refused|econnrefused)`,`(?:connection refused|econnrefused)[^\\n]{0,80}?(?:localhost|127\\.0\\.0\\.1|::1):${jo}\\b`,`(?:cannot|could not|unable to) connect to proxy[^\\n]{0,80}?${jo}\\b`,`proxyerror[^\\n]{0,120}?${jo}\\b`].join("|"),"i");eU=null;oU=null;Aoe=/sandbox/i,Ioe=/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;tU="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.",Poe="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.",Toe="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.",Ooe="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.",Noe="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 Doe}from"node:fs/promises";import RR from"node:path";function wR(e){let t=e.map(r=>r.split("*").map(n=>n.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*"));return new RegExp(`^(?:${t.join("|")})$`,"i")}async function cU(e,t,r={}){let n=r.now??Date.now,o=n(),s=r.maxEntries??Moe,i=r.maxMs??Loe,a=r.maxResults??Boe,l=wR(t),c=new Set,u=[...new Set(e.map(g=>RR.resolve(g)))],d=0,m=!1,f=()=>d>=s||n()-o>i||c.size>=a;for(;u.length;){let g=[];for(let h=0;h<u.length;h+=lU){if(f()){m=!0;break}let y=u.slice(h,h+lU),v=await Promise.all(y.map(k=>Doe(k,{withFileTypes:!0}).then(b=>({dir:k,entries:b}),b=>(Foe.has(b?.code??"")||(m=!0),{dir:k,entries:[]}))));for(let{dir:k,entries:b}of v)for(let S of b){if(d>=s){m=!0;break}d+=1;let w=RR.join(k,S.name);l.test(S.name)?c.add(Uoe(w)):S.isDirectory()&&!S.isSymbolicLink()&&g.push(w)}}if(m)break;if(u=g,u.length&&f()){m=!0;break}}return{paths:[...c].sort(),scanned:d,truncated:m,durationMs:n()-o}}function Uoe(e){return e.split(RR.sep).join("/")}var Moe,Loe,Boe,lU,Foe,SR=p(()=>{"use strict";Moe=25e4,Loe=15e3,Boe=2e3,lU=64,Foe=new Set(["ENOENT","EACCES","EPERM","ENOTDIR"])});import{spawn as Woe}from"node:child_process";import{mkdirSync as $oe,mkdtempSync as Koe,rmSync as Hoe,writeFileSync as cm}from"node:fs";import{tmpdir as joe}from"node:os";import Vo from"node:path";function ese(){return{".curlrc":`retry = 5
|
|
252
|
+
`)}),f.pipe(b)})},a=()=>{let f=ooe(i);return f.on("connect",s),f.on("clientError",(g,h)=>h.destroy()),f.unref(),f},l=a(),c=await new Promise((f,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}f(h.port)})}),u=a(),m=await new Promise(f=>{u.once("error",()=>f(!1)),u.listen(c,"::1",()=>f(!0))})?[l,u]:[l];return{port:c,listening:()=>l.listening,counts:()=>({...o}),close:()=>Promise.all(m.map(f=>new Promise(g=>f.close(()=>g())))).then(()=>{})}}async function XF(e={}){return Vi?.listening()?Vi:(om||(om=goe(e).then(t=>(Vi=t,gc=null,t)).catch(t=>{throw Vi=null,gc=`egress proxy could not start: ${t?.message??String(t)}`.slice(0,240),new Error(gc)}).finally(()=>{om=null})),om)}function QF(){return Vi?.listening()?{status:"running",port:Vi.port}:gc?{status:"failed",reason:gc}:{status:"not_started"}}var loe,foe,gR,Vi,om,gc,hR=p(()=>{"use strict";loe=253;foe=10*6e4,gR=403;Vi=null,om=null,gc=null});import{existsSync as hoe}from"node:fs";import im from"node:path";function kR(e=process.env,t={}){let r=(e[yoe]??t.chatFolderSandbox??"").toString().trim().toLowerCase();return r==="best-effort"||r==="best_effort"||r==="optional"?"best_effort":"required"}function rU(e=process.env,t={}){let r=[],n=e[koe];n&&r.push(...n.split(/[\s,]+/)),Array.isArray(t.chatFolderSandboxDomains)&&r.push(...t.chatFolderSandboxDomains.filter(s=>typeof s=="string"));let o=[...boe];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 sm(e){return`~/${e}`}function woe(){let e=[];for(let t of am)e.push(`Read(${sm(t)}/**)`,`Edit(${sm(t)}/**)`);for(let t of lm)e.push(`Read(${sm(t)})`,`Edit(${sm(t)})`);for(let t of Gi)e.push(`Read(//**/${t})`,`Edit(//**/${t})`);return e}function Soe(e,t=[],r={}){let n=["~/",...Roe];for(let o of am)n.push(`~/${o}`);for(let o of lm)n.push(`~/${o}`);for(let o of t)n.push(yR(o));if(r.scanComplete!==!0)for(let o of e)for(let s of Gi)n.push(im.posix.join(yR(o),"**",s));return n}function _oe(e){return[...e.map(yR),...voe.map(t=>`~/${t}`)]}function yR(e){return e.split(im.sep).join("/")}function ZF(e){let t={deny:woe(),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:Soe(e.folders,e.sensitiveFiles,{scanComplete:e.sensitiveScanComplete}),allowRead:_oe(e.folders)},network:{allowedDomains:e.domains,allowLocalBinding:!0,...typeof r=="number"&&r>0?{httpProxyPort:r}:{}}}}}function nU(e){return!!e&&xoe.test(e)}function Coe(e,t,r){return(t.PATH??"").split(im.delimiter).filter(Boolean).some(o=>r(im.join(o,e)))}function Eoe(e={}){let t=e.platform??process.platform,r=e.env??process.env,n=e.exists??hoe;if(t==="darwin")return{kind:"seatbelt",available:!0,missing:[]};if(t==="linux"){let o=["bwrap","socat"].filter(s=>!Coe(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 bR(){return eU??=Eoe(),eU}function sU(e){oU=e.trim().slice(0,240)||"sandbox failed to start"}function vR(){return oU}function iU(e){return e.streamed.trim()||e.exitCode===0||e.numTurns!==null&&e.numTurns>0?!1:Aoe.test(e.detail)&&Ioe.test(e.detail)}function aU(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:ZF({folders:t,sandbox:!0,domains:e.domains,egressProxyPort:o,sensitiveFiles:e.sensitiveFiles,sensitiveScanComplete:e.sensitiveScanComplete}),note:o?`${tU} ${Poe}`:`${tU} ${Toe}`}}let n=ZF({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:Noe}:{shell:"disabled",policy:e.policy,runtime:e.runtime,reason:r,settings:n,note:Ooe}}function cm(e=process.env,t={},r={}){let n=r.runtime??bR(),o=r.startupFailure===void 0?vR():r.startupFailure,s=kR(e,t),i=n.available?o??void 0:n.reason,a=i?s==="best_effort"?"unconfined":"disabled":"sandboxed",l=r.egress??QF(),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 yoe,koe,boe,am,lm,Gi,voe,Roe,Vo,xoe,eU,oU,Aoe,Ioe,tU,Poe,Toe,Ooe,Noe,hc=p(()=>{"use strict";hR();yoe="KYNVER_CHAT_FOLDER_SANDBOX",koe="KYNVER_CHAT_FOLDER_SANDBOX_DOMAINS";boe=["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"];am=[".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"],lm=[".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"],Gi=[".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.*"],voe=[".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"],Roe=["/home","/root","/Users","/mnt","/media","/Volumes"];Vo=3128,xoe=new RegExp([`failed to connect to (?:localhost|127\\.0\\.0\\.1|::1|\\[::1\\]) port ${Vo}\\b`,`(?:localhost|127\\.0\\.0\\.1|\\[::1\\]|::1):${Vo}\\b[^\\n]{0,80}?(?:connection refused|econnrefused)`,`(?:connection refused|econnrefused)[^\\n]{0,80}?(?:localhost|127\\.0\\.0\\.1|::1):${Vo}\\b`,`(?:cannot|could not|unable to) connect to proxy[^\\n]{0,80}?${Vo}\\b`,`proxyerror[^\\n]{0,120}?${Vo}\\b`].join("|"),"i");eU=null;oU=null;Aoe=/sandbox/i,Ioe=/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;tU="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.",Poe="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.",Toe="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.",Ooe="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.",Noe="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 Doe}from"node:fs/promises";import RR from"node:path";function wR(e){let t=e.map(r=>r.split("*").map(n=>n.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join(".*"));return new RegExp(`^(?:${t.join("|")})$`,"i")}async function cU(e,t,r={}){let n=r.now??Date.now,o=n(),s=r.maxEntries??Moe,i=r.maxMs??Loe,a=r.maxResults??Boe,l=wR(t),c=new Set,u=[...new Set(e.map(g=>RR.resolve(g)))],d=0,m=!1,f=()=>d>=s||n()-o>i||c.size>=a;for(;u.length;){let g=[];for(let h=0;h<u.length;h+=lU){if(f()){m=!0;break}let y=u.slice(h,h+lU),v=await Promise.all(y.map(k=>Doe(k,{withFileTypes:!0}).then(b=>({dir:k,entries:b}),b=>(Foe.has(b?.code??"")||(m=!0),{dir:k,entries:[]}))));for(let{dir:k,entries:b}of v)for(let S of b){if(d>=s){m=!0;break}d+=1;let w=RR.join(k,S.name);l.test(S.name)?c.add(Uoe(w)):S.isDirectory()&&!S.isSymbolicLink()&&g.push(w)}}if(m)break;if(u=g,u.length&&f()){m=!0;break}}return{paths:[...c].sort(),scanned:d,truncated:m,durationMs:n()-o}}function Uoe(e){return e.split(RR.sep).join("/")}var Moe,Loe,Boe,lU,Foe,SR=p(()=>{"use strict";Moe=25e4,Loe=15e3,Boe=2e3,lU=64,Foe=new Set(["ENOENT","EACCES","EPERM","ENOTDIR"])});import{spawn as Woe}from"node:child_process";import{mkdirSync as $oe,mkdtempSync as Koe,rmSync as Hoe,writeFileSync as um}from"node:fs";import{tmpdir as joe}from"node:os";import Go from"node:path";function ese(){return{".curlrc":`retry = 5
|
|
253
253
|
retry-connrefused
|
|
254
254
|
retry-delay = 1
|
|
255
255
|
`,".wgetrc":`tries = 5
|
|
256
256
|
retry_connrefused = on
|
|
257
257
|
waitretry = 1
|
|
258
258
|
`}}function rse(){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 ${tse} ]; 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(`
|
|
259
|
-
`)}function nse(e){let t=
|
|
260
|
-
${n}`:"Continue."}function pse(e){return e.streamed.trim()||e.exitCode===0&&!e.resultIsError?!1:dse.test(e.detail)||e.numTurns===0}function fse(e,t){let r=e.trim().slice(0,240);return Joe.test(e)?`${Goe}: ${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 mse(e){try{return{port:(await XF(e)).port}}catch(t){return{reason:t?.message??String(t)}}}async function gse(e){if(e.access.access!=="folder"&&e.access.access!=="folders")return null;let t=e.sandboxRuntime??bR(),r=vR(),n=t.available&&!r,o=n?await mse(e.egressProxy):null,s=n?await cU(e.access.folders,
|
|
259
|
+
`)}function nse(e){let t=Go.join(e,"net");$oe(t,{recursive:!0,mode:448});for(let[n,o]of Object.entries(ese()))um(Go.join(t,n),o,{encoding:"utf8",mode:420});let r=Go.join(t,"bridge-wait.sh");return um(r,rse(),{encoding:"utf8",mode:420}),{CURL_HOME:t,WGETRC:Go.join(t,".wgetrc"),BASH_ENV:r}}function xR(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 ose(e){if(!xR(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 sse(e){if(!xR(e))return!1;let t=e.event;return t.type==="content_block_start"&&t.content_block?.type==="text"}function ise(e){if(!xR(e))return"";let t=e.event;return t.type!=="message_delta"?"":typeof t.delta?.stop_reason=="string"?t.delta.stop_reason:""}function ase(e,t){let r=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):0;if(r<=0)return e;let n=Number(e[dU]);return Number.isFinite(n)&&n>=r?e:{...e,[dU]:String(r)}}function lse(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 cse(e){return typeof e.session_id=="string"&&e.session_id.trim()?e.session_id.trim():null}function use(e){let t=Array.isArray(e.messages)?e.messages:[],r=t[t.length-1],n=r?yF(r.content).trim():"";return n?`User:
|
|
260
|
+
${n}`:"Continue."}function pse(e){return e.streamed.trim()||e.exitCode===0&&!e.resultIsError?!1:dse.test(e.detail)||e.numTurns===0}function fse(e,t){let r=e.trim().slice(0,240);return Joe.test(e)?`${Goe}: ${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 mse(e){try{return{port:(await XF(e)).port}}catch(t){return{reason:t?.message??String(t)}}}async function gse(e){if(e.access.access!=="folder"&&e.access.access!=="folders")return null;let t=e.sandboxRuntime??bR(),r=vR(),n=t.available&&!r,o=n?await mse(e.egressProxy):null,s=n?await cU(e.access.folders,Gi):null;return s?.truncated&&console.error(JSON.stringify({event:"chat_folder_sensitive_scan_truncated",scanned:s.scanned,found:s.paths.length,durationMs:s.durationMs})),aU({access:e.access,policy:kR(e.env,e.config),runtime:t,domains:rU(e.env,e.config),startupFailure:r,egress:o,sensitiveFiles:s?.paths??[],sensitiveScanComplete:s?!s.truncated:!1})}async function dm(e){let t=Date.now(),r=!1,n=null,o=null,s=(i,a)=>(e.onStepLogged??RB)({at:new Date().toISOString(),turnId:e.turnId??"",resumed:r,appVersion:n,durationMs:Date.now()-t,ok:i,...i?{}:{reason:vB(a)}});try{let i=await hse(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 hse(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??KF,a=$F(e.step);if(a<=0)throw new Error("claude_code_no_time_left");let l=br(e.payload.tools),c=eR(e.payload,"agent",l,e.access),u=e.spawnTarget?.executable??(s.KYNVER_CLAUDE_BIN?.trim()||s.CLAUDE_BIN?.trim()||"claude"),d=Koe(Go.join(e.tempRoot??joe(),"kynver-claude-code-")),m=Go.join(d,"kynver-system-prompt.md"),f=iu(e.model,{pinned:e.modelPinned===!0}),g=Go.join(d,"kynver-claude-code-settings.json"),h=Date.now(),y=new Set(l.map(R=>R.name)),v=()=>gse({access:e.access,env:s,config:e.config,sandboxRuntime:e.sandboxRuntime,egressProxy:e.egressProxy}),k=await v();k?.network==="domain-list"&&console.error(JSON.stringify({event:"claude_code_sandbox_egress_unavailable",turnId:e.turnId??null,reason:k.networkReason??null}));let b={},S=()=>{um(m,k?`${c.head}
|
|
261
261
|
|
|
262
|
-
${k.note}`:c.head,{encoding:"utf8",mode:384}),k&&
|
|
262
|
+
${k.note}`:c.head,{encoding:"utf8",mode:384}),k&&um(g,JSON.stringify(k.settings,null,2),{encoding:"utf8",mode:384}),b=k?.shell==="sandboxed"?nse(d):{}},w=()=>k?{settingsFile:g,shell:k.shell}:void 0,_=async()=>{let R=i.get(e.step.session);if(R){let N=a-(Date.now()-h);if(N<=0)throw new Error("claude_code_no_time_left");r(!0);let x=await pU({...e,env:s,extraEnv:{...e.extraEnv,...b},executable:u,sessions:i,limitMs:N,advertisedNames:y,maxTokens:e.payload.maxTokens,args:fR({model:e.model,fallbackModel:f,systemPromptFile:m,access:e.access,prompt:use(e.payload),resumeSessionId:R,sandbox:w(),mcp:e.mcp}),resumed:!0,sandboxed:k?.shell==="sandboxed",onAppVersion:n});if(!x.resumeRefused)return x;i.forget(e.step.session),r(!1)}let P=a-(Date.now()-h);if(P<=0)throw new Error("claude_code_no_time_left");return pU({...e,env:s,extraEnv:{...e.extraEnv,...b},executable:u,sessions:i,limitMs:P,advertisedNames:y,maxTokens:e.payload.maxTokens,args:fR({model:e.model,fallbackModel:f,systemPromptFile:m,access:e.access,prompt:c.body||"Continue.",sandbox:w(),mcp:e.mcp}),resumed:!1,sandboxed:k?.shell==="sandboxed",onAppVersion:n})};try{S();let R=await _();return R.sandboxUnavailable&&k&&(sU(R.sandboxUnavailable),k=await v(),console.error(JSON.stringify({event:"claude_code_sandbox_unavailable",turnId:e.turnId??null,reason:R.sandboxUnavailable,shell:k?.shell??null})),S(),R=await _(),R.sandboxUnavailable&&(R={error:new Error(`claude_code_sandbox_unavailable: ${R.sandboxUnavailable}`)})),(R.failure?.startsWith(_R)||R.error?.message.startsWith(_R))&&a-(Date.now()-h)>Zoe&&(console.error(JSON.stringify({event:"claude_code_sandbox_proxy_down_retry",turnId:e.turnId??null})),R=await _()),o(R)}finally{Hoe(d,{recursive:!0,force:!0})}}function pU(e){let t=EF();return new Promise(r=>{let n;try{let[C,j]=oe(e.executable,[...e.spawnTarget?.prefixArgs??[],...e.args]),B=X({cwd:e.access.workDir,detached:process.platform!=="win32",shell:!1,stdio:["ignore","pipe","pipe"],env:{...ase(wF(e.env,e.access.access),e.maxTokens),...e.extraEnv,NO_COLOR:"1"}});n=Woe(C,j,B)}catch(C){r({error:fU(C,e.executable)});return}let o=!1,s=new kr,i="",a="",l="",c=!1,u=null,d="",m={input_tokens:0,output_tokens:0},f=null,g="",h="",y=!1,v="",k=!1,b=0,S=!1,w=C=>{let j=s.push(C);j&&(i+=j,e.onDelta(j))},_=(C,j)=>console.error(JSON.stringify({event:C,requestId:e.requestId??null,turnId:e.turnId??null,resumed:e.resumed,access:e.access.access,appVersion:f,...j})),R=C=>{o||(o=!0,clearTimeout(V),x&&k&&clearTimeout(x),e.signal?.removeEventListener("abort",F),r(C))},P=(C="")=>{let j=s.end();j&&(i+=j,e.onDelta(j));let B=dR(a,c?"":l),E=jn(B,e.advertisedNames);pR(E.text,i,e.onDelta),C&&e.onDelta(C),E.rejected.length>0&&_("claude_code_tool_call_rejected",{names:E.rejected.slice(0,5)});let L=Vn(E,e.turnId??"turn",C),J=L.stop_reason==="end_turn"&&d==="max_tokens";return(E.cut||J)&&_("claude_code_reply_cut",{stopReason:d||null,cutTool:E.cut?.name??null,chars:B.length}),{content:L.content,stop_reason:J?"max_tokens":L.stop_reason,usage:m}},N=C=>{n.pid?he(n.pid,C):ct(n,C)},x,O=()=>{N("SIGTERM"),x??=setTimeout(()=>{k||(N("SIGKILL"),setTimeout(()=>{o||T(null)},uU).unref())},uU),x.unref()},M=()=>{if(e.onActivity)for(let C of t.interrupted())e.onActivity(C)},F=()=>{O(),M(),R({error:new Error("claude_code_chat_aborted")})},V=setTimeout(()=>{y=!0,O()},e.limitMs);if(n.on("error",C=>R({error:fU(C,e.executable)})),e.signal){if(e.signal.aborted){F();return}e.signal.addEventListener("abort",F)}let re=C=>{let j=C.trim();if(!j)return;let B;try{B=JSON.parse(j)}catch{return}let E=cse(B);E&&e.sessions.remember(e.step.session,E);let L=Ig(B);L&&console.error(`[chat] ${L}`),B.type==="system"&&typeof B.claude_code_version=="string"&&(f=B.claude_code_version,e.onAppVersion(f)),sse(B)&&a&&!a.endsWith(`
|
|
263
263
|
`)&&(a+=`
|
|
264
264
|
|
|
265
265
|
`,w(`
|
|
@@ -269,50 +269,50 @@ ${k.note}`:c.head,{encoding:"utf8",mode:384}),k&&cm(g,JSON.stringify(k.settings,
|
|
|
269
269
|
`))!==-1;){let B=h.slice(0,j);h=h.slice(j+1),re(B)}}),n.stderr?.on("data",C=>{g+=typeof C=="string"?C:C.toString("utf8"),g.length>8e3&&(g=g.slice(-8e3))});let T=C=>{if(k=!0,o)return;if(h.trim()&&re(h),h="",M(),S){let L=`${_R}: ${zoe}`;R(a.trim()?{message:P(Xoe),failure:L}:{error:new Error(L)});return}if(y){_("claude_code_step_timeout",{limitMs:e.limitMs}),R(a.trim()?{message:P(qoe),failure:"claude_code_step_timeout"}:{error:new Error("claude_code_step_timeout")});return}let j=`${l}
|
|
270
270
|
${v}
|
|
271
271
|
${g}`,B=C!==0||c;if(e.sandboxed&&iU({exitCode:C,streamed:a,numTurns:u,detail:j})){R({sandboxUnavailable:j.trim().slice(0,240)||"sandbox failed to start"});return}if(e.resumed&&pse({exitCode:C,resultIsError:c,numTurns:u,streamed:a,detail:j})){_("claude_code_resume_refused",{exitCode:C}),R({resumeRefused:!0});return}if(B){let L=fse(j,C);_("claude_code_turn_error",{exitCode:C,error:L,partial:!!a.trim()}),R(a.trim()?{message:P(Yoe),failure:L}:{error:new Error(L)});return}let E=P();_("claude_code_turn_end",{exitCode:C,stopReason:E.stop_reason}),R({message:E})};n.on("close",T)})}function yse(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(`
|
|
272
|
-
`):"";if(nU(o))return!0}return!1}function fU(e,t){return e?.code==="ENOENT"?new Error(`${Voe}: failed to spawn \`${t}\`. Install Claude Code and keep \`claude\` on PATH.`):e instanceof Error?e:new Error(String(e))}var Voe,Goe,Joe,Yoe,uU,qoe,_R,zoe,Xoe,Qoe,Zoe,tse,dU,dse,CR=p(()=>{"use strict";U();Te();
|
|
272
|
+
`):"";if(nU(o))return!0}return!1}function fU(e,t){return e?.code==="ENOENT"?new Error(`${Voe}: failed to spawn \`${t}\`. Install Claude Code and keep \`claude\` on PATH.`):e instanceof Error?e:new Error(String(e))}var Voe,Goe,Joe,Yoe,uU,qoe,_R,zoe,Xoe,Qoe,Zoe,tse,dU,dse,CR=p(()=>{"use strict";U();Te();Tr();fc();nm();HF();VF();jo();hc();SR();hR();Bv();pc();rm();Wi();Voe="claude_code_unavailable",Goe="claude_code_not_logged_in",Joe=/not logged in|please run \/login|invalid api key|authentication|unauthorized|401\b/i,Yoe=`
|
|
273
273
|
|
|
274
274
|
(Stopped: Claude Code ended this step with an error before finishing.)`,uU=5e3,qoe=`
|
|
275
275
|
|
|
276
|
-
(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.)`,_R="claude_code_sandbox_proxy_down",zoe=`sandbox network proxy not running (localhost:${
|
|
276
|
+
(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.)`,_R="claude_code_sandbox_proxy_down",zoe=`sandbox network proxy not running (localhost:${Vo} refused inside the folder sandbox)`,Xoe=`
|
|
277
277
|
|
|
278
|
-
(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.)`,Qoe=2,Zoe=3e4;tse=60;dU="CLAUDE_CODE_MAX_OUTPUT_TOKENS";dse=/no conversation found|session .*not found/i});function mU(e){if(e)return e;let t=I();return{chatProvider:t.chatProvider,workerProvider:t.workerProvider}}function ER(e,t,r=process.env,n){if(e==="cursor"){let o=
|
|
278
|
+
(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.)`,Qoe=2,Zoe=3e4;tse=60;dU="CLAUDE_CODE_MAX_OUTPUT_TOKENS";dse=/no conversation found|session .*not found/i});function mU(e){if(e)return e;let t=I();return{chatProvider:t.chatProvider,workerProvider:t.workerProvider}}function ER(e,t,r=process.env,n){if(e==="cursor"){let o=Dd(r);if(!o.ok)throw new zt(oI(o));return}if(e==="codex"){let o=jf(r);if(!o.ok)throw new zt(KB(o));return}if(e==="gemini"){let o=r;if($o(mU(n),o)==="antigravity"){let s=Yf(o);if(!s.ok)throw new zt(GB(s));return}if(!sc(r))throw new zt("gemini_api_key_missing");return}if(e==="venice"){if(!ic(r))throw new zt("venice_api_key_missing");return}if(e==="openai"){if(!ac(r))throw new zt("openai_api_key_missing");return}if(!nc(r,{oauthOptIn:t}))throw new zt("no_local_credentials")}async function gU(e){let t=e.env??process.env,{provider:r,model:n,payload:o,onDelta:s,signal:i}=e;ER(r,e.useClaudeOauth,t,e.config);let a=e.config??I(),l=Ko({provider:r,config:a,payloadAccess:o.computerAccess,boxId:e.boxId,env:t}),c=e.onActivity,u={access:l.access,...c?{onActivity:f=>c(f,l)}:{}};if(r==="cursor")return OF({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,requestId:e.requestId,onToolProgress:e.onToolProgress,...u});if(r==="codex")return NF({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,...u});if(r==="gemini"&&$o(mU(e.config),t)==="antigravity")return LF({payload:o,model:n,onDelta:s,signal:i,turnId:e.turnId,env:t,...u});if(r==="gemini"||r==="openai"||r==="venice"){let f=r==="gemini"?sc(t):r==="venice"?ic(t):ac(t);return FF({creds:f,model:n,payload:o,onDelta:s,signal:i})}let d=WF(o.claudeCode);if(d&&l.engine==="claude-code"&&l.access.access!=="off")return dm({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 m=nc(t,{oauthOptIn:e.useClaudeOauth});return oF({creds:m,model:n,payload:o,onDelta:s,onToolProgress:e.onToolProgress,signal:i})}var zt,AR=p(()=>{"use strict";Hv();Xv();Xs();rm();Vf();DF();qf();BF();_f();Vv();UF();$();Bf();nm();CR();zt=class extends Error{constructor(r){super(r);this.code=r;this.name="ChatCredentialError"}code}});function kse(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 hU(e){let t=uc(e.payload.requestedModel),r=typeof e.payload.fallbackNoticeShown=="string"?e.payload.fallbackNoticeShown:null,{requestedModel:n,fallbackNoticeShown:o,...s}=e.payload,i=YB({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,m=null,f=()=>{let g=i.fallbackReason==="usage_limit"?l:t,h=XB(i,g),y=QB(i,g);!h||!y||h===r||d||(d=`${y}
|
|
279
279
|
|
|
280
|
-
`,m=h,e.onDelta(d))};for(;;){c.push(i.provider);try{f();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:v=>{v&&(u=!0),e.onDelta(v)}});return{...d?kse(h,d):h,kynverModel:{provider:i.provider,model:i.model,requested:i.fallbackReason?a:null,fallbackReason:i.fallbackReason,noticeKey:m}}}catch(g){let y=!u&&(zB(g)||g instanceof zt&&c.length>1)?qB(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 yU=p(()=>{"use strict";Yv();AR()});var
|
|
281
|
-
`,{encoding:"utf8",mode:384});let a=n;return{state:"attached",configFile:s,allowedTools:[...Pse],command:o,cleanup:()=>SU(a,{recursive:!0,force:!0})}}catch(o){return n&&SU(n,{recursive:!0,force:!0}),{state:"unavailable",reason:`config_write_failed: ${o instanceof Error?o.message:String(o)}`.slice(0,200)}}}function Lse(e,t){let r=e.split(".").map(o=>Number.parseInt(o,10)),n=t.split(".").map(o=>Number.parseInt(o,10));for(let o=0;o<3;o++){let s=Number.isFinite(r[o])?r[o]:0,i=Number.isFinite(n[o])?n[o]:0;if(s!==i)return s>i}return!0}function Bse(e,t){for(let r of(t.PATH??"").split(
|
|
282
|
-
`,{encoding:"utf8",mode:384})}catch{}}function TU(e){try{let t=JSON.parse(Ese(IU(e),"utf8"));return t.state!=="attached"&&t.state!=="off"&&t.state!=="unavailable"?null:{at:typeof t.at=="string"?t.at:"",state:t.state,reason:typeof t.reason=="string"?t.reason:null,source:t.source==="installed"||t.source==="npx"?t.source:null}}catch{return null}}var CU,Pse,Tse,_U,Ose,Nse,EU,Dse,TR,
|
|
283
|
-
`,{mode:384}),Hse(s,e)}catch{}};return{get:n=>t()[n]??null,list:()=>Object.values(t()),put:n=>{let o=t();o[n.sessionKey]=n,r(o)},update:(n,o)=>{let s=t(),i=s[n];i&&(s[n]={...i,...o,sessionKey:n},r(s))},remove:n=>{let o=t();return n in o?(delete o[n],r(o),!0):!1}}}var OU,NR=p(()=>{"use strict";OU=50});function MU(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
|
|
284
|
-
`;)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
|
|
280
|
+
`,m=h,e.onDelta(d))};for(;;){c.push(i.provider);try{f();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:v=>{v&&(u=!0),e.onDelta(v)}});return{...d?kse(h,d):h,kynverModel:{provider:i.provider,model:i.model,requested:i.fallbackReason?a:null,fallbackReason:i.fallbackReason,noticeKey:m}}}catch(g){let y=!u&&(zB(g)||g instanceof zt&&c.length>1)?qB(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 yU=p(()=>{"use strict";Yv();AR()});var pm,kU=p(()=>{"use strict";pm=class{constructor(t,r=Date.now){this.claimReceivedAt=t;this.now=r}claimReceivedAt;now;modelStartAt=null;firstDeltaAt=null;noteModelStart(){this.modelStartAt===null&&(this.modelStartAt=this.now())}noteDelta(){this.firstDeltaAt===null&&(this.firstDeltaAt=this.now())}stamp(){if(this.modelStartAt===null)return null;let t=this.now(),r=this.firstDeltaAt??this.modelStartAt;return{claimToModelMs:Math.max(0,this.modelStartAt-this.claimReceivedAt),ttftMs:this.firstDeltaAt===null?null:Math.max(0,this.firstDeltaAt-this.modelStartAt),generateMs:Math.max(0,t-r)}}}});function bse(e,t,r,n,o){try{let s=Ko({provider:t.chatProvider,config:n,payloadAccess:e.payload.computerAccess,boxId:t.boxId}),i=WL(s.access,{signed:r.signed});if(!i)return;let a=i.from?Oi(i.from.access):"not set",l=Oi(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};Ni({...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 IR(e,t,r){let n=Date.now(),o=0,s=!1,i=new Kn,a=new AbortController,l=t.requestId??"",c=new pm(t.claimReceivedAtMs??n),u=k=>{s||i.track(Ae(e,t.turnId,[{seq:o++,kind:"delta",text:k}]).then(b=>(b||(s=!0,a.abort()),b)))},d=new $n(u,void 0,dr(e.agentOsId),!0),m=kF(()=>{s||i.track(Ae(e,t.turnId,[{seq:o++,kind:"activity",activity:{kind:"tool_progress"}}]).then(k=>(k||(s=!0,a.abort()),k)))}),f=Kf({turnId:t.turnId,chat:l||null,send:k=>{s||(d.flush(),i.track(Ae(e,t.turnId,[{seq:o++,kind:"activity",activity:k}]).then(b=>(b||(s=!0,a.abort()),b))))}}),g=e.chatProvider??"anthropic",h=I(),y=Fi(h);r&&bse(t,e,r,h,k=>{s||i.track(Ae(e,t.turnId,[{seq:o++,kind:"activity",activity:k}]).then(b=>(b||(s=!0,a.abort()),b)))});try{ER(g,e.useClaudeOauth,process.env,h)}catch(k){let b=uc(t.payload.requestedModel);if(!(b&&y.some(w=>w.provider===b.provider&&w.models.includes(b.model)))){let w=k instanceof Error?k.message:String(k);await qt(()=>Ae(e,t.turnId,[{seq:0,kind:"error",error:w}]).catch(()=>!1));return}}let v={provider:g,model:e.model};try{let k=await hU({payload:t.payload,catalog:y,primary:{provider:g,model:e.model},primaryPinned:!!(process.env.KYNVER_CHAT_MODEL?.trim()||h.defaultModel?.trim()),onDelta:R=>{c.noteDelta(),d.push(R)},runTurn:R=>(c.noteModelStart(),v={provider:R.provider,model:R.model},gU({...R,onToolProgress:()=>m.noteToolBytes(),signal:a.signal,turnId:t.turnId,requestId:t.requestId,useClaudeOauth:e.useClaudeOauth,config:h,boxId:e.boxId,onActivity:f.sink}))});MB(k.content,Ko({provider:v.provider,config:h,payloadAccess:t.payload.computerAccess,boxId:e.boxId}),f),d.close(),await i.drain();let b=c.stamp(),S=b?{...k,kynverTiming:b}:k,w=o++;if(!await qt(()=>s?Ae(e,t.turnId,[{seq:w,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):Ae(e,t.turnId,[{seq:w,kind:"final",message:S}]).catch(()=>!1))){console.error(JSON.stringify({event:"chat_turn_final_rejected",requestId:l,turnId:t.turnId,model:v.model,chatProvider:v.provider}));return}console.error(JSON.stringify({event:"chat_turn_done",requestId:l,turnId:t.turnId,model:v.model,chatProvider:v.provider,fallbackReason:k.kynverModel.fallbackReason,activitySteps:f.steps,...b??{},durationMs:Date.now()-n}))}catch(k){if(d.close(),await i.drain(),!s){let b=FB(k instanceof Error?k.message:String(k)),S=o++;await qt(()=>Ae(e,t.turnId,[{seq:S,kind:"error",error:b}]).catch(()=>!1))}console.error(JSON.stringify({event:"chat_turn_error",requestId:l,turnId:t.turnId,error:k instanceof Error?k.message:String(k),durationMs:Date.now()-n}))}}var PR=p(()=>{"use strict";$();Ev();Kv();LB();Xl();UB();cc();Yv();qv();Bf();yU();AR();kU();Wf();tR();$f();pr();rc()});async function vU(e){let t=e.now??Date.now,r=`${e.apiBaseUrl}|${e.agentOsId}`,n=bU.get(r)??{};return bU.set(r,n),n.value&&n.value.expiresAtMs-t()>vse?{ok:!0,value:n.value}:n.pending?n.pending:n.failedAt!==void 0&&t()-n.failedAt<Rse?{ok:!1,reason:n.failure??"mint_failed"}:(n.pending=wse(e).then(o=>(o.ok?(n.value=o.value,n.failedAt=void 0):(n.failedAt=t(),n.failure=o.reason),o)).finally(()=>{n.pending=void 0}),n.pending)}async function wse(e){let t=e.loadBoxCredential();if(!t)return{ok:!1,reason:"no_chat_credential"};let r=`${e.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box/tools-token`;try{let n=await Ce(r,{method:"POST",headers:{"Content-Type":"application/json","X-Kynver-Runner-Token":t},body:"{}",signal:AbortSignal.timeout(1e4)},e.fetchImpl??fetch);if(n.status===404)return{ok:!1,reason:"server_too_old"};let o=await n.json().catch(()=>null);if(!n.ok)return{ok:!1,reason:`mint_http_${n.status}`};let s=typeof o?.expiresAt=="string"?Date.parse(o.expiresAt):NaN;return typeof o?.token!="string"||!o.token.startsWith("krt1.")||typeof o.slug!="string"||!o.slug||!Number.isFinite(s)?{ok:!1,reason:"mint_bad_response"}:{ok:!0,value:{token:o.token,slug:o.slug,expiresAtMs:s}}}catch{return{ok:!1,reason:"mint_unreachable"}}}var vse,Rse,bU,RU=p(()=>{"use strict";wt();vse=120*6e4+15*6e4,Rse=6e4,bU=new Map});import{spawnSync as wU}from"node:child_process";import{accessSync as Sse,constants as _se,mkdirSync as xse,mkdtempSync as Cse,readFileSync as Ese,rmSync as SU,writeFileSync as xU}from"node:fs";import{homedir as Ase,tmpdir as Ise}from"node:os";import Ji from"node:path";function Mse(e){let t=e[EU]?.trim().toLowerCase();return t==="0"||t==="false"||t==="off"||t==="no"}async function AU(e){let t=e.env??process.env;if(e.payloadKynverTools===!1)return{state:"off",reason:"tab_setting_off"};if(Mse(t))return{state:"off",reason:"computer_setting_off"};if(!e.connection)return{state:"unavailable",reason:"computer_not_connected"};let r=await vU({...e.connection,...e.now?{now:e.now}:{}});if(!r.ok)return{state:"unavailable",reason:r.reason};let n=null;try{let o=(e.resolveCommand??Use)(t);n=Cse(Ji.join(e.tempRoot??Ise(),"kynver-tab-mcp-"));let s=Ji.join(n,Dse),i={mcpServers:{[CU]:{command:o.command,args:o.args,env:{...e.extraEnv,KYNVER_API_URL:e.connection.apiBaseUrl.replace(/\/$/,""),KYNVER_AGENT_OS_ID:e.connection.agentOsId,KYNVER_AGENT_OS_SLUG:r.value.slug,[Nse]:r.value.token,KYNVER_API_KEY:"",KYNVER_RUNNER_TOKEN:""}}}};xU(s,`${JSON.stringify(i,null,2)}
|
|
281
|
+
`,{encoding:"utf8",mode:384});let a=n;return{state:"attached",configFile:s,allowedTools:[...Pse],command:o,cleanup:()=>SU(a,{recursive:!0,force:!0})}}catch(o){return n&&SU(n,{recursive:!0,force:!0}),{state:"unavailable",reason:`config_write_failed: ${o instanceof Error?o.message:String(o)}`.slice(0,200)}}}function Lse(e,t){let r=e.split(".").map(o=>Number.parseInt(o,10)),n=t.split(".").map(o=>Number.parseInt(o,10));for(let o=0;o<3;o++){let s=Number.isFinite(r[o])?r[o]:0,i=Number.isFinite(n[o])?n[o]:0;if(s!==i)return s>i}return!0}function Bse(e,t){for(let r of(t.PATH??"").split(Ji.delimiter)){if(!r)continue;let n=Ji.join(r,e);try{return Sse(n,_se.X_OK),n}catch{}}return null}function Fse(e){if(TR.has(e))return TR.get(e);let t=null;try{let n=process.platform==="win32"?wU("cmd",["/c",e,"--version"],{encoding:"utf8",timeout:5e3,windowsHide:!0}):wU(e,["--version"],{encoding:"utf8",timeout:5e3});t=/(\d+\.\d+\.\d+)/.exec(`${n.stdout??""} ${n.stderr??""}`)?.[1]??null}catch{t=null}return TR.set(e,t),t}function Use(e=process.env,t={}){let r=t.platform??process.platform,o=(t.find??(i=>r==="win32"?bg(i,{env:e}):Bse(i,e)))(_U);if(o){let i=(t.version??Fse)(o);if(i&&Lse(i,Ose))return r==="win32"?{command:"cmd",args:["/c",o],source:"installed"}:{command:o,args:[],source:"installed"}}let s=["-y","-p",Tse,_U];return r==="win32"?{command:"cmd",args:["/c","npx",...s],source:"npx"}:{command:"npx",args:s,source:"npx"}}function IU(e=Ase()){return Ji.join(e,".kynver","agent-tabs","claude-code-kynver-tools.json")}function PU(e,t={}){let r={at:(t.now??(()=>new Date))().toISOString(),state:e.state,reason:e.state==="attached"?null:e.reason,source:e.state==="attached"?e.command.source:null};try{let n=IU(t.home);xse(Ji.dirname(n),{recursive:!0,mode:448}),xU(n,`${JSON.stringify(r)}
|
|
282
|
+
`,{encoding:"utf8",mode:384})}catch{}}function TU(e){try{let t=JSON.parse(Ese(IU(e),"utf8"));return t.state!=="attached"&&t.state!=="off"&&t.state!=="unavailable"?null:{at:typeof t.at=="string"?t.at:"",state:t.state,reason:typeof t.reason=="string"?t.reason:null,source:t.source==="installed"||t.source==="npx"?t.source:null}}catch{return null}}var CU,Pse,Tse,_U,Ose,Nse,EU,Dse,TR,OVe,OR=p(()=>{"use strict";Te();RU();CU="kynver",Pse=[`mcp__${CU}`],Tse="@kynver-app/mcp-agent-os",_U="kynver-mcp-agent-os",Ose="0.3.114",Nse="KYNVER_AGENT_TAB_TOOLS_TOKEN",EU="KYNVER_CLAUDE_TAB_KYNVER_TOOLS",Dse="kynver-tab-mcp.json";TR=new Map;OVe={tab_setting_off:"switched off in the tab's settings",computer_setting_off:`switched off on this computer (${EU})`,computer_not_connected:"this computer isn't connected to Kynver (run `kynver setup`)",no_chat_credential:"this computer has no chat credential yet (start `kynver daemon`)",server_too_old:"the Kynver website doesn't offer them yet",mint_unreachable:"couldn't reach Kynver"}});import{existsSync as Wse,mkdirSync as $se,readFileSync as Kse,renameSync as Hse,writeFileSync as jse}from"node:fs";import{homedir as Vse}from"node:os";import NU from"node:path";function Gse(e=Vse()){return NU.join(e,".kynver","hermes-session-adoptions.json")}function Jse(e,t){if(!t||typeof t!="object")return null;let r=t;if(typeof r.sessionId!="string"||!r.sessionId||typeof r.source!="string"||typeof r.conversationId!="string")return null;let n=o=>typeof o=="number"&&Number.isFinite(o)?o:null;return{sessionKey:e,conversationId:r.conversationId,sessionId:r.sessionId,source:r.source,chat:typeof r.chat=="string"&&r.chat?r.chat:null,adoptedAt:n(r.adoptedAt)??0,rotatedAt:n(r.rotatedAt),rotations:n(r.rotations)??0,lastHoldMs:n(r.lastHoldMs),lastHoldAt:n(r.lastHoldAt),lastError:typeof r.lastError=="string"&&r.lastError?r.lastError.slice(0,80):null}}function fm(e=Gse()){let t=()=>{try{if(!Wse(e))return{};let n=JSON.parse(Kse(e,"utf8"));if(!n||typeof n!="object"||Array.isArray(n))return{};let o={};for(let[s,i]of Object.entries(n)){let a=Jse(s,i);a&&(o[s]=a)}return o}catch{return{}}},r=n=>{let o=Object.keys(n);o.length>OU&&o.sort((s,i)=>n[s].adoptedAt-n[i].adoptedAt).slice(0,o.length-OU).forEach(s=>delete n[s]);try{$se(NU.dirname(e),{recursive:!0,mode:448});let s=`${e}.${process.pid}.tmp`;jse(s,`${JSON.stringify(n)}
|
|
283
|
+
`,{mode:384}),Hse(s,e)}catch{}};return{get:n=>t()[n]??null,list:()=>Object.values(t()),put:n=>{let o=t();o[n.sessionKey]=n,r(o)},update:(n,o)=>{let s=t(),i=s[n];i&&(s[n]={...i,...o,sessionKey:n},r(s))},remove:n=>{let o=t();return n in o?(delete o[n],r(o),!0):!1}}}var OU,NR=p(()=>{"use strict";OU=50});function MU(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 yc(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 DU.set(e,n),n}function mm(e){return DU.get(e)??null}var DU,DR=p(()=>{"use strict";DU=new Map});import{existsSync as LU,readFileSync as Yse}from"node:fs";import{homedir as BU}from"node:os";import Jo from"node:path";function FU(e){try{return LU(e)?Yse(e,"utf8"):null}catch{return null}}function qse(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 UU(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 zse(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 Xse(e){return/^(1|true|yes|on)$/i.test((e??"").trim())}function WU(e={}){let r=(e.env??process.env).HERMES_HOME?.trim();return r?Jo.resolve(r):Jo.join(e.home??BU(),".hermes")}function Qse(e={}){return Jo.join(WU(e),".env")}function gm(e={}){let t=e.readFile??FU,r=Qse(e),n=t(r),o=n===null?{}:zse(n),s=o.API_SERVER_KEY?.trim()||null;return{baseUrl:`http://${qse(o.API_SERVER_HOST)}:${UU(o.API_SERVER_PORT,8642)}`,key:s,enabled:Xse(o.API_SERVER_ENABLED)||s!==null&&o.API_SERVER_ENABLED===void 0,configured:n!==null||LU(WU(e)),configPath:r}}function Zse(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]!==`
|
|
284
|
+
`;)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 kc(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 bc(e){return typeof e=="string"&&e.trim()?e.trim():null}function eie(e={}){let t=e.env??process.env,r=t.OPENCLAW_CONFIG_PATH?.trim();if(r)return Jo.resolve(r);let n=t.OPENCLAW_STATE_DIR?.trim();return Jo.join(n?Jo.resolve(n):Jo.join(e.home??BU(),".openclaw"),"openclaw.json")}function hm(e={}){let t=e.env??process.env,r=e.readFile??FU,n=eie(e),o=r(n),s=o===null?null:Zse(o),i=bc(kc(s,["gateway","auth","mode"])),a=(i==="password"?bc(kc(s,["gateway","auth","password"]))??bc(t.OPENCLAW_GATEWAY_PASSWORD):bc(kc(s,["gateway","auth","token"]))??bc(t.OPENCLAW_GATEWAY_TOKEN))??(i==="none"?"":null);return{baseUrl:`http://127.0.0.1:${UU(t.OPENCLAW_GATEWAY_PORT??kc(s,["gateway","port"]),18789)}`,key:a,enabled:kc(s,["gateway","http","endpoints","chatCompletions","enabled"])===!0,configured:o!==null,configPath:n}}var MR=p(()=>{"use strict"});import{existsSync as tie}from"node:fs";import{homedir as rie,platform as nie}from"node:os";import Gn from"node:path";function oie(e,t,r={}){if(t==="darwin")return Gn.join(e,"Library","Application Support","Grok Bot");if(t==="win32"){let s=r.APPDATA?.trim();return Gn.join(s||Gn.join(e,"AppData","Roaming"),"Grok Bot")}let n=r.XDG_CONFIG_HOME?.trim(),o=n&&Gn.isAbsolute(n)?n:Gn.join(e,".config");return Gn.join(o,"Grok Bot")}function sie(e){return[Gn.join("/opt","Grok Bot","grok-bot"),Gn.join(e,".local","bin","grok-bot")]}async function $U(e={}){let t=e.home??rie(),r=e.platform??nie(),n=e.env??process.env,o=e.exists??tie,s=e.versionOf??(async()=>null),i=r==="linux"?sie(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(oie(t,r,n))||i.some(c=>o(c)),version:a}}var KU=p(()=>{"use strict"});async function ym(e={}){let t=await $U(e);return t.installed?{status:"not_enabled",version:t.version,detail:aie}:{status:"not_installed",version:null,detail:iie}}var iie,aie,LR=p(()=>{"use strict";KU();iie="Grok Bot is not installed on this computer.",aie="Grok Bot is installed. Kynver chat for this tab does not use the desktop app."});import{execFile as lie}from"node:child_process";async function gie(e){let t=HU.get(e);if(t&&Date.now()-t.at<uie)return t.version;let r=await new Promise(n=>{try{let[o,s]=oe(e,["--version"]);lie(o,s,X({encoding:"utf8",timeout:5e3}),(i,a,l)=>{if(i)return n(null);n(`${a??""} ${l??""}`.match(mie)?.[0]??null)})}catch{n(null)}});return HU.set(e,{at:Date.now(),version:r}),r}async function jU(e,t,r,n=die){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 BR(e){let t=GU.get(e)??null,r=mm(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 Xt(e,t,r,n){let o=BR(e);return{engine:e,status:t,version:r,detail:n,lastRoundTrip:mm(e),lastReadyAt:o===null?null:new Date(o).toISOString()}}async function VU(e,t,r,n,o=Date.now){if(!t.configured&&!r)return null;let s=e==="hermes"?"Hermes":"OpenClaw";if(!t.enabled)return Xt(e,"not_enabled",r,`${s}'s local chat API is off`);if(t.key===null)return Xt(e,"no_key",r,`${s}'s local chat API has no key set`);let i=`${t.baseUrl}/v1/models`,a=await jU(n,i,t.key||null)??await jU(n,i,t.key||null,pie);if(a===null){let l=BR(e);return l!==null&&o()-l<fie?Xt(e,"ready",r,null):Xt(e,"unreachable",r,`${s} is not answering on ${t.baseUrl} \u2014 is its gateway running?`)}return a===401||a===403?Xt(e,"no_key",r,`${s} refused the key in its config (HTTP ${a})`):a===404?Xt(e,"not_enabled",r,`${s} is running but its chat API is not switched on`):(GU.set(e,o()),Xt(e,"ready",r,null))}function hie(e){let{version:t,signedIn:r}=(e.claudeCode??(()=>({version:Af("claude-code",e.env),signedIn:If(e.env)})))();if(!t)return null;if(!r)return Xt("claude-code","not_signed_in",t,"Claude Code is installed but not signed in");if((e.config??I()).chatComputerAccess==="off")return Xt("claude-code","access_off",t,"Computer access for chat is off on this computer");let o=(e.kynverTools??TU)();return{...Xt("claude-code","ready",t,null),kynverTools:o?{state:o.state,reason:o.reason,at:o.at||null}:null}}async function yie(e){let t=await ym({home:e.home,env:e.env,exists:e.grokBotExists,versionOf:e.versionOf,platform:e.platform});return Xt("grok-bot",t.status,t.version,t.detail)}async function kie(e={}){let t=e.env??process.env,r=e.fetchFn??fetch,n=e.versionOf??gie,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([VU("hermes",gm(e),i,r,e.now),VU("openclaw",hm(e),a,r,e.now)]),u=await yie({...e,versionOf:n});return{v:1,engines:[l,c,hie(e),u].filter(m=>m!==null)}}function bie(e={}){return vc||(Rc&&Date.now()-Rc.at<cie?Promise.resolve():(vc=kie(e).then(t=>{Rc={at:Date.now(),report:t}}).catch(()=>{}).finally(()=>{vc=null}),vc))}function vie(){try{let e=fm().list().slice(0,5).map(t=>({conversationId:t.conversationId,source:t.source,rotations:t.rotations,lastHoldMs:t.lastHoldMs,error:t.lastError}));return e.length?{sharedSessions:e}:{}}catch{return{}}}function km(){if(bie(),!!Rc)return{v:1,engines:Rc.report.engines.map(e=>{let t=BR(e.engine);return{...e,...e.engine==="hermes"?vie():{},lastRoundTrip:mm(e.engine),lastReadyAt:t===null?null:new Date(t).toISOString()}})}}var cie,uie,die,pie,fie,mie,HU,GU,Rc,vc,FR=p(()=>{"use strict";OR();$();Te();U();NR();Ql();DR();MR();LR();cie=3e4,uie=10*6e4,die=1500,pie=5e3,fie=3e4,mie=/\d+\.\d+(?:\.\d+)?(?:[-+][\w.]+)?/,HU=new Map;GU=new Map;Rc=null,vc=null});function JU(){return Rie}var Rie,YU=p(()=>{"use strict";LR();Rie={id:"mailbox",probe:e=>ym(e),relay(){return Promise.resolve({text:"",mailbox:!0})}}});import{existsSync as wie,mkdirSync as Sie,readFileSync as _ie,renameSync as xie,writeFileSync as Cie}from"node:fs";import{homedir as Eie}from"node:os";import zU from"node:path";function Aie(e=Eie()){return zU.join(e,".kynver","agent-tab-sessions.json")}function XU(e=Aie(),t=Date.now){let r=()=>{try{if(!wie(e))return{};let o=JSON.parse(_ie(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>qU&&s.sort((i,a)=>o[i].at-o[a].at).slice(0,s.length-qU).forEach(i=>delete o[i]);try{Sie(zU.dirname(e),{recursive:!0,mode:448});let i=`${e}.${process.pid}.tmp`;Cie(i,`${JSON.stringify(o)}
|
|
285
285
|
`,{mode:384}),xie(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 qU,QU=p(()=>{"use strict";qU=500});function ZU(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(`
|
|
286
|
-
`);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*
|
|
287
|
-
`))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=ZU(o);o=[],u&&(yield u)}else o.push(c)}}n+=r.decode(),n&&o.push(n.replace(/\r$/,""));let s=ZU(o);s&&(yield s)}finally{t.releaseLock()}}var UR=p(()=>{"use strict"});function WR(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 eW(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 tW(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"?"":WR(n.content)}).join(""):""}function $R(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:tW(r.response)||null,finishReason:"stop",error:null};if(n==="response.failed"||n==="error"){let d=r.response;return{delta:"",full:null,finishReason:"error",error:eW(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?eW(r.error)??"the agent reported an error":null,i=(Array.isArray(r.choices)?r.choices:[])[0]??null,a=WR(i?.delta?.content)||(typeof i?.text=="string"?i.text:""),l=i?.message?.content,c=l==null?null:WR(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 rW(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:tW(t),finishReason:"stop",error:null}:$R(null,e)}var nW=p(()=>{"use strict"});function oW(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}function Iie(e,t){if(!Array.isArray(e)||e.length===0)return null;let r=sW(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=oW(s.content);n===null&&i.trim()&&(n=i);continue}if(s.role!=="tool"&&s.role==="user")return n===null?null:!r||sW(oW(s.content)).includes(r)?n:null}}return null}async function iW(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 Iie(i?.data,e.sentText)}catch{return null}finally{clearTimeout(n),e.signal?.removeEventListener("abort",o)}}var sW,aW=p(()=>{"use strict";sW=e=>e.replace(/\s+/g," ").trim()});function Pie(e=process.env){let t=e.KYNVER_OPENCLAW_AGENT?.trim();return t?`openclaw/${t}`:"openclaw/default"}function
|
|
286
|
+
`);try{return{event:t,data:JSON.parse(n)}}catch{return{event:t,data:n}}}async function*bm(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(`
|
|
287
|
+
`))!==-1;){let c=n.slice(0,l).replace(/\r$/,"");if(n=n.slice(l+1),c===""){let u=ZU(o);o=[],u&&(yield u)}else o.push(c)}}n+=r.decode(),n&&o.push(n.replace(/\r$/,""));let s=ZU(o);s&&(yield s)}finally{t.releaseLock()}}var UR=p(()=>{"use strict"});function WR(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 eW(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 tW(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"?"":WR(n.content)}).join(""):""}function $R(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:tW(r.response)||null,finishReason:"stop",error:null};if(n==="response.failed"||n==="error"){let d=r.response;return{delta:"",full:null,finishReason:"error",error:eW(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?eW(r.error)??"the agent reported an error":null,i=(Array.isArray(r.choices)?r.choices:[])[0]??null,a=WR(i?.delta?.content)||(typeof i?.text=="string"?i.text:""),l=i?.message?.content,c=l==null?null:WR(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 rW(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:tW(t),finishReason:"stop",error:null}:$R(null,e)}var nW=p(()=>{"use strict"});function oW(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}function Iie(e,t){if(!Array.isArray(e)||e.length===0)return null;let r=sW(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=oW(s.content);n===null&&i.trim()&&(n=i);continue}if(s.role!=="tool"&&s.role==="user")return n===null?null:!r||sW(oW(s.content)).includes(r)?n:null}}return null}async function iW(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 Iie(i?.data,e.sentText)}catch{return null}finally{clearTimeout(n),e.signal?.removeEventListener("abort",o)}}var sW,aW=p(()=>{"use strict";sW=e=>e.replace(/\s+/g," ").trim()});function Pie(e=process.env){let t=e.KYNVER_OPENCLAW_AGENT?.trim();return t?`openclaw/${t}`:"openclaw/default"}function vm(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 Tie(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 KR(e,t,r,n,o){let s=`Conversation opened from Kynver chat (${t}).`,i=o?Nf(o):null,a=r?.trim();if(a){let l=e==="hermes"?`${a}
|
|
288
288
|
|
|
289
289
|
${s}`:a;return i?`${l}
|
|
290
290
|
|
|
291
|
-
${i}`:l}return e==="hermes"&&!n?s:null}async function lW(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=KR(e.engine,e.sessionKey,e.styleNote,t!==null,e.conversationId);e.conversationId&&(n[tB]=e.conversationId),i&&o.push({role:"system",content:i}),e.engine==="hermes"?(t&&(n["X-Hermes-Session-Id"]=t),o.push({role:"user",content:
|
|
291
|
+
${i}`:l}return e==="hermes"&&!n?s:null}async function lW(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=KR(e.engine,e.sessionKey,e.styleNote,t!==null,e.conversationId);e.conversationId&&(n[tB]=e.conversationId),i&&o.push({role:"system",content:i}),e.engine==="hermes"?(t&&(n["X-Hermes-Session-Id"]=t),o.push({role:"user",content:vm(e.text,e.attachments)}),s={model:"hermes-agent",stream:!0,messages:o}):(o.push({role:"user",content:vm(e.text,e.attachments)}),s={model:Pie(),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 HR(e){let t=e.now??Date.now,r=e.engine==="hermes"?e.sessions.get(e.sessionKey):null,n=await lW(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 lW(e,null)),!n.ok||!n.body)throw await n.body?.cancel().catch(()=>{}),Tie(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=m=>{if(m.error){if(e.engine==="openclaw"&&s.trim()&&Oie.test(m.error))return"stop";throw new Error(`${e.engine}_failed: ${m.error}`)}return m.delta&&(s+=m.delta,e.sink.onDelta(m.delta)),m.full!==null&&m.full.trim()&&(l=m.full),m.finishReason&&(a=m.finishReason),"continue"},u=n.headers.get("content-type")??"";if(/application\/json/i.test(u)){let m=await n.json().catch(()=>null),f=rW(m);f&&c(f)}else{let m=new Map;for await(let f of bm(n.body)){if(f.data==="[DONE]")break;if(f.event==="hermes.tool.progress"){i=!0;let h=f.data??{},y=typeof h.toolCallId=="string"?h.toolCallId:String(h.tool??""),v=[h.emoji,h.label??h.tool].filter(k=>typeof k=="string"&&k).join(" ").slice(0,300);if(h.status==="running")m.set(y,{at:t(),label:v||"tool"}),e.sink.onTool({label:v||"tool",status:"running",durationMs:null});else{let k=m.get(y);m.delete(y),e.sink.onTool({label:k?.label??(v||String(h.tool??"tool")),status:"completed",durationMs:k===void 0?null:t()-k.at})}continue}if(f.event==="approval.request"){let h=f.data??{},y=[h.description,h.command].find(v=>typeof v=="string"&&v);e.sink.onTool({label:`Waiting for approval in ${e.engine==="hermes"?"Hermes":"OpenClaw"}${y?`: ${y.slice(0,200)}`:""}`,status:"approval",durationMs:null});continue}let g=$R(f.event,f.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 m=await iW({endpoint:e.endpoint,sessionId:o,sentText:e.text,fetchFn:e.fetchFn,signal:e.signal});if(m&&m.trim())return e.sink.onDelta(m),{text:m,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 Oie,jR=p(()=>{"use strict";Zl();UR();nW();aW();Oie=/cannot be represented as an append-only response stream/i});import{mkdirSync as Nie,readFileSync as Die,realpathSync as Mie,statSync as Lie,writeFileSync as Bie}from"node:fs";import{homedir as VR}from"node:os";import Nt from"node:path";function Sm(e=VR()){return Nt.join(e,".kynver","agent-tabs","inbox")}function Rm(e,t=80){return e.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"_").slice(0,t)||"file"}function cW(e,t,r={}){if(t.length===0)return[];let n=Nt.join(r.root??Sm(),Rm(e,120));Nie(n,{recursive:!0,mode:448});let o=(r.now??Date.now)();return t.map((s,i)=>{let a=Buffer.from(s.contentBase64,"base64"),l=Nt.join(n,`${o}-${i}-${Rm(s.name,120)}`);Bie(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}})}async function uW(e,t,r,n={}){let o=[],s=[];if(!t||t.length===0)return{saved:o,failed:s};let i=Nt.join(n.root??Sm(),Rm(e,120)),a=(n.now??Date.now)();for(let[l,c]of t.entries()){let u=Nt.join(i,`${a}-r${l}-${Rm(c.name,120)}`);try{if(!r)throw new Error("this Kynver version can't download large files \u2014 run `kynver update`");await r.download(c,u),o.push({name:c.name,mime:c.mime,path:u,imageDataUrl:null})}catch(d){s.push(`[Attached file "${c.name}" (${c.mime}) could not be downloaded to this computer: ${d instanceof Error?d.message:"download failed"}]`)}}return{saved:o,failed:s}}function _m(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(`
|
|
292
292
|
|
|
293
|
-
`)}function
|
|
293
|
+
`)}function Sc(e){let t=[];return{text:e.replace(Fie,(n,o,s,i,a)=>{let l=String(o??s??i??a??"").replace(/[),.;:!?\]]+$/,"");return l?(!t.includes(l)&&t.length<wm&&t.push(l),""):n}).replace(/[ \t]+\n/g,`
|
|
294
294
|
`).replace(/\n{3,}/g,`
|
|
295
295
|
|
|
296
|
-
`).trim(),paths:t}}function
|
|
296
|
+
`).trim(),paths:t}}function wc(e,t=VR()){let r=Nt.basename(e);if(Uie.test(r))return"credential_file";let n=Nt.relative(t,e);if(!n.startsWith("..")&&!Nt.isAbsolute(n)){let o=n.split(Nt.sep).join("/");if(lm.some(s=>o===s))return"credential_file";if(am.some(s=>o===s||o.startsWith(`${s}/`)))return"private_folder"}return null}function Wie(e,t){return e==="~"?t:e.startsWith("~/")||e.startsWith("~\\")?Nt.join(t,e.slice(2)):e}function JR(e,t={}){let r=t.home??VR(),n=Nt.resolve(Wie(e,r)),o={path:n,name:Nt.basename(n)},s=wc(n,r);if(s)return{...o,ok:!1,reason:s,sizeBytes:null,contentBase64:null};try{let i=Mie(n),a=wc(i,r);if(a)return{...o,ok:!1,reason:a,sizeBytes:null,contentBase64:null};let l=Lie(i);if(!l.isFile())return{...o,ok:!1,reason:"not_a_file",sizeBytes:null,contentBase64:null};if(l.size>GR)return{...o,ok:!1,reason:"too_large",sizeBytes:l.size,contentBase64:null};let c=Die(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 GR,wm,Fie,Uie,Yi=p(()=>{"use strict";hc();SR();GR=50*1024*1024,wm=10;Fie=/MEDIA:\s*(?:"([^"\n]+)"|'([^'\n]+)'|`([^`\n]+)`|((?:~|\/|[A-Za-z]:[\\/])[^\s"'`<>]*))/g;Uie=wR(Gi)});import{chmodSync as Kie,copyFileSync as Hie,mkdirSync as jie}from"node:fs";import YR from"node:path";function Jie(e,t,r=!1){let n=r?`${dW}.
|
|
297
297
|
|
|
298
298
|
${Gie}`:Vie,o=e?.trim(),s=o?`${n}
|
|
299
299
|
|
|
300
300
|
${o}`:n;return t?`${s}
|
|
301
301
|
|
|
302
|
-
${
|
|
302
|
+
${Nf(t)}`:s}function Yie(e){let t=e.config??I();return{engine:"claude-code",access:xs({engine:"claude-code",local:{chatComputerAccess:t.chatComputerAccess,chatWorkFolders:t.chatWorkFolders},website:Nu(e.payloadAccess,e.boxId),home:e.home})}}function zie(e,t){if(t.access==="full"||t.access==="off")return e;let r=YR.join(t.workDir,qie);return e.map(n=>{if(Mu(t,n.path))return n;jie(r,{recursive:!0,mode:448});let o=YR.join(r,YR.basename(n.path));return Hie(n.path,o),Kie(o,384),{...n,path:o}})}function Xie(e){return e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join("")}async function pW(e){let t=Yie(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??I(),n=e.env??process.env,o=_m(e.text,zie(e.attachments,t.access)),s=rB(e.conversationId,"claude-code"),i=await(e.prepareKynverTools??AU)({payloadKynverTools:e.kynverTools,env:n,connection:e.kynverToolsConnection!==void 0?e.kynverToolsConnection:Qie(),extraEnv:s,...e.tempRoot?{tempRoot:e.tempRoot}:{}});PU(i,{home:e.statusHome??e.home}),i.state!=="attached"&&console.error(JSON.stringify({event:"claude_code_tab_kynver_tools",state:i.state,reason:i.reason,turnId:e.turnId??null}));try{return await Zie(e,{computer:t,config:r,env:n,prompt:o,conversationEnv:s,tools:i})}finally{i.state==="attached"&&i.cleanup()}}function Qie(){let e=I().agentOsId?.trim(),t=Ut();return!e||!t?null:{apiBaseUrl:t,agentOsId:e,loadBoxCredential:()=>yn(e)}}async function Zie(e,t){let{computer:r,config:n,env:o,prompt:s,tools:i}=t,a=await(e.run??dm)({payload:{system:Jie(e.styleNote,e.conversationId,i.state==="attached"),tools:[],messages:[{role:"user",content:s}],maxTokens:32e3,executionMode:"agent"},model:o.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:r.access,signal:e.signal,turnId:e.turnId,onActivity:l=>e.onActivity(l,r),env:o,extraEnv:t.conversationEnv,...i.state==="attached"?{mcp:{configFile:i.configFile,allowedTools:i.allowedTools}}:{},sessions:e.sessions,config:{chatFolderSandbox:n.chatFolderSandbox,chatFolderSandboxDomains:n.chatFolderSandboxDomains},...e.spawnTarget?{spawnTarget:e.spawnTarget}:{},...e.tempRoot?{tempRoot:e.tempRoot}:{},...e.sandboxRuntime?{sandboxRuntime:e.sandboxRuntime}:{},...e.egressProxy?{egressProxy:e.egressProxy}:{}});return{text:Xie(a.content)}}var dW,Vie,Gie,qie,fW=p(()=>{"use strict";Zl();$();OR();so();CR();nm();Yi();dW="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",Vie=`${dW}; there are no Kynver tools in this conversation.`,Gie="You have Kynver's tools in this conversation: the `kynver` MCP server (this workspace's memory, tasks, plans, skills and audit log) is already connected and approved \u2014 use it instead of asking the user for a Kynver URL or token, and post updates to this chat with `kynver tab post`.";qie=".kynver-attachments"});import xm from"node:path";import{homedir as eae}from"node:os";function iae(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 aae(e){return e.replace(/[ \t]+\n/g,`
|
|
303
303
|
`).replace(/\n{3,}/g,`
|
|
304
304
|
|
|
305
|
-
`).trim()}function mW(e){let t=[];return e.includes("data:image/")?{text:e.replace(tae,(n,o,s,i)=>{if(t.length>=
|
|
306
|
-
`,{encoding:"utf8",mode:384})}catch{}}var bW=p(()=>{"use strict"});function RW(e,t=45e3){let r=setInterval(()=>{try{e()}catch{}},t);return r.unref?.(),()=>clearInterval(r)}var vW,wW=p(()=>{"use strict";vW="heartbeat"});function gae(){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})},setApprove(t,r,n){let o=e.get(t);o&&o.turnId===r&&e.set(t,{...o,approve:n})},get(t){return e.get(t)??null}}}var SW,_W=p(()=>{"use strict";SW=gae()});async function xW(e,t,r){let n=e.get(t);return n?r.op==="stop"?n.stop():r.op==="approve"?n.approve&&r.choice?n.approve(r.choice,r.approvalId):"unsupported":!n.steer||!r.text?n.withImages?"unsupported_media":"unsupported":n.steer(r.text):"no_run"}function CW(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 EW=p(()=>{"use strict"});function hae(e){if(typeof e=="number"&&Number.isFinite(e))return e>1e12?e:e*1e3;if(typeof e=="string"){let t=Date.parse(e);return Number.isNaN(t)?null:t}return null}function yae(e,t,r=9e5){if(!Array.isArray(e))return"unknown";if(e.length===0)return"idle";let n=e[e.length-1];if(!n||typeof n!="object")return"unknown";let o=hae(n.timestamp??n.created_at);if(o!==null&&t-o>r)return"idle";if(n.role==="user"||n.role==="tool")return"busy";if(n.role==="assistant"){let s=Array.isArray(n.tool_calls)&&n.tool_calls.length>0,i=typeof n.content=="string"?n.content.trim().length>0:Array.isArray(n.content)&&n.content.length>0;return s&&!i?"busy":"idle"}return"unknown"}function AW(e,t,r=fetch,n=Date.now){return async()=>{try{let o=await r(`${e.baseUrl}/api/sessions/${encodeURIComponent(t)}/messages`,{headers:e.key?{Authorization:`Bearer ${e.key}`}:{},signal:AbortSignal.timeout(5e3)});if(!o.ok)return"unknown";let s=await o.json().catch(()=>null),i=Array.isArray(s)?s:s?.data??s?.messages;return yae(i,n())}catch{return"unknown"}}}function IW(e=process.env){let t=e.KYNVER_HERMES_ADOPT_HOLD?.trim().toLowerCase();return!(t==="off"||t==="0"||t==="false")}async function PW(e){let t=e.now??Date.now,r=e.sleep??(s=>new Promise(i=>setTimeout(i,s))),n=t(),o=!1;for(;;){if(e.signal?.aborted)return{waitedMs:t()-n,outcome:"aborted"};let s=await e.probe();if(s==="idle")return{waitedMs:t()-n,outcome:"idle"};if(s==="unknown")return{waitedMs:t()-n,outcome:"unknown"};if(o||(o=!0,e.onWait?.()),t()-n>=(e.maxMs??6e5))return{waitedMs:t()-n,outcome:"timeout"};await r(e.pollMs??2e3)}}var TW=p(()=>{"use strict"});import{execFile as kae}from"node:child_process";function zR(e,t){if(typeof e=="number"&&Number.isFinite(e))return e>1e12?e:e*1e3;if(typeof e!="string")return null;let r=e.trim().toLowerCase();if(!r)return null;if(r==="just now"||r==="now")return t;let n=r.match(/^(\d+(?:\.\d+)?)\s*(s|m|h|d|w)[a-z]*\s+ago$/);if(n)return t-Number(n[1])*bae[n[2]];if(/^\d{9,13}$/.test(r))return zR(Number(r),t);let o=Date.parse(e);return Number.isNaN(o)?null:o}function Rr(e){return typeof e=="string"&&e.trim()?e.trim():typeof e=="number"?String(e):null}function vae(e,t){let r=Array.isArray(e)?e:e&&typeof e=="object"&&Array.isArray(e.sessions)?e.sessions:null;if(!r)return null;let n=[];return r.forEach(o=>{if(!o||typeof o!="object")return;let s=o,i=Rr(s.id)??Rr(s.session_id);i&&n.push({id:i,source:Rr(s.source)??Rr(s.platform)??Rr(s.src),chat:Rr(s.chat_id)??Rr(s.chat)??Rr(s.user_id),lastActiveMs:zR(s.last_active??s.updated_at??s.last_active_at??s.ended_at??s.started_at,t),order:n.length})}),n}function Rae(e,t){let r=e.split(/\r?\n/).filter(m=>m.trim()&&!/^[-─=\s]+$/.test(m)),n=r.findIndex(m=>/\bid\b/i.test(m)&&(/\bsrc\b|\bsource\b/i.test(m)||/last active/i.test(m)));if(n<0)return[];let o=m=>m.trim().split(/\s{2,}/).map(f=>f.trim()),s=o(r[n]).map(m=>m.toLowerCase()),i=m=>s.findIndex(f=>m.test(f)),a=i(/^id$|session/),l=i(/^src$|source|platform/),c=i(/chat|user/),u=i(/last active|updated|active/);if(a<0)return[];let d=[];for(let m of r.slice(n+1)){let f=o(m);if(a===s.length-1&&f.length<s.length){let h=m.trim().split(/\s+/),y=h.slice(-2);f=[...f.slice(0,s.length-2),...y.length===2?y:h.slice(-1)]}let g=f[a]?.match(/[A-Za-z0-9][A-Za-z0-9_.:-]{5,}/)?.[0];g&&d.push({id:g,source:l>=0?Rr(f[l])?.toLowerCase()??null:null,chat:c>=0?Rr(f[c]):null,lastActiveMs:u>=0?zR(f[u],t):null,order:d.length})}return d}function wae(e,t=Date.now()){let r=e.trim();if(!r)return[];if(r.startsWith("[")||r.startsWith("{"))try{let n=vae(JSON.parse(r),t);if(n)return n}catch{}return Rae(r,t)}function OW(e=process.env){let t=e.KYNVER_HERMES_BIN?.trim()||e.HERMES_BIN?.trim()||"hermes",r=n=>new Promise((o,s)=>{let[i,a]=oe(t,n);kae(i,a,X({encoding:"utf8",timeout:15e3,maxBuffer:4*1024*1024}),(l,c)=>l?s(l):o(String(c??"")))});return async()=>{let n="";try{n=await r(["sessions","list","--json"])}catch{n=""}if(!n.trim().startsWith("[")&&!n.trim().startsWith("{"))try{n=await r(["sessions","list"])}catch{throw new Error("hermes_sessions_list_failed")}return wae(n)}}function NW(e,t){let r=e.filter(n=>(n.source??"").toLowerCase()===t.source.toLowerCase()&&(!t.chat||n.chat===t.chat));return r.length===0?null:[...r].sort((n,o)=>n.lastActiveMs!==null&&o.lastActiveMs!==null&&n.lastActiveMs!==o.lastActiveMs?o.lastActiveMs-n.lastActiveMs:n.order-o.order)[0]}var bae,XR=p(()=>{"use strict";Te();U();bae={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5}});async function MW(e,t){let r=t.adoptions.get(e);if(!r)return{adopted:!1};let n=(t.now??Date.now)(),o=r.sessionId,s=null;if(n-(DW.get(e)??0)>=(t.minIntervalMs??Sae)){DW.set(e,n);try{let l=NW(await t.list(),{source:r.source,chat:r.chat});l&&l.id!==r.sessionId?(s=r.sessionId,o=l.id,t.adoptions.update(e,{sessionId:o,rotatedAt:n,rotations:r.rotations+1,lastError:null})):r.lastError&&t.adoptions.update(e,{lastError:null})}catch(l){let c=l instanceof Error&&/^[a-z][a-z0-9_]{2,60}$/.test(l.message)?l.message:"follow_failed";t.adoptions.update(e,{lastError:c})}}let a=t.sessions.get(e)!==o;return a&&t.sessions.remember(e,o),{adopted:!0,sessionId:o,rotatedFrom:s,repinned:a}}var Sae,DW,LW=p(()=>{"use strict";XR();Sae=2e4,DW=new Map});async function BW(e,t){let r=await MW(e,{adoptions:t.adoptions,sessions:t.sessions,list:t.list,...t.now?{now:t.now}:{}});if(!r.adopted)return{adopted:!1};if(!IW())return{adopted:!0,sessionId:r.sessionId,hold:null};let n=t.probe?t.probe(r.sessionId):AW(t.endpoint,r.sessionId,t.fetchFn,t.now),o=await PW({probe:n,...t.signal?{signal:t.signal}:{},...t.now?{now:t.now}:{},...t.sleep?{sleep:t.sleep}:{},...t.onWait?{onWait:t.onWait}:{}});return o.waitedMs>0&&t.adoptions.update(e,{lastHoldMs:o.waitedMs,lastHoldAt:(t.now??Date.now)(),lastError:o.outcome==="timeout"?"hold_timeout":null}),{adopted:!0,sessionId:r.sessionId,hold:o}}var FW=p(()=>{"use strict";TW();LW()});function xae(e){return e==="deny"?"/deny":e==="once"?"/approve":`/approve ${e}`}function Cae(e,t,r){let n=[e.approval_id,e.id,e.request_id].find(i=>typeof i=="string"&&/^[A-Za-z0-9._:-]{1,120}$/.test(i)),o=[e.description,e.command].find(i=>typeof i=="string"&&i)?.slice(0,300)??"",s=Array.isArray(e.choices)?Df.filter(i=>e.choices.includes(i)):[];return{id:n??`ap-${t.slice(0,24)}-${r}`,what:o,choices:s.length>0?s:[...Df]}}function HW(e){return!KW.has(e.baseUrl)}function wc(e,t=!0){let r={};return t&&(r["Content-Type"]="application/json"),e.key&&(r.Authorization=`Bearer ${e.key}`),r}async function jW(e,t={}){if((t.env??process.env).KYNVER_HERMES_RUNS==="0")return!1;let r=(t.now??Date.now)(),n=UW.get(e.baseUrl);if(n&&r-n.at<Eae)return n.ok;let o=!1;try{let s=await(t.fetchFn??fetch)(`${e.baseUrl}/v1/capabilities`,{headers:wc(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 UW.set(e.baseUrl,{at:r,ok:o}),o}function Iae(e){return typeof e=="string"&&Aae.includes(e)}async function xm(e,t,r,n){try{let o=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}/${r}`,{method:"POST",headers:wc(e.endpoint),body:JSON.stringify(n),signal:AbortSignal.timeout($W)});return await o.body?.cancel().catch(()=>{}),o.ok?"delivered":o.status===404||o.status===409?"no_run":"failed"}catch{return"failed"}}function Pae(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 Ji(`hermes_runs_http_${e}`)}function WW(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 VW(e,t){let r=e.fetchFn??fetch,n=e.now??Date.now,o=e.sessions.get(e.sessionKey),s=KR("hermes",e.sessionKey,e.styleNote,o!==null),i=e.attachments.some(R=>R.imageDataUrl),a;try{a=await r(`${e.endpoint.baseUrl}/v1/runs`,{method:"POST",headers:wc(e.endpoint),body:JSON.stringify({model:"hermes-agent",input:i?[{role:"user",content:bm(e.text,e.attachments)}]:e.text,...o?{session_id:o}:{},...s?{instructions:s}:{}}),signal:e.signal})}catch(R){throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: nothing answered on ${e.endpoint.baseUrl}`,{cause:R})}if(!a.ok)throw await a.body?.cancel().catch(()=>{}),i&&Tae.has(a.status)&&KW.add(e.endpoint.baseUrl),Pae(a.status);let l=await a.json().catch(()=>null),c=typeof l?.run_id=="string"?l.run_id:null;if(!c)throw new Ji("hermes_runs_no_run_id");let u=null,d=null,m=0,f=R=>{if(!d)return;let P=d;d=null,clearTimeout(P.timer),e.sink.onTool({label:R==="expired"?"Forge stopped waiting for approval":"Approval answered",status:"completed",durationMs:null,approval:{id:P.id,resolved:R}})},g={runId:c,steer:R=>xm(e,c,"steer",{text:R}),stop:()=>u??=xm(e,c,"stop",{}),approve:async(R,P)=>{if(!d||P&&P!==d.id)return"no_run";let N=d.id,x=await xm(e,c,"approve",{choice:R,approval_id:N});return(x==="no_run"||x==="failed")&&(x=await xm(e,c,"steer",{text:xae(R)})),x==="delivered"&&d?.id===N&&f("answered"),x}};t?.(g);let h=()=>{Iae(e.signal?.reason)&&g.stop()};e.signal?.addEventListener("abort",h,{once:!0});let y="",v=null,k=null,b=null,S=new Map;try{let R=await r(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(c)}/events`,{headers:{...wc(e.endpoint,!1),Accept:"text/event-stream"},signal:e.signal}).catch(P=>{throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: the run's events stream closed (${P instanceof Error?P.message:String(P)})`)});if(!R.ok||!R.body)throw await R.body?.cancel().catch(()=>{}),new Error(`hermes_http_${R.status}`);for await(let P of km(R.body)){let N=P.data&&typeof P.data=="object"?P.data:{},x=typeof N.event=="string"?N.event:P.event;if(x==="message.delta"&&typeof N.delta=="string")y+=N.delta,e.sink.onDelta(N.delta);else if(x==="message.interim"&&typeof N.text=="string"&&!N.already_streamed){let O=`${y&&!y.endsWith(`
|
|
305
|
+
`).trim()}function mW(e){let t=[];return e.includes("data:image/")?{text:e.replace(tae,(n,o,s,i)=>{if(t.length>=wm)return n;let a=s.toLowerCase(),l=`image-${t.length+1}.${rae[a]??"png"}`,c=iae(i);return c>GR?(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 lae(e){let t=e.replace(sae,n=>" ".repeat(n.length)),r=[];for(let n of t.matchAll(oae)){let o=n[1].replace(/[),.;:!?\]]+$/,"");r.includes(o)||r.push(o)}return r}function cae(e,t){return e.startsWith("~/")?xm.join(t,e.slice(2)):e}function uae(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 gW(e,t={}){let r=t.home??eae(),n=xm.resolve(t.inboxRoot??Sm(r)),o=[],s=()=>o.length<wm,i=mW(e);o.push(...i.files);let a=Sc(i.text);for(let u of a.paths){if(!s())break;o.push({source:"tag",...JR(u,{home:r})})}let l=a.text,c=new Set(o.map(u=>u.path));for(let u of lae(l)){if(!s())break;let d=xm.resolve(cae(u,r));if(c.has(d)||d===n||d.startsWith(`${n}${xm.sep}`))continue;let m=JR(u,{home:r});!m.ok&&m.reason!=="too_large"||(c.add(m.path),o.push({source:"path",...m}),m.ok&&(l=uae(l,u)))}return{text:aae(l),files:o}}function qR(e){return Sc(mW(e).text).text}var tae,rae,nae,oae,sae,hW=p(()=>{"use strict";Yi();tae=/!\[([^\]\n]{0,200})\]\(\s*data:(image\/[a-z0-9.+-]{1,40});base64,([A-Za-z0-9+/=\r\n]+)\s*\)/gi,rae={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp"},nae=["mp4","mov","m4v","webm","mkv","mp3","m4a","wav","ogg","oga","opus","aac","flac","png","jpg","jpeg","gif","webp","heic","pdf"],oae=new RegExp(String.raw`(?<![\w/:.~-])((?:~\/|\/)[^\s"'\`<>()\[\]{}|]*?\.(?:${nae.join("|")}))(?![\w/-])`,"gi"),sae=/```[\s\S]*?(?:```|$)/g});import{appendFileSync as dae,mkdirSync as pae}from"node:fs";import{homedir as fae}from"node:os";import yW from"node:path";function mae(e=fae()){return yW.join(e,".kynver","logs","agent-tabs.jsonl")}function kW(e,t=mae()){try{pae(yW.dirname(t),{recursive:!0});let r={...e,...e.label?{label:e.label.slice(0,300)}:{}};dae(t,`${JSON.stringify(r)}
|
|
306
|
+
`,{encoding:"utf8",mode:384})}catch{}}var bW=p(()=>{"use strict"});function RW(e,t=45e3){let r=setInterval(()=>{try{e()}catch{}},t);return r.unref?.(),()=>clearInterval(r)}var vW,wW=p(()=>{"use strict";vW="heartbeat"});function gae(){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})},setApprove(t,r,n){let o=e.get(t);o&&o.turnId===r&&e.set(t,{...o,approve:n})},get(t){return e.get(t)??null}}}var SW,_W=p(()=>{"use strict";SW=gae()});async function xW(e,t,r){let n=e.get(t);return n?r.op==="stop"?n.stop():r.op==="approve"?n.approve&&r.choice?n.approve(r.choice,r.approvalId):"unsupported":!n.steer||!r.text?n.withImages?"unsupported_media":"unsupported":n.steer(r.text):"no_run"}function CW(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 EW=p(()=>{"use strict"});function hae(e){if(typeof e=="number"&&Number.isFinite(e))return e>1e12?e:e*1e3;if(typeof e=="string"){let t=Date.parse(e);return Number.isNaN(t)?null:t}return null}function yae(e,t,r=9e5){if(!Array.isArray(e))return"unknown";if(e.length===0)return"idle";let n=e[e.length-1];if(!n||typeof n!="object")return"unknown";let o=hae(n.timestamp??n.created_at);if(o!==null&&t-o>r)return"idle";if(n.role==="user"||n.role==="tool")return"busy";if(n.role==="assistant"){let s=Array.isArray(n.tool_calls)&&n.tool_calls.length>0,i=typeof n.content=="string"?n.content.trim().length>0:Array.isArray(n.content)&&n.content.length>0;return s&&!i?"busy":"idle"}return"unknown"}function AW(e,t,r=fetch,n=Date.now){return async()=>{try{let o=await r(`${e.baseUrl}/api/sessions/${encodeURIComponent(t)}/messages`,{headers:e.key?{Authorization:`Bearer ${e.key}`}:{},signal:AbortSignal.timeout(5e3)});if(!o.ok)return"unknown";let s=await o.json().catch(()=>null),i=Array.isArray(s)?s:s?.data??s?.messages;return yae(i,n())}catch{return"unknown"}}}function IW(e=process.env){let t=e.KYNVER_HERMES_ADOPT_HOLD?.trim().toLowerCase();return!(t==="off"||t==="0"||t==="false")}async function PW(e){let t=e.now??Date.now,r=e.sleep??(s=>new Promise(i=>setTimeout(i,s))),n=t(),o=!1;for(;;){if(e.signal?.aborted)return{waitedMs:t()-n,outcome:"aborted"};let s=await e.probe();if(s==="idle")return{waitedMs:t()-n,outcome:"idle"};if(s==="unknown")return{waitedMs:t()-n,outcome:"unknown"};if(o||(o=!0,e.onWait?.()),t()-n>=(e.maxMs??6e5))return{waitedMs:t()-n,outcome:"timeout"};await r(e.pollMs??2e3)}}var TW=p(()=>{"use strict"});import{execFile as kae}from"node:child_process";function zR(e,t){if(typeof e=="number"&&Number.isFinite(e))return e>1e12?e:e*1e3;if(typeof e!="string")return null;let r=e.trim().toLowerCase();if(!r)return null;if(r==="just now"||r==="now")return t;let n=r.match(/^(\d+(?:\.\d+)?)\s*(s|m|h|d|w)[a-z]*\s+ago$/);if(n)return t-Number(n[1])*bae[n[2]];if(/^\d{9,13}$/.test(r))return zR(Number(r),t);let o=Date.parse(e);return Number.isNaN(o)?null:o}function wr(e){return typeof e=="string"&&e.trim()?e.trim():typeof e=="number"?String(e):null}function vae(e,t){let r=Array.isArray(e)?e:e&&typeof e=="object"&&Array.isArray(e.sessions)?e.sessions:null;if(!r)return null;let n=[];return r.forEach(o=>{if(!o||typeof o!="object")return;let s=o,i=wr(s.id)??wr(s.session_id);i&&n.push({id:i,source:wr(s.source)??wr(s.platform)??wr(s.src),chat:wr(s.chat_id)??wr(s.chat)??wr(s.user_id),lastActiveMs:zR(s.last_active??s.updated_at??s.last_active_at??s.ended_at??s.started_at,t),order:n.length})}),n}function Rae(e,t){let r=e.split(/\r?\n/).filter(m=>m.trim()&&!/^[-─=\s]+$/.test(m)),n=r.findIndex(m=>/\bid\b/i.test(m)&&(/\bsrc\b|\bsource\b/i.test(m)||/last active/i.test(m)));if(n<0)return[];let o=m=>m.trim().split(/\s{2,}/).map(f=>f.trim()),s=o(r[n]).map(m=>m.toLowerCase()),i=m=>s.findIndex(f=>m.test(f)),a=i(/^id$|session/),l=i(/^src$|source|platform/),c=i(/chat|user/),u=i(/last active|updated|active/);if(a<0)return[];let d=[];for(let m of r.slice(n+1)){let f=o(m);if(a===s.length-1&&f.length<s.length){let h=m.trim().split(/\s+/),y=h.slice(-2);f=[...f.slice(0,s.length-2),...y.length===2?y:h.slice(-1)]}let g=f[a]?.match(/[A-Za-z0-9][A-Za-z0-9_.:-]{5,}/)?.[0];g&&d.push({id:g,source:l>=0?wr(f[l])?.toLowerCase()??null:null,chat:c>=0?wr(f[c]):null,lastActiveMs:u>=0?zR(f[u],t):null,order:d.length})}return d}function wae(e,t=Date.now()){let r=e.trim();if(!r)return[];if(r.startsWith("[")||r.startsWith("{"))try{let n=vae(JSON.parse(r),t);if(n)return n}catch{}return Rae(r,t)}function OW(e=process.env){let t=e.KYNVER_HERMES_BIN?.trim()||e.HERMES_BIN?.trim()||"hermes",r=n=>new Promise((o,s)=>{let[i,a]=oe(t,n);kae(i,a,X({encoding:"utf8",timeout:15e3,maxBuffer:4*1024*1024}),(l,c)=>l?s(l):o(String(c??"")))});return async()=>{let n="";try{n=await r(["sessions","list","--json"])}catch{n=""}if(!n.trim().startsWith("[")&&!n.trim().startsWith("{"))try{n=await r(["sessions","list"])}catch{throw new Error("hermes_sessions_list_failed")}return wae(n)}}function NW(e,t){let r=e.filter(n=>(n.source??"").toLowerCase()===t.source.toLowerCase()&&(!t.chat||n.chat===t.chat));return r.length===0?null:[...r].sort((n,o)=>n.lastActiveMs!==null&&o.lastActiveMs!==null&&n.lastActiveMs!==o.lastActiveMs?o.lastActiveMs-n.lastActiveMs:n.order-o.order)[0]}var bae,XR=p(()=>{"use strict";Te();U();bae={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5}});async function MW(e,t){let r=t.adoptions.get(e);if(!r)return{adopted:!1};let n=(t.now??Date.now)(),o=r.sessionId,s=null;if(n-(DW.get(e)??0)>=(t.minIntervalMs??Sae)){DW.set(e,n);try{let l=NW(await t.list(),{source:r.source,chat:r.chat});l&&l.id!==r.sessionId?(s=r.sessionId,o=l.id,t.adoptions.update(e,{sessionId:o,rotatedAt:n,rotations:r.rotations+1,lastError:null})):r.lastError&&t.adoptions.update(e,{lastError:null})}catch(l){let c=l instanceof Error&&/^[a-z][a-z0-9_]{2,60}$/.test(l.message)?l.message:"follow_failed";t.adoptions.update(e,{lastError:c})}}let a=t.sessions.get(e)!==o;return a&&t.sessions.remember(e,o),{adopted:!0,sessionId:o,rotatedFrom:s,repinned:a}}var Sae,DW,LW=p(()=>{"use strict";XR();Sae=2e4,DW=new Map});async function BW(e,t){let r=await MW(e,{adoptions:t.adoptions,sessions:t.sessions,list:t.list,...t.now?{now:t.now}:{}});if(!r.adopted)return{adopted:!1};if(!IW())return{adopted:!0,sessionId:r.sessionId,hold:null};let n=t.probe?t.probe(r.sessionId):AW(t.endpoint,r.sessionId,t.fetchFn,t.now),o=await PW({probe:n,...t.signal?{signal:t.signal}:{},...t.now?{now:t.now}:{},...t.sleep?{sleep:t.sleep}:{},...t.onWait?{onWait:t.onWait}:{}});return o.waitedMs>0&&t.adoptions.update(e,{lastHoldMs:o.waitedMs,lastHoldAt:(t.now??Date.now)(),lastError:o.outcome==="timeout"?"hold_timeout":null}),{adopted:!0,sessionId:r.sessionId,hold:o}}var FW=p(()=>{"use strict";TW();LW()});function xae(e){return e==="deny"?"/deny":e==="once"?"/approve":`/approve ${e}`}function Cae(e,t,r){let n=[e.approval_id,e.id,e.request_id].find(i=>typeof i=="string"&&/^[A-Za-z0-9._:-]{1,120}$/.test(i)),o=[e.description,e.command].find(i=>typeof i=="string"&&i)?.slice(0,300)??"",s=Array.isArray(e.choices)?Mf.filter(i=>e.choices.includes(i)):[];return{id:n??`ap-${t.slice(0,24)}-${r}`,what:o,choices:s.length>0?s:[...Mf]}}function HW(e){return!KW.has(e.baseUrl)}function _c(e,t=!0){let r={};return t&&(r["Content-Type"]="application/json"),e.key&&(r.Authorization=`Bearer ${e.key}`),r}async function jW(e,t={}){if((t.env??process.env).KYNVER_HERMES_RUNS==="0")return!1;let r=(t.now??Date.now)(),n=UW.get(e.baseUrl);if(n&&r-n.at<Eae)return n.ok;let o=!1;try{let s=await(t.fetchFn??fetch)(`${e.baseUrl}/v1/capabilities`,{headers:_c(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 UW.set(e.baseUrl,{at:r,ok:o}),o}function Iae(e){return typeof e=="string"&&Aae.includes(e)}async function Cm(e,t,r,n){try{let o=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}/${r}`,{method:"POST",headers:_c(e.endpoint),body:JSON.stringify(n),signal:AbortSignal.timeout($W)});return await o.body?.cancel().catch(()=>{}),o.ok?"delivered":o.status===404||o.status===409?"no_run":"failed"}catch{return"failed"}}function Pae(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 qi(`hermes_runs_http_${e}`)}function WW(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 VW(e,t){let r=e.fetchFn??fetch,n=e.now??Date.now,o=e.sessions.get(e.sessionKey),s=KR("hermes",e.sessionKey,e.styleNote,o!==null),i=e.attachments.some(R=>R.imageDataUrl),a;try{a=await r(`${e.endpoint.baseUrl}/v1/runs`,{method:"POST",headers:_c(e.endpoint),body:JSON.stringify({model:"hermes-agent",input:i?[{role:"user",content:vm(e.text,e.attachments)}]:e.text,...o?{session_id:o}:{},...s?{instructions:s}:{}}),signal:e.signal})}catch(R){throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: nothing answered on ${e.endpoint.baseUrl}`,{cause:R})}if(!a.ok)throw await a.body?.cancel().catch(()=>{}),i&&Tae.has(a.status)&&KW.add(e.endpoint.baseUrl),Pae(a.status);let l=await a.json().catch(()=>null),c=typeof l?.run_id=="string"?l.run_id:null;if(!c)throw new qi("hermes_runs_no_run_id");let u=null,d=null,m=0,f=R=>{if(!d)return;let P=d;d=null,clearTimeout(P.timer),e.sink.onTool({label:R==="expired"?"Forge stopped waiting for approval":"Approval answered",status:"completed",durationMs:null,approval:{id:P.id,resolved:R}})},g={runId:c,steer:R=>Cm(e,c,"steer",{text:R}),stop:()=>u??=Cm(e,c,"stop",{}),approve:async(R,P)=>{if(!d||P&&P!==d.id)return"no_run";let N=d.id,x=await Cm(e,c,"approve",{choice:R,approval_id:N});return(x==="no_run"||x==="failed")&&(x=await Cm(e,c,"steer",{text:xae(R)})),x==="delivered"&&d?.id===N&&f("answered"),x}};t?.(g);let h=()=>{Iae(e.signal?.reason)&&g.stop()};e.signal?.addEventListener("abort",h,{once:!0});let y="",v=null,k=null,b=null,S=new Map;try{let R=await r(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(c)}/events`,{headers:{..._c(e.endpoint,!1),Accept:"text/event-stream"},signal:e.signal}).catch(P=>{throw e.signal?.aborted?new Error("hermes_aborted"):new Error(`hermes_unreachable: the run's events stream closed (${P instanceof Error?P.message:String(P)})`)});if(!R.ok||!R.body)throw await R.body?.cancel().catch(()=>{}),new Error(`hermes_http_${R.status}`);for await(let P of bm(R.body)){let N=P.data&&typeof P.data=="object"?P.data:{},x=typeof N.event=="string"?N.event:P.event;if(x==="message.delta"&&typeof N.delta=="string")y+=N.delta,e.sink.onDelta(N.delta);else if(x==="message.interim"&&typeof N.text=="string"&&!N.already_streamed){let O=`${y&&!y.endsWith(`
|
|
307
307
|
`)?`
|
|
308
308
|
|
|
309
|
-
`:""}${N.text}`;y+=O,e.sink.onDelta(O)}else if(x==="tool.started"){f("answered");let O=typeof N.tool_call_id=="string"?N.tool_call_id:String(N.tool??""),M=WW(N);S.set(O,{at:n(),label:M}),e.sink.onTool({label:M,status:"running",durationMs:null})}else if(x==="tool.completed"){f("answered");let O=typeof N.tool_call_id=="string"?N.tool_call_id:String(N.tool??""),M=S.get(O);S.delete(O),e.sink.onTool({label:M?.label??WW(N),status:"completed",durationMs:M?n()-M.at:typeof N.duration=="number"?Math.round(N.duration*1e3):null})}else if(x==="approval.request"){let O=Cae(N,c,++m);d&&clearTimeout(d.timer);let M=setTimeout(()=>f("expired"),Number(process.env.KYNVER_HERMES_APPROVAL_TIMEOUT_MS)||_ae);M.unref?.(),d={id:O.id,what:O.what,timer:M},e.sink.onTool({label:`Waiting for approval in Hermes${O.what?`: ${O.what.slice(0,200)}`:""}`,status:"approval",durationMs:null,approval:O})}else if(x==="run.completed"){k="completed",typeof N.output=="string"&&(v=N.output);break}else if(x==="run.failed"||x==="run.interrupted"){k="failed",b=typeof N.error=="string"?N.error:"the agent stopped with an error \u2014 check its logs";break}else if(x==="run.cancelled"){k="cancelled";break}}}catch(R){throw e.signal?.aborted?new Error("hermes_aborted"):R}finally{e.signal?.removeEventListener("abort",h),d&&(clearTimeout(d.timer),d=null)}if(e.signal?.aborted||k==="cancelled")throw new Error("hermes_aborted");let w=await Oae(e,c);!k&&w&&(w.status==="completed"?v=w.output??v:w.status==="failed"&&(b=w.error??"the agent stopped with an error \u2014 check its logs"));let _=w?.sessionId??o??c;if(e.sessions.remember(e.sessionKey,_),b&&!y.trim())throw new Error(`hermes_failed: ${b}`);if(!y.trim()&&v&&v.trim()&&(y=v,e.sink.onDelta(v)),!y.trim())throw new Error("hermes_empty_reply: the agent sent back nothing \u2014 check its model sign-in and logs");return{text:y,sessionId:_}}async function Oae(e,t){try{let r=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}`,{headers:
|
|
309
|
+
`:""}${N.text}`;y+=O,e.sink.onDelta(O)}else if(x==="tool.started"){f("answered");let O=typeof N.tool_call_id=="string"?N.tool_call_id:String(N.tool??""),M=WW(N);S.set(O,{at:n(),label:M}),e.sink.onTool({label:M,status:"running",durationMs:null})}else if(x==="tool.completed"){f("answered");let O=typeof N.tool_call_id=="string"?N.tool_call_id:String(N.tool??""),M=S.get(O);S.delete(O),e.sink.onTool({label:M?.label??WW(N),status:"completed",durationMs:M?n()-M.at:typeof N.duration=="number"?Math.round(N.duration*1e3):null})}else if(x==="approval.request"){let O=Cae(N,c,++m);d&&clearTimeout(d.timer);let M=setTimeout(()=>f("expired"),Number(process.env.KYNVER_HERMES_APPROVAL_TIMEOUT_MS)||_ae);M.unref?.(),d={id:O.id,what:O.what,timer:M},e.sink.onTool({label:`Waiting for approval in Hermes${O.what?`: ${O.what.slice(0,200)}`:""}`,status:"approval",durationMs:null,approval:O})}else if(x==="run.completed"){k="completed",typeof N.output=="string"&&(v=N.output);break}else if(x==="run.failed"||x==="run.interrupted"){k="failed",b=typeof N.error=="string"?N.error:"the agent stopped with an error \u2014 check its logs";break}else if(x==="run.cancelled"){k="cancelled";break}}}catch(R){throw e.signal?.aborted?new Error("hermes_aborted"):R}finally{e.signal?.removeEventListener("abort",h),d&&(clearTimeout(d.timer),d=null)}if(e.signal?.aborted||k==="cancelled")throw new Error("hermes_aborted");let w=await Oae(e,c);!k&&w&&(w.status==="completed"?v=w.output??v:w.status==="failed"&&(b=w.error??"the agent stopped with an error \u2014 check its logs"));let _=w?.sessionId??o??c;if(e.sessions.remember(e.sessionKey,_),b&&!y.trim())throw new Error(`hermes_failed: ${b}`);if(!y.trim()&&v&&v.trim()&&(y=v,e.sink.onDelta(v)),!y.trim())throw new Error("hermes_empty_reply: the agent sent back nothing \u2014 check its model sign-in and logs");return{text:y,sessionId:_}}async function Oae(e,t){try{let r=await(e.fetchFn??fetch)(`${e.endpoint.baseUrl}/v1/runs/${encodeURIComponent(t)}`,{headers:_c(e.endpoint,!1),signal:AbortSignal.timeout($W)});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 qi,_ae,Eae,$W,UW,KW,Aae,Tae,GW=p(()=>{"use strict";UR();jR();ec();qi=class extends Error{constructor(t){super(t),this.name="HermesRunsUnavailable"}},_ae=3e5;Eae=5*6e4,$W=1e4,UW=new Map,KW=new Set;Aae=["website_stop","too_long"];Tae=new Set([400,415,422])});import Nae from"node:path";async function qW(e,t,r={}){let n=r.now??(()=>new Date),o=r.log??kW,s=iB(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??SW;if(s.control){let T=await xW(l,s.sessionKey,s.control);o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:T==="delivered",durationMs:n().getTime()-a,reason:`control_${s.control.op}_${T}`}),await qt(()=>e([CW(0,i,s.control,T)]).catch(()=>!1));return}let c=0,u=!1,d=new AbortController,m=new Kn,f=s.replyTurnId&&r.late?s.replyTurnId:null,g=!1,h=null,y=T=>{d.signal.aborted||(h=T,d.abort(T))},v=()=>{!f||!r.late||r.late.heartbeat(f).then(T=>{T==="stop"?y("website_stop"):T==="gone"&&y("website_gone")})},k=()=>{if(!u){if(u=!0,f&&!d.signal.aborted){g=!0,o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"detached",ok:!0,durationMs:n().getTime()-a}),v(),setTimeout(v,Math.min(5e3,r.heartbeatMs??45e3)).unref?.();return}d.abort("relay_closed")}},b=T=>{u||m.track(e([{seq:c++,...T}]).then(C=>(C||k(),C),()=>!1))},S=RW(()=>{g?v():u||b({kind:"activity",activity:{kind:vW,at:n().toISOString(),turnId:t.turnId}})},r.heartbeatMs??45e3),w=f?setTimeout(()=>y("too_long"),r.maxTurnMs??72e5):null;w?.unref?.();let _=async(T,C)=>{if(!f||!r.late)return;let j=await r.late.deliver({replyTurnId:f,engine:i,text:T,files:C});o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"late_reply",ok:j,durationMs:n().getTime()-a})},R=new $n(T=>b({kind:"delta",text:T}),r.flushFloorMs,r.redactor),P=T=>{R.flush(),b({kind:"activity",activity:T})},N=T=>{let C={at:n().toISOString(),chat:null,turnId:t.turnId,kind:"tool",engine:i,access:"own",command:T.label,folder:"",durationMs:T.durationMs,ok:T.status!=="approval"&&T.approval?.resolved!=="expired",...T.status==="running"?{reason:"started"}:{},...T.status==="approval"?{reason:"awaiting_approval"}:{},...T.approval?{approval:T.approval}:{}};P(C),T.status!=="running"&&o({at:C.at,turnId:t.turnId,engine:i,kind:"tool",label:T.label,ok:C.ok,durationMs:T.durationMs})},x=Kf({turnId:t.turnId,chat:null,send:T=>P(T),now:n}),O="",M=!1,F=null,V=null,re=l.register(s.sessionKey,{engine:i,turnId:t.turnId,withImages:s.attachments.some(T=>/^image\/(png|jpe?g|gif|webp|bmp|heic|heif)$/i.test(T.mime)),stop:async()=>(V&&await V.stop(),y("website_stop"),"delivered")});try{if(i==="grok-bot"){let q=await(r.grokBot??JU()).relay({sessionKey:s.sessionKey,text:s.text}),Ke=n().getTime()-a;if(q.mailbox){yc(i,{ok:!0,durationMs:Ke},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:Ke});let le=c++;await qt(()=>u?e([{seq:le,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:le,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}O=q.text,R.push(q.text),R.close(),await m.drain();let xr=q.text.trim();if(!xr)throw new Error("grok_bot_empty_reply");yc(i,{ok:!0,durationMs:Ke},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:Ke});let er=c++;await qt(()=>u?e([{seq:er,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:er,kind:"final",message:{content:[{type:"text",text:xr}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0}}}]).catch(()=>!1));return}let T=r.sessions??XU(),C=cW(s.sessionKey,s.attachments,{root:r.inboxRoot}),j=await uW(s.sessionKey,s.remoteAttachments,r.files,{root:r.inboxRoot}),B=[...C,...j.saved],E=[s.text.trim(),...j.failed].filter(Boolean).join(`
|
|
310
310
|
|
|
311
|
-
`),L;if(i==="claude-code")L=(await(r.runClaudeCode??pW)({sessionKey:s.sessionKey,text:E,styleNote:s.styleNote,conversationId:s.conversationId,...s.kynverTools===!1?{kynverTools:!1}:{},attachments:B,payloadAccess:s.computerAccess,boxId:t.boxId,sessions:T,onDelta:Ke=>{O+=Ke,R.push(Ke)},onActivity:x.sink,signal:d.signal,turnId:t.turnId,home:r.home,...f?{maxStepMs:r.maxTurnMs??72e5}:{}})).text||O;else{let q=(r.endpoint??(le=>le==="hermes"?
|
|
311
|
+
`),L;if(i==="claude-code")L=(await(r.runClaudeCode??pW)({sessionKey:s.sessionKey,text:E,styleNote:s.styleNote,conversationId:s.conversationId,...s.kynverTools===!1?{kynverTools:!1}:{},attachments:B,payloadAccess:s.computerAccess,boxId:t.boxId,sessions:T,onDelta:Ke=>{O+=Ke,R.push(Ke)},onActivity:x.sink,signal:d.signal,turnId:t.turnId,home:r.home,...f?{maxStepMs:r.maxTurnMs??72e5}:{}})).text||O;else{let q=(r.endpoint??(le=>le==="hermes"?gm():hm()))(i),Ke={engine:i,endpoint:q,sessionKey:s.sessionKey,text:_m(E,B.filter(le=>!le.imageDataUrl)),styleNote:s.styleNote,conversationId:s.conversationId,attachments:B,sessions:T,signal:d.signal,fetchFn:r.fetchFn,sink:{onDelta:le=>{O+=le,R.push(le)},onTool:N}};if(i==="hermes"){let le=r.adoptions??fm(r.home?Nae.join(r.home,".kynver","hermes-session-adoptions.json"):void 0);if(le.get(s.sessionKey)){let sa="Waiting for your Telegram message to finish",Cr=await BW(s.sessionKey,{adoptions:le,sessions:T,list:r.hermesSessions??OW(),endpoint:q,fetchFn:r.fetchFn,signal:d.signal,now:()=>n().getTime(),...r.adoptSleep?{sleep:r.adoptSleep}:{},onWait:()=>N({label:sa,status:"running",durationMs:null})});Cr.adopted&&Cr.hold&&Cr.hold.waitedMs>0&&N({label:sa,status:"completed",durationMs:Cr.hold.waitedMs})}}let xr=i==="hermes"&&(B.every(le=>!le.imageDataUrl)||HW(q))&&await(r.hermesRuns??(le=>jW(le,{fetchFn:r.fetchFn})))(q),er;if(xr)try{er=await VW(Ke,le=>{V=le,l.setSteer(s.sessionKey,t.turnId,le.steer),l.setApprove(s.sessionKey,t.turnId,le.approve)})}catch(le){if(!(le instanceof qi))throw le;er=await HR(Ke)}else er=await HR(Ke);L=er.text,M=er.recovered===!0,F=i==="hermes"?V!==null:null}let J=gW(L,{home:r.home,inboxRoot:r.inboxRoot});J.files.forEach((q,Ke)=>{let xr=n().toISOString();P({at:xr,chat:null,turnId:t.turnId,kind:"attach",engine:i,access:"own",path:q.path,folder:"",ok:q.ok,...q.reason?{reason:q.reason}:{},...!q.ok&&q.sizeBytes!==null?{sizeBytes:q.sizeBytes}:{},toolUseId:`media-${Ke}`,...q.ok&&q.contentBase64?{file:{name:q.name,sizeBytes:q.sizeBytes,contentBase64:q.contentBase64}}:{}}),o({at:xr,turnId:t.turnId,engine:i,kind:"attach",path:q.path,ok:q.ok,reason:q.reason})}),re(),R.close(),await m.drain();let ae=n().getTime()-a;yc(i,{ok:!0,durationMs:ae},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!0,durationMs:ae,...M?{reason:"reply_read_from_session"}:{}});let se=()=>J.files.filter(q=>q.ok&&q.contentBase64).map(q=>({name:q.name,contentBase64:q.contentBase64,sizeBytes:q.sizeBytes}));if(g){await _(J.text,se());return}let Pe=c++;!await qt(()=>u?e([{seq:Pe,kind:"error",error:"turn_stream_aborted"}]).catch(()=>!1):e([{seq:Pe,kind:"final",message:{content:[{type:"text",text:J.text}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:J.files.filter(q=>q.ok).length,...F===null?{}:{viaRun:F}}}}]).catch(()=>!1))&&f&&!u&&await _(J.text,se())}catch(T){re(),R.close(),await m.drain();let C=T instanceof Error?T.message:String(T),j=MU(T),B=n().getTime()-a;if(yc(i,{ok:!1,durationMs:B,error:j},n),o({at:n().toISOString(),turnId:t.turnId,engine:i,kind:"turn",ok:!1,durationMs:B,reason:h??j}),g){if(h)return;let L=qR(O).trim();await _(L?`${L}
|
|
312
312
|
|
|
313
313
|
_${QR[i]} stopped before finishing (${j})._`:`${QR[i]} couldn't finish this message (${j}).`,[]);return}if(u)return;let E=c++;if(O.trim()){let L=`
|
|
314
314
|
|
|
315
|
-
_${QR[i]} stopped before finishing (${j})._`;await qt(()=>e([{seq:E,kind:"final",message:{content:[{type:"text",text:qR(O)+L}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,error:j}}}]).catch(()=>!1))}else await qt(()=>e([{seq:E,kind:"error",error:C.slice(0,1500)}]).catch(()=>!1))}finally{re(),S(),w&&clearTimeout(w)}}var QR,zW=p(()=>{"use strict";
|
|
315
|
+
_${QR[i]} stopped before finishing (${j})._`;await qt(()=>e([{seq:E,kind:"final",message:{content:[{type:"text",text:qR(O)+L}],stop_reason:"end_turn",usage:{input_tokens:0,output_tokens:0},agentTab:{engine:i,media:0,error:j}}}]).catch(()=>!1))}else await qt(()=>e([{seq:E,kind:"error",error:C.slice(0,1500)}]).catch(()=>!1))}finally{re(),S(),w&&clearTimeout(w)}}var QR,zW=p(()=>{"use strict";Wf();$f();qv();Kv();ec();YU();QU();MR();jR();fW();Yi();hW();DR();bW();wW();_W();EW();NR();FW();XR();GW();QR=Df});function ZR(e){let t=(e??"").replace(/\s+/g," ").trim();if(!t||t.length>120)return null;for(let r of Dae)if(r.re.test(t))return r.kind;return null}function QW(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 Em(e){return QW(e)?ZR(e.name):null}function ZW(e){return e.tag.toLowerCase()==="textarea"?null:QW(e)?ZR(e.name):ZR(e.formSubmitLabel)}function Am(e){if((e.type??"").toLowerCase()==="password"||Mae.test(e.autocomplete??""))return!0;let t=e.tag.toLowerCase();return t!=="input"&&t!=="textarea"?!1:XW.test(e.inputName??"")||XW.test(e.name??"")}function ew(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"}:Lae.test(r.hostname)?{ok:!1,reason:"local and private-network addresses are refused"}:{ok:!0,url:r.toString()}}function e$(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 t$(e){if(!e)return"";try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return""}}var Dae,Mae,XW,Lae,tw=p(()=>{"use strict";Dae=[{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}];Mae=/\b(current-password|new-password|one-time-code|cc-number|cc-csc|cc-exp|cc-exp-month|cc-exp-year)\b/i,XW=/(passw|passcode|pwd|\bpin\b|otp|one[-_ ]?time|2fa|mfa|verification[-_ ]?code|security[-_ ]?code|cvv|cvc|card[-_ ]?number|ccnum|ssn|social[-_ ]?security)/i;Lae=/^(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 r$(e){return Fae.includes(e)}function n$(e){return typeof e=="string"&&Bae.includes(e)}var Bae,Fae,o$,s$,rw,i$,nw,a$,l$,Im,c$,u$,d$,ow,zi=p(()=>{"use strict";Bae=["open","snapshot","click","type","select","press","scroll","screenshot","wait","tabs","close","list_logins","fill_login","save_login","request_code"],Fae=["list_logins","fill_login","save_login","request_code"];o$=12e3,s$=200,rw=16e3,i$=95e4,nw=4e3,a$=3e4,l$=25e3,Im=3e4,c$=10*6e4,u$=5*6e4,d$=120,ow=8});function Uae(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 Wae(e){let t=Am(e),r=[`[${e.ref}] ${Uae(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)"):Em(e)&&r.push("(needs the user's approval to press)"),r.join(" ")}function p$(e,t={}){let r=t.maxChars??rw,n=`Page: ${e.title||"(untitled)"} \u2014 ${e.url}`,o=e.elements.map(Wae),s=o.length?`Interactive elements (use the [ref] with browser_click / browser_type / browser_select):
|
|
316
316
|
${o.join(`
|
|
317
317
|
`)}${e.truncatedElements?`
|
|
318
318
|
\u2026more elements not shown \u2014 scroll or wait, then snapshot again`:""}`:"Interactive elements: none visible.",i=`${n}
|
|
@@ -321,8 +321,8 @@ ${s}
|
|
|
321
321
|
|
|
322
322
|
Page text:
|
|
323
323
|
`,a=Math.max(0,r-i.length),l=e.text.length>a?`${e.text.slice(0,Math.max(0,a-14))}
|
|
324
|
-
\u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function
|
|
325
|
-
\u2026[truncated]`:e}var sw=p(()=>{"use strict";tw();
|
|
324
|
+
\u2026[truncated]`:e.text;return`${i}${l}`.slice(0,r)}function Pm(e,t=rw){return e.length>t?`${e.slice(0,t-14)}
|
|
325
|
+
\u2026[truncated]`:e}var sw=p(()=>{"use strict";tw();zi()});function f$(){return`(() => {${iw}
|
|
326
326
|
const root = document.documentElement;
|
|
327
327
|
let seq = Number(root.getAttribute("data-kynver-ref-seq") || "0");
|
|
328
328
|
const elements = [];
|
|
@@ -381,7 +381,7 @@ Page text:
|
|
|
381
381
|
if (t && document.body && String(document.body.innerText || "").toLowerCase().includes(t.toLowerCase())) return true;
|
|
382
382
|
if (s) { try { if (document.querySelector(s)) return true; } catch (e) { return "bad_selector"; } }
|
|
383
383
|
return false;
|
|
384
|
-
})()`}var iw,$ae,v$=p(()=>{"use strict";
|
|
384
|
+
})()`}var iw,$ae,v$=p(()=>{"use strict";zi();iw=String.raw`
|
|
385
385
|
const __kvText = (s, n) => String(s == null ? "" : s).replace(/\s+/g, " ").trim().slice(0, n);
|
|
386
386
|
const __kvName = (el) => {
|
|
387
387
|
const aria = el.getAttribute("aria-label");
|
|
@@ -444,11 +444,11 @@ const __kvVisible = (el) => {
|
|
|
444
444
|
const s = getComputedStyle(el);
|
|
445
445
|
return s.visibility !== "hidden" && s.display !== "none" && s.opacity !== "0";
|
|
446
446
|
};
|
|
447
|
-
`,$ae='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
|
|
447
|
+
`,$ae='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 qo(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 Kae(e,t){return qo(e.session.host.conn,t,f$())}async function Sr(e,t,r){let n=await Kae(e,t),o=p$(n);return{ok:!0,text:r?Pm(`${r}
|
|
448
448
|
|
|
449
|
-
${o}`):o,url:n.url,title:n.title}}function
|
|
449
|
+
${o}`):o,url:n.url,title:n.title}}function Tm(e){let t=typeof e.ref=="string"?e.ref.trim():"";return/^e\d{1,6}$/.test(t)?t:null}function _$(e,t,r,n,o){let s=e$([t$(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 xc(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??w$)(r)])}async function x$(e){let t=ew(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,l$).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 Sr(e,n,a?void 0:"The page is still loading; this is what has rendered so far.")}async function aw(e,t,r){return qo(e.session.host.conn,t,m$(r))}async function Hae(e){let t=Tm(e.args);if(!t)return Yo(t);let r=await e.manager.activeTab(e.session),n=await aw(e,r,t);if(!n)return Yo(t);if(n.facts.disabled)return{ok:!1,code:"failed",text:`[${t}] is disabled.`};let o=Em(n.facts);if(o){let a=_$(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 xc(e,r,1200),Sr(e,r,`Clicked [${t}] ${JSON.stringify(n.facts.name)}.`)}async function Om(e,t,r){let n=S$[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 Nm(e,t){let r=await qo(e.session.host.conn,t,y$());if(!r.facts)return null;let n=ZW(r.facts);if(!n)return null;let o=r.facts.formSubmitLabel??r.facts.name;return _$(e,"press",o,n,r.url)}async function jae(e){let t=Tm(e.args);if(!t)return Yo(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>nw)return{ok:!1,code:"invalid_request",text:`text is limited to ${nw} characters.`};let n=await e.manager.activeTab(e.session),o=await aw(e,n,t);if(!o)return Yo(t);if(Am(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 qo(s,n,g$(t,e.args.clear!==!1)))return Yo(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 Nm(e,n);return l?{...l,text:`${a} ${l.text}`}:(await Om(e,n,"Enter"),await xc(e,n,1500),Sr(e,n,`${a} Pressed Enter.`))}return{ok:!0,text:a}}async function Vae(e){let t=Tm(e.args);if(!t)return Yo(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 qo(e.session.host.conn,n,h$(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 Gae(e){let t=typeof e.args.key=="string"?e.args.key.trim():"",r=R$.find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return{ok:!1,code:"invalid_request",text:`key must be one of: ${R$.join(", ")}.`};let n=await e.manager.activeTab(e.session);if(r==="Enter"){let o=await Nm(e,n);if(o)return o}return await Om(e,n,r),await xc(e,n,r==="Enter"?1500:300),Sr(e,n,`Pressed ${r}.`)}async function Jae(e){let t=await e.manager.activeTab(e.session),r=Tm(e.args);if(r)return await aw(e,t,r)?{ok:!0,text:`Scrolled [${r}] into view.`}:Yo(r);let n=e.args.direction==="up"?-1:1,o=Math.min(10,Math.max(1,Number(e.args.pages)||1)),s=await qo(e.session.host.conn,t,k$(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 Yae(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<=i$)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 qae(e){let t=await e.manager.activeTab(e.session),r=e.sleep??w$,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(Im,Math.max(0,Number(e.args.ms)||0));if(!n&&!o){let l=s||2e3;return await r(l),Sr(e,t,`Waited ${Math.round(l/100)/10}s.`)}let i=s||1e4,a=Date.now();for(;;){let l=await qo(e.session.host.conn,t,b$(n,o));if(l==="bad_selector")return{ok:!1,code:"invalid_request",text:"That CSS selector is not valid."};if(l===!0)return Sr(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 zae(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=ew(e.args.url);return d.ok?x$({...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(()=>{}),Sr(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,m)=>{let f=c.get(d.targetId),g=d.targetId===r.activeTargetId?" (active)":"";return`${m+1}. ${f?.title||"(untitled)"} \u2014 ${f?.url??"?"}${g}`});return{ok:!0,text:u.length?`Tabs:
|
|
450
450
|
${u.join(`
|
|
451
|
-
`)}`:"No tabs open."}}async function C$(e,t){switch(e){case"open":return x$(t);case"snapshot":return
|
|
451
|
+
`)}`:"No tabs open."}}async function C$(e,t){switch(e){case"open":return x$(t);case"snapshot":return Sr(t,await t.manager.activeTab(t.session));case"click":return Hae(t);case"type":return jae(t);case"select":return Vae(t);case"press":return Gae(t);case"scroll":return Jae(t);case"screenshot":return Yae(t);case"wait":return qae(t);case"tabs":return zae(t);case"close":return await t.manager.close(t.session.conversationId),{ok:!0,text:"Closed the browser for this conversation."}}}var w$,S$,R$,Yo,lw=p(()=>{"use strict";tw();sw();v$();zi();w$=e=>new Promise(t=>setTimeout(t,e)),S$={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:" "}},R$=Object.keys(S$);Yo=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 cw,uw,dw,E$,A$=p(()=>{"use strict";cw=String.raw`
|
|
452
452
|
const __vis = (el) => {
|
|
453
453
|
const r = el.getBoundingClientRect();
|
|
454
454
|
if (r.width <= 0 || r.height <= 0) return false;
|
|
@@ -547,25 +547,25 @@ ${u.join(`
|
|
|
547
547
|
username: f.username ? String(f.username.value || "") : null,
|
|
548
548
|
password: f.password ? String(f.password.value || "") : null,
|
|
549
549
|
};
|
|
550
|
-
}`});function Xae(e){let t=typeof e.handle=="string"?e.handle.trim():"";return/^lg_[a-z0-9]{6,20}$/.test(t)?t:null}function fw(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 P$(e){return`${JSON.stringify(e.label)} (${e.username}) for ${e.origin}`}function
|
|
550
|
+
}`});function Xae(e){let t=typeof e.handle=="string"?e.handle.trim():"";return/^lg_[a-z0-9]{6,20}$/.test(t)?t:null}function fw(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 P$(e){return`${JSON.stringify(e.label)} (${e.username}) for ${e.origin}`}function Mm(e){return e.siteLogins??rt()}async function Dm(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 Cc(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 de(e,t,r={}){return{ok:!1,code:e,text:t,...r}}function mw(e,t,r=rt()){let n=t?.trim();if(!n)return de("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:I$};let s;try{s=o.list()}catch(c){return de("failed",c instanceof Y?`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. ${pw}`;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}):
|
|
551
551
|
${l.join(`
|
|
552
552
|
`)}
|
|
553
|
-
Use browser_fill_login with a handle while that exact site is open.`}}async function Qae(e,t){let r=Dm(e),n=r.audit(t),o=Xae(e.args);if(!o)return de("invalid_request",'A saved-login handle like "lg_7k2m9q4x1c" from browser_list_logins is required.');let s=r.store(t);if(!s.exists())return de("vault_missing",I$);let i=s.get(o);if(!i)return de("login_not_found","No saved login with that handle. Call browser_list_logins.");let a=await e.manager.activeTab(e.session),l=await Nm(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,P)=>({event:"fill",ok:R,origin:i.origin,label:i.label,code:P});if(!l||!Ch(i.origin,l))return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u}),de("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 m=r.key(t);if(!m)return n.record({event:"fill",ok:!1,code:"vault_locked",...u}),de("vault_locked",`Saved logins are locked. ${pw}`,{loginActivity:d(!1,"vault_locked")});let f=fw(e.args),g;try{g=await _c(e,a,uw,[i.origin,f])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),de("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}),de("origin_mismatch",`Refused: the page is no longer ${i.origin}.`,{loginActivity:d(!1,"origin_mismatch")});if(g?.error==="bad_ref")return de("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(m,o).secret}catch(R){let P=R instanceof Y?R.code:"failed";return n.record({event:"fill",ok:!1,code:P,...u}),de("failed",R instanceof Y?`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=ed(h.totp);R&&(lC(R)<3&&await(e.sleep??(P=>new Promise(N=>setTimeout(N,P))))(3100),y.code=aC(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.":"",P=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 de("field_not_found",`No sign-in field to fill on this page.${P}${R} Take a browser_snapshot to see where you are.`,{loginActivity:d(!1,"field_not_found")})}let v;try{v=await _c(e,a,dw,[i.origin,f,y])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),de("failed",`Couldn't fill: ${R.message}. Take a browser_snapshot and try again.`)}finally{y.password="",y.code=""}if(v?.error){let R=v.error==="origin"||v.error==="frame"?"origin_mismatch":"failed";return n.record({event:"fill",ok:!1,code:R,...u,pageOrigin:v.origin??c}),de(R==="origin_mismatch"?"origin_mismatch":"failed",`Refused: the page changed to ${v.origin??"another address"} before the fill.`,{loginActivity:d(!1,R)})}let k=v?.filled??[];s.touch(o),n.record({event:"fill",ok:!0,code:null,...u,fields:k});let b=k.map(R=>R==="code"?"authenticator code":R).join(" + "),S=g.code&&!i.hasTotp&&!k.includes("code"),w=`Filled the ${b} for ${P$(i)}.`+(S?" 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 Om(e,a);return R?{...R,..._,text:`${w} ${R.text}`}:(await Tm(e,a,"Enter"),await Sc(e,a,2e3),{...await wr(e,a,`${w} Pressed Enter.`),..._})}return{ok:!0,text:`${w} Continue with browser_click on the sign-in button (or submit:true next time).`,..._}}async function Zae(e,t){let r=Dm(e),n=r.store(t);if(!n.exists())return de("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 de("vault_locked",`Saved logins are locked. ${pw}`);let s=await e.manager.activeTab(e.session),i=await Nm(e,s),a=La(i);if(!a||!a.startsWith("https://"))return de("url_refused","Only logins typed on an https:// site can be saved.");let l;try{l=await _c(e,s,E$,[a,fw(e.args)])}catch(f){return de("failed",`Couldn't read the sign-in form: ${f.message}.`)}if(l?.error)return de("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 de("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 de("field_not_found","No username on this page \u2014 pass the username (it isn't secret) with browser_save_login.");let m=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 f=n.list().find(h=>h.origin===a&&h.username===d),g=f?n.replace(o,f.handle,{origin:a,label:f.label,username:d,password:c}):n.add(o,{origin:a,label:m,username:d,password:c});return r.audit(t).record({event:f?"replace":"save",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,conversationId:e.session.conversationId}),{ok:!0,text:`${f?"Updated":"Saved"} the login ${P$(g)} as ${g.handle}. It is stored encrypted on this computer only.`,loginActivity:{event:"save",ok:!0,origin:g.origin,label:g.label}}}catch(f){return de("failed",f instanceof Y?`Couldn't save: ${f.message}.`:"Couldn't save this login.")}}async function ele(e,t){let r=Dm(e),n=await e.manager.activeTab(e.session),o=await Nm(e,n),s=La(o);if(!s)return de("url_refused","Open the site's verification page first.");let i=fw(e.args),a;try{a=await _c(e,n,uw,[s,i])}catch(d){return de("failed",`Couldn't read the page: ${d.message}.`)}if(a?.error==="bad_ref")return de("invalid_request","codeRef must point at a text field on this page.");if(a?.error||!a?.code)return de("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 m=await Nm(e,n);if(!Ch(s,m))return{ok:!1,text:`The page is no longer ${s}, so the code was not typed.`};try{let f=await _c(e,n,dw,[s,i,{code:d}]);return f?.error||!f?.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 T$(e,t){let r=t.agentOsId?.trim();if(!r)return de("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");switch(e){case"list_logins":return mw(t.args,r,Dm(t));case"fill_login":return Qae(t,r);case"save_login":return Zae(t,r);case"request_code":return ele(t,r)}}var pw,I$,O$=p(()=>{"use strict";lw();A$();Eh();Ts();bn();Ah();pw="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.",I$="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 Mm,N$=p(()=>{"use strict";Yi();Mm=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.idleMs=t.idleMs??c$}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<u$),t.actionTimes.length>=d$?!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>=ow)throw new Error(`tab limit reached (${ow}) \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 Sr,tle,xc,D$=p(()=>{"use strict";Sr=class extends Error{constructor(r,n){super(r);this.code=n;this.name="CdpError"}code},tle=e=>new WebSocket(e),xc=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??tle)(t);return await new Promise((o,s)=>{let i=setTimeout(()=>s(new Sr("CDP connect timed out")),r.timeoutMs??1e4);n.addEventListener("open",()=>{clearTimeout(i),o()}),n.addEventListener("error",()=>{clearTimeout(i),s(new Sr("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 Sr("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 Sr(`${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 Sr(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 Sr("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 Sr("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 Sr(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 rle,readFileSync as M$}from"node:fs";function qi(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 L$(e,t){try{return e(t)}catch{return""}}function Cc(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=>M$(o,"utf8"));return/microsoft|wsl/i.test(L$(n,"/proc/version"))}function nle(e=process.env,t=process.platform,r={}){if(t!=="linux")return{available:!0,wslg:!1};let n=r.exists??rle,o=Cc(e,t,r)&&n("/mnt/wslg");return{available:!!(e.DISPLAY?.trim()||e.WAYLAND_DISPLAY?.trim()),wslg:o}}function Lm(e=process.env,t=process.platform){return/^(1|true|yes|on)$/i.test(e.KYNVER_BROWSER_HEADLESS??"")?!0:!nle(e,t).available}function ole(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 B$(e={}){let t=e.readFile??(r=>M$(r,"utf8"));return ole(L$(t,"/etc/os-release"))}var qo=p(()=>{"use strict"});import{existsSync as sle,readdirSync as ile}from"node:fs";import{homedir as ale}from"node:os";import zo from"node:path";function Bm(e=process.env){return e.KYNVER_BROWSER_INSTALL_DIR?.trim()||zo.join(ale(),".kynver","browsers")}function F$(e,t=process.env){return zo.join(Bm(t),`chrome-${e}`)}function Fm(e,t){let r=zo.join(e,`chrome-${t}`);return t==="linux64"?zo.join(r,"chrome"):t==="win32"||t==="win64"?zo.join(r,"chrome.exe"):zo.join(r,"Google Chrome for Testing.app","Contents","MacOS","Google Chrome for Testing")}function lle(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 Um(e,t=process.env,r={}){let n=r.exists??sle,o=r.listDir??(l=>ile(l)),s=Bm(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(lle).reverse();for(let l of a){let c=zo.join(s,`chrome-${l}`),u=Fm(c,e);if(n(u))return{executable:u,version:l,installDir:c}}return null}var gw=p(()=>{"use strict"});import{existsSync as cle,readdirSync as ule}from"node:fs";import{homedir as dle}from"node:os";import nn from"node:path";function ple(e,t,r=dle()){return e==="win32"?[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA].filter(o=>typeof o=="string"&&o.length>0).flatMap(o=>[nn.join(o,"Google","Chrome","Application","chrome.exe"),nn.join(o,"Microsoft","Edge","Application","msedge.exe"),nn.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",nn.join(r,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),nn.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",nn.join(r,".local/share/flatpak/exports/bin/com.google.Chrome"),nn.join(r,".local/share/flatpak/exports/bin/org.chromium.Chromium"),...U$.map(n=>nn.join(r,".local/bin",n))]}function fle(e,t,r){let n=(e.PATH??"").split(":").filter(o=>o&&!(r&&o.startsWith("/mnt/")));for(let o of U$)for(let s of n){let i=nn.join(s,o);if(t(i))return i}return null}function Xo(e={}){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.exists??cle,s=e.config??I(),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=ple(r,t,e.home).find(u=>o(u));if(l)return{executable:l,source:"system",version:null,configuredMissing:i};if(r==="linux"){let u=fle(t,o,Cc(t,r,{readFile:e.readFile}));if(u)return{executable:u,source:"system",version:null,configuredMissing:i}}let c=qi(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=Um(c,t,{exists:o,listDir:e.listDir??(m=>ule(m))});if(d)return{executable:d.executable,source:"managed",version:d.version,configuredMissing:i}}return{executable:null,source:"none",version:null,configuredMissing:i}}var U$,Ec=p(()=>{"use strict";$();qo();gw();U$=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","microsoft-edge-stable"]});import{createWriteStream as mle}from"node:fs";import{rm as gle}from"node:fs/promises";function kle(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($$))return{version:r.version,url:s.url}}return null}async function K$(e,t=fetch){let r=await t(hle,{signal:AbortSignal.timeout(2e4)});if(!r.ok)throw new Error(`Chrome for Testing index returned HTTP ${r.status}`);let n=kle(await r.json(),e);if(!n)throw new Error(`No stable Chrome for Testing build is published for ${e}`);return n}async function H$(e,t,r={}){let n=r.minBytes??yle;if(!e.startsWith($$))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>W$))throw new Error(`browser download has an unexpected size (${a} bytes)`);let l=mle(t),c=0;try{let u=s.body.getReader();for(;;){let{done:d,value:m}=await u.read();if(d)break;if(c+=m.byteLength,c>W$)throw new Error("browser download is larger than expected");l.write(m)||await new Promise(f=>l.once("drain",()=>f())),r.onProgress?.({receivedBytes:c,totalBytes:a})}if(await new Promise((d,m)=>l.end(f=>f?m(f):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 gle(t,{force:!0}).catch(()=>{}),u}}var hle,$$,yle,W$,j$=p(()=>{"use strict";hle="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json",$$="https://storage.googleapis.com/chrome-for-testing-public/",yle=20*1024*1024,W$=600*1024*1024});function Ac(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 vle(e){return{apt:e.t64?1:0,dnf:2,zypper:3,pacman:4,apk:5,unknown:null}[e.family]}function Rle(e,t){let r=vle(t);if(r===null)return[];let n=new Set;for(let o of e){let s=ble.find(([i])=>i.test(o));s&&n.add(s[1][r])}return[...n].sort()}function wle(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 V$(e,t){let r=Rle(e,t),n=wle(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 ble,Wm=p(()=>{"use strict";ble=[[/^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 Sle}from"node:child_process";function xle(e){return/(\d+\.\d+\.\d+\.\d+)/.exec(e)?.[1]??null}function Cle(e,t=process.platform,r=_le){let n=new Set;if(t==="linux"){let s=r("ldd",[e],{encoding:"utf8",timeout:1e4});if(!s.error)for(let i of Ac(`${s.stdout??""}
|
|
553
|
+
Use browser_fill_login with a handle while that exact site is open.`}}async function Qae(e,t){let r=Mm(e),n=r.audit(t),o=Xae(e.args);if(!o)return de("invalid_request",'A saved-login handle like "lg_7k2m9q4x1c" from browser_list_logins is required.');let s=r.store(t);if(!s.exists())return de("vault_missing",I$);let i=s.get(o);if(!i)return de("login_not_found","No saved login with that handle. Call browser_list_logins.");let a=await e.manager.activeTab(e.session),l=await Dm(e,a),c=Fa(l),u={conversationId:e.session.conversationId,handle:o,label:i.label,username:i.username,origin:i.origin,pageOrigin:c},d=(R,P)=>({event:"fill",ok:R,origin:i.origin,label:i.label,code:P});if(!l||!Eh(i.origin,l))return n.record({event:"fill",ok:!1,code:"origin_mismatch",...u}),de("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 m=r.key(t);if(!m)return n.record({event:"fill",ok:!1,code:"vault_locked",...u}),de("vault_locked",`Saved logins are locked. ${pw}`,{loginActivity:d(!1,"vault_locked")});let f=fw(e.args),g;try{g=await Cc(e,a,uw,[i.origin,f])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),de("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}),de("origin_mismatch",`Refused: the page is no longer ${i.origin}.`,{loginActivity:d(!1,"origin_mismatch")});if(g?.error==="bad_ref")return de("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(m,o).secret}catch(R){let P=R instanceof Y?R.code:"failed";return n.record({event:"fill",ok:!1,code:P,...u}),de("failed",R instanceof Y?`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=rd(h.totp);R&&(lC(R)<3&&await(e.sleep??(P=>new Promise(N=>setTimeout(N,P))))(3100),y.code=aC(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.":"",P=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 de("field_not_found",`No sign-in field to fill on this page.${P}${R} Take a browser_snapshot to see where you are.`,{loginActivity:d(!1,"field_not_found")})}let v;try{v=await Cc(e,a,dw,[i.origin,f,y])}catch(R){return n.record({event:"fill",ok:!1,code:"page_changed",...u}),de("failed",`Couldn't fill: ${R.message}. Take a browser_snapshot and try again.`)}finally{y.password="",y.code=""}if(v?.error){let R=v.error==="origin"||v.error==="frame"?"origin_mismatch":"failed";return n.record({event:"fill",ok:!1,code:R,...u,pageOrigin:v.origin??c}),de(R==="origin_mismatch"?"origin_mismatch":"failed",`Refused: the page changed to ${v.origin??"another address"} before the fill.`,{loginActivity:d(!1,R)})}let k=v?.filled??[];s.touch(o),n.record({event:"fill",ok:!0,code:null,...u,fields:k});let b=k.map(R=>R==="code"?"authenticator code":R).join(" + "),S=g.code&&!i.hasTotp&&!k.includes("code"),w=`Filled the ${b} for ${P$(i)}.`+(S?" 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 Nm(e,a);return R?{...R,..._,text:`${w} ${R.text}`}:(await Om(e,a,"Enter"),await xc(e,a,2e3),{...await Sr(e,a,`${w} Pressed Enter.`),..._})}return{ok:!0,text:`${w} Continue with browser_click on the sign-in button (or submit:true next time).`,..._}}async function Zae(e,t){let r=Mm(e),n=r.store(t);if(!n.exists())return de("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 de("vault_locked",`Saved logins are locked. ${pw}`);let s=await e.manager.activeTab(e.session),i=await Dm(e,s),a=Fa(i);if(!a||!a.startsWith("https://"))return de("url_refused","Only logins typed on an https:// site can be saved.");let l;try{l=await Cc(e,s,E$,[a,fw(e.args)])}catch(f){return de("failed",`Couldn't read the sign-in form: ${f.message}.`)}if(l?.error)return de("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 de("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 de("field_not_found","No username on this page \u2014 pass the username (it isn't secret) with browser_save_login.");let m=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 f=n.list().find(h=>h.origin===a&&h.username===d),g=f?n.replace(o,f.handle,{origin:a,label:f.label,username:d,password:c}):n.add(o,{origin:a,label:m,username:d,password:c});return r.audit(t).record({event:f?"replace":"save",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,conversationId:e.session.conversationId}),{ok:!0,text:`${f?"Updated":"Saved"} the login ${P$(g)} as ${g.handle}. It is stored encrypted on this computer only.`,loginActivity:{event:"save",ok:!0,origin:g.origin,label:g.label}}}catch(f){return de("failed",f instanceof Y?`Couldn't save: ${f.message}.`:"Couldn't save this login.")}}async function ele(e,t){let r=Mm(e),n=await e.manager.activeTab(e.session),o=await Dm(e,n),s=Fa(o);if(!s)return de("url_refused","Open the site's verification page first.");let i=fw(e.args),a;try{a=await Cc(e,n,uw,[s,i])}catch(d){return de("failed",`Couldn't read the page: ${d.message}.`)}if(a?.error==="bad_ref")return de("invalid_request","codeRef must point at a text field on this page.");if(a?.error||!a?.code)return de("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 m=await Dm(e,n);if(!Eh(s,m))return{ok:!1,text:`The page is no longer ${s}, so the code was not typed.`};try{let f=await Cc(e,n,dw,[s,i,{code:d}]);return f?.error||!f?.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 T$(e,t){let r=t.agentOsId?.trim();if(!r)return de("invalid_request","Saved logins need the workspace this chat belongs to; update the Kynver runtime.");switch(e){case"list_logins":return mw(t.args,r,Mm(t));case"fill_login":return Qae(t,r);case"save_login":return Zae(t,r);case"request_code":return ele(t,r)}}var pw,I$,O$=p(()=>{"use strict";lw();A$();Ah();Os();vn();Ih();pw="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.",I$="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 Lm,N$=p(()=>{"use strict";zi();Lm=class{constructor(t){this.deps=t;this.now=t.now??Date.now,this.idleMs=t.idleMs??c$}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<u$),t.actionTimes.length>=d$?!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>=ow)throw new Error(`tab limit reached (${ow}) \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 _r,tle,Ec,D$=p(()=>{"use strict";_r=class extends Error{constructor(r,n){super(r);this.code=n;this.name="CdpError"}code},tle=e=>new WebSocket(e),Ec=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??tle)(t);return await new Promise((o,s)=>{let i=setTimeout(()=>s(new _r("CDP connect timed out")),r.timeoutMs??1e4);n.addEventListener("open",()=>{clearTimeout(i),o()}),n.addEventListener("error",()=>{clearTimeout(i),s(new _r("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 _r("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 _r(`${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 _r(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 _r("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 _r("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 _r(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 rle,readFileSync as M$}from"node:fs";function Xi(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 L$(e,t){try{return e(t)}catch{return""}}function Ac(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=>M$(o,"utf8"));return/microsoft|wsl/i.test(L$(n,"/proc/version"))}function nle(e=process.env,t=process.platform,r={}){if(t!=="linux")return{available:!0,wslg:!1};let n=r.exists??rle,o=Ac(e,t,r)&&n("/mnt/wslg");return{available:!!(e.DISPLAY?.trim()||e.WAYLAND_DISPLAY?.trim()),wslg:o}}function Bm(e=process.env,t=process.platform){return/^(1|true|yes|on)$/i.test(e.KYNVER_BROWSER_HEADLESS??"")?!0:!nle(e,t).available}function ole(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 B$(e={}){let t=e.readFile??(r=>M$(r,"utf8"));return ole(L$(t,"/etc/os-release"))}var zo=p(()=>{"use strict"});import{existsSync as sle,readdirSync as ile}from"node:fs";import{homedir as ale}from"node:os";import Xo from"node:path";function Fm(e=process.env){return e.KYNVER_BROWSER_INSTALL_DIR?.trim()||Xo.join(ale(),".kynver","browsers")}function F$(e,t=process.env){return Xo.join(Fm(t),`chrome-${e}`)}function Um(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 lle(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 Wm(e,t=process.env,r={}){let n=r.exists??sle,o=r.listDir??(l=>ile(l)),s=Fm(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(lle).reverse();for(let l of a){let c=Xo.join(s,`chrome-${l}`),u=Um(c,e);if(n(u))return{executable:u,version:l,installDir:c}}return null}var gw=p(()=>{"use strict"});import{existsSync as cle,readdirSync as ule}from"node:fs";import{homedir as dle}from"node:os";import on from"node:path";function ple(e,t,r=dle()){return e==="win32"?[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA].filter(o=>typeof o=="string"&&o.length>0).flatMap(o=>[on.join(o,"Google","Chrome","Application","chrome.exe"),on.join(o,"Microsoft","Edge","Application","msedge.exe"),on.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",on.join(r,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),on.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",on.join(r,".local/share/flatpak/exports/bin/com.google.Chrome"),on.join(r,".local/share/flatpak/exports/bin/org.chromium.Chromium"),...U$.map(n=>on.join(r,".local/bin",n))]}function fle(e,t,r){let n=(e.PATH??"").split(":").filter(o=>o&&!(r&&o.startsWith("/mnt/")));for(let o of U$)for(let s of n){let i=on.join(s,o);if(t(i))return i}return null}function Qo(e={}){let t=e.env??process.env,r=e.platform??process.platform,n=e.arch??process.arch,o=e.exists??cle,s=e.config??I(),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=ple(r,t,e.home).find(u=>o(u));if(l)return{executable:l,source:"system",version:null,configuredMissing:i};if(r==="linux"){let u=fle(t,o,Ac(t,r,{readFile:e.readFile}));if(u)return{executable:u,source:"system",version:null,configuredMissing:i}}let c=Xi(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=Wm(c,t,{exists:o,listDir:e.listDir??(m=>ule(m))});if(d)return{executable:d.executable,source:"managed",version:d.version,configuredMissing:i}}return{executable:null,source:"none",version:null,configuredMissing:i}}var U$,Ic=p(()=>{"use strict";$();zo();gw();U$=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","microsoft-edge-stable"]});import{createWriteStream as mle}from"node:fs";import{rm as gle}from"node:fs/promises";function kle(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($$))return{version:r.version,url:s.url}}return null}async function K$(e,t=fetch){let r=await t(hle,{signal:AbortSignal.timeout(2e4)});if(!r.ok)throw new Error(`Chrome for Testing index returned HTTP ${r.status}`);let n=kle(await r.json(),e);if(!n)throw new Error(`No stable Chrome for Testing build is published for ${e}`);return n}async function H$(e,t,r={}){let n=r.minBytes??yle;if(!e.startsWith($$))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>W$))throw new Error(`browser download has an unexpected size (${a} bytes)`);let l=mle(t),c=0;try{let u=s.body.getReader();for(;;){let{done:d,value:m}=await u.read();if(d)break;if(c+=m.byteLength,c>W$)throw new Error("browser download is larger than expected");l.write(m)||await new Promise(f=>l.once("drain",()=>f())),r.onProgress?.({receivedBytes:c,totalBytes:a})}if(await new Promise((d,m)=>l.end(f=>f?m(f):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 gle(t,{force:!0}).catch(()=>{}),u}}var hle,$$,yle,W$,j$=p(()=>{"use strict";hle="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json",$$="https://storage.googleapis.com/chrome-for-testing-public/",yle=20*1024*1024,W$=600*1024*1024});function Pc(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 vle(e){return{apt:e.t64?1:0,dnf:2,zypper:3,pacman:4,apk:5,unknown:null}[e.family]}function Rle(e,t){let r=vle(t);if(r===null)return[];let n=new Set;for(let o of e){let s=ble.find(([i])=>i.test(o));s&&n.add(s[1][r])}return[...n].sort()}function wle(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 V$(e,t){let r=Rle(e,t),n=wle(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 ble,$m=p(()=>{"use strict";ble=[[/^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 Sle}from"node:child_process";function xle(e){return/(\d+\.\d+\.\d+\.\d+)/.exec(e)?.[1]??null}function Cle(e,t=process.platform,r=_le){let n=new Set;if(t==="linux"){let s=r("ldd",[e],{encoding:"utf8",timeout:1e4});if(!s.error)for(let i of Pc(`${s.stdout??""}
|
|
554
554
|
${s.stderr??""}`))n.add(i)}let o=null;if(t!=="win32"){let s=r(e,["--version"],{encoding:"utf8",timeout:1e4}),i=`${s.stdout??""}
|
|
555
|
-
${s.stderr??""}`;for(let a of Ac(i))n.add(a);s.status===0&&(o=xle(i))}return{version:o,missingLibs:[...n].sort()}}function G$(e,t=()=>Cle(e),r=Date.now){let n=hw.get(e);if(n&&r()-n.at<Ele)return n.health;let o=t();return hw.set(e,{at:r(),health:o}),o}function J$(){hw.clear()}var _le,Ele,hw,yw=p(()=>{"use strict";Wm();_le=(e,t,r)=>Sle(e,t,r);Ele=10*6e4,hw=new Map});import{chmodSync as Ale,mkdirSync as kw,symlinkSync as Ile,writeFileSync as Ple}from"node:fs";import zi from"node:path";import{crc32 as Tle,inflateRawSync as Ole}from"node:zlib";function Lle(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(e.readUInt32LE(r)===Nle)return r;throw new Error("not a zip archive (no end-of-central-directory record)")}function Ble(e){let t=Lle(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)!==Dle)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 Fle(e,t){let r=t.localHeaderOffset;if(e.readUInt32LE(r)!==Mle)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=Ole(o);else throw new Error(`unsupported zip compression method ${t.method} (${t.name})`);if(s.length!==t.size||Tle(s)>>>0!==t.crc>>>0)throw new Error(`zip entry failed its integrity check: ${t.name}`);return s}function Y$(e,t){let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-zA-Z]:/.test(r))throw new Error(`unsafe zip path: ${t}`);let n=zi.resolve(e,r),o=zi.resolve(e);if(n!==o&&!n.startsWith(o+zi.sep))throw new Error(`unsafe zip path: ${t}`);return n}function q$(e,t,r=process.platform){kw(t,{recursive:!0});let n=0;for(let o of Ble(e)){let s=Y$(t,o.name);if(o.name.endsWith("/")){kw(s,{recursive:!0});continue}kw(zi.dirname(s),{recursive:!0});let i=Fle(e,o);if(o.unixMode!==null&&(o.unixMode&Ule)===Wle&&r!=="win32"){let a=i.toString("utf8");Y$(t,zi.posix.join(zi.posix.dirname(o.name.replace(/\\/g,"/")),a)),Ile(a,s)}else Ple(s,i),o.unixMode!==null&&r!=="win32"&&Ale(s,o.unixMode&511||420);n+=1}return n}var Nle,Dle,Mle,Ule,Wle,z$=p(()=>{"use strict";Nle=101010256,Dle=33639248,Mle=67324752;Ule=61440,Wle=40960});import{closeSync as X$,existsSync as bw,mkdirSync as $le,openSync as Q$,readFileSync as Kle,renameSync as Hle,rmSync as Xi,statSync as jle,chmodSync as Vle}from"node:fs";import vw from"node:path";function Qo(){return{...Qt}}function tK(e=Qt){return e.state!=="failed"||e.failedAt===null?0:e.failedAt+Z$[Math.min(e.attempts-1,Z$.length-1)]}function rK(e=Qt){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 Jle(e){let t=I();Ge({...t,browserManaged:{version:e.version,platform:e.platform,executable:e.executable,installedAt:new Date().toISOString()}})}function Yle(e,t){q$(Kle(e),t)}function qle(e,t){try{return X$(Q$(e,"wx")),!0}catch{try{if(t-jle(e).mtimeMs>Gle)return Xi(e,{force:!0}),X$(Q$(e,"wx")),!0}catch{}return!1}}async function zle(e,t){let r=t.env??process.env,n=t.now??Date.now,o=t.sleep??(a=>new Promise(l=>setTimeout(l,a))),s=Bm(r);$le(s,{recursive:!0});let i=vw.join(s,".install.lock");for(;!qle(i,n());)if(await o(2e3),!bw(i)){let a=Um(e,r);if(a)return a}try{let a=await K$(e,t.fetchFn),l=F$(a.version,r),c=Fm(l,e);if(!bw(c)){let d=vw.join(s,`.download-${a.version}.zip`),m=vw.join(s,`.staging-${a.version}-${process.pid}`);Xi(m,{recursive:!0,force:!0});try{await H$(a.url,d,{fetchFn:t.fetchFn,minBytes:t.minArchiveBytes,onProgress:g=>{Qt.receivedBytes=g.receivedBytes,Qt.totalBytes=g.totalBytes}}),(t.extract??Yle)(d,m);let f=Fm(m,e);if(!bw(f))throw new Error("the downloaded browser archive did not contain Chrome");(t.platform??process.platform)!=="win32"&&Vle(f,493),Xi(l,{recursive:!0,force:!0}),Hle(m,l)}finally{Xi(d,{force:!0}),Xi(m,{recursive:!0,force:!0})}}let u={executable:c,version:a.version,installDir:l};return(t.record??Jle)({...u,platform:e}),u}finally{Xi(i,{force:!0})}}function $m(e={}){if(Ic)return Ic;let t=qi(e.platform??process.platform,e.arch??process.arch);if(!t)return Promise.reject(new Qi("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 Qt={...Qt,state:"downloading",receivedBytes:0,totalBytes:null,error:null},Ic=zle(t,e).then(n=>(Qt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},J$(),n)).catch(n=>{let o=n instanceof Error?n.message:String(n);throw Qt={...Qt,state:"failed",error:o.slice(0,300),failedAt:r(),attempts:Qt.attempts+1},new Qi(`Couldn't download a browser for this computer: ${o.slice(0,200)}`,"download_failed")}).finally(()=>{Ic=null}),Ic}var eK,Gle,Z$,Qi,Qt,Ic,Km=p(()=>{"use strict";$();qo();j$();yw();gw();z$();eK=150,Gle=30*6e4,Z$=[6e4,5*6e4,30*6e4,120*6e4],Qi=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserProvisionError"}code},Qt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},Ic=null});function Zle(){let e=Qo(),t=e.state==="downloading"?` (${rK(e)})`:"";return`Setting up a browser on your computer \u2014 a one-time download of about ${eK} MB${t}. Tell the user it's being set up, wait about 30 seconds, then try the same step again.`}async function nK(e={}){let t=(e.resolve??(()=>Xo()))();if(t.executable)return t.executable;if(!(e.autoProvision??I().browserAutoProvision!==!1))throw new on("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??Qo)(),o=(e.now??Date.now)();if(n.state==="failed"&&n.failedAt!==null&&o-n.failedAt<Qle)throw new on(`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??$m)(),i,a=new Promise(l=>{i=setTimeout(()=>l("pending"),e.waitMs??Xle),i.unref?.()});try{let l=await Promise.race([s,a]);if(l==="pending")throw s.catch(()=>{}),new on(Zle(),"browser_installing");return l.executable}catch(l){if(l instanceof on)throw l;let c=l instanceof Qi?l.message:"Couldn't set up a browser on this computer.";throw new on(`${c} The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found")}finally{clearTimeout(i)}}var Xle,Qle,on,oK=p(()=>{"use strict";$();Ec();Km();Xle=2e4,Qle=6e4,on=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserEnsureError"}code}});function Rw(e){return ece.test(e)}function sK(e=process.platform,t=typeof process.getuid=="function"?process.getuid():null){return e==="linux"&&t===0}function Hm(e){iK=e}function aK(){return iK}var ece,iK,ww=p(()=>{"use strict";ece=/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;iK=null});import{spawn as tce}from"node:child_process";import{existsSync as LJe,mkdirSync as rce,readFileSync as nce,rmSync as oce}from"node:fs";import{homedir as sce}from"node:os";import lK from"node:path";function ace(e=process.env){return e.KYNVER_BROWSER_PROFILE_DIR?.trim()||lK.join(sce(),".kynver","browser-profile")}function cK(e=process.env){return(e.KYNVER_BROWSER_CDP_URL?.trim()||I().browserCdpUrl?.trim()||ice).replace(/\/$/,"")}async function uK(e,t={}){let r=t.env??process.env,n=t.platform??process.platform,o=t.allowNoSandbox??I().browserAllowNoSandbox!==!1;if((t.asRoot??sK(n))&&o){let a=await _w(e,r,n,t,!0);if("wsUrl"in a)return Hm("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 Sw(a.stderrTail)}let i=await _w(e,r,n,t,!1);if("wsUrl"in i)return Hm("on"),i;if(n==="linux"&&o&&Rw(i.stderrTail)){let a=await _w(e,r,n,t,!0);if("wsUrl"in a)return Hm("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 Sw(a.stderrTail)}throw Sw(i.stderrTail)}function Sw(e){let t=Ac(e);return t.length>0?new Pc(t):Rw(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 _w(e,t,r,n,o){let s=ace(t);rce(s,{recursive:!0});let i=lK.join(s,"DevToolsActivePort");oce(i,{force:!0});let a=Lm(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??tce)(e,l,{stdio:["ignore","ignore","pipe"],detached:!1});c.unref?.();let u="";c.stderr?.on("data",f=>{u=(u+String(f)).slice(-4e3)}),c.stderr?.unref?.();let d=n.readFile??(f=>nce(f,"utf8")),m=n.sleep??(f=>new Promise(g=>setTimeout(g,f)));for(let f=0;f<15e3;f+=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 m(200)}try{c.kill()}catch{}return await m(50),{stderrTail:u}}async function dK(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 ice,Pc,pK=p(()=>{"use strict";$();qo();Wm();Ec();ww();ice="http://127.0.0.1:9222";Pc=class extends Error{constructor(r){super(`Chrome is missing system libraries: ${r.join(", ")}`);this.missingLibs=r;this.name="ChromeMissingLibsError"}missingLibs}});async function lce(e){if(e==="attach"){let n=cK(),o;try{o=await dK(n)}catch{throw new Zi(`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 xc.connect(o),child:null,mode:e}}let t;try{t=await nK()}catch(n){throw n instanceof on?new Zi(n.message,n.code):n}let r;try{r=await uK(t)}catch(n){throw n instanceof Pc?new Zi(V$(n.missingLibs,B$()),"missing_libs"):n}return{conn:await xc.connect(r.wsUrl),child:r.child,mode:e}}function cce(){return jm??=new Mm({connectHost:lce}),jm}async function fK(){jm&&await jm.closeAll().catch(()=>{})}function mK(){try{let e=I();e.browserEverEnabled!==!0&&Ge({...e,browserEverEnabled:!0})}catch{}}function Gn(e,t){return{ok:!1,code:e,text:t}}function uce(e){if(!e||typeof e!="object")return null;let t=e,r=t.policy;if(t.kind!=="browser"||!n$(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 gK(e,t){let r=uce(e);if(!r)return Gn("invalid_request","Malformed browser request.");if(t.localDisabled)return Gn("disabled","The browser is switched off on this computer (local setting browserDisabled).");if(!r.policy.enabled)return Gn("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 Gn("wrong_box","This request reached a different computer than the one the browser is enabled on.");t.onEnabledTurn?.();let n=t.manager??cce();if(r.action==="list_logins")return mw(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 Gn("action_cap","Too many browser actions in a short time. Pause and summarize progress for the user.");let s=r.action==="wait"?Am+5e3:a$,i,a=new Promise(d=>{i=setTimeout(()=>d(Gn("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([r$(c)?T$(c,l):C$(c,l),a]).finally(()=>clearTimeout(i));return{...u,text:Im(u.text)}}catch(o){if(o instanceof Zi)return Gn(o.code,o.message);let s=o instanceof Error?o.message:String(o);return Gn("failed",`Browser action failed: ${s.slice(0,300)}`)}}var Zi,jm,xw=p(()=>{"use strict";lw();O$();sw();N$();D$();$();oK();Wm();qo();pK();Yi();Zi=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserSetupError"}code};jm=null});import{mkdirSync as dce,readFileSync as oYe,renameSync as pce,writeFileSync as fce}from"node:fs";import{homedir as mce}from"node:os";import Cw from"node:path";function gce(e=Cw.join(mce(),".kynver","state")){return Cw.join(e,"chat-loop.json")}function hK(e,t=gce()){try{dce(Cw.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}`;fce(r,JSON.stringify({v:1,...e}),{mode:384}),pce(r,t)}catch{}}var yK=p(()=>{"use strict"});function hce(e,t,r){if(!t||t===r)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`${n}(?=[\\\\/"'\\s<]|$)`,"gm"),()=>r)}function kK(e,t){return hce(e,t,"\0")!==e}var bK=p(()=>{"use strict"});import{accessSync as yce,constants as kce,existsSync as bce,lstatSync as vce,readdirSync as Rce,readFileSync as wce,readlinkSync as Sce,realpathSync as _ce}from"node:fs";import{homedir as xce}from"node:os";import vK from"node:path";function wK(e){return e==="win32"?vK.win32:vK.posix}function Ece(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===Ew)return n}catch{}let i=r.dirname(n);if(i===n)break;n=i}return null}function Ice(e,t,r){let n=wK(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 Pce(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 Tce(e,t,r,n,o){for(let s of Pce(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 Oce(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 Nce(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 Vm(e={}){let t=e.platform??process.platform,r=wK(t),n=e.fs??Cce,o=e.env??process.env,s=e.home??xce(),i=e.execPath??process.execPath,a=n.realpath(e.cliEntry??process.argv[1]??""),l=a?Ece(a,n,r):null,c={cliPath:a,packageRoot:l,nodePath:i,npmCliPath:Ice(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(RK).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={},m=Ace.exec(l);if(m)u="release_dir",d.releasesRoot=r.join(m[1],"releases"),d.releaseName=m[2],d.releaseDir=r.join(d.releasesRoot,d.releaseName),d.shimPath=Tce(d.releaseDir,s,o,n,r);else{let y=/^(.*)[\\/]lib[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l),v=t==="win32"?/^(.*)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l):null,k=y?.[1]??v?.[1];k&&!k.split(RK).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 f=[d.releaseDir,l,a].filter(y=>!!y),g="keeper";if(t==="linux"){let y=r.join(s,".config","systemd","user",xa);n.exists(y)&&(g="systemd",d.supervisorFile=y,d.supervisorName=xa)}else if(t==="darwin"){let y=Oce(f,s,n,r);y&&(g="launchd",d.supervisorFile=y.file,d.supervisorName=y.label)}else if(t==="win32"){let y=Nce(f,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=Dce(h,n),h.unsupportedReason||delete h.unsupportedReason,h}function Dce(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&&kK(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 Ew,Cce,RK,Ace,Gm=p(()=>{"use strict";vs();bK();Ew="@kynver-app/runtime",Cce={exists:e=>bce(e),readText:e=>{try{return wce(e,"utf8")}catch{return null}},readDir:e=>{try{return Rce(e)}catch{return[]}},realpath:e=>{try{return _ce.native(e)}catch{return e}},readLink:e=>{try{return vce(e).isSymbolicLink()?Sce(e):null}catch{return null}},writable:e=>{try{return yce(e,kce.W_OK),!0}catch{return!1}}},RK=/[\\/]/;Ace=/^(.*)[\\/]releases[\\/]([^\\/]+)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/});function SK(e){return`npm-${e}`}function Jm(e,t="latest"){let r=`${Ew}@${t}`;switch(e.kind){case"release_dir":{let n=e.releasesRoot?`${e.releasesRoot}/${SK(t)}`:`<releases>/${SK(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 Aw=p(()=>{"use strict";Gm()});var _K=p(()=>{"use strict"});import{mkdirSync as vYe,readFileSync as Mce,readdirSync as RYe,renameSync as wYe,writeFileSync as SYe}from"node:fs";import xK from"node:path";function Lce(){return xK.join(Gl(),"runtime")}function Bce(e){return xK.join(e,"summary.json")}function CK(e=Lce()){try{let t=JSON.parse(Mce(Bce(e),"utf8"));if(t?.v===1)return t}catch{}return{v:1,attempts:0,succeeded:0,rolledBack:0,failed:0,last:null}}var EK=p(()=>{"use strict";uf();_K()});function Uce(e=Date.now()){if(Ym&&e-Ym.at<Fce)return Ym.report;if(!ea){let o=Vm();ea={kind:o.kind,supervisor:o.supervisor,can:!o.unsupportedReason,manual:Jm(o,"latest")}}let t=CK(),r=t.last,n={v:1,installKind:ea.kind,supervisor:ea.supervisor,canSelfUpdate:ea.can,manualCommand:ea.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 Ym={at:e,report:n},n}function qm(){try{return Uce()}catch{return}}var ea,Ym,Fce,Iw=p(()=>{"use strict";Gm();Aw();EK();ea=null,Ym=null,Fce=3e4});import{readdir as Wce,readFile as $ce}from"node:fs/promises";import{sep as Kce}from"node:path";import{fileURLToPath as Hce}from"node:url";function Jce(e=import.meta.url){let t;try{t=Hce(e)}catch{return"checkout"}return t.split(Kce).includes("node_modules")||t.split("/").includes("node_modules")?"npm":"checkout"}function Yce(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=Gce?t:null}async function qce(e){try{return Yce(JSON.parse(await $ce(e,"utf8")).version)}catch{return null}}function IK(e){return e.toLowerCase().endsWith(".bak")}function zce(e,t){if(!e)return t;try{return af(t,e)>0?t:e}catch{return e}}async function Xce(e={}){let t={},r=new Set;for(let n of(e.scopeRoots??pM)()){let o=[];try{o=await Wce(n)}catch{continue}for(let s of o)IK(s)||/^[a-z0-9][a-z0-9._-]*$/i.test(s)&&r.add(`${AK}${s}`)}try{for(let n of await(e.adopted??sv)())n.packageName.startsWith(AK)&&!IK(n.packageName)&&r.add(n.packageName)}catch{}for(let n of[...r].sort().slice(0,Vce))for(let o of Jb(n)){let s=await qce(o);s&&(t[n]=zce(t[n],s))}return t}function Qce(e){Pw||ta&&e-ta.at<jce||(Pw=Xce().then(t=>{ta={at:Date.now(),packages:t}}).catch(()=>{ta={at:Date.now(),packages:ta?.packages??{}}}).finally(()=>{Pw=null}))}function zm(e=Date.now()){try{Qce(e)}catch{}return{v:1,runtime:{version:nt,source:Jce()},packages:{...ta?.packages??{}}}}var AK,jce,Vce,Gce,ta,Pw,Tw=p(()=>{"use strict";Rn();Yb();iv();Gb();AK="@kynver-app/",jce=10*6e4,Vce=40,Gce=32;ta=null,Pw=null});async function PK(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:Bp(e.agentOsId,i)})}).catch(()=>{}),s=t.payload?.action;try{let i=await(r.execute??gK)(t.payload,{boxId:e.boxId,agentOsId:e.agentOsId,localDisabled:I().browserDisabled===!0,onEnabledTurn:mK});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 TK=p(()=>{"use strict";$();xw();dr()});import{appendFileSync as Zce,chmodSync as eue,existsSync as OK,readFileSync as tue,renameSync as rue,statSync as nue}from"node:fs";import oue from"node:path";function NK(e,t=At()){return oue.join(t,xl(e).replace(/\.vault\.json$/,".audit.jsonl"))}function DK(e,t,r=At()){try{Sl(r);let n=NK(e,r);OK(n)&&nue(n).size>sue&&rue(n,`${n}.1`),Zce(n,`${JSON.stringify({at:new Date().toISOString(),...t})}
|
|
555
|
+
${s.stderr??""}`;for(let a of Pc(i))n.add(a);s.status===0&&(o=xle(i))}return{version:o,missingLibs:[...n].sort()}}function G$(e,t=()=>Cle(e),r=Date.now){let n=hw.get(e);if(n&&r()-n.at<Ele)return n.health;let o=t();return hw.set(e,{at:r(),health:o}),o}function J$(){hw.clear()}var _le,Ele,hw,yw=p(()=>{"use strict";$m();_le=(e,t,r)=>Sle(e,t,r);Ele=10*6e4,hw=new Map});import{chmodSync as Ale,mkdirSync as kw,symlinkSync as Ile,writeFileSync as Ple}from"node:fs";import Qi from"node:path";import{crc32 as Tle,inflateRawSync as Ole}from"node:zlib";function Lle(e){let t=Math.max(0,e.length-65535-22);for(let r=e.length-22;r>=t;r-=1)if(e.readUInt32LE(r)===Nle)return r;throw new Error("not a zip archive (no end-of-central-directory record)")}function Ble(e){let t=Lle(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)!==Dle)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 Fle(e,t){let r=t.localHeaderOffset;if(e.readUInt32LE(r)!==Mle)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=Ole(o);else throw new Error(`unsupported zip compression method ${t.method} (${t.name})`);if(s.length!==t.size||Tle(s)>>>0!==t.crc>>>0)throw new Error(`zip entry failed its integrity check: ${t.name}`);return s}function Y$(e,t){let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-zA-Z]:/.test(r))throw new Error(`unsafe zip path: ${t}`);let n=Qi.resolve(e,r),o=Qi.resolve(e);if(n!==o&&!n.startsWith(o+Qi.sep))throw new Error(`unsafe zip path: ${t}`);return n}function q$(e,t,r=process.platform){kw(t,{recursive:!0});let n=0;for(let o of Ble(e)){let s=Y$(t,o.name);if(o.name.endsWith("/")){kw(s,{recursive:!0});continue}kw(Qi.dirname(s),{recursive:!0});let i=Fle(e,o);if(o.unixMode!==null&&(o.unixMode&Ule)===Wle&&r!=="win32"){let a=i.toString("utf8");Y$(t,Qi.posix.join(Qi.posix.dirname(o.name.replace(/\\/g,"/")),a)),Ile(a,s)}else Ple(s,i),o.unixMode!==null&&r!=="win32"&&Ale(s,o.unixMode&511||420);n+=1}return n}var Nle,Dle,Mle,Ule,Wle,z$=p(()=>{"use strict";Nle=101010256,Dle=33639248,Mle=67324752;Ule=61440,Wle=40960});import{closeSync as X$,existsSync as bw,mkdirSync as $le,openSync as Q$,readFileSync as Kle,renameSync as Hle,rmSync as Zi,statSync as jle,chmodSync as Vle}from"node:fs";import vw from"node:path";function Zo(){return{...Qt}}function tK(e=Qt){return e.state!=="failed"||e.failedAt===null?0:e.failedAt+Z$[Math.min(e.attempts-1,Z$.length-1)]}function rK(e=Qt){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 Jle(e){let t=I();Ge({...t,browserManaged:{version:e.version,platform:e.platform,executable:e.executable,installedAt:new Date().toISOString()}})}function Yle(e,t){q$(Kle(e),t)}function qle(e,t){try{return X$(Q$(e,"wx")),!0}catch{try{if(t-jle(e).mtimeMs>Gle)return Zi(e,{force:!0}),X$(Q$(e,"wx")),!0}catch{}return!1}}async function zle(e,t){let r=t.env??process.env,n=t.now??Date.now,o=t.sleep??(a=>new Promise(l=>setTimeout(l,a))),s=Fm(r);$le(s,{recursive:!0});let i=vw.join(s,".install.lock");for(;!qle(i,n());)if(await o(2e3),!bw(i)){let a=Wm(e,r);if(a)return a}try{let a=await K$(e,t.fetchFn),l=F$(a.version,r),c=Um(l,e);if(!bw(c)){let d=vw.join(s,`.download-${a.version}.zip`),m=vw.join(s,`.staging-${a.version}-${process.pid}`);Zi(m,{recursive:!0,force:!0});try{await H$(a.url,d,{fetchFn:t.fetchFn,minBytes:t.minArchiveBytes,onProgress:g=>{Qt.receivedBytes=g.receivedBytes,Qt.totalBytes=g.totalBytes}}),(t.extract??Yle)(d,m);let f=Um(m,e);if(!bw(f))throw new Error("the downloaded browser archive did not contain Chrome");(t.platform??process.platform)!=="win32"&&Vle(f,493),Zi(l,{recursive:!0,force:!0}),Hle(m,l)}finally{Zi(d,{force:!0}),Zi(m,{recursive:!0,force:!0})}}let u={executable:c,version:a.version,installDir:l};return(t.record??Jle)({...u,platform:e}),u}finally{Zi(i,{force:!0})}}function Km(e={}){if(Tc)return Tc;let t=Xi(e.platform??process.platform,e.arch??process.arch);if(!t)return Promise.reject(new ea("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 Qt={...Qt,state:"downloading",receivedBytes:0,totalBytes:null,error:null},Tc=zle(t,e).then(n=>(Qt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},J$(),n)).catch(n=>{let o=n instanceof Error?n.message:String(n);throw Qt={...Qt,state:"failed",error:o.slice(0,300),failedAt:r(),attempts:Qt.attempts+1},new ea(`Couldn't download a browser for this computer: ${o.slice(0,200)}`,"download_failed")}).finally(()=>{Tc=null}),Tc}var eK,Gle,Z$,ea,Qt,Tc,Hm=p(()=>{"use strict";$();zo();j$();yw();gw();z$();eK=150,Gle=30*6e4,Z$=[6e4,5*6e4,30*6e4,120*6e4],ea=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserProvisionError"}code},Qt={state:"idle",receivedBytes:0,totalBytes:null,error:null,failedAt:null,attempts:0},Tc=null});function Zle(){let e=Zo(),t=e.state==="downloading"?` (${rK(e)})`:"";return`Setting up a browser on your computer \u2014 a one-time download of about ${eK} MB${t}. Tell the user it's being set up, wait about 30 seconds, then try the same step again.`}async function nK(e={}){let t=(e.resolve??(()=>Qo()))();if(t.executable)return t.executable;if(!(e.autoProvision??I().browserAutoProvision!==!1))throw new sn("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??Zo)(),o=(e.now??Date.now)();if(n.state==="failed"&&n.failedAt!==null&&o-n.failedAt<Qle)throw new sn(`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??Km)(),i,a=new Promise(l=>{i=setTimeout(()=>l("pending"),e.waitMs??Xle),i.unref?.()});try{let l=await Promise.race([s,a]);if(l==="pending")throw s.catch(()=>{}),new sn(Zle(),"browser_installing");return l.executable}catch(l){if(l instanceof sn)throw l;let c=l instanceof ea?l.message:"Couldn't set up a browser on this computer.";throw new sn(`${c} The user can run \`kynver browser install\` on that computer to retry, or install Google Chrome.`,"chrome_not_found")}finally{clearTimeout(i)}}var Xle,Qle,sn,oK=p(()=>{"use strict";$();Ic();Hm();Xle=2e4,Qle=6e4,sn=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserEnsureError"}code}});function Rw(e){return ece.test(e)}function sK(e=process.platform,t=typeof process.getuid=="function"?process.getuid():null){return e==="linux"&&t===0}function jm(e){iK=e}function aK(){return iK}var ece,iK,ww=p(()=>{"use strict";ece=/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;iK=null});import{spawn as tce}from"node:child_process";import{existsSync as UJe,mkdirSync as rce,readFileSync as nce,rmSync as oce}from"node:fs";import{homedir as sce}from"node:os";import lK from"node:path";function ace(e=process.env){return e.KYNVER_BROWSER_PROFILE_DIR?.trim()||lK.join(sce(),".kynver","browser-profile")}function cK(e=process.env){return(e.KYNVER_BROWSER_CDP_URL?.trim()||I().browserCdpUrl?.trim()||ice).replace(/\/$/,"")}async function uK(e,t={}){let r=t.env??process.env,n=t.platform??process.platform,o=t.allowNoSandbox??I().browserAllowNoSandbox!==!1;if((t.asRoot??sK(n))&&o){let a=await _w(e,r,n,t,!0);if("wsUrl"in a)return jm("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 Sw(a.stderrTail)}let i=await _w(e,r,n,t,!1);if("wsUrl"in i)return jm("on"),i;if(n==="linux"&&o&&Rw(i.stderrTail)){let a=await _w(e,r,n,t,!0);if("wsUrl"in a)return jm("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 Sw(a.stderrTail)}throw Sw(i.stderrTail)}function Sw(e){let t=Pc(e);return t.length>0?new Oc(t):Rw(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 _w(e,t,r,n,o){let s=ace(t);rce(s,{recursive:!0});let i=lK.join(s,"DevToolsActivePort");oce(i,{force:!0});let a=Bm(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??tce)(e,l,{stdio:["ignore","ignore","pipe"],detached:!1});c.unref?.();let u="";c.stderr?.on("data",f=>{u=(u+String(f)).slice(-4e3)}),c.stderr?.unref?.();let d=n.readFile??(f=>nce(f,"utf8")),m=n.sleep??(f=>new Promise(g=>setTimeout(g,f)));for(let f=0;f<15e3;f+=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 m(200)}try{c.kill()}catch{}return await m(50),{stderrTail:u}}async function dK(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 ice,Oc,pK=p(()=>{"use strict";$();zo();$m();Ic();ww();ice="http://127.0.0.1:9222";Oc=class extends Error{constructor(r){super(`Chrome is missing system libraries: ${r.join(", ")}`);this.missingLibs=r;this.name="ChromeMissingLibsError"}missingLibs}});async function lce(e){if(e==="attach"){let n=cK(),o;try{o=await dK(n)}catch{throw new ta(`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 Ec.connect(o),child:null,mode:e}}let t;try{t=await nK()}catch(n){throw n instanceof sn?new ta(n.message,n.code):n}let r;try{r=await uK(t)}catch(n){throw n instanceof Oc?new ta(V$(n.missingLibs,B$()),"missing_libs"):n}return{conn:await Ec.connect(r.wsUrl),child:r.child,mode:e}}function cce(){return Vm??=new Lm({connectHost:lce}),Vm}async function fK(){Vm&&await Vm.closeAll().catch(()=>{})}function mK(){try{let e=I();e.browserEverEnabled!==!0&&Ge({...e,browserEverEnabled:!0})}catch{}}function Jn(e,t){return{ok:!1,code:e,text:t}}function uce(e){if(!e||typeof e!="object")return null;let t=e,r=t.policy;if(t.kind!=="browser"||!n$(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 gK(e,t){let r=uce(e);if(!r)return Jn("invalid_request","Malformed browser request.");if(t.localDisabled)return Jn("disabled","The browser is switched off on this computer (local setting browserDisabled).");if(!r.policy.enabled)return Jn("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 Jn("wrong_box","This request reached a different computer than the one the browser is enabled on.");t.onEnabledTurn?.();let n=t.manager??cce();if(r.action==="list_logins")return mw(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 Jn("action_cap","Too many browser actions in a short time. Pause and summarize progress for the user.");let s=r.action==="wait"?Im+5e3:a$,i,a=new Promise(d=>{i=setTimeout(()=>d(Jn("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([r$(c)?T$(c,l):C$(c,l),a]).finally(()=>clearTimeout(i));return{...u,text:Pm(u.text)}}catch(o){if(o instanceof ta)return Jn(o.code,o.message);let s=o instanceof Error?o.message:String(o);return Jn("failed",`Browser action failed: ${s.slice(0,300)}`)}}var ta,Vm,xw=p(()=>{"use strict";lw();O$();sw();N$();D$();$();oK();$m();zo();pK();zi();ta=class extends Error{constructor(r,n){super(r);this.code=n;this.name="BrowserSetupError"}code};Vm=null});import{mkdirSync as dce,readFileSync as aYe,renameSync as pce,writeFileSync as fce}from"node:fs";import{homedir as mce}from"node:os";import Cw from"node:path";function gce(e=Cw.join(mce(),".kynver","state")){return Cw.join(e,"chat-loop.json")}function hK(e,t=gce()){try{dce(Cw.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}`;fce(r,JSON.stringify({v:1,...e}),{mode:384}),pce(r,t)}catch{}}var yK=p(()=>{"use strict"});function hce(e,t,r){if(!t||t===r)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`${n}(?=[\\\\/"'\\s<]|$)`,"gm"),()=>r)}function kK(e,t){return hce(e,t,"\0")!==e}var bK=p(()=>{"use strict"});import{accessSync as yce,constants as kce,existsSync as bce,lstatSync as vce,readdirSync as Rce,readFileSync as wce,readlinkSync as Sce,realpathSync as _ce}from"node:fs";import{homedir as xce}from"node:os";import vK from"node:path";function wK(e){return e==="win32"?vK.win32:vK.posix}function Ece(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===Ew)return n}catch{}let i=r.dirname(n);if(i===n)break;n=i}return null}function Ice(e,t,r){let n=wK(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 Pce(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 Tce(e,t,r,n,o){for(let s of Pce(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 Oce(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 Nce(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 Gm(e={}){let t=e.platform??process.platform,r=wK(t),n=e.fs??Cce,o=e.env??process.env,s=e.home??xce(),i=e.execPath??process.execPath,a=n.realpath(e.cliEntry??process.argv[1]??""),l=a?Ece(a,n,r):null,c={cliPath:a,packageRoot:l,nodePath:i,npmCliPath:Ice(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(RK).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={},m=Ace.exec(l);if(m)u="release_dir",d.releasesRoot=r.join(m[1],"releases"),d.releaseName=m[2],d.releaseDir=r.join(d.releasesRoot,d.releaseName),d.shimPath=Tce(d.releaseDir,s,o,n,r);else{let y=/^(.*)[\\/]lib[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l),v=t==="win32"?/^(.*)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/.exec(l):null,k=y?.[1]??v?.[1];k&&!k.split(RK).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 f=[d.releaseDir,l,a].filter(y=>!!y),g="keeper";if(t==="linux"){let y=r.join(s,".config","systemd","user",Ea);n.exists(y)&&(g="systemd",d.supervisorFile=y,d.supervisorName=Ea)}else if(t==="darwin"){let y=Oce(f,s,n,r);y&&(g="launchd",d.supervisorFile=y.file,d.supervisorName=y.label)}else if(t==="win32"){let y=Nce(f,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=Dce(h,n),h.unsupportedReason||delete h.unsupportedReason,h}function Dce(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&&kK(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 Ew,Cce,RK,Ace,Jm=p(()=>{"use strict";Rs();bK();Ew="@kynver-app/runtime",Cce={exists:e=>bce(e),readText:e=>{try{return wce(e,"utf8")}catch{return null}},readDir:e=>{try{return Rce(e)}catch{return[]}},realpath:e=>{try{return _ce.native(e)}catch{return e}},readLink:e=>{try{return vce(e).isSymbolicLink()?Sce(e):null}catch{return null}},writable:e=>{try{return yce(e,kce.W_OK),!0}catch{return!1}}},RK=/[\\/]/;Ace=/^(.*)[\\/]releases[\\/]([^\\/]+)[\\/]node_modules[\\/]@kynver-app[\\/]runtime$/});function SK(e){return`npm-${e}`}function Ym(e,t="latest"){let r=`${Ew}@${t}`;switch(e.kind){case"release_dir":{let n=e.releasesRoot?`${e.releasesRoot}/${SK(t)}`:`<releases>/${SK(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 Aw=p(()=>{"use strict";Jm()});var _K=p(()=>{"use strict"});import{mkdirSync as SYe,readFileSync as Mce,readdirSync as _Ye,renameSync as xYe,writeFileSync as CYe}from"node:fs";import xK from"node:path";function Lce(){return xK.join(Yl(),"runtime")}function Bce(e){return xK.join(e,"summary.json")}function CK(e=Lce()){try{let t=JSON.parse(Mce(Bce(e),"utf8"));if(t?.v===1)return t}catch{}return{v:1,attempts:0,succeeded:0,rolledBack:0,failed:0,last:null}}var EK=p(()=>{"use strict";df();_K()});function Uce(e=Date.now()){if(qm&&e-qm.at<Fce)return qm.report;if(!ra){let o=Gm();ra={kind:o.kind,supervisor:o.supervisor,can:!o.unsupportedReason,manual:Ym(o,"latest")}}let t=CK(),r=t.last,n={v:1,installKind:ra.kind,supervisor:ra.supervisor,canSelfUpdate:ra.can,manualCommand:ra.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 qm={at:e,report:n},n}function zm(){try{return Uce()}catch{return}}var ra,qm,Fce,Iw=p(()=>{"use strict";Jm();Aw();EK();ra=null,qm=null,Fce=3e4});import{readdir as Wce,readFile as $ce}from"node:fs/promises";import{sep as Kce}from"node:path";import{fileURLToPath as Hce}from"node:url";function Jce(e=import.meta.url){let t;try{t=Hce(e)}catch{return"checkout"}return t.split(Kce).includes("node_modules")||t.split("/").includes("node_modules")?"npm":"checkout"}function Yce(e){if(typeof e!="string")return null;let t=e.trim();return t&&t.length<=Gce?t:null}async function qce(e){try{return Yce(JSON.parse(await $ce(e,"utf8")).version)}catch{return null}}function IK(e){return e.toLowerCase().endsWith(".bak")}function zce(e,t){if(!e)return t;try{return lf(t,e)>0?t:e}catch{return e}}async function Xce(e={}){let t={},r=new Set;for(let n of(e.scopeRoots??pM)()){let o=[];try{o=await Wce(n)}catch{continue}for(let s of o)IK(s)||/^[a-z0-9][a-z0-9._-]*$/i.test(s)&&r.add(`${AK}${s}`)}try{for(let n of await(e.adopted??sv)())n.packageName.startsWith(AK)&&!IK(n.packageName)&&r.add(n.packageName)}catch{}for(let n of[...r].sort().slice(0,Vce))for(let o of Jb(n)){let s=await qce(o);s&&(t[n]=zce(t[n],s))}return t}function Qce(e){Pw||na&&e-na.at<jce||(Pw=Xce().then(t=>{na={at:Date.now(),packages:t}}).catch(()=>{na={at:Date.now(),packages:na?.packages??{}}}).finally(()=>{Pw=null}))}function Xm(e=Date.now()){try{Qce(e)}catch{}return{v:1,runtime:{version:nt,source:Jce()},packages:{...na?.packages??{}}}}var AK,jce,Vce,Gce,na,Pw,Tw=p(()=>{"use strict";wn();Yb();iv();Gb();AK="@kynver-app/",jce=10*6e4,Vce=40,Gce=32;na=null,Pw=null});async function PK(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:Fp(e.agentOsId,i)})}).catch(()=>{}),s=t.payload?.action;try{let i=await(r.execute??gK)(t.payload,{boxId:e.boxId,agentOsId:e.agentOsId,localDisabled:I().browserDisabled===!0,onEnabledTurn:mK});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 TK=p(()=>{"use strict";$();xw();pr()});import{appendFileSync as Zce,chmodSync as eue,existsSync as OK,readFileSync as tue,renameSync as rue,statSync as nue}from"node:fs";import oue from"node:path";function NK(e,t=At()){return oue.join(t,El(e).replace(/\.vault\.json$/,".audit.jsonl"))}function DK(e,t,r=At()){try{xl(r);let n=NK(e,r);OK(n)&&nue(n).size>sue&&rue(n,`${n}.1`),Zce(n,`${JSON.stringify({at:new Date().toISOString(),...t})}
|
|
556
556
|
`,{mode:384});try{eue(n,384)}catch{}}catch{}}function MK(e,t=50,r=At()){let n=NK(e,r);return OK(n)?tue(n,"utf8").split(`
|
|
557
|
-
`).filter(Boolean).slice(-t).flatMap(o=>{try{return[JSON.parse(o)]}catch{return[]}}):[]}var sue,LK=p(()=>{"use strict";_l();Dp();sue=512*1024});function UK(e,t){return e.report(t)}function aue(e){return e.state==="none"?it("login_vault_missing","Saved logins aren't set up on this computer yet. Run `kynver logins setup` (or open the Kynver desktop app), then try again."):e.state==="locked"?it("login_vault_locked","Saved logins are locked on this computer. Run `kynver logins unlock`, then try again."):null}function lue(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t;for(let n of Object.keys(r))if(!["o","u","p","t","l"].includes(n))return null;return typeof r.o!="string"||typeof r.u!="string"||typeof r.p!="string"||r.t!==void 0&&typeof r.t!="string"||r.l!==void 0&&typeof r.l!="string"?null:{origin:r.o,username:r.u,password:r.p,...r.t?{totp:r.t}:{},...r.l?{label:r.l}:{}}}function cue(e){let t=(e.label??"").trim().slice(0,Ye.maxLabel);if(t)return t;try{return new URL(e.origin.includes("://")?e.origin:`https://${e.origin}`).hostname.slice(0,Ye.maxLabel)}catch{return"Website login"}}function WK(e,t,r,n){let o=n.store(t.agentOsId),s=n.audit(t.agentOsId);try{switch(e.op){case"login_list":return{ok:!0,logins:o.list(),vault:n.report(t.agentOsId)};case"login_delete":{let i=e.handle;if(typeof i!="string"||!FK.test(i))return it("invalid_handle","That saved-login handle isn't valid.");let a=o.get(i),l=o.remove(i);return l&&a&&s.record({event:"remove",ok:!0,handle:i,label:a.label,username:a.username,origin:a.origin,code:"chat_card"}),l?{ok:!0,removed:!0}:it("not_found","No saved login with that handle on this computer.")}case"login_store":{let i=e.requestId;if(typeof i!="string"||!xp.test(i))return it("invalid_request","That request id isn't valid.");let a=e.replaceHandle;if(a!==void 0&&!(typeof a=="string"&&FK.test(a)))return it("invalid_handle","That saved-login handle isn't valid.");let l=Ap(e.envelope);if(!l)return it("invalid_envelope","The sealed login is malformed.");if(l.kid!==r.fingerprint)return s.record({event:"add",ok:!1,code:"key_mismatch"}),it("key_mismatch","The login was sealed for a different computer key. Reload the card and try again.");let c=aue(n.report(t.agentOsId));if(c)return c;let u=n.key(t.agentOsId);if(!u)return it("login_vault_locked","Saved logins are locked on this computer. Run `kynver logins unlock`, then try again.");let d;try{d=Ip(r.ecdhPrivateKey,l,{agentOsId:t.agentOsId,requestId:i,name:iue(a)})}catch(h){return s.record({event:"add",ok:!1,code:"open_failed"}),it("open_failed",h instanceof yt?h.message:"The login could not be opened.")}let m=lue(d);if(d="",!m)return it("invalid_login","The sealed login has an unexpected shape.");let f={origin:m.origin,label:cue(m),username:m.username,password:m.password,totp:m.totp,allowLan:!0},g=a?o.replace(u,a,f):o.add(u,f);return m.password="",s.record({event:a?"replace":"add",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,code:"chat_card"}),{ok:!0,login:g,...a?{replaced:!0}:{}}}default:return it("unknown_op","Unknown saved-login operation.")}}catch(i){return i instanceof Y?it(i.code,i.message):it("store_failed","The saved-login vault on this computer hit an error.")}}var BK,FK,iue,it,$K=p(()=>{"use strict";Pp();ci();bn();td();BK="site_login",FK=/^lg_[a-z0-9]{6,20}$/,iue=e=>e?`${BK}:${e}`:BK,it=(e,t)=>({ok:!1,code:e,text:t})});function Zt(e,t){return{ok:!1,code:e,text:t}}async function KK(e,t,r={}){let n=e??{};if(typeof n.boxId!="string"||n.boxId!==t.boxId)return Zt("wrong_computer","This request was meant for another computer.");let o;try{o=(r.keys??Op)()}catch(a){return Zt("keys_unavailable",a instanceof Error?a.message:"This computer's secret store isn't available.")}let s=new di({agentOsId:t.agentOsId,vaultKey:o.vaultKey,root:r.root}),i=a=>(r.audit??DK)(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(),siteLogins:UK(r.siteLogins??rt(),t.agentOsId)};case"login_store":case"login_list":case"login_delete":return WK(n,t,o,r.siteLogins??rt());case"list":return{ok:!0,fingerprint:o.fingerprint,keyStore:o.keyStore,secrets:s.list(),audit:MK(t.agentOsId,30,r.root)};case"store":{let a=n.name,l=n.requestId;if(!Cp(a))return Zt("invalid_name","That secret name isn't allowed.");if(typeof l!="string"||!xp.test(l))return Zt("invalid_request","That request id isn't valid.");let c=Ap(n.envelope);if(!c)return Zt("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"}),Zt("key_mismatch","The value was sealed for a different computer key. Reload the card and try again.");let u;try{u=Ip(o.ecdhPrivateKey,c,{agentOsId:t.agentOsId,requestId:l,name:a})}catch(f){return i({event:"refused",name:a,ok:!1,via:"chat",requestId:l,code:"open_failed"}),Zt("open_failed",f instanceof yt?f.message:"The secret could not be opened.")}let d=typeof n.purpose=="string"?n.purpose:"",m=s.put({name:a,value:u,purpose:d});return u="",Hk(t.agentOsId),i({event:m.replaced?"rotate":"store",name:a,handle:m.summary.handle,ok:!0,via:n.via==="settings"?"settings":"chat",requestId:l}),{ok:!0,handle:m.summary.handle,name:a,replaced:m.replaced}}case"delete":{let a=n.handle;if(typeof a!="string"||!QT.test(a))return Zt("invalid_handle","That secret handle isn't valid.");let l=s.remove({handle:a});return Hk(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 Zt("unknown_op","Unknown secret operation.")}}catch(a){return a instanceof Ne?Zt(a.code,a.message):Zt("store_failed","The secret store on this computer hit an error.")}}var HK=p(()=>{"use strict";LK();Pp();dr();_l();Dp();$K();Ts();ci()});async function jK(e,t,r,n={}){let o=t.payload?.op;try{let s=await KK(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 VK=p(()=>{"use strict";HK()});function GK(e=process.env,t={}){let r=t.platform??process.platform,n=I(),o={executable:null,source:"none",version:null,configuredMissing:null};try{o=(t.resolve??(()=>Xo({env:e,platform:r,config:n})))()}catch{}let s={version:null,missingLibs:[]};if(o.executable)try{s=(t.health??(i=>G$(i)))(o.executable)}catch{}return{supported:!0,chromeFound:o.executable!==null,localDisabled:n.browserDisabled===!0,browserSource:o.source,browserVersion:o.version??s.version,provisioning:Qo().state,missingLibs:s.missingLibs,wsl:Cc(e,r),headless:Lm(e,r),autoProvision:n.browserAutoProvision!==!1,sandbox:aK()}}var JK=p(()=>{"use strict";$();yw();qo();Ec();Km();ww()});function Tc(e,t,r,n,o,s,i){return{chatProvider:e,toolCalls:e==="anthropic"||e==="cursor"||e==="gemini"||e==="openai"||e==="codex",runtimePackageVersion:nt,browser:GK(),deliveryReceipt:!0,...t?{chatModels:t}:{},...r?{computer:r}:{},...n?{security:n}:{},...o?{agentEngines:o}:{},...s?{packageVersions:s}:{},...i?{selfUpdate:i}:{}}}var Ow=p(()=>{"use strict";Rn();JK()});import{spawn as uue}from"node:child_process";async function YK(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=br(o),i=new Set([...nR,...dg]);return new Promise(a=>{let l="",c=!1,u=f=>{c||(c=!0,clearTimeout(m),a({...f,at:r().toISOString()}))},d;try{d=uue(t.execPath??process.execPath,["-e",due],X({env:s,stdio:["ignore","pipe","ignore"]}))}catch(f){u({ok:!1,leaked:[],error:f instanceof Error?f.message:String(f)});return}let m=setTimeout(()=>{d.kill("SIGKILL"),u({ok:!1,leaked:[],error:"self-test timed out"})},t.timeoutMs??1e4);d.stdout?.on("data",f=>{l+=f.toString("utf8")}),d.on("error",f=>u({ok:!1,leaked:[],error:f.message})),d.on("close",()=>{let f;try{f=JSON.parse(l)}catch{u({ok:!1,leaked:[],error:"self-test child printed no env listing"});return}let g=Array.isArray(f)?f.filter(h=>typeof h=="string"&&i.has(h)).sort():[];u({ok:g.length===0,leaked:g})})})}var due,qK=p(()=>{"use strict";U();Ho();la();due="process.stdout.write(JSON.stringify(Object.keys(process.env)))"});function fue(e){return e>=200&&e<300?"accepted":e===409||e===410?"rejected":e===404||e===405?"unsupported":"unreachable"}function zK(e){return e!=="rejected"}async function XK(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(),pue);try{let a=await Ni(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:fue(l.status),status:l.status}}catch{}finally{clearTimeout(i)}}return{outcome:"unreachable",status:null}}var pue,QK=p(()=>{"use strict";Di();pue=4e3});async function hue(e,t,r=fetch){let n=new AbortController,o=setTimeout(()=>n.abort(),gue);try{let s=await Ni(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 ZK(e){let t=e.intervalMs??mue,r=!1,n=()=>{r||hue(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 mue,gue,eH=p(()=>{"use strict";Di();mue=15e3,gue=5e3});function tH(e){return e==="body"?12e4:32e3}var rH=p(()=>{"use strict"});async function nH(e,t,r,n){let o=I(),s=gr(o),i=await Un(e);if(!i.bearer)return"no_credential";let a=Tc(s,Li(o),Bf(s,o),e.security?.report({policy:n,auth:i.kind,credentialStore:Zl(),folderSandbox:lm(process.env,o)}),ym(),zm(),qm()),l=xB(e.agentOsId);l&&(a.browser.siteLogins=l);let c=i.kind==="box_token"?i.boxId:Uo();e.chatProvider=s,e.boxId=c,e.model=Fo(s,o,process.env);let u=new AbortController,d="headers",m=()=>setTimeout(()=>u.abort(),tH(d)),f=m(),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:yue,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 Bn(h.status);if(!h.ok)throw new Bn(h.status);d="body",clearTimeout(f),f=m();let y;try{y=await h.json()}catch{throw new Bn(502)}let v=RL(y);if(!v)throw new Bn(502);return{...v.turn,claimReceivedAtMs:Date.now()}}catch(h){if(t())return null;throw h}finally{clearTimeout(f),clearInterval(g)}}var yue,oH=p(()=>{"use strict";$();FR();Iw();Tw();Ow();kf();mc();ac();Fn();Di();rH();Rf();Ff();yue=2e4});async function Nw(e){let t=await vf(),r=()=>Sv(I().agentOsId?.trim())&&!!I().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:iH}));!t&&!e.shouldStop();){if(!r()||(await Mi(iH,e.shouldStop),e.shouldStop()))return;t=await vf()}if(!t||e.shouldStop())return;let n=zL(process.env,I()),o=new If;t.security&&(t.security.childEnv=await YK().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:Tc(t.chatProvider),useClaudeOauth:t.useClaudeOauth,turnSignature:n,credentialStore:Zl(),childEnvSafe:t.security?.childEnv?.ok??null,auth:t.auth?.describe().kind??"api_key"}));let s=0,i=0,a=new yf,l=ZK({target:t,capabilities:u=>{let d=I(),m=gr(d);return Tc(m,Li(d),Bf(m,d),t.security?.report({policy:n,auth:u.kind,credentialStore:Zl(),folderSandbox:lm(process.env,d)}),ym(),zm(),qm())},onBeat:u=>hK({pid:process.pid,runtimeVersion:nt,at:new Date().toISOString(),heartbeatOk:u,chatTurns:Math.max(0,s-i),commandTurns:i})}),c=Promise.resolve();for(;!e.shouldStop();)try{if(s>=kue){await Mi(250,e.shouldStop);continue}let u=await nH(t,e.shouldStop,a.snapshot(),n);if(u==="no_credential"){console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:"machine_not_linked"})),await Mi(sH,e.shouldStop);continue}if(u==="auth_error"){a.onAuthError();let d=t.auth?.describe().hasBoxCredential===!0;await Mi(d?5e3:sH,e.shouldStop);continue}if(a.onSuccess(),u){let d=await XK(t,u.turnId);if(!zK(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 m=u.payload?.kind;s+=1;let f;if(m==="command"){i+=1;let g=()=>Wv(t,u);f=c.then(g,g),c=f.then(()=>{},()=>{})}else{let g=await Fv(t,u,{policy:n,nonces:o});if(!g.ok){s-=1;continue}if(o.markStarted(u.turnId),m==="browser"){let h=await Un(t);f=PK({...t,apiKey:h.bearer},{turnId:u.turnId,payload:g.payload})}else m==="secret"?f=jK(h=>Ae(t,u.turnId,h),{turnId:u.turnId,payload:g.payload},{agentOsId:t.agentOsId,boxId:t.boxId}):m==="agent-tab"?f=qW(h=>Ae(t,u.turnId,h),{turnId:u.turnId,payload:g.payload,boxId:t.boxId},{late:CB(t),files:EB(t),redactor:ur(t.agentOsId)}):f=IR(t,{...u,payload:g.payload},g.trust)}f.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,m==="command"&&(i-=1),m!=="command"&&o.markFinished(u.turnId)})}}catch(u){let{kind:d,consecutive:m,backoffMs:f}=a.onError(u),g=xL(d,m),h=JSON.stringify({event:g.event,level:g.level,error:u instanceof Error?u.message:String(u),kind:d,consecutive:m,retryInMs:f});g.level==="error"?console.error(h):console.log(h),f>0&&await Mi(f,e.shouldStop)}l(),await fK(),console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}var sH,iH,kue,aH=p(()=>{"use strict";$();FR();zW();xw();Rn();yK();Iw();Tw();TK();VK();dr();Ow();qK();kf();mc();QK();eH();ac();Fn();Pf();Dv();Rf();PR();oH();$v();ec();Ff();Uv();sH=6e4,iH=5*6e4,kue=3});var Dw=p(()=>{"use strict";kf();Rf();Uv();$v();PR();aH()});import{createHash as bue,randomUUID as vue}from"node:crypto";import{readFileSync as Rue,statSync as wue}from"node:fs";import{basename as lH}from"node:path";async function Xm(e,t,r){let n=Math.max(1,e.attempts??4),o=e.sleep??(i=>new Promise(a=>setTimeout(a,i))),s=null;for(let i=0;i<n;i++){let a=1e3*2**i;try{let l=await Ce(t,await r(),e.fetchImpl??fetch),c=await l.json().catch(()=>({}));if(s={status:l.status,body:c},!Cue(l.status))return s;let u=Number(l.headers.get("retry-after"));Number.isFinite(u)&&u>0&&(a=Math.min(u*1e3,6e4))}catch(l){if(l instanceof Zo)throw l;s={status:0,body:{code:"network_error",error:l instanceof Error?l.message:String(l)}}}i<n-1&&await o(a)}return s}function Qm(e,t){return`${e.apiBaseUrl.replace(/\/$/,"")}${t}`}async function Mw(e,t={}){let r=await e.authorization();if(!r)throw new Zo(401,"no_chat_credential","This computer has no chat credential yet. Run `kynver start` (or `kynver setup`) and try again.");return{Authorization:`Bearer ${r}`,...t}}async function Eue(e,t,r){let n=`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box/uploads`,o=await Xm(e,Qm(e,n),async()=>({method:"POST",headers:await Mw(e,{"Content-Type":"application/json"}),body:JSON.stringify({name:lH(t).slice(0,200),size:r.length,sha256:bue("sha256").update(r).digest("hex")})}));if(o.status!==201&&o.status!==200)throw Zm(o,"upload_failed");let s=Number(o.body.partBytes),i=Number(o.body.parts),a=String(o.body.partUrl??""),l=String(o.body.completeUrl??"");if(!s||!i||!a.includes("{index}")||!l)throw new Zo(502,"upload_failed","The upload could not be started.");for(let d=0;d<i;d++){let m=r.subarray(d*s,Math.min(r.length,(d+1)*s)),f=await Xm(e,Qm(e,a.replace("{index}",String(d))),async()=>({method:"PUT",headers:{"Content-Type":"application/octet-stream"},body:new Uint8Array(m)}));if(f.status!==200)throw Zm(f,"upload_failed")}let c=await Xm(e,Qm(e,l),async()=>({method:"POST",headers:await Mw(e)})),u=c.body.file;if(c.status!==200||typeof u?.id!="string")throw Zm(c,"upload_failed");return u.id}async function Bw(e,t){let r=e.idempotencyKey?.trim()||`tab-post.${vue()}`,n=(a,l,c)=>({ok:!1,status:a,code:l,message:c,idempotencyKey:r}),o=e.conversationId?.trim()??"";if(o?!xue.test(o):!e.target&&!e.topic)return n(400,"conversation_required","Name the conversation that started the work (--conversation <id> or $KYNVER_CONVERSATION).");if(!Lw.test(r))return n(400,"bad_idempotency_key","The key must be 4\u2013128 letters, digits, . _ : -");let s=e.files??[],i=Cl(t.agentOsId,e.text);if(!i.trim()&&s.length===0)return n(400,"empty_post","Say something or attach a file.");try{let a=t.readFile??(g=>Rue(g)),l=t.fileSize??(g=>wue(g).size),c=[],u=0;for(let g of s){let h,y;try{h=l(g),y=Lp(t.agentOsId,a(g))}catch{return n(400,"file_unreadable",`Can't read ${g}.`)}h<=Sue&&u+h<=_ue?(u+=y.length,c.push({name:Cl(t.agentOsId,lH(g)).slice(0,200),contentBase64:y.toString("base64")})):c.push({fileId:await Eue(t,g,y)})}let d=JSON.stringify({engine:e.engine??"hermes",idempotencyKey:r,...o?{conversationId:o}:e.topic?{topic:e.topic}:{target:e.target},text:i,attachments:c,...e.notify===!1?{notify:!1}:{}}),m=await Xm(t,Qm(t,`/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/agent-tabs/box/posts`),async()=>({method:"POST",headers:await Mw(t,{"Content-Type":"application/json"}),body:d}));if(m.status===200||m.status===201)return{ok:!0,duplicate:m.body.duplicate===!0,messageId:typeof m.body.messageId=="string"?m.body.messageId:null,conversationId:String(m.body.conversationId??o),idempotencyKey:r};let f=Zm(m,"post_failed");return n(f.status,f.code,f.message)}catch(a){return a instanceof Zo?n(a.status,a.code,a.message):n(0,"post_failed",a instanceof Error?a.message:String(a))}}var Sue,_ue,Lw,xue,Zo,Cue,Zm,Fw=p(()=>{"use strict";wt();dr();Sue=8*1024*1024,_ue=20*1024*1024,Lw=/^[A-Za-z0-9._:-]{4,128}$/,xue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Zo=class extends Error{constructor(r,n,o){super(o);this.status=r;this.code=n}status;code},Cue=e=>e===429||e>=500;Zm=(e,t)=>new Zo(e.status,String(e.body.code??t),String(e.body.error??`Request failed (${e.status||"network"}).`))});function cH(){let t=I().agentOsId?.trim(),r=Ut();if(!t||!r)return"This computer isn't connected to Kynver yet. Run `kynver setup` first.";let n=new Ai({apiBaseUrl:r,agentOsId:t,boxLabel:()=>Uo(process.env),loadApiKey:ke,loadBoxCredential:()=>hn(t),saveBoxCredential:o=>Fu(t,o),clearBoxCredential:Uu,log:()=>{}});return{apiBaseUrl:r,agentOsId:t,authorization:async()=>{let o=await n.authorization();return o?.kind==="box_token"?o.bearer:hn(t)??null}}}var uH=p(()=>{"use strict";$();vv();Dw();Ql();Xl();Fw()});import{existsSync as Kze,mkdirSync as Aue,readFileSync as Iue,renameSync as Pue,writeFileSync as Tue}from"node:fs";import{homedir as Oue}from"node:os";import dH from"node:path";function pH(e=Oue()){return dH.join(e,".kynver","hermes-cron-forward.json")}function Uw(e,t,r=0){try{let n=JSON.parse(Iue(e,"utf8"));if(n?.version===1&&typeof n.startedAt=="string"&&n.runs&&typeof n.runs=="object")return n}catch{}return{version:1,startedAt:new Date(t-r).toISOString(),runs:{}}}function Ww(e,t,r){let n=Object.fromEntries(Object.entries(t.runs).filter(([,s])=>r-Date.parse(s.at)<=Nue||!s.final));Aue(dH.dirname(e),{recursive:!0,mode:448});let o=`${e}.tmp`;Tue(o,JSON.stringify({...t,runs:n},null,2),{mode:384}),Pue(o,e)}var Nue,fH,$w=p(()=>{"use strict";Nue=720*60*60*1e3;fH=(e,t)=>`${e}/${t}`});import{existsSync as Due,readFileSync as Mue}from"node:fs";import{homedir as Lue}from"node:os";import Bue from"node:path";function Kw(e=Lue()){return Bue.join(e,".kynver","hermes-cron-routes.json")}function jue(e){if(e==="skip")return{skip:!0};if(!e||typeof e!="object"||Array.isArray(e))return{invalid:'a route is {"topic"}, {"conversationId"} or "skip"'};let t=e,r=t.notify===void 0?!0:t.notify;if(typeof r!="boolean")return{invalid:"notify must be true or false"};if(typeof t.conversationId=="string")return $ue.test(t.conversationId.trim())?{skip:!1,destination:{kind:"conversation",conversationId:t.conversationId.trim()},notify:r}:{invalid:"conversationId must be a uuid"};if(typeof t.topic=="string"){let n=t.topic.trim();if(!Wue.test(n))return{invalid:"topic must be 1\u201364 lowercase letters, digits, . _ -"};if(n===Fue)return{skip:!1,destination:{kind:"updates"},notify:r};let o=typeof t.title=="string"&&t.title.trim()?t.title.trim().slice(0,80):Hue(n);return{skip:!1,destination:{kind:"topic",key:n,title:o},notify:r}}return{invalid:'a route needs "topic" or "conversationId"'}}function mH(e=Kw()){let t={present:!1,fallback:Kue,jobs:new Map,fileError:null};if(!Due(e))return t;let r;try{r=JSON.parse(Mue(e,"utf8"))}catch{return{...t,present:!0,fileError:"hermes-cron-routes.json is not valid JSON"}}if(!r||typeof r!="object"||Array.isArray(r))return{...t,present:!0,fileError:"hermes-cron-routes.json must be an object of jobId \u2192 route"};let n={...t,present:!0,jobs:new Map};for(let[o,s]of Object.entries(r)){let i=jue(s);o===Uue?"invalid"in i?n.fileError=`"*": ${i.invalid}`:n.fallback=i:n.jobs.set(o,i)}return n}function gH(e,t){return e.fileError?{invalid:e.fileError}:e.jobs.get(t)??e.fallback}var Fue,Uue,Wue,$ue,Kue,Hue,Hw=p(()=>{"use strict";Fue="updates",Uue="*",Wue=/^[a-z0-9][a-z0-9._-]{0,63}$/,$ue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Kue={skip:!1,destination:{kind:"updates"},notify:!0};Hue=e=>e.replace(/[._-]+/g," ").replace(/^\w/,t=>t.toUpperCase()).slice(0,80)});async function hH(e,t){try{let r=await t.authorization();if(!r)return{ok:!1,status:401,code:"no_chat_credential"};let n=await Ce(`${t.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/agent-tabs/box/telegram-receipts`,{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify(e)},t.fetchImpl??fetch);if(n.status===200||n.status===201)return{ok:!0};let o=await n.json().catch(()=>({}));return{ok:!1,status:n.status,code:typeof o.code=="string"?o.code:"receipt_failed"}}catch{return{ok:!1,status:0,code:"network_error"}}}var yH=p(()=>{"use strict";wt()});function kH(e){let t=e.toLowerCase();return/rate[ _-]?limit|\b429\b|too many requests|quota|credential|unauthori[sz]ed|\b401\b|overloaded/.test(t)?"rate_limit":/timed? ?out|timeout|deadline exceeded/.test(t)?"timeout":/resolv\w*\s+(?:the\s+)?provider|provider\s+resol|no provider|unknown provider|provider.*not (?:found|configured)/.test(t)?"provider":"other"}function Yue(e,t){return(e??t).replace(/\s*\(FAILED\)\s*$/i,"").trim()||t}function bH(e,t,r,n,o){return`**${Yue(e,t)}** didn't run this time: ${Vue[r]}.
|
|
557
|
+
`).filter(Boolean).slice(-t).flatMap(o=>{try{return[JSON.parse(o)]}catch{return[]}}):[]}var sue,LK=p(()=>{"use strict";Cl();Mp();sue=512*1024});function UK(e,t){return e.report(t)}function aue(e){return e.state==="none"?it("login_vault_missing","Saved logins aren't set up on this computer yet. Run `kynver logins setup` (or open the Kynver desktop app), then try again."):e.state==="locked"?it("login_vault_locked","Saved logins are locked on this computer. Run `kynver logins unlock`, then try again."):null}function lue(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!="object"||Array.isArray(t))return null;let r=t;for(let n of Object.keys(r))if(!["o","u","p","t","l"].includes(n))return null;return typeof r.o!="string"||typeof r.u!="string"||typeof r.p!="string"||r.t!==void 0&&typeof r.t!="string"||r.l!==void 0&&typeof r.l!="string"?null:{origin:r.o,username:r.u,password:r.p,...r.t?{totp:r.t}:{},...r.l?{label:r.l}:{}}}function cue(e){let t=(e.label??"").trim().slice(0,Ye.maxLabel);if(t)return t;try{return new URL(e.origin.includes("://")?e.origin:`https://${e.origin}`).hostname.slice(0,Ye.maxLabel)}catch{return"Website login"}}function WK(e,t,r,n){let o=n.store(t.agentOsId),s=n.audit(t.agentOsId);try{switch(e.op){case"login_list":return{ok:!0,logins:o.list(),vault:n.report(t.agentOsId)};case"login_delete":{let i=e.handle;if(typeof i!="string"||!FK.test(i))return it("invalid_handle","That saved-login handle isn't valid.");let a=o.get(i),l=o.remove(i);return l&&a&&s.record({event:"remove",ok:!0,handle:i,label:a.label,username:a.username,origin:a.origin,code:"chat_card"}),l?{ok:!0,removed:!0}:it("not_found","No saved login with that handle on this computer.")}case"login_store":{let i=e.requestId;if(typeof i!="string"||!Cp.test(i))return it("invalid_request","That request id isn't valid.");let a=e.replaceHandle;if(a!==void 0&&!(typeof a=="string"&&FK.test(a)))return it("invalid_handle","That saved-login handle isn't valid.");let l=Ip(e.envelope);if(!l)return it("invalid_envelope","The sealed login is malformed.");if(l.kid!==r.fingerprint)return s.record({event:"add",ok:!1,code:"key_mismatch"}),it("key_mismatch","The login was sealed for a different computer key. Reload the card and try again.");let c=aue(n.report(t.agentOsId));if(c)return c;let u=n.key(t.agentOsId);if(!u)return it("login_vault_locked","Saved logins are locked on this computer. Run `kynver logins unlock`, then try again.");let d;try{d=Pp(r.ecdhPrivateKey,l,{agentOsId:t.agentOsId,requestId:i,name:iue(a)})}catch(h){return s.record({event:"add",ok:!1,code:"open_failed"}),it("open_failed",h instanceof yt?h.message:"The login could not be opened.")}let m=lue(d);if(d="",!m)return it("invalid_login","The sealed login has an unexpected shape.");let f={origin:m.origin,label:cue(m),username:m.username,password:m.password,totp:m.totp,allowLan:!0},g=a?o.replace(u,a,f):o.add(u,f);return m.password="",s.record({event:a?"replace":"add",ok:!0,handle:g.handle,label:g.label,username:g.username,origin:g.origin,code:"chat_card"}),{ok:!0,login:g,...a?{replaced:!0}:{}}}default:return it("unknown_op","Unknown saved-login operation.")}}catch(i){return i instanceof Y?it(i.code,i.message):it("store_failed","The saved-login vault on this computer hit an error.")}}var BK,FK,iue,it,$K=p(()=>{"use strict";Tp();di();vn();nd();BK="site_login",FK=/^lg_[a-z0-9]{6,20}$/,iue=e=>e?`${BK}:${e}`:BK,it=(e,t)=>({ok:!1,code:e,text:t})});function Zt(e,t){return{ok:!1,code:e,text:t}}async function KK(e,t,r={}){let n=e??{};if(typeof n.boxId!="string"||n.boxId!==t.boxId)return Zt("wrong_computer","This request was meant for another computer.");let o;try{o=(r.keys??Np)()}catch(a){return Zt("keys_unavailable",a instanceof Error?a.message:"This computer's secret store isn't available.")}let s=new fi({agentOsId:t.agentOsId,vaultKey:o.vaultKey,root:r.root}),i=a=>(r.audit??DK)(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(),siteLogins:UK(r.siteLogins??rt(),t.agentOsId)};case"login_store":case"login_list":case"login_delete":return WK(n,t,o,r.siteLogins??rt());case"list":return{ok:!0,fingerprint:o.fingerprint,keyStore:o.keyStore,secrets:s.list(),audit:MK(t.agentOsId,30,r.root)};case"store":{let a=n.name,l=n.requestId;if(!Ep(a))return Zt("invalid_name","That secret name isn't allowed.");if(typeof l!="string"||!Cp.test(l))return Zt("invalid_request","That request id isn't valid.");let c=Ip(n.envelope);if(!c)return Zt("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"}),Zt("key_mismatch","The value was sealed for a different computer key. Reload the card and try again.");let u;try{u=Pp(o.ecdhPrivateKey,c,{agentOsId:t.agentOsId,requestId:l,name:a})}catch(f){return i({event:"refused",name:a,ok:!1,via:"chat",requestId:l,code:"open_failed"}),Zt("open_failed",f instanceof yt?f.message:"The secret could not be opened.")}let d=typeof n.purpose=="string"?n.purpose:"",m=s.put({name:a,value:u,purpose:d});return u="",Hk(t.agentOsId),i({event:m.replaced?"rotate":"store",name:a,handle:m.summary.handle,ok:!0,via:n.via==="settings"?"settings":"chat",requestId:l}),{ok:!0,handle:m.summary.handle,name:a,replaced:m.replaced}}case"delete":{let a=n.handle;if(typeof a!="string"||!QT.test(a))return Zt("invalid_handle","That secret handle isn't valid.");let l=s.remove({handle:a});return Hk(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 Zt("unknown_op","Unknown secret operation.")}}catch(a){return a instanceof Ne?Zt(a.code,a.message):Zt("store_failed","The secret store on this computer hit an error.")}}var HK=p(()=>{"use strict";LK();Tp();pr();Cl();Mp();$K();Os();di()});async function jK(e,t,r,n={}){let o=t.payload?.op;try{let s=await KK(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 VK=p(()=>{"use strict";HK()});function GK(e=process.env,t={}){let r=t.platform??process.platform,n=I(),o={executable:null,source:"none",version:null,configuredMissing:null};try{o=(t.resolve??(()=>Qo({env:e,platform:r,config:n})))()}catch{}let s={version:null,missingLibs:[]};if(o.executable)try{s=(t.health??(i=>G$(i)))(o.executable)}catch{}return{supported:!0,chromeFound:o.executable!==null,localDisabled:n.browserDisabled===!0,browserSource:o.source,browserVersion:o.version??s.version,provisioning:Zo().state,missingLibs:s.missingLibs,wsl:Ac(e,r),headless:Bm(e,r),autoProvision:n.browserAutoProvision!==!1,sandbox:aK()}}var JK=p(()=>{"use strict";$();yw();zo();Ic();Hm();ww()});function Nc(e,t,r,n,o,s,i){return{chatProvider:e,toolCalls:e==="anthropic"||e==="cursor"||e==="gemini"||e==="openai"||e==="codex",runtimePackageVersion:nt,browser:GK(),deliveryReceipt:!0,...t?{chatModels:t}:{},...r?{computer:r}:{},...n?{security:n}:{},...o?{agentEngines:o}:{},...s?{packageVersions:s}:{},...i?{selfUpdate:i}:{}}}var Ow=p(()=>{"use strict";wn();JK()});import{spawn as uue}from"node:child_process";async function YK(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=vr(o),i=new Set([...nR,...pg]);return new Promise(a=>{let l="",c=!1,u=f=>{c||(c=!0,clearTimeout(m),a({...f,at:r().toISOString()}))},d;try{d=uue(t.execPath??process.execPath,["-e",due],X({env:s,stdio:["ignore","pipe","ignore"]}))}catch(f){u({ok:!1,leaked:[],error:f instanceof Error?f.message:String(f)});return}let m=setTimeout(()=>{d.kill("SIGKILL"),u({ok:!1,leaked:[],error:"self-test timed out"})},t.timeoutMs??1e4);d.stdout?.on("data",f=>{l+=f.toString("utf8")}),d.on("error",f=>u({ok:!1,leaked:[],error:f.message})),d.on("close",()=>{let f;try{f=JSON.parse(l)}catch{u({ok:!1,leaked:[],error:"self-test child printed no env listing"});return}let g=Array.isArray(f)?f.filter(h=>typeof h=="string"&&i.has(h)).sort():[];u({ok:g.length===0,leaked:g})})})}var due,qK=p(()=>{"use strict";U();jo();ua();due="process.stdout.write(JSON.stringify(Object.keys(process.env)))"});function fue(e){return e>=200&&e<300?"accepted":e===409||e===410?"rejected":e===404||e===405?"unsupported":"unreachable"}function zK(e){return e!=="rejected"}async function XK(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(),pue);try{let a=await Mi(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 yr(e,a,l.status),{outcome:fue(l.status),status:l.status}}catch{}finally{clearTimeout(i)}}return{outcome:"unreachable",status:null}}var pue,QK=p(()=>{"use strict";Li();pue=4e3});async function hue(e,t,r=fetch){let n=new AbortController,o=setTimeout(()=>n.abort(),gue);try{let s=await Mi(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 yr(e,s,a.status),a.ok}catch{return!1}finally{clearTimeout(o)}}function ZK(e){let t=e.intervalMs??mue,r=!1,n=()=>{r||hue(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 mue,gue,eH=p(()=>{"use strict";Li();mue=15e3,gue=5e3});function tH(e){return e==="body"?12e4:32e3}var rH=p(()=>{"use strict"});async function nH(e,t,r,n){let o=I(),s=hr(o),i=await Wn(e);if(!i.bearer)return"no_credential";let a=Nc(s,Fi(o),Ff(s,o),e.security?.report({policy:n,auth:i.kind,credentialStore:tc(),folderSandbox:cm(process.env,o)}),km(),Xm(),zm()),l=xB(e.agentOsId);l&&(a.browser.siteLogins=l);let c=i.kind==="box_token"?i.boxId:Wo();e.chatProvider=s,e.boxId=c,e.model=Uo(s,o,process.env);let u=new AbortController,d="headers",m=()=>setTimeout(()=>u.abort(),tH(d)),f=m(),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:yue,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)})),yr(e,i,401),"auth_error"}if(h.status===429)throw new Fn(h.status);if(!h.ok)throw new Fn(h.status);d="body",clearTimeout(f),f=m();let y;try{y=await h.json()}catch{throw new Fn(502)}let v=RL(y);if(!v)throw new Fn(502);return{...v.turn,claimReceivedAtMs:Date.now()}}catch(h){if(t())return null;throw h}finally{clearTimeout(f),clearInterval(g)}}var yue,oH=p(()=>{"use strict";$();FR();Iw();Tw();Ow();bf();hc();cc();Un();Li();rH();wf();Uf();yue=2e4});async function Nw(e){let t=await Rf(),r=()=>Sv(I().agentOsId?.trim())&&!!I().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:iH}));!t&&!e.shouldStop();){if(!r()||(await Bi(iH,e.shouldStop),e.shouldStop()))return;t=await Rf()}if(!t||e.shouldStop())return;let n=zL(process.env,I()),o=new Pf;t.security&&(t.security.childEnv=await YK().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:Nc(t.chatProvider),useClaudeOauth:t.useClaudeOauth,turnSignature:n,credentialStore:tc(),childEnvSafe:t.security?.childEnv?.ok??null,auth:t.auth?.describe().kind??"api_key"}));let s=0,i=0,a=new kf,l=ZK({target:t,capabilities:u=>{let d=I(),m=hr(d);return Nc(m,Fi(d),Ff(m,d),t.security?.report({policy:n,auth:u.kind,credentialStore:tc(),folderSandbox:cm(process.env,d)}),km(),Xm(),zm())},onBeat:u=>hK({pid:process.pid,runtimeVersion:nt,at:new Date().toISOString(),heartbeatOk:u,chatTurns:Math.max(0,s-i),commandTurns:i})}),c=Promise.resolve();for(;!e.shouldStop();)try{if(s>=kue){await Bi(250,e.shouldStop);continue}let u=await nH(t,e.shouldStop,a.snapshot(),n);if(u==="no_credential"){console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:"machine_not_linked"})),await Bi(sH,e.shouldStop);continue}if(u==="auth_error"){a.onAuthError();let d=t.auth?.describe().hasBoxCredential===!0;await Bi(d?5e3:sH,e.shouldStop);continue}if(a.onSuccess(),u){let d=await XK(t,u.turnId);if(!zK(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 m=u.payload?.kind;s+=1;let f;if(m==="command"){i+=1;let g=()=>Wv(t,u);f=c.then(g,g),c=f.then(()=>{},()=>{})}else{let g=await Fv(t,u,{policy:n,nonces:o});if(!g.ok){s-=1;continue}if(o.markStarted(u.turnId),m==="browser"){let h=await Wn(t);f=PK({...t,apiKey:h.bearer},{turnId:u.turnId,payload:g.payload})}else m==="secret"?f=jK(h=>Ae(t,u.turnId,h),{turnId:u.turnId,payload:g.payload},{agentOsId:t.agentOsId,boxId:t.boxId}):m==="agent-tab"?f=qW(h=>Ae(t,u.turnId,h),{turnId:u.turnId,payload:g.payload,boxId:t.boxId},{late:CB(t),files:EB(t),redactor:dr(t.agentOsId)}):f=IR(t,{...u,payload:g.payload},g.trust)}f.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,m==="command"&&(i-=1),m!=="command"&&o.markFinished(u.turnId)})}}catch(u){let{kind:d,consecutive:m,backoffMs:f}=a.onError(u),g=xL(d,m),h=JSON.stringify({event:g.event,level:g.level,error:u instanceof Error?u.message:String(u),kind:d,consecutive:m,retryInMs:f});g.level==="error"?console.error(h):console.log(h),f>0&&await Bi(f,e.shouldStop)}l(),await fK(),console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}var sH,iH,kue,aH=p(()=>{"use strict";$();FR();zW();xw();wn();yK();Iw();Tw();TK();VK();pr();Ow();qK();bf();hc();QK();eH();cc();Un();Tf();Dv();wf();PR();oH();$v();rc();Uf();Uv();sH=6e4,iH=5*6e4,kue=3});var Dw=p(()=>{"use strict";bf();wf();Uv();$v();PR();aH()});import{createHash as bue,randomUUID as vue}from"node:crypto";import{readFileSync as Rue,statSync as wue}from"node:fs";import{basename as lH}from"node:path";async function Qm(e,t,r){let n=Math.max(1,e.attempts??4),o=e.sleep??(i=>new Promise(a=>setTimeout(a,i))),s=null;for(let i=0;i<n;i++){let a=1e3*2**i;try{let l=await Ce(t,await r(),e.fetchImpl??fetch),c=await l.json().catch(()=>({}));if(s={status:l.status,body:c},!Cue(l.status))return s;let u=Number(l.headers.get("retry-after"));Number.isFinite(u)&&u>0&&(a=Math.min(u*1e3,6e4))}catch(l){if(l instanceof es)throw l;s={status:0,body:{code:"network_error",error:l instanceof Error?l.message:String(l)}}}i<n-1&&await o(a)}return s}function Zm(e,t){return`${e.apiBaseUrl.replace(/\/$/,"")}${t}`}async function Mw(e,t={}){let r=await e.authorization();if(!r)throw new es(401,"no_chat_credential","This computer has no chat credential yet. Run `kynver start` (or `kynver setup`) and try again.");return{Authorization:`Bearer ${r}`,...t}}async function Eue(e,t,r){let n=`/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/agent-tabs/box/uploads`,o=await Qm(e,Zm(e,n),async()=>({method:"POST",headers:await Mw(e,{"Content-Type":"application/json"}),body:JSON.stringify({name:lH(t).slice(0,200),size:r.length,sha256:bue("sha256").update(r).digest("hex")})}));if(o.status!==201&&o.status!==200)throw eg(o,"upload_failed");let s=Number(o.body.partBytes),i=Number(o.body.parts),a=String(o.body.partUrl??""),l=String(o.body.completeUrl??"");if(!s||!i||!a.includes("{index}")||!l)throw new es(502,"upload_failed","The upload could not be started.");for(let d=0;d<i;d++){let m=r.subarray(d*s,Math.min(r.length,(d+1)*s)),f=await Qm(e,Zm(e,a.replace("{index}",String(d))),async()=>({method:"PUT",headers:{"Content-Type":"application/octet-stream"},body:new Uint8Array(m)}));if(f.status!==200)throw eg(f,"upload_failed")}let c=await Qm(e,Zm(e,l),async()=>({method:"POST",headers:await Mw(e)})),u=c.body.file;if(c.status!==200||typeof u?.id!="string")throw eg(c,"upload_failed");return u.id}async function Bw(e,t){let r=e.idempotencyKey?.trim()||`tab-post.${vue()}`,n=(a,l,c)=>({ok:!1,status:a,code:l,message:c,idempotencyKey:r}),o=e.conversationId?.trim()??"";if(o?!xue.test(o):!e.target&&!e.topic)return n(400,"conversation_required","Name the conversation that started the work (--conversation <id> or $KYNVER_CONVERSATION).");if(!Lw.test(r))return n(400,"bad_idempotency_key","The key must be 4\u2013128 letters, digits, . _ : -");let s=e.files??[],i=Al(t.agentOsId,e.text);if(!i.trim()&&s.length===0)return n(400,"empty_post","Say something or attach a file.");try{let a=t.readFile??(g=>Rue(g)),l=t.fileSize??(g=>wue(g).size),c=[],u=0;for(let g of s){let h,y;try{h=l(g),y=Bp(t.agentOsId,a(g))}catch{return n(400,"file_unreadable",`Can't read ${g}.`)}h<=Sue&&u+h<=_ue?(u+=y.length,c.push({name:Al(t.agentOsId,lH(g)).slice(0,200),contentBase64:y.toString("base64")})):c.push({fileId:await Eue(t,g,y)})}let d=JSON.stringify({engine:e.engine??"hermes",idempotencyKey:r,...o?{conversationId:o}:e.topic?{topic:e.topic}:{target:e.target},text:i,attachments:c,...e.notify===!1?{notify:!1}:{}}),m=await Qm(t,Zm(t,`/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/agent-tabs/box/posts`),async()=>({method:"POST",headers:await Mw(t,{"Content-Type":"application/json"}),body:d}));if(m.status===200||m.status===201)return{ok:!0,duplicate:m.body.duplicate===!0,messageId:typeof m.body.messageId=="string"?m.body.messageId:null,conversationId:String(m.body.conversationId??o),idempotencyKey:r};let f=eg(m,"post_failed");return n(f.status,f.code,f.message)}catch(a){return a instanceof es?n(a.status,a.code,a.message):n(0,"post_failed",a instanceof Error?a.message:String(a))}}var Sue,_ue,Lw,xue,es,Cue,eg,Fw=p(()=>{"use strict";wt();pr();Sue=8*1024*1024,_ue=20*1024*1024,Lw=/^[A-Za-z0-9._:-]{4,128}$/,xue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,es=class extends Error{constructor(r,n,o){super(o);this.status=r;this.code=n}status;code},Cue=e=>e===429||e>=500;eg=(e,t)=>new es(e.status,String(e.body.code??t),String(e.body.error??`Request failed (${e.status||"network"}).`))});function cH(){let t=I().agentOsId?.trim(),r=Ut();if(!t||!r)return"This computer isn't connected to Kynver yet. Run `kynver setup` first.";let n=new Pi({apiBaseUrl:r,agentOsId:t,boxLabel:()=>Wo(process.env),loadApiKey:ke,loadBoxCredential:()=>yn(t),saveBoxCredential:o=>Wu(t,o),clearBoxCredential:$u,log:()=>{}});return{apiBaseUrl:r,agentOsId:t,authorization:async()=>{let o=await n.authorization();return o?.kind==="box_token"?o.bearer:yn(t)??null}}}var uH=p(()=>{"use strict";$();vv();Dw();ec();Zl();Fw()});import{existsSync as Vze,mkdirSync as Aue,readFileSync as Iue,renameSync as Pue,writeFileSync as Tue}from"node:fs";import{homedir as Oue}from"node:os";import dH from"node:path";function pH(e=Oue()){return dH.join(e,".kynver","hermes-cron-forward.json")}function Uw(e,t,r=0){try{let n=JSON.parse(Iue(e,"utf8"));if(n?.version===1&&typeof n.startedAt=="string"&&n.runs&&typeof n.runs=="object")return n}catch{}return{version:1,startedAt:new Date(t-r).toISOString(),runs:{}}}function Ww(e,t,r){let n=Object.fromEntries(Object.entries(t.runs).filter(([,s])=>r-Date.parse(s.at)<=Nue||!s.final));Aue(dH.dirname(e),{recursive:!0,mode:448});let o=`${e}.tmp`;Tue(o,JSON.stringify({...t,runs:n},null,2),{mode:384}),Pue(o,e)}var Nue,fH,$w=p(()=>{"use strict";Nue=720*60*60*1e3;fH=(e,t)=>`${e}/${t}`});import{existsSync as Due,readFileSync as Mue}from"node:fs";import{homedir as Lue}from"node:os";import Bue from"node:path";function Kw(e=Lue()){return Bue.join(e,".kynver","hermes-cron-routes.json")}function jue(e){if(e==="skip")return{skip:!0};if(!e||typeof e!="object"||Array.isArray(e))return{invalid:'a route is {"topic"}, {"conversationId"} or "skip"'};let t=e,r=t.notify===void 0?!0:t.notify;if(typeof r!="boolean")return{invalid:"notify must be true or false"};if(typeof t.conversationId=="string")return $ue.test(t.conversationId.trim())?{skip:!1,destination:{kind:"conversation",conversationId:t.conversationId.trim()},notify:r}:{invalid:"conversationId must be a uuid"};if(typeof t.topic=="string"){let n=t.topic.trim();if(!Wue.test(n))return{invalid:"topic must be 1\u201364 lowercase letters, digits, . _ -"};if(n===Fue)return{skip:!1,destination:{kind:"updates"},notify:r};let o=typeof t.title=="string"&&t.title.trim()?t.title.trim().slice(0,80):Hue(n);return{skip:!1,destination:{kind:"topic",key:n,title:o},notify:r}}return{invalid:'a route needs "topic" or "conversationId"'}}function mH(e=Kw()){let t={present:!1,fallback:Kue,jobs:new Map,fileError:null};if(!Due(e))return t;let r;try{r=JSON.parse(Mue(e,"utf8"))}catch{return{...t,present:!0,fileError:"hermes-cron-routes.json is not valid JSON"}}if(!r||typeof r!="object"||Array.isArray(r))return{...t,present:!0,fileError:"hermes-cron-routes.json must be an object of jobId \u2192 route"};let n={...t,present:!0,jobs:new Map};for(let[o,s]of Object.entries(r)){let i=jue(s);o===Uue?"invalid"in i?n.fileError=`"*": ${i.invalid}`:n.fallback=i:n.jobs.set(o,i)}return n}function gH(e,t){return e.fileError?{invalid:e.fileError}:e.jobs.get(t)??e.fallback}var Fue,Uue,Wue,$ue,Kue,Hue,Hw=p(()=>{"use strict";Fue="updates",Uue="*",Wue=/^[a-z0-9][a-z0-9._-]{0,63}$/,$ue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Kue={skip:!1,destination:{kind:"updates"},notify:!0};Hue=e=>e.replace(/[._-]+/g," ").replace(/^\w/,t=>t.toUpperCase()).slice(0,80)});async function hH(e,t){try{let r=await t.authorization();if(!r)return{ok:!1,status:401,code:"no_chat_credential"};let n=await Ce(`${t.apiBaseUrl.replace(/\/$/,"")}/api/agent-os/by-id/${encodeURIComponent(t.agentOsId)}/agent-tabs/box/telegram-receipts`,{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify(e)},t.fetchImpl??fetch);if(n.status===200||n.status===201)return{ok:!0};let o=await n.json().catch(()=>({}));return{ok:!1,status:n.status,code:typeof o.code=="string"?o.code:"receipt_failed"}}catch{return{ok:!1,status:0,code:"network_error"}}}var yH=p(()=>{"use strict";wt()});function kH(e){let t=e.toLowerCase();return/rate[ _-]?limit|\b429\b|too many requests|quota|credential|unauthori[sz]ed|\b401\b|overloaded/.test(t)?"rate_limit":/timed? ?out|timeout|deadline exceeded/.test(t)?"timeout":/resolv\w*\s+(?:the\s+)?provider|provider\s+resol|no provider|unknown provider|provider.*not (?:found|configured)/.test(t)?"provider":"other"}function Yue(e,t){return(e??t).replace(/\s*\(FAILED\)\s*$/i,"").trim()||t}function bH(e,t,r,n,o){return`**${Yue(e,t)}** didn't run this time: ${Vue[r]}.
|
|
558
558
|
|
|
559
559
|
Log: \`${o}\` (run ${n})`}function vH(e,t,r){let o=e&&e.reason===t&&r-Date.parse(e.lastAt)<=Gue?e.count+1:1;return{streak:{reason:t,count:o,lastAt:new Date(r).toISOString()},post:o===1||o===Jue+1}}function RH(e){return/^#{1,3}\s*Prompt\s*$/m.test(e)||/^---\nname:/m.test(e)||/^\s*---\s*\nname:/.test(e)}var Vue,Gue,Jue,wH=p(()=>{"use strict";Vue={rate_limit:"the AI account was rate-limited; it'll retry on the next run",provider:"the AI provider couldn't be set up",timeout:"it timed out",other:"it hit an error (details in the log)"},Gue=60*6e4,Jue=3});function _H(e){let t=e.replace(/\r\n/g,`
|
|
560
560
|
`),r=Zue.exec(t)?.[1]?.slice(0,120)??null,n=que.exec(t),o=zue.exec(t);if(!n&&(o||Xue.test(t))){let l=o?t.slice(o.index+o[0].length):"",c=Que.exec(l.replace(/^\n/,"")),u=(c?l.slice(0,c.index+1):l).trim().slice(0,4e3);return{title:r,text:"",mediaPaths:[],silent:!1,failed:!0,errorText:u}}if(!n&&ede.test(t))return{title:r,text:"",mediaPaths:[],silent:!0,failed:!1,errorText:""};let s=(n?t.slice(n.index+n[0].length):t).trim();if(!n&&tde.test(t)){let l=/^---\s*$/m.exec(t);s=l?t.slice(l.index+l[0].length).trim():t.split(`
|
|
561
561
|
`).filter((c,u)=>!(u===0&&/^#\s/.test(c))&&!rde.test(c)).join(`
|
|
562
|
-
`).trim()}if(/^\[SILENT\]/i.test(s))return{title:r,text:"",mediaPaths:[],silent:!0,failed:!1,errorText:""};let{text:i,paths:a}=
|
|
562
|
+
`).trim()}if(/^\[SILENT\]/i.test(s))return{title:r,text:"",mediaPaths:[],silent:!0,failed:!1,errorText:""};let{text:i,paths:a}=Sc(s);return{title:r,text:i,mediaPaths:a,silent:i.length===0&&a.length===0,failed:!1,errorText:""}}function xH(e,t,r){let n=`**${e.title??t}**`,o=e.text;return o.length>SH&&(o=`${o.slice(0,SH)}
|
|
563
563
|
|
|
564
564
|
\u2026(cut; the full output is in run ${r} on the computer)`),o?`${n}
|
|
565
565
|
|
|
566
|
-
${o}`:n}var SH,que,zue,Xue,Que,Zue,ede,tde,rde,CH=p(()=>{"use strict";
|
|
566
|
+
${o}`:n}var SH,que,zue,Xue,Que,Zue,ede,tde,rde,CH=p(()=>{"use strict";Yi();SH=3e4,que=/^#{1,3}\s*Response\s*$/im,zue=/^#{1,3}\s*Error\s*$/im,Xue=/^#{1,3}\s*Prompt\s*$/im,Que=/^#{1,3}\s+\S/m,Zue=/^#\s*(?:Cron Job:\s*)?(.+?)\s*$/m,ede=/^\*\*Status:\*\*\s*(?:silent|no_change)\b/im,tde=/^\*\*(?:Job ID|Mode|Run Time):\*\*/m,rde=/^\*\*(?:Job ID|Run Time|Mode|Schedule):\*\*/});import{createHash as OH}from"node:crypto";import{existsSync as EH,readFileSync as NH,readdirSync as AH,realpathSync as nde,statSync as jw}from"node:fs";import{homedir as DH}from"node:os";import an from"node:path";function PH(e,t){let r=`cron:${e}:${t}`.replace(/[^A-Za-z0-9._:-]/g,"_");return Lw.test(r)?r:`cron:${OH("sha256").update(`${e}/${t}`).digest("hex").slice(0,40)}`}function MH(e){return an.join(e,"cron","output")}function LH(e=process.env,t=DH()){return e.HERMES_HOME?.trim()||an.join(t,".hermes")}function BH(e){let t=new Map;try{let r=JSON.parse(NH(an.join(e,"cron","jobs.json"),"utf8")),n=Array.isArray(r)?r:r?.jobs;if(Array.isArray(n))for(let o of n)typeof o?.id=="string"&&typeof o.deliver=="string"&&t.set(o.id,o.deliver.toLowerCase())}catch{}return r=>t.get(r)??null}function ude(e){let t=[],r;try{r=AH(e)}catch{return t}for(let n of r){let o=an.join(e,n),s;try{if(!jw(o).isDirectory())continue;s=AH(o)}catch{continue}for(let i of s)if(i.endsWith(".md"))try{let a=jw(an.join(o,i));a.isFile()&&t.push({jobId:n,runFile:i,file:an.join(o,i),mtimeMs:a.mtimeMs})}catch{}}return t.sort((n,o)=>n.mtimeMs-o.mtimeMs)}function dde(e,t){return e==="~"?t:e.startsWith("~/")?an.join(t,e.slice(2)):e}function pde(e,t){let r=[],n=[];for(let o of e){let s=an.resolve(dde(o,t)),i=an.basename(s),a=wc(s,t),l=s;if(!a)try{l=nde(s),a=wc(l,t)??(jw(l).isFile()?null:"not_a_file")}catch{a="not_found"}a?n.push(`_Not sent: ${i} (${a.replace(/_/g," ")})_`):r.push(l)}return{files:r,notes:n}}function TH(e){return e.kind==="conversation"?{conversationId:e.conversationId}:e.kind==="topic"?{topic:{key:e.key,title:e.title}}:{target:"updates"}}async function FH(e){let t=e.now??Date.now,r=e.log??(()=>{}),n=e.home??DH(),o=e.postFn??Bw,s=e.receiptFn??hH,i={scanned:0,posted:0,duplicate:0,silent:0,suppressed:0,skipped:0,failed:0,retrying:0,receipts:0},a=MH(e.hermesHome),l=Uw(e.statePath,t(),e.backfillMs??0);if(!e.dryRun&&!EH(e.statePath)&&Ww(e.statePath,l,t()),!EH(a))return i;let c=Date.parse(l.startedAt),u=e.routes(),d=e.settleMs??ide,m=!1;for(let f of ude(a)){if(f.mtimeMs<c||t()-f.mtimeMs<d)continue;i.scanned++;let g=fH(f.jobId,f.runFile),h=l.runs[g];if(!(h?.final&&h.receipt!=="pending")){if(!h||!h.final){if(h&&t()<fde(h)){i.retrying++;continue}let y;try{y=NH(f.file)}catch{continue}let v=OH("sha256").update(y).digest("hex"),k={jobId:f.jobId,runFile:f.runFile,sha256:v,messageId:null,receiptAttempts:0},b=h?.attempts??0,S=(R,P={})=>({...k,code:R,final:!0,attempts:b,at:new Date(t()).toISOString(),receipt:"none",...P}),w=gH(u,f.jobId),_=_H(y.toString("utf8"));if("invalid"in w)h?.code!=="bad_route"&&r(`cron-forward: ${f.jobId}: route not usable (${w.invalid}); waiting for a fixed hermes-cron-routes.json`),h={...k,code:"bad_route",final:!1,attempts:0,at:new Date(t()).toISOString(),receipt:"none"};else if(w.skip)h=S("skipped"),i.skipped++;else if(_.silent)h=S("silent"),i.silent++,l.failures&&delete l.failures[f.jobId];else if(_.failed&&e.dryRun){r(`cron-forward (dry run): would post a one-line failure notice for ${f.jobId}/${f.runFile}`);continue}else if(_.failed){let R=kH(_.errorText),P=b>0,N=vH(l.failures?.[f.jobId],R,f.mtimeMs);if(P||(l.failures={...l.failures,[f.jobId]:N.streak}),!P&&!N.post)h=S("failure_repeat"),i.suppressed++;else{let x=await o({...TH(w.destination),text:bH(_.title,f.jobId,R,f.runFile,f.file),files:[],idempotencyKey:PH(f.jobId,f.runFile),notify:w.notify},e.post),O=e.deliverOf?.(f.jobId)!=="local";x.ok?(h=S(x.duplicate?"duplicate":"posted_failure",{messageId:x.messageId,attempts:b+1,receipt:O?"pending":"none"}),i[x.duplicate?"duplicate":"posted"]++):tg(x.status)&&b+1<IH?(h={...k,code:Dc(`failed_${x.status||"network"}`),final:!1,attempts:b+1,at:new Date(t()).toISOString(),receipt:"none"},i.retrying++):(h=S(tg(x.status)?"gave_up":Dc(`failed_${x.status}`),{attempts:b+1,receipt:O?"pending":"none"}),i.failed++)}}else if(e.dryRun){r(`cron-forward (dry run): would post ${f.jobId}/${f.runFile} \u2192 ${w.destination.kind}${w.notify?"":" (silent)"}, ${_.mediaPaths.length} file(s)`);continue}else{let R=pde(_.mediaPaths,n),P=[xH(_,f.jobId,f.runFile),...R.notes].join(`
|
|
567
567
|
|
|
568
|
-
`),N=RH(_.text);N&&r(`cron-forward: ${f.jobId}/${f.runFile} body looks like a prompt or skill text`);let x=await o({...TH(w.destination),text:P,files:R.files,idempotencyKey:PH(f.jobId,f.runFile),notify:w.notify},e.post),O=e.deliverOf?.(f.jobId)!=="local";x.ok?(l.failures&&delete l.failures[f.jobId],h=S(x.duplicate?"duplicate":N?sde:"posted",{messageId:x.messageId,attempts:b+1,receipt:O?"pending":"none"}),i[x.duplicate?"duplicate":"posted"]++):
|
|
568
|
+
`),N=RH(_.text);N&&r(`cron-forward: ${f.jobId}/${f.runFile} body looks like a prompt or skill text`);let x=await o({...TH(w.destination),text:P,files:R.files,idempotencyKey:PH(f.jobId,f.runFile),notify:w.notify},e.post),O=e.deliverOf?.(f.jobId)!=="local";x.ok?(l.failures&&delete l.failures[f.jobId],h=S(x.duplicate?"duplicate":N?sde:"posted",{messageId:x.messageId,attempts:b+1,receipt:O?"pending":"none"}),i[x.duplicate?"duplicate":"posted"]++):tg(x.status)&&b+1<IH?(h={...k,code:Dc(`failed_${x.status||"network"}`),final:!1,attempts:b+1,at:new Date(t()).toISOString(),receipt:"none"},i.retrying++,r(`cron-forward: ${f.jobId}/${f.runFile} not posted yet (${x.code}); will retry`)):(h=S(tg(x.status)?"gave_up":Dc(`failed_${x.status}`),{attempts:b+1,receipt:O?"pending":"none"}),i.failed++,r(`cron-forward: ${f.jobId}/${f.runFile} failed (${x.code})`))}l.runs[g]=h,m=!0}if(h.final&&h.receipt==="pending"&&!e.dryRun){let y=await s({kind:ode,sha256:h.sha256,sentAt:new Date(f.mtimeMs).toISOString(),kynverMessageId:h.messageId,code:Dc(h.code)},e.post);y.ok?(h.receipt="sent",i.receipts++):(h.receiptAttempts++,(h.receiptAttempts>=ade||y.status>=400&&y.status<500&&y.status!==429&&y.status!==401)&&(h.receipt="none")),m=!0}}}return m&&!e.dryRun&&Ww(e.statePath,l,t()),i}var ode,sde,ide,IH,ade,lde,cde,fde,tg,Dc,UH=p(()=>{"use strict";Yi();Fw();yH();wH();CH();Hw();$w();ode="cron-forward",sde="raw_body",ide=3e3,IH=30,ade=20,lde=15e3,cde=10*6e4;fde=e=>Date.parse(e.at)+Math.min(lde*2**e.attempts,cde),tg=e=>e===0||e===429||e>=500,Dc=e=>e.toLowerCase().replace(/[^a-z0-9_.:-]/g,"_").slice(0,39)||"unknown"});import{existsSync as mde}from"node:fs";import{homedir as gde}from"node:os";function kde(e=process.env,t=gde()){let r=e[yde]?.trim().toLowerCase();return r==="0"||r==="false"||r==="off"?!1:r==="1"||r==="true"||mde(Kw(t))}async function bde(e,t){let r=LH();return FH({hermesHome:r,statePath:pH(),routes:()=>mH(),post:e,deliverOf:BH(r),...t.dryRun?{dryRun:!0}:{},...t.backfillMs?{backfillMs:t.backfillMs}:{},log:t.log})}async function WH(e){if(!kde())return;let t=e.sleep??(n=>new Promise(o=>setTimeout(o,n))),r=n=>console.error(JSON.stringify({event:"hermes_cron_forward",line:n}));for(;!e.shouldStop();){try{let n=cH();typeof n!="string"&&await bde(n,{log:r})}catch(n){r(`pass failed: ${n instanceof Error?n.message:String(n)}`)}await t(hde)}}var hde,yde,$H=p(()=>{"use strict";uH();$w();Hw();UH();hde=15e3,yde="KYNVER_HERMES_CRON_FORWARD"});import{createHash as vde}from"node:crypto";import{chmodSync as KH,existsSync as Rde,mkdirSync as wde,rmSync as HH}from"node:fs";import{createConnection as Sde,createServer as _de}from"node:net";import{homedir as xde,userInfo as Cde}from"node:os";import Ede from"node:path";function Ide(e,t=process.platform){return t==="win32"?`\\\\.\\pipe\\kynver-site-logins-${vde("sha256").update(`${Cde().username}:${xde()}`).digest("hex").slice(0,16)}`:Ede.join(e,"control.sock")}async function Pde(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 Y?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 Tde(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 jH(e){let t=Ide(e.rootDir);if(process.platform!=="win32"){wde(e.rootDir,{recursive:!0,mode:448});try{KH(e.rootDir,448)}catch{}if(Rde(t)){if(await Ode(t))return null;HH(t,{force:!0})}}let r=_de(n=>{let o="";n.setEncoding("utf8"),n.setTimeout(12e4,()=>n.destroy()),n.on("data",s=>{if(o+=s,o.length>Ade)return void n.destroy();let i=o.indexOf(`
|
|
569
569
|
`);if(i<0)return;let a=Tde(o.slice(0,i));o="";let l=c=>n.end(`${JSON.stringify(c)}
|
|
570
|
-
`);if(!a)return l({ok:!1,error:"malformed request"});Pde(e,a).then(l).catch(c=>l({ok:!1,error:c instanceof Y?c.message:"the request failed",code:c instanceof Y?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{KH(t,384)}catch{}return{path:t,close:()=>new Promise(n=>{r.close(()=>n()),process.platform!=="win32"&&HH(t,{force:!0})})}}function Ode(e){return new Promise(t=>{let r=Sde(e),n=o=>{r.destroy(),t(o)};r.once("connect",()=>n(!0)),r.once("error",()=>n(!1)),setTimeout(()=>n(!1),1e3).unref?.()})}var Ade,VH=p(()=>{"use strict";bn();Ade=16*1024});function Mde(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":qi(e.platform,e.arch)?null:"unsupported_platform"}async function GH(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 JH(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??(()=>Xo({env:t,platform:r,arch:n})),a=e.loadConfig??I;try{await GH(e.startDelayMs??Nde,e);for(let l=1;l<=Dde&&!e.shouldStop();l+=1){let c=Mde({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=tK(Qo());if(u>o()&&await GH(u-o(),e),e.shouldStop())return;s({event:"browser_autoprovision_start",attempt:l});try{let d=await(e.provision??$m)({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 Nde,Dde,YH=p(()=>{"use strict";$();qo();Ec();Km();Nde=6e4,Dde=5});function Vw(e){let t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Ude(e,t){let r=Vw(e),n=Vw(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 Wde(e,t,r={}){let n=r.manual??`${tg} 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 $de(){try{let e=Vm();return{manual:Jm(e,"latest"),selfUpdate:!e.unsupportedReason}}catch{return{manual:`${tg} then restart Kynver (or restart the computer)`,selfUpdate:!1}}}async function Kde(e={}){let t=e.installed??nt,r={installed:t,latest:null,outdated:!1,command:tg};if((e.env??process.env).KYNVER_DISABLE_UPDATE_CHECK==="1")return r;let o=new AbortController,s=setTimeout(()=>o.abort(),Bde);try{let a=await(e.fetch??fetch)(Lde,{signal:o.signal,headers:{accept:"application/json"}});if(!a.ok)return r;let l=await a.json(),c=typeof l?.version=="string"&&Vw(l.version)?l.version:null;return c?{installed:t,latest:c,outdated:Ude(t,c),command:tg}:r}catch{return r}finally{clearTimeout(s)}}function zH(e={}){let t=e.log??(s=>console.error(s)),r=null,n=async()=>{let s=await Kde(e);if(s.outdated&&s.latest&&s.latest!==r){r=s.latest;let i=(e.advice??$de)();t(JSON.stringify({event:"runtime_update_available",installed:s.installed,latest:s.latest,command:i.manual,selfUpdate:i.selfUpdate})),t(Wde(s.installed,s.latest,i))}return s};n().catch(()=>{});let o=setInterval(()=>{n().catch(()=>{})},e.intervalMs??Fde);return o.unref?.(),{stop:()=>clearInterval(o),checkNow:n}}var qH,tg,Lde,Bde,Fde,XH=p(()=>{"use strict";Rn();Aw();Gm();qH="@kynver-app/runtime",tg=`npm install -g ${qH}@latest`,Lde=`https://registry.npmjs.org/${qH}/latest`,Bde=5e3,Fde=360*6e4});var tj={};aS(tj,{adoptOrAcquireOwnerLease:()=>ZH,completeWorker:()=>mO,dispatchRun:()=>ki,resolveDaemonOwnerKind:()=>QH,runDaemon:()=>ej,runPipelineTick:()=>ff,sweepRun:()=>jp});async function Gw(e,t,r){let n=e;for(;n>0&&!t();){let o=Math.min(Gde,n),s=Date.now();await Vc(o);let i=Vh(o,Date.now()-s);if(i!==null){r?.(i);return}n-=o}}function QH(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 ZH(e,t,r,n=id){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 ej(e,t={}){let r=oy({hostCapability:t.hostCapability}),n=lt()?{loaded:0}:G_();n.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...n}));let o=String(e.run||"").trim();o||(console.error(Xh("--run")),process.exit(1));let s=String(e.agentOsId||I().agentOsId||"").trim();s||(console.error(Xh("--agent-os-id")),process.exit(1)),Es(s).ok||(console.error(ih(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)):Hde,c=!1,u=0,d=Ux(O=>{c||console.error(JSON.stringify({event:"daemon_stop_requested",reason:O,runId:o})),c=!0}),m=await ZH(s,QH(e,t),t.ownerLease);if(!m.ok){console.error(JSON.stringify({event:"daemon_start_blocked",reason:"owner_conflict",runId:o,agentOsId:s,holder:m.holder?{ownerKind:m.holder.ownerKind,pid:m.holder.pid,runtimeVersion:m.holder.runtimeVersion,acquiredAt:m.holder.acquiredAt}:null,remedy:m.remedy})),d(),process.exit(1);return}let f=m.lease;ex(f.metadata.ownerKind),VE({admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null,ownerKind:f.metadata.ownerKind});let g={kind:f.metadata.ownerKind,instanceId:f.metadata.instanceId,processStart:f.metadata.processStart,runtimeVersion:f.metadata.runtimeVersion};console.error(JSON.stringify({event:"daemon_owner_lease_acquired",agentOsId:s,ownerKind:f.metadata.ownerKind,instanceId:f.metadata.instanceId,quarantinedStaleMetadata:m.quarantinedMetadata!==null}));let h=UE(o);h.killed.length>0&&console.error(JSON.stringify({event:"daemon_orphaned_worker_descendants_killed",runId:o,orphans:h.killed.map(O=>({worker:O.workerName,workerPid:O.workerPid,pid:O.orphanPid,outcome:O.result.outcome}))}));let y=null,v=O=>{y=O};try{let O=Ox();(O.moved.length>0||O.stillInFile.length>0)&&console.error(JSON.stringify({event:"daemon_credentials_store",...O}))}catch(O){console.error(JSON.stringify({event:"daemon_credentials_store_error",error:O instanceof Error?O.message:String(O)}))}let k=wE();k.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:k.resolved?.defaultRepo??null,configPath:k.configPath}));let b=BE(I());b.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:o,agentOsId:s,errors:b.errors})),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:o,agentOsId:s,execute:a,intervalMs:l,boxKind:b.box.boxKind,workerCapSource:b.workerCapSource,maxConcurrentWorkers:b.maxConcurrentWorkers})),zH();let S=Os(),w=new hf;w.start();let _=new gf({agentOsId:s,init:{ownerKind:f.metadata.ownerKind,admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null}});w.setTickIsolation(_.mode),console.error(JSON.stringify({event:"daemon_tick_isolation",mode:_.mode,reason:_.reason}));let R=jH(rt()).catch(()=>null),P=Nw({shouldStop:()=>c}).catch(O=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:O instanceof Error?O.message:String(O)}))});WH({shouldStop:()=>c}).catch(()=>{}),JH({shouldStop:()=>c});let N=!1;for(;!c;)try{if(y!==null){let B=y;y=null;let E=f.isHeld();if(console.error(JSON.stringify({event:"daemon_resume_detected",agentOsId:s,gapMs:B,ownerLeaseHeld:E})),!E){console.error(JSON.stringify({event:"daemon_owner_lease_lost",agentOsId:s,runId:o})),process.exitCode=1,c=!0;break}}w.setPhase("heartbeat"),f.renew(),XC({agentOsId:s,runId:o,instructionBundleVersion:fo(),owner:g}),w.setPhase("runner_credential");let O=await Wu(e.secret?String(e.secret):void 0,s,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});if(!O.ok){N||(N=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:s,reason:O.reason,remedy:`run \`kynver runner credential --agent-os-id ${s}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),w.setPhase("idle"),await Gw(l,()=>c,v);continue}N&&(N=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:s}))),w.setPhase("instruction_bundle"),await DE({agentOsId:s,baseUrl:Ut(e.baseUrl?String(e.baseUrl):void 0),secret:O.secret}),w.setPhase(_.mode==="thread"?"pipeline_tick_thread":"pipeline_tick_inline");let M=await _.runTick({run:o,agentOsId:s,execute:a,...e,secret:typeof e.secret=="string"&&e.secret?e.secret:O.secret},w.report());w.setTickIsolation(M.isolation);let F=M.tick;w.setPhase("tick_log"),console.error(JSON.stringify({event:"daemon_tick",tickIsolation:M.isolation,...F})),w.setPhase("runtime_control");let V=fn(s),re=M.inFlightWorkers??mf(s)??0;if(Q_(V,re)){let B=Su({control:V,supervisor:f.metadata.ownerKind,inFlightWorkers:0,exiting:!0}),E=Ut(e.baseUrl?String(e.baseUrl):void 0),L=B&&E?await GC({baseUrl:E,agentOsId:s,secret:O.secret},B):!1;console.error(JSON.stringify({event:"daemon_runtime_stopped",agentOsId:s,runId:o,policyVersion:V?.policyVersion??null,requestedBy:V?.requestedByLabel??null,reported:L})),process.exitCode=wu,c=!0;break}if(S.tickEnabled){w.setPhase("cron_tick");let B=gd(o);if(B&&!B.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:B.holderBoxId}));else{let E=await uy({env:S,agentOsIdFilter:s});E.enabled&&(E.fired>0||E.errors>0||E.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...E}))}}F.idle?u++:u=0;let T=Math.floor(Ls("daemon.maxIdleStreak",Vde)),C=Math.floor(Ls("daemon.idleIntervalMs",jde)),j=u>=T?C:l;w.setPhase("idle"),await Gw(j,()=>c,v)}catch(O){console.error(JSON.stringify({event:"daemon_tick_error",error:O.message})),w.setPhase("idle"),await Gw(l,()=>c,v)}w.setPhase("stopping"),await P,await _.close(),w.stop(),await(await R)?.close().catch(()=>{}),rt().lock();let x=Wx(o);x.length>0&&console.error(JSON.stringify({event:"daemon_stop_worker_trees_killed",runId:o,workers:x.map(O=>({worker:O.workerName,pid:O.pid,outcome:O.result.outcome}))})),d(),f.release(),console.error(JSON.stringify({event:"daemon_stop",runId:o,agentOsId:s}))}var Hde,jde,Vde,Gde,Jw=p(()=>{"use strict";$();Qh();SE();ME();wn();FE();jh();Vu();ad();Mt();Gh();WE();fd();sy();dy();Fr();Or();py();U();hL();kv();kL();Dw();$H();Ts();VH();YH();XH();mn();Hh();yv();qd();Cb();gi();Hde=6e4,jde=5*6e4,Vde=10,Gde=250});var rj=p(()=>{"use strict";Q();us();_b();Oe();U()});var Nc,nj=p(()=>{"use strict";Nc=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 Jde,mkdirSync as Yde}from"node:fs";import qde from"node:path";function zde(e){let t=typeof e.repo=="string"?e.repo.trim():"";if(t)return t;let r=Ha();return r?r.repo:(Lt("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Xde(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 Qde(e){let t=Z(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=Z(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 Zde(e){let t=Z(e,["remote"]);if(t.status!==0||t.stdout.trim())return null;let r=Z(e,["symbolic-ref","--quiet","--short","HEAD"]);return(r.status===0?r.stdout.trim():"")||"main"}function epe(e,t){let r=I();try{return Xde({explicitBase:typeof t.base=="string"?t.base:void 0,envBaseRef:process.env.KYNVER_RUN_BASE_REF,configDefaultBase:r.defaultBase,verifyRef:n=>Z(e,["rev-parse","--verify","--quiet",`${n}^{commit}`]).status===0,resolveRemoteHeadRef:()=>Qde(e),resolveLocalOnlyBranch:()=>Zde(e),repoLabel:e})}catch(n){throw new Nc(n.message,{remedy:"Diagnose: run `kynver doctor runner-install`.",cause:n})}}function Yw(e){let t=VT(zde(e));vS(t);let r=e.id?Mk(String(e.id)):$c(String(e.name||"run")),n=G(r);Jde(n)&&tpe(`run already exists: ${r}`),Yde(n,{recursive:!0});let o=epe(t,e);o.note&&console.error(o.note);let s=o.base,i=pe(t,["rev-parse",s]).trim(),a=rr(),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}:{}};Se(qde.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 tpe(e){throw new Nc(e)}var qw=p(()=>{"use strict";xe();Q();rj();U();Ws();Sp();ro();$();nj()});function oj(e,t){return e.filter(n=>n.repo===t&&!en.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]??null}var sj=p(()=>{"use strict";xe();On()});var ij=p(()=>{"use strict";Fr();Ns();cy()});var rg=p(()=>{"use strict";Fr();Or()});var ng=p(()=>{"use strict"});var zw=p(()=>{"use strict"});var Xw=p(()=>{"use strict";ij();Fr();Ns();rg();Or();ng();zw()});var aj=p(()=>{"use strict"});var lj=p(()=>{"use strict";rg();ng()});var cj=p(()=>{"use strict";Or();Fr()});var uj=p(()=>{"use strict";$();bt();Mt();U();dy();aj();lj();Or();rg();cj();Ru();vs();Ns();Xw();ng();zw();Q()});var dj=p(()=>{"use strict";Xw();uj()});import{homedir as ape}from"node:os";import lpe from"node:path";var ZXe,e3e,pj=p(()=>{"use strict";ZXe=lpe.join(ape(),".kynver","logs","kynver.log"),e3e=10*6e4});var fj=p(()=>{"use strict";bg();Fn()});var mj=p(()=>{"use strict";fj()});var gj=p(()=>{"use strict";vs();Ru();$();Or();_u();Gg();Ca();Q()});function hj(e,t){return oj(e,t)?.id??null}var yj=p(()=>{"use strict";$();Nh();Jw();Qh();sy();ad();qw();Q();sj();Ws();dj();Kh();zg();Ws();Fn();pj();mj();gj()});var wj={};aS(wj,{prepareDesktopRuntime:()=>vpe,resolveDesktopRepository:()=>Rj});import{spawnSync as kj}from"node:child_process";import{randomBytes as cpe}from"node:crypto";import{existsSync as upe,mkdirSync as dpe,readFileSync as ppe,realpathSync as bj,statSync as fpe,writeFileSync as mpe}from"node:fs";import{homedir as gpe}from"node:os";import Zw from"node:path";function _e(e,t){return{ok:!1,code:e,message:t}}function hpe(){return Zw.join(gpe(),".kynver","desktop-binding.json")}function ype(e){if(!upe(e))return null;try{let t=JSON.parse(ppe(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 kpe(e,t){dpe(Zw.dirname(e),{recursive:!0}),mpe(e,`${JSON.stringify(t,null,2)}
|
|
571
|
-
`,{mode:384})}function vj(e,t){return e===401||e===403?_e("access_denied",`${t} was refused (${e})`):e===0?_e("network",`${t} could not reach Kynver`):_e("server_error",`${t} failed (${e})`)}async function Qw(e,t,r,n={}){try{let o=await Ce(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 bpe(e){return(e?.accessibleItems??[]).filter(t=>t.access?.isOwner===!0&&typeof t.agentOs?.id=="string").map(t=>(t.agentOs?.id).trim()).filter(Boolean)}function Rj(e,t="git"){let r=kj(t,["--version"],X({encoding:"utf8"}));if(r.error||r.status!==0)return _e("no_git","Git is not installed or not on PATH");let n;try{if(n=bj.native(Zw.resolve(e)),!fpe(n).isDirectory())return _e("not_a_repository","The selected path is not a folder")}catch{return _e("not_a_repository","The selected folder does not exist")}let o=kj(t,["rev-parse","--is-bare-repository","--show-toplevel"],X({cwd:n,encoding:"utf8"})),s=(o.stdout??"").trim().split(/\r?\n/);if(o.status!==0||s[0]!=="false"||!s[1])return _e("not_a_repository","The selected folder is not inside a Git working tree");try{return{ok:!0,repo:bj.native(s[1].trim())}}catch{return _e("not_a_repository","The Git working tree root could not be resolved")}}async function vpe(e,t={}){let r=t.fetchImpl??fetch,n=t.acquireOwnerLease??id,o=t.bindingPath??hpe(),s=[],i=Er(e.apiBaseUrl);if(!i)return _e("invalid_input","apiBaseUrl is required");let a=pa(i),l=new URL(a).origin;if(e.agentOsId!==void 0&&!Es(e.agentOsId).ok)return _e("invalid_input","agentOsId is not a valid workspace id");let c;try{c=ke()}catch(w){if(w instanceof oa)return _e("credentials_unavailable","This computer's credentials have not been provided");throw w}if(!c)return _e("credentials_unavailable","This computer is not paired");let u=await Qw(`${a}/api/users/me`,c,r);if(u.status!==200)return vj(u.status,"Account lookup");let d=typeof u.body?.id=="string"?u.body.id:"";if(!d)return _e("server_error","Account lookup returned no account id");if(e.expectedAccountId&&e.expectedAccountId!==d)return _e("account_mismatch","The paired credentials belong to a different account");let m=await Qw(`${a}/api/agent-os/provision`,c,r,{method:"POST"});!(m.status>=200&&m.status<300)&&m.status!==401&&m.status!==403&&s.push(`workspace self-provision returned ${m.status||"no response"}; continuing with existing access`);let g=await Qw(`${a}/api/agent-os`,c,r);if(g.status!==200)return vj(g.status,"Workspace lookup");let h=g.body,y;if(e.agentOsId){if(!bpe(h).includes(e.agentOsId))return _e("agent_os_not_owned","That workspace is not owned by the paired account");y=e.agentOsId}else{let w=Th(h);if(!w?.id)return _e("no_workspace","No workspace owned by this account was found");y=w.id}let v=Rj(e.repo,t.gitBinary);if(!v.ok)return v;let k=v.repo,b=await n({agentOsId:y,ownerKind:"desktop"});if(!b.ok)return{ok:!1,code:"owner_conflict",message:b.remedy,holder:b.holder?{ownerKind:b.holder.ownerKind,pid:b.holder.pid,runtimeVersion:b.holder.runtimeVersion,acquiredAt:b.holder.acquiredAt}:null};let S=b.lease;try{Ge({...I(),apiBaseUrl:a,agentOsId:y,defaultRepo:k});let w=$h(I());s.push(...w.warnings);let _=I().boxId?.trim()??"";if(!_)return S.release(),_e("local_state_error","Box identity could not be established");if(await Dh(vn()),!Ue(y))try{let M=await io(y,{baseUrl:a,apiKey:c});so(y,M)}catch(M){let F=M.message;if(CC(F)==="access_denied")return S.release(),_e("access_denied","This computer was refused a runner credential");s.push("runner credential mint did not succeed yet; the runtime retries automatically")}let R=ype(o),P=R!==null&&R.cloudOrigin===l&&R.accountId===d&&R.agentOsId===y&&R.repo===k,N="";if(P){let M=hj(Ee().filter(F=>F.id===R.runId),k);M&&(N=M)}if(!N){let M=`${$c("desktop")}-${cpe(3).toString("hex")}`;N=Yw({repo:k,name:"desktop",id:M}).runId}kpe(o,{version:1,cloudOrigin:l,accountId:d,agentOsId:y,repo:k,runId:N});let x=zu(k);x||s.push("the repository has no origin remote; nothing can run until it has one");let{runnerId:O}=$e({runId:N});return{ok:!0,prepared:{accountId:d,agentOsId:y,runId:N,repo:k,boxId:_,repoIdentity:x,runnerId:O},lease:S,warnings:s}}catch(w){return S.release(),_e("local_state_error",w.message)}}var Sj=p(()=>{"use strict";wt();Nh();Oh();$();Mt();Fr();Ns();ad();Xu();Q();Wr();Kh();yj();qw();U()});Mt();import{pathToFileURL as Rpe}from"node:url";var fS="credential.persist";function mS(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:fS,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:fS,kind:"runnerToken",agentOsId:a,value:l})},reseed:o}}Vu();Xu();bn();td();var mC=/^lg_[a-z0-9]{6,20}$/,dJ=/^cr_[0-9a-f]{12}$/,pJ=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),po=(e,t,r=1)=>typeof e=="string"&&e.length>=r&&e.length<=t&&!e.includes("\0");function Ps(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function gC(e){let t=["v","type","id","agentOsId","op"];switch(e.op){case"key":return Ps(e,[...t,"key"])??(po(e.key,64,40)&&/^[A-Za-z0-9+/]{43}=$/.test(e.key)?{op:"key",key:e.key}:"invalid key");case"list":case"wipe":return Ps(e,t)??{op:e.op};case"remove":return Ps(e,[...t,"handle"])??(typeof e.handle=="string"&&mC.test(e.handle)?{op:"remove",handle:e.handle}:"invalid handle");case"code":{let r=Ps(e,[...t,"requestId","code"]);return r||(e.requestId!==void 0&&!(typeof e.requestId=="string"&&dJ.test(e.requestId))?"invalid requestId":po(e.code,16)?{op:"code",code:e.code,...e.requestId?{requestId:e.requestId}:{}}:"invalid code")}case"add":{let r=Ps(e,[...t,"login","replaceHandle"]);if(r)return r;let n=e.login;return!pJ(n)||Ps(n,["origin","label","username","password","totp"])||!po(n.origin,2048)||!po(n.label,Ye.maxLabel)||!po(n.username,Ye.maxUsername)||!po(n.password,Ye.maxPassword)||n.totp!==void 0&&!po(n.totp,Ye.maxTotp,0)?"invalid login":e.replaceHandle!==void 0&&!(typeof e.replaceHandle=="string"&&mC.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 hC(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 Y)||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 Y("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)}}}Ts();bn();var wpe=1,og=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ra=/^[A-Za-z0-9_-]{1,64}$/,Spe=/^[a-z0-9][a-z0-9._-]{0,127}$/i,_j=4096,_pe=4096,xpe=16;function eS(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Dc(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function Mc(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!e.includes("\0")}function Cpe(e){if(!Mc(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 Epe(e){if(!eS(e))return{ok:!1,message:"message must be an object"};if(e.v!==wpe)return{ok:!1,message:"unsupported protocol version"};let t=r=>({ok:!1,message:r});switch(e.type){case"credentials":{let r=Dc(e,["v","type","apiKey","runnerTokens"]);if(r)return t(r);if(e.apiKey!==void 0&&!Mc(e.apiKey,_j))return t("invalid apiKey");let n;if(e.runnerTokens!==void 0){if(!eS(e.runnerTokens))return t("invalid runnerTokens");let o=Object.entries(e.runnerTokens);if(o.length>xpe)return t("too many runnerTokens");n={};for(let[s,i]of o){if(!og.test(s)||!Mc(i,_j))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=Dc(e,["v","type","id","apiBaseUrl","repo","agentOsId","expectedAccountId"]);return r?t(r):typeof e.id!="string"||!ra.test(e.id)?t("invalid id"):Cpe(e.apiBaseUrl)?Mc(e.repo,_pe)?e.agentOsId!==void 0&&(typeof e.agentOsId!="string"||!og.test(e.agentOsId))?t("invalid agentOsId"):e.expectedAccountId!==void 0&&!Mc(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=Dc(e,["v","type","id","policy"]);if(r)return t(r);if(typeof e.id!="string"||!ra.test(e.id))return t("invalid id");let n=Jx(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=Dc(e,["v","type","id","runId","agentOsId"]);return r?t(r):typeof e.id!="string"||!ra.test(e.id)?t("invalid id"):typeof e.runId!="string"||!Spe.test(e.runId)?t("invalid runId"):typeof e.agentOsId!="string"||!og.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"||!ra.test(e.id))return t("invalid id");if(typeof e.agentOsId!="string"||!og.test(e.agentOsId))return t("invalid agentOsId");let r=gC(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=Dc(e,["v","type","id"]);return r?t(r):typeof e.id!="string"||!ra.test(e.id)?t("invalid id"):{ok:!0,value:{v:1,type:e.type,id:e.id}}}default:return t("unknown message type")}}function Ape(e){return eS(e)&&typeof e.id=="string"&&ra.test(e.id)?e.id:null}function Ipe(e){let t=dS()?"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(uh(l))return;let c=Epe(l);if(!c.ok){s(Ape(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=mS(d,m=>e.send(m)),uS(r)),t==="awaiting_credentials"&&(t="ready"),e.send({v:1,type:"event",name:"credentials_accepted",state:t});return}case"status":{let d=hh();i(u.id,{state:t,prepared:n,policyRevision:d?.revision??null});return}case"policy":{if(!zx(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:m,id:f,...g}=u,h;try{h=await e.prepare(g)}catch(y){return t="ready",s(f,"local_state_error",y.message)}if(!h.ok){t="ready",e.send({v:1,type:"reply",id:f,ok:!1,error:{code:h.code,message:h.message}});return}n=h.prepared,o=h.lease,Xx({accountId:n.accountId,agentOsId:n.agentOsId}),t="prepared",i(f,{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=hh();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 m=e.daemonExitCode?.()??0;e.send({v:1,type:"event",name:"daemon_exited",state:"stopping",exitCode:m}),e.exit(m)}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:m,id:f,agentOsId:g,...h}=u;try{i(f,await hC(rt(),g,h))}catch(y){let v=y instanceof Y?y.code:"failed";s(f,`site_login_${v}`,y instanceof Y?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 Ppe(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}cS();for(let s of lS)delete e.env[s];let[{prepareDesktopRuntime:t},{runDaemon:r}]=await Promise.all([Promise.resolve().then(()=>(Sj(),wj)),Promise.resolve().then(()=>(Jw(),tj))]),n=s=>{if(!e.connected||typeof e.send!="function")throw new Error("desktop IPC channel is closed");e.send(s)},o=Ipe({send:n,prepare:s=>t(s),runDaemon:r,requestDaemonStop:()=>{e.emit("message",{type:ju},void 0)},exit:s=>e.exit(s),daemonExitCode:()=>typeof e.exitCode=="number"?e.exitCode:0});Qx(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{}}),rt().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:ju},void 0);return}e.exit(0)}),n({v:1,type:"event",name:"ready",state:o.state})}function Tpe(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Rpe(e).href}catch{return!1}}Tpe()&&Ppe();export{wpe as DESKTOP_ENTRY_PROTOCOL_VERSION,Ipe as createDesktopEntryController,Epe as parseDesktopEntryMessage,Ppe as startDesktopEntry};
|
|
570
|
+
`);if(!a)return l({ok:!1,error:"malformed request"});Pde(e,a).then(l).catch(c=>l({ok:!1,error:c instanceof Y?c.message:"the request failed",code:c instanceof Y?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{KH(t,384)}catch{}return{path:t,close:()=>new Promise(n=>{r.close(()=>n()),process.platform!=="win32"&&HH(t,{force:!0})})}}function Ode(e){return new Promise(t=>{let r=Sde(e),n=o=>{r.destroy(),t(o)};r.once("connect",()=>n(!0)),r.once("error",()=>n(!1)),setTimeout(()=>n(!1),1e3).unref?.()})}var Ade,VH=p(()=>{"use strict";vn();Ade=16*1024});function Mde(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":Xi(e.platform,e.arch)?null:"unsupported_platform"}async function GH(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 JH(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??(()=>Qo({env:t,platform:r,arch:n})),a=e.loadConfig??I;try{await GH(e.startDelayMs??Nde,e);for(let l=1;l<=Dde&&!e.shouldStop();l+=1){let c=Mde({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=tK(Zo());if(u>o()&&await GH(u-o(),e),e.shouldStop())return;s({event:"browser_autoprovision_start",attempt:l});try{let d=await(e.provision??Km)({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 Nde,Dde,YH=p(()=>{"use strict";$();zo();Ic();Hm();Nde=6e4,Dde=5});function Vw(e){let t=/^v?(\d+)\.(\d+)\.(\d+)/.exec(e.trim());return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function Ude(e,t){let r=Vw(e),n=Vw(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 Wde(e,t,r={}){let n=r.manual??`${rg} 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 $de(){try{let e=Gm();return{manual:Ym(e,"latest"),selfUpdate:!e.unsupportedReason}}catch{return{manual:`${rg} then restart Kynver (or restart the computer)`,selfUpdate:!1}}}async function Kde(e={}){let t=e.installed??nt,r={installed:t,latest:null,outdated:!1,command:rg};if((e.env??process.env).KYNVER_DISABLE_UPDATE_CHECK==="1")return r;let o=new AbortController,s=setTimeout(()=>o.abort(),Bde);try{let a=await(e.fetch??fetch)(Lde,{signal:o.signal,headers:{accept:"application/json"}});if(!a.ok)return r;let l=await a.json(),c=typeof l?.version=="string"&&Vw(l.version)?l.version:null;return c?{installed:t,latest:c,outdated:Ude(t,c),command:rg}:r}catch{return r}finally{clearTimeout(s)}}function zH(e={}){let t=e.log??(s=>console.error(s)),r=null,n=async()=>{let s=await Kde(e);if(s.outdated&&s.latest&&s.latest!==r){r=s.latest;let i=(e.advice??$de)();t(JSON.stringify({event:"runtime_update_available",installed:s.installed,latest:s.latest,command:i.manual,selfUpdate:i.selfUpdate})),t(Wde(s.installed,s.latest,i))}return s};n().catch(()=>{});let o=setInterval(()=>{n().catch(()=>{})},e.intervalMs??Fde);return o.unref?.(),{stop:()=>clearInterval(o),checkNow:n}}var qH,rg,Lde,Bde,Fde,XH=p(()=>{"use strict";wn();Aw();Jm();qH="@kynver-app/runtime",rg=`npm install -g ${qH}@latest`,Lde=`https://registry.npmjs.org/${qH}/latest`,Bde=5e3,Fde=360*6e4});var tj={};aS(tj,{adoptOrAcquireOwnerLease:()=>ZH,completeWorker:()=>mO,dispatchRun:()=>vi,resolveDaemonOwnerKind:()=>QH,runDaemon:()=>ej,runPipelineTick:()=>mf,sweepRun:()=>Vp});async function Gw(e,t,r){let n=e;for(;n>0&&!t();){let o=Math.min(Gde,n),s=Date.now();await Jc(o);let i=Gh(o,Date.now()-s);if(i!==null){r?.(i);return}n-=o}}function QH(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 ZH(e,t,r,n=ld){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 ej(e,t={}){let r=sy({hostCapability:t.hostCapability}),n=lt()?{loaded:0}:G_();n.loaded>0&&console.error(JSON.stringify({event:"daemon_env_file_loaded",...n}));let o=String(e.run||"").trim();o||(console.error(Qh("--run")),process.exit(1));let s=String(e.agentOsId||I().agentOsId||"").trim();s||(console.error(Qh("--agent-os-id")),process.exit(1)),As(s).ok||(console.error(ah(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)):Hde,c=!1,u=0,d=Ux(O=>{c||console.error(JSON.stringify({event:"daemon_stop_requested",reason:O,runId:o})),c=!0}),m=await ZH(s,QH(e,t),t.ownerLease);if(!m.ok){console.error(JSON.stringify({event:"daemon_start_blocked",reason:"owner_conflict",runId:o,agentOsId:s,holder:m.holder?{ownerKind:m.holder.ownerKind,pid:m.holder.pid,runtimeVersion:m.holder.runtimeVersion,acquiredAt:m.holder.acquiredAt}:null,remedy:m.remedy})),d(),process.exit(1);return}let f=m.lease;ex(f.metadata.ownerKind),VE({admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null,ownerKind:f.metadata.ownerKind});let g={kind:f.metadata.ownerKind,instanceId:f.metadata.instanceId,processStart:f.metadata.processStart,runtimeVersion:f.metadata.runtimeVersion};console.error(JSON.stringify({event:"daemon_owner_lease_acquired",agentOsId:s,ownerKind:f.metadata.ownerKind,instanceId:f.metadata.instanceId,quarantinedStaleMetadata:m.quarantinedMetadata!==null}));let h=UE(o);h.killed.length>0&&console.error(JSON.stringify({event:"daemon_orphaned_worker_descendants_killed",runId:o,orphans:h.killed.map(O=>({worker:O.workerName,workerPid:O.workerPid,pid:O.orphanPid,outcome:O.result.outcome}))}));let y=null,v=O=>{y=O};try{let O=Ox();(O.moved.length>0||O.stillInFile.length>0)&&console.error(JSON.stringify({event:"daemon_credentials_store",...O}))}catch(O){console.error(JSON.stringify({event:"daemon_credentials_store_error",error:O instanceof Error?O.message:String(O)}))}let k=wE();k.remediated&&console.error(JSON.stringify({event:"daemon_default_repo_remediated",defaultRepo:k.resolved?.defaultRepo??null,configPath:k.configPath}));let b=BE(I());b.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:o,agentOsId:s,errors:b.errors})),console.error("Diagnose: run `kynver doctor runner-install`. Still stuck? `kynver report-bug --json` (draft only \u2014 create a GitHub issue to actually send it)."),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:o,agentOsId:s,execute:a,intervalMs:l,boxKind:b.box.boxKind,workerCapSource:b.workerCapSource,maxConcurrentWorkers:b.maxConcurrentWorkers})),zH();let S=Ns(),w=new yf;w.start();let _=new hf({agentOsId:s,init:{ownerKind:f.metadata.ownerKind,admission:r.allowed?{basis:r.basis,hostCapability:r.hostCapability}:null}});w.setTickIsolation(_.mode),console.error(JSON.stringify({event:"daemon_tick_isolation",mode:_.mode,reason:_.reason}));let R=jH(rt()).catch(()=>null),P=Nw({shouldStop:()=>c}).catch(O=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:O instanceof Error?O.message:String(O)}))});WH({shouldStop:()=>c}).catch(()=>{}),JH({shouldStop:()=>c});let N=!1;for(;!c;)try{if(y!==null){let B=y;y=null;let E=f.isHeld();if(console.error(JSON.stringify({event:"daemon_resume_detected",agentOsId:s,gapMs:B,ownerLeaseHeld:E})),!E){console.error(JSON.stringify({event:"daemon_owner_lease_lost",agentOsId:s,runId:o})),process.exitCode=1,c=!0;break}}w.setPhase("heartbeat"),f.renew(),XC({agentOsId:s,runId:o,instructionBundleVersion:mo(),owner:g}),w.setPhase("runner_credential");let O=await Ku(e.secret?String(e.secret):void 0,s,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});if(!O.ok){N||(N=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:s,reason:O.reason,remedy:`run \`kynver runner credential --agent-os-id ${s}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),w.setPhase("idle"),await Gw(l,()=>c,v);continue}N&&(N=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:s}))),w.setPhase("instruction_bundle"),await DE({agentOsId:s,baseUrl:Ut(e.baseUrl?String(e.baseUrl):void 0),secret:O.secret}),w.setPhase(_.mode==="thread"?"pipeline_tick_thread":"pipeline_tick_inline");let M=await _.runTick({run:o,agentOsId:s,execute:a,...e,secret:typeof e.secret=="string"&&e.secret?e.secret:O.secret},w.report());w.setTickIsolation(M.isolation);let F=M.tick;w.setPhase("tick_log"),console.error(JSON.stringify({event:"daemon_tick",tickIsolation:M.isolation,...F})),w.setPhase("runtime_control");let V=mn(s),re=M.inFlightWorkers??gf(s)??0;if(Q_(V,re)){let B=xu({control:V,supervisor:f.metadata.ownerKind,inFlightWorkers:0,exiting:!0}),E=Ut(e.baseUrl?String(e.baseUrl):void 0),L=B&&E?await GC({baseUrl:E,agentOsId:s,secret:O.secret},B):!1;console.error(JSON.stringify({event:"daemon_runtime_stopped",agentOsId:s,runId:o,policyVersion:V?.policyVersion??null,requestedBy:V?.requestedByLabel??null,reported:L})),process.exitCode=_u,c=!0;break}if(S.tickEnabled){w.setPhase("cron_tick");let B=yd(o);if(B&&!B.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:B.holderBoxId}));else{let E=await dy({env:S,agentOsIdFilter:s});E.enabled&&(E.fired>0||E.errors>0||E.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...E}))}}F.idle?u++:u=0;let T=Math.floor(Bs("daemon.maxIdleStreak",Vde)),C=Math.floor(Bs("daemon.idleIntervalMs",jde)),j=u>=T?C:l;w.setPhase("idle"),await Gw(j,()=>c,v)}catch(O){console.error(JSON.stringify({event:"daemon_tick_error",error:O.message})),w.setPhase("idle"),await Gw(l,()=>c,v)}w.setPhase("stopping"),await P,await _.close(),w.stop(),await(await R)?.close().catch(()=>{}),rt().lock();let x=Wx(o);x.length>0&&console.error(JSON.stringify({event:"daemon_stop_worker_trees_killed",runId:o,workers:x.map(O=>({worker:O.workerName,pid:O.pid,outcome:O.result.outcome}))})),d(),f.release(),console.error(JSON.stringify({event:"daemon_stop",runId:o,agentOsId:s}))}var Hde,jde,Vde,Gde,Jw=p(()=>{"use strict";$();Zh();SE();ME();Sn();FE();Vh();Ju();cd();Mt();Jh();WE();gd();iy();py();Ur();Nr();fy();U();hL();kv();kL();Dw();$H();Os();VH();YH();XH();gn();jh();yv();zd();Cb();yi();Hde=6e4,jde=5*6e4,Vde=10,Gde=250});var rj=p(()=>{"use strict";Q();ds();_b();Oe();U()});var Mc,nj=p(()=>{"use strict";Mc=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 Jde,mkdirSync as Yde}from"node:fs";import qde from"node:path";function zde(e){let t=typeof e.repo=="string"?e.repo.trim():"";if(t)return t;let r=Va();return r?r.repo:(Lt("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Xde(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 Qde(e){let t=Z(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=Z(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 Zde(e){let t=Z(e,["remote"]);if(t.status!==0||t.stdout.trim())return null;let r=Z(e,["symbolic-ref","--quiet","--short","HEAD"]);return(r.status===0?r.stdout.trim():"")||"main"}function epe(e,t){let r=I();try{return Xde({explicitBase:typeof t.base=="string"?t.base:void 0,envBaseRef:process.env.KYNVER_RUN_BASE_REF,configDefaultBase:r.defaultBase,verifyRef:n=>Z(e,["rev-parse","--verify","--quiet",`${n}^{commit}`]).status===0,resolveRemoteHeadRef:()=>Qde(e),resolveLocalOnlyBranch:()=>Zde(e),repoLabel:e})}catch(n){throw new Mc(n.message,{remedy:"Diagnose: run `kynver doctor runner-install`.",cause:n})}}function Yw(e){let t=VT(zde(e));vS(t);let r=e.id?Mk(String(e.id)):Hc(String(e.name||"run")),n=G(r);Jde(n)&&tpe(`run already exists: ${r}`),Yde(n,{recursive:!0});let o=epe(t,e);o.note&&console.error(o.note);let s=o.base,i=pe(t,["rev-parse",s]).trim(),a=rr(),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}:{}};Se(qde.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 tpe(e){throw new Mc(e)}var qw=p(()=>{"use strict";xe();Q();rj();U();$s();_p();no();$();nj()});function oj(e,t){return e.filter(n=>n.repo===t&&!tn.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]??null}var sj=p(()=>{"use strict";xe();Nn()});var ij=p(()=>{"use strict";Ur();Ds();uy()});var ng=p(()=>{"use strict";Ur();Nr()});var og=p(()=>{"use strict"});var zw=p(()=>{"use strict"});var Xw=p(()=>{"use strict";ij();Ur();Ds();ng();Nr();og();zw()});var aj=p(()=>{"use strict"});var lj=p(()=>{"use strict";ng();og()});var cj=p(()=>{"use strict";Nr();Ur()});var uj=p(()=>{"use strict";$();bt();Mt();U();py();aj();lj();Nr();ng();cj();Su();Rs();Ds();Xw();og();zw();Q()});var dj=p(()=>{"use strict";Xw();uj()});import{homedir as ape}from"node:os";import lpe from"node:path";var r3e,n3e,pj=p(()=>{"use strict";r3e=lpe.join(ape(),".kynver","logs","kynver.log"),n3e=10*6e4});var fj=p(()=>{"use strict";vg();Un()});var mj=p(()=>{"use strict";fj()});var gj=p(()=>{"use strict";Rs();Su();$();Nr();Cu();Jg();Aa();Q()});function hj(e,t){return oj(e,t)?.id??null}var yj=p(()=>{"use strict";$();Dh();Jw();Zh();iy();cd();qw();Q();sj();$s();dj();Hh();Xg();$s();Un();pj();mj();gj()});var wj={};aS(wj,{prepareDesktopRuntime:()=>vpe,resolveDesktopRepository:()=>Rj});import{spawnSync as kj}from"node:child_process";import{randomBytes as cpe}from"node:crypto";import{existsSync as upe,mkdirSync as dpe,readFileSync as ppe,realpathSync as bj,statSync as fpe,writeFileSync as mpe}from"node:fs";import{homedir as gpe}from"node:os";import Zw from"node:path";function _e(e,t){return{ok:!1,code:e,message:t}}function hpe(){return Zw.join(gpe(),".kynver","desktop-binding.json")}function ype(e){if(!upe(e))return null;try{let t=JSON.parse(ppe(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 kpe(e,t){dpe(Zw.dirname(e),{recursive:!0}),mpe(e,`${JSON.stringify(t,null,2)}
|
|
571
|
+
`,{mode:384})}function vj(e,t){return e===401||e===403?_e("access_denied",`${t} was refused (${e})`):e===0?_e("network",`${t} could not reach Kynver`):_e("server_error",`${t} failed (${e})`)}async function Qw(e,t,r,n={}){try{let o=await Ce(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 bpe(e){return(e?.accessibleItems??[]).filter(t=>t.access?.isOwner===!0&&typeof t.agentOs?.id=="string").map(t=>(t.agentOs?.id).trim()).filter(Boolean)}function Rj(e,t="git"){let r=kj(t,["--version"],X({encoding:"utf8"}));if(r.error||r.status!==0)return _e("no_git","Git is not installed or not on PATH");let n;try{if(n=bj.native(Zw.resolve(e)),!fpe(n).isDirectory())return _e("not_a_repository","The selected path is not a folder")}catch{return _e("not_a_repository","The selected folder does not exist")}let o=kj(t,["rev-parse","--is-bare-repository","--show-toplevel"],X({cwd:n,encoding:"utf8"})),s=(o.stdout??"").trim().split(/\r?\n/);if(o.status!==0||s[0]!=="false"||!s[1])return _e("not_a_repository","The selected folder is not inside a Git working tree");try{return{ok:!0,repo:bj.native(s[1].trim())}}catch{return _e("not_a_repository","The Git working tree root could not be resolved")}}async function vpe(e,t={}){let r=t.fetchImpl??fetch,n=t.acquireOwnerLease??ld,o=t.bindingPath??hpe(),s=[],i=Ar(e.apiBaseUrl);if(!i)return _e("invalid_input","apiBaseUrl is required");let a=ma(i),l=new URL(a).origin;if(e.agentOsId!==void 0&&!As(e.agentOsId).ok)return _e("invalid_input","agentOsId is not a valid workspace id");let c;try{c=ke()}catch(w){if(w instanceof ia)return _e("credentials_unavailable","This computer's credentials have not been provided");throw w}if(!c)return _e("credentials_unavailable","This computer is not paired");let u=await Qw(`${a}/api/users/me`,c,r);if(u.status!==200)return vj(u.status,"Account lookup");let d=typeof u.body?.id=="string"?u.body.id:"";if(!d)return _e("server_error","Account lookup returned no account id");if(e.expectedAccountId&&e.expectedAccountId!==d)return _e("account_mismatch","The paired credentials belong to a different account");let m=await Qw(`${a}/api/agent-os/provision`,c,r,{method:"POST"});!(m.status>=200&&m.status<300)&&m.status!==401&&m.status!==403&&s.push(`workspace self-provision returned ${m.status||"no response"}; continuing with existing access`);let g=await Qw(`${a}/api/agent-os`,c,r);if(g.status!==200)return vj(g.status,"Workspace lookup");let h=g.body,y;if(e.agentOsId){if(!bpe(h).includes(e.agentOsId))return _e("agent_os_not_owned","That workspace is not owned by the paired account");y=e.agentOsId}else{let w=Oh(h);if(!w?.id)return _e("no_workspace","No workspace owned by this account was found");y=w.id}let v=Rj(e.repo,t.gitBinary);if(!v.ok)return v;let k=v.repo,b=await n({agentOsId:y,ownerKind:"desktop"});if(!b.ok)return{ok:!1,code:"owner_conflict",message:b.remedy,holder:b.holder?{ownerKind:b.holder.ownerKind,pid:b.holder.pid,runtimeVersion:b.holder.runtimeVersion,acquiredAt:b.holder.acquiredAt}:null};let S=b.lease;try{Ge({...I(),apiBaseUrl:a,agentOsId:y,defaultRepo:k});let w=Kh(I());s.push(...w.warnings);let _=I().boxId?.trim()??"";if(!_)return S.release(),_e("local_state_error","Box identity could not be established");if(await Mh(Rn()),!Ue(y))try{let M=await ao(y,{baseUrl:a,apiKey:c});io(y,M)}catch(M){let F=M.message;if(CC(F)==="access_denied")return S.release(),_e("access_denied","This computer was refused a runner credential");s.push("runner credential mint did not succeed yet; the runtime retries automatically")}let R=ype(o),P=R!==null&&R.cloudOrigin===l&&R.accountId===d&&R.agentOsId===y&&R.repo===k,N="";if(P){let M=hj(Ee().filter(F=>F.id===R.runId),k);M&&(N=M)}if(!N){let M=`${Hc("desktop")}-${cpe(3).toString("hex")}`;N=Yw({repo:k,name:"desktop",id:M}).runId}kpe(o,{version:1,cloudOrigin:l,accountId:d,agentOsId:y,repo:k,runId:N});let x=Qu(k);x||s.push("the repository has no origin remote; nothing can run until it has one");let{runnerId:O}=$e({runId:N});return{ok:!0,prepared:{accountId:d,agentOsId:y,runId:N,repo:k,boxId:_,repoIdentity:x,runnerId:O},lease:S,warnings:s}}catch(w){return S.release(),_e("local_state_error",w.message)}}var Sj=p(()=>{"use strict";wt();Dh();Nh();$();Mt();Ur();Ds();cd();Zu();Q();$r();Hh();yj();qw();U()});Mt();import{pathToFileURL as Rpe}from"node:url";var fS="credential.persist";function mS(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:fS,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:fS,kind:"runnerToken",agentOsId:a,value:l})},reseed:o}}Ju();Zu();vn();nd();var mC=/^lg_[a-z0-9]{6,20}$/,dJ=/^cr_[0-9a-f]{12}$/,pJ=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),fo=(e,t,r=1)=>typeof e=="string"&&e.length>=r&&e.length<=t&&!e.includes("\0");function Ts(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function gC(e){let t=["v","type","id","agentOsId","op"];switch(e.op){case"key":return Ts(e,[...t,"key"])??(fo(e.key,64,40)&&/^[A-Za-z0-9+/]{43}=$/.test(e.key)?{op:"key",key:e.key}:"invalid key");case"list":case"wipe":return Ts(e,t)??{op:e.op};case"remove":return Ts(e,[...t,"handle"])??(typeof e.handle=="string"&&mC.test(e.handle)?{op:"remove",handle:e.handle}:"invalid handle");case"code":{let r=Ts(e,[...t,"requestId","code"]);return r||(e.requestId!==void 0&&!(typeof e.requestId=="string"&&dJ.test(e.requestId))?"invalid requestId":fo(e.code,16)?{op:"code",code:e.code,...e.requestId?{requestId:e.requestId}:{}}:"invalid code")}case"add":{let r=Ts(e,[...t,"login","replaceHandle"]);if(r)return r;let n=e.login;return!pJ(n)||Ts(n,["origin","label","username","password","totp"])||!fo(n.origin,2048)||!fo(n.label,Ye.maxLabel)||!fo(n.username,Ye.maxUsername)||!fo(n.password,Ye.maxPassword)||n.totp!==void 0&&!fo(n.totp,Ye.maxTotp,0)?"invalid login":e.replaceHandle!==void 0&&!(typeof e.replaceHandle=="string"&&mC.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 hC(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 Y)||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 Y("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)}}}Os();vn();var wpe=1,sg=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,oa=/^[A-Za-z0-9_-]{1,64}$/,Spe=/^[a-z0-9][a-z0-9._-]{0,127}$/i,_j=4096,_pe=4096,xpe=16;function eS(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Lc(e,t){for(let r of Object.keys(e))if(!t.includes(r))return`unexpected field: ${r}`;return null}function Bc(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!e.includes("\0")}function Cpe(e){if(!Bc(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 Epe(e){if(!eS(e))return{ok:!1,message:"message must be an object"};if(e.v!==wpe)return{ok:!1,message:"unsupported protocol version"};let t=r=>({ok:!1,message:r});switch(e.type){case"credentials":{let r=Lc(e,["v","type","apiKey","runnerTokens"]);if(r)return t(r);if(e.apiKey!==void 0&&!Bc(e.apiKey,_j))return t("invalid apiKey");let n;if(e.runnerTokens!==void 0){if(!eS(e.runnerTokens))return t("invalid runnerTokens");let o=Object.entries(e.runnerTokens);if(o.length>xpe)return t("too many runnerTokens");n={};for(let[s,i]of o){if(!sg.test(s)||!Bc(i,_j))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=Lc(e,["v","type","id","apiBaseUrl","repo","agentOsId","expectedAccountId"]);return r?t(r):typeof e.id!="string"||!oa.test(e.id)?t("invalid id"):Cpe(e.apiBaseUrl)?Bc(e.repo,_pe)?e.agentOsId!==void 0&&(typeof e.agentOsId!="string"||!sg.test(e.agentOsId))?t("invalid agentOsId"):e.expectedAccountId!==void 0&&!Bc(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=Lc(e,["v","type","id","policy"]);if(r)return t(r);if(typeof e.id!="string"||!oa.test(e.id))return t("invalid id");let n=Jx(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=Lc(e,["v","type","id","runId","agentOsId"]);return r?t(r):typeof e.id!="string"||!oa.test(e.id)?t("invalid id"):typeof e.runId!="string"||!Spe.test(e.runId)?t("invalid runId"):typeof e.agentOsId!="string"||!sg.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"||!oa.test(e.id))return t("invalid id");if(typeof e.agentOsId!="string"||!sg.test(e.agentOsId))return t("invalid agentOsId");let r=gC(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=Lc(e,["v","type","id"]);return r?t(r):typeof e.id!="string"||!oa.test(e.id)?t("invalid id"):{ok:!0,value:{v:1,type:e.type,id:e.id}}}default:return t("unknown message type")}}function Ape(e){return eS(e)&&typeof e.id=="string"&&oa.test(e.id)?e.id:null}function Ipe(e){let t=dS()?"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(dh(l))return;let c=Epe(l);if(!c.ok){s(Ape(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=mS(d,m=>e.send(m)),uS(r)),t==="awaiting_credentials"&&(t="ready"),e.send({v:1,type:"event",name:"credentials_accepted",state:t});return}case"status":{let d=yh();i(u.id,{state:t,prepared:n,policyRevision:d?.revision??null});return}case"policy":{if(!zx(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:m,id:f,...g}=u,h;try{h=await e.prepare(g)}catch(y){return t="ready",s(f,"local_state_error",y.message)}if(!h.ok){t="ready",e.send({v:1,type:"reply",id:f,ok:!1,error:{code:h.code,message:h.message}});return}n=h.prepared,o=h.lease,Xx({accountId:n.accountId,agentOsId:n.agentOsId}),t="prepared",i(f,{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=yh();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 m=e.daemonExitCode?.()??0;e.send({v:1,type:"event",name:"daemon_exited",state:"stopping",exitCode:m}),e.exit(m)}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:m,id:f,agentOsId:g,...h}=u;try{i(f,await hC(rt(),g,h))}catch(y){let v=y instanceof Y?y.code:"failed";s(f,`site_login_${v}`,y instanceof Y?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 Ppe(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}cS();for(let s of lS)delete e.env[s];let[{prepareDesktopRuntime:t},{runDaemon:r}]=await Promise.all([Promise.resolve().then(()=>(Sj(),wj)),Promise.resolve().then(()=>(Jw(),tj))]),n=s=>{if(!e.connected||typeof e.send!="function")throw new Error("desktop IPC channel is closed");e.send(s)},o=Ipe({send:n,prepare:s=>t(s),runDaemon:r,requestDaemonStop:()=>{e.emit("message",{type:Gu},void 0)},exit:s=>e.exit(s),daemonExitCode:()=>typeof e.exitCode=="number"?e.exitCode:0});Qx(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{}}),rt().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:Gu},void 0);return}e.exit(0)}),n({v:1,type:"event",name:"ready",state:o.state})}function Tpe(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Rpe(e).href}catch{return!1}}Tpe()&&Ppe();export{wpe as DESKTOP_ENTRY_PROTOCOL_VERSION,Ipe as createDesktopEntryController,Epe as parseDesktopEntryMessage,Ppe as startDesktopEntry};
|