@kynver-app/runtime 0.2.100 → 0.2.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cli.js +122 -120
- package/dist/desktop-entry.js +86 -84
- package/dist/index.js +145 -143
- package/dist/server/cleanup.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +1 -1
- package/dist/server/worker-policy.js +1 -1
- package/package.json +1 -1
package/dist/server/cleanup.js
CHANGED
|
@@ -5,7 +5,7 @@ var g=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=
|
|
|
5
5
|
`).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=tn("git",r,zr({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function rn(e,r,t){let n=w(e,["merge-base","--is-ancestor",r,t]);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 er(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return Xr(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return Xr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=w(e,["rev-parse",n]);if(p.status!==0)return Xr(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.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 u=rn(e,i,a),l=rn(e,a,i),c=u.error||l.error||void 0;if(u.isAncestor==null||l.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:"unknown",...c?{error:c}:{}};let d=u.isAncestor?"ahead":l.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:d,...c?{error:c}:{}}}function Xr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var K=g(()=>{"use strict";se();b();en()});var Zr=g(()=>{"use strict";K()});var rr=g(()=>{"use strict";K();se();Zr()});var Qr=g(()=>{"use strict";b()});function ie(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function tr(e,r){return e[r]?.trim()||null}function nn(e){let r=e?.split(":")[0]?.trim();return r?ie(r):null}function ve(e=process.env,r={}){let t=[],n=nn(r.boxId),o=nn(tr(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ie(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ie(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=tr(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ie(i)&&t.push(`KYNVER_BOX_ID=${tr(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ie(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=tr(e,"KYNVER_AGENT_OS_SLUG");return a&&t.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:t}}var ae=g(()=>{"use strict"});function et(e,r){return e==="forge"?4:Math.max(1,r)}function nr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var or=g(()=>{"use strict"});var on=g(()=>{"use strict"});import{existsSync as ti,readFileSync as ni,statfsSync as oi}from"node:fs";function rt(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ti(e))continue;let r=ni(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function sn(e={}){if(!(e.forceWsl===void 0?rt():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||xe,n=e.wslHostFreeWarnBytes??si,o=e.wslHostFreeCriticalBytes??ii,s=e.statfs??oi,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<n,d=a<o,p=!c&&!d,f=(a/(1024*1024*1024)).toFixed(1),m=null;return p||(m=`Windows host disk ${t} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${ai()}`),{ok:p,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function ai(){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 si,ii,xe,tt=g(()=>{"use strict";si=25*1024*1024*1024,ii=12*1024*1024*1024,xe="/mnt/c"});import{execFileSync as an}from"node:child_process";import{existsSync as ir,readFileSync as un,readdirSync as ui,statSync as li}from"node:fs";import nt from"node:path";function sr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function ln(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=an("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||xe;return r&&ir(nt.join(t,"Users",r))?r:null}function fi(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||xe,n=e.windowsUser??ln();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function gi(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[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(t)?t:null}}function hi(){try{if(ir("/proc/sys/kernel/core_pattern"))return un("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return an("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function ki(e){return!!(e&&/wsl-capture-crash/i.test(e))}function yi(e,r=xe){let t=nt.join(r,"Users",e,".wslconfig");if(!ir(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=un(t,"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 u=a.indexOf("=");if(u<0)continue;let l=a.slice(0,u).trim().toLowerCase(),c=a.slice(u+1).trim();if(l==="maxcrashdumpcount"){let d=Number(c);o=Number.isFinite(d)?d:null}else l==="crashdumpfolder"&&(s=c.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function Ri(e){if(!ir(e))return[];let r=ui(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=nt.join(e,n.name);try{let s=li(o),i=gi(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function _e(e={}){if(!(e.forceWsl===void 0?rt():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||xe,n=e.windowsUser??ln(),o=e.warnBelowBytes??sr("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",ci),s=e.criticalBelowBytes??sr("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",di),i=e.warnCount??sr("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",pi),a=e.criticalCount??sr("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",mi),u=(e.readCorePattern??hi)(),l=ki(u),c=null;n&&(c=(e.readWslConfig??yi)(n,t));let d=c?.maxCrashDumpCount??null,p=d===-1,f=fi({hostMount:t,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:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let m;try{m=(e.listDumps??Ri)(f)}catch(P){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${f}: ${P.message}`,probeError:P.message}}let y=m.reduce((P,h)=>P+h.bytes,0),S=m.length,R=[...new Set(m.map(P=>P.executableHint).filter(P=>!!P))],A=y>=s,L=y>=o,B=S>=a,Ve=S>=i,ne=!(A||B||L||Ve),oe=null;if(!ne){let P=A||B?"critical":"warning",h=(y/1024**3).toFixed(1),X=R.length>0?R.join(", "):"unknown";oe=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${f} (executables: ${X}). `+bi({wslCaptureEnabled:l,dumpsDisabledInWslConfig:p})}return{ok:ne,path:f,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:m,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:oe,probeError:null}}function bi(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var ci,di,pi,mi,ar=g(()=>{"use strict";tt();ci=5*1024*1024*1024,di=10*1024*1024*1024,pi=2,mi=4});import{statfsSync as Si}from"node:fs";function ur(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??vi,n=e.diskFreeCriticalBytes??xi,o=e.diskMaxUsedPercent??_i,s=e.diskHardMaxUsedPercent??Ei,i=Si(r),a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<t,d=a<n,p=a<t*2,f=p&&l>o,m=p&&l>s,y=!c&&!d&&!f&&!m,S=e.skipWslHostCheck?null:sn(e.wslHost),R=e.skipWslCrashDumpCheck?null:_e(e.wslCrashDumps),A=y&&(S?S.ok:!0)&&(R?R.ok:!0),L=null;return A||(L=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,m?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,S&&!S.ok?S.reason:null,R&&!R.ok?R.reason:null].filter(Boolean).join("; ")),Ci({ok:A,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:L,wslHost:S,wslCrashDumps:R?{ok:R.ok,path:R.path,dumpCount:R.dumpCount,totalBytes:R.totalBytes,executables:R.executables,wslCaptureEnabled:R.wslCaptureEnabled,dumpsDisabledInWslConfig:R.dumpsDisabledInWslConfig,reason:R.reason,probeError:R.probeError}:null})}function Ci(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var vi,xi,_i,Ei,lr=g(()=>{"use strict";ar();tt();vi=30*1024*1024*1024,xi=15*1024*1024*1024,_i=80,Ei=90});import{existsSync as wi,readdirSync as Ai,statSync as Pi}from"node:fs";import ot from"node:path";function cr(){return dn()}function st(){let{runsDir:e}=cr();return cn(e)}function dr(e){return cn(G(e))}function Ii(e){try{return Pi(e).isDirectory()}catch{return!1}}function cn(e){if(!wi(e))return[];let r=[];for(let t of Ai(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ot.join(e,t.name);if(!Ii(n))continue;let o=x(ot.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function it(e){let{runsDir:r}=cr();Jr(ot.join(at(r,e.id),"run.json"),e)}function We(e){let{harnessRoot:r}=cr();return Te(r,e)}function Te(e,r){return at(G(e),v(r))}var ue=g(()=>{"use strict";Y();b()});import{existsSync as Oi,readdirSync as Di}from"node:fs";import Ni from"node:path";function ut(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=Ni.join(We(e.id),"workers");if(!Oi(t))return[...r];for(let n of Di(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var lt=g(()=>{"use strict";ue();b()});function ct(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function pn(e){let r=e.trim();if(!r)return null;let t=ct(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ct(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ct(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function mn(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?pn(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=pn(t);return n||t}var fn=g(()=>{"use strict"});import{existsSync as Wi,readFileSync as Ti}from"node:fs";function gn(e){return e==="complete"}function hn(e){return gn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Ee(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Wi(e))return r;let t=Date.now()+Mi,n=new Date(t).toISOString(),o=Ti(e,"utf8").split(`
|
|
6
6
|
`).filter(Boolean);for(let s of o){let i=Xe(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),l=Date.parse(u);Number.isFinite(l)&&l>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:n}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),gn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=mn(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var Mi,pr=g(()=>{"use strict";fn();b();Mi=6e4});function yn(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function mr(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Rn(e){let r=yn(e[0]);return!!(r&&Ui.has(r))}function Bi(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Fi(e){if(!e||e.includes("*"))return null;let r=Bi(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function bn(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function dt(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Hi(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Li(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;kn.has(n)&&(t+=1);continue}r.push(n)}}return r}function ji(e){let r=!1,t=e.map((o,s)=>{let i=Hi(o),a=e[s-1];return a&&kn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Li(t);if(n.length===2){let[o,s]=n;if(dt(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Fi(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function Sn(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function fr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=mr(r);if(!t.length)return{command:r,wrapped:!1};let n=yn(t[0]);if(!n||!Ki.has(n))return{command:r,wrapped:!1};let o=Sn(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function $i(e,r){let t=e.trim(),n=mr(t),o=Sn(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Gi(e){let r=e.trim(),t=fr(r),n=mr(t.command);if(!n.length||!Rn(n))return{segment:r,changed:!1};let o=ji(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:$i(r,s),changed:!0}:{segment:s,changed:!0}}function pt(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=Gi(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function vn(e){let r=fr(e).command,t=mr(r.trim());return t.length&&Rn(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function xn(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function Yi(e){let{pattern:r,target:t}=xn(e);return r?dt(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:bn(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Vi(e){let{pattern:r,target:t}=xn(e);if(!r)return null;if(dt(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&bn(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function zi(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 r=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 '${r}' .\` 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 Ji(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function mt(e){let r=e.meta?.trim()||(e.command?Ji(e.command):null)||null;if(r){let t=Yi(r),n=zi(t);if(n)return n;let o=Vi(r);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 t=pt(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.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 Ui,Ki,kn,_n=g(()=>{"use strict";Ui=new Set(["rg","ripgrep","grep"]),Ki=new Set(["bash","sh","dash","zsh"]),kn=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Me(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Zi(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Ue(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Qi(e){let r=e.metadata;if(!Ue(r))return null;let t=r.vulnerabilities;if(!Ue(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function ea(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function ra(e,r){let t=e.error;if(Ue(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.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=r.trim();return o?Me(o.split(`
|
|
7
7
|
`).find(Boolean)??o,160):"npm audit failed"}function ta(e){let r=`${e.stdout}
|
|
8
|
-
${e.stderr}`.trim(),t=Zi(r);if(!t||!Ue(t)){let o=Me(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Ue(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${ra(t,e.stderr)}`};let n=Qi(t);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:ea(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function na(e){return qi.test(e)}function oa(e){let r=fr(e).command;return En.test(e)||En.test(r)||vn(e)}function sa(e){let r=mt({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&&Xi.test(n)){let i=Me(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=pt(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Me(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function Cn(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(na(e.command)){let i=r.trim()||n.trim()||t.trim();return ta({exitCode:e.exitCode,stdout:i,stderr:t})}if(oa(e.command))return sa({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=mt({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=Me(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var qi,En,Xi,wn=g(()=>{"use strict";_n();qi=/\bnpm\s+audit\b/i,En=/\b(rg|ripgrep)\b/i,Xi=/\b(error|invalid|unknown|panic|not found)\b/i});function Ke(e){return typeof e=="string"&&ia.test(e.trim())}function gr(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var ia,hr=g(()=>{"use strict";ia=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function ft(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function aa(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function An(e){if(e.event==="step_update"&&ft(e.step_update)){let s=e.step_update
|
|
8
|
+
${e.stderr}`.trim(),t=Zi(r);if(!t||!Ue(t)){let o=Me(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Ue(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${ra(t,e.stderr)}`};let n=Qi(t);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:ea(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function na(e){return qi.test(e)}function oa(e){let r=fr(e).command;return En.test(e)||En.test(r)||vn(e)}function sa(e){let r=mt({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&&Xi.test(n)){let i=Me(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=pt(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Me(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function Cn(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(na(e.command)){let i=r.trim()||n.trim()||t.trim();return ta({exitCode:e.exitCode,stdout:i,stderr:t})}if(oa(e.command))return sa({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=mt({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=Me(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var qi,En,Xi,wn=g(()=>{"use strict";_n();qi=/\bnpm\s+audit\b/i,En=/\b(rg|ripgrep)\b/i,Xi=/\b(error|invalid|unknown|panic|not found)\b/i});function Ke(e){return typeof e=="string"&&ia.test(e.trim())}function gr(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var ia,hr=g(()=>{"use strict";ia=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function ft(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function aa(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function An(e){if(e.event==="step_update"&&ft(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"||!ft(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=ft(r.usage)?aa(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var Pn=g(()=>{"use strict"});function gt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function In(){return{assistantText:""}}function ua(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function la(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(gt(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function ca(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function On(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return ua(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!ca(e))return null;let t=gt(e.stats)?la(e.stats):void 0;if(e.status==="error"){let o=gt(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var Dn=g(()=>{"use strict"});import{existsSync as da,readFileSync as pa}from"node:fs";function ma(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function fa(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function ga(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",gr(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ce(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function ha(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function ka(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function ya(e,r){let t=ha(r);if(!t)return;let n=Ce(t.input_tokens)??Ce(t.inputTokens)??Ce(t.prompt_tokens),o=Ce(t.output_tokens)??Ce(t.outputTokens)??Ce(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=ka(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Ra(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,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 u=a,l=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:l,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function ba(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Nn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!da(e))return r;let t=pa(e,"utf8").split(`
|
|
9
9
|
`).filter(Boolean),n=null,o=In();for(let s of t){let i=Xe(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let f=p;f.type==="agent_message"&&typeof f.text=="string"&&f.text.trim()&&(n=f.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=ma(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let f=p.find(m=>m?.type==="tool_use");f&&(r.currentTool=String(f.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,f=fa(p);f&&(r.currentTool=f)}let u=Ra(i);u&&ba(r,Cn({command:u.command,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,interleavedOutput:u.interleaved}));let l=An(i),c=l?null:On(i,o),d=l??c;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&ga(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}ya(r,i)}return r}var Wn=g(()=>{"use strict";wn();b();hr();Pn();Dn()});function Tn(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function ht(e){let r=(e??"").trim();if(!r)return null;if(Ke(r))return{blocked:!0,reason:`provider authentication failed: ${Tn(r)}`};for(let t of Sa)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Tn(r)}`};return null}var Sa,Mn=g(()=>{"use strict";hr();Sa=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Un(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function va(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 xa(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Un(e.head)}function _a(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;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 Kn(e){if(e.alive||va(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Un(e.headCommit)??xa(e.gitAncestry),n=r>0,o=!!t;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:r,headCommit:t,attentionReason:_a(s,r,t)}}var Bn=g(()=>{"use strict"});function Be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ea(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 Ca(e){if(Be(e.headCommit)||Be(e.prUrl)||Be(e.artifactBundlePath)||Be(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Be(r.head))}function we(e){return Ea(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Ca(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 Fn(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var kr=g(()=>{"use strict"});function kt(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Hn(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function yr(e){let r=e.trim();if(!r)return null;let t=kt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=kt(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=kt(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Hn(u);for(let c of n){let d=Hn(c);d>l&&(u=c,l=d)}return u}var yt=g(()=>{"use strict"});function Ln(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function jn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function wa(e){return new Set(e.map(r=>jn(Ln(r)??r)).filter(Boolean))}function $n(e,r,t){let n=Ln(e)??e;if(!n)return"unrelated";let o=jn(n);return wa(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Gn=g(()=>{"use strict"});function Ae(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Aa(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function le(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ae(e)}function Rr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Yn(e){let r=null;if(typeof e=="string"){let o=yr(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=le(String(s.prUrl??s.pr_url??"")),a=Ae(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ae(s.mergeCommit??s.merge_commit),reason:Ae(s.reason)})}return n}function Vn(e,r){let t=[],n=le(Ae(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=le(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function zn(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Aa(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?le(Ae(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?le(r.targetPrUrls[0]):null):null;if(s){let d=Vn(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let m=Yn(n).find(y=>y.prUrl===s);if(!m||m.outcome!=="merged"&&!(m.reason?.trim()&&(m.outcome==="skipped"||m.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Yn(n),a=new Map(i.map(d=>[Rr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>Rr(le(d)??d)).filter(Boolean)),l=Vn(t,n);if(r.landingOnly)for(let d of l){let p=a.get(Rr(d)),f=$n(d,r.targetPrUrls,p);if(!(f==="contract"||f==="support"))return u.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(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let p=Rr(le(d)??d),f=a.get(p);if(!f){c.push(p);continue}f.outcome!=="merged"&&!f.reason?.trim()&&c.push(p)}return c.length>0?{blocked:!0,reason:c.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${c.join(", ")}`}:{blocked:!1}}function Jn(e){if(e.blocked)return e.detail??e.reason}var qn=g(()=>{"use strict";yt();Gn()});function Oa(e){let r=Date.now();if(e.providerTerminalError||gr(e.finalResult)||e.finalResult&&e.error?.trim()||Ke(e.error)||Ke(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:ht(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Xn(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Na(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=we(o);if(s.blocked){let i=Fn(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=zn({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Jn(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(Da(e))return{state:"done",reason:"empty abandoned worker record"};let o=ht(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Kn({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Pa)return{state:"needs_attention",reason:`no first stream event ${qr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ia?{state:"stale",reason:`no log/event/heartbeat activity for ${qr(n)}s`}:{state:"ok",reason:"recent activity"}}function Xn(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Da(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Na(e){let r=null;if(typeof e=="string"?r=yr(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Wa(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??hn(t))}function Fe(e,r={}){let t=Nn(e.stdoutPath),n=Ee(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Wa(e,t.finalResult,n),i=o?!1:ee(e.pid),a=Ze(e.stdoutPath),u=Ze(e.stderrPath),l=Ze(e.heartbeatPath),c=Ne(e.worktreePath),d=er(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),p=Qt([t.lastEventAt,n.lastHeartbeatAt,Qe(e.stdoutPath),Qe(e.stderrPath),Qe(e.heartbeatPath)]),f=t.error||!i&&!s&&Zt(e.stderrPath,10).trim()||void 0,m=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=Xn(m)?null:m,S=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,R=Oa({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:f,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,completionBlocker:y,landingContract:S,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),A=y||R.state==="blocked"?"blocked":o||R.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:A,attention:R,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:f,providerTerminalError:t.providerTerminalError,changedFiles:c,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:t.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 ce(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Zn(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Pa,Ia,de=g(()=>{"use strict";pr();Wn();hr();Mn();Bn();K();kr();qn();yt();b();Pa=18e4,Ia=6e5});var Qn=g(()=>{"use strict";de()});function eo(e,r={}){let t=r.perWorkerMemBytes??Rt,n=r.memReserveBytes??bt,o=r.memUtilization??St,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,br)}var Rt,bt,St,br,ro=g(()=>{"use strict";on();me();ae();or();Sr();lr();ue();lt();Qn();b();Rt=500*1024*1024,bt=4*1024*1024*1024,St=.85,br=64});function He(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function vt(e){let r=e.config??{},t=e.env??process.env,n=He(r.perWorkerMemBytes,Rt),o=He(r.memReserveBytes,bt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):St)),i=eo(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:He(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=He(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,br),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&He(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,br),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Sr=g(()=>{"use strict";ro()});import{homedir as Ta}from"node:os";import Ma from"node:path";var to,xt=g(()=>{"use strict";to=Ma.join(Ta(),".kynver",".env")});var no=g(()=>{"use strict"});var oo=g(()=>{"use strict";no()});var so=g(()=>{"use strict"});var io=g(()=>{"use strict";b()});var _t=g(()=>{"use strict";oo();so();io()});var ao=g(()=>{"use strict"});var uo=g(()=>{"use strict";ao()});var vr=g(()=>{"use strict";xt();se();me();_t();uo()});var po=g(()=>{"use strict";ae();ae()});var mo=g(()=>{"use strict";xt();_t();vr()});var Et=g(()=>{"use strict"});import{existsSync as V,mkdirSync as Ka,readdirSync as xr,renameSync as fo,statSync as Ba}from"node:fs";import z from"node:path";function ho(e){try{return Ba(e).isDirectory()}catch{return!1}}function Fa(e){if(!V(e))return!0;for(let r of go){let t=z.join(e,r);if(V(t)&&(!ho(t)||xr(t).length>0))return!1}return!0}function Ha(e){let r=z.join(e,"runs");if(!V(r)||!ho(r))return!1;for(let t of xr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=z.join(r,t.name,"run.json");if(x(n,void 0)?.id)return!0}return!1}function La(e){let r=z.join(e,"runs");if(!V(r))return!1;for(let t of xr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(x(z.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function ja(e){let r=z.join(e,"ghost");return V(r)?!V(z.join(r,"runs")):La(e)}function ko(e){return Ha(e.sharedRoot)?Fa(e.forgeRoot)?ja(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 yo(e,r){Ka(r,{recursive:!0});for(let t of go){let n=z.join(e,t),o=z.join(r,t);if(V(n)){if(V(o)&&xr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(V(o)){fo(n,o);continue}fo(n,o)}}}var go,Ro=g(()=>{"use strict";b();go=["runs","worktrees"]});import{existsSync as C}from"node:fs";import{homedir as $a}from"node:os";import E from"node:path";function Ct(e=process.env){return e.HOME?.trim()||$a()}function wt(e=process.env){return E.join(Ct(e),".kynver","harness")}function _r(e){let r=E.resolve(Q(e.trim()));for(;Ga.has(E.basename(r));)r=E.dirname(r);return r}function Ya(e,r=process.env){return E.join(wt(r),e)}function Va(e=process.env){let r=wt(e);if(C(E.join(r,"runs")))return!0;if(C(r)&&!C(E.join(r,"ghost"))&&!C(E.join(r,"forge")))return C(r);let t=E.join(Ct(e),bo);return C(t)}function Er(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:_r(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:_r(n),source:"config"};let o=Ya(e.boxKind,r);if(C(E.join(o,"runs"))||C(o)&&!za(o))return{harnessRoot:o,source:"box_scoped"};let i=wt(r);if(e.boxKind==="forge"){let a=ko({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&&yo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Va(r)){if(C(E.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(C(i)&&!C(E.join(i,"ghost"))&&!C(E.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=E.join(Ct(r),bo);if(C(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function za(e){if(!C(e))return!0;for(let r of["runs","worktrees"]){let t=E.join(e,r);if(C(t))return!1}return!0}var bo,Ga,At=g(()=>{"use strict";se();Ro();bo=E.join(".openclaw","harness");Ga=new Set(["runs","worktrees"])});import So from"node:os";function Cr(e){return e?.trim()?e.trim():null}function Ja(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function qa(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 wr(e=pe(),r=process.env,t={}){let n=ve(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Cr(r.KYNVER_BOX_KIND)),a=t.strict===!0||qa(r);if((t.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 y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=Cr(e.runnerId),l=Cr(r.KYNVER_RUNTIME_ID)??Cr(r.OPENCLAW_RUNTIME_ID),c=u??l??Ja(n.boxKind,So.hostname()),d=u?"config":l?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${c}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=vt({config:e,env:r,totalMemBytes:So.totalmem()}),f=nr(n.boxKind,p.configuredMaxWorkers??et(n.boxKind,p.autoCap)),m=Er({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return m.migrationBlocker&&s.push(m.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:c,runnerIdSource:d,maxConcurrentWorkers:f,workerCapSource:p.workerCapSource,harnessRoot:m.harnessRoot,harnessRootSource:m.source},errors:s,warnings:o}}var Ar=g(()=>{"use strict";me();ae();or();Sr();At()});var xo=g(()=>{"use strict";rr();ae();po();me();vr();mo();Qr();Et();Ar()});var Qa,Zp,_o=g(()=>{"use strict";Qa=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Zp=Qa.join("|")});import{existsSync as ru,mkdirSync as lm,readFileSync as tu,writeFileSync as cm}from"node:fs";import{homedir as nu,totalmem as pm}from"node:os";import Pt from"node:path";function ou(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Q(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Q(e.defaultRepo.trim())}:{}}}function pe(){if(!ru(Eo))return{};try{return ou(JSON.parse(tu(Eo,"utf8")))}catch{return{}}}var Co,Eo,Cm,wm,Am,me=g(()=>{"use strict";rr();se();Qr();ae();or();Sr();lr();vr();xo();_o();Ar();Et();Co=Pt.join(nu(),".kynver"),Eo=Pt.join(Co,"config.json"),Cm=Pt.join(Co,"credentials");wm=500*1024*1024,Am=4*1024*1024*1024});import It from"node:path";function O(e){return _r(e)}function re(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return O(e);let r=pe(),t=r.harnessRoot?.trim();if(t)return O(t);let n=wr(r,process.env);return n.identity?n.identity.harnessRoot:Er({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function G(e){return It.join(O(e),"runs")}function Pe(e){return It.join(O(e),"worktrees")}function dn(){let e=re();return{harnessRoot:e,runsDir:G(e),worktreesDir:Pe(e)}}function at(e,r){return It.join(e,v(r))}var Y=g(()=>{"use strict";me();At();Ar();b()});Y();import T from"node:path";kr();import Or from"node:path";K();de();var Ot=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function wo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ot)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function D(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!wo(n)})}function fe(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Le(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?D(e.changedFiles).length>0:!!(fe(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function je(e){return e.status||(e.status=Fe(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Dt(e,r){if(e.status)return D(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ne(e.worktreePath);return D(t).length>0}function su(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Nt(e,r){if(e.status)return e.status;let t=e.worker,n=typeof t.completionReportedAt=="string"&&t.completionReportedAt.trim().length>0,o=!!(t.status&&["done","exited","blocked","failed","abandoned"].includes(t.status))||n,s=su(e);if(o&&!ee(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ne(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",l=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:er(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),c={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:l,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??fe(s)};return e.status=c,c}return je(e)}de();ue();lt();de();b();import iu from"node:path";var au=new Set(["running","dispatching","pending","queued","needs_attention"]),ge=new Set(["completed","failed","cancelled","done"]);function he(e){let r=ut(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(iu.join(We(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=Fe(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Zn(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Ao(){let e=[];for(let r of st()){if(!au.has(r.status))continue;let t=he(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,it(r),e.push({runId:r.id,from:n,to:t})}return e}de();pr();import{existsSync as Pr,mkdirSync as ff,readdirSync as Oo,renameSync as gf,statSync as uu}from"node:fs";import ke from"node:path";me();rr();se();Zr();K();pr();Y();ue();Y();b();import te from"node:path";var lf=`${te.sep}runs${te.sep}runs${te.sep}`;function Po(e){return{workerJsonPath:te.join(e,"worker.json"),stdoutPath:te.join(e,"stdout.jsonl"),stderrPath:te.join(e,"stderr.log"),heartbeatPath:te.join(e,"heartbeat.jsonl"),lastStatusPath:te.join(e,"last-status.json")}}b();var $e=900*1e3,_f=3600*1e3;function Do(e,r){let t=ke.resolve(e),n=ke.resolve(G(r)),o=ke.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ke.isAbsolute(o)}function lu(e){if(!Pr(e))return[];try{return Oo(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function cu(e){let r=ke.join(e,"workers");if(!Pr(r))return[];try{return Oo(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Io(e,r,t){if(!Pr(e))return!1;try{let n=r-uu(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function du(e,r=Date.now(),t=$e){if(!Pr(e))return!1;let n=Po(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&ee(o.pid))return!0;let s=Ee(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Io(n.stdoutPath,r,t)||Io(n.heartbeatPath,r,t))}function pu(e,r=Date.now(),t=$e){for(let n of cu(e))if(du(ke.join(e,"workers",n),r,t))return!0;return!1}function No(e,r=Date.now()){let t=new Set,n=G(e);for(let o of lu(n)){let s=ke.join(n,o);pu(s,r)&&t.add(`${e}\0${o}`)}return t}b();function mu(e,r=Date.now(),t=$e){let n=Ee(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ie(e,r=Date.now(),t=$e){return ee(e.pid)?!0:mu(e,r,t)}function fu(e,r){return r?r.runTerminalCache.derive(e.run):he(e.run)}function J(e,r=Date.now()){return Ie(e.worker,r)}function Wt(e,r){return ge.has(e.run.status)?!1:fu(e,r)!==null}function Wo(e,r,t=Date.now()){if(J(e,t))return!0;if(ge.has(e.run.status)||Wt(e,r))return!1;let n=je(e);return ce(n)?!1:!!J(e,t)}kr();de();function To(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(J(e))return!0;let n=r??je(e);return!!(!ce(n)||Le(n)||D(n.changedFiles).length>0||we({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:fe(n.finalResult)}).blocked)}K();b();import{existsSync as Uo,mkdirSync as gu,writeFileSync as Mo}from"node:fs";import Ir from"node:path";function Ko(e,r,t){return Ir.join(e,"salvage",v(r),v(t))}function Bo(e){return Uo(Ir.join(Ko(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Fo(e){let r=Ko(e.harnessRoot,e.indexed.runId,e.indexed.workerName);gu(r,{recursive:!0});let t=Ir.join(r,"salvage.patch"),n=!1;if(Uo(e.indexed.worktreePath)){let s=w(e.indexed.worktreePath,["diff","HEAD"]),i=w(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
10
10
|
`);a.trim()&&(Mo(t,a.endsWith(`
|
|
11
11
|
`)?a:`${a}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Be}from"node:os";import Le from"node:path";function ot(e){return e==="~"?Be():e.startsWith("~/")||e.startsWith("~\\")?Le.join(Be(),e.slice(2)):e}function w(e){return Le.resolve(ot(e))}var P=a(()=>{"use strict"});function R(e=process.platform){return e!=="win32"}var Fe=a(()=>{"use strict"});var d=a(()=>{"use strict";Fe()});var it,co,st,po,pe=a(()=>{"use strict";it=["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"],co=new Set(it),st=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],po=new Set(st)});var z=a(()=>{"use strict";P();d();pe()});var $e=a(()=>{"use strict";z()});var me=a(()=>{"use strict";z();P();$e()});var fe=a(()=>{"use strict";d()});var _=a(()=>{"use strict"});var X=a(()=>{"use strict"});var je=a(()=>{"use strict"});var To,No,ge=a(()=>{"use strict";To=25*1024*1024*1024,No=12*1024*1024*1024});var Uo,Bo,He=a(()=>{"use strict";ge();Uo=5*1024*1024*1024,Bo=10*1024*1024*1024});var Yo,Vo,he=a(()=>{"use strict";He();ge();Yo=30*1024*1024*1024,Vo=15*1024*1024*1024});var Ve=a(()=>{"use strict";d()});import ct from"node:path";var ri,ye=a(()=>{"use strict";P();Ve();ri=ct.join(".openclaw","harness")});var Z=a(()=>{"use strict";v();_();X();ee();ye()});var Je=a(()=>{"use strict";v();ye();Z();d()});var ke=a(()=>{"use strict";Je();d()});var ze=a(()=>{"use strict";ke();d()});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe();d()});var Ze=a(()=>{"use strict"});var er=a(()=>{"use strict";Ze()});var re=a(()=>{"use strict"});var rr=a(()=>{"use strict"});var tr=a(()=>{"use strict"});var nr=a(()=>{"use strict";er();d();re();rr();tr()});var or=a(()=>{"use strict";re()});var ir=a(()=>{"use strict"});var sr=a(()=>{"use strict"});var _e=a(()=>{"use strict"});var ar=a(()=>{"use strict"});var lr=a(()=>{"use strict";_e();ar()});var ur=a(()=>{"use strict";Qe();nr();re();or();ir();z();sr();lr();_e();d()});var cr=a(()=>{"use strict";ur()});var vt,xt,dr=a(()=>{"use strict";je();v();_();X();ee();he();ke();ze();cr();d();vt=500*1024*1024,xt=4*1024*1024*1024});var ee=a(()=>{"use strict";dr()});import{homedir as bt}from"node:os";import Et from"node:path";var pr,ve=a(()=>{"use strict";pr=Et.join(bt(),".kynver",".env")});var mr=a(()=>{"use strict"});var fr=a(()=>{"use strict";mr()});var gr=a(()=>{"use strict"});var hr=a(()=>{"use strict";d()});var xe=a(()=>{"use strict";fr();gr();hr()});var yr=a(()=>{"use strict"});var Rr=a(()=>{"use strict";yr()});var te=a(()=>{"use strict";ve();P();v();xe();Rr()});var kr=a(()=>{"use strict";_();_()});var _r=a(()=>{"use strict";ve();xe();te()});var be=a(()=>{"use strict"});var vr=a(()=>{"use strict";me();_();kr();v();te();_r();fe();be();Z()});function x(e){let r=e.trim().toLowerCase();return Nt[r]??r}var xr,Tt,Nt,ne=a(()=>{"use strict";xr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Tt=xr.join("|"),Nt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as Wt,mkdirSync as _l,readFileSync as Mt,writeFileSync as vl}from"node:fs";import{homedir as Dt,totalmem as bl}from"node:os";import Ee from"node:path";function Ut(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:w(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:w(e.defaultRepo.trim())}:{}}}function T(){if(!Wt(br))return{};try{return Ut(JSON.parse(Mt(br,"utf8")))}catch{return{}}}var Er,br,Dl,Ul,Bl,v=a(()=>{"use strict";me();P();fe();_();X();ee();he();te();vr();ne();Z();be();Er=Ee.join(Dt(),".kynver"),br=Ee.join(Er,"config.json"),Dl=Ee.join(Er,"credentials");Ul=500*1024*1024,Bl=4*1024*1024*1024});var Zr=/^claude[-_]/i,et=/^(?:opus|sonnet|haiku)\b/i;function Me(e){let r=e.trim();return Zr.test(r)||et.test(r)}function De(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ce(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Ue(e){return e.trim().toLowerCase().startsWith("gemini-")}function rt(e){return De(e)?"codex":Me(e)?"claude":Ue(e)?"gemini":(ce(e),"cursor")}function tt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function nt(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?Me(n)||De(n)||ce(n)||Ue(n)?{lane:t,model:n,provider:rt(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function f(e){let r=typeof e=="string"?e.trim():"";return r?tt(r)??nt(r):null}function de(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ce(r.model)):!1}v();var Sr={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"}};function N(e){return Sr[e]}function Cr(){return Object.values(Sr)}import{existsSync as Jt}from"node:fs";import{homedir as zt}from"node:os";import $ from"node:path";import{createHash as Pr}from"node:crypto";import{statSync as qt}from"node:fs";import{spawnSync as Ir}from"node:child_process";import{existsSync as wr,readFileSync as Bt}from"node:fs";import b from"node:path";var F=class extends Error{constructor(t){super(`${t} 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=t;this.name="UnresolvableWindowsShimError"}shimPath},Lt=".COM;.EXE;.BAT;.CMD";function Ft(e){return e.includes("/")||e.includes("\\")}function $t(e){return(e.PATHEXT||Lt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function jt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Ht(e,r={}){let t=r.env??process.env,n=r.exists??wr,o=$t(t),s=b.win32.extname(e)!=="",i=l=>s?[l]:o.map(u=>`${l}${u}`);if(Ft(e)||b.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of jt(t).split(";").map(u=>u.trim()).filter(Boolean)){let u=i(b.win32.join(l,e)).find(c=>n(c));if(u)return u}return null}var Or=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Yt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function Ar(e){return e.replace(/^[\\/]+/,"")}function Vt(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Yt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Or.exec(n);if(o)return Ar(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Or.exec(i):null;if(l)return Ar(l[1])}return null}function Gt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Ht(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=b.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(ue=>Bt(ue,"utf8")),i=r.exists??wr,l;try{l=s(n)}catch{throw new F(n)}let u=Vt(l);if(!u)throw new F(n);let c=b.win32.dirname(n),p=b.win32.join(c,u);if(!i(p))throw new F(n);let L=b.win32.join(c,"node.exe");return{executable:i(L)?L:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function E(e,r,t={}){let n=Gt(e,t);return[n.executable,[...n.prefixArgs,...r]]}function y(e){try{let r=qt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Pr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function K(e){return Pr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=E(e,r),i=Ir(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let l=(i.stderr||i.stdout||"").trim(),u=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${u}: ${l.slice(0,200)}`:u}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function oe(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=E(e,r);return Ir(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var Xt="codex";function Qt(){let e=zt();return[process.env.CODEX_HOME?.trim()?$.join($.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,$.join(e,".codex","auth.json"),$.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Zt(e){return $.dirname(e)}function en(e){let r,t;for(let n of Qt()){if(!Jt(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Zt(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Tr(e=new Date().toISOString()){let r=g(Xt,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:K("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=en(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as rn}from"node:fs";import{homedir as tn}from"node:os";import Se from"node:path";function nn(){let e=process.env.HERMES_HOME?.trim(),r=e?Se.resolve(e):Se.join(tn(),".hermes");return Se.join(r,"auth.json")}function ie(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=nn(),o=rn(n),s=oe(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function j(e=new Date().toISOString()){let r=Tr(e);if(r.ready)return{...r,path:"codex_cli"};let t=ie(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var Nr=["low","medium","high"],Kr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Wr(e,r){let t=N(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function on(e,r){let t=N(e.providerId),n=N(r.providerId),o=Nr.indexOf(t.costTier)-Nr.indexOf(n.costTier);if(o!==0)return o;let s=Kr[e.binding.authSource]-Kr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ce(e){let r=Cr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&Wr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(on)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Wr(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}}import{existsSync as sn}from"node:fs";import{homedir as an}from"node:os";import ln from"node:path";var un="claude";function cn(){let e=an();return[ln.join(e,".claude",".credentials.json")]}function Mr(e=new Date().toISOString()){let r=g(un,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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 t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=cn().find(i=>sn(i)),o=oe(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as kn}from"node:fs";import{homedir as Rn}from"node:os";import M from"node:path";import{closeSync as Eu,existsSync as gn,mkdirSync as Su,openSync as Cu,statSync as Ou,unlinkSync as Au}from"node:fs";d();import W from"node:path";pe();import{existsSync as H,readdirSync as dn}from"node:fs";import S from"node:path";var pn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function mn(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function fn(e){let r=S.join(e,"versions");if(!H(r))return null;let t=null,n=-1;for(let o of dn(r,{withFileTypes:!0})){if(!o.isDirectory()||!pn.test(o.name))continue;let s=mn(o.name);s==null||s<=n||(n=s,t=S.join(r,o.name))}return t}function Oe(e){let r=e?.trim()||S.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=S.join(r,"node.exe"),n=S.join(r,"index.js");if(H(t)&&H(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=fn(r);if(!o)return null;let s=S.join(o,"node.exe"),i=S.join(o,"index.js");return!H(s)||!H(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function hn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:R(),bundledVersionDir:t}}function Dr(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&gn(W.join(W.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Oe(W.dirname(e)):t?{nodeExe:e,indexJs:W.join(W.dirname(e),"index.js"),versionDir:W.dirname(e)}:Oe();if(o)return hn(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:R()}}import{spawnSync as yn}from"node:child_process";function Ae(e,r=process.env){try{let t;try{t=Dr(e)}catch{t={executable:e,prefixArgs:[]}}let n=yn(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,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(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function we(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(M.join(t,".config","cursor","auth.json")),r.push(M.join(t,".cursor-agent","auth.json")));let n=Rn();if(r.push(M.join(n,".config","cursor","auth.json")),r.push(M.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(M.join(o,"cursor-agent","auth.json")),s&&r.push(M.join(s,"cursor","auth.json"))}return r}var _n="agent";function Ur(e=new Date().toISOString()){let r=g(_n,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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 t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=we().find(l=>kn(l)),o=Ae(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as vn,readFileSync as xn}from"node:fs";import{homedir as bn}from"node:os";import Pe from"node:path";var En=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Sn(){let e=process.env.HERMES_HOME?.trim(),r=e?Pe.resolve(e):Pe.join(bn(),".hermes");return Pe.join(r,".env")}function Cn(e){try{let r=xn(e,"utf8"),t=[];for(let n of En)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Br(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Sn(),o=vn(n),s=o?Cn(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Lr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=j(r),n={codex:t,cursor:Ur(r),claude:Mr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,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:Br(r),hermesOpenAiCodex:ie(r),codexAdapterPath:t.path,readyCount:o}}var On=[/\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],An=[/\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 Ie(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function wn(e){let r=Ie(e,"executorRef").toLowerCase(),t=Ie(e,"title").toLowerCase(),n=Ie(e,"description").toLowerCase(),o=`${r}
|
|
1
|
+
var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Be}from"node:os";import Le from"node:path";function ot(e){return e==="~"?Be():e.startsWith("~/")||e.startsWith("~\\")?Le.join(Be(),e.slice(2)):e}function w(e){return Le.resolve(ot(e))}var P=a(()=>{"use strict"});function R(e=process.platform){return e!=="win32"}var Fe=a(()=>{"use strict"});var d=a(()=>{"use strict";Fe()});var it,co,st,po,pe=a(()=>{"use strict";it=["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"],co=new Set(it),st=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],po=new Set(st)});var z=a(()=>{"use strict";P();d();pe()});var $e=a(()=>{"use strict";z()});var me=a(()=>{"use strict";z();P();$e()});var fe=a(()=>{"use strict";d()});var _=a(()=>{"use strict"});var X=a(()=>{"use strict"});var je=a(()=>{"use strict"});var To,No,ge=a(()=>{"use strict";To=25*1024*1024*1024,No=12*1024*1024*1024});var Uo,Bo,He=a(()=>{"use strict";ge();Uo=5*1024*1024*1024,Bo=10*1024*1024*1024});var Yo,Vo,he=a(()=>{"use strict";He();ge();Yo=30*1024*1024*1024,Vo=15*1024*1024*1024});var Ve=a(()=>{"use strict";d()});import ct from"node:path";var ri,ye=a(()=>{"use strict";P();Ve();ri=ct.join(".openclaw","harness")});var Z=a(()=>{"use strict";v();_();X();ee();ye()});var Je=a(()=>{"use strict";v();ye();Z();d()});var ke=a(()=>{"use strict";Je();d()});var ze=a(()=>{"use strict";ke();d()});var Xe=a(()=>{"use strict"});var Qe=a(()=>{"use strict";Xe();d()});var Ze=a(()=>{"use strict"});var er=a(()=>{"use strict";Ze()});var re=a(()=>{"use strict"});var rr=a(()=>{"use strict"});var tr=a(()=>{"use strict"});var nr=a(()=>{"use strict";er();d();re();rr();tr()});var or=a(()=>{"use strict";re()});var ir=a(()=>{"use strict"});var sr=a(()=>{"use strict"});var _e=a(()=>{"use strict"});var ar=a(()=>{"use strict"});var lr=a(()=>{"use strict";_e();ar()});var ur=a(()=>{"use strict";Qe();nr();re();or();ir();z();sr();lr();_e();d()});var cr=a(()=>{"use strict";ur()});var vt,xt,dr=a(()=>{"use strict";je();v();_();X();ee();he();ke();ze();cr();d();vt=500*1024*1024,xt=4*1024*1024*1024});var ee=a(()=>{"use strict";dr()});import{homedir as bt}from"node:os";import Et from"node:path";var pr,ve=a(()=>{"use strict";pr=Et.join(bt(),".kynver",".env")});var mr=a(()=>{"use strict"});var fr=a(()=>{"use strict";mr()});var gr=a(()=>{"use strict"});var hr=a(()=>{"use strict";d()});var xe=a(()=>{"use strict";fr();gr();hr()});var yr=a(()=>{"use strict"});var Rr=a(()=>{"use strict";yr()});var te=a(()=>{"use strict";ve();P();v();xe();Rr()});var kr=a(()=>{"use strict";_();_()});var _r=a(()=>{"use strict";ve();xe();te()});var be=a(()=>{"use strict"});var vr=a(()=>{"use strict";me();_();kr();v();te();_r();fe();be();Z()});function x(e){let r=e.trim().toLowerCase();return Nt[r]??r}var xr,Tt,Nt,ne=a(()=>{"use strict";xr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Tt=xr.join("|"),Nt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{existsSync as Dt,mkdirSync as _l,readFileSync as Wt,writeFileSync as vl}from"node:fs";import{homedir as Mt,totalmem as bl}from"node:os";import Ee from"node:path";function Ut(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:w(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:w(e.defaultRepo.trim())}:{}}}function T(){if(!Dt(br))return{};try{return Ut(JSON.parse(Wt(br,"utf8")))}catch{return{}}}var Er,br,Ml,Ul,Bl,v=a(()=>{"use strict";me();P();fe();_();X();ee();he();te();vr();ne();Z();be();Er=Ee.join(Mt(),".kynver"),br=Ee.join(Er,"config.json"),Ml=Ee.join(Er,"credentials");Ul=500*1024*1024,Bl=4*1024*1024*1024});var Zr=/^claude[-_]/i,et=/^(?:opus|sonnet|haiku)\b/i;function We(e){let r=e.trim();return Zr.test(r)||et.test(r)}function Me(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ce(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Ue(e){return e.trim().toLowerCase().startsWith("gemini-")}function rt(e){return Me(e)?"codex":We(e)?"claude":Ue(e)?"gemini":(ce(e),"cursor")}function tt(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function nt(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?We(n)||Me(n)||ce(n)||Ue(n)?{lane:t,model:n,provider:rt(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function f(e){let r=typeof e=="string"?e.trim():"";return r?tt(r)??nt(r):null}function de(e){let r=f(e);return r?!!(r.provider&&r.provider!=="cursor"||r.model&&!ce(r.model)):!1}v();var Sr={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"}};function N(e){return Sr[e]}function Cr(){return Object.values(Sr)}import{existsSync as Jt}from"node:fs";import{homedir as zt}from"node:os";import $ from"node:path";import{createHash as Pr}from"node:crypto";import{statSync as qt}from"node:fs";import{spawnSync as Ir}from"node:child_process";import{existsSync as wr,readFileSync as Bt}from"node:fs";import b from"node:path";var F=class extends Error{constructor(t){super(`${t} 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=t;this.name="UnresolvableWindowsShimError"}shimPath},Lt=".COM;.EXE;.BAT;.CMD";function Ft(e){return e.includes("/")||e.includes("\\")}function $t(e){return(e.PATHEXT||Lt).split(";").map(r=>r.trim().toLowerCase()).filter(r=>r.startsWith("."))}function jt(e){let r=Object.keys(e).find(t=>t.toUpperCase()==="PATH");return r?e[r]??"":""}function Ht(e,r={}){let t=r.env??process.env,n=r.exists??wr,o=$t(t),s=b.win32.extname(e)!=="",i=l=>s?[l]:o.map(u=>`${l}${u}`);if(Ft(e)||b.win32.isAbsolute(e))return i(e).find(l=>n(l))??null;for(let l of jt(t).split(";").map(u=>u.trim()).filter(Boolean)){let u=i(b.win32.join(l,e)).find(c=>n(c));if(u)return u}return null}var Or=/%~?dp0%?\\?([^"%\r\n]+?\.(?:c|m)?js)\b/i,Yt=/^\s*SET\s+"?([A-Za-z_]\w*)=([^"\r\n]*)"?\s*$/i;function Ar(e){return e.replace(/^[\\/]+/,"")}function Vt(e){let r=e.split(/\r?\n/),t=new Map;for(let s of r){let i=Yt.exec(s);i&&t.set(i[1].toUpperCase(),i[2])}let n=r.filter(s=>s.includes("%*")).pop();if(!n)return null;let o=Or.exec(n);if(o)return Ar(o[1]);for(let s of n.matchAll(/%([A-Za-z_]\w*)%/g)){let i=t.get(s[1].toUpperCase()),l=i?Or.exec(i):null;if(l)return Ar(l[1])}return null}function Gt(e,r={}){if((r.platform??process.platform)!=="win32")return{executable:e,prefixArgs:[],kind:"passthrough"};let n=Ht(e,r);if(!n)return{executable:e,prefixArgs:[],kind:"passthrough"};let o=b.win32.extname(n).toLowerCase();if(o!==".cmd"&&o!==".bat")return{executable:n,prefixArgs:[],kind:"exe"};let s=r.readText??(ue=>Bt(ue,"utf8")),i=r.exists??wr,l;try{l=s(n)}catch{throw new F(n)}let u=Vt(l);if(!u)throw new F(n);let c=b.win32.dirname(n),p=b.win32.join(c,u);if(!i(p))throw new F(n);let L=b.win32.join(c,"node.exe");return{executable:i(L)?L:r.nodeExecutable??process.execPath,prefixArgs:[p],kind:"node-shim"}}function E(e,r,t={}){let n=Gt(e,t);return[n.executable,[...n.prefixArgs,...r]]}function y(e){try{let r=qt(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Pr("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function K(e){return Pr("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function g(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function h(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=E(e,r),i=Ir(o,s,{windowsHide:!0,encoding:"utf8",timeout:n,env:{...process.env,...t.env,CI:"1",NO_COLOR:"1"}});if(i.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let l=(i.stderr||i.stdout||"").trim(),u=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:l?`${u}: ${l.slice(0,200)}`:u}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function oe(e,r,t={}){let n=t.timeoutMs??8e3;try{let[o,s]=E(e,r);return Ir(o,s,{windowsHide:!0,stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var Xt="codex";function Qt(){let e=zt();return[process.env.CODEX_HOME?.trim()?$.join($.resolve(process.env.CODEX_HOME.trim()),"auth.json"):null,$.join(e,".codex","auth.json"),$.join(e,".config","codex","auth.json")].filter(t=>!!t)}function Zt(e){return $.dirname(e)}function en(e){let r,t;for(let n of Qt()){if(!Jt(n))continue;r??=n;let o=h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status",env:{CODEX_HOME:Zt(n)}});if(t??=o,o.ok)return{authPath:n,login:o}}return{authPath:r,login:t??h(e,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"})}}function Tr(e=new Date().toISOString()){let r=g(Xt,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:K("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let{authPath:t,login:n}=en(r),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?y(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no Codex auth store found"].filter(Boolean).join("; ")}}import{existsSync as rn}from"node:fs";import{homedir as tn}from"node:os";import Se from"node:path";function nn(){let e=process.env.HERMES_HOME?.trim(),r=e?Se.resolve(e):Se.join(tn(),".hermes");return Se.join(r,"auth.json")}function ie(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=nn(),o=rn(n),s=oe(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?y(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function j(e=new Date().toISOString()){let r=Tr(e);if(r.ready)return{...r,path:"codex_cli"};let t=ie(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var Nr=["low","medium","high"],Kr={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Dr(e,r){let t=N(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function on(e,r){let t=N(e.providerId),n=N(r.providerId),o=Nr.indexOf(t.costTier)-Nr.indexOf(n.costTier);if(o!==0)return o;let s=Kr[e.binding.authSource]-Kr[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ce(e){let r=Cr().map(l=>({providerId:l.id,binding:e.inventory.bindings[l.id]})).filter(l=>l.binding.ready&&Dr(l.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(on)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Dr(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}}import{existsSync as sn}from"node:fs";import{homedir as an}from"node:os";import ln from"node:path";var un="claude";function cn(){let e=an();return[ln.join(e,".claude",".credentials.json")]}function Wr(e=new Date().toISOString()){let r=g(un,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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 t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=cn().find(i=>sn(i)),o=oe(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as kn}from"node:fs";import{homedir as Rn}from"node:os";import W from"node:path";import{closeSync as Eu,existsSync as gn,mkdirSync as Su,openSync as Cu,statSync as Ou,unlinkSync as Au}from"node:fs";d();import D from"node:path";pe();import{existsSync as H,readdirSync as dn}from"node:fs";import S from"node:path";var pn=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function mn(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function fn(e){let r=S.join(e,"versions");if(!H(r))return null;let t=null,n=-1;for(let o of dn(r,{withFileTypes:!0})){if(!o.isDirectory()||!pn.test(o.name))continue;let s=mn(o.name);s==null||s<=n||(n=s,t=S.join(r,o.name))}return t}function Oe(e){let r=e?.trim()||S.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=S.join(r,"node.exe"),n=S.join(r,"index.js");if(H(t)&&H(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=fn(r);if(!o)return null;let s=S.join(o,"node.exe"),i=S.join(o,"index.js");return!H(s)||!H(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}function hn(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:R(),bundledVersionDir:t}}function Mr(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&gn(D.join(D.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Oe(D.dirname(e)):t?{nodeExe:e,indexJs:D.join(D.dirname(e),"index.js"),versionDir:D.dirname(e)}:Oe();if(o)return hn(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:R()}}import{spawnSync as yn}from"node:child_process";function Ae(e,r=process.env){try{let t;try{t=Mr(e)}catch{t={executable:e,prefixArgs:[]}}let n=yn(t.executable,[...t.prefixArgs,"status","--format","json"],{encoding:"utf8",windowsHide:!0,timeout:8e3,env:{...r,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(t){return{ok:!1,note:t instanceof Error?t.message:"agent status probe failed"}}}function we(e=process.env){let r=[],t=e.KYNVER_CURSOR_AUTH_HOME?.trim();t&&(r.push(W.join(t,".config","cursor","auth.json")),r.push(W.join(t,".cursor-agent","auth.json")));let n=Rn();if(r.push(W.join(n,".config","cursor","auth.json")),r.push(W.join(n,".cursor-agent","auth.json")),process.platform==="win32"){let o=e.LOCALAPPDATA?.trim(),s=e.APPDATA?.trim();o&&r.push(W.join(o,"cursor-agent","auth.json")),s&&r.push(W.join(s,"cursor","auth.json"))}return r}var _n="agent";function Ur(e=new Date().toISOString()){let r=g(_n,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!1,authSource:"api_key_env",sessionFingerprint:K("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 t=h(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=we().find(l=>kn(l)),o=Ae(r),s=!!n||o.ok,i=t.ok&&s;return{providerId:"cursor",ready:i,authSource:"oauth_local",sessionFingerprint:n?y(n):void 0,checkedAt:e,note:i?"Local Cursor/Composer OAuth session bound on runner":[t.note,s?void 0:o.note??"no ~/.config/cursor/auth.json or `agent login` session"].filter(Boolean).join("; ")}}import{existsSync as vn,readFileSync as xn}from"node:fs";import{homedir as bn}from"node:os";import Pe from"node:path";var En=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function Sn(){let e=process.env.HERMES_HOME?.trim(),r=e?Pe.resolve(e):Pe.join(bn(),".hermes");return Pe.join(r,".env")}function Cn(e){try{let r=xn(e,"utf8"),t=[];for(let n of En)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Br(e=new Date().toISOString()){let r=g("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=h(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=Sn(),o=vn(n),s=o?Cn(n):[],l=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",u=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:l,sessionFingerprint:o?y(n):void 0,checkedAt:e,note:u?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Lr(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=j(r),n={codex:t,cursor:Ur(r),claude:Wr(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,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:Br(r),hermesOpenAiCodex:ie(r),codexAdapterPath:t.path,readyCount:o}}var On=[/\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],An=[/\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 Ie(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function wn(e){let r=Ie(e,"executorRef").toLowerCase(),t=Ie(e,"title").toLowerCase(),n=Ie(e,"description").toLowerCase(),o=`${r}
|
|
2
2
|
${t}
|
|
3
|
-
${n}`;return On.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":An.some(s=>s.test(o))?"low":"elevated"}function Pn(e){let r=N(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function In(e){let r=e.inventory??Lr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function C(e){let r=Pn({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:r.routingRule,audit:r}}function Fr(e){let r=e.task??{},t=wn(r),n=In({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:j())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=
|
|
3
|
+
${n}`;return On.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":An.some(s=>s.test(o))?"low":"elevated"}function Pn(e){let r=N(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function In(e){let r=e.inventory??Lr();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function C(e){let r=Pn({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:r.routingRule,audit:r}}function Fr(e){let r=e.task??{},t=wn(r),n=In({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:j())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=M;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let p=Ce({inventory:n,riskClass:t});return C(p?{providerId:p.providerId,binding:p.binding,riskClass:t,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:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return C({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return C({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return C({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let l=Ce({inventory:n,riskClass:t});if(l)return C({providerId:l.providerId,binding:l.binding,riskClass:t,routingRule:`orchestration:cost_aware_${l.providerId}`,model:s,escalatedFrom:l.escalatedFrom,escalatedReason:l.escalatedReason});let u=n.bindings.codex;return C({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:u.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...u.ready?{}:{escalatedFrom:"codex",escalatedReason:u.note??"codex oauth not bound"}})}d();var $r="kynver",jr=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],Tn=jr.map(e=>`mcp__${$r}__${e}`);var V="claude-sonnet-4-6",G="claude-opus-4-8";d();d();var wc=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5";function Kn(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.5"}var U=Kn();d();var Te="openai-compatible",id=600*1e3;d();var O="gemini";function A(e=process.env){return e.KYNVER_GEMINI_DEFAULT_MODEL?.trim()||"gemini-2.5-pro"}var B="gemini-api";var Od=600*1e3;var Vr="claude-sonnet-4-6",q="composer-2.5";function m(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Mn(e){if(!e)return;let r=m(e,"workerModelOverride")||m(e,"modelOverride");return r||`${m(e,"title")}
|
|
4
4
|
${m(e,"description")}
|
|
5
|
-
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function Hr(e){return e.toLowerCase()}function le(e=T()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Vr}function se(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?O:"cursor"}function Un(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:q,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:V,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:A(),provider:O,rule:n&&n!==O?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:A(),provider:B,rule:n&&n!==B?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Yr(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var Bn=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Gr(e,r,t){return Bn.has(e)?G:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?G:V}function qr(e){let r=Hr(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=Hr(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Gr(o,r,t);return{provider:"claude",model:i,rule:i===G?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:U,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=f(m(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:U},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=f(m(e,"executorRef"));return{provider:Te,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=f(m(e,"executorRef"));return{provider:B,...i?.model?{model:i.model}:{model:A()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=f(m(e,"executorRef"));return{provider:O,...i?.model?{model:i.model}:{model:A()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:U,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Yr(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Yr(r,t)||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=le();return{model:s,provider:se(s),rule:"default:global"}}function Ln(e){return e?f(m(e,"executorRef")):null}function Fn(e){switch(x(e)){case O:case B:return A();case"claude":return V;case"codex":return U;case"cursor":return q;default:return}}var Ne="explicit:cli_provider",Jr="config:worker_provider";function zr(e,r,t){let n=x(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:Fn(n)??e.model,rule:t}}function $n(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Ne?e:zr(e,t,Ne)}function jn(e,r){if(r.explicitProvider?.trim()||Ke(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=x(t);return n===
|
|
5
|
+
${m(e,"executorRef")}`.match(/\[(?:worker-)?model:\s*([^\]\n]+)\]/i)?.[1]?.trim()||void 0}function Hr(e){return e.toLowerCase()}function le(e=T()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Vr}function se(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":r.startsWith("gemini-")?O:"cursor"}function Un(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:q,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:V,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini"||t==="google"?{model:A(),provider:O,rule:n&&n!==O?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="gemini-api"||t==="gemini_api"||t==="google-api"?{model:A(),provider:B,rule:n&&n!==B?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Yr(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}var Bn=new Set(["report_reviewer","deep_reviewer","plan_reviewer"]);function Gr(e,r,t){return Bn.has(e)?G:r.includes("review")||/^review[\s:]/.test(t)||t.includes("critique")?G:V}function qr(e){let r=Hr(m(e,"executorRef")),t=m(e,"title").toLowerCase(),n=m(e,"priority")||"normal",o=Hr(m(e,"roleLane"));if(r.includes("provider:claude")||r.startsWith("claude:")){let i=Gr(o,r,t);return{provider:"claude",model:i,rule:i===G?"factory:claude_review":"factory:claude_implementation"}}if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:U,rule:"lane:codex_orchestration"};if(r.includes("provider:chatgpt")||r.startsWith("chatgpt:")||r.includes("provider:gpt")||r.startsWith("gpt:")){let i=f(m(e,"executorRef"));return{provider:"codex",...i?.model?{model:i.model}:{model:U},rule:"lane:codex_orchestration"}}if(r.includes("provider:openai")||r.startsWith("openai-compatible:")){let i=f(m(e,"executorRef"));return{provider:Te,...i?.model?{model:i.model}:{},rule:"lane:openai_compatible"}}if(r.includes("provider:gemini-api")||r.startsWith("gemini-api:")){let i=f(m(e,"executorRef"));return{provider:B,...i?.model?{model:i.model}:{model:A()},rule:"lane:gemini_api"}}if(r.includes("provider:gemini")||r.startsWith("gemini:")){let i=f(m(e,"executorRef"));return{provider:O,...i?.model?{model:i.model}:{model:A()},rule:"lane:gemini"}}if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:U,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Yr(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Yr(r,t)||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=le();return{model:s,provider:se(s),rule:"default:global"}}function Ln(e){return e?f(m(e,"executorRef")):null}function Fn(e){switch(x(e)){case O:case B:return A();case"claude":return V;case"codex":return U;case"cursor":return q;default:return}}var Ne="explicit:cli_provider",Jr="config:worker_provider";function zr(e,r,t){let n=x(r);return n===e.provider&&e.rule===t?e:{...e,provider:n,model:Fn(n)??e.model,rule:t}}function $n(e,r){let t=r?.trim();return!t||e.rule.startsWith("explicit:")&&e.rule!==Ne?e:zr(e,t,Ne)}function jn(e,r){if(r.explicitProvider?.trim()||Ke(r.task))return e;let t=r.configuredProvider?.trim();if(!t)return e;let n=x(t);return n===M||n===e.provider?e:zr(e,n,Jr)}function Hn(e){let r,t=Ln(e.task),n=e.explicitModel?.trim()?void 0:t?.model?.trim(),o=!e.explicitProvider?.trim()&&t?.provider?.trim()?t.provider.trim():void 0;if(e.explicitModel?.trim()){let u=e.explicitModel.trim(),c=Un(u,e.explicitProvider);c?r=c:r={model:u,provider:e.explicitProvider?.trim()||se(u),rule:"explicit:cli",requestedModel:u}}else if(n)r={model:n,provider:o||se(n),rule:t?.rule??"executor_ref:model",requestedModel:n};else if(e.task&&ae(e.task)){let u=Mn(e.task),c,p;if(u)c=u,p="task:provider_override";else{let L=typeof e.task.roleLane=="string"?e.task.roleLane.toLowerCase():"",De=typeof e.task.executorRef=="string"?e.task.executorRef.toLowerCase():"",ue=typeof e.task.title=="string"?e.task.title.toLowerCase():"";c=Gr(L,De,ue),p=c===G?"factory:claude_review":"factory:claude_implementation"}r={model:c,provider:"claude",rule:p,requestedModel:c}}else if(e.task&&Object.keys(e.task).length>0){let u=qr(e.task);r={...u,requestedModel:u.model}}else{let u=le();r={model:u,provider:e.explicitProvider?.trim()||se(u),rule:"default:global",requestedModel:u}}r=$n(r,e.explicitProvider),r=jn(r,{explicitProvider:e.explicitProvider,task:e.task,configuredProvider:e.configuredProvider});let s=!!e.configuredProvider?.trim()&&x(e.configuredProvider)!==M&&r.rule==="config:worker_provider",i=Xr({routing:r,task:e.task,explicitProvider:e.explicitProvider??(s?r.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===Ne||i.rule===Jr||k(i.provider)&&(e.explicitProviderIsOperatorOverride||ae(e.task))||i.provider===Te||i.provider===O||i.provider===B||i.provider==="codex")return i;let l=Fr({task:e.task,explicitProvider:e.explicitProvider??i.provider,explicitModel:i.model,inventory:e.orchestrationInventory??void 0});return{provider:l.provider,model:l.provider==="codex"?l.model??i.model??U:i.model,rule:l.rule,requestedModel:i.requestedModel,orchestrationAudit:l.audit}}function Yn(e,r,t){return e||r||t||le()||V}ne();ne();var M="cursor",Vn=new Set(["claude","opus","anthropic"]),Gn=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function J(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function k(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Vn.has(r)?!0:r.includes("claude")||r.includes("opus")}function ae(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&k(r))return!0;let t=J(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=f(J(e,"executorRef"));if(n?.provider&&k(n.provider)||n?.model&&k(qn(n.model)))return!0;let o=J(e,"description");if(Gn.some(i=>i.test(o)))return!0;let s=J(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function qn(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Jn(e,r){return{provider:M,model:q,rule:`policy:cursor_default${r}`,requestedModel:e}}var zn=["explicit:","executor_ref:","factory:","task:"];function Xn(e){return zn.some(r=>e.startsWith(r))}function Ke(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||f(J(e,"executorRef"))?.provider?!0:ae(e)}function Xr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&k(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||Xn(r.rule)||Ke(t)||!k(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Jn(r.model,o)}function Qn(e){let r=e?.executorRef;return typeof r=="string"?r.trim():""}function Qr(e){return e?.trim()||void 0}function Zn(e){let r=Qn(e.task),t=f(r),n=e.explicitProvider?.trim().toLowerCase(),o=Qr(e.explicitModel??void 0),s=n||t?.provider,i=o||t?.model,l=n||o?"cli":t?.rule??"none";if(!s&&!i)return{ok:!0};!s&&i&&(/^claude[-_]/i.test(i)||/^(?:opus|sonnet|haiku)\b/i.test(i))&&(s="claude");let u=e.routing.provider,c=Qr(e.routing.model),p={provider:u,model:c,rule:e.routing.rule};return s&&s!=="cursor"||r&&de(r)||n&&n!=="cursor"?u==="cursor"?{ok:!1,error:`model_routing_mismatch: requested ${s??"non-cursor"}${i?` model=${i}`:""} (${l}) but routing resolved to cursor (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:p}:i&&c&&i!==c&&!k(u)?{ok:!1,error:`model_routing_mismatch: requested model=${i} (${l}) but routing resolved model=${c} (${e.routing.rule})`,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,requested:{provider:s,model:i,source:l},resolved:p}:{ok:!0,resolved:p}}export{q as CURSOR_DEFAULT_MODEL,Vr as GLOBAL_DEFAULT_MODEL,Zn as assessDispatchModelGuard,de as executorRefRequestsNonCursorWorker,qr as inferModelRoutingFromTask,f as parseExecutorRefRoutingIntent,le as resolveGlobalDefaultModel,Yn as resolveModelFallback,Hn as resolveWorkerLaunch};
|