@kynver-app/runtime 0.2.51 → 0.2.53
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 +5 -33
- package/dist/cli.js +82 -82
- package/dist/index.js +100 -100
- package/dist/server/cleanup.js +1 -1
- package/dist/server/monitor.js +1 -1
- package/dist/server/repo-search.js +1 -1
- package/dist/server/worker-policy.js +2 -2
- package/package.json +1 -1
package/dist/server/cleanup.js
CHANGED
|
@@ -3,7 +3,7 @@ var f=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=
|
|
|
3
3
|
`).slice(-r).join(`
|
|
4
4
|
`):""}function Q(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Lt(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function Gr(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var b=f(()=>{"use strict"});var Ws,sl,Ms,il,jt=f(()=>{"use strict";Ws=["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"],sl=new Set(Ws),Ms=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY"],il=new Set(Ms)});import{spawnSync as Gt}from"node:child_process";function ye(e,r,t={}){let n=Gt("git",r,$r({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=Ts(e,r,n);if(t.throwError)throw new Error(o);Ye(o)}return n.stdout||""}function Ts(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function Oe(e){return ye(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
5
|
`).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=Gt("git",r,$r({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 $t(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 Xe(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 Yr(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return Yr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=w(e,["rev-parse",n]);if(m.status!==0)return Yr(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=$t(e,i,a),l=$t(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 Yr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var F=f(()=>{"use strict";oe();b();jt()});var qe=f(()=>{"use strict";F();oe()});function se(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 Ze(e,r){return e[r]?.trim()||null}function Yt(e){let r=e?.split(":")[0]?.trim();return r?se(r):null}function be(e=process.env,r={}){let t=[],n=Yt(r.boxId),o=Yt(Ze(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==se(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:se(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Ze(e,"KYNVER_BOX_KIND");if(i)return o&&o!==se(i)&&t.push(`KYNVER_BOX_ID=${Ze(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:se(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=Ze(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 ie=f(()=>{"use strict"});function Vr(e,r){return e==="forge"?4:Math.max(1,r)}function Qe(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var er=f(()=>{"use strict"});var Vt=f(()=>{"use strict"});import{existsSync as Us,readFileSync as Bs,statfsSync as Ks}from"node:fs";function zr(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Us(e))continue;let r=Bs(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function zt(e={}){if(!(e.forceWsl===void 0?zr():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Se,n=e.wslHostFreeWarnBytes??Fs,o=e.wslHostFreeCriticalBytes??Hs,s=e.statfs??Ks,i;try{i=s(t)}catch(R){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${R.message}`,probeError:R.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,m=!c&&!d,g=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Ls()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Ls(){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`. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var Fs,Hs,Se,Jr=f(()=>{"use strict";Fs=25*1024*1024*1024,Hs=12*1024*1024*1024,Se="/mnt/c"});import{execFileSync as Jt}from"node:child_process";import{existsSync as tr,readFileSync as Xt,readdirSync as js,statSync as $s}from"node:fs";import Xr from"node:path";function rr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function qt(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Jt("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()||Se;return r&&tr(Xr.join(t,"Users",r))?r:null}function Js(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()||Se,n=e.windowsUser??qt();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Xs(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 qs(){try{if(tr("/proc/sys/kernel/core_pattern"))return Xt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Jt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Zs(e){return!!(e&&/wsl-capture-crash/i.test(e))}function Qs(e,r=Se){let t=Xr.join(r,"Users",e,".wslconfig");if(!tr(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Xt(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 ei(e){if(!tr(e))return[];let r=js(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Xr.join(e,n.name);try{let s=$s(o),i=Xs(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 ve(e={}){if(!(e.forceWsl===void 0?zr():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Se,n=e.windowsUser??qt(),o=e.warnBelowBytes??rr("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Gs),s=e.criticalBelowBytes??rr("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",Ys),i=e.warnCount??rr("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Vs),a=e.criticalCount??rr("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",zs),u=(e.readCorePattern??qs)(),l=Zs(u),c=null;n&&(c=(e.readWslConfig??Qs)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,g=Js({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!g)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:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??ei)(g)}catch(P){return{ok:!1,path:g,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${g}: ${P.message}`,probeError:P.message}}let R=p.reduce((P,h)=>P+h.bytes,0),S=p.length,y=[...new Set(p.map(P=>P.executableHint).filter(P=>!!P))],A=R>=s,j=R>=o,B=S>=a,je=S>=i,te=!(A||B||j||je),ne=null;if(!te){let P=A||B?"critical":"warning",h=(R/1024**3).toFixed(1),q=y.length>0?y.join(", "):"unknown";ne=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${g} (executables: ${q}). `+ri({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:te,path:g,windowsUser:n,dumpCount:S,totalBytes:R,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:y,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:ne,probeError:null}}function ri(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 \u2014 see docs/runbooks/wsl-disk-pressure.md);"),r.push("full runbook: docs/runbooks/wsl-disk-pressure.md."),r.join(" ")}var Gs,Ys,Vs,zs,nr=f(()=>{"use strict";Jr();Gs=5*1024*1024*1024,Ys=10*1024*1024*1024,Vs=2,zs=4});import{statfsSync as ti}from"node:fs";function or(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??ni,n=e.diskFreeCriticalBytes??oi,o=e.diskMaxUsedPercent??si,s=e.diskHardMaxUsedPercent??ii,i=ti(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,m=a<t*2,g=m&&l>o,p=m&&l>s,R=!c&&!d&&!g&&!p,S=e.skipWslHostCheck?null:zt(e.wslHost),y=e.skipWslCrashDumpCheck?null:ve(e.wslCrashDumps),A=R&&(S?S.ok:!0)&&(y?y.ok:!0),j=null;return A||(j=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,g?`used percent above cap ${o}%`:null,S&&!S.ok?S.reason:null,y&&!y.ok?y.reason:null].filter(Boolean).join("; ")),ai({ok:A,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:j,wslHost:S,wslCrashDumps:y?{ok:y.ok,path:y.path,dumpCount:y.dumpCount,totalBytes:y.totalBytes,executables:y.executables,wslCaptureEnabled:y.wslCaptureEnabled,dumpsDisabledInWslConfig:y.dumpsDisabledInWslConfig,reason:y.reason,probeError:y.probeError}:null})}function ai(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 ni,oi,si,ii,sr=f(()=>{"use strict";nr();Jr();ni=30*1024*1024*1024,oi=15*1024*1024*1024,si=80,ii=90});import{existsSync as ui,readdirSync as li,statSync as ci}from"node:fs";import qr from"node:path";function ir(){return Qt()}function Zr(){let{runsDir:e}=ir();return Zt(e)}function ar(e){return Zt(G(e))}function di(e){try{return ci(e).isDirectory()}catch{return!1}}function Zt(e){if(!ui(e))return[];let r=[];for(let t of li(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=qr.join(e,t.name);if(!di(n))continue;let o=x(qr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Qr(e){let{runsDir:r}=ir();Ft(qr.join(et(r,e.id),"run.json"),e)}function Ie(e){let{harnessRoot:r}=ir();return De(r,e)}function De(e,r){return et(G(e),v(r))}var ae=f(()=>{"use strict";Y();b()});import{existsSync as pi,readdirSync as mi}from"node:fs";import fi from"node:path";function rt(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=fi.join(Ie(e.id),"workers");if(!pi(t))return[...r];for(let n of mi(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var tt=f(()=>{"use strict";ae();b()});function nt(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 en(e){let r=e.trim();if(!r)return null;let t=nt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=nt(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=nt(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function rn(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?en(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=en(t);return n||t}var tn=f(()=>{"use strict"});import{existsSync as gi,readFileSync as hi}from"node:fs";function nn(e){return e==="complete"}function on(e){return nn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function xe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!gi(e))return r;let t=Date.now()+ki,n=new Date(t).toISOString(),o=hi(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=Ve(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)),nn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=rn(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 ki,ur=f(()=>{"use strict";tn();b();ki=6e4});function an(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function lr(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 un(e){let r=an(e[0]);return!!(r&&Ri.has(r))}function bi(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Si(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 ln(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ot(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function vi(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function xi(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;sn.has(n)&&(t+=1);continue}r.push(n)}}return r}function _i(e){let r=!1,t=e.map((o,s)=>{let i=vi(o),a=e[s-1];return a&&sn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=xi(t);if(n.length===2){let[o,s]=n;if(ot(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Si(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 cn(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 cr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=lr(r);if(!t.length)return{command:r,wrapped:!1};let n=an(t[0]);if(!n||!yi.has(n))return{command:r,wrapped:!1};let o=cn(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 Ci(e,r){let t=e.trim(),n=lr(t),o=cn(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Ei(e){let r=e.trim(),t=cr(r),n=lr(t.command);if(!n.length||!un(n))return{segment:r,changed:!1};let o=_i(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:Ci(r,s),changed:!0}:{segment:s,changed:!0}}function st(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=Ei(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function dn(e){let r=cr(e).command,t=lr(r.trim());return t.length&&un(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function pn(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 wi(e){let{pattern:r,target:t}=pn(e);return r?ot(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:ln(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Ai(e){let{pattern:r,target:t}=pn(e);if(!r)return null;if(ot(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&ln(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Pi(e){if(e.kind==="bad_scope"&&e.pattern
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Ve(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)),nn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=rn(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 ki,ur=f(()=>{"use strict";tn();b();ki=6e4});function an(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function lr(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 un(e){let r=an(e[0]);return!!(r&&Ri.has(r))}function bi(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Si(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 ln(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ot(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function vi(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function xi(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;sn.has(n)&&(t+=1);continue}r.push(n)}}return r}function _i(e){let r=!1,t=e.map((o,s)=>{let i=vi(o),a=e[s-1];return a&&sn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=xi(t);if(n.length===2){let[o,s]=n;if(ot(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Si(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 cn(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 cr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=lr(r);if(!t.length)return{command:r,wrapped:!1};let n=an(t[0]);if(!n||!yi.has(n))return{command:r,wrapped:!1};let o=cn(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 Ci(e,r){let t=e.trim(),n=lr(t),o=cn(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Ei(e){let r=e.trim(),t=cr(r),n=lr(t.command);if(!n.length||!un(n))return{segment:r,changed:!1};let o=_i(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:Ci(r,s),changed:!0}:{segment:s,changed:!0}}function st(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=Ei(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function dn(e){let r=cr(e).command,t=lr(r.trim());return t.length&&un(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function pn(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 wi(e){let{pattern:r,target:t}=pn(e);return r?ot(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:ln(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Ai(e){let{pattern:r,target:t}=pn(e);if(!r)return null;if(ot(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&ln(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Pi(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 Oi(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 it(e){let r=e.meta?.trim()||(e.command?Oi(e.command):null)||null;if(r){let t=wi(r),n=Pi(t);if(n)return n;let o=Ai(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=st(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 Ri,yi,sn,mn=f(()=>{"use strict";Ri=new Set(["rg","ripgrep","grep"]),yi=new Set(["bash","sh","dash","zsh"]),sn=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Ne(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ni(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 We(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Wi(e){let r=e.metadata;if(!We(r))return null;let t=r.vulnerabilities;if(!We(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 Mi(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 Ti(e,r){let t=e.error;if(We(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?Ne(o.split(`
|
|
7
7
|
`).find(Boolean)??o,160):"npm audit failed"}function Ui(e){let r=`${e.stdout}
|
|
8
8
|
${e.stderr}`.trim(),t=Ni(r);if(!t||!We(t)){let o=Ne(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(We(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Ti(t,e.stderr)}`};let n=Wi(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:Mi(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Bi(e){return Ii.test(e)}function Ki(e){let r=cr(e).command;return fn.test(e)||fn.test(r)||dn(e)}function Fi(e){let r=it({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&&Di.test(n)){let i=Ne(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=st(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=Ne(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 gn(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Bi(e.command)){let i=r.trim()||n.trim()||t.trim();return Ui({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ki(e.command))return Fi({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=it({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=Ne(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Ii,fn,Di,hn=f(()=>{"use strict";mn();Ii=/\bnpm\s+audit\b/i,fn=/\b(rg|ripgrep)\b/i,Di=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Hi,readFileSync as Li}from"node:fs";function ji(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function $i(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 Gi(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function _e(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Yi(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Vi(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 zi(e,r){let t=Yi(r);if(!t)return;let n=_e(t.input_tokens)??_e(t.inputTokens)??_e(t.prompt_tokens),o=_e(t.output_tokens)??_e(t.outputTokens)??_e(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Vi(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Ji(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 Xi(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function kn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Hi(e))return r;let t=Li(e,"utf8").split(`
|
|
9
9
|
`).filter(Boolean);for(let n of t){let o=Ve(n);if(!o)continue;let s=ji(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(l=>l?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=$i(a);u&&(r.currentTool=u)}let i=Ji(o);i&&Xi(r,gn({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Gi(r,o),zi(r,o)}return r}var Rn=f(()=>{"use strict";hn();b()});function Zi(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function yn(e){let r=(e??"").trim();if(!r)return null;for(let t of qi)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Zi(r)}`};return null}var qi,bn=f(()=>{"use strict";qi=[{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 Sn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qi(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 ea(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Sn(e.head)}function ra(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 vn(e){if(e.alive||Qi(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Sn(e.headCommit)??ea(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:ra(s,r,t)}}var xn=f(()=>{"use strict"});function Me(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ta(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 na(e){if(Me(e.headCommit)||Me(e.prUrl)||Me(e.artifactBundlePath)||Me(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Me(r.head))}function Ce(e){return ta(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:na(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 _n(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var dr=f(()=>{"use strict"});function at(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 Cn(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function pr(e){let r=e.trim();if(!r)return null;let t=at(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=at(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=at(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Cn(u);for(let c of n){let d=Cn(c);d>l&&(u=c,l=d)}return u}var ut=f(()=>{"use strict"});function En(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 wn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function oa(e){return new Set(e.map(r=>wn(En(r)??r)).filter(Boolean))}function An(e,r,t){let n=En(e)??e;if(!n)return"unrelated";let o=wn(n);return oa(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Pn=f(()=>{"use strict"});function Ee(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function sa(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ue(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ee(e)}function mr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function On(e){let r=null;if(typeof e=="string"){let o=pr(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=ue(String(s.prUrl??s.pr_url??"")),a=Ee(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ee(s.mergeCommit??s.merge_commit),reason:Ee(s.reason)})}return n}function In(e,r){let t=[],n=ue(Ee(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ue(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Dn(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(!sa(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?ue(Ee(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ue(r.targetPrUrls[0]):null):null;if(s){let d=In(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let R of d)if(R!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${R} instead of canonical target ${s}`}}let p=On(n).find(R=>R.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=On(n),a=new Map(i.map(d=>[mr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>mr(ue(d)??d)).filter(Boolean)),l=In(t,n);if(r.landingOnly)for(let d of l){let m=a.get(mr(d)),g=An(d,r.targetPrUrls,m);if(!(g==="contract"||g==="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 m=mr(ue(d)??d),g=a.get(m);if(!g){c.push(m);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(m)}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 Nn(e){if(e.blocked)return e.detail??e.reason}var Wn=f(()=>{"use strict";ut();Pn()});function ua(e){let r=Date.now();if(e.completionBlocker&&!Mn(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ca(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=Ce(o);if(s.blocked){let i=_n(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Dn({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Nn(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(la(e))return{state:"done",reason:"empty abandoned worker record"};let o=yn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=vn({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>ia)return{state:"needs_attention",reason:`no first stream event ${Gr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>aa?{state:"stale",reason:`no log/event/heartbeat activity for ${Gr(n)}s`}:{state:"ok",reason:"recent activity"}}function Mn(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function la(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 ca(e){let r=null;if(typeof e=="string"?r=pr(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 da(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??on(t))}function Te(e,r={}){let t=kn(e.stdoutPath),n=xe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=da(e,t.finalResult,n),i=o?!1:Q(e.pid),a=ze(e.stdoutPath),u=ze(e.stderrPath),l=ze(e.heartbeatPath),c=Oe(e.worktreePath),d=Xe(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=Lt([t.lastEventAt,n.lastHeartbeatAt,Je(e.stdoutPath),Je(e.stderrPath),Je(e.heartbeatPath)]),g=t.error||!i&&!s&&Ht(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,R=Mn(p)?null:p,S=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,y=ua({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:c,gitAncestry:d,completionBlocker:R,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=R||y.state==="blocked"?"blocked":o||y.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:A,attention:y,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:m,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:g,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 le(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Tn(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ia,aa,ce=f(()=>{"use strict";ur();Rn();bn();xn();F();dr();Wn();ut();b();ia=18e4,aa=6e5});var Un=f(()=>{"use strict";ce()});function Bn(e,r={}){let t=r.perWorkerMemBytes??lt,n=r.memReserveBytes??ct,o=r.memUtilization??dt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,fr)}var lt,ct,dt,fr,Kn=f(()=>{"use strict";Vt();pe();ie();er();gr();sr();ae();tt();Un();b();lt=500*1024*1024,ct=4*1024*1024*1024,dt=.85,fr=64});function Ue(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function pt(e){let r=e.config??{},t=e.env??process.env,n=Ue(r.perWorkerMemBytes,lt),o=Ue(r.memReserveBytes,ct),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):dt)),i=Bn(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ue(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Ue(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,fr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Ue(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,fr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var gr=f(()=>{"use strict";Kn()});import{homedir as pa}from"node:os";import ma from"node:path";var Fn,mt=f(()=>{"use strict";Fn=ma.join(pa(),".kynver",".env")});var Hn=f(()=>{"use strict"});var Ln=f(()=>{"use strict";Hn()});var jn=f(()=>{"use strict"});var ft=f(()=>{"use strict";Ln();jn()});var $n=f(()=>{"use strict"});var Gn=f(()=>{"use strict";$n()});var hr=f(()=>{"use strict";mt();oe();pe();ft();Gn()});var zn=f(()=>{"use strict";ie();ie()});var Jn=f(()=>{"use strict";mt();ft();hr()});import{existsSync as V,mkdirSync as ga,readdirSync as kr,renameSync as Xn,statSync as ha}from"node:fs";import z from"node:path";function Zn(e){try{return ha(e).isDirectory()}catch{return!1}}function ka(e){if(!V(e))return!0;for(let r of qn){let t=z.join(e,r);if(V(t)&&(!Zn(t)||kr(t).length>0))return!1}return!0}function Ra(e){let r=z.join(e,"runs");if(!V(r)||!Zn(r))return!1;for(let t of kr(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 ya(e){let r=z.join(e,"runs");if(!V(r))return!1;for(let t of kr(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 ba(e){let r=z.join(e,"ghost");return V(r)?!V(z.join(r,"runs")):ya(e)}function Qn(e){return Ra(e.sharedRoot)?ka(e.forgeRoot)?ba(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 eo(e,r){ga(r,{recursive:!0});for(let t of qn){let n=z.join(e,t),o=z.join(r,t);if(V(n)){if(V(o)&&kr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(V(o)){Xn(n,o);continue}Xn(n,o)}}}var qn,ro=f(()=>{"use strict";b();qn=["runs","worktrees"]});import{existsSync as E}from"node:fs";import{homedir as Sa}from"node:os";import C from"node:path";function gt(e=process.env){return e.HOME?.trim()||Sa()}function ht(e=process.env){return C.join(gt(e),".kynver","harness")}function Rr(e){let r=C.resolve(Z(e.trim()));for(;va.has(C.basename(r));)r=C.dirname(r);return r}function xa(e,r=process.env){return C.join(ht(r),e)}function _a(e=process.env){let r=ht(e);if(E(C.join(r,"runs")))return!0;if(E(r)&&!E(C.join(r,"ghost"))&&!E(C.join(r,"forge")))return E(r);let t=C.join(gt(e),to);return E(t)}function yr(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Rr(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Rr(n),source:"config"};let o=xa(e.boxKind,r);if(E(C.join(o,"runs"))||E(o)&&!Ca(o))return{harnessRoot:o,source:"box_scoped"};let i=ht(r);if(e.boxKind==="forge"){let a=Qn({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&&eo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&_a(r)){if(E(C.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(E(i)&&!E(C.join(i,"ghost"))&&!E(C.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=C.join(gt(r),to);if(E(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Ca(e){if(!E(e))return!0;for(let r of["runs","worktrees"]){let t=C.join(e,r);if(E(t))return!1}return!0}var to,va,kt=f(()=>{"use strict";oe();ro();to=C.join(".openclaw","harness");va=new Set(["runs","worktrees"])});import no from"node:os";function br(e){return e?.trim()?e.trim():null}function Ea(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function wa(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 Sr(e=de(),r=process.env,t={}){let n=be(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||br(r.KYNVER_BOX_KIND)),a=t.strict===!0||wa(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 R="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(R):o.push(`${R} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=br(e.runnerId),l=br(r.KYNVER_RUNTIME_ID)??br(r.OPENCLAW_RUNTIME_ID),c=u??l??Ea(n.boxKind,no.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 m=pt({config:e,env:r,totalMemBytes:no.totalmem()}),g=Qe(n.boxKind,m.configuredMaxWorkers??Vr(n.boxKind,m.autoCap)),p=yr({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return p.migrationBlocker&&s.push(p.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:g,workerCapSource:m.workerCapSource,harnessRoot:p.harnessRoot,harnessRootSource:p.source},errors:s,warnings:o}}var vr=f(()=>{"use strict";pe();ie();er();gr();kt()});var so=f(()=>{"use strict";qe();ie();zn();pe();hr();Jn();b();vr()});import{existsSync as Ia,mkdirSync as rp,readFileSync as Da,writeFileSync as tp}from"node:fs";import{homedir as Na,totalmem as op}from"node:os";import Rt from"node:path";function Wa(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:Z(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:Z(e.defaultRepo.trim())}:{}}}function de(){if(!Ia(io))return{};try{return Wa(JSON.parse(Da(io,"utf8")))}catch{return{}}}var ao,io,hp,kp,Rp,pe=f(()=>{"use strict";qe();oe();b();ie();er();gr();sr();hr();so();vr();ao=Rt.join(Na(),".kynver"),io=Rt.join(ao,"config.json"),hp=Rt.join(ao,"credentials");kp=500*1024*1024,Rp=4*1024*1024*1024});import yt from"node:path";function I(e){return Rr(e)}function ee(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return I(e);let r=de(),t=r.harnessRoot?.trim();if(t)return I(t);let n=Sr(r,process.env);return n.identity?n.identity.harnessRoot:yr({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function G(e){return yt.join(I(e),"runs")}function we(e){return yt.join(I(e),"worktrees")}function Qt(){let e=ee();return{harnessRoot:e,runsDir:G(e),worktreesDir:we(e)}}function et(e,r){return yt.join(e,v(r))}var Y=f(()=>{"use strict";pe();kt();vr();b()});Y();import M from"node:path";dr();import Er from"node:path";F();ce();var bt=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function uo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of bt)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!uo(n)})}function me(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 Be(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?D(e.changedFiles).length>0:!!(me(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Ke(e){return e.status||(e.status=Te(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function St(e,r){if(e.status)return D(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Oe(e.worktreePath);return D(t).length>0}function Ma(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function vt(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=Ma(e);if(o&&!Q(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Oe(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"}:Xe(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??me(s)};return e.status=c,c}return Ke(e)}ce();ae();tt();ce();b();import Ta from"node:path";var Ua=new Set(["running","dispatching","pending","queued","needs_attention"]),fe=new Set(["completed","failed","cancelled","done"]);function ge(e){let r=rt(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Ta.join(Ie(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=Te(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Tn(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function lo(){let e=[];for(let r of Zr()){if(!Ua.has(r.status))continue;let t=ge(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Qr(r),e.push({runId:r.id,from:n,to:t})}return e}ce();ur();import{existsSync as xr,mkdirSync as rm,readdirSync as mo,renameSync as tm,statSync as Ba}from"node:fs";import he from"node:path";pe();qe();oe();F();ur();Y();ae();Y();b();import re from"node:path";var Xp=`${re.sep}runs${re.sep}runs${re.sep}`;function co(e){return{workerJsonPath:re.join(e,"worker.json"),stdoutPath:re.join(e,"stdout.jsonl"),stderrPath:re.join(e,"stderr.log"),heartbeatPath:re.join(e,"heartbeat.jsonl"),lastStatusPath:re.join(e,"last-status.json")}}b();var Fe=900*1e3,dm=3600*1e3;function fo(e,r){let t=he.resolve(e),n=he.resolve(G(r)),o=he.relative(n,t);return o!==".."&&!o.startsWith("..")&&!he.isAbsolute(o)}function Ka(e){if(!xr(e))return[];try{return mo(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Fa(e){let r=he.join(e,"workers");if(!xr(r))return[];try{return mo(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function po(e,r,t){if(!xr(e))return!1;try{let n=r-Ba(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ha(e,r=Date.now(),t=Fe){if(!xr(e))return!1;let n=co(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&Q(o.pid))return!0;let s=xe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(po(n.stdoutPath,r,t)||po(n.heartbeatPath,r,t))}function La(e,r=Date.now(),t=Fe){for(let n of Fa(e))if(Ha(he.join(e,"workers",n),r,t))return!0;return!1}function go(e,r=Date.now()){let t=new Set,n=G(e);for(let o of Ka(n)){let s=he.join(n,o);La(s,r)&&t.add(`${e}\0${o}`)}return t}b();function xt(e,r=Date.now(),t=Fe){let n=xe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function _r(e,r=Date.now(),t=Fe){return Q(e.pid)?!0:xt(e,r,t)}function ja(e,r){return r?r.runTerminalCache.derive(e.run):ge(e.run)}function J(e,r=Date.now()){return _r(e.worker,r)}function _t(e,r){return fe.has(e.run.status)?!1:ja(e,r)!==null}function ho(e,r,t=Date.now()){if(J(e,t))return!0;if(fe.has(e.run.status)||_t(e,r))return!1;let n=Ke(e);return le(n)?!1:!!J(e,t)}dr();ce();function ko(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(J(e))return!0;let n=r??Ke(e);return!!(!le(n)||Be(n)||D(n.changedFiles).length>0||Ce({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:me(n.finalResult)}).blocked)}F();b();import{existsSync as yo,mkdirSync as $a,writeFileSync as Ro}from"node:fs";import Cr from"node:path";function bo(e,r,t){return Cr.join(e,"salvage",v(r),v(t))}function So(e){return yo(Cr.join(bo(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function vo(e){let r=bo(e.harnessRoot,e.indexed.runId,e.indexed.workerName);$a(r,{recursive:!0});let t=Cr.join(r,"salvage.patch"),n=!1;if(yo(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(`
|
package/dist/server/monitor.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=[t],t}};function Y(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function me(e){let r=e.trim();if(!r)return null;let n=Y(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Y(s[1]??"");u&&t.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Y(r.slice(i,a+1));u&&t.push(u)}return t.length>0?t[t.length-1]:null}function fe(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?me(r)??(r.trim()||null):r;let n=typeof e.summary=="string"?e.summary.trim():"";if(!n)return null;let t=me(n);return t||n}var pe=l(()=>{"use strict"});import{existsSync as Tr,mkdirSync as lt,readFileSync as Kr,readdirSync as ut,renameSync as ct,rmSync as dt,statSync as ge,writeFileSync as mt}from"node:fs";function V(e){console.error(e),process.exit(1)}function G(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function O(e){try{return JSON.parse(e)}catch{return null}}function w(e){try{return ge(e).size}catch{return 0}}function I(e){try{return ge(e).mtime.toISOString()}catch{return null}}function he(e,r){return Tr(e)?Kr(e,"utf8").split(`
|
|
2
2
|
`).slice(-r).join(`
|
|
3
3
|
`):""}function P(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ye(e){let r=null,n=-1/0;for(let t of e){if(!t)continue;let o=Date.parse(t);Number.isFinite(o)&&o>n&&(n=o,r=t)}return r}function z(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=l(()=>{"use strict"});import{existsSync as Ur,readFileSync as Br}from"node:fs";function be(e){return e==="complete"}function ke(e){return be(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Re(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Ur(e))return r;let n=Date.now()+Dr,t=new Date(n).toISOString(),o=Br(e,"utf8").split(`
|
|
4
|
-
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):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)),be(r.lastHeartbeatPhase)&&(r.terminalFinalResult=fe(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 Dr,xe=l(()=>{"use strict";pe();p();Dr=6e4});function _e(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function N(e){if(!e)return[];let r=[],n="",t,o=!1;for(let s of e){if(o){n+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(t){s===t?t=void 0:n+=s;continue}if(s==='"'||s==="'"){t=s;continue}if(/\s/.test(s)){n&&(r.push(n),n="");continue}n+=s}return n&&r.push(n),r}function ve(e){let r=_e(e[0]);return!!(r&&Mr.has(r))}function Hr(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function $r(e){if(!e||e.includes("*"))return null;let r=Hr(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Ee(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function J(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Lr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function jr(e){let r=[];for(let n=1;n<e.length;n+=1){let t=e[n];if(t){if(t==="--"){r.push(...e.slice(n+1));break}if(t.startsWith("-")){if(t.includes("="))continue;Se.has(t)&&(n+=1);continue}r.push(t)}}return r}function Yr(e){let r=!1,n=e.map((o,s)=>{let i=Lr(o),a=e[s-1];return a&&Se.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),t=jr(n);if(t.length===2){let[o,s]=t;if(J(s))return{argv:[n[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=$r(s);if(i)return{argv:[n[0]??"rg","-g",i,o,"."],changed:!0}}return r&&t.length===1?{argv:[...n,"."],changed:!0}:{argv:n,changed:r}}function Ce(e){for(let r=1;r<e.length;r+=1){let n=e[r];if(n&&(n==="-c"||n==="-lc"||n==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(n)))return r+1}return-1}function W(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let n=N(r);if(!n.length)return{command:r,wrapped:!1};let t=_e(n[0]);if(!t||!Fr.has(t))return{command:r,wrapped:!1};let o=Ce(n);if(o<0||o>=n.length)return{command:r,wrapped:!1};let s=n.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function Vr(e,r){let n=e.trim(),t=N(n),o=Ce(t);if(o<0)return r;let s=t.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Gr(e){let r=e.trim(),n=W(r),t=N(n.command);if(!t.length||!ve(t))return{segment:r,changed:!1};let o=Yr(t);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return n.wrapped?{segment:Vr(r,s),changed:!0}:{segment:s,changed:!0}}function q(e){let r=e.trim();if(!r)return{command:r,changed:!1};let n=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",t=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=t.map(i=>{let a=Gr(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(n),changed:!0}:{command:r,changed:!1}}function Ae(e){let r=W(e).command,n=N(r.trim());return n.length&&ve(n)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Oe(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 n=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return n?{pattern:n[1],target:n[2]?.trim()}:{}}function zr(e){let{pattern:r,target:n}=Oe(e);return r?J(n)?{kind:"rg_exclude_syntax",pattern:r,target:n}:Ee(n)?{kind:"bad_scope",pattern:r,target:n}:{kind:"not_repo_search",pattern:r,target:n}:{kind:"not_repo_search"}}function Jr(e){let{pattern:r,target:n}=Oe(e);if(!r)return null;if(J(n)){let t=`${n.trim()}/**`;return{command:`rg "${r}" -g '${t}' .`,changed:!0}}return n&&Ee(n)?{command:`rg -g ${n} "${r}" .`,changed:!0}:null}function qr(e){if(e.kind==="bad_scope"&&e.pattern
|
|
4
|
+
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):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)),be(r.lastHeartbeatPhase)&&(r.terminalFinalResult=fe(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 Dr,xe=l(()=>{"use strict";pe();p();Dr=6e4});function _e(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function N(e){if(!e)return[];let r=[],n="",t,o=!1;for(let s of e){if(o){n+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(t){s===t?t=void 0:n+=s;continue}if(s==='"'||s==="'"){t=s;continue}if(/\s/.test(s)){n&&(r.push(n),n="");continue}n+=s}return n&&r.push(n),r}function ve(e){let r=_e(e[0]);return!!(r&&Mr.has(r))}function Hr(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function $r(e){if(!e||e.includes("*"))return null;let r=Hr(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Ee(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function J(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Lr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function jr(e){let r=[];for(let n=1;n<e.length;n+=1){let t=e[n];if(t){if(t==="--"){r.push(...e.slice(n+1));break}if(t.startsWith("-")){if(t.includes("="))continue;Se.has(t)&&(n+=1);continue}r.push(t)}}return r}function Yr(e){let r=!1,n=e.map((o,s)=>{let i=Lr(o),a=e[s-1];return a&&Se.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),t=jr(n);if(t.length===2){let[o,s]=t;if(J(s))return{argv:[n[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=$r(s);if(i)return{argv:[n[0]??"rg","-g",i,o,"."],changed:!0}}return r&&t.length===1?{argv:[...n,"."],changed:!0}:{argv:n,changed:r}}function Ce(e){for(let r=1;r<e.length;r+=1){let n=e[r];if(n&&(n==="-c"||n==="-lc"||n==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(n)))return r+1}return-1}function W(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let n=N(r);if(!n.length)return{command:r,wrapped:!1};let t=_e(n[0]);if(!t||!Fr.has(t))return{command:r,wrapped:!1};let o=Ce(n);if(o<0||o>=n.length)return{command:r,wrapped:!1};let s=n.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function Vr(e,r){let n=e.trim(),t=N(n),o=Ce(t);if(o<0)return r;let s=t.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Gr(e){let r=e.trim(),n=W(r),t=N(n.command);if(!t.length||!ve(t))return{segment:r,changed:!1};let o=Yr(t);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return n.wrapped?{segment:Vr(r,s),changed:!0}:{segment:s,changed:!0}}function q(e){let r=e.trim();if(!r)return{command:r,changed:!1};let n=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",t=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=t.map(i=>{let a=Gr(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(n),changed:!0}:{command:r,changed:!1}}function Ae(e){let r=W(e).command,n=N(r.trim());return n.length&&ve(n)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Oe(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 n=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return n?{pattern:n[1],target:n[2]?.trim()}:{}}function zr(e){let{pattern:r,target:n}=Oe(e);return r?J(n)?{kind:"rg_exclude_syntax",pattern:r,target:n}:Ee(n)?{kind:"bad_scope",pattern:r,target:n}:{kind:"not_repo_search",pattern:r,target:n}:{kind:"not_repo_search"}}function Jr(e){let{pattern:r,target:n}=Oe(e);if(!r)return null;if(J(n)){let t=`${n.trim()}/**`;return{command:`rg "${r}" -g '${t}' .`,changed:!0}}return n&&Ee(n)?{command:`rg -g ${n} "${r}" .`,changed:!0}:null}function qr(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 Xr(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 X(e){let r=e.meta?.trim()||(e.command?Xr(e.command):null)||null;if(r){let n=zr(r),t=qr(n);if(t)return t;let o=Jr(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 n=q(e.command);if(n.changed)return`Ripgrep scope may be invalid. Retry with: \`${n.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 Mr,Fr,Se,we=l(()=>{"use strict";Mr=new Set(["rg","ripgrep","grep"]),Fr=new Set(["bash","sh","dash","zsh"]),Se=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function v(e,r=200){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function en(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let n=r.indexOf("{"),t=r.lastIndexOf("}");if(n>=0&&t>n)try{return JSON.parse(r.slice(n,t+1))}catch{return null}return null}function E(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function rn(e){let r=e.metadata;if(!E(r))return null;let n=r.vulnerabilities;if(!E(n))return null;let t=s=>typeof n[s]=="number"?n[s]:0,o={info:t("info"),low:t("low"),moderate:t("moderate"),high:t("high"),critical:t("critical"),total:t("total")};return typeof n.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function nn(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 n=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${n}) \u2014 remediation required`}function tn(e,r){let n=e.error;if(E(n)){let s=typeof n.summary=="string"?n.summary.trim():"",i=typeof n.code=="string"?n.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let t=typeof e.message=="string"?e.message.trim():"";if(t)return t;let o=r.trim();return o?v(o.split(`
|
|
5
5
|
`).find(Boolean)??o,160):"npm audit failed"}function on(e){let r=`${e.stdout}
|
|
6
6
|
${e.stderr}`.trim(),n=en(r);if(!n||!E(n)){let o=v(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(E(n.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${tn(n,e.stderr)}`};let t=rn(n);return t?e.exitCode===0&&t.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:t}:{kind:"audit_findings",exitCode:e.exitCode,summary:nn(t),audit:t}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function sn(e){return Zr.test(e)}function an(e){let r=W(e).command;return Ie.test(e)||Ie.test(r)||Ae(e)}function ln(e){let r=X({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 t=(e.stderr||e.interleaved).trim();if(t&&Qr.test(t)){let i=v(t,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=q(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 n=v(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${n}`}}function Pe(e){let r=e.stdout??"",n=e.stderr??"",t=e.interleavedOutput??"";if(sn(e.command)){let i=r.trim()||t.trim()||n.trim();return on({exitCode:e.exitCode,stdout:i,stderr:n})}if(an(e.command))return ln({command:e.command,exitCode:e.exitCode,stdout:r,stderr:n,interleaved:t});let o=X({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=v(t||r||n||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Zr,Ie,Qr,Ne=l(()=>{"use strict";we();Zr=/\bnpm\s+audit\b/i,Ie=/\b(rg|ripgrep)\b/i,Qr=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as un,readFileSync as cn}from"node:fs";function dn(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function mn(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let n=r.slice(0,-8);return n.length?n:r}return null}function fn(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function R(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function pn(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function gn(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 n=Object.keys(r)[0];if(n?.trim())return n.trim()}}function hn(e,r){let n=pn(r);if(!n)return;let t=R(n.input_tokens)??R(n.inputTokens)??R(n.prompt_tokens),o=R(n.output_tokens)??R(n.outputTokens)??R(n.completion_tokens);if(t===void 0&&o===void 0)return;let s=gn(r)??e.usage?.model;e.usage={...t!==void 0?{inputTokens:t}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function yn(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let n=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!n||typeof n!="object"||Array.isArray(n))return null;let t=n,o=t.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=t.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,m=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:m,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function bn(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function We(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!un(e))return r;let n=cn(e,"utf8").split(`
|
|
7
7
|
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=dn(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(m=>m?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=mn(a);u&&(r.currentTool=u)}let i=yn(o);i&&bn(r,Pe({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&fn(r,o),hn(r,o)}return r}var Te=l(()=>{"use strict";Ne();p()});function Rn(e,r=240){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function Ke(e){let r=(e??"").trim();if(!r)return null;for(let n of kn)if(n.test.test(r))return{blocked:!0,reason:`${n.label}: ${Rn(r)}`};return null}var kn,Ue=l(()=>{"use strict";kn=[{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 Be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function xn(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 Sn(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Be(e.head)}function _n(e,r,n){let t=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&t.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&n){let o=n.length>12?n.slice(0,12):n;t.push(`commit ${o} ahead of base with no final result`)}return t.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),t.join(": ")}function De(e){if(e.alive||xn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,n=Be(e.headCommit)??Sn(e.gitAncestry),t=r>0,o=!!n;if(!t&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=t&&o?"both":t?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:n,attentionReason:_n(s,r,n)}}var Me=l(()=>{"use strict"});var x=l(()=>{"use strict"});var vn,wt,En,It,Fe=l(()=>{"use strict";vn=["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"],wt=new Set(vn),En=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY"],It=new Set(En)});import{spawnSync as $e}from"node:child_process";function Cn(e,r,n={}){let t=$e("git",r,G({cwd:e,encoding:"utf8"}));if(t.status!==0&&!n.allowFailure){let o=An(e,r,t);if(n.throwError)throw new Error(o);V(o)}return t.stdout||""}function An(e,r,n){let t=typeof n.stderr=="string"&&n.stderr.trim()||typeof n.stdout=="string"&&n.stdout.trim()||n.error?.message||`exit ${n.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${t}`}function Le(e){return Cn(e,["status","--short"],{allowFailure:!0}).split(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var $=new Set(["rg","ripgrep","grep"]),_=new Set(["bash","sh","dash","zsh"]),y=/\b(error|invalid|unknown|panic|not found)\b/i,f=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"]);function p(n){return n?(n.split("/").pop()??n).replace(/\.exe$/i,"").toLowerCase():null}function c(n){if(!n)return[];let e=[],r="",t,i=!1;for(let o of n){if(i){r+=o,i=!1;continue}if(o==="\\"){i=!0;continue}if(t){o===t?t=void 0:r+=o;continue}if(o==='"'||o==="'"){t=o;continue}if(/\s/.test(o)){r&&(e.push(r),r="");continue}r+=o}return r&&e.push(r),e}function h(n){let e=p(n[0]);return!!(e&&$.has(e))}function v(n){let e=n.trim();return e.includes("/")?e.split("/").pop()??e:e}function w(n){if(!n||n.includes("*"))return null;let e=v(n);return!e||e.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)?e:null}function b(n){return!n||n.includes("/")||n.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(n)}function u(n){if(!n)return!1;let e=n.trim();return e.startsWith("!")&&!e.includes("/")&&!e.endsWith("/**")}function C(n){if(!n.startsWith("--glob="))return n;let e=n.slice(7);return e.startsWith("!")&&!e.includes("/")&&!e.endsWith("/**")?`--glob=${e}/**`:n}function W(n){let e=[];for(let r=1;r<n.length;r+=1){let t=n[r];if(t){if(t==="--"){e.push(...n.slice(r+1));break}if(t.startsWith("-")){if(t.includes("="))continue;f.has(t)&&(r+=1);continue}e.push(t)}}return e}function z(n){let e=!1,r=n.map((i,o)=>{let s=C(i),a=n[o-1];return a&&f.has(a)&&i.startsWith("!")&&!i.includes("/")&&!i.endsWith("/**")&&(s=`${i}/**`),s!==i&&(e=!0),s}),t=W(r);if(t.length===2){let[i,o]=t;if(u(o))return{argv:[r[0]??"rg",i,"-g",`${o}/**`,"."],changed:!0};let s=w(o);if(s)return{argv:[r[0]??"rg","-g",s,i,"."],changed:!0}}return e&&t.length===1?{argv:[...r,"."],changed:!0}:{argv:r,changed:e}}function R(n){for(let e=1;e<n.length;e+=1){let r=n[e];if(r&&(r==="-c"||r==="-lc"||r==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(r)))return e+1}return-1}function l(n){let e=n.trim();if(!e)return{command:e,wrapped:!1};let r=c(e);if(!r.length)return{command:e,wrapped:!1};let t=p(r[0]);if(!t||!_.has(t))return{command:e,wrapped:!1};let i=R(r);if(i<0||i>=r.length)return{command:e,wrapped:!1};let o=r.slice(i).join(" ").trim();return o?{command:o,wrapped:!0}:{command:e,wrapped:!1}}function T(n,e){let r=n.trim(),t=c(r),i=R(t);if(i<0)return e;let o=t.slice(0,i).join(" "),s=e.includes("'")?`"${e.replace(/"/g,'\\"')}"`:`'${e}'`;return`${o} ${s}`}function j(n){let e=n.trim(),r=l(e),t=c(r.command);if(!t.length||!h(t))return{segment:e,changed:!1};let i=z(t);if(!i.changed)return{segment:e,changed:!1};let o=i.argv.join(" ");return r.wrapped?{segment:T(e,o),changed:!0}:{segment:o,changed:!0}}function d(n){let e=n.trim();if(!e)return{command:e,changed:!1};let r=e.includes("&&")?" && ":e.includes("||")?" || ":"; ",t=e.split(/\s*(?:&&|\|\||;)\s*/u),i=!1,o=t.map(s=>{let a=j(s);return a.changed&&(i=!0),a.segment});return i?{command:o.join(r),changed:!0}:{command:e,changed:!1}}function A(n){let e=l(n).command,r=c(e.trim());return r.length&&h(r)?!0:/\b(rg|ripgrep)\b/i.test(e)}function E(n){if(n.exitCode!==void 0&&n.exitCode!==1||!A(n.command))return!1;let e=(n.stderr??n.interleaved??"").trim();if(e&&y.test(e)||d(n.command).changed)return!1;let t=m(n.command);if(t){let i=g(t);if(i.kind==="bad_scope"||i.kind==="rg_exclude_syntax")return!1}return!0}function x(n){if(!n)return{};let e=n.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(e)return{pattern:e[1],target:e[2]?.trim()};let r=n.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return r?{pattern:r[1],target:r[2]?.trim()}:{}}function g(n){let{pattern:e,target:r}=x(n);return e?u(r)?{kind:"rg_exclude_syntax",pattern:e,target:r}:b(r)?{kind:"bad_scope",pattern:e,target:r}:{kind:"not_repo_search",pattern:e,target:r}:{kind:"not_repo_search"}}function G(n){let{pattern:e,target:r}=x(n);if(!e)return null;if(u(r)){let t=`${r.trim()}/**`;return{command:`rg "${e}" -g '${t}' .`,changed:!0}}return r&&b(r)?{command:`rg -g ${r} "${e}" .`,changed:!0}:null}function S(n){if(n.kind==="bad_scope"&&n.pattern&&n.target)return`Use \`rg -g '${n.target}' ${n.pattern} .\` from the repo root instead of treating ${n.target} as a folder.`;if(n.kind==="rg_exclude_syntax"&&n.pattern){let e=n.target?`${n.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${n.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${n.pattern}" -g '${e}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return n.kind==="no_matches"&&n.pattern?`No matches for "${n.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${n.pattern}" .\`.`:null}function m(n){let e=n.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return e?`search "${e[1]}" in ${e[2]?.trim()}`:null}function L(n){let e=n.meta?.trim()||(n.command?m(n.command):null)||null;if(e){let r=g(e),t=S(r);if(t)return t;let i=G(e);if(i?.changed)return`Repo search used an invalid scope. Retry with: \`${i.command}\`.`}if(n.command&&/\b(rg|ripgrep)\b/i.test(n.command)){let r=d(n.command);if(r.changed)return`Ripgrep scope may be invalid. Retry with: \`${r.command}\`.`;if(n.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}export{g as classifyRepoSearchMeta,L as diagnoseRepoSearchFailure,m as extractSearchMetaFromToolLine,S as formatRepoSearchGuidance,d as normalizeRepoSearchCommand,E as shouldTreatRgNoMatchAsSuccess,l as unwrapShellWrapperCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function $(e){let r=e[vr];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function R(e,r={}){return gr.has(e)?!0:Rr.has(e)||r.operatorAllow?.has(e)||br.some(t=>e.endsWith(t))?!1:hr.some(t=>e.endsWith(t))}function pe(e){let r=$(e);return Object.keys(e).filter(t=>R(t,{operatorAllow:r})).sort()}function me(e){let r=$(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!R(t,{operatorAllow:r})&&R(t)).sort()}function E(e){let r=$(e),t={...e};for(let n of Object.keys(t))R(n,{operatorAllow:r})&&delete t[n];return t}function
|
|
2
|
-
${n}`,s=Ar(e.personaSlug);return!!(r.startsWith(Er)||r===Or||r.startsWith("daemon-review:")||s&&C.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||wr(r,i)||V(i))||r.startsWith(Cr)&&e.parentTaskId&&s&&C.has(s)||e.planId&&!e.parentTaskId&&s&&C.has(s)&&V(i)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&C.has(s))}var Ir=/^claude[-_]/i,Nr=/^(?:opus|sonnet|haiku)\b/i;function he(e){let r=e.trim();return Ir.test(r)||Nr.test(r)}function ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Re(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Tr(e){return ye(e)?"codex":he(e)?"claude":(Re(e),"cursor")}function Wr(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(),i=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:i,rule:i?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:i,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:i,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:i,rule:"executor_ref:provider_cursor"}:null:null}function Kr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(i=>i.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?he(n)||ye(n)||Re(n)?{lane:t,model:n,provider:Tr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function A(e){let r=typeof e=="string"?e.trim():"";return r?Wr(r)??Kr(r):null}p();a();var st="kynver",Qe=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],at=Qe.map(e=>`mcp__${st}__${e}`);a();a();var $a=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ct(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var ut=ct();a();var hl=600*1e3;var Ze="composer-2.5";var m="cursor",dt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible"};function rr(e){let r=e.trim().toLowerCase();return dt[r]??r}var pt=new Set(["claude","opus","anthropic"]),mt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function v(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return pt.has(r)?!0:r.includes("claude")||r.includes("opus")}function ie(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=v(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=A(v(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(ft(n.model)))return!0;let i=v(e,"description");if(mt.some(l=>l.test(i)))return!0;let s=v(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function ft(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function gt(e,r){return{provider:m,model:Ze,rule:`policy:cursor_default${r}`,requestedModel:e}}var ht=["explicit:","executor_ref:","factory:","task:"];function yt(e){return ht.some(r=>e.startsWith(r))}function tr(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||A(v(e,"executorRef"))?.provider?!0:ie(e)}function er(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||yt(r.rule)||tr(t)||!u(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return gt(r.model,i)}function Rt(e,r=m){let t=e?.trim();return t?rr(t):r}function bt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(m)?[...new Set(r.map(t=>u(t)?m:t))]:r.every(t=>u(t))?[m]:r}var vt=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,kt=/\b(npm run build\b|next build\b)\b/i,_t=/\b(vercel (build|deploy|--prod))\b/i,xt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function se(e){let r=e.trim();return r?xt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:_t.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:kt.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:vt.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var M="heavy_verification_token_required";import{spawnSync as Ft}from"node:child_process";a();import{closeSync as wt,existsSync as _,mkdirSync as Pt,openSync as It,readdirSync as sr,readFileSync as Nt,statSync as Tt,unlinkSync as ar,writeFileSync as Wt}from"node:fs";import ce from"node:path";import{mkdirSync as Et}from"node:fs";import{tmpdir as Ot}from"node:os";import U from"node:path";import{homedir as St}from"node:os";import nr from"node:path";function or(){let e=process.env.KYNVER_STATE_ROOT;return e?nr.resolve(e):nr.join(St(),".kynver","state")}function Ct(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function At(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?U.resolve(e):Ct()?U.join(Ot(),"kynver","state","heavy-verification"):U.join(or(),"heavy-verification")}function ae(){return U.join(At(),"slots")}function k(){let e=ae();return Et(e,{recursive:!0}),e}var x=120*6e4,ir=1;function Kt(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function F(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function L(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Kt(e,ir):ir}function Dt(e){return`slot-${e}`}function Bt(e,r=ae()){return ce.join(r,`${e}.json`)}function ue(e){if(!_(e))return null;try{let r=JSON.parse(Nt(e,"utf8"));if(typeof r.slotId=="string"&&typeof r.pid=="number"&&typeof r.acquiredAt=="string"&&typeof r.command=="string")return r}catch{return null}return null}function lr(e,r=x){if(!e||!Y(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function cr(e,r){let t=ue(e);if(t)return lr(t,r);if(!_(e))return!0;try{return Date.now()-Tt(e).mtimeMs>r}catch{return!0}}function Mt(e,r){if(cr(e,r))try{ar(e)}catch{}}function Ut(e){return Pt(e,{recursive:!0}),e}function de(e={}){let r=Ut(e.slotsDir??k()),t=e.staleMs??x,n=0;for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ce.join(r,i),l=_(s);Mt(s,t),l&&!_(s)&&(n+=1)}return n}function Lt(e={}){let r=e.slotsDir??k(),t=e.staleMs??x;de({slotsDir:r,staleMs:t});let n=[];for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ue(ce.join(r,i));s&&!lr(s,t)&&n.push(s)}return n}function le(e={}){return Lt(e).length}function S(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});for(let l=0;l<i;l+=1){let c=Dt(l),h=Bt(c,t),dr=ue(h);if(cr(h,n))try{ar(h)}catch{}else if(dr||_(h))continue;let pr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=It(h,"wx");Wt(y,JSON.stringify(pr,null,2),"utf8"),wt(y);let mr=le({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:mr,maxSlots:i,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=le({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function H(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});let s=le({slotsDir:t,staleMs:n}),l=s<i;return{admitted:l,slotId:null,activeSlots:s,maxSlots:i,reason:l?null:`heavy verification at capacity (${s}/${i} slots); waiting for ${e}`}}function Ht(e){e<=0||Ft(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ur(e,r,t=2e3,n={}){let i=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<i;)Ht(Math.min(t,i-Date.now())),s=S(e,n);return s}function $t(e,r={}){let t=se(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...H(e),slotId:null}};if(F())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...H(e),slotId:null}};let n=r.waitMs??0,i=n>0?ur(e,n,r.pollMs):S(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:M,commandClass:t.commandClass,reason:t.reason??i.reason??M,verificationGate:i}}export{m as DEFAULT_WORKER_PROVIDER,M as HEAVY_VERIFICATION_TOKEN_REQUIRED,j as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Sr as auditReviewWorkerCredentialScope,kr as auditWorkerEnv,f as buildWorkerSpawnEnv,se as classifyHeavyShellCommand,er as enforceCursorWorkerProvider,$t as gateWorkerShellCommand,u as isClaudeFamilyProvider,R as isForbiddenWorkerEnvKey,Pr as isHarnessExpertReviewWorker,ge as isNoProdCredentialReviewEnvironment,pe as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,rr as normalizeWorkerProviderName,bt as preferCursorExecutor,Rt as resolveConfiguredWorkerProvider,E as scrubWorkerEnv,ie as taskAllowsClaudeWorker,tr as taskExpressesWorkerProviderPreference};
|
|
1
|
+
var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function $(e){let r=e[vr];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function R(e,r={}){return gr.has(e)?!0:Rr.has(e)||r.operatorAllow?.has(e)||br.some(t=>e.endsWith(t))?!1:hr.some(t=>e.endsWith(t))}function pe(e){let r=$(e);return Object.keys(e).filter(t=>R(t,{operatorAllow:r})).sort()}function me(e){let r=$(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!R(t,{operatorAllow:r})&&R(t)).sort()}function E(e){let r=$(e),t={...e};for(let n of Object.keys(t))R(n,{operatorAllow:r})&&delete t[n];return t}function _r(e){let r=pe(e),t=me(e);return{forbiddenPresent:r,safe:r.length===0,...t.length?{operatorAllowedActive:t}:{}}}var fr,gr,hr,yr,Rr,br,vr,O=o(()=>{"use strict";fr=["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"],gr=new Set(fr),hr=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],yr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY"],Rr=new Set(yr),br=["_PUBLIC_KEY"],vr="KYNVER_WORKER_ENV_ALLOW"});var g=o(()=>{"use strict"});function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=o(()=>{"use strict"});var q=o(()=>{"use strict";g();a();O()});var z=o(()=>{"use strict";q();g()});var d=o(()=>{"use strict"});var P=o(()=>{"use strict"});var be=o(()=>{"use strict"});var dn,pn,J=o(()=>{"use strict";dn=25*1024*1024*1024,pn=12*1024*1024*1024});var yn,Rn,ve=o(()=>{"use strict";J();yn=5*1024*1024*1024,Rn=10*1024*1024*1024});var Sn,En,X=o(()=>{"use strict";ve();J();Sn=30*1024*1024*1024,En=15*1024*1024*1024});var ke=o(()=>{"use strict";a()});import Br from"node:path";var Wn,Q=o(()=>{"use strict";g();ke();Wn=Br.join(".openclaw","harness")});var N=o(()=>{"use strict";p();d();P();T();Q()});var Ee=o(()=>{"use strict";p();Q();N();a()});var ee=o(()=>{"use strict";Ee();a()});var Oe=o(()=>{"use strict";ee();a()});var Ce=o(()=>{"use strict"});var Ae=o(()=>{"use strict";Ce();a()});var we=o(()=>{"use strict"});var Pe=o(()=>{"use strict";we()});var Ie=o(()=>{"use strict";Pe();a()});var Ne=o(()=>{"use strict"});var Te=o(()=>{"use strict"});var We=o(()=>{"use strict"});var re=o(()=>{"use strict"});var Ke=o(()=>{"use strict"});var De=o(()=>{"use strict";re();Ke()});var Be=o(()=>{"use strict";Ae();Ie();Ne();Te();q();We();De();re();a()});var Me=o(()=>{"use strict";Be()});var Vr,Yr,Ue=o(()=>{"use strict";be();p();d();P();T();X();ee();Oe();Me();a();Vr=500*1024*1024,Yr=4*1024*1024*1024});var T=o(()=>{"use strict";Ue()});import{homedir as Gr}from"node:os";import qr from"node:path";var Le,te=o(()=>{"use strict";Le=qr.join(Gr(),".kynver",".env")});var Fe=o(()=>{"use strict"});var He=o(()=>{"use strict";Fe()});var $e=o(()=>{"use strict"});var ne=o(()=>{"use strict";He();$e()});var je=o(()=>{"use strict"});var Ve=o(()=>{"use strict";je()});var K=o(()=>{"use strict";te();g();p();ne();Ve()});var Ye=o(()=>{"use strict";d();d()});var Ge=o(()=>{"use strict";te();ne();K()});var qe=o(()=>{"use strict";z();d();Ye();p();K();Ge();a();N()});import{homedir as tt,totalmem as ws}from"node:os";import oe from"node:path";var ze,Fs,Hs,$s,js,p=o(()=>{"use strict";z();g();a();d();P();T();X();K();qe();N();ze=oe.join(tt(),".kynver"),Fs=oe.join(ze,"config.json"),Hs=oe.join(ze,"credentials"),$s=500*1024*1024,js=4*1024*1024*1024});O();O();var j="KYNVER_NO_PROD_DB_CREDENTIALS",kr=["KYNVER_ENV_FILE"],xr=new Set(["1","true","yes","on"]);function ge(e){let r=e[j]?.trim().toLowerCase();return r!==void 0&&xr.has(r)}function f(e,r={}){let t=E(e);if(!r.reviewWorker)return t;let n={...t,[j]:"1"};for(let i of kr)delete n[i];return n}var fe=["DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL"];function Sr(e,r={}){let t=f(e,r),n=Object.keys(t).filter(c=>c.endsWith("_SECRET")||c.endsWith("_API_KEY")||fe.includes(c)),i=fe.every(c=>t[c]===void 0),s=r.reviewWorker?t.KYNVER_ENV_FILE===void 0:!0,l=ge(t);return{reviewMode:!!r.reviewWorker,noProdFlagPresent:r.reviewWorker?l:!0,forbiddenKeysAfterScrub:n.sort(),productionDbKeysAbsent:i,envFilePointerStripped:s,safe:i&&n.length===0&&s&&(!r.reviewWorker||l)}}var Er="expert-lane-pr-review:",Or="plan-review-task",Cr="scheduledjob:",C=new Set(["lorentz","dalton","rhea","sentinel"]);function Ar(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function V(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|risk register|signoff|verification|evidence|prove|gate)\b/.test(e)}function wr(e,r){return e.startsWith("factory:")?e.includes("lb")||V(r):!1}function Pr(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),i=`${t}
|
|
2
|
+
${n}`,s=Ar(e.personaSlug);return!!(r.startsWith(Er)||r===Or||r.startsWith("daemon-review:")||s&&C.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||wr(r,i)||V(i))||r.startsWith(Cr)&&e.parentTaskId&&s&&C.has(s)||e.planId&&!e.parentTaskId&&s&&C.has(s)&&V(i)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&C.has(s))}var Ir=/^claude[-_]/i,Nr=/^(?:opus|sonnet|haiku)\b/i;function he(e){let r=e.trim();return Ir.test(r)||Nr.test(r)}function ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function Re(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Tr(e){return ye(e)?"codex":he(e)?"claude":(Re(e),"cursor")}function Wr(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(),i=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:i,rule:i?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:i,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:i,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:i,rule:"executor_ref:provider_cursor"}:null:null}function Kr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(i=>i.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?he(n)||ye(n)||Re(n)?{lane:t,model:n,provider:Tr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function A(e){let r=typeof e=="string"?e.trim():"";return r?Wr(r)??Kr(r):null}p();a();var st="kynver",Qe=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],at=Qe.map(e=>`mcp__${st}__${e}`);a();a();var $a=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ct(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var ut=ct();a();var hl=600*1e3;var Ze="composer-2.5";var m="cursor",dt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible"};function rr(e){let r=e.trim().toLowerCase();return dt[r]??r}var pt=new Set(["claude","opus","anthropic"]),mt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function v(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return pt.has(r)?!0:r.includes("claude")||r.includes("opus")}function ie(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=v(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=A(v(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(ft(n.model)))return!0;let i=v(e,"description");if(mt.some(l=>l.test(i)))return!0;let s=v(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function ft(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function gt(e,r){return{provider:m,model:Ze,rule:`policy:cursor_default${r}`,requestedModel:e}}var ht=["explicit:","executor_ref:","factory:","task:"];function yt(e){return ht.some(r=>e.startsWith(r))}function tr(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||A(v(e,"executorRef"))?.provider?!0:ie(e)}function er(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||yt(r.rule)||tr(t)||!u(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return gt(r.model,i)}function Rt(e,r=m){let t=e?.trim();return t?rr(t):r}function bt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(m)?[...new Set(r.map(t=>u(t)?m:t))]:r.every(t=>u(t))?[m]:r}var vt=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,_t=/\b(npm run build\b|next build\b)\b/i,kt=/\b(vercel (build|deploy|--prod))\b/i,xt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function se(e){let r=e.trim();return r?xt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:kt.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:_t.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:vt.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var M="heavy_verification_token_required";import{spawnSync as Ft}from"node:child_process";a();import{closeSync as wt,existsSync as k,mkdirSync as Pt,openSync as It,readdirSync as sr,readFileSync as Nt,statSync as Tt,unlinkSync as ar,writeFileSync as Wt}from"node:fs";import ce from"node:path";import{mkdirSync as Et}from"node:fs";import{tmpdir as Ot}from"node:os";import U from"node:path";import{homedir as St}from"node:os";import nr from"node:path";function or(){let e=process.env.KYNVER_STATE_ROOT;return e?nr.resolve(e):nr.join(St(),".kynver","state")}function Ct(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function At(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?U.resolve(e):Ct()?U.join(Ot(),"kynver","state","heavy-verification"):U.join(or(),"heavy-verification")}function ae(){return U.join(At(),"slots")}function _(){let e=ae();return Et(e,{recursive:!0}),e}var x=120*6e4,ir=1;function Kt(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function F(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function L(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Kt(e,ir):ir}function Dt(e){return`slot-${e}`}function Bt(e,r=ae()){return ce.join(r,`${e}.json`)}function ue(e){if(!k(e))return null;try{let r=JSON.parse(Nt(e,"utf8"));if(typeof r.slotId=="string"&&typeof r.pid=="number"&&typeof r.acquiredAt=="string"&&typeof r.command=="string")return r}catch{return null}return null}function lr(e,r=x){if(!e||!Y(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function cr(e,r){let t=ue(e);if(t)return lr(t,r);if(!k(e))return!0;try{return Date.now()-Tt(e).mtimeMs>r}catch{return!0}}function Mt(e,r){if(cr(e,r))try{ar(e)}catch{}}function Ut(e){return Pt(e,{recursive:!0}),e}function de(e={}){let r=Ut(e.slotsDir??_()),t=e.staleMs??x,n=0;for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ce.join(r,i),l=k(s);Mt(s,t),l&&!k(s)&&(n+=1)}return n}function Lt(e={}){let r=e.slotsDir??_(),t=e.staleMs??x;de({slotsDir:r,staleMs:t});let n=[];for(let i of sr(r)){if(!i.endsWith(".json"))continue;let s=ue(ce.join(r,i));s&&!lr(s,t)&&n.push(s)}return n}function le(e={}){return Lt(e).length}function S(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??_(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});for(let l=0;l<i;l+=1){let c=Dt(l),h=Bt(c,t),dr=ue(h);if(cr(h,n))try{ar(h)}catch{}else if(dr||k(h))continue;let pr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=It(h,"wx");Wt(y,JSON.stringify(pr,null,2),"utf8"),wt(y);let mr=le({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:mr,maxSlots:i,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=le({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function H(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??_(),n=r.staleMs??x,i=r.maxSlots??L();de({slotsDir:t,staleMs:n});let s=le({slotsDir:t,staleMs:n}),l=s<i;return{admitted:l,slotId:null,activeSlots:s,maxSlots:i,reason:l?null:`heavy verification at capacity (${s}/${i} slots); waiting for ${e}`}}function Ht(e){e<=0||Ft(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ur(e,r,t=2e3,n={}){let i=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<i;)Ht(Math.min(t,i-Date.now())),s=S(e,n);return s}function $t(e,r={}){let t=se(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...H(e),slotId:null}};if(F())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...H(e),slotId:null}};let n=r.waitMs??0,i=n>0?ur(e,n,r.pollMs):S(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:M,commandClass:t.commandClass,reason:t.reason??i.reason??M,verificationGate:i}}export{m as DEFAULT_WORKER_PROVIDER,M as HEAVY_VERIFICATION_TOKEN_REQUIRED,j as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Sr as auditReviewWorkerCredentialScope,_r as auditWorkerEnv,f as buildWorkerSpawnEnv,se as classifyHeavyShellCommand,er as enforceCursorWorkerProvider,$t as gateWorkerShellCommand,u as isClaudeFamilyProvider,R as isForbiddenWorkerEnvKey,Pr as isHarnessExpertReviewWorker,ge as isNoProdCredentialReviewEnvironment,pe as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,rr as normalizeWorkerProviderName,bt as preferCursorExecutor,Rt as resolveConfiguredWorkerProvider,E as scrubWorkerEnv,ie as taskAllowsClaudeWorker,tr as taskExpressesWorkerProviderPreference};
|