@kynver-app/runtime 0.1.128 → 0.1.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +53 -45
- package/dist/config.d.ts +2 -0
- package/dist/daemon-heartbeat.d.ts +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +67 -59
- package/dist/instruction-bundle/cache.d.ts +6 -0
- package/dist/instruction-bundle/client.d.ts +25 -0
- package/dist/instruction-bundle/contract.d.ts +4 -0
- package/dist/instruction-bundle/contract.js +5 -0
- package/dist/instruction-bundle/embedded-bundle.d.ts +3 -0
- package/dist/instruction-bundle/index.d.ts +7 -0
- package/dist/instruction-bundle/keys.d.ts +14 -0
- package/dist/instruction-bundle/state.d.ts +24 -0
- package/dist/instruction-bundle/types.d.ts +42 -0
- package/dist/instruction-bundle/verify.d.ts +15 -0
- package/dist/retry-limits.d.ts +4 -0
- package/dist/server/monitor.js +4 -4
- package/dist/worker-persona-catalog.d.ts +5 -0
- package/dist/worker-persona-catalog.js +5 -1
- package/package.json +7 -2
package/dist/cli.js
CHANGED
|
@@ -1,55 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
2
|
+
var Kh=Object.defineProperty;var F=(e,r)=>()=>(e&&(r=e(e=0)),r);var jh=(e,r)=>{for(var t in r)Kh(e,t,{get:r[t],enumerable:!0})};import{existsSync as Vh,mkdirSync as Gh,readFileSync as Ls,readdirSync as kE,statSync as El,writeFileSync as Yh}from"node:fs";import Al from"node:path";function nr(e){console.error(e),process.exit(1)}function ae(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||nr(`missing ${r}`),e}function Gr(e){try{return JSON.parse(e)}catch{return null}}function _(e,r){try{return JSON.parse(Ls(e,"utf8"))}catch(t){if(arguments.length>1)return r;nr(`failed to read ${e}: ${t.message}`)}}function le(e,r){Gh(Al.dirname(e),{recursive:!0}),Yh(e,`${JSON.stringify(r,null,2)}
|
|
3
|
+
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Il(e){return R(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function Ye(e){return String(e).replace(/\/+$/,"")}function qn(e){return String(e||"").replace(/\s+/g," ").trim()}function zn(e){try{return El(e).size}catch{return 0}}function Xn(e){try{return El(e).mtime.toISOString()}catch{return null}}function Qn(e,r){return Vh(e)?Ls(e,"utf8").split(`
|
|
4
4
|
`).slice(-r).join(`
|
|
5
|
-
`):""}function
|
|
6
|
-
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Sl("git",r,ae({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 bl(e,r,t){let n=Q(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 $n(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 Os(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return Os(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=Q(e,["rev-parse",n]);if(f.status!==0)return Os(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=bl(e,i,a),c=bl(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Os(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ye=F(()=>{"use strict";w();Vr()});import{homedir as Is}from"node:os";import yr from"node:path";function Cl(e){return e==="~"?Is():e.startsWith("~/")||e.startsWith("~\\")?yr.join(Is(),e.slice(2)):e}function Gr(e){return yr.resolve(Cl(e))}function pe(e){let r=Cl(e),t=yr.resolve(r),n=yr.resolve(Is());return t===n?"~":t.startsWith(`${n}${yr.sep}`)?`~/${yr.relative(n,t).split(yr.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Y(e){return pe(e)}var Je=F(()=>{"use strict"});import{existsSync as Ts,readFileSync as _l}from"node:fs";import{homedir as _h}from"node:os";import or from"node:path";import{fileURLToPath as Ph}from"node:url";function Ah(e){let r=or.join(e,"package.json");if(!Ts(r))return null;try{let t=JSON.parse(_l(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Oh(e){return Ah(e)==="kynver"}function xl(e){let r=or.resolve(e);if(!Ts(r))return null;let t=Q(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?or.resolve(n):null}function Ih(e=import.meta.url){let r=or.dirname(Ph(e));for(let t=0;t<8;t+=1){let n=or.join(r,"package.json");if(Ts(n))try{if(JSON.parse(_l(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=or.dirname(r);if(o===r)break;r=o}return null}function Ns(e,r,t,n){if(!t)return;let o=or.resolve(t);e.has(o)||Oh(o)&&(e.add(o),r.push({repo:o,source:n}))}function Nh(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Ns(t,n,xl(r),"cwd_git");let o=Ih(e?.runtimeModuleUrl??import.meta.url);o&&Ns(t,n,xl(o),"runtime_checkout");let s=_h();for(let i of Eh)Ns(t,n,Gr(or.join(s,i)),"well_known_path");return n}function Rr(e){return Nh(e)[0]??null}var Eh,Kn=F(()=>{"use strict";ye();Je();Eh=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function Yr(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function Pl(e,r){return e[r]?.trim()||null}function Me(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:Yr(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Pl(e,"KYNVER_BOX_KIND");if(o)return{boxKind:Yr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Pl(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Ue(e={},r=process.env){return Me(r,e).boxKind}var Ee=F(()=>{"use strict"});import{readFileSync as Th}from"node:fs";import El from"node:os";function Ht(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:El.freemem()}if(process.platform==="linux")try{let t=Th("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return El.freemem()}var jn=F(()=>{"use strict"});import{existsSync as Dh,readFileSync as Mh,statfsSync as Uh}from"node:fs";function Hh(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Dh(e))continue;let r=Mh(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Al(e={}){if(!(e.forceWsl===void 0?Hh():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Bh,n=e.wslHostFreeWarnBytes??Wh,o=e.wslHostFreeCriticalBytes??Lh,s=e.statfs??Uh,i;try{i=s(t)}catch(g){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${g.message}`,probeError:g.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),p=null;return f||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Fh()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Fh(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP%); 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. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var Wh,Lh,Bh,Ol=F(()=>{"use strict";Wh=25*1024*1024*1024,Lh=12*1024*1024*1024,Bh="/mnt/c"});import{statfsSync as $h}from"node:fs";function We(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Kh,n=e.diskFreeCriticalBytes??jh,o=e.diskMaxUsedPercent??Vh,s=e.diskHardMaxUsedPercent??Gh,i=$h(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,f=a<t*2,m=f&&c>o,p=f&&c>s,g=!u&&!d&&!m&&!p,k=e.skipWslHostCheck?null:Al(e.wslHost),h=g&&(k?k.ok:!0),S=null;return h||(S=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null].filter(Boolean).join("; ")),Yh({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function Yh(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 Kh,jh,Vh,Gh,Ft=F(()=>{"use strict";Ol();Kh=30*1024*1024*1024,jh=15*1024*1024*1024,Vh=80,Gh=90});import{existsSync as Il}from"node:fs";import{homedir as Tl}from"node:os";import sr from"node:path";function ne(e){let r=sr.resolve(Gr(e.trim()));for(;Jh.has(sr.basename(r));)r=sr.dirname(r);return r}function me(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ne(e);let r=v().harnessRoot?.trim();if(r)return ne(r);let t=sr.join(Tl(),".kynver","harness");return Il(t)?t:Il(Nl)?Nl:t}function Re(e){return sr.join(ne(e),"runs")}function ir(e){return sr.join(ne(e),"worktrees")}function Jr(){let e=me();return{harnessRoot:e,runsDir:Re(e),worktreesDir:ir(e)}}function qr(e,r){return sr.join(e,R(r))}var Nl,Jh,ve=F(()=>{"use strict";I();Je();w();Nl=sr.join(Tl(),".openclaw","harness"),Jh=new Set(["runs","worktrees"])});import{existsSync as qh,readdirSync as zh,statSync as Xh}from"node:fs";import zr from"node:path";function te(){return Jr()}function U(e){let{runsDir:r}=te();return x(zr.join(qr(r,R(e)),"run.json"))}function ee(){let{runsDir:e}=te();return Dl(e)}function Vn(e){return Dl(Re(e))}function Qh(e){try{return Xh(e).isDirectory()}catch{return!1}}function Dl(e){if(!qh(e))return[];let r=[];for(let t of zh(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=zr.join(e,t.name);if(!Qh(n))continue;let o=x(zr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return x(zr.join(qr(t,R(e)),"workers",R(r),"worker.json"))}function Ae(e){let{runsDir:r}=te();le(zr.join(qr(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=te();le(zr.join(qr(t,e),"workers",r.name,"worker.json"),r)}function _(e){let{harnessRoot:r}=te();return $t(r,e)}function $t(e,r){return qr(Re(e),R(r))}var W=F(()=>{"use strict";ve();w()});import{existsSync as Zh,readdirSync as ek}from"node:fs";import rk from"node:path";function be(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=rk.join(_(e.id),"workers");if(!Zh(t))return[...r];for(let n of ek(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var Xr=F(()=>{"use strict";W();w()});function Ds(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 Ml(e){let r=e.trim();if(!r)return null;let t=Ds(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Ds(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Ds(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Ul(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ml(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ml(t);return n||t}var Wl=F(()=>{"use strict"});import{existsSync as tk,readFileSync as nk}from"node:fs";function Ll(e){return e==="complete"}function Qr(e){return Ll(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!tk(e))return r;let t=Date.now()+ok,n=new Date(t).toISOString(),o=nk(e,"utf8").split(`
|
|
7
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
8
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
9
|
-
${e.stderr}`.trim(),t=
|
|
10
|
-
`).filter(Boolean);for(let n of t){let o=jr(n);if(!o)continue;let s=Ok(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 l=a.find(c=>c?.type==="tool_use");l&&(r.currentTool=String(l.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,l=Kl(a);l&&(r.currentTool=l)}let i=jl(o);i&&Nk(r,Ls({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Ik(r,o)}return r}function Tk(e){let r=jl(e);if(!r)return;let t=Ls({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Ln(r.command).slice(0,120);return t.kind==="audit_findings"?`[audit:findings] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="search_no_matches"?`[search:no_matches] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="command_failure"?`[command:failed] ${t.summary}${n?` \xB7 ${n}`:""}`:`[command:ok] exit 0${n?` \xB7 ${n}`:""}`}function Vl(e){if(e.type==="system"&&e.subtype)return`[system:${e.subtype}] ${String(e.status||e.cwd||"")}`.trim();if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event.type;if(r==="content_block_start"){let t=e.event.content_block;if(t?.type==="tool_use")return`[tool:start] ${t.name}`}if(r==="content_block_delta"){let t=e.event.delta;if(t?.partial_json)return`[tool:input] ${t.partial_json}`}return r==="message_stop"?"[message:stop]":r?`[stream:${r}]`:void 0}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let t=r.find(o=>o?.type==="text");if(t)return`[assistant] ${Ln(String(t.text||""))}`;let n=r.find(o=>o?.type==="tool_use");if(n)return`[tool] ${n.name} ${JSON.stringify(n.input||{})}`}}if(e.type==="user"&&e.tool_use_result){let r=e.tool_use_result;return`[tool:result] stdout=${JSON.stringify(r.stdout||"")} stderr=${JSON.stringify(r.stderr||"")}`}if(e.type==="tool_call"){let r=String(e.subtype||""),t=r==="completed"?Tk(e):void 0;if(t)return t;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:void 0,o=Kl(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Ln(String(e.result||""))}`.trim()}var Yn=F(()=>{"use strict";$l();w()});function Mk(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Gl(e){let r=(e??"").trim();if(!r)return null;for(let t of Dk)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Mk(r)}`};return null}var Dk,Yl=F(()=>{"use strict";Dk=[{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"}]});function Jl(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Uk(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 Wk(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Jl(e.head)}function Lk(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 et(e){if(e.alive||Uk(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Jl(e.headCommit)??Wk(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:Lk(s,r,t)}}var Jn=F(()=>{"use strict"});function Vt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Bk(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 Hk(e){if(Vt(e.headCommit)||Vt(e.prUrl)||Vt(e.artifactBundlePath)||Vt(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Vt(r.head))}function rt(e){return Bk(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Hk(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 ql(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var qn=F(()=>{"use strict"});function Bs(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 zl(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function tt(e){let r=e.trim();if(!r)return null;let t=Bs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Bs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Bs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=zl(l);for(let u of n){let d=zl(u);d>c&&(l=u,c=d)}return l}var zn=F(()=>{"use strict"});function nt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Fk(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function vr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:nt(e)}function Xn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Xl(e){let r=null;if(typeof e=="string"){let o=tt(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=vr(String(s.prUrl??s.pr_url??"")),a=nt(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:nt(s.mergeCommit??s.merge_commit),reason:nt(s.reason)})}return n}function Ql(e,r){let t=[],n=vr(nt(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=vr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Zl(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(!Fk(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?vr(nt(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?vr(r.targetPrUrls[0]):null):null;if(s){let d=Ql(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let g of d)if(g!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${g} instead of canonical target ${s}`}}let p=Xl(n).find(g=>g.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=Xl(n),a=new Map(i.map(d=>[Xn(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Xn(vr(d)??d)).filter(Boolean)),c=Ql(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(Xn(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(l.size===0)return{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 u=[];for(let d of r.targetPrUrls){let f=Xn(vr(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function ec(e){if(e.blocked)return e.detail??e.reason}var rc=F(()=>{"use strict";zn()});function Kk(e){let r=Date.now();if(e.completionBlocker&&!tc(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Vk(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=rt(o);if(s.blocked){let i=ql(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Zl({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=ec(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(jk(e))return{state:"done",reason:"empty abandoned worker record"};let o=Gl(e.error);if(o)return{state:"blocked",reason:o.reason};let s=et({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>$k)return{state:"needs_attention",reason:`no first stream event ${As(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ot?{state:"stale",reason:`no log/event/heartbeat activity for ${As(n)}s`}:{state:"ok",reason:"recent activity"}}function tc(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function jk(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 Vk(e){let r=null;if(typeof e=="string"?r=tt(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 Gk(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Qr(t))}function T(e,r={}){let t=Gn(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Gk(e,t.finalResult,n),i=o?!1:$(e.pid),a=Bn(e.stdoutPath),l=Bn(e.stderrPath),c=Bn(e.heartbeatPath),u=Bt(e.worktreePath),d=$n(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=vl([t.lastEventAt,n.lastHeartbeatAt,Hn(e.stdoutPath),Hn(e.stderrPath),Hn(e.heartbeatPath)]),m=t.error||!i&&!s&&Fn(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=tc(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=Kk({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:m,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),S=g||h.state==="blocked"?"blocked":o||h.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:S,attention:h,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,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:m,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??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 re(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function st(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Gt(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var $k,ot,G=F(()=>{"use strict";Zr();Yn();Yl();Jn();ye();qn();rc();zn();w();$k=18e4,ot=6e5});import{readFileSync as Yk}from"node:fs";function Jk(e){if(!e||process.platform!=="linux")return null;try{return Yk(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function nc(e){if(!e.pid||process.platform!=="linux")return!0;let r=Jk(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function Qn(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!nc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Hs=F(()=>{"use strict";G()});import sc from"node:os";import qk from"node:path";function oc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function zk(e=v(),r,t){let n=oc(e.perWorkerMemBytes,Yt),o=oc(e.memReserveBytes,Jt),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):qt)),i=eo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??sc.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Fs(e,r={}){let t=r.perWorkerMemBytes??Yt,n=r.memReserveBytes??Jt,o=r.memUtilization??qt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Zn)}function Xk(){return Ht()}function Qk(e){let r=0;for(let t of be(e)){let n=x(qk.join(_(e.id),"workers",R(t),"worker.json"),void 0);!n||!Qn(n)||r++}return r}function Zk(){let e=0;for(let r of ee())e+=Qk(r);return e}function br(e){let r=e.config??v(),t=e.totalMemBytes??sc.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=zk(r,e.configuredMaxWorkersOverride,t),c=Ue(r),u=e.freeMemBytes??Xk(),d=e.activeWorkers??Zk(),f=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(f/n)),p=Math.max(0,Math.floor(Math.max(0,u-o)/n)),g=a,h=Math.max(0,Math.min(i??g,m)),S=Math.max(0,h-d),B=Math.min(S,p),b=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:We({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});b&&!b.ok&&(B=0);let E=null;return B<=0&&(b&&!b.ok?E=b.reason??"disk gate blocked worker admission":d>=h?E=`at worker limit (${d}/${h} running)`:p<=0?E="insufficient free memory \u2014 waiting for workers to finish":E="no worker slots available"),{ok:B>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:B,reason:E,...b?{diskGate:b}:{}}}var Yt,Jt,qt,Zn,zt=F(()=>{"use strict";jn();I();Ee();ro();Ft();W();Xr();Hs();w();Yt=500*1024*1024,Jt=4*1024*1024*1024,qt=.85,Zn=64});function Sr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function eo(e){let r=e.config??{},t=e.env??process.env,n=Sr(r.perWorkerMemBytes,Yt),o=Sr(r.memReserveBytes,Jt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):qt)),i=Fs(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Sr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Sr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Zn),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Sr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Zn),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function $s(e={}){let r=e.totalMemBytes??0,t=Fs(r,{perWorkerMemBytes:Sr(e.config?.perWorkerMemBytes,Yt),memReserveBytes:Sr(e.config?.memReserveBytes,Jt),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):qt}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var ro=F(()=>{"use strict";zt()});var ac={};yh(ac,{runDeviceLogin:()=>Ks});import ic from"node:os";function ey(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}async function ry(e){await new Promise(r=>setTimeout(r,e))}async function Ks(e){let r=ey(e);if(!r)return console.error("kynver login (device flow) requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site, set KYNVER_API_URL, or run `kynver setup` first."),{ok:!1};let t=`${ic.hostname()} (${ic.platform()})`,n;try{let a=await fetch(`${r}/api/auth/device/code`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientName:t})});if(!a.ok)return console.error(`Could not start device authorization (${a.status}).`),{ok:!1};n=await a.json()}catch(a){return console.error(`Could not reach ${r}: ${a.message}`),{ok:!1}}let o=n.verification_uri_complete||n.verification_uri;console.log(""),console.log(" Authorize this machine:"),console.log(` 1. Open: ${o}`),console.log(` 2. Confirm the code: ${n.user_code}`),console.log(""),console.log(" Waiting for approval\u2026");let s=Date.now()+n.expires_in*1e3,i=Math.max(1,n.interval)*1e3;for(;Date.now()<s;){await ry(i);let a;try{a=await(await fetch(`${r}/api/auth/device/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_code:n.device_code})})).json().catch(()=>({}))}catch{continue}switch(a.status){case"approved":return a.api_key?(Xt(a.api_key),console.log(" Approved \u2014 this machine is now linked to your Kynver account."),{ok:!0,apiKey:a.api_key}):{ok:!1};case"slow_down":i+=2e3;break;case"authorization_pending":typeof a.interval=="number"&&(i=Math.max(i,a.interval*1e3));break;case"access_denied":return console.error(" Request was denied in the browser."),{ok:!1};case"expired_token":return console.error(" The code expired before it was approved. Run `kynver login` again."),{ok:!1};default:break}}return console.error(" Timed out waiting for approval. Run `kynver login` again."),{ok:!1}}var js=F(()=>{"use strict";I();w()});import{existsSync as cc,mkdirSync as uc,readFileSync as dc,writeFileSync as pc}from"node:fs";import{homedir as ty,totalmem as ny}from"node:os";import Vs from"node:path";import oy from"node:os";function v(){if(!cc(to))return{};try{return JSON.parse(dc(to,"utf8"))}catch{return{}}}function qe(e){uc(no,{recursive:!0}),pc(to,`${JSON.stringify(Gs(e),null,2)}
|
|
11
|
-
`,{mode:384})}function
|
|
12
|
-
`,{mode:384})}function Z(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Qt().apiKey}function Xt(e){mc({...Qt(),apiKey:e})}function lc(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Qt();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function wr(e,r){mc({...Qt(),runnerToken:r,runnerTokenAgentOsId:e})}function L(e){let r=oo(e);return r||Js("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function oo(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}function ay(e,r){let t=e||lc(r)||(r?void 0:lc(v().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function Ys(e,r,t){let n=ay(e,r);if(n)return{ok:!0,secret:n};let o=Z(),s=oo(t?.baseUrl);if(o&&r&&s)try{let i=await Cr(r,{baseUrl:s,apiKey:o});return wr(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function K(e,r,t){let n=await Ys(e,r,t);if(n.ok)return n.secret;Js(n.reason)}async function fc(e,r){let t=Z(),n=oo(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await Cr(e,{baseUrl:n,apiKey:t});return wr(e,o),o}catch{return null}}async function gc(e,r,t){let n=Z(),o=oo(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await Cr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(wr(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function Cr(e,r){let t=r?.apiKey||Z();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${L(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function hc(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||Js("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await Cr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});wr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(it),tokenPrefix:`${t.slice(0,12)}\u2026`,note:"Scoped runner token saved; callbacks use X-Kynver-Runner-Token."},null,2))}catch(t){console.error(t instanceof Error?t.message:String(t)),process.exit(1)}}function Js(e){console.error(e),process.exit(1)}function so(e){let r={};for(let t=0;t<e.length;t++){let n=e[t];if(!n.startsWith("--"))continue;let o=n.slice(2).replace(/-([a-z])/g,(i,a)=>a.toUpperCase()),s=e[t+1];!s||s.startsWith("--")?r[o]=!0:(r[o]=s,t++)}return r}async function io(e){let r=v(),t=We({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=$s({totalMemBytes:oy.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=iy(r,e),s=Gs({...r,...sy(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});qe(s);let i=Me(process.env,s),a,l=Z(),c=s.agentOsId;if(l&&c)try{let u=await Cr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});wr(c,u),a="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{a="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:Y(to),config:at(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:a??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function kc(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Xt(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(it)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(js(),ac));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(it)},null,2))}var no,to,it,RA,vA,I=F(()=>{"use strict";Kn();Je();w();Ee();ro();Ft();no=Vs.join(ty(),".kynver"),to=Vs.join(no,"config.json"),it=Vs.join(no,"credentials");RA=500*1024*1024,vA=4*1024*1024*1024});I();import{mkdirSync as ph,realpathSync as mh}from"node:fs";import{fileURLToPath as RP}from"node:url";I();w();js();import ly from"node:os";function cy(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||v().apiBaseUrl;return r?Ge(String(r)):void 0}async function uy(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function ao(e){let r=cy(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),Z()||(typeof e.apiKey=="string"?Xt(e.apiKey):(await Ks({...e,apiBaseUrl:r})).ok||process.exit(1));let t=Z();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await uy(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await io(o),console.log(""),console.log(` Bootstrap complete \u2014 ${ly.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online and configures local Kynver Cron when needed."),console.log(" Persistent background service (Linux): `kynver cron install --install-systemd` after your first start."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}I();import Kx from"node:os";I();I();Ee();ro();import dy from"node:os";function yc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Rc(e=v(),r=process.env){let t=Me(r,e),n=eo({config:e,totalMemBytes:dy.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}let i=s.length===0;for(let a of o)yc("warn",a);for(let a of s)yc("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as py,readFileSync as my,renameSync as fy,writeFileSync as gy}from"node:fs";import{homedir as hy}from"node:os";import vc from"node:path";function bc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return vc.join(hy(),".kynver",`daemon-heartbeat-${r}.json`)}function Sc(e){try{let r=bc(e.agentOsId);py(vc.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId},n=`${r}.tmp-${process.pid}`;gy(n,JSON.stringify(t),"utf8"),fy(n,r)}catch{}}function wc(e){try{let r=my(bc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Cc(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function ky(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function lt(){process.platform==="win32"&&(ky("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}I();import{existsSync as yy}from"node:fs";import{homedir as Ry}from"node:os";import vy from"node:path";function xc(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Zt(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function ar(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||vy.join(Ry(),".kynver","agent-os-cron.json")}function by(e=ar()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function Sy(){let e=v();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function qs(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function ze(){let e=ar(),r=by(e),t=Sy(),n=qs(),o=!!(t&&n),s=yy(e),i=o&&(s||xc("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:xc("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Zt("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Zt("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Zt("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Zt("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Zt("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function lo(e=ze()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Xe(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}function wy(e){return e.replace(/\/+$/,"")}async function _c(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${wy(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:Xe(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as Cy,existsSync as zs,openSync as xy,readFileSync as _y,unlinkSync as Pc,writeFileSync as Py}from"node:fs";var Ey=10*6e4;function Ec(e){if(!zs(e))return null;try{let r=JSON.parse(_y(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Ay(e){let r=Ec(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Ey}function Ac(e){if(zs(e)&&!Ay(e)){let r=Ec(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(zs(e))try{Pc(e)}catch{}try{let r=xy(e,"wx");return Py(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),Cy(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Oc(e){try{Pc(e)}catch{}}var Oy=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Iy(e){return Oy.test(e.trim())}function Ny(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function en(e,r,t,n){let o=e.trim();return o==="*"?!0:Ny(o,t,n).has(r)}function Ty(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return en(n,r.getUTCMinutes(),0,59)&&en(o,r.getUTCHours(),0,23)&&en(s,r.getUTCDate(),1,31)&&en(i,r.getUTCMonth()+1,1,12)&&en(a,r.getUTCDay(),0,6)}var Dy=366*24*60;function My(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Ic(e,r){if(!Iy(e))return null;let t=My(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Dy;n++){if(Ty(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Nc(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=Ic(e.cron.trim(),r);return t?t.toISOString():null}return null}function Xs(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Ic(e.cron.trim(),r);return t?t.toISOString():null}import{promises as Uy}from"node:fs";async function Tc(e){try{return await Uy.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Wy(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function xr(e=ar()){let r=await Tc(e);return Wy(r)}async function Dc(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function Mc(e,r=ar()){let t=await xr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Dc(r,t)}async function Uc(e=ar()){return await Tc(e)!==null?{created:!1}:(await Dc(e,[]),{created:!0})}import{randomBytes as Ly}from"node:crypto";import{promises as rn}from"node:fs";import By from"node:path";var co={version:1,jobs:{}};async function Hy(e){try{return await rn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Fy(e){if(!e)return{...co,jobs:{...co.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...co,jobs:{}}:r}catch{return{...co,jobs:{}}}}async function uo(e){let r=await Hy(e);return Fy(r)}async function $y(e,r){await rn.mkdir(By.dirname(e),{recursive:!0});let t=Ly(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await rn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
13
|
-
`,"utf8");try{await rn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await rn.unlink(n).catch(()=>{})}}async function Wc(e,r){await $y(e,r)}function Lc(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function Ky(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function jy(e){return!!e.completedAt}function Vy(e,r,t){if(e.consecutiveFailures===0)return!0;if(e.consecutiveFailures>r.maxRetries)return!1;if(!e.lastAttemptAt)return!0;let n=Date.parse(e.lastAttemptAt);return Number.isNaN(n)?!0:t-n>=r.retryBackoffMs}function Gy(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=Nc(e.spec,t);return r.nextFireAt=n,n}function Yy(e,r,t,n){if(e.paused||jy(r)||Ky(r,t)||!Vy(r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function Jy(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Xs(e.spec,t))}async function ct(e={}){let r=e.env??ze(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=Ac(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await xr(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await uo(r.statePath),l=[];for(let m of i){let p=Lc(a,m.providerScheduleId);Gy(m,p,t),Yy(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let g=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return g-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:m,job:p}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let g=Date.parse(p.nextFireAt??"");if(!Number.isNaN(g)&&g<n-r.tickIntervalMs*2){p.nextFireAt=Xs(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),Jy(m,p,t);try{let g=await _c({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,g.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,f--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await Wc(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Oc(r.lockPath)}}w();W();import Bc from"node:path";var Hc="mesh-cron-lease.json";function po(e){return x(Bc.join(_(e),Hc),null)}function Fc(e,r){le(Bc.join(_(e),Hc),{...r,updatedAt:new Date().toISOString()})}function $c(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import hC from"node:path";W();Hs();w();import qy from"node:path";function zy(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function mo(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=x(qy.join(_(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!Qn(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...zy(o)})}return t}I();I();function Kc(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function jc(e){let r=new AbortController,t=setTimeout(()=>r.abort(),Kc());try{return await e(r.signal)}finally{clearTimeout(t)}}function Vc(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:Kc()}}}async function _r(e,r,t){let n;try{n=await jc(s=>fetch(e,{method:"POST",headers:Xe(r),body:JSON.stringify(t),signal:s}))}catch(s){return Vc(s)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}async function q(e,r,t,n){let o=await _r(e,r,t);if(o.ok||o.status!==401)return o;let s=await gc(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await _r(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function fo(e,r){let t;try{t=await jc(o=>fetch(e,{method:"GET",headers:Xe(r),signal:o}))}catch(o){return Vc(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}I();var Gc=[{slug:"ghost",displayName:"Ghost",description:"Orchestration \u2014 coordinates lanes, handoffs, and operator decisions.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning \u2014 plan authoring, milestones, and operational flow design.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Runtime / control-plane implementation \u2014 harness, dispatch, and AgentOS plumbing.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Memory-quality implementation \u2014 MARM lanes, retrieval hygiene, and consolidation.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Security / privacy implementation and security verification gates.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Frontend \u2014 Command Center UI, dashboards, and client surfaces.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Data / migrations \u2014 Prisma schema, seeds, and persistence contracts.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Infra / reliability \u2014 deploy pipelines, observability, and runtime health.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Integrations / MCP \u2014 tool manifests, OpenClaw bridges, and cross-service wiring.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Product / domain \u2014 business rules, domain packs, and feature semantics.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Deep/adversarial review lane expert for risk, correctness, and safety gates. Run adversarial review and validation gating.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing-only \u2014 merge-ready handoff and final verification evidence; no implementation ownership.",dispatchLane:"landing",defaultRoleLane:"implementer"}],Xy=new Map(Gc.map(e=>[e.slug,e]));function Qy(e){if(!e)return null;let r=e.trim().toLowerCase();return Xy.get(r)??null}function Qs(e){return Qy(e)?.defaultRoleLane??null}function Yc(){return Gc.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Jc(e){return(e??"").trim().toLowerCase()}function Zy(e){switch(Jc(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function eR(e){let r=Jc(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Zy(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function qc(e){return eR(e)??"any"}Ft();zt();W();W();function go(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Zs(e){return e.toLowerCase()}function rR(e){let r=go(e,"roleLane");if(r)return r;let t=Zs(go(e,"executorRef")),n=Zs(go(e,"title")),o=Zs(go(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=Qs(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function zc(e){let r=rR(e);return r?{...e,roleLane:r}:e}I();var Qe="cursor",tR=new Set(["claude","opus","anthropic"]),nR=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function ei(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Pr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return tR.has(r)?!0:r.includes("claude")||r.includes("opus")}function ri(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Pr(r))return!0;let t=ei(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=ei(e,"description");if(nR.some(s=>s.test(n)))return!0;let o=ei(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function oR(e,r){return{provider:Qe,model:ti,rule:`policy:cursor_default${r}`,requestedModel:e}}function Xc(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Pr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(ri(t)||r.rule==="explicit:cli"&&Pr(r.provider)||!Pr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return oR(r.model,o)}function ho(e,r=Qe){let t=e?.trim();return t?Pr(t)?Qe:t==="codex"?"codex":t:r}var Qc={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function ut(e){return Qc[e]}function Zc(){return Object.values(Qc)}import{existsSync as iR}from"node:fs";import{homedir as aR}from"node:os";import tu from"node:path";import{createHash as eu}from"node:crypto";import{statSync as sR}from"node:fs";import{spawnSync as ru}from"node:child_process";function Le(e){try{let r=sR(e),t=`${e}|${r.size}|${r.mtimeMs}`;return eu("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function dt(e){return eu("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function we(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Be(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=ru(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function ko(e,r,t={}){let n=t.timeoutMs??8e3;try{return ru(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var lR="codex";function cR(){let e=aR();return[tu.join(e,".codex","auth.json"),tu.join(e,".config","codex","auth.json")]}function nu(e=new Date().toISOString()){let r=we(lR,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=cR().find(s=>iR(s)),n=Be(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?Le(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as uR}from"node:fs";import{homedir as dR}from"node:os";import ni from"node:path";function pR(){let e=process.env.HERMES_HOME?.trim(),r=e?ni.resolve(e):ni.join(dR(),".hermes");return ni.join(r,"auth.json")}function yo(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=pR(),o=uR(n),s=ko(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?Le(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function pt(e=new Date().toISOString()){let r=nu(e);if(r.ready)return{...r,path:"codex_cli"};let t=yo(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var ou=["low","medium","high"],su={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function iu(e,r){let t=ut(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function mR(e,r){let t=ut(e.providerId),n=ut(r.providerId),o=ou.indexOf(t.costTier)-ou.indexOf(n.costTier);if(o!==0)return o;let s=su[e.binding.authSource]-su[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function oi(e){let r=Zc().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&iu(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(mR)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return iu(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as fR}from"node:fs";import{homedir as gR}from"node:os";import hR from"node:path";var kR="claude";function yR(){let e=gR();return[hR.join(e,".claude",".credentials.json")]}function au(e=new Date().toISOString()){let r=we(kR,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=yR().find(i=>fR(i)),o=ko(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?Le(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as RR}from"node:fs";import{homedir as vR}from"node:os";import bR from"node:path";var SR="agent";function wR(){let e=vR();return[bR.join(e,".config","cursor","auth.json")]}function lu(e=new Date().toISOString()){let r=we(SR,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:dt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Be(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=wR().find(s=>RR(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Le(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as CR,readFileSync as xR}from"node:fs";import{homedir as _R}from"node:os";import si from"node:path";var PR=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function ER(){let e=process.env.HERMES_HOME?.trim(),r=e?si.resolve(e):si.join(_R(),".hermes");return si.join(r,".env")}function AR(e){try{let r=xR(e,"utf8"),t=[];for(let n of PR)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function cu(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Be(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ER(),o=CR(n),s=o?AR(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?Le(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function uu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=pt(r),n={codex:t,cursor:lu(r),claude:au(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:cu(r),hermesOpenAiCodex:yo(r),codexAdapterPath:t.path,readyCount:o}}var OR=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],IR=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function ii(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function NR(e){let r=ii(e,"executorRef").toLowerCase(),t=ii(e,"title").toLowerCase(),n=ii(e,"description").toLowerCase(),o=`${r}
|
|
5
|
+
`):""}function Ol(e){return e?Ls(Al.resolve(e),"utf8"):""}function Rr(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function or(e){return new Promise(r=>setTimeout(r,e))}function $(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function $t(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function Nl(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 Ws(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=F(()=>{"use strict"});function Xh(e){return qh.has(e)?!0:zh.some(r=>e.endsWith(r))}function Je(e){let r={...e};for(let t of Object.keys(r))Xh(t)&&delete r[t];return r}var Jh,qh,zh,Yr=F(()=>{"use strict";Jh=["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"],qh=new Set(Jh),zh=["_SECRET","_API_KEY"]});import{spawnSync as Dl}from"node:child_process";function ce(e,r,t={}){let n=Dl("git",r,ae({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);nr(o)}return n.stdout||""}function Ml(e){ce(e,["rev-parse","--show-toplevel"])}function Kt(e){return ce(e,["status","--short"],{allowFailure:!0}).split(`
|
|
6
|
+
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Dl("git",r,ae({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 Tl(e,r,t){let n=Q(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 Zn(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 Hs(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return Hs(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=Q(e,["rev-parse",n]);if(f.status!==0)return Hs(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=Tl(e,i,a),c=Tl(e,a,i),u=l.error||c.error||void 0;if(l.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...u?{error:u}:{}};let d=l.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:d,...u?{error:u}:{}}}function Hs(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ye=F(()=>{"use strict";w();Yr()});import{homedir as Fs}from"node:os";import br from"node:path";function Ul(e){return e==="~"?Fs():e.startsWith("~/")||e.startsWith("~\\")?br.join(Fs(),e.slice(2)):e}function Jr(e){return br.resolve(Ul(e))}function pe(e){let r=Ul(e),t=br.resolve(r),n=br.resolve(Fs());return t===n?"~":t.startsWith(`${n}${br.sep}`)?`~/${br.relative(n,t).split(br.sep).join("/")}`:t.replace(/\\/g,"/").replace(/^\/home\/[^/]+(?=\/|$)/,"~").replace(/^\/Users\/[^/]+(?=\/|$)/,"~").replace(/^[A-Za-z]:\/home\/[^/]+(?=\/|$)/i,"~").replace(/^[A-Za-z]:\/Users\/[^/]+(?=\/|$)/i,"~")}function Y(e){return pe(e)}var qe=F(()=>{"use strict"});import{existsSync as Ks,readFileSync as Ll}from"node:fs";import{homedir as Qh}from"node:os";import sr from"node:path";import{fileURLToPath as Zh}from"node:url";function rk(e){let r=sr.join(e,"package.json");if(!Ks(r))return null;try{let t=JSON.parse(Ll(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function tk(e){return rk(e)==="kynver"}function Bl(e){let r=sr.resolve(e);if(!Ks(r))return null;let t=Q(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?sr.resolve(n):null}function nk(e=import.meta.url){let r=sr.dirname(Zh(e));for(let t=0;t<8;t+=1){let n=sr.join(r,"package.json");if(Ks(n))try{if(JSON.parse(Ll(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=sr.dirname(r);if(o===r)break;r=o}return null}function $s(e,r,t,n){if(!t)return;let o=sr.resolve(t);e.has(o)||tk(o)&&(e.add(o),r.push({repo:o,source:n}))}function ok(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];$s(t,n,Bl(r),"cwd_git");let o=nk(e?.runtimeModuleUrl??import.meta.url);o&&$s(t,n,Bl(o),"runtime_checkout");let s=Qh();for(let i of ek)$s(t,n,Jr(sr.join(s,i)),"well_known_path");return n}function vr(e){return ok(e)[0]??null}var ek,eo=F(()=>{"use strict";ye();qe();ek=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function qr(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function Wl(e,r){return e[r]?.trim()||null}function Ue(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:qr(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Wl(e,"KYNVER_BOX_KIND");if(o)return{boxKind:qr(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Wl(e,"KYNVER_AGENT_OS_SLUG");return s&&t.push(`KYNVER_AGENT_OS_SLUG=${s} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!s,warnings:t}}function Be(e={},r=process.env){return Ue(r,e).boxKind}var Ee=F(()=>{"use strict"});import{readFileSync as sk}from"node:fs";import Hl from"node:os";function jt(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Hl.freemem()}if(process.platform==="linux")try{let t=sk("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Hl.freemem()}var ro=F(()=>{"use strict"});import{existsSync as ik,readFileSync as ak,statfsSync as lk}from"node:fs";function pk(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ik(e))continue;let r=ak(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Fl(e={}){if(!(e.forceWsl===void 0?pk():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||dk,n=e.wslHostFreeWarnBytes??ck,o=e.wslHostFreeCriticalBytes??uk,s=e.statfs??lk,i;try{i=s(t)}catch(g){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${g.message}`,probeError:g.message}}let a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<n,d=a<o,f=!u&&!d,m=(a/(1024*1024*1024)).toFixed(1),p=null;return f||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${m} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${mk()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function mk(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP%); 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. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var ck,uk,dk,$l=F(()=>{"use strict";ck=25*1024*1024*1024,uk=12*1024*1024*1024,dk="/mnt/c"});import{statfsSync as fk}from"node:fs";function Le(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??gk,n=e.diskFreeCriticalBytes??hk,o=e.diskMaxUsedPercent??kk,s=e.diskHardMaxUsedPercent??yk,i=fk(r),a=Number(i.bavail)*Number(i.bsize),l=Number(i.blocks)*Number(i.bsize),c=l>0?(l-a)/l*100:100,u=a<t,d=a<n,f=a<t*2,m=f&&c>o,p=f&&c>s,g=!u&&!d&&!m&&!p,k=e.skipWslHostCheck?null:Fl(e.wslHost),h=g&&(k?k.ok:!0),S=null;return h||(S=[d?`free space below critical ${n} bytes`:null,u?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,m?`used percent above cap ${o}%`:null,k&&!k.ok?k.reason:null].filter(Boolean).join("; ")),Rk({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function Rk(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 gk,hk,kk,yk,Vt=F(()=>{"use strict";$l();gk=30*1024*1024*1024,hk=15*1024*1024*1024,kk=80,yk=90});import{existsSync as Kl}from"node:fs";import{homedir as Vl}from"node:os";import ir from"node:path";function ne(e){let r=ir.resolve(Jr(e.trim()));for(;bk.has(ir.basename(r));)r=ir.dirname(r);return r}function me(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return ne(e);let r=b().harnessRoot?.trim();if(r)return ne(r);let t=ir.join(Vl(),".kynver","harness");return Kl(t)?t:Kl(jl)?jl:t}function Re(e){return ir.join(ne(e),"runs")}function ar(e){return ir.join(ne(e),"worktrees")}function zr(){let e=me();return{harnessRoot:e,runsDir:Re(e),worktreesDir:ar(e)}}function Xr(e,r){return ir.join(e,R(r))}var jl,bk,be=F(()=>{"use strict";O();qe();w();jl=ir.join(Vl(),".openclaw","harness"),bk=new Set(["runs","worktrees"])});import{existsSync as vk,readdirSync as Sk,statSync as wk}from"node:fs";import Qr from"node:path";function te(){return zr()}function U(e){let{runsDir:r}=te();return _(Qr.join(Xr(r,R(e)),"run.json"))}function ee(){let{runsDir:e}=te();return Gl(e)}function to(e){return Gl(Re(e))}function Ck(e){try{return wk(e).isDirectory()}catch{return!1}}function Gl(e){if(!vk(e))return[];let r=[];for(let t of Sk(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Qr.join(e,t.name);if(!Ck(n))continue;let o=_(Qr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function fe(e,r){let{runsDir:t}=te();return _(Qr.join(Xr(t,R(e)),"workers",R(r),"worker.json"))}function Ae(e){let{runsDir:r}=te();le(Qr.join(Xr(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=te();le(Qr.join(Xr(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=te();return Gt(r,e)}function Gt(e,r){return Xr(Re(e),R(r))}var B=F(()=>{"use strict";be();w()});import{existsSync as _k,readdirSync as xk}from"node:fs";import Pk from"node:path";function ve(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=Pk.join(x(e.id),"workers");if(!_k(t))return[...r];for(let n of xk(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var Zr=F(()=>{"use strict";B();w()});function js(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 Yl(e){let r=e.trim();if(!r)return null;let t=js(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=js(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=js(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Jl(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Yl(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Yl(t);return n||t}var ql=F(()=>{"use strict"});import{existsSync as Ek,readFileSync as Ak}from"node:fs";function zl(e){return e==="complete"}function et(e){return zl(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Ek(e))return r;let t=Date.now()+Ik,n=new Date(t).toISOString(),o=Ak(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let s of o){let i=Gr(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),c=Date.parse(l);Number.isFinite(c)&&c>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),zl(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Jl(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(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var Ik,rt=F(()=>{"use strict";ql();w();Ik=6e4});function Tk(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Dk(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 Mk(e){let r=Tk(e[0]);return!!(r&&Ok.has(r))}function Vs(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Xl(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Uk(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Bk(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;Nk.has(n)&&(t+=1);continue}r.push(n)}}return r}function Lk(e){let r=!1,t=e.map(o=>{let s=Uk(o);return s!==o&&(r=!0),s}),n=Bk(t);if(n.length===2){let[o,s]=n;if(Vs(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function Gs(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=Dk(i.trim());if(!a.length||!Mk(a))return i;let l=Lk(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Ql(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 Wk(e){let{pattern:r,target:t}=Ql(e);return r?Xl(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Vs(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Hk(e){let{pattern:r,target:t}=Ql(e);if(!r)return null;if(Xl(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Vs(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Fk(e){if(e.kind==="bad_scope"&&e.pattern?.includes("agent-os-land-pr")&&e.target==="package.json")return"Search package.json with a glob from the repo root: `rg -g package.json agent-os-land-pr .` \u2014 or run `node scripts/agent-os-land-pr.mjs <pr-url>` directly.";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 $k(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 Ys(e){let r=e.meta?.trim()||(e.command?$k(e.command):null)||null;if(r){let t=Wk(r),n=Fk(t);if(n)return n;let o=Hk(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=Gs(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 Ok,Nk,Zl=F(()=>{"use strict";Ok=new Set(["rg","ripgrep","grep"]),Nk=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Yt(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Gk(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 Jt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Yk(e){let r=e.metadata;if(!Jt(r))return null;let t=r.vulnerabilities;if(!Jt(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 Jk(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 qk(e,r){let t=e.error;if(Jt(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?Yt(o.split(`
|
|
8
|
+
`).find(Boolean)??o,160):"npm audit failed"}function zk(e){let r=`${e.stdout}
|
|
9
|
+
${e.stderr}`.trim(),t=Gk(r);if(!t||!Jt(t)){let o=Yt(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(Jt(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${qk(t,e.stderr)}`};let n=Yk(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:Jk(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Xk(e){return Kk.test(e)}function Qk(e){return jk.test(e)}function Zk(e){let r=Ys({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&&Vk.test(n)){let i=Yt(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Gs(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=Yt(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 Js(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Xk(e.command)){let i=r.trim()||n.trim()||t.trim();return zk({exitCode:e.exitCode,stdout:i,stderr:t})}if(Qk(e.command))return Zk({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Ys({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=Yt(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Kk,jk,Vk,ec=F(()=>{"use strict";Zl();Kk=/\bnpm\s+audit\b/i,jk=/\b(rg|ripgrep)\b/i,Vk=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as ey,readFileSync as ry}from"node:fs";function ty(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function rc(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 ny(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 tc(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 l=a,c=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:c,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function oy(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function no(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!ey(e))return r;let t=ry(e,"utf8").split(`
|
|
10
|
+
`).filter(Boolean);for(let n of t){let o=Gr(n);if(!o)continue;let s=ty(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 l=a.find(c=>c?.type==="tool_use");l&&(r.currentTool=String(l.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,l=rc(a);l&&(r.currentTool=l)}let i=tc(o);i&&oy(r,Js({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&ny(r,o)}return r}function sy(e){let r=tc(e);if(!r)return;let t=Js({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=qn(r.command).slice(0,120);return t.kind==="audit_findings"?`[audit:findings] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="search_no_matches"?`[search:no_matches] ${t.summary}${n?` \xB7 ${n}`:""}`:t.kind==="command_failure"?`[command:failed] ${t.summary}${n?` \xB7 ${n}`:""}`:`[command:ok] exit 0${n?` \xB7 ${n}`:""}`}function nc(e){if(e.type==="system"&&e.subtype)return`[system:${e.subtype}] ${String(e.status||e.cwd||"")}`.trim();if(e.type==="stream_event"&&e.event&&typeof e.event=="object"){let r=e.event.type;if(r==="content_block_start"){let t=e.event.content_block;if(t?.type==="tool_use")return`[tool:start] ${t.name}`}if(r==="content_block_delta"){let t=e.event.delta;if(t?.partial_json)return`[tool:input] ${t.partial_json}`}return r==="message_stop"?"[message:stop]":r?`[stream:${r}]`:void 0}if(e.type==="assistant"&&e.message&&typeof e.message=="object"){let r=e.message.content;if(Array.isArray(r)){let t=r.find(o=>o?.type==="text");if(t)return`[assistant] ${qn(String(t.text||""))}`;let n=r.find(o=>o?.type==="tool_use");if(n)return`[tool] ${n.name} ${JSON.stringify(n.input||{})}`}}if(e.type==="user"&&e.tool_use_result){let r=e.tool_use_result;return`[tool:result] stdout=${JSON.stringify(r.stdout||"")} stderr=${JSON.stringify(r.stderr||"")}`}if(e.type==="tool_call"){let r=String(e.subtype||""),t=r==="completed"?sy(e):void 0;if(t)return t;let n=e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:void 0,o=rc(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${qn(String(e.result||""))}`.trim()}var oo=F(()=>{"use strict";ec();w()});function ay(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function oc(e){let r=(e??"").trim();if(!r)return null;for(let t of iy)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${ay(r)}`};return null}var iy,sc=F(()=>{"use strict";iy=[{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"}]});function ic(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ly(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 cy(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ic(e.head)}function uy(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 tt(e){if(e.alive||ly(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=ic(e.headCommit)??cy(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:uy(s,r,t)}}var so=F(()=>{"use strict"});function qt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dy(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 py(e){if(qt(e.headCommit)||qt(e.prUrl)||qt(e.artifactBundlePath)||qt(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&qt(r.head))}function nt(e){return dy(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:py(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 ac(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var io=F(()=>{"use strict"});function qs(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 lc(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function ot(e){let r=e.trim();if(!r)return null;let t=qs(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=qs(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=qs(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=lc(l);for(let u of n){let d=lc(u);d>c&&(l=u,c=d)}return l}var ao=F(()=>{"use strict"});function st(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function my(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Sr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:st(e)}function lo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function cc(e){let r=null;if(typeof e=="string"){let o=ot(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=Sr(String(s.prUrl??s.pr_url??"")),a=st(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:st(s.mergeCommit??s.merge_commit),reason:st(s.reason)})}return n}function uc(e,r){let t=[],n=Sr(st(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Sr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function dc(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(!my(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?Sr(st(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Sr(r.targetPrUrls[0]):null):null;if(s){let d=uc(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let g of d)if(g!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${g} instead of canonical target ${s}`}}let p=cc(n).find(g=>g.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=cc(n),a=new Map(i.map(d=>[lo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>lo(Sr(d)??d)).filter(Boolean)),c=uc(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(lo(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(l.size===0)return{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 u=[];for(let d of r.targetPrUrls){let f=lo(Sr(d)??d),m=a.get(f);if(!m){u.push(f);continue}m.outcome!=="merged"&&!m.reason?.trim()&&u.push(f)}return u.length>0?{blocked:!0,reason:u.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${u.join(", ")}`}:{blocked:!1}}function pc(e){if(e.blocked)return e.detail??e.reason}var mc=F(()=>{"use strict";ao()});function gy(e){let r=Date.now();if(e.completionBlocker&&!fc(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ky(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=nt(o);if(s.blocked){let i=ac(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=dc({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=pc(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(hy(e))return{state:"done",reason:"empty abandoned worker record"};let o=oc(e.error);if(o)return{state:"blocked",reason:o.reason};let s=tt({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>fy)return{state:"needs_attention",reason:`no first stream event ${Ws(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>it?{state:"stale",reason:`no log/event/heartbeat activity for ${Ws(n)}s`}:{state:"ok",reason:"recent activity"}}function fc(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function hy(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 ky(e){let r=null;if(typeof e=="string"?r=ot(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 yy(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??et(t))}function T(e,r={}){let t=no(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=yy(e,t.finalResult,n),i=o?!1:$(e.pid),a=zn(e.stdoutPath),l=zn(e.stderrPath),c=zn(e.heartbeatPath),u=Kt(e.worktreePath),d=Zn(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Nl([t.lastEventAt,n.lastHeartbeatAt,Xn(e.stdoutPath),Xn(e.stderrPath),Xn(e.heartbeatPath)]),m=t.error||!i&&!s&&Qn(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=fc(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=gy({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:m,changedFiles:u,gitAncestry:d,completionBlocker:g,landingContract:k,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),S=g||h.state==="blocked"?"blocked":o||h.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:S,attention:h,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,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:m,changedFiles:u,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??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 re(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function at(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function zt(e,r){return r.length===0?e:r.some(t=>t.attention==="needs_attention"||t.attention==="stale"||t.attention==="blocked")?"needs_attention":r.every(t=>t.status==="done")?"done":r.some(t=>t.status==="running")?"running":e}var fy,it,G=F(()=>{"use strict";rt();oo();sc();so();ye();io();mc();ao();w();fy=18e4,it=6e5});import{readFileSync as Ry}from"node:fs";function by(e){if(!e||process.platform!=="linux")return null;try{return Ry(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function gc(e){if(!e.pid||process.platform!=="linux")return!0;let r=by(e.pid);return r?[e.worktreePath,e.workerDir,e.heartbeatPath].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>r.includes(n)):!1}function co(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!gc(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var zs=F(()=>{"use strict";G()});import kc from"node:os";import vy from"node:path";function hc(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Sy(e=b(),r,t){let n=hc(e.perWorkerMemBytes,Xt),o=hc(e.memReserveBytes,Qt),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):Zt)),i=po({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??kc.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Xs(e,r={}){let t=r.perWorkerMemBytes??Xt,n=r.memReserveBytes??Qt,o=r.memUtilization??Zt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,uo)}function wy(){return jt()}function Cy(e){let r=0;for(let t of ve(e)){let n=_(vy.join(x(e.id),"workers",R(t),"worker.json"),void 0);!n||!co(n)||r++}return r}function _y(){let e=0;for(let r of ee())e+=Cy(r);return e}function wr(e){let r=e.config??b(),t=e.totalMemBytes??kc.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=Sy(r,e.configuredMaxWorkersOverride,t),c=Be(r),u=e.freeMemBytes??wy(),d=e.activeWorkers??_y(),f=Math.max(0,Math.floor(t*s)-o),m=Math.max(0,Math.floor(f/n)),p=Math.max(0,Math.floor(Math.max(0,u-o)/n)),g=a,h=Math.max(0,Math.min(i??g,m)),S=Math.max(0,h-d),W=Math.min(S,p),v=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Le({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});v&&!v.ok&&(W=0);let E=null;return W<=0&&(v&&!v.ok?E=v.reason??"disk gate blocked worker admission":d>=h?E=`at worker limit (${d}/${h} running)`:p<=0?E="insufficient free memory \u2014 waiting for workers to finish":E="no worker slots available"),{ok:W>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:W,reason:E,...v?{diskGate:v}:{}}}var Xt,Qt,Zt,uo,en=F(()=>{"use strict";ro();O();Ee();mo();Vt();B();Zr();zs();w();Xt=500*1024*1024,Qt=4*1024*1024*1024,Zt=.85,uo=64});function Cr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function po(e){let r=e.config??{},t=e.env??process.env,n=Cr(r.perWorkerMemBytes,Xt),o=Cr(r.memReserveBytes,Qt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Zt)),i=Xs(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Cr(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Cr(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,uo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Cr(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,uo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function Qs(e={}){let r=e.totalMemBytes??0,t=Xs(r,{perWorkerMemBytes:Cr(e.config?.perWorkerMemBytes,Xt),memReserveBytes:Cr(e.config?.memReserveBytes,Qt),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):Zt}),n=e.diskGateOk??!0,o=n?t:Math.max(1,Math.min(t,4));return{totalMemBytes:r,autoCap:t,recommendedMaxWorkers:o,diskPath:e.diskPath??"/",diskGateOk:n,diskFreeBytes:e.diskFreeBytes??null}}var mo=F(()=>{"use strict";en()});var Rc={};jh(Rc,{runDeviceLogin:()=>Zs});import yc from"node:os";function xy(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Ye(String(r)):void 0}async function Py(e){await new Promise(r=>setTimeout(r,e))}async function Zs(e){let r=xy(e);if(!r)return console.error("kynver login (device flow) requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site, set KYNVER_API_URL, or run `kynver setup` first."),{ok:!1};let t=`${yc.hostname()} (${yc.platform()})`,n;try{let a=await fetch(`${r}/api/auth/device/code`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientName:t})});if(!a.ok)return console.error(`Could not start device authorization (${a.status}).`),{ok:!1};n=await a.json()}catch(a){return console.error(`Could not reach ${r}: ${a.message}`),{ok:!1}}let o=n.verification_uri_complete||n.verification_uri;console.log(""),console.log(" Authorize this machine:"),console.log(` 1. Open: ${o}`),console.log(` 2. Confirm the code: ${n.user_code}`),console.log(""),console.log(" Waiting for approval\u2026");let s=Date.now()+n.expires_in*1e3,i=Math.max(1,n.interval)*1e3;for(;Date.now()<s;){await Py(i);let a;try{a=await(await fetch(`${r}/api/auth/device/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_code:n.device_code})})).json().catch(()=>({}))}catch{continue}switch(a.status){case"approved":return a.api_key?(rn(a.api_key),console.log(" Approved \u2014 this machine is now linked to your Kynver account."),{ok:!0,apiKey:a.api_key}):{ok:!1};case"slow_down":i+=2e3;break;case"authorization_pending":typeof a.interval=="number"&&(i=Math.max(i,a.interval*1e3));break;case"access_denied":return console.error(" Request was denied in the browser."),{ok:!1};case"expired_token":return console.error(" The code expired before it was approved. Run `kynver login` again."),{ok:!1};default:break}}return console.error(" Timed out waiting for approval. Run `kynver login` again."),{ok:!1}}var ei=F(()=>{"use strict";O();w()});import{existsSync as vc,mkdirSync as Sc,readFileSync as wc,writeFileSync as Cc}from"node:fs";import{homedir as Ey,totalmem as Ay}from"node:os";import ri from"node:path";import Iy from"node:os";function b(){if(!vc(fo))return{};try{return JSON.parse(wc(fo,"utf8"))}catch{return{}}}function ze(e){Sc(go,{recursive:!0}),Cc(fo,`${JSON.stringify(ti(e),null,2)}
|
|
11
|
+
`,{mode:384})}function ti(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:pe(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:pe(e.defaultRepo.trim())}:{}}}function ct(e){return ti(e)}function Oy(e,r){let t=tn(),n=(typeof r.apiBaseUrl=="string"?r.apiBaseUrl:void 0)||e.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim(),o=(typeof r.agentOsId=="string"?r.agentOsId:void 0)||e.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||(t.runnerToken?.trim().startsWith("krc1.")?t.runnerTokenAgentOsId?.trim():void 0),i=(typeof r.repo=="string"?r.repo:r.discoverRepo===!0||r.discoverRepo==="true"?vr()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||vr()?.repo,a=(typeof r.harnessRoot=="string"?r.harnessRoot:void 0)||e.harnessRoot?.trim()||process.env.KYNVER_HARNESS_ROOT?.trim()||process.env.OPUS_HARNESS_ROOT?.trim();return{...n?{apiBaseUrl:Ye(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function Ny(e,r,t=Ay()){let n=typeof r.maxWorkers=="string"?r.maxWorkers:typeof r.maxConcurrentWorkers=="string"?r.maxConcurrentWorkers:void 0,o=typeof r.boxKind=="string"?r.boxKind:typeof r["box-kind"]=="string"?String(r["box-kind"]):void 0,s=Ue(process.env,{...e,...o?{boxKind:qr(o)}:{}}).boxKind,i=Le({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=Qs({totalMemBytes:t,diskPath:i.path,diskGateOk:i.ok,diskFreeBytes:i.freeBytes,config:e});return n?{maxConcurrentWorkers:Math.max(1,Math.floor(Number(n))),maxConcurrentWorkersSource:"setup-flag",boxKind:s}:e.maxConcurrentWorkers!==void 0&&e.maxConcurrentWorkers!==null?{maxConcurrentWorkers:Math.max(1,Math.floor(Number(e.maxConcurrentWorkers))),maxConcurrentWorkersSource:e.maxConcurrentWorkersSource??"operator",boxKind:s}:{maxConcurrentWorkers:a.recommendedMaxWorkers,maxConcurrentWorkersSource:"setup-auto",boxKind:s}}function tn(){if(!vc(lt))return{};try{return JSON.parse(wc(lt,"utf8"))}catch{return{}}}function _c(e){Sc(go,{recursive:!0}),Cc(lt,`${JSON.stringify(e,null,2)}
|
|
12
|
+
`,{mode:384})}function Z(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:tn().apiKey}function rn(e){_c({...tn(),apiKey:e})}function bc(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=tn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function _r(e,r){_c({...tn(),runnerToken:r,runnerTokenAgentOsId:e})}function L(e){let r=nn(e);return r||oi("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function xc(e){return nn(e)}function nn(e){let r=e||process.env.KYNVER_API_URL||process.env.KYNVER_CRON_FIRE_BASE_URL||process.env.OPENCLAW_CRON_FIRE_BASE_URL||b().apiBaseUrl;return r?Ye(String(r)):void 0}function Ty(e,r){let t=e||bc(r)||(r?void 0:bc(b().agentOsId));if(t)return String(t);let n=process.env.KYNVER_RUNTIME_SECRET||process.env.KYNVER_CRON_SECRET||process.env.OPENCLAW_CRON_SECRET;if(n)return console.warn("[kynver] using deployment-level callback secret; run `kynver runner credential --agent-os-id <id>` for a scoped token"),String(n)}async function ni(e,r,t){let n=Ty(e,r);if(n)return{ok:!0,secret:n};let o=Z(),s=nn(t?.baseUrl);if(o&&r&&s)try{let i=await xr(r,{baseUrl:s,apiKey:o});return _r(r,i),{ok:!0,secret:i}}catch(i){return{ok:!1,reason:`runner credential mint failed: ${i.message}`}}return{ok:!1,reason:"no runner credential: requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, or KYNVER_API_KEY + API base URL to mint one"}}async function K(e,r,t){let n=await ni(e,r,t);if(n.ok)return n.secret;oi(n.reason)}async function Pc(e,r){let t=Z(),n=nn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await xr(e,{baseUrl:n,apiKey:t});return _r(e,o),o}catch{return null}}async function Ec(e,r,t){let n=Z(),o=nn(t?.baseUrl);if(!n)return{ok:!1,reason:"KYNVER_API_KEY is required to refresh a rejected runner token"};if(!r)return{ok:!1,reason:"agentOsId is required to refresh a rejected runner token"};if(!o)return{ok:!1,reason:"KYNVER_API_URL or --base-url is required to refresh a rejected runner token"};try{let s=await xr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(_r(r,s),{ok:!0,token:s}):{ok:!1,reason:"runner credential refresh returned the rejected token"}}catch(s){return{ok:!1,reason:s.message}}}async function xr(e,r){let t=r?.apiKey||Z();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${L(r?.baseUrl)}/api/agent-os/by-id/${encodeURIComponent(e)}/runner-credentials`,s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({})}),i=await s.text(),a=null;try{a=JSON.parse(i)}catch{a=null}if(!s.ok||!a?.token)throw new Error(`runner credential mint failed (${s.status}): ${a?.error??i.slice(0,200)}`);return a.token}async function Ac(e){let r=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";r||oi("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await xr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});_r(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(lt),tokenPrefix:`${t.slice(0,12)}\u2026`,note:"Scoped runner token saved; callbacks use X-Kynver-Runner-Token."},null,2))}catch(t){console.error(t instanceof Error?t.message:String(t)),process.exit(1)}}function oi(e){console.error(e),process.exit(1)}function ho(e){let r={};for(let t=0;t<e.length;t++){let n=e[t];if(!n.startsWith("--"))continue;let o=n.slice(2).replace(/-([a-z])/g,(i,a)=>a.toUpperCase()),s=e[t+1];!s||s.startsWith("--")?r[o]=!0:(r[o]=s,t++)}return r}async function ko(e){let r=b(),t=Le({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=Qs({totalMemBytes:Iy.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Ny(r,e),s=ti({...r,...Oy(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});ze(s);let i=Ue(process.env,s),a,l=Z(),c=s.agentOsId;if(l&&c)try{let u=await xr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});_r(c,u),a="Scoped runner token minted and saved to ~/.kynver/credentials."}catch{a="Runner token not minted (server offline or master secret unset). Run `kynver runner credential` after deploy."}console.log(JSON.stringify({ok:!0,configPath:Y(fo),config:ct(s),boxKind:s.boxKind,boxKindSource:i.source,workerCapRecommendation:n,...i.warnings.length?{boxIdentityWarnings:i.warnings}:{},note:a??"boxKind and maxConcurrentWorkers persisted; override with --box-kind and --max-workers. Run `kynver login` + `kynver runner credential` for scoped callbacks."},null,2))}async function Ic(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){rn(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(lt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(ei(),Rc));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(lt)},null,2))}var go,fo,lt,pI,mI,O=F(()=>{"use strict";eo();qe();w();Ee();mo();Vt();go=ri.join(Ey(),".kynver"),fo=ri.join(go,"config.json"),lt=ri.join(go,"credentials");pI=500*1024*1024,mI=4*1024*1024*1024});O();import{mkdirSync as Lh,realpathSync as Wh}from"node:fs";import{fileURLToPath as pE}from"node:url";O();w();ei();import Dy from"node:os";function My(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||b().apiBaseUrl;return r?Ye(String(r)):void 0}async function Uy(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function yo(e){let r=My(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),Z()||(typeof e.apiKey=="string"?rn(e.apiKey):(await Zs({...e,apiBaseUrl:r})).ok||process.exit(1));let t=Z();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await Uy(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await ko(o),console.log(""),console.log(` Bootstrap complete \u2014 ${Dy.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online and configures local Kynver Cron when needed."),console.log(" Persistent background service (Linux): `kynver cron install --install-systemd` after your first start."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}O();import Ux from"node:os";O();function Ie(e){let r=String(e).trim();return r.startsWith("krc1.")?{"Content-Type":"application/json","X-Kynver-Runner-Token":r}:{"Content-Type":"application/json","X-Kynver-Cron-Secret":r,"X-OpenClaw-Cron-Secret":r,"X-Kynver-Runtime-Secret":r}}import{mkdirSync as By,readFileSync as Ly,renameSync as Wy,writeFileSync as Hy}from"node:fs";import{homedir as Fy}from"node:os";import Nc from"node:path";function Oc(e){return JSON.stringify(si(e))}function si(e){if(Array.isArray(e))return e.map(si);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=si(e[t]);return r}return e}function ii(e){if(!e)return null;let r=e.trim();if(!r)return null;if(/^[0-9a-fA-F]{64}$/.test(r))return new Uint8Array(r.match(/.{2}/g).map(t=>parseInt(t,16)));try{let t=Buffer.from(r,"base64");if(t.length===32)return new Uint8Array(t)}catch{}return null}function on(e){if(!e||typeof e!="object")return!1;let r=e;if(typeof r.signature!="string"||!r.signature||typeof r.publicKeyId!="string"||!r.publicKeyId)return!1;let t=r.bundle;return!(!t||typeof t!="object"||typeof t.version!="string"||!t.version||typeof t.generatedAt!="string"||!Array.isArray(t.personas)||!t.instructions||typeof t.instructions!="object"||!t.policyThresholds||typeof t.policyThresholds!="object")}function Tc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Nc.join(Fy(),".kynver",`instruction-bundle-${r}.json`)}function Dc(e,r){try{let t=Tc(e);By(Nc.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;Hy(n,JSON.stringify(r),"utf8"),Wy(n,t)}catch{}}function Mc(e){try{let r=Ly(Tc(e),"utf8"),t=JSON.parse(r);return on(t)?t:null}catch{return null}}var $y="embedded-1",Ky=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],jy={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete`. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
13
|
+
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
14
|
+
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
15
|
+
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
|
16
|
+
`)},Vy={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},ut={version:$y,generatedAt:"1970-01-01T00:00:00.000Z",personas:Ky,instructions:jy,policyThresholds:Vy};var sn=ut,Uc="embedded";function an(){return sn.version}function lr(){return Uc}function Bc(e,r){sn=e,Uc=r}function ln(e){let r=sn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=ut.instructions[e];return typeof t=="string"?t:""}function dt(e,r){let t=sn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=ut.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Lc(e){if(!e)return null;let r=e.trim().toLowerCase();return sn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Yy,verify as Jy}from"node:crypto";var Gy={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed"};function Wc(e,r=process.env){let t=ii(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Gy[e];return n?ii(n):null}var qy=Buffer.from("302a300506032b6570032100","hex");function zy(e){return Yy({key:Buffer.concat([qy,Buffer.from(e)]),format:"der",type:"spki"})}function Xy(e,r){if(!on(e))return{ok:!1,reason:"malformed signed bundle payload"};let t;try{t=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(t.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(Oc(e.bundle),"utf8");return Jy(null,n,zy(r),t)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function Hc(e,r=process.env){if(!on(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Wc(e.publicKeyId,r);return t?Xy(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Qy=15*6e4,Zy=1e4,Xe={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function un(e,r){console.error(JSON.stringify({event:e,...r}))}function Fc(e,r,t){let n=Hc(e);return n.ok?(Bc(n.bundle,r),r==="server"&&Dc(t,e),!0):(un("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function cn(e){if(Xe.diskCacheTried)return!1;Xe.diskCacheTried=!0;let r=Mc(e);return r?Fc(r,"disk",e):!1}async function $c(e){let r=e.nowMs??Date.now(),t=()=>({source:lr(),version:an(),updated:!1});if(!e.force&&r-Xe.lastAttemptAtMs<Qy)return t();Xe.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return lr()==="embedded"&&cn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Zy);try{let l=Ie(o);delete l["Content-Type"],Xe.etag&&lr()==="server"&&(l["If-None-Match"]=Xe.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return Xe.routeMissingLogged||(Xe.routeMissingLogged=!0,un("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),lr()==="embedded"&&cn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return un("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),lr()==="embedded"&&cn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Fc(u,"server",e.agentOsId)?lr()==="embedded"&&cn(e.agentOsId)?{...t(),updated:!0}:t():(Xe.etag=c.headers.get("etag"),un("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:an(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return un("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),lr()==="embedded"&&cn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}O();Ee();mo();import eR from"node:os";function Kc(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function jc(e=b(),r=process.env){let t=Ue(r,e),n=po({config:e,totalMemBytes:eR.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let a=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",l="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";a?s.push(l):o.push(l)}let i=s.length===0;for(let a of o)Kc("warn",a);for(let a of s)Kc("error",a);return{ok:i,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:n.configuredMaxWorkers??n.autoCap,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as rR,readFileSync as tR,renameSync as nR,writeFileSync as oR}from"node:fs";import{homedir as sR}from"node:os";import Vc from"node:path";function Gc(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Vc.join(sR(),".kynver",`daemon-heartbeat-${r}.json`)}function Yc(e){try{let r=Gc(e.agentOsId);rR(Vc.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;oR(n,JSON.stringify(t),"utf8"),nR(n,r)}catch{}}function Jc(e){try{let r=tR(Gc(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function qc(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function iR(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function pt(){process.platform==="win32"&&(iR("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}O();import{existsSync as aR}from"node:fs";import{homedir as lR}from"node:os";import cR from"node:path";function zc(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function dn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function cr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||cR.join(lR(),".kynver","agent-os-cron.json")}function uR(e=cr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function dR(){let e=b();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function ai(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function Qe(){let e=cr(),r=uR(e),t=dR(),n=ai(),o=!!(t&&n),s=aR(e),i=o&&(s||zc("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:zc("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:dn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:dn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:dn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:dn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:dn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Ro(e=Qe()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function pR(e){return e.replace(/\/+$/,"")}async function Xc(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${pR(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:Ie(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as mR,existsSync as li,openSync as fR,readFileSync as gR,unlinkSync as Qc,writeFileSync as hR}from"node:fs";var kR=10*6e4;function Zc(e){if(!li(e))return null;try{let r=JSON.parse(gR(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function yR(e){let r=Zc(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>kR}function eu(e){if(li(e)&&!yR(e)){let r=Zc(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(li(e))try{Qc(e)}catch{}try{let r=fR(e,"wx");return hR(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),mR(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function ru(e){try{Qc(e)}catch{}}var RR=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function bR(e){return RR.test(e.trim())}function vR(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function pn(e,r,t,n){let o=e.trim();return o==="*"?!0:vR(o,t,n).has(r)}function SR(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return pn(n,r.getUTCMinutes(),0,59)&&pn(o,r.getUTCHours(),0,23)&&pn(s,r.getUTCDate(),1,31)&&pn(i,r.getUTCMonth()+1,1,12)&&pn(a,r.getUTCDay(),0,6)}var wR=366*24*60;function CR(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function tu(e,r){if(!bR(e))return null;let t=CR(r);t=new Date(t.getTime()+6e4);for(let n=0;n<wR;n++){if(SR(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function nu(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=tu(e.cron.trim(),r);return t?t.toISOString():null}return null}function ci(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=tu(e.cron.trim(),r);return t?t.toISOString():null}import{promises as _R}from"node:fs";async function ou(e){try{return await _R.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function xR(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Pr(e=cr()){let r=await ou(e);return xR(r)}async function su(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function iu(e,r=cr()){let t=await Pr(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await su(r,t)}async function au(e=cr()){return await ou(e)!==null?{created:!1}:(await su(e,[]),{created:!0})}import{randomBytes as PR}from"node:crypto";import{promises as mn}from"node:fs";import ER from"node:path";var bo={version:1,jobs:{}};async function AR(e){try{return await mn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function IR(e){if(!e)return{...bo,jobs:{...bo.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...bo,jobs:{}}:r}catch{return{...bo,jobs:{}}}}async function vo(e){let r=await AR(e);return IR(r)}async function OR(e,r){await mn.mkdir(ER.dirname(e),{recursive:!0});let t=PR(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await mn.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
17
|
+
`,"utf8");try{await mn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await mn.unlink(n).catch(()=>{})}}async function lu(e,r){await OR(e,r)}function cu(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function NR(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function TR(e){return!!e.completedAt}function DR(e,r,t){if(e.consecutiveFailures===0)return!0;if(e.consecutiveFailures>r.maxRetries)return!1;if(!e.lastAttemptAt)return!0;let n=Date.parse(e.lastAttemptAt);return Number.isNaN(n)?!0:t-n>=r.retryBackoffMs}function MR(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=nu(e.spec,t);return r.nextFireAt=n,n}function UR(e,r,t,n){if(e.paused||TR(r)||NR(r,t)||!DR(r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function BR(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=ci(e.spec,t))}async function mt(e={}){let r=e.env??Qe(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=eu(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await Pr(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await vo(r.statePath),l=[];for(let m of i){let p=cu(a,m.providerScheduleId);MR(m,p,t),UR(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let g=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return g-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:m,job:p}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let g=Date.parse(p.nextFireAt??"");if(!Number.isNaN(g)&&g<n-r.tickIntervalMs*2){p.nextFireAt=ci(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),BR(m,p,t);try{let g=await Xc({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,g.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,f--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await lu(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{ru(r.lockPath)}}w();B();import uu from"node:path";var du="mesh-cron-lease.json";function So(e){return _(uu.join(x(e),du),null)}function pu(e,r){le(uu.join(x(e),du),{...r,updatedAt:new Date().toISOString()})}function mu(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import c_ from"node:path";B();zs();w();import LR from"node:path";function WR(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function wo(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(LR.join(x(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!co(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...WR(o)})}return t}O();O();function fu(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function gu(e){let r=new AbortController,t=setTimeout(()=>r.abort(),fu());try{return await e(r.signal)}finally{clearTimeout(t)}}function hu(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:fu()}}}async function Er(e,r,t){let n;try{n=await gu(s=>fetch(e,{method:"POST",headers:Ie(r),body:JSON.stringify(t),signal:s}))}catch(s){return hu(s)}let o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,response:o}}async function q(e,r,t,n){let o=await Er(e,r,t);if(o.ok||o.status!==401)return o;let s=await Ec(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Er(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Co(e,r){let t;try{t=await gu(o=>fetch(e,{method:"GET",headers:Ie(r),signal:o}))}catch(o){return hu(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}O();var HR=["implementation","review","landing"],FR=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function $R(e){return HR.includes(e)}function KR(e){return FR.includes(e)}function ku(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||$R(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:KR(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var yu=ut.personas.map(ku),jR=new Map(yu.map(e=>[e.slug,e]));function VR(e){if(!e)return null;let r=e.trim().toLowerCase(),t=jR.get(r)??null,n=Lc(r);if(!n)return t;let o=ku(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function ui(e){return VR(e)?.defaultRoleLane??null}function Ru(){return yu.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function bu(e){return(e??"").trim().toLowerCase()}function GR(e){switch(bu(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function YR(e){let r=bu(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=GR(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function vu(e){return YR(e)??"any"}Vt();en();B();B();function _o(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function di(e){return e.toLowerCase()}function JR(e){let r=_o(e,"roleLane");if(r)return r;let t=di(_o(e,"executorRef")),n=di(_o(e,"title")),o=di(_o(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=ui(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Su(e){let r=JR(e);return r?{...e,roleLane:r}:e}O();var Ze="cursor",qR=new Set(["claude","opus","anthropic"]),zR=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function pi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ar(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return qR.has(r)?!0:r.includes("claude")||r.includes("opus")}function mi(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ar(r))return!0;let t=pi(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=pi(e,"description");if(zR.some(s=>s.test(n)))return!0;let o=pi(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function XR(e,r){return{provider:Ze,model:fi,rule:`policy:cursor_default${r}`,requestedModel:e}}function wu(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ar(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(mi(t)||r.rule==="explicit:cli"&&Ar(r.provider)||!Ar(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return XR(r.model,o)}function xo(e,r=Ze){let t=e?.trim();return t?Ar(t)?Ze:t==="codex"?"codex":t:r}var Cu={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function ft(e){return Cu[e]}function _u(){return Object.values(Cu)}import{existsSync as ZR}from"node:fs";import{homedir as eb}from"node:os";import Eu from"node:path";import{createHash as xu}from"node:crypto";import{statSync as QR}from"node:fs";import{spawnSync as Pu}from"node:child_process";function We(e){try{let r=QR(e),t=`${e}|${r.size}|${r.mtimeMs}`;return xu("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function gt(e){return xu("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function we(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function He(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Pu(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function Po(e,r,t={}){let n=t.timeoutMs??8e3;try{return Pu(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var rb="codex";function tb(){let e=eb();return[Eu.join(e,".codex","auth.json"),Eu.join(e,".config","codex","auth.json")]}function Au(e=new Date().toISOString()){let r=we(rb,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:gt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=tb().find(s=>ZR(s)),n=He(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?We(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as nb}from"node:fs";import{homedir as ob}from"node:os";import gi from"node:path";function sb(){let e=process.env.HERMES_HOME?.trim(),r=e?gi.resolve(e):gi.join(ob(),".hermes");return gi.join(r,"auth.json")}function Eo(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=sb(),o=nb(n),s=Po(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?We(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function ht(e=new Date().toISOString()){let r=Au(e);if(r.ready)return{...r,path:"codex_cli"};let t=Eo(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var Iu=["low","medium","high"],Ou={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Nu(e,r){let t=ft(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function ib(e,r){let t=ft(e.providerId),n=ft(r.providerId),o=Iu.indexOf(t.costTier)-Iu.indexOf(n.costTier);if(o!==0)return o;let s=Ou[e.binding.authSource]-Ou[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function hi(e){let r=_u().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Nu(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(ib)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Nu(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as ab}from"node:fs";import{homedir as lb}from"node:os";import cb from"node:path";var ub="claude";function db(){let e=lb();return[cb.join(e,".claude",".credentials.json")]}function Tu(e=new Date().toISOString()){let r=we(ub,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:gt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=db().find(i=>ab(i)),o=Po(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?We(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as pb}from"node:fs";import{homedir as mb}from"node:os";import fb from"node:path";var gb="agent";function hb(){let e=mb();return[fb.join(e,".config","cursor","auth.json")]}function Du(e=new Date().toISOString()){let r=we(gb,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:gt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=He(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=hb().find(s=>pb(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?We(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as kb,readFileSync as yb}from"node:fs";import{homedir as Rb}from"node:os";import ki from"node:path";var bb=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function vb(){let e=process.env.HERMES_HOME?.trim(),r=e?ki.resolve(e):ki.join(Rb(),".hermes");return ki.join(r,".env")}function Sb(e){try{let r=yb(e,"utf8"),t=[];for(let n of bb)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Mu(e=new Date().toISOString()){let r=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=He(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=vb(),o=kb(n),s=o?Sb(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?We(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Uu(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=ht(r),n={codex:t,cursor:Du(r),claude:Tu(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:Mu(r),hermesOpenAiCodex:Eo(r),codexAdapterPath:t.path,readyCount:o}}var wb=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],Cb=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function yi(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function _b(e){let r=yi(e,"executorRef").toLowerCase(),t=yi(e,"title").toLowerCase(),n=yi(e,"description").toLowerCase(),o=`${r}
|
|
14
18
|
${t}
|
|
15
|
-
${n}`;return OR.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":IR.some(s=>s.test(o))?"low":"elevated"}function TR(e){let r=ut(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function DR(e){let r=e.inventory??uu();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Er(e){let r=TR({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function du(e){let r=e.task??{},t=NR(r),n=DR({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:pt())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Qe;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=oi({inventory:n,riskClass:t});return Er(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Er({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Er({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Er({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=oi({inventory:n,riskClass:t});if(a)return Er({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Er({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}Vr();w();import{closeSync as pu,openSync as mu}from"node:fs";import{spawn as HR}from"node:child_process";var MR=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function UR(e){return e.replace(MR,"")}var WR=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ai(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var LR=new Set(["cursor"]);function BR(e){let r=e.trim().toLowerCase();return LR.has(r)?"auto":null}function li(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=UR(t).trim()||r;return WR.test(o)||!ai(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function mt(e,r){let t=(e??"").trim();return t?ai(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function ci(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=BR(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:ai(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var ft="claude-sonnet-4-6",fu={name:"claude",defaultModel:ft,preflightModel(e){return li(e,ft)},start(e){let r=li(e.model,ft);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=mu(e.stdoutPath,"a"),o=mu(e.stderrPath,"a"),s=["ignore",n,o],i=HR("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],ae({cwd:e.worktreePath,detached:!0,stdio:s,env:Ye(process.env)}));if(pu(n),pu(o),!i.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return i.unref(),{pid:i.pid,model:t}}};Vr();w();import{closeSync as yu,existsSync as jR,openSync as Ru}from"node:fs";import{spawn as vu}from"node:child_process";Vr();w();import{closeSync as gu,openSync as hu}from"node:fs";import{spawn as FR}from"node:child_process";var ui=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function $R(){return Ye({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function KR(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var ku={name:"hermes-codex",defaultModel:ui,preflightModel(e){return mt(e,ui)},start(e){let r=mt(e.model,ui);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=hu(e.stdoutPath,"a"),o=hu(e.stderrPath,"a"),s=["ignore",n,o],i=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=KR(t,e.prompt),l=FR(i,a,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:$R()}));if(gu(n),gu(o),!l.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${i}\` on PATH? run \`hermes auth status openai-codex\`)`);return l.unref(),{pid:l.pid,model:t}}};function VR(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Ar=VR();function GR(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function YR(){return Ye({...process.env,CI:"1",NO_COLOR:"1"})}function JR(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function qR(e,r,t){if(!(process.platform!=="win32"&&jR("/usr/bin/script")))return vu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return vu("script",["-qfc",o,"/dev/null"],t)}var bu={name:"codex",defaultModel:Ar,preflightModel(e){return mt(e,Ar)},start(e){if(pt().path==="hermes_openai_codex")return ku.start(e);let t=mt(e.model,Ar);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Ru(e.stdoutPath,"a"),s=Ru(e.stderrPath,"a"),i=["ignore",o,s],a=GR(),l=JR(n,e.prompt),c=qR(a,l,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:YR()}));if(yu(o),yu(s),!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};var zR="claude-sonnet-4-6",ti="composer-2.5";function Ro(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Su(e){return e.toLowerCase()}function pi(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||zR}function di(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":"cursor"}function XR(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:ti,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:ft,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function wu(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function QR(e){let r=Su(Ro(e,"executorRef")),t=Ro(e,"title").toLowerCase(),n=Ro(e,"priority")||"normal",o=Su(Ro(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Ar,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Ar,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return wu(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(wu(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=pi();return{model:s,provider:di(s),rule:"default:global"}}function vo(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=XR(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||di(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=QR(e.task);r={...o,requestedModel:o.model}}else{let o=pi();r={model:o,provider:e.explicitProvider?.trim()||di(o),rule:"default:global",requestedModel:o}}let t=Xc({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Pr(t.provider)&&(e.explicitProviderIsOperatorOverride||ri(e.task)))return t;let n=du({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Ar:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Cu(e,r,t){return e||r||t||pi()||ft}function xu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function _u(){return{maxTaskAttempts:xu(process.env.KYNVER_MAX_TASK_ATTEMPTS,4),dispatchCooldownMs:xu(process.env.KYNVER_DISPATCH_COOLDOWN_MS,5e3)}}I();import rv from"node:path";W();G();w();var mi="kynver-harness:",Pu="@runner:";function fi(e){return e?.trim()?e.trim():null}function ZR(e){let r=fi(e);if(!r?.startsWith(mi))return null;let t=r.slice(mi.length),n=t.indexOf(Pu);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function gi(e,r){let t=e.trim(),n=r.trim();return`${mi}${t}${Pu}${n}`}function hi(e,r){let t=fi(r);return t?ZR(e)===t:!1}function bo(e){let r=fi(e.workerLeaseOwner);return r&&hi(r,e.runId)?r:gi(e.runId,e.runnerId)}import Eu from"node:os";Ee();Ee();import ev from"node:os";function So(e,r){let t=(r??ev.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function lr(e){return e?.trim()?e.trim():null}function He(e={}){let r=e.env??process.env;return{runnerId:lr(r.KYNVER_RUNTIME_ID)??lr(r.OPENCLAW_RUNTIME_ID)??lr(r.HOSTNAME)??Eu.hostname(),hostname:lr(r.HOSTNAME)??Eu.hostname(),profile:lr(r.KYNVER_RUNNER_PROFILE)??lr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:lr(r.KYNVER_HARNESS_REPO)??lr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null}}function Au(e,r){return x(rv.join(_(e),"workers",R(r),"worker.json"),void 0)}async function wo(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=L(r.baseUrl?String(r.baseUrl):void 0),s=await K(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):ki,a=He({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Au(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!$(f.pid)){u.push(d);continue}if(T(f).status==="done"){u.push(d);continue}let p=bo({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,k=await q(g,s,{leaseOwner:p,leaseDurationMs:i,...f.leaseToken?{leaseToken:f.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(k.ok){l.push(d);continue}let h=k.response&&typeof k.response=="object"&&"reason"in k.response?String(k.response.reason??`http ${k.status}`):`http ${k.status}`;c.push({worker:d,reason:h})}return{renewed:l,failed:c,skipped:u}}function Ou(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=Au(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}ye();W();W();import{existsSync as vb,mkdirSync as bb}from"node:fs";import ht from"node:path";var tv=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,nv="next-action-fix:";function Co(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Iu(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Co(e)}function ov(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(nv)||t.includes("repair")||t.includes("unblock"))}function sv(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(tv);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Co(String(n.targetPrUrl??n.target_pr_url??"")),s=Co(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Iu(o):null,targetPrBranch:s}}catch{return r}}function Nu(e){if(!ov(e))return null;let r=sv(e.description),t=e.prUrl?Iu(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Co(e.branch)}:null}function Tu(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function Du(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?["Plan progress: when planId is set, use `kynver plan progress` for in_progress|running|partial|blocked. Use `in_progress` for agent-loop current focus; use `running` only when an executor holds a lease. Row `done` is MCP/session only.",e.planId?`Active planId: ${e.planId}`:"No planId on this worker."]:["Structured plan progress (required when planId is set):","- Harness checkpoints only: `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked` (the by-id harness route rejects `done` and confirm events). Prefer `in_progress` at turn start for current focus; daemon sets `running` on dispatch.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`). Do not propose or confirm row `done` from the worker CLI.","- Propose/confirm row `done` is MCP/session only: chat agents use `agent_os_plan_progress_event_append` on the slug route (implementer proposes with `proposed: true`; report_reviewer/deep_reviewer confirm with `proposed: false`).","- When blocked on operator/Ghost/runtime review, create a linked review task (MCP `agent_os_plan_review_task_create` or API) and pass `--review-task <taskId>`.","- Before the completion report: mark completion-report rows partial with evidence; do not skip report review.","- After implementation: wait for report_reviewer then deep_reviewer confirmation (via MCP/session agents) before follow-up rows close.",e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work."],o=t?["Merge-gate cost control: do not use Vercel previews/builds for PR verification. Run `node scripts/agent-os-pr-merge-gate.mjs --pr <url> --agent-os-id <id>` (or `verify-pr-local.mjs --from-pr` + POST pr-merge-gate/refresh) before any GitHub Actions run; request merge-gate only via refresh then POST pr-merge-gate/request-run (one Actions run per PR head unless human approves extra). Per-PR Vercel preview builds are off by default \u2014 production deploy runs via release batch after merge."]:["GitHub Actions merge-gate cost control (Kynver/Hermes PRs):","- Prefer local cached package verification (`node scripts/verify-pr-local.mjs --emit-json`) before GitHub Actions. Do not use Vercel previews/builds as PR evidence.","- Do not push empty commits to re-trigger CI. One budgeted merge-gate Actions run per PR candidate (head SHA) unless a human approves extra.","- Record evidence: POST `/api/agent-os/by-id/<agentOsId>/pr-merge-gate/refresh` with prUrl + local payloads.","- Request the final Actions run only when local verification is green: POST `.../pr-merge-gate/request-run` (applies `merge-gate` label).","- Empty failed Actions jobs (no runner/steps/logs) are infra/quota \u2014 do not enter repair loops; escalate to operator.","- After merge, landed PRs accumulate into a release batch; run batch verification then manual Vercel production deploy from Command Center (release train). PR landing completes with: verification complete, awaiting release batch/deploy."],s=t?["Plan artifacts: when authoring/revising docs/superpowers/plans/, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in the harness worktree."]:["Plan persistence: use AgentOS API/MCP first; on approval/auth/network/server/interruption failures run `kynver plan persist` (queues under ~/.kynver/state/plan-outbox) then `kynver plan outbox drain` when connectivity returns. Never treat /tmp-only files as persisted plans.","PR-first plan artifacts (when authoring or revising docs/superpowers/plans/):","- Before substantial plan drafting: create a feature branch, open a GitHub PR (draft OK), commit and push the plan file \u2014 do not leave the canonical plan only in this harness worktree.","- Iterate review on that PR branch; link prUrl on the AgentOS task and plan progress evidence (`--evidence pr:<url>`).","- See docs/superpowers/plans/2026-05-25-pr-first-plan-artifact-preservation.md for the full checklist."];return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Final response must include files changed, verification commands, and unresolved risks.","Structured final result (recommended): record completion as JSON with summary, laneExpertise { whatChanged, why, files, prUrls, verification, risks, blockers, lessonsLearned, laneGuidance }, and targetPrReconciliation [{ prUrl, outcome: merged|skipped|blocked, mergeCommit?, reason? }] for every target PR on landing-only tasks. Persona-attributed tasks: put repeatable lane lessons in lessonsLearned/laneGuidance (with evidence); substantive rows auto-persist as persona-scoped Lane A rules \u2014 global cross-lane policy stays in owner memory, not worker lessons.","Completion handoff (required): before you stop, ensure the harness records a final result \u2014 summarize outcome in your last message and append a heartbeat line with phase `complete`. If you leave uncommitted changes or committed work without a PR, the orchestrator blocks completion until a GitHub PR exists (or you discard/commit cleanly). One-off helper scripts must be removed (`kynver worker discard-disposable --path <file>`) or committed before completion \u2014 maintenance/board-drain workers are not exempt. Exiting with only dirty files and no PR routes to salvage review, not production review.","PR-ready handoff: for substantial implementation work, commit, push, and open a GitHub PR (draft OK) on your branch before finishing \u2014 or rely on the harness to run `gh pr create` at completion when `gh` is authenticated.","Expert review / production-review workers (Dalton/Lorentz, plan-review-task, scheduledJob reviewer children): do NOT open new implementation PRs \u2014 review the parent task's existing PR and record reviewVerdict in finalResult; landing-contract targetPrReconciliation does not apply.","Worker resource guard: do not run full monorepo verification (`npm run typecheck`, `npm run build`, or equivalent) from this worker lane unless an operator explicitly requests it. Use targeted checks for touched paths and rely on CI/operator lanes for heavy gates. When heavy verification is required, route through `node scripts/verify-pr-local.mjs` or `kynver harness verify` \u2014 they acquire the global heavy-verification lease so parallel workers do not launch simultaneous typechecks.","npm publish boundary: do not run `npm publish`, do not republish `@kynver-app/*` packages, and do not block on an operator to publish. When you need newer runtime code than npm, use this repo checkout (`npm run kynver:build`, `npm run kynver`) and record evidence: packages/kynver-runtime/package.json version + git ref in your completion report.","If verification fails (including OOM), append a heartbeat line immediately with the last command, failure reason, dirty-file status, commit/PR handoff state, and next action so recovery does not require log spelunking.","Landing-wrapper cleanup on a git ref: use `node scripts/agent-os-land-pr-cleanup-verify.mjs --ref origin/main` (JSON, exit 0). Do not use `git show <ref>:scripts/agent-os-land-pr.mjs | rg \u2026` \u2014 ripgrep exit 1 when markers are absent is reported as a failed command in Telegram/status tooling.","",...n,"",...o,"",...s,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (Lane A \u2014 from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...Tu({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
16
|
-
`)
|
|
17
|
-
`)
|
|
18
|
-
`)}function xi(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??on(e.snapshot.worktreePath,e.exec)??void 0};let r=Oo({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function _i(e,r=Ao){let t=e.prUrlHint??Ju(e.status.finalResult)??null,n=zu(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!qu({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?xi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return xi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Wv(r)){let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=Zu(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let k=!1,h=!1,S=n.headCommit??on(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Oo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!A.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${A.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};k=A.committed,h=A.pushed,S=A.headCommit??S}else{let A=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(A.status!==0&&!/already up to date/i.test(A.stderr||A.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${A.stderr||A.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};h=A.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:k,pushed:h}}let l=Eo(n.worktreePath,i,n.branch,r);if(l)return xi({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,m=Oo({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=m.committed,d=m.pushed,!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let k=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(k.status!==0&&!/already up to date/i.test(k.stderr||k.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${k.stderr||k.stdout||k.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=k.status===0}f=m.headCommit??f??on(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=ed({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Lv(e.worker.name,e.worker.runId),body:Bv(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(Gu(g.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:g.created}}G();Yn();function Io(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 n!=="node_modules"&&!n.startsWith("node_modules/")})}function rd(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function td(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function nd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function sd(e){let r=nd(e);if(!r)return[];let t=nd(r.worktreeHandoff),n=td(t?.disposableArtifactsRemoved);return n.length?n:td(r.disposableArtifactsRemoved)}function od(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function id(e,r){let t=Io(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>od(o)));return t.every(o=>{let s=od(rd(o));return n.has(s)})}function No(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ad(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Hv(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 Fv(e){let r=ad(e.disposableArtifactsRemoved),t=sd(e.finalResult);return[...new Set([...r,...t])]}function ld(e){let r=ad(e.changedFiles),t=Io(r),n=Fv(e),o=t.length===0||id(r,n);return No(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:No(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:No(e.artifactBundlePath)||No(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:Hv(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}W();G();w();import $v from"node:path";var Kv=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function cd(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function jv(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Vv(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:jv(r);return{finalResult:r??t??"completed",summary:t}}function Pi(e,r,t){if(cd(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Vv(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function Gv(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function ud(e,r){let t=Gv(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=x($v.join(_(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||cd(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Kv.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});Pi(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Yv from"node:path";var Jv=/^[a-z0-9][a-z0-9._-]{0,127}$/i,qv=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Ei=new Set(["undefined","null"]),dd="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function To(e){let r=e.trim();if(!Jv.test(r))throw new Error(`invalid run id: ${e}`);return r}function zv(e){let r=e.trim();if(!qv.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Ai(e){return typeof e=="string"?e.trim():""}function $e(e){let r=Ai(e.run),t=Ai(e.name);return(!r||Ei.has(r))&&tr(`missing --run RUN_ID (${dd})`),(!t||Ei.has(t))&&tr(`missing --name WORKER_NAME (${dd})`),{runId:To(r),workerName:zv(t)}}function Oi(e){let r=Ai(e.run);return(!r||Ei.has(r))&&tr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),To(r)}function pd(e){let r=Yv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function md(e,r,t){let n=await fetch(e,{method:"POST",headers:Xe(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function Xv(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function fd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function sn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qv(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function Zv(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function hd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function eb(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function an(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function rb(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Do(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function tb(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function cn(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Ir(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&wi(n)&&rb(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=_i({worker:n,run:o,status:s});if(!P.ok)return an(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,Do(o)),s=tb(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=ld({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!P.allowed){let b=P.detail??`worktree completion blocked (${P.state})`;return an(n,b),{ok:!1,reason:b,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=L(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await K(f,i,{baseUrl:d}),p=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,g={...s};n.disposableArtifactsRemoved?.length&&(g.disposableArtifactsRemoved=n.disposableArtifactsRemoved);let k={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),status:n.leaseToken?{...g,leaseToken:n.leaseToken}:g,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},h=await md(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await fc(i,{baseUrl:d});P&&P!==m&&(m=P,h=await md(p,m,k))}if(h.ok){let P=Fu(h.parsed);if(!$u(P)){let oe=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;an(n,oe);let Te={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Si(n,n.runId,Te),{ok:!1,httpStatus:h.status,response:h.parsed,reason:oe,completionBlocked:!0}}an(n,void 0);let b=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Si(n,n.runId,E),Pi(n,s,{source:"harness-completion"});let H=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:b,...H?{prHandoff:{prUrl:H}}:{}}}let S=h.status===401||h.status===403,A=Xv(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),B=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return an(n,B),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Ni(e){try{let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await cn(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(r){console.error(`worker complete failed: ${r.message}`),process.exit(1)}}function kd(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=U(n.runId),s=T(n,Do(o));le(ln.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function nb(e){return{full:`kynver worker list --run ${e} --full`,blocked:`kynver worker list --run ${e} --blocked`,running:`kynver worker list --run ${e} --running`,task:`kynver worker list --run ${e} --task <task-id>`,worker:`kynver worker list --run ${e} --worker <worker>`,runFull:`kynver run status --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`}}function Ii(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function ob(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Ii(e.task??e.taskId);t&&(r.task=t);let n=Ii(e.worker??e.name);n&&(r.worker=n);let o=Ii(e.status);return o&&(r.status=o),r}function sb(e,r){if(r.blocked){let t=typeof e.attention=="string"?e.attention:"",n=typeof e.status=="string"?e.status:"";if(!(t==="blocked"||t==="needs_attention"||t==="stale"||n==="blocked"))return!1}return!(r.running&&!(e.status==="running"&&e.attention!=="blocked"&&e.attention!=="needs_attention")||typeof r.task=="string"&&e.taskId!==r.task||typeof r.worker=="string"&&e.worker!==r.worker||typeof r.status=="string"&&e.status!==r.status)}function yd(e,r){let t=ob(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>sb(s,t)),o={...e,workerCount:n.length,needsAttention:n.filter(s=>s.attention&&s.attention!=="ok"&&s.attention!=="done").map(s=>s.worker),workers:n,activeFilters:t};return e.summary&&(o.summary={statusCounts:cr(n,"status"),attentionCounts:cr(n,"attention"),lifecycleCounts:cr(n,"lifecycleStage")}),e.controller&&(o.controller=bd(n)),o}function Rd(e){let r=Oi(e),t=e.full===!0||e.full==="true",n=yd(t?Nr(r):wd(r),e),o=n.workers;console.log(JSON.stringify({runId:n.runId,status:n.status,projection:t?"full":"compact",workerCount:n.workerCount,...n.activeFilters?{activeFilters:n.activeFilters}:{},...t?{}:{resultContract:{projection:"compact",rawWorkerPayloadsOmitted:!0,deepDetailAvailableVia:["--full","worker status","worker tail","run status --full"]},drilldownCommands:nb(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function vd(e){let{run:r,workerName:t,worker:n}=e,o=T(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=et({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=hd(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=fd(n.completionResponse),m=fd(f?.task),p=sn(f?.outcome),g=sn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(b=>typeof b=="string"&&b.trim().length>0):[],h=sn(m?.prUrl)??sn(f?.prUrl),S=sn(n.completionReportedAt),A=Qv({finished:re(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),B=Zv({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:re(o)}),P=eb({changedFiles:o.changedFiles,headCommit:s,prUrl:h??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let b=n.instructionPolicyEvidence;if(!b||typeof b!="object")return null;let E=b.ruleSlugs;return Array.isArray(E)?E.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:h,handoffState:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:A,completionReportedAt:S,completionOutcome:n.completionOutcome??null,completionRouteStatus:g,completionRouteOutcome:p,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:B,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function ib(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!hd(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function ab(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function cr(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function gd(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function bd(e){let r=e.filter(gd),t=e.filter(n=>{if(gd(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function Sd(e,r,t){let n={runId:e.id,name:e.name,status:Gt(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:cr(r,"status"),attentionCounts:cr(r,"attention"),lifecycleCounts:cr(r,"lifecycleStage")},n.controller=bd(r)),n}function lb(e){return e.status==="done"&&e.attention==="done"}function Nr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=x(ln.join(_(r.id),"workers",R(s),"worker.json"),void 0);return i?vd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Sd(r,n,!1);return le(ln.join(_(r.id),"last-board.json"),o),o}function wd(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=x(ln.join(_(r.id),"workers",R(i),"worker.json"),void 0);return a?ib(a)?ab(i,a):vd({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!lb(i)),s=Sd(r,o,!0);return s.status=Gt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:cr(n,"status"),allAttentionCounts:cr(n,"attention")},le(ln.join(_(r.id),"last-board-compact.json"),s),s}async function Cd(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Nr(t),s=L(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await q(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}function cb(e){return{full:`kynver run status --run ${e} --full`,blocked:`kynver status --run ${e} --blocked`,running:`kynver status --run ${e} --running`,task:`kynver status --run ${e} --task <task-id>`,worker:`kynver status --run ${e} --worker <worker>`,workersFull:`kynver worker list --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`,monitorTick:`kynver monitor status --run ${e} --tick`}}function un(e){let r=Oi(e),t=e.full===!0||e.full==="true",n=yd(t?Nr(r):wd(r),e);n.projection=t?"full":"compact",t||(n.resultContract={projection:"compact",rawWorkerPayloadsOmitted:!0,omittedWorkerFields:["finalResult","changedFiles","gitAncestry","completionResponse","stdout/stderr tails"],deepDetailAvailableVia:["--full","worker status","worker tail","monitor status --tick"]},n.drilldownCommands=cb(r)),console.log(JSON.stringify(n,null,2))}function xd(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=Fn(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
19
|
-
`)
|
|
20
|
-
`)
|
|
21
|
-
|
|
22
|
-
`,{mode:384})}function $d(e){let{outboxDir:r,archiveDir:t}=Tr(),n=Oe.join(r,`${e.id}.json`),o=Oe.join(r,e.bodyPath),s=Oe.join(t,`${e.id}.json`),i=Oe.join(t,e.bodyPath);Mi(n)&&Ld(n,s),Mi(o)&&Ld(o,i)}function mn(e){let{outboxDir:r}=Tr();return{jsonPath:Oe.join(r,`${e.id}.json`),bodyPath:Oe.join(r,e.bodyPath)}}function Kd(e,r){return{operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId,planSlug:e.planSlug,title:e.title,summary:e.summary,body:r,changeSummary:e.changeSummary??void 0,author:e.author??void 0,model:e.model??void 0,sourceRefs:e.sourceRefs,markCurrent:e.markCurrent??!0,maxRetries:e.maxRetries}}async function jd(e,r,t={}){let n=await Md(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new J("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=kt(r.summary),a=kt(o.summary);if(i!==a)throw new J("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new J("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new J("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=ur(l);if(r.bodyHash&&c!==r.bodyHash)throw new J("verification_failed","body hash mismatch on readback");return{planId:o.id,currentVersionId:o.currentVersionId,versionNumber:s?.versionNumber??null,title:o.title,summary:o.summary,bodyHash:r.bodyHash||c,readAt:new Date().toISOString()}}function Vd(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:ur(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var Gd="persisted and read back",Eb="queued for retry",Hi="failed and needs action";async function fn(e,r={}){e.bodyPathHint&&pn(e.bodyPathHint);let t=Lo(e),n=Wi(t);if(n?.readbackEvidence)return{userStatus:Gd,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Yd(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Ud,s=r.verifyReadback??jd;try{let i=await o(e,r),a={...e,planId:i.planId},l=Vd(a,i),c=await s(e.agentOsSlug,Ab(e,l),r);return n&&$d(n),{userStatus:Gd,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof J?i:new J("tool_interruption",i instanceof Error?i.message:String(i));if(!Dd(a.kind)){let l=Bi(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=mn(l),u=Jd(l,a.message);return{userStatus:Hi,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Yd(e,a.message,a.kind,n)}}function Ab(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Yd(e,r,t,n){let o=Bi(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=mn(o);if(o.retryCount>=o.maxRetries){let i=Jd(o,r);return{userStatus:Hi,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:Eb,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Jd(e,r){let t={...e,queueStatus:"failed",userStatus:Hi,lastError:r,updatedAt:new Date().toISOString()};return Fd(t),t}import Ob from"node:path";async function Fi(e={},r={}){let t=Rt().filter(s=>e.outboxId?s.id===e.outboxId:!0),n=e.max&&e.max>0?t.slice(0,e.max):t,o={processed:0,succeeded:0,stillQueued:0,failed:0,results:[]};for(let s of n){o.processed+=1;let i=Hd(s),a=Kd(s,i),l=await fn(a,r);l.userStatus==="persisted and read back"?o.succeeded+=1:l.userStatus==="failed and needs action"?o.failed+=1:o.stillQueued+=1,o.results.push({outboxId:s.id,userStatus:l.userStatus,lastError:l.lastError})}return o}function $i(e){let r=Ob.join(Ho(),`${e}.json`);return Li(r)}function Ki(e){let r=mn(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
23
|
-
`)}function
|
|
24
|
-
`)}
|
|
25
|
-
`)}function qb(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Dr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let Ut=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=Ut;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=L(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,o,{baseUrl:s}),l=!(e.execute===!0||e.execute==="true"),c=He({runId:n.id}),u=gi(n.id,c.runnerId),d=e.diskPath?We({diskPath:String(e.diskPath)}):We({diskPath:n.repo}),f=br({runId:n.id}),m=qb(e),p=m.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,k=p?Math.min(g,m.size):g,h=l?k:Math.min(k,f.slotsAvailable);if(!l&&h<=0){let C={runId:n.id,agentOsId:o,dryRun:!1,skipped:!0,reason:f.reason??"no resource slots",resourceGate:f};if(r)return{ok:!0,...C};console.log(JSON.stringify(C,null,2));return}let S=mo(n.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let C=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/lane-hygiene`;try{await q(C,i,{agentOsId:o,dryRun:!1,includeBoardReconcile:!0},{agentOsId:o,baseUrl:s})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let A=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/tasks/dispatch-next`,B=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ki,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Nr(n.id),...e.lane?{lane:qc(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(y=>y.trim()).filter(Boolean)}:{}}),P=async C=>{let y=await q(A,i,B(C),{agentOsId:o,baseUrl:s})??{ok:!1,status:0,response:null},O=y.response;return{dispatch:y,result:O?.result}},b=await P(p||l?h:1);if(!b.dispatch.ok||!b.result){let C={runId:n.id,agentOsId:o,action:"dispatch",httpStatus:b.dispatch.status,response:b.dispatch.response,authRefreshed:b.dispatch.refreshedAuth===!0,authRefreshFailure:b.dispatch.authRefreshFailure};if(r)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=b.result;if(l){let C=np(E),y=op(E),O={runId:n.id,agentOsId:o,dryRun:!0,wouldStart:E.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:E.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:E.diskGate,resourceGate:E.resourceGate,inspected:E.inspected,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,capacityIdle:C?.capacityIdle===!0,admissionExhaustion:C,dispatchSkipDrain:y};if(r)return{ok:!0,...O};console.log(JSON.stringify(O,null,2));return}let H=_u(),M=[],oe=[],Te=Number(E.inspected)||0;async function ge(C,y,O){let j=await Vi({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,released:j.released,releaseResponse:j.releaseResponse,...O}),!1}async function Wt(C){let y=C.task,O=String(y.id);if(p&&!m.has(O))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return ge(y,"land_pr task missing prUrl");try{let De=await ep({prUrl:j,repo:Qd(j),cwd:n.repo}),$r=await rp({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:De});return $r.ok?(M.push({taskId:O,started:!0,landPr:!0,outcome:De.outcome,completionStatus:$r.status}),!0):ge(y,`land_pr completion POST failed (HTTP ${$r.status})`,{landPr:!0,outcome:De.outcome})}catch(De){return ge(y,De.message)}}async function he(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",O=await Vi({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:O.released,releaseResponse:O.releaseResponse}),!1}async function X(C){let y=C.task,O=Gb(C),j=String(y.id);if(p&&!m.has(j))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let De=Yb(y.personaSlug);if(De&&(!O?.personaInjectionReady||!O.personaMarkdown))return ge(y,`persona_injection_required: missing anchored context-envelope persona block for "${De}"`);if(Ou(n.id,j))return he(y);let $r=Number(y.attempt)||1;if($r>H.maxTaskAttempts)return ge(y,`task attempt ${$r} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let gh=R(`t-${y.id}-a${y.attempt}`),Kr=vo({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:zc(y)});try{let Ps=y.planId?String(y.planId):void 0,Un=Nu({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),Wn=Ti(n,{name:gh,task:Jb(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(hh=>hh.trim()).filter(Boolean):[],model:Kr.model,provider:Kr.provider,routingRule:Kr.rule,requestedModel:Kr.requestedModel,agentOsId:o,taskId:String(y.id),planId:Ps,branch:Un?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:Un?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:Un?.targetPrUrl,repairTargetBranch:Un?.targetPrBranch??void 0,instructionPolicyMarkdown:O?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyEvidence:O?.instructionPolicyEvidence??null,memoryQualityCapture:O?.memoryQualityCapture??null,memoryQualityPromptMarkdown:O?.memoryQualityPromptMarkdown??null,personaMarkdown:O?.personaMarkdown??null,personaSlug:O?.personaSlug??De,personaEvidence:O?.personaEvidence??null,contextEnvelopeMarkdown:O?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:O?.contextEnvelopeEvidence??null,leaseOwner:u,leaseToken:y.leaseToken?String(y.leaseToken):void 0,dispatched:!0});return M.push({taskId:y.id,started:!0,worker:Wn.name,pid:Wn.pid,branch:Wn.branch,model:Wn.model,provider:Kr.provider,routingRule:Kr.rule,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(O?.instructionPolicyEvidence?.ruleSlugs)?O.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:O?.personaSlug??De,personaOperatingRuleCount:O?.personaEvidence?.operatingRuleCount??null}),O?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: Lane A instruction policy injected fingerprint=${O.instructionPolicyFingerprint}`),O?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${O.personaSlug}`),O?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${O.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Ps){return ge(y,Ps.message)}}let D=new Set;async function se(C){let y=C.task,O=String(y.id);if(D.has(O))return ge(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=Ut(C)?await Wt(C):await X(C);return j||D.add(O),j}for(let C of E.started)await se(C);if(oe.push(...E.skipped??[]),p)for(let C of oe){let y=String(C.task.id);m.has(y)&&M.push({taskId:y,started:!1,error:`exact_target_not_started:${C.skipReason}`,skipReason:C.skipReason,detail:C.reason??null,requestedTargetTaskIds:[...m]})}for(;!p&&M.length<h;){let C=await P(1);if(!C.dispatch.ok||!C.result){M.push({started:!1,error:"dispatch_next request failed during top-up",httpStatus:C.dispatch.status,response:C.dispatch.response});break}Te+=Number(C.result.inspected)||0,oe.push(...C.result.skipped??[]);let y=C.result.started??[];if(y.length===0)break;for(let O of y){if(M.length>=h)break;await se(O)}}let de=M.filter(C=>C.started).length,ke=np(E),ie=op(E),Mn=de===0&&(ke?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(Mn&&ke?.summary){let C=ke.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??ke.overAttemptIdleRecovery,O=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ie?`; dispatch_skip_drain scanned=${ie.scanned??0} advanced=${ie.advanced??0}`:"";console.error(`[dispatch] ${ke.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${O}${j}`)}let fl={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:de,capacityIdle:Mn,admissionExhaustion:ke,dispatchSkipDrain:ie,outcomes:M,skipped:oe.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:Te,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},gl=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(gl),...fl};console.log(JSON.stringify(fl,null,2)),M.some(gl)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}var zb=1;function vt(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function Xb(e){let{maxStarts:r,...t}=e;return t}async function Ji(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Xb(e);if(t.targetTaskId||t.targetTaskIds){let u=await Dr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:vt(u)}}let n=Math.min(r,zb),o=Math.max(0,r-n),s=await Dr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=vt(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Dr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=vt(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function sp(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function Qb(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function hn(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function ip(e,r){let t=Qb(r),n=hn(t?.recommendedMaxStarts),o=hn(t?.actionableReady),s=hn(t?.queuedTasks),i=hn(t?.boardAdvancedThisTick)??0,a=hn(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import IS from"node:path";W();Xr();G();w();import Zb from"node:path";var eS=new Set(["running","dispatching","pending","queued","needs_attention"]),Ze=new Set(["completed","failed","cancelled","done"]);function Mr(e){let r=be(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Zb.join(_(e.id),"workers",R(i),"worker.json"),void 0);if(!a)continue;let l=T(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),st(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function kn(){let e=[];for(let r of ee()){if(!eS.has(r.status))continue;let t=Mr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ae(r),e.push({runId:r.id,from:n,to:t})}return e}W();Xr();G();w();Zr();Yn();import{existsSync as mr,lstatSync as dS,readdirSync as pS,readlinkSync as mS,renameSync as na,rmSync as fS}from"node:fs";import Ke from"node:path";ve();w();import Ie from"node:path";var rS=`${Ie.sep}runs${Ie.sep}runs${Ie.sep}`;function Fo(e){return e.includes(rS)}function qi(e,r){return Ie.join(Re(ne(e)),R(r))}function dr(e,r,t){return Ie.join(qi(e,r),"workers",R(t))}function ap(e,r,t){let n=ne(e);return Ie.join(n,"runs","runs",R(r),"workers",R(t))}function zi(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Ur(e){return{workerJsonPath:Ie.join(e,"worker.json"),stdoutPath:Ie.join(e,"stdout.jsonl"),stderrPath:Ie.join(e,"stderr.log"),heartbeatPath:Ie.join(e,"heartbeat.jsonl"),lastStatusPath:Ie.join(e,"last-status.json")}}function lp(e){let r=Ur(dr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Fo(e.statusPath)?e.statusPath:r}import{existsSync as pr,mkdirSync as nS,readdirSync as pp,renameSync as oS,statSync as Qi}from"node:fs";import z from"node:path";I();Kn();Je();import cp from"node:path";function tS(e){return cp.resolve(Gr(e.trim()))}function Xi(e,r,t){let n=e?.trim();return n?{repo:tS(n),source:r,persistedInConfig:t}:null}function Ce(e={}){let r=e.env??process.env,t=e.config??v(),n=Xi(t.defaultRepo,"config",!0);if(n)return n;let o=Xi(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Xi(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=Rr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function up(e,r){let t={...r??v(),defaultRepo:pe(cp.resolve(e))};return qe(t),t}function yn(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}Zr();ve();W();w();var Rn=900*1e3,sS=3600*1e3;function mp(e,r){let t=z.resolve(e),n=z.resolve(Re(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function Zi(e){if(!pr(e))return[];try{return pp(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ea(e){let r=z.join(e,"workers");if(!pr(r))return[];try{return pp(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function fp(e){return z.join(e,"archived-workers")}function iS(e,r){let t=z.join(fp(e),R(r));return pr(t)?`${t}-${Date.now()}`:t}function dp(e,r,t){if(!pr(e))return!1;try{let n=r-Qi(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function gp(e,r=Date.now(),t=Rn){if(!pr(e))return!1;let n=Ur(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(dp(n.stdoutPath,r,t)||dp(n.heartbeatPath,r,t))}function aS(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-Qi(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function lS(e,r,t,n){if(gp(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=aS(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function bt(e,r=Date.now(),t=Rn){for(let n of ea(e))if(gp(z.join(e,"workers",n),r,t))return!0;return!1}function cS(){return{repo:Ce()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function uS(e,r){let t=z.join(Re(e),R(r));if(!pr(t))return null;let n=ea(t);if(n.length===0)return null;let o;try{o=Qi(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=dr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=bt(t);return{id:r,name:r,...cS(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ra(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of Zi(t)){let s=z.join(t,o,"run.json");if(pr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=uS(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ae(i),n.push({runId:o,action:"repaired_run_json",reason:bt(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function ta(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??sS,i=[];ra(t);for(let a of Zi(n)){let l=z.join(n,a),c=z.join(l,"run.json"),u=x(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...ea(l)]),f=!1;for(let m of d){let p=z.join(l,"workers",R(m)),g=z.join(p,"worker.json"),k=x(g,void 0);if(!k){let A=z.join(fp(l),R(m));if(pr(A)&&(u.workers[R(m)]||u.workers[m])){delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:A});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let h=lS(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=iS(l,m);nS(z.dirname(S),{recursive:!0}),oS(p,S),delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:h.reason,archivePath:S})}f&&Ae(u)}return{workers:i}}function hp(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of Zi(n)){let s=z.join(n,o);bt(s,r)&&t.add(`${e}\0${o}`)}return t}W();w();function gS(e,r){let t=qi(e,r),n;try{n=dS(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Ke.resolve(Ke.dirname(t),mS(t));if(bt(o)||bt(t))return null;let s=`${t}.materialize-${Date.now()}`;return na(o,s),fS(t),na(s,t),o}function hS(e){let r=[];for(let t of zi()){let n=Ke.join(e.fromDir,t),o=Ke.join(e.toDir,t);!mr(n)||mr(o)||(na(n,o),r.push(t))}return r}function kp(e,r){let t=Ur(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function kS(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function yS(e){let r=Ur(e.canonicalDir),t=x(r.lastStatusPath,void 0),n=mr(r.stdoutPath),o=mr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Gn(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=Qr(a),c=kS({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:Ke.join(te().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),kp(u,e.canonicalDir),u}function RS(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=dr(r,e.id,o),a=Ke.join(i,"worker.json");(Fo(s.workerDir)||Fo(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ae(e)),t}function vS(e){let r=[],t=dr(e.harnessRoot,e.run.id,e.workerName),n=ap(e.harnessRoot,e.run.id,e.workerName),o=Ur(t),s=hS({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=lp({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=x(i,void 0);if(!a&&mr(o.workerJsonPath)&&(a=x(o.workerJsonPath,void 0)),!a){let l=yS({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return V(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=mr(t),u=zi().some(d=>mr(Ke.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:Ke.join(te().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return V(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return kp(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",V(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function bS(e,r){let t=Ke.join(_(e.id),"workers");if(!mr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of pS(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function yp(){let{harnessRoot:e}=te(),r=ra(e),t=[];for(let n of ee()){let o=gS(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),RS(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of bS(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:dr(e,n.id,i),statusPath:Ke.join(dr(e,n.id,i),"worker.json")}},Ae(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...vS({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}Zr();zn();G();W();Xr();w();import{execFileSync as Rp}from"node:child_process";import vp from"node:path";function oa(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function SS(e){let r=oa(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function wS(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function CS(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function xS(e){let r=null;if(typeof e=="string"?r=tt(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!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=oa(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function _S(e){try{let n=Rp("git",["config","--get","remote.origin.url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Rp("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:oa(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function PS(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??Qr(r)}function ES(e){let r=new Map,t=_(e.id);for(let n of be(e)){let o=x(vp.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of xS(PS(o))){let i=SS(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function AS(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,wS(r)].filter(Boolean).join(`
|
|
26
|
-
`);return CS(n)}function OS(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function sa(e={}){let r=e.lookupPr??_S,t=[],n=new Map;for(let o of ee()){let s=ES(o),i=_(o.id);for(let a of be(o)){let l=vp.join(i,"workers",R(a),"worker.json"),c=x(l,void 0);if(!c||!OS(c))continue;let u=T(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of AS(c,u.finalResult)){if(d=s.get(m)??null,!d){let p=o.repo||c.worktreePath,g=`${p}#${m}`,k=n.has(g)?n.get(g)??null:r({repoDir:p,prNumber:m});n.has(g)||n.set(g,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",V(o.id,c),t.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:t}}var NS=900*1e3;function TS(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function vn(){let e=yp();if(TS()){let s=sa(),i=ta();return{workers:[],finalizedRuns:kn(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ee())for(let i of be(s)){let a=IS.join(_(s.id),"workers",R(i),"worker.json"),l=x(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=T(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c.attention.state==="blocked"?"blocked":c.attention.state==="done"||c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason="synced finished worker record after terminal stdout/heartbeat",V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=c.attention.state==="blocked"?"blocked":c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason=c.attention.reason,V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&$(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>NS,m=Number.isFinite(d)&&t-d>ot;if(f&&m){Lt(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,V(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=sa(),o=ta();return{workers:r,finalizedRuns:kn(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function bp(){let e=vn(),r=e.workers.filter(l=>l.action==="marked_exited").length,t=e.workers.filter(l=>l.action==="killed_stale").length,n=e.workers.filter(l=>l.action==="skipped").length,o=e.metadataReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),s=e.localPrAttentionReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),i=e.metadataReconcile.runMetadataRetention.runs.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),a=e.terminalWorkerArchive.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{});console.log(JSON.stringify({ok:!0,workers:{markedExited:r,killedStale:t,skipped:n,total:e.workers.length},metadataReconcile:{totals:o,total:e.metadataReconcile.workers.length,runMetadataRetention:{totals:i,total:e.metadataReconcile.runMetadataRetention.runs.length}},localPrAttentionReconcile:{totals:s,total:e.localPrAttentionReconcile.workers.length},terminalWorkerArchive:{totals:a,total:e.terminalWorkerArchive.workers.length},finalizedRuns:e.finalizedRuns.length,details:{workers:e.workers,metadataReconcile:e.metadataReconcile.workers,localPrAttentionReconcile:e.localPrAttentionReconcile.workers,terminalWorkerArchive:e.terminalWorkerArchive.workers,runMetadataRetention:e.metadataReconcile.runMetadataRetention.runs,finalizedRuns:e.finalizedRuns}},null,2))}zt();I();Ee();import DS from"node:os";function $o(e,r={}){let t=(r.boxKind??Ue(v())).trim().toLowerCase()||"forge",n=r.hostLabel??DS.hostname();return{boxId:r.boxId??So(t,n),boxKind:t,displayName:r.displayName??null,hostLabel:n,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{}}}W();Jn();G();I();import MS from"node:path";W();G();w();async function bn(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=U(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=L(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=He({runId:t.id}).runnerId,a=await Cd({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=x(MS.join(_(t.id),"workers",R(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=T(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let g=bo({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,h;try{h=await q(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(S){h={ok:!1,error:S.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:h.ok===!0||h.response?.ok===!0,response:h.response??h})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await q(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}w();G();W();w();import US from"node:path";I();async function Sp(e){let r=L(e.baseUrl),t=await K(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await q(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function wp(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=x(US.join(_(t.id),"workers",R(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=T(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await Sp({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,V(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}I();Ee();function WS(e=process.env){let r=v();return Ue(r,e)!=="forge"}function Cp(e,r=process.env){if(WS(r))return e?.maxConcurrentWorkers??void 0}async function xp(e,r){let t=L(r.baseUrl?String(r.baseUrl):void 0),n=await K(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await fo(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}I();Ee();ve();import Pe from"node:path";qn();import Vo from"node:path";ye();G();var ia=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function _p(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ia)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function xe(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!_p(n)})}function Wr(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 Sn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?xe(e.changedFiles).length>0:!!(Wr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function wn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function aa(e,r){if(e.status)return xe(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Bt(e.worktreePath);return xe(t).length>0}function LS(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function la(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=LS(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Bt(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:$n(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={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:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??Wr(s)};return e.status=u,u}return wn(e)}G();G();Zr();w();function ca(e,r=Date.now(),t=Rn){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ko(e,r=Date.now(),t=Rn){return $(e.pid)?!0:ca(e,r,t)}function BS(e,r){return r?r.runTerminalCache.derive(e.run):Mr(e.run)}function er(e,r=Date.now()){return Ko(e.worker,r)}function ua(e,r){return Ze.has(e.run.status)?!1:BS(e,r)!==null}function Pp(e,r,t=Date.now()){if(er(e,t))return!0;if(Ze.has(e.run.status)||ua(e,r))return!1;let n=wn(e);return re(n)?!1:!!er(e,t)}qn();G();function Ep(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(er(e))return!0;let n=r??wn(e);return!!(!re(n)||Sn(n)||xe(n.changedFiles).length>0||rt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Wr(n.finalResult)}).blocked)}ye();w();import{existsSync as Op,mkdirSync as HS,writeFileSync as Ap}from"node:fs";import jo from"node:path";function Ip(e,r,t){return jo.join(e,"salvage",R(r),R(t))}function Np(e){return Op(jo.join(Ip(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Tp(e){let r=Ip(e.harnessRoot,e.indexed.runId,e.indexed.workerName);HS(r,{recursive:!0});let t=jo.join(r,"salvage.patch"),n=!1;if(Op(e.indexed.worktreePath)){let s=Q(e.indexed.worktreePath,["diff","HEAD"]),i=Q(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
27
|
-
`);
|
|
19
|
+
${n}`;return wb.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":Cb.some(s=>s.test(o))?"low":"elevated"}function xb(e){let r=ft(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function Pb(e){let r=e.inventory??Uu();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Ir(e){let r=xb({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function Bu(e){let r=e.task??{},t=_b(r),n=Pb({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:ht())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=Ze;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=hi({inventory:n,riskClass:t});return Ir(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return Ir({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return Ir({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return Ir({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=hi({inventory:n,riskClass:t});if(a)return Ir({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return Ir({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}Yr();w();import{closeSync as Lu,openSync as Wu}from"node:fs";import{spawn as Tb}from"node:child_process";var Eb=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Ab(e){return e.replace(Eb,"")}var Ib=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ri(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Ob=new Set(["cursor"]);function Nb(e){let r=e.trim().toLowerCase();return Ob.has(r)?"auto":null}function bi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Ab(t).trim()||r;return Ib.test(o)||!Ri(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function kt(e,r){let t=(e??"").trim();return t?Ri(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function vi(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Nb(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Ri(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var yt="claude-sonnet-4-6",Hu={name:"claude",defaultModel:yt,preflightModel(e){return bi(e,yt)},start(e){let r=bi(e.model,yt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Wu(e.stdoutPath,"a"),o=Wu(e.stderrPath,"a"),s=["ignore",n,o],i=Tb("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],ae({cwd:e.worktreePath,detached:!0,stdio:s,env:Je(process.env)}));if(Lu(n),Lu(o),!i.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return i.unref(),{pid:i.pid,model:t}}};Yr();w();import{closeSync as ju,existsSync as Bb,openSync as Vu}from"node:fs";import{spawn as Gu}from"node:child_process";Yr();w();import{closeSync as Fu,openSync as $u}from"node:fs";import{spawn as Db}from"node:child_process";var Si=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Mb(){return Je({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Ub(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Ku={name:"hermes-codex",defaultModel:Si,preflightModel(e){return kt(e,Si)},start(e){let r=kt(e.model,Si);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=$u(e.stdoutPath,"a"),o=$u(e.stderrPath,"a"),s=["ignore",n,o],i=we("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Ub(t,e.prompt),l=Db(i,a,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Mb()}));if(Fu(n),Fu(o),!l.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${i}\` on PATH? run \`hermes auth status openai-codex\`)`);return l.unref(),{pid:l.pid,model:t}}};function Lb(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Or=Lb();function Wb(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Hb(){return Je({...process.env,CI:"1",NO_COLOR:"1"})}function Fb(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function $b(e,r,t){if(!(process.platform!=="win32"&&Bb("/usr/bin/script")))return Gu(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Gu("script",["-qfc",o,"/dev/null"],t)}var Yu={name:"codex",defaultModel:Or,preflightModel(e){return kt(e,Or)},start(e){if(ht().path==="hermes_openai_codex")return Ku.start(e);let t=kt(e.model,Or);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Vu(e.stdoutPath,"a"),s=Vu(e.stderrPath,"a"),i=["ignore",o,s],a=Wb(),l=Fb(n,e.prompt),c=$b(a,l,ae({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Hb()}));if(ju(o),ju(s),!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};var Kb="claude-sonnet-4-6",fi="composer-2.5";function Ao(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ju(e){return e.toLowerCase()}function Ci(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Kb}function wi(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":"cursor"}function jb(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:fi,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:yt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function qu(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function Vb(e){let r=Ju(Ao(e,"executorRef")),t=Ao(e,"title").toLowerCase(),n=Ao(e,"priority")||"normal",o=Ju(Ao(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Or,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return qu(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(qu(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=Ci();return{model:s,provider:wi(s),rule:"default:global"}}function Io(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=jb(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||wi(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Vb(e.task);r={...o,requestedModel:o.model}}else{let o=Ci();r={model:o,provider:e.explicitProvider?.trim()||wi(o),rule:"default:global",requestedModel:o}}let t=wu({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Ar(t.provider)&&(e.explicitProviderIsOperatorOverride||mi(e.task)))return t;let n=Bu({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Or:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function zu(e,r,t){return e||r||t||Ci()||yt}function Xu(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Qu(){return{maxTaskAttempts:Xu(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(dt("harness.maxTaskAttempts",4))),dispatchCooldownMs:Xu(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(dt("harness.dispatchCooldownMs",5e3)))}}O();import Jb from"node:path";B();G();w();var _i="kynver-harness:",Zu="@runner:";function xi(e){return e?.trim()?e.trim():null}function Gb(e){let r=xi(e);if(!r?.startsWith(_i))return null;let t=r.slice(_i.length),n=t.indexOf(Zu);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Pi(e,r){let t=e.trim(),n=r.trim();return`${_i}${t}${Zu}${n}`}function Ei(e,r){let t=xi(r);return t?Gb(e)===t:!1}function Oo(e){let r=xi(e.workerLeaseOwner);return r&&Ei(r,e.runId)?r:Pi(e.runId,e.runnerId)}import ed from"node:os";Ee();Ee();import Yb from"node:os";function No(e,r){let t=(r??Yb.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function ur(e){return e?.trim()?e.trim():null}function Fe(e={}){let r=e.env??process.env;return{runnerId:ur(r.KYNVER_RUNTIME_ID)??ur(r.OPENCLAW_RUNTIME_ID)??ur(r.HOSTNAME)??ed.hostname(),hostname:ur(r.HOSTNAME)??ed.hostname(),profile:ur(r.KYNVER_RUNNER_PROFILE)??ur(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:ur(r.KYNVER_HARNESS_REPO)??ur(r.KYNVER_DEFAULT_REPO),runId:e.runId??null}}function rd(e,r){return _(Jb.join(x(e),"workers",R(r),"worker.json"),void 0)}async function To(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=L(r.baseUrl?String(r.baseUrl):void 0),s=await K(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ai,a=Fe({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=rd(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!$(f.pid)){u.push(d);continue}if(T(f).status==="done"){u.push(d);continue}let p=Oo({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),g=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,k=await q(g,s,{leaseOwner:p,leaseDurationMs:i,...f.leaseToken?{leaseToken:f.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(k.ok){l.push(d);continue}let h=k.response&&typeof k.response=="object"&&"reason"in k.response?String(k.response.reason??`http ${k.status}`):`http ${k.status}`;c.push({worker:d,reason:h})}return{renewed:l,failed:c,skipped:u}}function td(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=rd(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}ye();B();B();import{existsSync as mS,mkdirSync as fS}from"node:fs";import bt from"node:path";var qb=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,zb="next-action-fix:";function Do(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function nd(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Do(e)}function Xb(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(zb)||t.includes("repair")||t.includes("unblock"))}function Qb(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(qb);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Do(String(n.targetPrUrl??n.target_pr_url??"")),s=Do(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?nd(o):null,targetPrBranch:s}}catch{return r}}function od(e){if(!Xb(e))return null;let r=Qb(e.description),t=e.prUrl?nd(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Do(e.branch)}:null}function sd(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function id(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...ln(`worker.prompt.progress.${n}`).split(`
|
|
20
|
+
`),o],i=ln(`worker.prompt.merge_gate.${n}`).split(`
|
|
21
|
+
`),a=ln(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
22
|
+
`);return["You are running under the Kynver AgentOS runtime.","Immediately state your plan before editing.",r,`Worktree: ${e.worktreePath}`,`Progress heartbeat file: ${e.heartbeatPath}`,"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.","Final response must include files changed, verification commands, and unresolved risks.",...ln("worker.prompt.core_rules").split(`
|
|
23
|
+
`),"",...s,"",...i,"",...a,"",...e.contextEnvelopeMarkdown?.trim()?[e.contextEnvelopeMarkdown.trim(),""]:[],...e.personaMarkdown?.trim()?[e.personaMarkdown.trim(),""]:[],...e.instructionPolicyMarkdown?.trim()?["Operating rules (Lane A \u2014 from AgentOS memory policy):",e.instructionPolicyMarkdown.trim(),""]:[],...e.memoryQualityMarkdown?.trim()?[e.memoryQualityMarkdown.trim(),""]:[],...e.repairTargetPrUrl?[...sd({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
24
|
+
`)}w();O();w();Yr();import{closeSync as Oi,existsSync as ld,mkdirSync as nv,openSync as Ni,statSync as ov,unlinkSync as ad}from"node:fs";import{spawn as sv}from"node:child_process";import iv from"node:os";import $e from"node:path";import{existsSync as fn,readdirSync as Zb}from"node:fs";import Nr from"node:path";var ev=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function rv(e){let t=e.split("-")[0].split(".");if(t.length!==3)return null;let[n,o,s]=t;return!n||!o||!s?null:+`${n}${o.padStart(2,"0")}${s.padStart(2,"0")}`}function tv(e){let r=Nr.join(e,"versions");if(!fn(r))return null;let t=null,n=-1;for(let o of Zb(r,{withFileTypes:!0})){if(!o.isDirectory()||!ev.test(o.name))continue;let s=rv(o.name);s==null||s<=n||(n=s,t=Nr.join(r,o.name))}return t}function Mo(e){let r=e?.trim()||Nr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=Nr.join(r,"node.exe"),n=Nr.join(r,"index.js");if(fn(t)&&fn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=tv(r);if(!o)return null;let s=Nr.join(o,"node.exe"),i=Nr.join(o,"index.js");return!fn(s)||!fn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var Ii="composer-2.5",av=15e3,lv=6e4,cv=3e4;function uv(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function dv(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&ld($e.join($e.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Mo($e.dirname(e)):t?{nodeExe:e,indexJs:$e.join($e.dirname(e),"index.js"),versionDir:$e.dirname(e)}:Mo();if(o)return uv(o.nodeExe,o.indexJs,o.versionDir);throw new Error("Cursor Agent on Windows has no headless bundled node.exe under %LOCALAPPDATA%\\cursor-agent\\versions\\\u2026. Run `agent login` / update Cursor Agent CLI, use `--provider claude`, or set KYNVER_CURSOR_AGENT_ROOT to the cursor-agent folder.")}}return{executable:e,prefixArgs:[],shell:!1,detached:!0}}function pv(){let e=process.env.KYNVER_CURSOR_AGENT_BIN?.trim()||process.env.CURSOR_AGENT_BIN?.trim();if(e)return e;if(process.platform==="win32"){let r=Mo(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=$e.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(ld(t))return t}return"agent"}function mv(e,r){return Je({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:$e.basename(e)||"agent.cmd"}:{}})}function cd(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function Ti(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?Math.floor(n):r}function fv(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||$e.join(iv.homedir(),".kynver","locks");return nv(e,{recursive:!0}),$e.join(e,"cursor-agent-start.lock")}function gv(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=fv(),r=Ti("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",lv),t=Ti("KYNVER_CURSOR_START_LOCK_STALE_MS",cv),n=Date.now();for(;;)try{let o=Ni(e,"wx");return Oi(o),()=>{try{ad(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-ov(e).mtimeMs>t){ad(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);cd(250)}}var ud={name:"cursor",defaultModel:Ii,preflightModel(e){return vi(e,Ii)},start(e){let r=vi(e.model,Ii);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=Ni(e.stdoutPath,"a"),o=Ni(e.stderrPath,"a"),s=["ignore",n,o],i=pv(),a=dv(i),l=gv(),c;try{c=sv(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],ae({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:mv(i,a)})),cd(Ti("KYNVER_CURSOR_START_LOCK_HOLD_MS",av))}finally{l(),Oi(n),Oi(o)}if(!c.pid)throw new Error(`failed to spawn Cursor agent worker (is \`${i}\` on PATH? run \`agent login\` or set CURSOR_API_KEY)`);return c.unref(),{pid:c.pid,model:t}}};var Uo={claude:Hu,codex:Yu,cursor:ud},dd=null;function pd(e){if(dd)return dd;let r=e?.trim();if(r){let o=Uo[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(Uo).join(", ")}`);return o}let t=xo(b().workerProvider),n=Uo[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(Uo).join(", ")}`);return n}w();import{spawn as nS}from"node:child_process";import{existsSync as oS,openSync as sS,closeSync as Zd}from"node:fs";import ep from"node:path";import{fileURLToPath as iS}from"node:url";B();function Bo(e){return!!e.completionReportedAt?.trim()}function Di(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),V(r,e)}function hv(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Mi(e){return!!(hv(e.completionBlocker)||e.completionOutcome==="rejected")}function Tr(e){return Bo(e)&&!Mi(e)}B();G();O();import Rn from"node:path";function Ui(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function gn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var kv=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function md(e){let r=Ui(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=gn(r.outcome),n=gn(r.detail)??gn(r.error),o=Ui(r.task),s=Ui(r.closedTask),i=o?gn(o.status):null,a=s?gn(s.status):null,l=t!==null&&kv.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function fd(e){return e.taskAdvanced}B();so();var yv="expert-lane-pr-review:",Rv="plan-review-task",bv="scheduledjob:";function gd(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function hd(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(yv)||r===Rv||r.startsWith("daemon-review:"))return!0;if(r.startsWith(bv)&&e.parentTaskId){let n=gd(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}let t=(e.title??"").toLowerCase();if(t.includes("expert pr review"))return!0;if(e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))){let n=gd(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var kd=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,vv=new Set(Ru()),Sv=/no commits between/i;function yd(e){return!!(e&&Sv.test(e))}function ue(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Rd(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ue(e.head)}function bd(e){if(e==null)return null;let t=(typeof e=="string"?e:typeof e=="object"&&e!==null&&"summary"in e?String(e.summary??""):JSON.stringify(e)).match(/https?:\/\/[^\s)>"]+\/(?:pull|pulls|merge_requests|pull-requests)\/\d+/i);return t?ue(t[0]):null}function wv(e,r,t){let n=r.trim();if(!n)return null;let o=t.git(e,["rev-list","--count",`${n}..HEAD`]);if(o.status!==0)return null;let s=Number.parseInt(o.stdout.trim(),10);return Number.isFinite(s)?s:null}function Cv(e,r){if(r.changedFiles.length>0)return!1;let t=ue(e.personaSlug)?.toLowerCase();if(t&&vv.has(t))return!0;let n=ue(e.routingRule)??"";return!!(n&&kd.test(n))}function _v(e,r){if(e.changedFiles.length>0)return!0;let t=ue(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=wv(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(ue(e.headCommit)||Rd(e.gitAncestry))}function vd(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(hd({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=ue(e.routingRule)??"";if(r&&kd.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(Cv(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(ue(e.patchPath)||ue(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(ue(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(ue(e.prUrl)??ue(e.taskPrUrl)??ue(e.snapshot.prUrl))return{required:!1,reason:"already_has_pr"};let s=e.exec&&e.baseRef?{baseRef:e.baseRef,exec:e.exec,worktreePath:e.snapshot.worktreePath}:void 0;return _v(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Sd(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:ue(r?.headCommit)??Rd(e.gitAncestry),prUrl:ue(r?.prUrl)??null}}import{spawnSync as xv}from"node:child_process";function Cd(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return wd(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return wd(n[1]);try{let o=new URL(r.includes("://")?r:`https://${r}`);if(o.hostname.toLowerCase()!=="github.com")return null;let s=o.pathname.replace(/^\/+|\/+$/g,"").split("/");if(s.length<2)return null;let[i,a]=s;return!i||!a?null:`${i}/${a.replace(/\.git$/i,"")}`}catch{return null}}function wd(e){let r=e.split("/").filter(Boolean);if(r.length<2)return null;let t=r[0],n=r[1].replace(/\.git$/i,"");return t&&n?`${t}/${n}`:null}ye();function Pv(e,r,t){try{let n=xv(e,t,{cwd:r,encoding:"utf8"});return{status:n.status,stdout:(n.stdout||"").trim(),stderr:(n.stderr||"").trim(),error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}var Wo={git:(e,r)=>Q(e,r),gh:(e,r)=>Pv("gh",e,r)};function Ev(e){return e.split(`
|
|
25
|
+
`).map(r=>r.trim()).find(Boolean)??""}function _d(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:Cd(t.stdout)}function hn(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Lo(e,r,t,n){let o=n.gh(e,["pr","list","--repo",r,"--head",t,"--state","open","--json","url","--limit","1"]);if(o.status!==0)return null;try{return JSON.parse(o.stdout)[0]?.url?.trim()||null}catch{return null}}function Ho(e){let{worktreePath:r,branch:t,commitMessage:n,hasDirtyFiles:o,exec:s}=e;if(o){let l=s.git(r,["add","-A"]);if(l.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:l.stderr||l.stdout||l.error||"git add failed"};let c=s.git(r,["commit","-m",n]);if(c.status!==0)return{ok:!1,committed:!1,pushed:!1,detail:c.stderr||c.stdout||c.error||"git commit failed"}}let i=s.git(r,["push","-u","origin",t]);if(i.status!==0)return{ok:!1,committed:o,pushed:!1,detail:i.stderr||i.stdout||i.error||"git push failed"};let a=hn(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function xd(e){let r=Lo(e.worktreePath,e.repo,e.branch,e.exec);if(r)return{ok:!0,prUrl:r,created:!1};let t=e.exec.gh(e.worktreePath,["pr","create","--repo",e.repo,"--base",e.base,"--head",e.branch,"--title",e.title,"--body",e.body,"--draft"]);if(t.status!==0)return{ok:!1,detail:t.stderr||t.stdout||t.error||"gh pr create failed"};let n=Av(t.stdout)??Lo(e.worktreePath,e.repo,e.branch,e.exec);return n?{ok:!0,prUrl:n,created:!0}:{ok:!1,detail:"gh pr create succeeded but no PR URL was parsed"}}function Av(e){let t=Ev(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function Iv(e){return e.gh(process.cwd(),["--version"]).status===0}function Ov(e,r){return`AgentOS harness: ${e} (${r})`}function Nv(e,r,t){return["Automated PR-ready handoff from the Kynver harness runtime.","",e?`AgentOS task: \`${e}\``:"",`Harness worker: \`${r}\` \xB7 run \`${t}\``,"","Opened by orchestrator completion enforcement so production review receives a reviewable artifact."].filter(Boolean).join(`
|
|
26
|
+
`)}function Bi(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??hn(e.snapshot.worktreePath,e.exec)??void 0};let r=Ho({worktreePath:e.snapshot.worktreePath,branch:e.snapshot.branch,commitMessage:e.commitMessage,hasDirtyFiles:!0,exec:e.exec});return r.ok?{ok:!0,prUrl:e.prUrl,headCommit:r.headCommit??e.snapshot.headCommit??void 0,committed:r.committed,pushed:r.pushed}:{ok:!1,reason:`PR-ready handoff blocked: ${r.detail??"git commit/push failed"}`,nextAction:"Commit and push the dirty worker changes to the existing PR branch, then rerun `kynver worker complete`."}}function Li(e,r=Wo){let t=e.prUrlHint??bd(e.status.finalResult)??null,n=Sd(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!vd({dispatched:e.worker.dispatched,routingRule:e.worker.routingRule,personaSlug:e.worker.personaSlug,prUrl:t,taskTitle:e.worker.taskTitle,executorRef:e.worker.executorRef,parentTaskId:e.worker.parentTaskId,taskPrUrl:e.worker.taskPrUrl,repairTargetPrUrl:e.worker.repairTargetPrUrl,baseRef:o,exec:r,worker:e.worker,snapshot:n}).required)return t?Bi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return Bi({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Iv(r)){let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) with no PR URL`:"committed branch with no PR URL"}`,nextAction:"Install and authenticate GitHub CLI (`gh auth login`), then commit, push, and run `gh pr create` (or rerun `kynver worker complete` after the PR exists)."}}let i=_d(n.worktreePath,r);if(!i)return{ok:!1,reason:"PR-ready handoff blocked: could not resolve github.com origin for the worktree",nextAction:"Ensure `origin` points at GitHub, push the branch, open a PR, and rerun `kynver worker complete`."};let a=e.worker.repairTargetPrUrl?.trim();if(a){let k=!1,h=!1,S=n.headCommit??hn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=Ho({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`fix(harness): repair target PR ${a}`,hasDirtyFiles:!0,exec:r});if(!A.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${A.detail??"git commit/push failed"}`,nextAction:"Commit and push to the target PR branch, then rerun `kynver worker complete`."};k=A.committed,h=A.pushed,S=A.headCommit??S}else{let A=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(A.status!==0&&!/already up to date/i.test(A.stderr||A.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${A.stderr||A.stdout||"git push failed"}`,nextAction:"Push the target branch to origin, then rerun `kynver worker complete`."};h=A.status===0}return{ok:!0,prUrl:a,headCommit:S,committed:k,pushed:h}}let l=Lo(n.worktreePath,i,n.branch,r);if(l)return Bi({snapshot:n,prUrl:l,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});let c=n.changedFiles.length>0,u=!1,d=!1,f=n.headCommit??void 0,m=Ho({worktreePath:n.worktreePath,branch:n.branch,commitMessage:`chore(harness): PR-ready handoff for ${e.worker.name}`,hasDirtyFiles:c,exec:r});if(c&&!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git commit/push failed"}`,nextAction:"Commit and push the branch, run `gh pr create`, then rerun `kynver worker complete`."};if(c){if(u=m.committed,d=m.pushed,!m.ok)return{ok:!1,reason:`PR-ready handoff blocked: ${m.detail??"git push failed"}`,nextAction:"Fix git auth or merge conflicts, push the branch, run `gh pr create`, then rerun `kynver worker complete`."}}else{let k=r.git(n.worktreePath,["push","-u","origin",n.branch]);if(k.status!==0&&!/already up to date/i.test(k.stderr||k.stdout))return{ok:!1,reason:`PR-ready handoff blocked: ${k.stderr||k.stdout||k.error||"git push failed"}`,nextAction:"Push the branch to origin, run `gh pr create`, then rerun `kynver worker complete`."};d=k.status===0}f=m.headCommit??f??hn(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=xd({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Ov(e.worker.name,e.worker.runId),body:Nv(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(yd(g.detail))return{ok:!0,headCommit:f??void 0,committed:u,pushed:d};let k=n.changedFiles.length;return{ok:!1,reason:`PR-ready handoff blocked: ${k?`${k} uncommitted change(s) and no PR URL after handoff attempt`:"no PR URL after handoff attempt"}${g.detail?` (${g.detail})`:""}`,nextAction:"Run `gh pr create` on the worker branch (or fix `gh` auth), attach the PR URL to the task, then rerun `kynver worker complete`."}}return{ok:!0,prUrl:g.prUrl,headCommit:f??void 0,committed:u,pushed:d,created:g.created}}G();oo();function Fo(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 n!=="node_modules"&&!n.startsWith("node_modules/")})}function Pd(e){let r=e.trim();return r.startsWith("??")?r.slice(2).trim():r.length>3&&/^[ MADRCU?!]{2} /.test(r.slice(0,3))?r.slice(3).trim():r}function Ed(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Ad(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Od(e){let r=Ad(e);if(!r)return[];let t=Ad(r.worktreeHandoff),n=Ed(t?.disposableArtifactsRemoved);return n.length?n:Ed(r.disposableArtifactsRemoved)}function Id(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Nd(e,r){let t=Fo(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Id(o)));return t.every(o=>{let s=Id(Pd(o));return n.has(s)})}function $o(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Td(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Tv(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 Dv(e){let r=Td(e.disposableArtifactsRemoved),t=Od(e.finalResult);return[...new Set([...r,...t])]}function Dd(e){let r=Td(e.changedFiles),t=Fo(r),n=Dv(e),o=t.length===0||Nd(r,n);return $o(e.prUrl)?o?{allowed:!0,state:"pr_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a PR attached; commit or discard before completing`}:$o(e.headCommit)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) on top of a commit; commit or discard before completing`}:$o(e.artifactBundlePath)||$o(e.patchPath)?o?{allowed:!0,state:"commit_handoff",materialDirtyCount:0}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with a patch/bundle handoff; clean the tree before completing`}:o?{allowed:!0,state:"clean",materialDirtyCount:0}:Tv(e.finalResult)?{allowed:!1,state:"dirty_worktree_no_pr",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no commit or PR; commit, open a PR, discard, or remove one-off files via \`kynver worker discard-disposable\` before completing`}:{allowed:!1,state:"dirty_worktree",materialDirtyCount:t.length,detail:`Worktree has ${t.length} uncommitted change(s) with no final result`}}B();G();w();import Mv from"node:path";var Uv=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Md(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function Bv(e){if(typeof e=="string"){let r=e.trim();return r.length?r:null}if(e&&typeof e=="object"&&!Array.isArray(e)){let r=e,t=r.summary??r.finalSummary??r.message;if(typeof t=="string"&&t.trim())return t.trim();try{return JSON.stringify(e)}catch{return null}}return null}function Lv(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:Bv(r);return{finalResult:r??t??"completed",summary:t}}function Wi(e,r,t){if(Md(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Lv(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function Wv(e){let r=new Map,n=e.response?.tick?.filteredItems;if(!Array.isArray(n))return r;for(let o of n){if(o.kind!=="task"||typeof o.id!="string")continue;let s=typeof o.taskStatus=="string"?o.taskStatus.trim():"";s&&r.set(o.id,s)}return r}function Ud(e,r){let t=Wv(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(Mv.join(x(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||Md(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Uv.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});Wi(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Hv from"node:path";var Fv=/^[a-z0-9][a-z0-9._-]{0,127}$/i,$v=/^[a-z0-9][a-z0-9._-]{0,63}$/i,Hi=new Set(["undefined","null"]),Bd="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Ko(e){let r=e.trim();if(!Fv.test(r))throw new Error(`invalid run id: ${e}`);return r}function Kv(e){let r=e.trim();if(!$v.test(r))throw new Error(`invalid worker name: ${e}`);return r}function Fi(e){return typeof e=="string"?e.trim():""}function Ke(e){let r=Fi(e.run),t=Fi(e.name);return(!r||Hi.has(r))&&nr(`missing --run RUN_ID (${Bd})`),(!t||Hi.has(t))&&nr(`missing --name WORKER_NAME (${Bd})`),{runId:Ko(r),workerName:Kv(t)}}function $i(e){let r=Fi(e.run);return(!r||Hi.has(r))&&nr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Ko(r)}function Ld(e){let r=Hv.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}async function Wd(e,r,t){let n=await fetch(e,{method:"POST",headers:Ie(r),body:JSON.stringify(t)}),o=null;try{o=await n.json()}catch{o=null}return{ok:n.ok,status:n.status,parsed:o}}function jv(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Hd(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Vv(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function Gv(e){return e.completionBlocker?"Resolve completion blocker, then rerun `kynver worker complete`.":e.completionOutcome==="review_scheduled"||e.completionOutcome==="review_already_scheduled"?"Await review lane and landing decision in Command Center.":e.completionOutcome==="needs_attention"?"Inspect blocker/attention reason in Command Center and dispatch a repair task.":e.finished&&!e.completionReportedAt?"Post completion acknowledgement to AgentOS (`kynver worker complete`).":null}function $d(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Yv(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function yn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function Jv(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function jo(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function qv(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function bn(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,jo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(s))return{ok:!0,skipped:!0,reason:"worker-not-finished"};if(n.localOnly)return{ok:!0,skipped:!0,reason:"local-only-worker"};if(!i)return{ok:!1,reason:"missing agentOsId"};let l=e.force===!0||e.force==="true";if(!l&&Tr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Mi(n)&&Jv(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=Li({worker:n,run:o,status:s});if(!P.ok)return yn(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,jo(o)),s=qv(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=Dd({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!P.allowed){let v=P.detail??`worktree completion blocked (${P.state})`;return yn(n,v),{ok:!1,reason:v,nextAction:"Clean the worktree (commit, open a PR, or `kynver worker discard-disposable --path <file>`), then rerun `kynver worker complete`.",completionBlocked:!0}}}let d=L(e.baseUrl?String(e.baseUrl):void 0),f=e.secret?String(e.secret):void 0,m=await K(f,i,{baseUrl:d}),p=`${d}/api/agent-os/by-id/${encodeURIComponent(i)}/harness/completion`,g={...s};n.disposableArtifactsRemoved?.length&&(g.disposableArtifactsRemoved=n.disposableArtifactsRemoved);let k={source:"kynver-harness",agentOsId:i,runId:n.runId,workerName:n.name,taskId:a,leaseToken:n.leaseToken??null,startedAt:n.startedAt,finishedAt:s.lastActivityAt||new Date().toISOString(),status:n.leaseToken?{...g,leaseToken:n.leaseToken}:g,workerInjection:{instructionPolicyFingerprint:n.instructionPolicyFingerprint??null,instructionPolicyEvidence:n.instructionPolicyEvidence??null,memoryQualityCapture:n.memoryQualityCapture??null,policyAt:n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence=="object"&&"policyAt"in n.instructionPolicyEvidence&&typeof n.instructionPolicyEvidence.policyAt=="string"?n.instructionPolicyEvidence.policyAt:null,personaSlug:n.personaSlug??null,personaEvidence:n.personaEvidence??null,contextEnvelopeEvidence:n.contextEnvelopeEvidence??null}},h=await Wd(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await Pc(i,{baseUrl:d});P&&P!==m&&(m=P,h=await Wd(p,m,k))}if(h.ok){let P=md(h.parsed);if(!fd(P)){let oe=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;yn(n,oe);let De={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return Di(n,n.runId,De),{ok:!1,httpStatus:h.status,response:h.parsed,reason:oe,completionBlocked:!0}}yn(n,void 0);let v=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};Di(n,n.runId,E),Wi(n,s,{source:"harness-completion"});let H=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:v,...H?{prHandoff:{prUrl:H}}:{}}}let S=h.status===401||h.status===403,A=jv(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),W=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return yn(n,W),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function ji(e){try{let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,jo(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!re(s)){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"worker-not-finished",workerStatus:s.status,alive:s.alive},null,2));return}if(n.localOnly){console.log(JSON.stringify({worker:n.name,runId:n.runId,status:"skipped",reason:"local-only-worker"},null,2));return}i||(console.error("worker complete requires --agent-os-id (or an agentOsId persisted at worker start)"),process.exit(1));let l=await bn(e);console.log(JSON.stringify({worker:n.name,runId:n.runId,...l.skipped?{status:"skipped"}:{},...l.reason?{reason:l.reason}:{},...l.nextAction?{nextAction:l.nextAction}:{},...l.completionBlocked?{completionBlocked:l.completionBlocked}:{},agentOsId:i,taskId:a,httpStatus:l.httpStatus,response:l.response},null,2)),l.ok||process.exit(1)}catch(r){console.error(`worker complete failed: ${r.message}`),process.exit(1)}}function Kd(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=U(n.runId),s=T(n,jo(o));le(Rn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function zv(e){return{full:`kynver worker list --run ${e} --full`,blocked:`kynver worker list --run ${e} --blocked`,running:`kynver worker list --run ${e} --running`,task:`kynver worker list --run ${e} --task <task-id>`,worker:`kynver worker list --run ${e} --worker <worker>`,runFull:`kynver run status --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`}}function Ki(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function Xv(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Ki(e.task??e.taskId);t&&(r.task=t);let n=Ki(e.worker??e.name);n&&(r.worker=n);let o=Ki(e.status);return o&&(r.status=o),r}function Qv(e,r){if(r.blocked){let t=typeof e.attention=="string"?e.attention:"",n=typeof e.status=="string"?e.status:"";if(!(t==="blocked"||t==="needs_attention"||t==="stale"||n==="blocked"))return!1}return!(r.running&&!(e.status==="running"&&e.attention!=="blocked"&&e.attention!=="needs_attention")||typeof r.task=="string"&&e.taskId!==r.task||typeof r.worker=="string"&&e.worker!==r.worker||typeof r.status=="string"&&e.status!==r.status)}function jd(e,r){let t=Xv(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>Qv(s,t)),o={...e,workerCount:n.length,needsAttention:n.filter(s=>s.attention&&s.attention!=="ok"&&s.attention!=="done").map(s=>s.worker),workers:n,activeFilters:t};return e.summary&&(o.summary={statusCounts:dr(n,"status"),attentionCounts:dr(n,"attention"),lifecycleCounts:dr(n,"lifecycleStage")}),e.controller&&(o.controller=Yd(n)),o}function Vd(e){let r=$i(e),t=e.full===!0||e.full==="true",n=jd(t?Dr(r):qd(r),e),o=n.workers;console.log(JSON.stringify({runId:n.runId,status:n.status,projection:t?"full":"compact",workerCount:n.workerCount,...n.activeFilters?{activeFilters:n.activeFilters}:{},...t?{}:{resultContract:{projection:"compact",rawWorkerPayloadsOmitted:!0,deepDetailAvailableVia:["--full","worker status","worker tail","run status --full"]},drilldownCommands:zv(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function Gd(e){let{run:r,workerName:t,worker:n}=e,o=T(n,{base:r.base,baseCommit:r.baseCommit}),s=o.gitAncestry.headIsAncestorOfBase===!1&&o.gitAncestry.head?o.gitAncestry.head:void 0,i=tt({alive:o.alive,finalResult:o.finalResult,changedFiles:o.changedFiles,gitAncestry:o.gitAncestry,headCommit:s}),a=n.completionBlocker,l=typeof a=="string"&&a?a:void 0,c=$d(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Hd(n.completionResponse),m=Hd(f?.task),p=kn(f?.outcome),g=kn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(v=>typeof v=="string"&&v.trim().length>0):[],h=kn(m?.prUrl)??kn(f?.prUrl),S=kn(n.completionReportedAt),A=Vv({finished:re(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),W=Gv({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:re(o)}),P=Yv({changedFiles:o.changedFiles,headCommit:s,prUrl:h??void 0});return{worker:o.worker,status:u,attention:d,attentionReason:c??o.attention.reason,landingBlocked:o.finalResult?d==="needs_attention"||d==="blocked":!1,exitedWithoutFinalResult:!o.finalResult&&!o.alive,salvageState:i?.salvageable?"review_needed":"none",salvageReason:i?.salvageable?i.attentionReason:void 0,pid:o.pid,alive:o.alive,currentTool:o.currentTool,lastActivityAt:o.lastActivityAt,lastHeartbeatPhase:o.lastHeartbeatPhase,lastHeartbeatSummary:o.lastHeartbeatSummary,heartbeatBlocker:o.heartbeatBlocker,changedFileCount:o.changedFiles.length,changedFiles:o.changedFiles,branch:o.branch,taskId:n.taskId??null,planId:n.planId??null,instructionPolicyFingerprint:typeof n.instructionPolicyFingerprint=="string"?n.instructionPolicyFingerprint:null,instructionPolicyRuleCount:(()=>{let v=n.instructionPolicyEvidence;if(!v||typeof v!="object")return null;let E=v.ruleSlugs;return Array.isArray(E)?E.length:null})(),leaseOwner:n.leaseOwner??null,model:typeof n.model=="string"?n.model:void 0,routingRule:typeof n.routingRule=="string"?n.routingRule:void 0,requestedModel:typeof n.requestedModel=="string"?n.requestedModel:void 0,headCommit:s,prUrl:h,handoffState:P,gitAncestry:o.gitAncestry,finalResult:o.finalResult,lifecycleStage:A,completionReportedAt:S,completionOutcome:n.completionOutcome??null,completionRouteStatus:g,completionRouteOutcome:p,completionWarnings:k,completionBlocker:c??null,checkpoint:{phase:o.lastHeartbeatPhase,summary:o.lastHeartbeatSummary,blocker:o.heartbeatBlocker},lastCommandHint:o.currentTool??o.lastHeartbeatSummary,failureReason:c??o.error??null,nextAction:W,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function Zv(e){let r=typeof e.status=="string"?e.status:"",t=typeof e.completionBlocker=="string"&&e.completionBlocker.trim().length>0?e.completionBlocker:void 0;return t&&!$d(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function eS(e,r){return{worker:e,status:"done",attention:"done",attentionReason:"metadata terminal worker; full status skipped in compact snapshot",alive:!1,pid:typeof r.pid=="number"?r.pid:void 0,branch:typeof r.branch=="string"?r.branch:void 0,taskId:r.taskId??null,planId:r.planId??null,model:typeof r.model=="string"?r.model:void 0,routingRule:typeof r.routingRule=="string"?r.routingRule:void 0,requestedModel:typeof r.requestedModel=="string"?r.requestedModel:void 0,lifecycleStage:r.completionReportedAt?"completion_acknowledged":"worker_finished",completionReportedAt:typeof r.completionReportedAt=="string"?r.completionReportedAt:null,completionOutcome:r.completionOutcome??null,localOnly:r.localOnly===!0,compactStatus:!0}}function dr(e,r){let t={};for(let n of e){let o=n[r],s=typeof o=="string"&&o.trim()?o:"unknown";t[s]=(t[s]??0)+1}return t}function Fd(e){if(e.attention!=="blocked")return!1;let r=typeof e.attentionReason=="string"?e.attentionReason:"";return r.includes("cli-config.json.tmp")||r.includes("Invalid authentication credentials")||r.includes("provider CLI is missing or not on PATH")||r.includes("unknown command:")}function Yd(e){let r=e.filter(Fd),t=e.filter(n=>{if(Fd(n))return!1;let o=n.attention;return o==="needs_attention"||o==="blocked"||o==="stale"||n.status==="running"});return{actionableCount:t.length,runningCount:e.filter(n=>n.status==="running").length,blockedCount:e.filter(n=>n.attention==="blocked").length,staleCount:e.filter(n=>n.attention==="stale").length,needsAttentionCount:e.filter(n=>n.attention==="needs_attention").length,doneCount:e.filter(n=>n.status==="done").length,systemHealthBlockerCount:r.length,systemHealthBlockers:r.slice(0,10).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt})),actionableWorkers:t.slice(0,25).map(n=>({worker:n.worker,status:n.status,attention:n.attention,attentionReason:n.attentionReason,taskId:n.taskId,planId:n.planId,model:n.model,routingRule:n.routingRule,lastActivityAt:n.lastActivityAt,nextAction:n.nextAction}))}}function Jd(e,r,t){let n={runId:e.id,name:e.name,status:zt(e.status,r),repo:e.repo,workerCount:r.length,needsAttention:r.filter(o=>o.attention&&o.attention!=="ok"&&o.attention!=="done").map(o=>o.worker),workers:r};return t&&(n.summary={statusCounts:dr(r,"status"),attentionCounts:dr(r,"attention"),lifecycleCounts:dr(r,"lifecycleStage")},n.controller=Yd(r)),n}function rS(e){return e.status==="done"&&e.attention==="done"}function Dr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(Rn.join(x(r.id),"workers",R(s),"worker.json"),void 0);return i?Gd({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Jd(r,n,!1);return le(Rn.join(x(r.id),"last-board.json"),o),o}function qd(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(Rn.join(x(r.id),"workers",R(i),"worker.json"),void 0);return a?Zv(a)?eS(i,a):Gd({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!rS(i)),s=Jd(r,o,!0);return s.status=zt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:dr(n,"status"),allAttentionCounts:dr(n,"attention")},le(Rn.join(x(r.id),"last-board-compact.json"),s),s}async function zd(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Dr(t),s=L(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,n,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(n)}/harness/snapshot`,l=await q(a,i,{agentOsId:n,runId:t,source:r,snapshot:o},{agentOsId:n,baseUrl:s});return{ok:l.ok,httpStatus:l.status,response:l.response,authRefreshed:l.refreshedAuth,authRefreshFailure:l.authRefreshFailure}}function tS(e){return{full:`kynver run status --run ${e} --full`,blocked:`kynver status --run ${e} --blocked`,running:`kynver status --run ${e} --running`,task:`kynver status --run ${e} --task <task-id>`,worker:`kynver status --run ${e} --worker <worker>`,workersFull:`kynver worker list --run ${e} --full`,workerFull:`kynver worker status --run ${e} --name <worker>`,workerTail:`kynver worker tail --run ${e} --name <worker> --lines 80`,monitorTick:`kynver monitor status --run ${e} --tick`}}function vn(e){let r=$i(e),t=e.full===!0||e.full==="true",n=jd(t?Dr(r):qd(r),e);n.projection=t?"full":"compact",t||(n.resultContract={projection:"compact",rawWorkerPayloadsOmitted:!0,omittedWorkerFields:["finalResult","changedFiles","gitAncestry","completionResponse","stdout/stderr tails"],deepDetailAvailableVia:["--full","worker status","worker tail","monitor status --tick"]},n.drilldownCommands=tS(r)),console.log(JSON.stringify(n,null,2))}function Xd(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=Qn(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
27
|
+
`).filter(Boolean)){let i=Gr(s),a=i?nc(i):s;a&&console.log(a)}}function Qd(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t);if(!$(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if($t(n.pid,"SIGTERM"),Rr(1500),$(n.pid)){$t(n.pid,"SIGKILL"),console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"sigkill_sent"},null,2));return}console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"stopped"},null,2))}w();var aS=5e3,lS=360*60*1e3,cS=3,uS=5e3;function dS(e){let{runId:r,workerName:t}=Ke(e);return{run:r,name:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,maxTotalMs:Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):void 0,completeAttempts:Number(e.completeAttempts)>0?Math.floor(Number(e.completeAttempts)):void 0,completeBackoffMs:Number(e.completeBackoffMs)>0?Math.floor(Number(e.completeBackoffMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}}async function Rt(e){let r=dS(e),t=r.pollMs??aS,n=r.maxTotalMs??lS,o=r.completeAttempts??cS,s=r.completeBackoffMs??uS,i=fe(r.run,r.name);if(!i.agentOsId||!i.taskId)return{worker:i.name,runId:i.runId,outcome:"missing_link",attempts:0,reason:"worker has no agentOsId/taskId \u2014 nothing to attribute completion to"};if(Tr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let a=Date.now();for(;;){if(i=fe(r.run,r.name),Tr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=T(i);if(re(u)||!$(i.pid))break;if(Date.now()-a>n)return{worker:i.name,runId:i.runId,outcome:"timed_out",attempts:0,reason:`worker did not finish within ${n}ms`};Rr(t)}let l,c;for(let u=1;u<=o;u++){let d=await bn({run:r.run,name:r.name,...r.agentOsId?{agentOsId:r.agentOsId}:{},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.secret?{secret:r.secret}:{}});if(l=d.httpStatus,d.ok)return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:d.httpStatus,attempts:u};if(d.httpStatus===401||d.httpStatus===403)return c=typeof d.reason=="string"?d.reason:"completion replay refused",{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:d.httpStatus,attempts:u,reason:c};c=typeof d.reason=="string"?d.reason:"transient failure",u<o&&Rr(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function rp(e){try{let r=await Rt(e);console.log(JSON.stringify(r,null,2)),(r.outcome==="missing_link"||r.outcome==="timed_out")&&process.exit(1),process.exit(0)}catch(r){console.error(`worker auto-complete failed: ${r.message}`),process.exit(1)}}function pS(){return ep.join(iS(new URL(".",import.meta.url)),"cli.js")}function tp(e){let r=e.cliPath??pS();if(!oS(r))return;let t=ep.join(e.workerDir,"auto-complete.log"),n;try{n=sS(t,"a")}catch{n=void 0}let o=["ignore",n??"ignore",n??"ignore"],s=e.nodeExecutable??process.execPath,i=[r,"worker","auto-complete","--run",e.runId,"--name",e.workerName];e.agentOsId&&i.push("--agent-os-id",e.agentOsId),e.baseUrl&&i.push("--base-url",e.baseUrl),e.secret&&i.push("--secret",e.secret);try{let a=nS(s,i,ae({detached:!0,stdio:o,env:process.env}));return n!==void 0&&Zd(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{Zd(n)}catch{}return}}ye();function np(e,r,t){ce(e,["fetch","origin",t,"--prune"],{allowFailure:!0});let n=`origin/${t}`,o=Q(e,["worktree","add","-B",t,r,n]);if(o.status===0)return;let s=Q(e,["worktree","add","-b",t,r,"HEAD"]);if(s.status!==0){let i=o.stderr||o.stdout||s.stderr||s.stdout||"git worktree add failed for repair target branch";throw new Error(i)}}Ee();O();function Vi(e,r){let t=typeof r.name=="string"?r.name.trim():"";if(!t||t==="undefined"||t==="null")throw new Error(`worker name is required and must be a real identifier (got: ${JSON.stringify(r.name)})`);let n=R(t);if(e.workers?.[n])throw new Error(`worker already exists in run ${e.id}: ${n}`);if(!r.task)throw new Error(`missing task text for worker ${n}`);let o=r.routingRule||r.requestedModel?{provider:r.provider||Ze,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Io({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=pd(o.provider),i=o.model;if(s.preflightModel){let M=s.preflightModel(r.model);if(!M.ok)throw new Error(`model preflight failed for provider "${s.name}": ${M.note??"invalid model/provider combination"}`);M.normalized&&console.error(`[supervisor] ${n}: ${M.note}`),i=M.model}let{worktreesDir:a}=te(),l=bt.join(x(e.id),"workers",n);fS(l,{recursive:!0});let c=bt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(mS(c))throw new Error(`worktree path already exists: ${c}`);ce(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?np(e.repo,c,u):ce(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=bt.join(l,"stdout.jsonl"),m=bt.join(l,"stderr.log"),p=bt.join(l,"heartbeat.jsonl"),g=id({task:r.task,ownedPaths:r.ownedPaths||[],worktreePath:c,heartbeatPath:p,planId:r.planId,taskId:r.taskId,instructionPolicyMarkdown:r.instructionPolicyMarkdown,memoryQualityMarkdown:r.memoryQualityPromptMarkdown??r.memoryQualityCapture?.promptMarkdown??null,personaMarkdown:r.personaMarkdown,contextEnvelopeMarkdown:r.contextEnvelopeMarkdown,model:i,repairTargetPrUrl:r.repairTargetPrUrl,repairTargetBranch:r.repairTargetBranch??(u||void 0)}),k=process.env.KYNVER_HARNESS_TASK_ID,h=process.env.KYNVER_HARNESS_AGENT_OS_ID;r.taskId&&(process.env.KYNVER_HARNESS_TASK_ID=String(r.taskId)),r.agentOsId&&(process.env.KYNVER_HARNESS_AGENT_OS_ID=String(r.agentOsId));let S;try{S=s.start({name:n,task:r.task,ownedPaths:r.ownedPaths,model:i,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:p,prompt:g})}catch(M){throw ce(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ce(e.repo,["branch","-D",d],{allowFailure:!0}),M}finally{k===void 0?delete process.env.KYNVER_HARNESS_TASK_ID:process.env.KYNVER_HARNESS_TASK_ID=k,h===void 0?delete process.env.KYNVER_HARNESS_AGENT_OS_ID:process.env.KYNVER_HARNESS_AGENT_OS_ID=h}let A=zu(S.model,i,s.defaultModel),W=b(),P=Ue(process.env,W),v=Fe().runnerId,E=No(P.boxKind),H={name:n,runId:e.id,status:"running",pid:S.pid,model:A,branch:d,worktreePath:c,workerDir:l,stdoutPath:f,stderrPath:m,heartbeatPath:p,ownedPaths:r.ownedPaths,...r.agentOsId?{agentOsId:String(r.agentOsId)}:{},...r.taskId?{taskId:String(r.taskId)}:{},...r.planId?{planId:String(r.planId)}:{},...r.instructionPolicyFingerprint?{instructionPolicyFingerprint:String(r.instructionPolicyFingerprint)}:{},...r.instructionPolicyEvidence?{instructionPolicyEvidence:r.instructionPolicyEvidence}:{},...r.memoryQualityCapture?{memoryQualityCapture:r.memoryQualityCapture}:{},...r.personaSlug?{personaSlug:String(r.personaSlug)}:{},...r.personaEvidence?{personaEvidence:r.personaEvidence}:{},...r.contextEnvelopeEvidence?{contextEnvelopeEvidence:r.contextEnvelopeEvidence}:{},...r.leaseOwner?{leaseOwner:String(r.leaseOwner)}:{},...r.leaseToken?{leaseToken:String(r.leaseToken)}:{},...r.dispatched?{dispatched:!0}:{},...!r.agentOsId||!r.taskId?{localOnly:!0}:{},routingRule:o.rule,...o.requestedModel?{requestedModel:o.requestedModel}:{},...o.orchestrationAudit?{orchestrationAudit:o.orchestrationAudit}:{},...r.executorRef?{executorRef:String(r.executorRef)}:{},...r.parentTaskId?{parentTaskId:String(r.parentTaskId)}:{},...r.taskTitle?{taskTitle:String(r.taskTitle)}:{},...r.taskPrUrl?{taskPrUrl:String(r.taskPrUrl)}:{},...r.repairTargetPrUrl?{repairTargetPrUrl:String(r.repairTargetPrUrl)}:{},...r.repairTargetBranch?{repairTargetBranch:String(r.repairTargetBranch)}:{},boxKind:P.boxKind,boxId:E,runtimeId:v,startedAt:new Date().toISOString()};if(V(e.id,H),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:bt.join(l,"worker.json")}},e.status="running",Ae(e),H.agentOsId&&H.taskId){let M;try{M=tp({runId:e.id,workerName:n,workerDir:l,agentOsId:H.agentOsId})}catch(oe){let De=`completion sidecar failed to spawn: ${oe.message}`;H.completionBlocker=De,V(e.id,H)}if(M)M.pid&&(H.completionSidecarPid=M.pid,V(e.id,H));else{let oe="completion sidecar failed to spawn (CLI not found or spawn error)";H.completionBlocker=oe,H.completionSidecarSpawnFailedAt=new Date().toISOString(),V(e.id,H)}}return H}async function op(e){let r=U(String(e.run)),t=typeof e.name=="string"?e.name.trim():"";t||(console.error("worker start failed: --name is required"),process.exit(1));let n=e.task?String(e.task):Ol(e.taskFile?String(e.taskFile):void 0);n||(console.error("missing --task or --task-file"),process.exit(1));let o=!!(e.agentOsId&&e.taskId),s=e.localOnly===!0||e.localOnly==="true";!o&&!s&&(e.agentOsId||e.taskId)&&(console.error("worker start: board-linked workers require both --agent-os-id and --task-id (or pass --local-only for direct runs)"),process.exit(1));let i=e.wait===!0||e.wait==="true",a;try{a=Vi(r,{name:t,task:n,ownedPaths:e.owned?String(e.owned).split(",").map(c=>c.trim()).filter(Boolean):[],model:e.model?String(e.model):void 0,branch:e.branch?String(e.branch):void 0,agentOsId:e.agentOsId?String(e.agentOsId):void 0,taskId:e.taskId?String(e.taskId):void 0,provider:e.provider?String(e.provider):void 0}),console.log(JSON.stringify({runId:r.id,worker:a.name,pid:a.pid,branch:a.branch,worktreePath:a.worktreePath,workerDir:a.workerDir},null,2))}catch(c){console.error(`worker start failed: ${c.message}`),process.exit(1)}if(!i||!a)return;let l=await Rt({run:String(e.run),name:a.name,...a.agentOsId?{agentOsId:a.agentOsId}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});console.error(JSON.stringify({event:"start_wait_outcome",...l})),l.outcome==="timed_out"&&(process.exitCode=1)}w();import{createHash as sp}from"node:crypto";function pr(e){let r=e.replace(/\r\n/g,`
|
|
28
|
+
`).trimEnd();return sp("sha256").update(r,"utf8").digest("hex")}function vt(e){if(e==null)return null;let r=e.trim();return r?sp("sha256").update(r,"utf8").digest("hex"):null}O();var J=class extends Error{kind;httpStatus;constructor(r,t,n){super(t),this.name="PlanPersistError",this.kind=r,this.httpStatus=n}};function Sn(e,r){return e===401||e===403?new J("auth",r,e):e>=500?new J("server",r,e):new J("permanent",r,e)}function Gi(e){let r=e instanceof Error?e.message:String(e);return/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|fetch failed|network/i.test(r)?new J("network",r):new J("tool_interruption",r)}function ip(e){return e!=="permanent"}function Go(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Yo(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function ap(e,r,t={}){let n=L(t.baseUrl),o=t.apiKey??Z(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:Go(o)}),l=await Yo(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw Sn(a.status,c)}return l}catch(a){throw a instanceof J?a:Gi(a)}}async function lp(e,r={}){let t=L(r.baseUrl),n=r.apiKey??Z(),o=r.fetchFn??fetch,s=e.agentOsSlug;try{if(e.operation==="create"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans`,m={title:e.title,summary:e.summary??null,slug:e.planSlug??null,sourceRefs:Vo(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Vo(e)}},p=await o(f,{method:"POST",headers:Go(n),body:JSON.stringify(m)}),g=await Yo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw Sn(p.status,h)}let k=g;return{planId:k.plan.id,versionId:k.version.id,versionNumber:k.version.versionNumber}}let i=e.planId;if(!i)throw new J("permanent","planId is required for this operation");if(e.operation==="update_metadata"){let f=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}`,m={title:e.title,summary:e.summary??null,sourceRefs:Vo(e)},p=await o(f,{method:"PATCH",headers:Go(n),body:JSON.stringify(m)}),g=await Yo(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw Sn(p.status,h)}let k=g;return{planId:k.id,versionId:k.currentVersionId,versionNumber:null}}let a=`${t}/api/agent-os/${encodeURIComponent(s)}/plans/${encodeURIComponent(i)}/versions`,l={title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Vo(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Go(n),body:JSON.stringify(l)}),u=await Yo(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw Sn(c.status,f)}let d=u;return{planId:d.version.planId,versionId:d.version.id,versionNumber:d.version.versionNumber}}catch(i){throw i instanceof J?i:Gi(i)}}function Vo(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as gS}from"node:crypto";function Jo(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:vt(e.summary),bodyHash:pr(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return gS("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as cp}from"node:fs";import{homedir as hS}from"node:os";import St from"node:path";function qo(){let e=process.env.KYNVER_STATE_ROOT;return e?St.resolve(e):St.join(hS(),".kynver","state")}function zo(){return St.join(qo(),"plan-outbox")}function kS(){return St.join(qo(),"plan-outbox-archive")}function Mr(){let e=zo(),r=kS();return cp(e,{recursive:!0}),cp(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function wn(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=St.resolve(e);return r.startsWith("/tmp/")||r.startsWith(St.join("/var","folders"))}import{existsSync as Yi,readFileSync as dp,renameSync as up,readdirSync as yS,writeFileSync as Ji,unlinkSync as jM}from"node:fs";import Oe from"node:path";import{randomUUID as RS}from"node:crypto";var bS=12;function wt(){let{outboxDir:e}=Mr(),r=yS(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=zi(Oe.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function qi(e){for(let r of wt())if(r.idempotencyKey===e)return r;return null}function zi(e){if(!Yi(e))return null;try{return JSON.parse(dp(e,"utf8"))}catch{return null}}function pp(e){let{outboxDir:r}=Mr(),t=Oe.join(r,e.bodyPath);return dp(t,"utf8")}function Xi(e,r){let{outboxDir:t}=Mr(),n=new Date().toISOString(),o=r.existing?.id??RS(),s=r.existing?.bodyPath??`${o}.body.md`,i=Oe.join(t,`${o}.json`),a=Oe.join(t,s);r.existing||Ji(a,e.body,"utf8");let l={id:o,idempotencyKey:Jo(e),operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??r.existing?.planId??null,planSlug:e.planSlug??r.existing?.planSlug??null,title:e.title,summary:e.summary??null,bodyPath:s,bodyHash:pr(e.body),author:e.author??null,model:e.model??null,sourceRefs:e.sourceRefs??null,changeSummary:e.changeSummary??null,markCurrent:e.markCurrent??!0,createdAt:r.existing?.createdAt??n,updatedAt:n,retryCount:(r.existing?.retryCount??0)+(r.existing?1:0),maxRetries:e.maxRetries??r.existing?.maxRetries??bS,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Ji(i,`${JSON.stringify(l,null,2)}
|
|
29
|
+
`,{mode:384}),l}function mp(e){let{outboxDir:r}=Mr(),t=Oe.join(r,`${e.id}.json`);Ji(t,`${JSON.stringify(e,null,2)}
|
|
30
|
+
`,{mode:384})}function fp(e){let{outboxDir:r,archiveDir:t}=Mr(),n=Oe.join(r,`${e.id}.json`),o=Oe.join(r,e.bodyPath),s=Oe.join(t,`${e.id}.json`),i=Oe.join(t,e.bodyPath);Yi(n)&&up(n,s),Yi(o)&&up(o,i)}function Cn(e){let{outboxDir:r}=Mr();return{jsonPath:Oe.join(r,`${e.id}.json`),bodyPath:Oe.join(r,e.bodyPath)}}function gp(e,r){return{operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId,planSlug:e.planSlug,title:e.title,summary:e.summary,body:r,changeSummary:e.changeSummary??void 0,author:e.author??void 0,model:e.model??void 0,sourceRefs:e.sourceRefs,markCurrent:e.markCurrent??!0,maxRetries:e.maxRetries}}async function hp(e,r,t={}){let n=await ap(e,r.planId,t),o=n.plan,s=n.currentVersion;if(o.title.trim()!==r.title.trim())throw new J("verification_failed",`title mismatch: expected "${r.title}", got "${o.title}"`);let i=vt(r.summary),a=vt(o.summary);if(i!==a)throw new J("verification_failed","summary mismatch on readback");if(r.versionId&&o.currentVersionId!==r.versionId)throw new J("verification_failed",`currentVersionId mismatch: expected ${r.versionId}, got ${o.currentVersionId}`);if(r.versionNumber!=null&&(!s||s.versionNumber!==r.versionNumber))throw new J("verification_failed",`versionNumber mismatch: expected ${r.versionNumber}, got ${s?.versionNumber??"none"}`);let l=s?.body??"",c=pr(l);if(r.bodyHash&&c!==r.bodyHash)throw new J("verification_failed","body hash mismatch on readback");return{planId:o.id,currentVersionId:o.currentVersionId,versionNumber:s?.versionNumber??null,title:o.title,summary:o.summary,bodyHash:r.bodyHash||c,readAt:new Date().toISOString()}}function kp(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:pr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var yp="persisted and read back",vS="queued for retry",Qi="failed and needs action";async function _n(e,r={}){e.bodyPathHint&&wn(e.bodyPathHint);let t=Jo(e),n=qi(t);if(n?.readbackEvidence)return{userStatus:yp,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Rp(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??lp,s=r.verifyReadback??hp;try{let i=await o(e,r),a={...e,planId:i.planId},l=kp(a,i),c=await s(e.agentOsSlug,SS(e,l),r);return n&&fp(n),{userStatus:yp,planId:i.planId,versionId:i.versionId??void 0,readbackEvidence:c,idempotencyKey:t}}catch(i){let a=i instanceof J?i:new J("tool_interruption",i instanceof Error?i.message:String(i));if(!ip(a.kind)){let l=Xi(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=Cn(l),u=bp(l,a.message);return{userStatus:Qi,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Rp(e,a.message,a.kind,n)}}function SS(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Rp(e,r,t,n){let o=Xi(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=Cn(o);if(o.retryCount>=o.maxRetries){let i=bp(o,r);return{userStatus:Qi,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:vS,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function bp(e,r){let t={...e,queueStatus:"failed",userStatus:Qi,lastError:r,updatedAt:new Date().toISOString()};return mp(t),t}import wS from"node:path";async function Zi(e={},r={}){let t=wt().filter(s=>e.outboxId?s.id===e.outboxId:!0),n=e.max&&e.max>0?t.slice(0,e.max):t,o={processed:0,succeeded:0,stillQueued:0,failed:0,results:[]};for(let s of n){o.processed+=1;let i=pp(s),a=gp(s,i),l=await _n(a,r);l.userStatus==="persisted and read back"?o.succeeded+=1:l.userStatus==="failed and needs action"?o.failed+=1:o.stillQueued+=1,o.results.push({outboxId:s.id,userStatus:l.userStatus,lastError:l.lastError})}return o}function ea(e){let r=wS.join(zo(),`${e}.json`);return zi(r)}function ra(e){let r=Cn(e);return["## Plan persistence risk","",`AgentOS plan write is **not** confirmed (${e.userStatus}).`,`- outboxId: \`${e.id}\``,e.planId?`- planId: \`${e.planId}\``:"- planId: (pending \u2014 create not yet applied)",`- outbox: \`${r.jsonPath}\``,`- body: \`${r.bodyPath}\``,"","Drain when approval/connectivity returns: `kynver plan outbox drain`"].join(`
|
|
31
|
+
`)}function ta(e){let r=e.metadata&&typeof e.metadata=="object"?e.metadata:null,t=typeof e.planPersistenceOutboxId=="string"&&e.planPersistenceOutboxId||(r&&typeof r.planPersistenceOutboxId=="string"?r.planPersistenceOutboxId:void 0);return t?{outboxId:t,jsonPath:typeof e.planPersistenceOutboxPath=="string"?e.planPersistenceOutboxPath:r&&typeof r.planPersistenceOutboxPath=="string"?r.planPersistenceOutboxPath:void 0,bodyPath:typeof e.planPersistenceBodyPath=="string"?e.planPersistenceBodyPath:r&&typeof r.planPersistenceBodyPath=="string"?r.planPersistenceBodyPath:void 0}:null}async function na(e){let r=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/release`,t;try{t=await q(r,e.secret,{agentOsId:e.agentOsId,leaseOwner:e.leaseOwner,...e.failureDetail?{failureDetail:e.failureDetail}:{}},{agentOsId:e.agentOsId,baseUrl:e.baseUrl})}catch(s){return{released:!1,httpOk:!1,releaseResponse:{ok:!1,error:s.message}}}let n=t.response;return{released:t.ok===!0||n?.ok===!0,httpOk:t.ok===!0,releaseResponse:t.response??t}}import{spawnSync as Sp}from"node:child_process";import{spawnSync as CS}from"node:child_process";function vp(){if(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim())return{source:"env",configured:!0,reason:"GitHub token already configured in environment"};let e=CS("gh",["auth","token"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return{source:"missing",configured:!1,reason:typeof e.stderr=="string"&&e.stderr.trim()?e.stderr.trim():"gh auth token failed; run `gh auth login` on this machine"};let r=typeof e.stdout=="string"?e.stdout.trim():"";return r?(process.env.GH_TOKEN=r,{source:"gh-cli",configured:!0,reason:"Using local GitHub CLI auth for daemon land_pr merge"}):{source:"missing",configured:!1,reason:"gh auth token returned an empty token; run `gh auth login` on this machine"}}var wp=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),_S=new Set(["CLEAN","HAS_HOOKS"]);function sa(e){return e?.trim()?["--repo",e.trim()]:[]}function Cp(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function _p(e,r,t){let n=e.gh(r,t);if(n.status!==0)throw new Error(n.stderr||n.stdout||`gh ${t.join(" ")} failed`);return JSON.parse(n.stdout||"{}")}function xn(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function xS(e){let r=Array.isArray(e)?e:[],t=[],n=[];for(let o of r){let s=o&&typeof o=="object"?o:{},i=typeof s.conclusion=="string"?s.conclusion.toUpperCase():"",a=typeof s.status=="string"?s.status.toUpperCase():"",l=typeof s.state=="string"?s.state.toUpperCase():"";if(!(i&&wp.has(i))){if(i){n.push(`${xn(s)}=${i}`);continue}if(!(l&&wp.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${xn(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${xn(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${xn(s)}=${a}`);continue}t.push(`${xn(s)}=PENDING`)}}}return{pending:t,failed:n}}function PS(e){return(Array.isArray(e)?e:[]).some(t=>{let n=t&&typeof t=="object"?t:{},o=typeof n.name=="string"&&n.name||typeof n.context=="string"&&n.context||"",s=typeof n.conclusion=="string"?n.conclusion.toUpperCase():"",i=typeof n.state=="string"?n.state.toUpperCase():"";return/^vercel/i.test(o)&&(s==="SUCCESS"||i==="SUCCESS")})}var ES=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,AS=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,IS=/^docs[(:]/i,OS=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function NS(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=IS.test(r)||OS.test(t),o=ES.test(t),s=AS.test(t);return n||o||s||e.vercelCheckSuccess===!0}function TS(e){if(!NS({title:e.title,body:e.body,vercelCheckSuccess:PS(e.statusCheckRollup)}))throw new Error(`PR #${e.number} lacks landing verification evidence \u2014 add ## Test plan / ## Verification with local commands, Vercel preview, or docs/no-code rationale`)}function DS(e){if(e.state!=="OPEN")throw new Error(`PR #${e.number} is ${e.state}, not OPEN`);if(e.isDraft)throw new Error(`PR #${e.number} is still a draft`);if(!_S.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=xS(e.statusCheckRollup);if(r.failed.length>0)throw new Error(`PR #${e.number} has failing checks: ${r.failed.join(", ")}`);if(r.pending.length>0)throw new Error(`PR #${e.number} has pending checks: ${r.pending.join(", ")}`);TS(e)}function MS(e){try{return DS(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function US(e,r,t,n){if(!n?.trim())return;let o=encodeURI(`heads/${n}`);e.gh(r,["api","-X","DELETE",`repos/${t}/git/refs/${o}`])}function BS(e,r,t){if(t?.trim())return t.trim();let n=e.gh(r,["repo","view","--json","nameWithOwner"]);if(n.status!==0)throw new Error(n.stderr||"Could not resolve GitHub repo");let o=JSON.parse(n.stdout||"{}");if(!o.nameWithOwner)throw new Error("Could not resolve GitHub repo");return o.nameWithOwner}function LS(e,r){if(!r?.trim())return;let t=Sp("git",["worktree","list","--porcelain"],{cwd:e,encoding:"utf8"});if(t.status!==0)return;let n=String(t.stdout||"").split(/\r?\n/),o=null,s=null;for(let i of n){if(i.startsWith("worktree ")){o=i.slice(9).trim(),s=null;continue}i.startsWith("branch ")&&o&&(s=i.slice(7).trim(),s.endsWith(`/${r}`)&&Sp("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function xp(e){let r=e.cwd??process.cwd(),t=e.exec??Wo,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=vp();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=_p(t,r,["pr","view",n,...sa(e.repo),"--json",["number","url","title","body","state","isDraft","mergeStateStatus","statusCheckRollup","headRefName","mergedAt","mergeCommit"].join(",")]);if(s.state==="MERGED"||s.mergedAt)return{prUrl:s.url||n,outcome:"skipped",mergeCommit:s.mergeCommit?.oid??null,reason:`PR #${s.number} is already merged \u2014 land_pr no-op (redelivery)`};let i=MS(s);if(i)return e.skipNotReady?{prUrl:s.url||n,outcome:"skipped",reason:i}:{prUrl:s.url||n,outcome:"blocked",reason:i};if(e.dryRun)return{prUrl:s.url||n,outcome:"skipped",reason:"dry-run: PR is ready to merge"};let a=String(s.number),l=t.gh(r,["pr","merge",a,...sa(e.repo),"--squash"]);if(l.status!==0){let u=oa(t,r,a,e.repo);return u?{prUrl:u.url||s.url||n,outcome:"skipped",mergeCommit:u.mergeCommit?.oid??null,reason:`PR #${s.number} is already merged \u2014 merged by another lane during land_pr (race)`}:{prUrl:s.url||n,outcome:"blocked",reason:l.stderr||l.stdout||"gh pr merge failed"}}let c=oa(t,r,a,e.repo);c||(c=oa(t,r,a,e.repo));try{let u=BS(t,r,e.repo);US(t,r,u,s.headRefName),LS(r,s.headRefName)}catch{}return{prUrl:c?.url||s.url||n,outcome:"merged",mergeCommit:c?.mergeCommit?.oid??null,reason:`Daemon land_pr merged PR #${s.number}${c?"":" (post-merge view unavailable \u2014 merge verified by gh exit 0)"}`}}function oa(e,r,t,n){try{let o=_p(e,r,["pr","view",t,...sa(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function Pp(e){let r=await K(e.secret,e.agentOsId,{baseUrl:e.baseUrl}),t=String(e.task.id),n=`${e.baseUrl}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/harness/completion`,o=new Date().toISOString(),s={source:"kynver-harness",agentOsId:e.agentOsId,runId:e.runId,workerName:`land-pr-${t}`,taskId:t,leaseToken:e.task.leaseToken??null,startedAt:o,finishedAt:o,status:{finalResult:e.report,prUrl:e.report.prUrl,summary:e.report.reason,leaseToken:e.task.leaseToken??null},workerInjection:null},i=await q(n,r,s,{agentOsId:e.agentOsId,baseUrl:e.baseUrl});return{ok:i.ok,status:i.status}}function Ep(){return["## verify_live completion contract","Finish with a JSON finalResult object:","{",' "prUrl": "<landed pr>",',' "outcome": "passed" | "failed" | "skipped" | "no_mcp_surface",',' "reason": "<human summary>",',' "mergeCommit": "<sha optional>",',' "mcpCalls": [{ "tool": "<name>", "ok": true, "summary": "..." }]',"}","","Drive the feature MCP tools against live production. Do not mark passed without exercising the MCP surface."].join(`
|
|
32
|
+
`)}var Ai=3600*1e3;function Ap(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function Ip(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function WS(e){let r=e.harnessWorkerContext;if(!r||typeof r!="object")return null;let t=r,n=typeof t.instructionPolicyMarkdown=="string"?t.instructionPolicyMarkdown:null,o=typeof t.instructionPolicyFingerprint=="string"?t.instructionPolicyFingerprint:null,s=t.instructionPolicyEvidence&&typeof t.instructionPolicyEvidence=="object"?t.instructionPolicyEvidence:null,i=typeof t.personaMarkdown=="string"?t.personaMarkdown:null,a=typeof t.personaEvidence=="object"&&t.personaEvidence&&typeof t.personaEvidence.injectedPersonaSlug=="string"?t.personaEvidence.injectedPersonaSlug:null,l=t.personaEvidence&&typeof t.personaEvidence=="object"?t.personaEvidence:null,c=t.personaInjectionReady===!0,u=typeof t.contextEnvelopeMarkdown=="string"?t.contextEnvelopeMarkdown:null,d=t.contextEnvelopeEvidence&&typeof t.contextEnvelopeEvidence=="object"?t.contextEnvelopeEvidence:null,f=t.contextEnvelopeReady===!0,m=t.memoryQualityCapture&&typeof t.memoryQualityCapture=="object"?t.memoryQualityCapture:null,p=typeof t.memoryQualityPromptMarkdown=="string"?t.memoryQualityPromptMarkdown:typeof m?.promptMarkdown=="string"?m.promptMarkdown:null;return{instructionPolicyMarkdown:n,instructionPolicyFingerprint:o,instructionPolicyEvidence:s,memoryQualityCapture:m,memoryQualityPromptMarkdown:p,personaMarkdown:i,personaSlug:a,personaEvidence:l,personaInjectionReady:c,contextEnvelopeMarkdown:u,contextEnvelopeEvidence:d,contextEnvelopeReady:f}}function HS(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function FS(e,r){let t=[`[AgentOS task ${e.id}] ${e.title}`,"",e.description?String(e.description):"(no description on the board task)","",`Board linkage: agentOsId=${r}, taskId=${e.id}, attempt=${e.attempt}, executor=${e.executor}${e.executorRef?`, executorRef=${e.executorRef}`:""}.`,"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish."];e.executor==="verify_live"&&t.push("",Ep());let n=ta(e);if(n?.outboxId){let o=ea(n.outboxId);o?t.push("",ra(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
33
|
+
`)}function $S(e){let r=new Set;if(e.targetTaskId)return r.add(String(e.targetTaskId)),r;if(e.targetTaskIds)for(let t of String(e.targetTaskIds).split(",")){let n=t.trim();n&&r.add(n)}return r}async function Ur(e){let r=e.pipeline===!0||e.pipeline==="true";try{let Ht=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=Ht;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=L(e.baseUrl?String(e.baseUrl):void 0),i=await K(e.secret?String(e.secret):void 0,o,{baseUrl:s}),l=!(e.execute===!0||e.execute==="true"),c=Fe({runId:n.id}),u=Pi(n.id,c.runnerId),d=e.diskPath?Le({diskPath:String(e.diskPath)}):Le({diskPath:n.repo}),f=wr({runId:n.id}),m=$S(e),p=m.size>0,g=Number(e.maxStarts)>0?Math.floor(Number(e.maxStarts)):1,k=p?Math.min(g,m.size):g,h=l?k:Math.min(k,f.slotsAvailable);if(!l&&h<=0){let C={runId:n.id,agentOsId:o,dryRun:!1,skipped:!0,reason:f.reason??"no resource slots",resourceGate:f};if(r)return{ok:!0,...C};console.log(JSON.stringify(C,null,2));return}let S=wo(n.id);if(e.reconcileStaleBlockers===!0||e.reconcileStaleBlockers==="true"){let C=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/lane-hygiene`;try{await q(C,i,{agentOsId:o,dryRun:!1,includeBoardReconcile:!0},{agentOsId:o,baseUrl:s})}catch(y){console.error(`[dispatch] reconcile-stale-blockers lane-hygiene call failed: ${y.message}`)}}let A=`${s}/api/agent-os/by-id/${encodeURIComponent(o)}/tasks/dispatch-next`,W=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):Ai,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Dr(n.id),...e.lane?{lane:vu(String(e.lane))}:{},...e.executor?{executor:String(e.executor)}:{},...e.diskPath?{diskPath:String(e.diskPath)}:{},...e.targetTaskId?{targetTaskId:String(e.targetTaskId)}:{},...!e.targetTaskId&&e.targetTaskIds?{targetTaskIds:String(e.targetTaskIds).split(",").map(y=>y.trim()).filter(Boolean)}:{}}),P=async C=>{let y=await q(A,i,W(C),{agentOsId:o,baseUrl:s})??{ok:!1,status:0,response:null},I=y.response;return{dispatch:y,result:I?.result}},v=await P(p||l?h:1);if(!v.dispatch.ok||!v.result){let C={runId:n.id,agentOsId:o,action:"dispatch",httpStatus:v.dispatch.status,response:v.dispatch.response,authRefreshed:v.dispatch.refreshedAuth===!0,authRefreshFailure:v.dispatch.authRefreshFailure};if(r)return{ok:!1,...C};console.log(JSON.stringify(C,null,2)),process.exit(1)}let E=v.result;if(l){let C=Ap(E),y=Ip(E),I={runId:n.id,agentOsId:o,dryRun:!0,wouldStart:E.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:E.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:E.diskGate,resourceGate:E.resourceGate,inspected:E.inspected,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,capacityIdle:C?.capacityIdle===!0,admissionExhaustion:C,dispatchSkipDrain:y};if(r)return{ok:!0,...I};console.log(JSON.stringify(I,null,2));return}let H=Qu(),M=[],oe=[],De=Number(E.inspected)||0;async function ge(C,y,I){let j=await na({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,released:j.released,releaseResponse:j.releaseResponse,...I}),!1}async function Ft(C){let y=C.task,I=String(y.id);if(p&&!m.has(I))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return ge(y,"land_pr task missing prUrl");try{let Me=await xp({prUrl:j,repo:Cp(j),cwd:n.repo}),jr=await Pp({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:Me});return jr.ok?(M.push({taskId:I,started:!0,landPr:!0,outcome:Me.outcome,completionStatus:jr.status}),!0):ge(y,`land_pr completion POST failed (HTTP ${jr.status})`,{landPr:!0,outcome:Me.outcome})}catch(Me){return ge(y,Me.message)}}async function he(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",I=await na({baseUrl:s,secret:i,agentOsId:o,taskId:String(C.id),leaseOwner:u,failureDetail:y});return M.push({taskId:C.id,started:!1,error:y,alreadyRunning:!0,nonFatal:!0,released:I.released,releaseResponse:I.releaseResponse}),!1}async function X(C){let y=C.task,I=WS(C),j=String(y.id);if(p&&!m.has(j))return ge(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let Me=HS(y.personaSlug);if(Me&&(!I?.personaInjectionReady||!I.personaMarkdown))return ge(y,`persona_injection_required: missing anchored context-envelope persona block for "${Me}"`);if(td(n.id,j))return he(y);let jr=Number(y.attempt)||1;if(jr>H.maxTaskAttempts)return ge(y,`task attempt ${jr} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let Fh=R(`t-${y.id}-a${y.attempt}`),Vr=Io({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Su(y)});try{let Bs=y.planId?String(y.planId):void 0,Yn=od({title:y.title?String(y.title):void 0,description:y.description?String(y.description):null,executorRef:y.executorRef?String(y.executorRef):null,prUrl:y.prUrl?String(y.prUrl):null,branch:y.branch?String(y.branch):null}),Jn=Vi(n,{name:Fh,task:FS(y,o),ownedPaths:e.owned?String(e.owned).split(",").map($h=>$h.trim()).filter(Boolean):[],model:Vr.model,provider:Vr.provider,routingRule:Vr.rule,requestedModel:Vr.requestedModel,agentOsId:o,taskId:String(y.id),planId:Bs,branch:Yn?.targetPrBranch??void 0,executorRef:y.executorRef?String(y.executorRef):void 0,parentTaskId:y.parentTaskId?String(y.parentTaskId):void 0,taskTitle:y.title?String(y.title):void 0,taskPrUrl:Yn?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:Yn?.targetPrUrl,repairTargetBranch:Yn?.targetPrBranch??void 0,instructionPolicyMarkdown:I?.instructionPolicyMarkdown??null,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyEvidence:I?.instructionPolicyEvidence??null,memoryQualityCapture:I?.memoryQualityCapture??null,memoryQualityPromptMarkdown:I?.memoryQualityPromptMarkdown??null,personaMarkdown:I?.personaMarkdown??null,personaSlug:I?.personaSlug??Me,personaEvidence:I?.personaEvidence??null,contextEnvelopeMarkdown:I?.contextEnvelopeMarkdown??null,contextEnvelopeEvidence:I?.contextEnvelopeEvidence??null,leaseOwner:u,leaseToken:y.leaseToken?String(y.leaseToken):void 0,dispatched:!0});return M.push({taskId:y.id,started:!0,worker:Jn.name,pid:Jn.pid,branch:Jn.branch,model:Jn.model,provider:Vr.provider,routingRule:Vr.rule,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(I?.instructionPolicyEvidence?.ruleSlugs)?I.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:I?.personaSlug??Me,personaOperatingRuleCount:I?.personaEvidence?.operatingRuleCount??null}),I?.instructionPolicyFingerprint&&console.error(`[dispatch] task ${j}: Lane A instruction policy injected fingerprint=${I.instructionPolicyFingerprint}`),I?.personaSlug&&console.error(`[dispatch] task ${j}: persona context injected slug=${I.personaSlug}`),I?.contextEnvelopeReady&&console.error(`[dispatch] task ${j}: context envelope injected anchor=${I.contextEnvelopeEvidence?.anchorTaskId??j}`),!0}catch(Bs){return ge(y,Bs.message)}}let D=new Set;async function se(C){let y=C.task,I=String(y.id);if(D.has(I))return ge(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=Ht(C)?await Ft(C):await X(C);return j||D.add(I),j}for(let C of E.started)await se(C);if(oe.push(...E.skipped??[]),p)for(let C of oe){let y=String(C.task.id);m.has(y)&&M.push({taskId:y,started:!1,error:`exact_target_not_started:${C.skipReason}`,skipReason:C.skipReason,detail:C.reason??null,requestedTargetTaskIds:[...m]})}for(;!p&&M.length<h;){let C=await P(1);if(!C.dispatch.ok||!C.result){M.push({started:!1,error:"dispatch_next request failed during top-up",httpStatus:C.dispatch.status,response:C.dispatch.response});break}De+=Number(C.result.inspected)||0,oe.push(...C.result.skipped??[]);let y=C.result.started??[];if(y.length===0)break;for(let I of y){if(M.length>=h)break;await se(I)}}let de=M.filter(C=>C.started).length,ke=Ap(E),ie=Ip(E),Gn=de===0&&(ke?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(Gn&&ke?.summary){let C=ke.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??ke.overAttemptIdleRecovery,I=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ie?`; dispatch_skip_drain scanned=${ie.scanned??0} advanced=${ie.advanced??0}`:"";console.error(`[dispatch] ${ke.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${I}${j}`)}let xl={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:de,capacityIdle:Gn,admissionExhaustion:ke,dispatchSkipDrain:ie,outcomes:M,skipped:oe.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:De,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},Pl=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(Pl),...xl};console.log(JSON.stringify(xl,null,2)),M.some(Pl)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}var KS=1;function Ct(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function jS(e){let{maxStarts:r,...t}=e;return t}async function ia(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=jS(e);if(t.targetTaskId||t.targetTaskIds){let u=await Ur({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:Ct(u)}}let n=Math.min(r,KS),o=Math.max(0,r-n),s=await Ur({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=Ct(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Ur({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=Ct(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function Op(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function VS(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function Pn(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function Np(e,r){let t=VS(r),n=Pn(t?.recommendedMaxStarts),o=Pn(t?.actionableReady),s=Pn(t?.queuedTasks),i=Pn(t?.boardAdvancedThisTick)??0,a=Pn(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:f,boardAdvancedThisTick:i,leaseReapedThisTick:a}}import Cw from"node:path";B();Zr();G();w();import GS from"node:path";var YS=new Set(["running","dispatching","pending","queued","needs_attention"]),er=new Set(["completed","failed","cancelled","done"]);function Br(e){let r=ve(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(GS.join(x(e.id),"workers",R(i),"worker.json"),void 0);if(!a)continue;let l=T(a,{base:e.base,baseCommit:e.baseCommit});if(l.alive&&!l.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),at(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function En(){let e=[];for(let r of ee()){if(!YS.has(r.status))continue;let t=Br(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ae(r),e.push({runId:r.id,from:n,to:t})}return e}B();Zr();G();w();rt();oo();import{existsSync as gr,lstatSync as ow,readdirSync as sw,readlinkSync as iw,renameSync as ga,rmSync as aw}from"node:fs";import je from"node:path";be();w();import Ne from"node:path";var JS=`${Ne.sep}runs${Ne.sep}runs${Ne.sep}`;function Xo(e){return e.includes(JS)}function aa(e,r){return Ne.join(Re(ne(e)),R(r))}function mr(e,r,t){return Ne.join(aa(e,r),"workers",R(t))}function Tp(e,r,t){let n=ne(e);return Ne.join(n,"runs","runs",R(r),"workers",R(t))}function la(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Lr(e){return{workerJsonPath:Ne.join(e,"worker.json"),stdoutPath:Ne.join(e,"stdout.jsonl"),stderrPath:Ne.join(e,"stderr.log"),heartbeatPath:Ne.join(e,"heartbeat.jsonl"),lastStatusPath:Ne.join(e,"last-status.json")}}function Dp(e){let r=Lr(mr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Xo(e.statusPath)?e.statusPath:r}import{existsSync as fr,mkdirSync as zS,readdirSync as Lp,renameSync as XS,statSync as ua}from"node:fs";import z from"node:path";O();eo();qe();import Mp from"node:path";function qS(e){return Mp.resolve(Jr(e.trim()))}function ca(e,r,t){let n=e?.trim();return n?{repo:qS(n),source:r,persistedInConfig:t}:null}function Ce(e={}){let r=e.env??process.env,t=e.config??b(),n=ca(t.defaultRepo,"config",!0);if(n)return n;let o=ca(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=ca(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=vr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function Up(e,r){let t={...r??b(),defaultRepo:pe(Mp.resolve(e))};return ze(t),t}function An(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}rt();be();B();w();var In=900*1e3,QS=3600*1e3;function Wp(e,r){let t=z.resolve(e),n=z.resolve(Re(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function da(e){if(!fr(e))return[];try{return Lp(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function pa(e){let r=z.join(e,"workers");if(!fr(r))return[];try{return Lp(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Hp(e){return z.join(e,"archived-workers")}function ZS(e,r){let t=z.join(Hp(e),R(r));return fr(t)?`${t}-${Date.now()}`:t}function Bp(e,r,t){if(!fr(e))return!1;try{let n=r-ua(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Fp(e,r=Date.now(),t=In){if(!fr(e))return!1;let n=Lr(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Bp(n.stdoutPath,r,t)||Bp(n.heartbeatPath,r,t))}function ew(e,r,t){let n=typeof r.completionReportedAt=="string"?Date.parse(r.completionReportedAt):NaN;if(Number.isFinite(n))return t-n;let o=(()=>{let s=r.completionResponse;if(!s||typeof s!="object")return NaN;let i=s.task;if(!i||typeof i!="object")return NaN;let a=i.updatedAt;return typeof a=="string"?Date.parse(a):NaN})();if(Number.isFinite(o))return t-o;try{return t-ua(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function rw(e,r,t,n){if(Fp(e,t))return{eligible:!1,reason:"worker has active/recent retention signals"};let o=typeof r.status=="string"?r.status:"";if(typeof r.completionBlocker=="string"&&r.completionBlocker.trim().length>0)return{eligible:!1,reason:"worker has completion blocker"};let i=typeof r.completionReportedAt=="string"||r.completionOutcome==="acknowledged";if(o!=="done"&&!i)return{eligible:!1,reason:`worker status is ${o||"unknown"}`};let a=ew(e,r,t);return!Number.isFinite(a)||a<n?{eligible:!1,reason:"terminal worker is still within archive grace window"}:{eligible:!0,reason:"terminal worker metadata archived"}}function _t(e,r=Date.now(),t=In){for(let n of pa(e))if(Fp(z.join(e,"workers",n),r,t))return!0;return!1}function tw(){return{repo:Ce()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function nw(e,r){let t=z.join(Re(e),R(r));if(!fr(t))return null;let n=pa(t);if(n.length===0)return null;let o;try{o=ua(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=mr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=_t(t);return{id:r,name:r,...tw(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ma(e){let r=ne(e??me()),t=Re(r),n=[];for(let o of da(t)){let s=z.join(t,o,"run.json");if(fr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=nw(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ae(i),n.push({runId:o,action:"repaired_run_json",reason:_t(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function fa(e,r={}){let t=ne(e??me()),n=Re(t),o=r.now??Date.now(),s=r.archiveAgeMs??QS,i=[];ma(t);for(let a of da(n)){let l=z.join(n,a),c=z.join(l,"run.json"),u=_(c,void 0);if(!u?.id)continue;let d=new Set([...Object.keys(u.workers||{}),...pa(l)]),f=!1;for(let m of d){let p=z.join(l,"workers",R(m)),g=z.join(p,"worker.json"),k=_(g,void 0);if(!k){let A=z.join(Hp(l),R(m));if(fr(A)&&(u.workers[R(m)]||u.workers[m])){delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:"removed stale live index entry for archived worker metadata",archivePath:A});continue}i.push({runId:u.id,worker:m,action:"skipped",reason:"worker.json missing"});continue}let h=rw(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=ZS(l,m);zS(z.dirname(S),{recursive:!0}),XS(p,S),delete u.workers[R(m)],delete u.workers[m],f=!0,i.push({runId:u.id,worker:m,action:"archived",reason:h.reason,archivePath:S})}f&&Ae(u)}return{workers:i}}function $p(e,r=Date.now()){let t=new Set,n=Re(e);for(let o of da(n)){let s=z.join(n,o);_t(s,r)&&t.add(`${e}\0${o}`)}return t}B();w();function lw(e,r){let t=aa(e,r),n;try{n=ow(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=je.resolve(je.dirname(t),iw(t));if(_t(o)||_t(t))return null;let s=`${t}.materialize-${Date.now()}`;return ga(o,s),aw(t),ga(s,t),o}function cw(e){let r=[];for(let t of la()){let n=je.join(e.fromDir,t),o=je.join(e.toDir,t);!gr(n)||gr(o)||(ga(n,o),r.push(t))}return r}function Kp(e,r){let t=Lr(r),n=!1;return e.workerDir!==r&&(e.workerDir=r,n=!0),e.stdoutPath!==t.stdoutPath&&(e.stdoutPath=t.stdoutPath,n=!0),e.stderrPath!==t.stderrPath&&(e.stderrPath=t.stderrPath,n=!0),e.heartbeatPath!==t.heartbeatPath&&(e.heartbeatPath=t.heartbeatPath,n=!0),n}function uw(e){let r=typeof e.lastStatus?.status=="string"?e.lastStatus.status:void 0,t=e.lastStatus?.attention&&typeof e.lastStatus.attention=="object"?e.lastStatus.attention.state:void 0;return r==="done"||t==="done"||e.stdoutFinalResult||e.heartbeatFinalResult?"done":r==="blocked"?"blocked":r==="running"?"exited":r??"exited"}function dw(e){let r=Lr(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=gr(r.stdoutPath),o=gr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?no(r.stdoutPath):{finalResult:null},a=o?Se(r.heartbeatPath):Se(""),l=et(a),c=uw({lastStatus:t,stdoutFinalResult:i.finalResult,heartbeatFinalResult:l}),u={name:e.workerName,runId:e.run.id,status:c,branch:typeof t?.branch=="string"?t.branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:typeof t?.worktreePath=="string"?t.worktreePath:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:e.canonicalDir,stdoutPath:r.stdoutPath,stderrPath:r.stderrPath,heartbeatPath:r.heartbeatPath,startedAt:typeof t?.startedAt=="string"?t.startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"synthesized worker.json from on-disk artifacts after metadata repair"};return typeof t?.taskId=="string"&&(u.taskId=t.taskId),typeof t?.agentOsId=="string"&&(u.agentOsId=t.agentOsId),typeof t?.planId=="string"&&(u.planId=t.planId),typeof t?.pid=="number"&&(u.pid=t.pid),(i.finalResult||l)&&(u.completionSnapshot={finalResult:i.finalResult??l??"completed",summary:a.lastHeartbeatSummary}),Kp(u,e.canonicalDir),u}function pw(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=mr(r,e.id,o),a=je.join(i,"worker.json");(Xo(s.workerDir)||Xo(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ae(e)),t}function mw(e){let r=[],t=mr(e.harnessRoot,e.run.id,e.workerName),n=Tp(e.harnessRoot,e.run.id,e.workerName),o=Lr(t),s=cw({fromDir:n,toDir:t});s.length>0&&r.push({runId:e.run.id,worker:e.workerName,action:"relocated_artifacts",reason:`moved ${s.join(", ")} from nested runs/runs layout`});let i=Dp({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&gr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=dw({run:e.run,workerName:e.workerName,canonicalDir:t,harnessRoot:e.harnessRoot});if(l)return V(e.run.id,l),r.push({runId:e.run.id,worker:e.workerName,action:"synthesized_worker_json",reason:l.reconcileReason??"synthesized from artifacts"}),r;let c=gr(t),u=la().some(d=>gr(je.join(t,d)));if(c&&!u){let d={name:e.workerName,runId:e.run.id,status:"exited",branch:`agent/${e.run.id}/${e.workerName}`,worktreePath:je.join(te().worktreesDir,e.run.id,e.workerName),workerDir:t,stdoutPath:o.stdoutPath,stderrPath:o.stderrPath,heartbeatPath:o.heartbeatPath,startedAt:e.run.createdAt,reconciledAt:new Date().toISOString(),reconcileReason:"empty worker dir \u2014 marked abandoned during metadata reconcile"};return V(e.run.id,d),r.push({runId:e.run.id,worker:e.workerName,action:"marked_abandoned",reason:d.reconcileReason??"empty worker dir"}),r}return r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker.json missing and no recoverable artifacts"}),r}return Kp(a,t)?(a.reconciledAt=new Date().toISOString(),a.reconcileReason=a.reconcileReason??"repaired nested runs/runs path fields",V(e.run.id,a),r.push({runId:e.run.id,worker:e.workerName,action:"repaired_worker_paths",reason:a.reconcileReason})):r.push({runId:e.run.id,worker:e.workerName,action:"skipped",reason:"worker metadata already canonical"}),r}function fw(e,r){let t=je.join(x(e.id),"workers");if(!gr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of sw(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function jp(){let{harnessRoot:e}=te(),r=ma(e),t=[];for(let n of ee()){let o=lw(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),pw(n,e)&&t.push({runId:n.id,worker:"*",action:"repaired_run_index",reason:"repaired nested runs/runs workerDir/statusPath entries in run.json"});let s=new Set(Object.keys(n.workers||{}));for(let i of fw(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:mr(e,n.id,i),statusPath:je.join(mr(e,n.id,i),"worker.json")}},Ae(n),t.push({runId:n.id,worker:i,action:"repaired_run_index",reason:"indexed orphan worker dir into run.json"});for(let i of s){let a=n.workers?.[i];t.push(...mw({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}rt();ao();G();B();Zr();w();import{execFileSync as Vp}from"node:child_process";import Gp from"node:path";function ha(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function gw(e){let r=ha(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function hw(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function kw(e){let r=new Set;for(let t of e.matchAll(/github\.com\/[^/\s)>"']+\/[^/\s)>"']+\/(?:pull|pulls)\/(\d+)/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bPR\s*#?\s*(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}for(let t of e.matchAll(/\bpr[-_]?(\d{2,})\b/gi)){let n=Number.parseInt(t[1],10);Number.isFinite(n)&&r.add(n)}return[...r]}function yw(e){let r=null;if(typeof e=="string"?r=ot(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!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=ha(String(s.prUrl??s.pr_url??"")),a=String(s.outcome??"").trim();!i||a!=="merged"||n.push({prUrl:i,mergeCommit:typeof s.mergeCommit=="string"?s.mergeCommit:typeof s.merge_commit=="string"?s.merge_commit:null,reason:typeof s.reason=="string"?s.reason:null})}return n}function Rw(e){try{let n=Vp("git",["config","--get","remote.origin.url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().match(/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/i)?.[1];if(!n)return null;let o=Vp("gh",["pr","view",String(e.prNumber),"--repo",n,"--json","state,mergedAt,mergeCommit,url"],{cwd:e.repoDir,encoding:"utf8",stdio:["ignore","pipe","ignore"]}),s=JSON.parse(o);return{prUrl:ha(s.url??`https://github.com/${n}/pull/${e.prNumber}`)??`https://github.com/${n}/pull/${e.prNumber}`,state:s.state??"",mergedAt:s.mergedAt??null,mergeCommit:s.mergeCommit?.oid??null}}catch{return null}}function bw(e){let r=Se(e.heartbeatPath);return e.completionSnapshot?.finalResult??et(r)}function vw(e){let r=new Map,t=x(e.id);for(let n of ve(e)){let o=_(Gp.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of yw(bw(o))){let i=gw(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function Sw(e,r){let t=Se(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,hw(r)].filter(Boolean).join(`
|
|
34
|
+
`);return kw(n)}function ww(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function ka(e={}){let r=e.lookupPr??Rw,t=[],n=new Map;for(let o of ee()){let s=vw(o),i=x(o.id);for(let a of ve(o)){let l=Gp.join(i,"workers",R(a),"worker.json"),c=_(l,void 0);if(!c||!ww(c))continue;let u=T(c,{base:o.base,baseCommit:o.baseCommit});if(u.attention.state!=="needs_attention")continue;let d=null;for(let m of Sw(c,u.finalResult)){if(d=s.get(m)??null,!d){let p=o.repo||c.worktreePath,g=`${p}#${m}`,k=n.has(g)?n.get(g)??null:r({repoDir:p,prNumber:m});n.has(g)||n.set(g,k),k&&(k.state==="MERGED"||k.mergedAt)&&(d={prUrl:k.prUrl,mergeCommit:k.mergeCommit??null,reason:"GitHub reports PR merged"})}if(d)break}if(!d){t.push({runId:o.id,worker:a,action:"skipped",reason:"no merged PR evidence"});continue}let f=new Date().toISOString();c.status="done",c.completionSnapshot={prUrl:d.prUrl,summary:`Local-only worker superseded by merged PR ${d.prUrl}`,finalResult:{summary:`Local-only repair/salvage worker superseded by merged PR ${d.prUrl}`,targetPrReconciliation:[{prUrl:d.prUrl,outcome:"merged",mergeCommit:d.mergeCommit??null,reason:d.reason??"PR already merged; local-only worker no longer requires attention"}]}},c.completionAckSource="local-pr-merged-reconcile",c.reconciledAt=f,c.reconcileReason="local-only needs_attention superseded by merged PR",V(o.id,c),t.push({runId:o.id,worker:a,action:"marked_done",reason:c.reconcileReason,prUrl:d.prUrl,mergeCommit:d.mergeCommit??null})}}return{workers:t}}var _w=900*1e3;function xw(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function On(){let e=jp();if(xw()){let s=ka(),i=fa();return{workers:[],finalizedRuns:En(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ee())for(let i of ve(s)){let a=Cw.join(x(s.id),"workers",R(i),"worker.json"),l=_(a,void 0);if(!l||l.status!=="running"){r.push({runId:s.id,worker:i,action:"skipped",reason:l?`worker status is ${l.status}`:"worker.json missing"});continue}let c=T(l,{base:s.base,baseCommit:s.baseCommit});if(c.finalResult){if(l.status==="running"){let u=c.attention.state==="blocked"?"blocked":c.attention.state==="done"||c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason="synced finished worker record after terminal stdout/heartbeat",V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:l.reconcileReason})}else r.push({runId:s.id,worker:i,action:"skipped",reason:"final result present"});continue}if(!c.alive){let u=c.attention.state==="blocked"?"blocked":c.status==="done"?"done":"exited";l.status=u,l.reconciledAt=new Date().toISOString(),l.reconcileReason=c.attention.reason,V(s.id,l),r.push({runId:s.id,worker:i,action:"marked_exited",reason:c.attention.reason});continue}if(c.attention.state==="stale"&&l.pid&&$(l.pid)){let u=c.lastHeartbeatAt?Date.parse(c.lastHeartbeatAt):NaN,d=c.lastActivityAt?Date.parse(c.lastActivityAt):NaN,f=!Number.isFinite(u)||t-u>_w,m=Number.isFinite(d)&&t-d>it;if(f&&m){$t(l.pid,"SIGTERM"),l.status="exited",l.reconciledAt=new Date().toISOString(),l.reconcileReason=`reconciled stale worker: ${c.attention.reason}`,V(s.id,l),r.push({runId:s.id,worker:i,action:"killed_stale",reason:c.attention.reason});continue}}r.push({runId:s.id,worker:i,action:"skipped",reason:c.attention.reason})}let n=ka(),o=fa();return{workers:r,finalizedRuns:En(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function Yp(){let e=On(),r=e.workers.filter(l=>l.action==="marked_exited").length,t=e.workers.filter(l=>l.action==="killed_stale").length,n=e.workers.filter(l=>l.action==="skipped").length,o=e.metadataReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),s=e.localPrAttentionReconcile.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),i=e.metadataReconcile.runMetadataRetention.runs.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{}),a=e.terminalWorkerArchive.workers.reduce((l,c)=>(l[c.action]=(l[c.action]??0)+1,l),{});console.log(JSON.stringify({ok:!0,workers:{markedExited:r,killedStale:t,skipped:n,total:e.workers.length},metadataReconcile:{totals:o,total:e.metadataReconcile.workers.length,runMetadataRetention:{totals:i,total:e.metadataReconcile.runMetadataRetention.runs.length}},localPrAttentionReconcile:{totals:s,total:e.localPrAttentionReconcile.workers.length},terminalWorkerArchive:{totals:a,total:e.terminalWorkerArchive.workers.length},finalizedRuns:e.finalizedRuns.length,details:{workers:e.workers,metadataReconcile:e.metadataReconcile.workers,localPrAttentionReconcile:e.localPrAttentionReconcile.workers,terminalWorkerArchive:e.terminalWorkerArchive.workers,runMetadataRetention:e.metadataReconcile.runMetadataRetention.runs,finalizedRuns:e.finalizedRuns}},null,2))}en();O();Ee();import Pw from"node:os";function Qo(e,r={}){let t=(r.boxKind??Be(b())).trim().toLowerCase()||"forge",n=r.hostLabel??Pw.hostname();return{boxId:r.boxId??No(t,n),boxKind:t,displayName:r.displayName??null,hostLabel:n,observedAt:r.observedAt??new Date().toISOString(),totalMemBytes:e.totalMemBytes,freeMemBytes:e.freeMemBytes,activeWorkers:e.activeWorkers,maxConcurrentWorkers:e.maxConcurrentWorkers,autoCap:e.autoCap,slotsAvailable:e.slotsAvailable,harnessRunId:r.harnessRunId??null,queuedTasks:r.queuedTasks??null,reason:e.reason,...r.prEvidence?.length?{prEvidence:r.prEvidence}:{}}}B();so();G();O();import Ew from"node:path";B();G();w();async function Nn(e){let r=e.pipeline===!0||e.pipeline==="true";try{let t=U(String(N(String(e.run||""),"--run"))),n=String(N(String(e.agentOsId||""),"--agent-os-id")),o=L(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Fe({runId:t.id}).runnerId,a=await zd({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=_(Ew.join(x(t.id),"workers",R(f),"worker.json"),void 0);if(!m||!m.dispatched||!m.taskId)continue;let p=T(m);if(p.alive||p.finalResult||m.completionReportedAt)continue;let g=Oo({runId:t.id,workerLeaseOwner:m.leaseOwner??null,runnerId:i}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(String(m.taskId))}/release`,h;try{h=await q(k,s,{agentOsId:n,leaseOwner:g},{agentOsId:n,baseUrl:o})}catch(S){h={ok:!1,error:S.message}}l.push({worker:f,taskId:m.taskId,pid:m.pid,released:h.ok===!0||h.response?.ok===!0,response:h.response??h})}let c=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/reap`,u;try{u=await q(c,s,{agentOsId:n,...Number(e.graceMs)>=0&&e.graceMs!==void 0&&e.graceMs!==!0?{graceMs:Math.floor(Number(e.graceMs))}:{}},{agentOsId:n,baseUrl:o})}catch(f){u={ok:!1,error:f.message}}let d={runId:t.id,agentOsId:n,snapshotPublished:a,releasedLocalOrphans:l,reap:u.response??u};if(r)return{ok:!0,...d};console.log(JSON.stringify(d,null,2))}catch(t){if(r)return{ok:!1,error:t.message};console.error(`run sweep failed: ${t.message}`),process.exit(1)}}w();G();B();w();import Aw from"node:path";O();async function Jp(e){let r=L(e.baseUrl),t=await K(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await q(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function qp(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=_(Aw.join(x(t.id),"workers",R(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=T(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await Jp({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,V(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}O();Ee();function Iw(e=process.env){let r=b();return Be(r,e)!=="forge"}function zp(e,r=process.env){if(Iw(r))return e?.maxConcurrentWorkers??void 0}async function Xp(e,r){let t=L(r.baseUrl?String(r.baseUrl):void 0),n=await K(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await Co(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}O();Ee();be();import Pe from"node:path";io();import rs from"node:path";ye();G();var ya=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Qp(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ya)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function _e(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!Qp(n)})}function Wr(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 Tn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?_e(e.changedFiles).length>0:!!(Wr(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function Dn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Ra(e,r){if(e.status)return _e(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Kt(e.worktreePath);return _e(t).length>0}function Ow(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function ba(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=Ow(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Kt(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Zn(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),u={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:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??Wr(s)};return e.status=u,u}return Dn(e)}G();G();rt();w();function va(e,r=Date.now(),t=In){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Zo(e,r=Date.now(),t=In){return $(e.pid)?!0:va(e,r,t)}function Nw(e,r){return r?r.runTerminalCache.derive(e.run):Br(e.run)}function rr(e,r=Date.now()){return Zo(e.worker,r)}function Sa(e,r){return er.has(e.run.status)?!1:Nw(e,r)!==null}function Zp(e,r,t=Date.now()){if(rr(e,t))return!0;if(er.has(e.run.status)||Sa(e,r))return!1;let n=Dn(e);return re(n)?!1:!!rr(e,t)}io();G();function em(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(rr(e))return!0;let n=r??Dn(e);return!!(!re(n)||Tn(n)||_e(n.changedFiles).length>0||nt({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:Wr(n.finalResult)}).blocked)}ye();w();import{existsSync as tm,mkdirSync as Tw,writeFileSync as rm}from"node:fs";import es from"node:path";function nm(e,r,t){return es.join(e,"salvage",R(r),R(t))}function om(e){return tm(es.join(nm(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function sm(e){let r=nm(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Tw(r,{recursive:!0});let t=es.join(r,"salvage.patch"),n=!1;if(tm(e.indexed.worktreePath)){let s=Q(e.indexed.worktreePath,["diff","HEAD"]),i=Q(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(l=>l.trim()).join(`
|
|
35
|
+
`);a.trim()&&(rm(t,a.endsWith(`
|
|
28
36
|
`)?a:`${a}
|
|
29
|
-
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return
|
|
30
|
-
`),o}var FS=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function $S(e){return!FS.has(e.skipReason)||er(e.indexed,e.now)?!1:Np({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Tp({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function KS(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?Ze.has(r.run.status)||e.liveness&&ua(r,e.liveness)||e.liveness&&re(la(r,e.liveness))&&!er(r)?o:n:t?o:n}function jS(e,r){if(e.harnessRoot?.trim())return Vo.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Vo.sep}runs${Vo.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Dp(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=KS(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(er(r,a))return"active_worker";let c=la(r,e.liveness),u=jS(e,r),d=p=>u&&$S({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(Ep(r,c)){let p=d("completion_blocked");if(p)return p}if(aa(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(Pp(r,e.liveness,a)||!re(c))return"run_still_active";if(Sn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(xe(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(rt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Wr(c.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function da(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(Vo.resolve(o))||r&&er(r)?"active_worker":r&&aa(r,e.gitStatusCache)?"dirty_worktree":null}function Mp(e){return da(e)}var Up=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Wp(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)Up.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Up.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Fp,readdirSync as $p,statSync as YS}from"node:fs";import Kp from"node:path";W();ve();import Lp from"node:path";w();function GS(e,r){return Ko(e,r)}function Bp(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Vn(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=x(Lp.join($t(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Lp.resolve(l.worktreePath);GS(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of hp(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Hp(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function JS(e,r){try{let t=YS(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function qS(e,r){let t=Kp.join(e,"runs",r,"run.json");return Fp(t)?x(t,null):null}function jp(e){try{return $p(e).length===0}catch{return!1}}function Vp(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Hp(n,r,t,i.liveRunKeys)||!jp(n))return"run_still_active";let a=qS(r,t);return a&&!Ze.has(a.status)&&!Mr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Gp(e){if(!Fp(e.worktreesDir))return[];let r=[],t;try{t=$p(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=Kp.join(e.worktreesDir,o);jp(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:JS(s,e.now)})}return r}ye();import{existsSync as ma,rmSync as nm}from"node:fs";import{execFileSync as zS}from"node:child_process";import{existsSync as Yp,readdirSync as XS,statSync as QS}from"node:fs";import ZS from"node:path";var ew=2500;function rw(e,r=ew){if(!Yp(e))return 0;try{let n=zS("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function rr(e,r=5e4){if(!Yp(e))return 0;let t=rw(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=XS(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=ZS.join(i,l),u;try{u=QS(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as sw,rmSync as iw}from"node:fs";ve();import{lstatSync as tw,readdirSync as nw}from"node:fs";function Jp(e){try{let r=tw(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function qp(e,r=32){let t=Jp(e);if(!t)return!1;if(t.foreign)return!0;try{let n=nw(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Jp(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as ow}from"node:child_process";import Qp from"node:path";import _e from"node:path";function zp(e,r,t,n){let o=_e.resolve(e),s=`${_e.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=_e.relative(t,i);if(a.startsWith("..")||_e.isAbsolute(a))return"path_outside_harness";let l=a.split(_e.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(_e.resolve(r))?"path_outside_harness":null}function Go(e,r,t){return zp(e,r,t,"node_modules")}function Yo(e,r,t){return zp(e,r,t,".next")}function Jo(e,r,t){let n=_e.resolve(e),o=_e.relative(t,n);return o.startsWith("..")||_e.isAbsolute(o)||o.split(_e.sep).length<3||!n.startsWith(_e.resolve(r))?"path_outside_harness":null}function Xp(e,r,t){let n=_e.resolve(e);return Go(n,r,t)===null||Yo(n,r,t)===null||Jo(n,r,t)===null}function em(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function Zp(e){let r=ow("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function rm(e,r,t){if(!Xp(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=Zp(["chown","-R",`${n}:${o}`,Qp.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Zp(["rm","-rf",Qp.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var pa="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or run `node scripts/reclaim-harness-root-owned-cache.mjs --execute` as the harness owner with sudo available. See docs/runbooks/harness-root-owned-cache-reclaim.md.";function aw(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function tm(e,r,t={}){if(!sw(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?ir(n):null,i=e.bytes??rr(e.path)??void 0,a=t.removePath??iw,l=t.hasForeignOwnedEntry??qp;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!aw(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=em();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${pa}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=rm(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${pa}`}}}function fa(e){let r=e.harnessRoot;return!r||!mp(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function ga(e,r){let t=fa(e);if(t)return t;let n=tm(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function om(e,r){return ga(e,r)}function sm(e,r){return ga(e,r)}function im(e,r){return ga(e,r)}function am(e,r){let t=fa(e);if(t)return t;if(!ma(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??rr(e.path);return nm(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function lm(e,r){let t=fa(e);if(t)return t;if(!ma(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??rr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),ma(e.path)&&nm(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as qo,readdirSync as zo,statSync as lw}from"node:fs";import je from"node:path";function ha(e,r){try{let t=lw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function um(e,r){let t=je.relative(r,e);return t===""||!t.startsWith("..")&&!je.isAbsolute(t)}function cm(e,r,t,n){let o=[];for(let s of ia){if(s===".next")continue;let i=je.join(e,s);if(!qo(i))continue;let a=je.resolve(i);t.has(a)||um(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:ha(a,r.now)}))}return o}function dm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...cm(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!qo(e.worktreesDir))return r;for(let n of zo(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=je.join(e.worktreesDir,n.name);for(let s of zo(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=je.join(o,s.name);r.push(...cm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function pm(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;qo(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:ha(a,e.now)})))}if(!t||!qo(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(je.resolve(i.worktreePath));for(let i of zo(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=je.join(e.worktreesDir,i.name),l;try{l=zo(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=je.resolve(je.join(a,c.name));o.has(u)||s.has(u)||um(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:ha(u,e.now)}))}}return n}import{existsSync as gm,readdirSync as mm,statSync as cw}from"node:fs";import St from"node:path";var uw=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function dw(e,r){try{let t=cw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pw(e,r){let t=St.relative(r,e);return t===""||!t.startsWith("..")&&!St.isAbsolute(t)}function mw(e,r,t,n,o,s){if(!gm(n))return;let i=St.resolve(n);r.has(i)||pw(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:dw(i,t.now)}))}function fm(e,r,t,n,o){for(let s of uw)mw(e,r,t,St.join(n,s.dirName),s.kind,o)}function hm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||fm(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!gm(e.worktreesDir))return r;for(let n of mm(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=St.join(e.worktreesDir,n.name),s;try{s=mm(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=St.join(o,i.name);fm(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as km,statSync as fw}from"node:fs";import Ve from"node:path";function gw(e,r){try{let t=fw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function hw(e){let r=[],t=null;for(let n of e.split(`
|
|
31
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function
|
|
32
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(
|
|
33
|
-
`).map(t=>t.trim()).filter(Boolean)}var Qo=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Tm(t)??[];return this.cache.set(t,o),o}};var Zo=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Mr(r);return this.cache.set(r.id,n),n}};function Dw(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Dm(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:Dw(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function Mw(e={}){let r=e.harnessRoot?ne(e.harnessRoot):me(),t=Om({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Uw(e){return typeof e=="string"?{reason:e}:e}function wt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function es(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:rr(e.path,t)}}function Mm(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function Ww(e,r){return e.kind==="remove_next_cache"?sm(e,r):om(e,r)}function Lw(e,r,t){return e.kind==="remove_next_cache"?Yo(e.path,r,t):Go(e.path,r,t)}function Bw(e){let r=new Map;for(let t of e)for(let[n,o]of vm(t))r.set(n,o);return r}function Um(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Sa(e={}){let r=Ra(e),t=Im();r=Nm(r,t);let n=Mw(e);Ne("scan",`${n.scanRoots.length} harness root(s)`);let o=Bp(n.scanRoots,n.now),s=r.finalizeStaleRuns?kn().map(b=>({runId:b.runId,from:b.from,to:b.to})):[];s.length>0&&Ne("finalize",`${s.length} stale run(s) marked terminal`),Ne("index","building worktree index");let i=Bw(n.scanRoots);Ne("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Zo,gitStatusCache:new Qo,gitRevCache:new Xo},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let b of n.scanRoots){if(f())break;Ne("root",b);let E=Pe.join(b,"worktrees"),H=Rm(i,b),M={harnessRoot:b,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},oe=r.scanDependencyCaches?hm(M):[];Ne("dependency",r.scanDependencyCaches?`${oe.length} cache candidate(s) at ${b}`:"skipped (worktree-only sweep)");let Te=0;for(let he of oe){if(f())break;Te+=1,Te%50===0&&Ne("dependency",`${Te}/${oe.length} evaluated`);let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=Lw(D,b,E);if(se){wt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=Um(D,E),ke=H.get(Pe.resolve(de))??null,ie=da({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){wt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Ww(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of dm(M)){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=Jo(D.path,b,E);if(se){wt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=Um(D,E),ke=H.get(Pe.resolve(de))??null,ie=Mp({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){wt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(im(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...pm(M),...ym(M)];Ne("worktrees",`${ge.length} candidate(s) at ${b}`);let Ut=new Set,Wt=0;for(let he of ge){if(f())break;Wt+=1,Wt%50===0&&Ne("worktrees",`${Wt}/${ge.length} evaluated`);let X=Pe.resolve(he.path);if(Ut.has(X))continue;Ut.add(X);let D={...he,path:X},se=H.get(Pe.resolve(D.path))??null,de=se?null:_m({worktreePath:D.path,harnessRoot:b,runId:D.runId,workerName:D.worker,now:n.now}),ke=Dp({indexed:se,worktreePath:Pe.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:de,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:b,writeSalvageEvidence:r.execute});if(ke){let{reason:ie,detail:Mn}=Uw(ke);wt(l,D.path,ie,Mn),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(lm(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of Gp({harnessRoot:b,worktreesDir:E,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=D.runId??Pe.basename(X),de=Vp({harnessRoot:b,runId:se,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(de){wt(l,D.path,de),c.push({...D,executed:!1,skipped:!0,skipReason:de});continue}c.push(am(es(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,S=0;for(let b of c)b.bytes&&(m+=b.bytes),!b.skipped&&!b.executed&&b.bytes&&(g+=b.bytes),b.executed?(h+=1,k+=b.bytes??0,b.kind==="remove_run_directory"&&(p+=1)):b.skipped&&(S+=1,b.skipReason==="dry_run"&&b.bytes&&(g+=b.bytes));let A=r.accountBytes?Em({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Ne("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let B=Wp(c,l),P=Dm({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:g,removedBytes:k,removedPaths:h,skippedPaths:S,skipReasons:Mm(c,l)},...A?{storage:A}:{},...B.length>0?{preservedLivePaths:B}:{},...p>0?{removedRunDirectories:p}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:g,removedBytes:k,removedPaths:h,skippedPaths:S,skipReasons:Mm(c,l)},...A?{storage:A}:{},...B.length>0?{preservedLivePaths:B}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function Wm(e){let r=Cm(e);return Sa({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Lm(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as Jw}from"node:fs/promises";import{homedir as qw}from"node:os";import Br from"node:path";Kn();import{existsSync as Bm,readFileSync as Hw}from"node:fs";import rs from"node:path";var Fm={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},$m=Object.keys(Fm),wa={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},Fw={"@kynver-app/runtime":"packages/kynver-runtime/package.json","@kynver-app/openclaw-agent-os":"packages/kynver-openclaw-agent-os/package.json","@kynver-app/mcp-agent-os":"packages/kynver-mcp-agent-os/package.json"};function Hm(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function ts(e,r){let t=Hm(e),n=Hm(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}function Km(e,r){return ts(e,r)>=0}function $w(e){let r=null;for(let t of e)(!r||ts(t,r)>0)&&(r=t);return r}function Kw(e){try{let r=JSON.parse(Hw(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function jw(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=rs.resolve(o);if(Bm(rs.join(s,"packages/kynver-runtime/package.json"))&&Bm(rs.join(s,"package.json")))return s}return Rr({cwd:e})?.repo??null}function jm(e={}){let r=e.cwd??process.cwd(),t=jw(r,e.repoRoot);if(!t)return{};let n={};for(let o of $m){let s=rs.join(t,Fw[o]),i=Kw(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function Vw(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function Gw(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&Km(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${Vw(r).join("; ")}.`),i.push("Do not publish npm packages or wait on an operator release."),i):(n?i.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):i.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&i.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&i.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),i)}function Yw(e){if(e.length===0)return{version:null,source:"unknown"};let r=$w(e.map(n=>n.version));if(!r)return{version:null,source:"unknown"};let t=e.find(n=>n.version===r)??e[0];return{version:t.version,source:t.source}}function Vm(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=$m.map(i=>{let a=Fm[i],l=[],c=r(e.installed?.[i],"installed"),u=r(e.repo?.[i],"repo"),d=r(e.self?.[i],"self");c&&l.push(c),u&&l.push(u),d&&l.push(d);let{version:f,source:m}=Yw(l),p=u?.version??null,g=f?Km(f,a):!1,k=g?[]:Gw({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${wa[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${wa[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:wa[i],minimumVersion:a,effectiveVersion:f,effectiveSource:m,ok:g,summary:h,remediation:k}}),n=t.filter(i=>!i.ok),o=n.length===0,s=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:o,summary:s,packages:t}}var Ca=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
34
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function
|
|
35
|
-
`).map(m=>m.trim()).filter(Boolean).slice(0,
|
|
36
|
-
`)){let i=s.match(
|
|
37
|
-
`))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function
|
|
38
|
-
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:IC.has(t)?{ok:!0,mutating:!1}:NC.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var MC=10*6e4,UC=5e3,ff=2e5;async function gf(e,r,t={}){let n=mf(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??MC,i=new Pt(r);return new Promise(a=>{let l=0,c=!1,u=DC(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=ff)return;let p=m.toString("utf8").slice(0,ff-l);l+=p.length,i.push(p)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),UC).unref()},s);u.on("error",m=>{clearTimeout(f),i.push(`spawn failed: ${m.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",m=>{clearTimeout(f),i.close(),a({exitCode:m,timedOut:c})})})}var LC=25e3,BC=32e3,HC=5e3,FC=6e4,hf=5*6e4,$C=5e3,KC="claude-sonnet-4-6";async function jC(e,r,t){let n=t.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n;if(!e)return null;let o=new AbortController,s=setTimeout(()=>o.abort(),$C);try{let i=await fetch(`${e.replace(/\/$/,"")}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${r}`},signal:o.signal});if(!i.ok)return null;let a=await i.json().catch(()=>null);return typeof a?.bridgeUrl=="string"&&a.bridgeUrl.trim()?a.bridgeUrl.trim():null}catch{return null}finally{clearTimeout(s)}}async function kf(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=Z();if(!t||!n)return null;let o=await jC(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:WC.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||KC,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function VC(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),BC),o=setInterval(()=>{r()&&t.abort()},500);try{let s=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:LC}),signal:t.signal});if(s.status===204)return null;if(s.status===401||s.status===403)return"auth_error";if(!s.ok)throw new Error(`claim failed: HTTP ${s.status}`);return(await s.json().catch(()=>null))?.turn??null}catch(s){if(r())return null;throw s}finally{clearTimeout(n),clearInterval(o)}}async function Hr(e,r,t){return(await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(r)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:t})})).ok}async function GC(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await gf(n,s=>{Hr(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await Hr(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await Hr(e,r.turnId,[{seq:t++,kind:"final",message:{exitCode:o.exitCode,timedOut:o.timedOut}}]).catch(()=>{}),console.error(JSON.stringify({event:"command_turn_done",turnId:r.turnId,argv:n.slice(0,4),exitCode:o.exitCode,timedOut:o.timedOut,refused:o.refused??null}))}async function YC(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||Hr(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Pt(s),a=df(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await Hr(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await pf({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await Hr(e,r.turnId,[{seq:t++,kind:"final",message:l}]),console.error(JSON.stringify({event:"chat_turn_done",turnId:r.turnId,model:e.model}))}catch(l){i.close(),n||await Hr(e,r.turnId,[{seq:t++,kind:"error",error:l instanceof Error?l.message:String(l)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",turnId:r.turnId,error:l instanceof Error?l.message:String(l)}))}}async function Ea(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function yf(e){let r=await kf();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Z()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:hf}));!r&&!e.shouldStop();){if(!Z()||!v().agentOsId?.trim()||(await Ea(hf,e.shouldStop),e.shouldStop()))return;r=await kf()}if(!(!r||e.shouldStop())){for(console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:r.bridgeUrl,agentOsId:r.agentOsId,boxId:r.boxId,model:r.model,useClaudeOauth:r.useClaudeOauth}));!e.shouldStop();)try{let t=await VC(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Ea(FC,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await GC(r,t):await YC(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Ea(HC,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var JC=6e4,qC=5*6e4,zC=10,XC=250;async function Aa(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(XC,t);await nr(n),t-=n}}async function ss(e){lt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):JC,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Rc(v());a.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:a.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:a.box.boxKind,workerCapSource:a.workerCapSource,maxConcurrentWorkers:a.maxConcurrentWorkers}));let l=ze(),c=yf({shouldStop:()=>s}).catch(d=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:d instanceof Error?d.message:String(d)}))}),u=!1;for(;!s;)try{Sc({agentOsId:t,runId:r});let d=await Ys(e.secret?String(e.secret):void 0,t);if(!d.ok){u||(u=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:d.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await Aa(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t})));let f=await Pa({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let p=po(r);if(p&&!p.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:p.holderBoxId}));else{let g=await ct({env:l,agentOsIdFilter:t});g.enabled&&(g.fired>0||g.errors>0||g.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...g}))}}f.idle?i++:i=0;let m=i>=zC?qC:o;await Aa(m,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await Aa(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}I();import{spawn as QC}from"node:child_process";w();var ZC=15*6e4,Rf=2*6e4,vf=1e4,ex=5e3,rx=5*6e4,tx=30*6e4,bf=5e3;function nx(e,r=process.env){let t=typeof e=="string"?Number.parseInt(e,10):NaN;if(Number.isFinite(t)&&t>0)return t;let n=Number.parseInt(r.KYNVER_DAEMON_STALL_MS??"",10);return Number.isFinite(n)&&n>0?n:ZC}function is(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function ox(e,r=ex,t=rx){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function sx(e,r,t=tx){return r-e>=t}function Fr(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function ix(e){let r=[];for(let t=0;t<e.length;t+=1){let n=e[t];if(!(n==="--supervised"||n==="--no-supervise"||n==="--keeper-child")){if(n==="--stall-ms"){t+1<e.length&&!e[t+1].startsWith("--")&&(t+=1);continue}n.startsWith("--stall-ms=")||n.startsWith("--supervised=")||r.push(n)}}return r.push("--keeper-child"),r}async function as(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=nx(e.stallMs),o=ix(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,Fr("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),Fr("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=QC(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),Fr("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await nr(bf),!(d||i));){if(Date.now()-u<Rf)continue;let k=wc(t),h=k&&k.pid===a.pid?k:null;if(h&&Cc(h,n)){Fr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await nr(vf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+Rf){Fr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await nr(vf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await nr(bf);if(i)break;let p=Date.now();sx(u,p)&&(l=0),l+=1;let g=ox(l);Fr("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await nr(g)}Fr("stopped",{agentOsId:t})}ye();W();import{existsSync as fx,mkdirSync as gx}from"node:fs";import hx from"node:path";W();Xr();import{existsSync as ax,readFileSync as lx}from"node:fs";import Sf from"node:path";G();w();function cx(e){if(!e||!ax(e))return 0;try{return lx(e,"utf8").trim().length}catch{return 0}}function ux(e,r){let t=Sf.join(_(e.id),"workers",R(r),"worker.json"),n=x(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=T(n,{base:e.base,baseCommit:e.baseCommit}),s=cx(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:st(o),completionBlocked:a}}function dx(e){return e.openWorkerCount>0?"active_workers":e.workers.some(r=>r.completionBlocked)?"completion_blocked":e.workers.some(r=>r.landingBlocked)?"landing_blocked":null}function px(e){let r={blocked:5,needs_attention:4,stale:3,done:2,ok:1},t="ok",n;for(let o of e){let s=o.attention;(r[s]??0)>=(r[t]??0)&&(t=s,n=o.attentionReason)}return{attention:t,attentionReason:n}}function mx(e){let r=0;for(let t of be(e)){let n=Sf.join(_(e.id),"workers",R(t),"worker.json"),o=x(n,void 0);if(!o)continue;let s=T(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function Oa(){return vn(),ee().map(e=>{let t=be(e).map(d=>ux(e,d)),n=t.filter(d=>d.missingHeartbeat).map(d=>d.worker),o=t.filter(d=>d.missingFinalResult).map(d=>d.worker),s=t.filter(d=>d.landingBlocked).map(d=>d.worker),i=t.filter(d=>d.completionBlocked).map(d=>d.worker),{attention:a,attentionReason:l}=px(t),c=mx(e),u=Gt(e.status,t.map(d=>({attention:d.attention,status:d.workerStatus})));return{id:e.id,name:e.name,status:e.status,effectiveStatus:u,repo:e.repo,createdAt:e.createdAt,openWorkerCount:c,attention:a,attentionReason:l,finalizeBlockedReason:dx({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function wf(){console.log(JSON.stringify(Oa(),null,2))}w();function kx(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ce();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function ls(e){let r=pd(kx(e));wl(r);let t=e.id?To(String(e.id)):yl(String(e.name||"run")),n=_(t);fx(n)&&yx(`run already exists: ${t}`),gx(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ce(r,["rev-parse",o]).trim(),i={id:t,name:String(e.name||t),repo:r,base:o,baseCommit:s,status:"created",createdAt:new Date().toISOString(),workers:{}};le(hx.join(n,"run.json"),i);let a={runId:t,runDir:n,repo:r,base:o,baseCommit:s};return console.log(JSON.stringify(a,null,2)),a}function Cf(){wf()}function yx(e){console.error(e),process.exit(1)}W();import{existsSync as ds}from"node:fs";async function cs(e=ze()){let r=await xr(e.storePath).catch(()=>[]),t=await uo(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=lo(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as wx}from"node:os";import Cx from"node:path";import{existsSync as xf,mkdirSync as Rx,readFileSync as _f,writeFileSync as vx}from"node:fs";import{homedir as bx}from"node:os";import Pf from"node:path";var fr=Pf.join(bx(),".kynver",".env");function Ia(e){let r=new Map;for(let t of e.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),r.set(s,i)}return r}function Sx(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
37
|
+
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return rm(es.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
38
|
+
`),o}var Dw=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Mw(e){return!Dw.has(e.skipReason)||rr(e.indexed,e.now)?!1:om({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(sm({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Uw(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?er.has(r.run.status)||e.liveness&&Sa(r,e.liveness)||e.liveness&&re(ba(r,e.liveness))&&!rr(r)?o:n:t?o:n}function Bw(e,r){if(e.harnessRoot?.trim())return rs.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${rs.sep}runs${rs.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function im(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=Uw(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(rr(r,a))return"active_worker";let c=ba(r,e.liveness),u=Bw(e,r),d=p=>u&&Mw({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(em(r,c)){let p=d("completion_blocked");if(p)return p}if(Ra(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(Zp(r,e.liveness,a)||!re(c))return"run_still_active";if(Tn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(_e(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(nt({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:Wr(c.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function wa(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(rs.resolve(o))||r&&rr(r)?"active_worker":r&&Ra(r,e.gitStatusCache)?"dirty_worktree":null}function am(e){return wa(e)}var lm=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function cm(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)lm.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||lm.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as mm,readdirSync as fm,statSync as Hw}from"node:fs";import gm from"node:path";B();be();import um from"node:path";w();function Ww(e,r){return Zo(e,r)}function dm(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of to(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(um.join(Gt(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=um.resolve(l.worktreePath);Ww(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of $p(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function pm(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function Fw(e,r){try{let t=Hw(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function $w(e,r){let t=gm.join(e,"runs",r,"run.json");return mm(t)?_(t,null):null}function hm(e){try{return fm(e).length===0}catch{return!1}}function km(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(pm(n,r,t,i.liveRunKeys)||!hm(n))return"run_still_active";let a=$w(r,t);return a&&!er.has(a.status)&&!Br(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ym(e){if(!mm(e.worktreesDir))return[];let r=[],t;try{t=fm(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=gm.join(e.worktreesDir,o);hm(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Fw(s,e.now)})}return r}ye();import{existsSync as _a,rmSync as Am}from"node:fs";import{execFileSync as Kw}from"node:child_process";import{existsSync as Rm,readdirSync as jw,statSync as Vw}from"node:fs";import Gw from"node:path";var Yw=2500;function Jw(e,r=Yw){if(!Rm(e))return 0;try{let n=Kw("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function tr(e,r=5e4){if(!Rm(e))return 0;let t=Jw(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=jw(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=Gw.join(i,l),u;try{u=Vw(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}import{existsSync as Qw,rmSync as Zw}from"node:fs";be();import{lstatSync as qw,readdirSync as zw}from"node:fs";function bm(e){try{let r=qw(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function vm(e,r=32){let t=bm(e);if(!t)return!1;if(t.foreign)return!0;try{let n=zw(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=bm(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Xw}from"node:child_process";import Cm from"node:path";import xe from"node:path";function Sm(e,r,t,n){let o=xe.resolve(e),s=`${xe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=xe.relative(t,i);if(a.startsWith("..")||xe.isAbsolute(a))return"path_outside_harness";let l=a.split(xe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(xe.resolve(r))?"path_outside_harness":null}function ts(e,r,t){return Sm(e,r,t,"node_modules")}function ns(e,r,t){return Sm(e,r,t,".next")}function os(e,r,t){let n=xe.resolve(e),o=xe.relative(t,n);return o.startsWith("..")||xe.isAbsolute(o)||o.split(xe.sep).length<3||!n.startsWith(xe.resolve(r))?"path_outside_harness":null}function wm(e,r,t){let n=xe.resolve(e);return ts(n,r,t)===null||ns(n,r,t)===null||os(n,r,t)===null}function xm(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function _m(e){let r=Xw("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Pm(e,r,t){if(!wm(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=_m(["chown","-R",`${n}:${o}`,Cm.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=_m(["rm","-rf",Cm.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var Ca="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or run `node scripts/reclaim-harness-root-owned-cache.mjs --execute` as the harness owner with sudo available. See docs/runbooks/harness-root-owned-cache-reclaim.md.";function eC(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Em(e,r,t={}){if(!Qw(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?ar(n):null,i=e.bytes??tr(e.path)??void 0,a=t.removePath??Zw,l=t.hasForeignOwnedEntry??vm;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!eC(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=xm();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Ca}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Pm(e.path,n,o);if(m.ok&&m.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(m.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${m.error}; ${Ca}`}}}function xa(e){let r=e.harnessRoot;return!r||!Wp(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Pa(e,r){let t=xa(e);if(t)return t;let n=Em(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Im(e,r){return Pa(e,r)}function Om(e,r){return Pa(e,r)}function Nm(e,r){return Pa(e,r)}function Tm(e,r){let t=xa(e);if(t)return t;if(!_a(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??tr(e.path);return Am(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function Dm(e,r){let t=xa(e);if(t)return t;if(!_a(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??tr(e.path);return n&&ce(n,["worktree","remove","--force",e.path],{allowFailure:!0}),_a(e.path)&&Am(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as ss,readdirSync as is,statSync as rC}from"node:fs";import Ve from"node:path";function Ea(e,r){try{let t=rC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Um(e,r){let t=Ve.relative(r,e);return t===""||!t.startsWith("..")&&!Ve.isAbsolute(t)}function Mm(e,r,t,n){let o=[];for(let s of ya){if(s===".next")continue;let i=Ve.join(e,s);if(!ss(i))continue;let a=Ve.resolve(i);t.has(a)||Um(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:Ea(a,r.now)}))}return o}function Bm(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Mm(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ss(e.worktreesDir))return r;for(let n of is(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Ve.join(e.worktreesDir,n.name);for(let s of is(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Ve.join(o,s.name);r.push(...Mm(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Lm(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;ss(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:Ea(a,e.now)})))}if(!t||!ss(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Ve.resolve(i.worktreePath));for(let i of is(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Ve.join(e.worktreesDir,i.name),l;try{l=is(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Ve.resolve(Ve.join(a,c.name));o.has(u)||s.has(u)||Um(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Ea(u,e.now)}))}}return n}import{existsSync as Fm,readdirSync as Wm,statSync as tC}from"node:fs";import xt from"node:path";var nC=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function oC(e,r){try{let t=tC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function sC(e,r){let t=xt.relative(r,e);return t===""||!t.startsWith("..")&&!xt.isAbsolute(t)}function iC(e,r,t,n,o,s){if(!Fm(n))return;let i=xt.resolve(n);r.has(i)||sC(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:oC(i,t.now)}))}function Hm(e,r,t,n,o){for(let s of nC)iC(e,r,t,xt.join(n,s.dirName),s.kind,o)}function $m(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Hm(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Fm(e.worktreesDir))return r;for(let n of Wm(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=xt.join(e.worktreesDir,n.name),s;try{s=Wm(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=xt.join(o,i.name);Hm(r,t,e,a,{runId:n.name,worker:i.name})}}return r}ye();import{existsSync as Km,statSync as aC}from"node:fs";import Ge from"node:path";function lC(e,r){try{let t=aC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function cC(e){let r=[],t=null;for(let n of e.split(`
|
|
39
|
+
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function uC(e,r){let t=Ge.relative(Ge.resolve(r),Ge.resolve(e));return t!==""&&!t.startsWith("..")&&!Ge.isAbsolute(t)}var dC=200;function jm(e){if(!e.includeOrphans||!Km(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(Ge.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(Ge.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=ce(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=cC(a);for(let c of l){if(i>=dC)break;let u=Ge.resolve(c.path);if(u===Ge.resolve(s)||!uC(u,e.worktreesDir)||t.has(u)||o.has(u)||!Km(u))continue;let f=Ge.relative(e.worktreesDir,u).split(Ge.sep),m=f[0],p=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:m,worker:p,repo:s,ageMs:lC(u,e.now)})}}return n}B();w();import Mn from"node:path";function Vm(e,r){let t=Mn.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Mn.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Gm(e){let r=new Map;for(let t of to(e))for(let n of Object.keys(t.workers||{})){let o=Mn.join(Gt(e,t.id),"workers",R(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(Mn.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Mn.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Un(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Hr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Oa(e={}){let r=e.execute===!0||e.execute!==!1&&Un("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Un("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Hr("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??Hr("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Hr("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Hr("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Hr("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||Un("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Un("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!Un("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=Hr("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,g=Hr("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(g)&&g>0?Math.floor(g):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:p,byteAccountingEntryCap:k}}function zm(e){let r=process.env.KYNVER_CLEANUP_SCOPE==="all",t=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=r?Number.isFinite(t)&&t>0?t:6048e5:Number.isFinite(t)&&t>0?t:0;return Oa({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}ye();import{existsSync as Xm}from"node:fs";import Na from"node:path";w();var pC=1800*1e3;function Qm(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??pC;if(!Xm(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Na.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(Na.join(c,"worker.json"),void 0);if(u&&va(u,r,t))return"active_worker"}let n=Na.join(e.worktreePath,".git");if(!Xm(n))return null;let o=Q(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
40
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(_e(s).length>0)return"dirty_worktree";let i=Q(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=Q(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}be();import{existsSync as mC,readdirSync as Zm,statSync as fC}from"node:fs";import gC from"node:path";function ef(e={}){let r=ne(e.harnessRoot??me()),t=ar(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!mC(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,l=null,c;try{c=Zm(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let u of c){if(!u.isDirectory())continue;i+=1;let d=gC.join(t,u.name);try{let f=fC(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of Zm(d,{withFileTypes:!0}))f.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let f=e.perRunEntryCap??5e4;if(f<=0)s=null;else{let m=tr(d,f);m===null?s=null:s+=m}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:l===null?null:new Date(l).toISOString(),scannedAt:o}}be();import{existsSync as hC}from"node:fs";import{homedir as kC}from"node:os";import rf from"node:path";var yC=["/var/tmp/kynver-harness",rf.join(kC(),".openclaw","harness")];function Ta(e,r,t){if(!t?.trim())return;let n=ne(t.trim());e.has(n)||(e.add(n),r.push(n))}function RC(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function tf(e={}){let r=new Set,t=[];Ta(r,t,e.harnessRoot??me());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Ta(r,t,o);if(RC(e))for(let o of yC){let s=rf.resolve(o);!r.has(s)&&hC(s)&&Ta(r,t,s)}return t}Vt();function bC(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function vC(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function nf(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=vC("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Le({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function of(e,r){if(!r.pressured)return e;let t=e.execute||!bC("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:t,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:r.diskGate}}function Te(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}ye();var as=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=Q(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as SC}from"node:child_process";import{existsSync as wC}from"node:fs";import CC from"node:path";var _C=5e3;function xC(e,r){if(!wC(CC.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=SC("git",r,{cwd:e,encoding:"utf8",timeout:_C}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function sf(e){let r=xC(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
41
|
+
`).map(t=>t.trim()).filter(Boolean)}var ls=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=sf(t)??[];return this.cache.set(t,o),o}};var cs=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Br(r);return this.cache.set(r.id,n),n}};function PC(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function af(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:PC(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function EC(e={}){let r=e.harnessRoot?ne(e.harnessRoot):me(),t=tf({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function AC(e){return typeof e=="string"?{reason:e}:e}function Pt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function us(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:tr(e.path,t)}}function lf(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function IC(e,r){return e.kind==="remove_next_cache"?Om(e,r):Im(e,r)}function OC(e,r,t){return e.kind==="remove_next_cache"?ns(e.path,r,t):ts(e.path,r,t)}function NC(e){let r=new Map;for(let t of e)for(let[n,o]of Gm(t))r.set(n,o);return r}function cf(e,r){return e.runId&&e.worker?Pe.join(r,e.runId,e.worker):Pe.resolve(e.path,"..")}function Da(e={}){let r=Oa(e),t=nf();r=of(r,t);let n=EC(e);Te("scan",`${n.scanRoots.length} harness root(s)`);let o=dm(n.scanRoots,n.now),s=r.finalizeStaleRuns?En().map(v=>({runId:v.runId,from:v.from,to:v.to})):[];s.length>0&&Te("finalize",`${s.length} stale run(s) marked terminal`),Te("index","building worktree index");let i=NC(n.scanRoots);Te("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new cs,gitStatusCache:new ls,gitRevCache:new as},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let v of n.scanRoots){if(f())break;Te("root",v);let E=Pe.join(v,"worktrees"),H=Vm(i,v),M={harnessRoot:v,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},oe=r.scanDependencyCaches?$m(M):[];Te("dependency",r.scanDependencyCaches?`${oe.length} cache candidate(s) at ${v}`:"skipped (worktree-only sweep)");let De=0;for(let he of oe){if(f())break;De+=1,De%50===0&&Te("dependency",`${De}/${oe.length} evaluated`);let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=OC(D,v,E);if(se){Pt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=cf(D,E),ke=H.get(Pe.resolve(de))??null,ie=wa({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Pt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(IC(us(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let he of Bm(M)){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=os(D.path,v,E);if(se){Pt(l,D.path,se),c.push({...D,executed:!1,skipped:!0,skipReason:se});continue}let de=cf(D,E),ke=H.get(Pe.resolve(de))??null,ie=am({indexed:ke,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:de,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ie){Pt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Nm(us(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let ge=[...Lm(M),...jm(M)];Te("worktrees",`${ge.length} candidate(s) at ${v}`);let Ht=new Set,Ft=0;for(let he of ge){if(f())break;Ft+=1,Ft%50===0&&Te("worktrees",`${Ft}/${ge.length} evaluated`);let X=Pe.resolve(he.path);if(Ht.has(X))continue;Ht.add(X);let D={...he,path:X},se=H.get(Pe.resolve(D.path))??null,de=se?null:Qm({worktreePath:D.path,harnessRoot:v,runId:D.runId,workerName:D.worker,now:n.now}),ke=im({indexed:se,worktreePath:Pe.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:de,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:v,writeSalvageEvidence:r.execute});if(ke){let{reason:ie,detail:Gn}=AC(ke);Pt(l,D.path,ie,Gn),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}c.push(Dm(us(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let he of ym({harnessRoot:v,worktreesDir:E,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Pe.resolve(he.path);if(u.has(X))continue;u.add(X);let D={...he,path:X},se=D.runId??Pe.basename(X),de=km({harnessRoot:v,runId:se,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(de){Pt(l,D.path,de),c.push({...D,executed:!1,skipped:!0,skipReason:de});continue}c.push(Tm(us(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let m=0,p=0,g=0,k=0,h=0,S=0;for(let v of c)v.bytes&&(m+=v.bytes),!v.skipped&&!v.executed&&v.bytes&&(g+=v.bytes),v.executed?(h+=1,k+=v.bytes??0,v.kind==="remove_run_directory"&&(p+=1)):v.skipped&&(S+=1,v.skipReason==="dry_run"&&v.bytes&&(g+=v.bytes));let A=r.accountBytes?ef({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Te("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let W=cm(c,l),P=af({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:g,removedBytes:k,removedPaths:h,skippedPaths:S,skipReasons:lf(c,l)},...A?{storage:A}:{},...W.length>0?{preservedLivePaths:W}:{},...p>0?{removedRunDirectories:p}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:m,reclaimableBytes:g,removedBytes:k,removedPaths:h,skippedPaths:S,skipReasons:lf(c,l)},...A?{storage:A}:{},...W.length>0?{preservedLivePaths:W}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function uf(e){let r=zm(e);return Da({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function df(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}import{readFile as FC}from"node:fs/promises";import{homedir as $C}from"node:os";import Fr from"node:path";eo();import{existsSync as pf,readFileSync as TC}from"node:fs";import ds from"node:path";var ff={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},gf=Object.keys(ff),Ma={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},DC={"@kynver-app/runtime":"packages/kynver-runtime/package.json","@kynver-app/openclaw-agent-os":"packages/kynver-openclaw-agent-os/package.json","@kynver-app/mcp-agent-os":"packages/kynver-mcp-agent-os/package.json"};function mf(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function ps(e,r){let t=mf(e),n=mf(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}function hf(e,r){return ps(e,r)>=0}function MC(e){let r=null;for(let t of e)(!r||ps(t,r)>0)&&(r=t);return r}function UC(e){try{let r=JSON.parse(TC(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function BC(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=ds.resolve(o);if(pf(ds.join(s,"packages/kynver-runtime/package.json"))&&pf(ds.join(s,"package.json")))return s}return vr({cwd:e})?.repo??null}function kf(e={}){let r=e.cwd??process.cwd(),t=BC(r,e.repoRoot);if(!t)return{};let n={};for(let o of gf){let s=ds.join(t,DC[o]),i=UC(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function LC(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function WC(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&hf(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${LC(r).join("; ")}.`),i.push("Do not publish npm packages or wait on an operator release."),i):(n?i.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):i.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&i.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&s&&i.push(`Repo checkout reports ${s}; rebuild/link repo source if you develop from the monorepo.`),i)}function HC(e){if(e.length===0)return{version:null,source:"unknown"};let r=MC(e.map(n=>n.version));if(!r)return{version:null,source:"unknown"};let t=e.find(n=>n.version===r)??e[0];return{version:t.version,source:t.source}}function yf(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=gf.map(i=>{let a=ff[i],l=[],c=r(e.installed?.[i],"installed"),u=r(e.repo?.[i],"repo"),d=r(e.self?.[i],"self");c&&l.push(c),u&&l.push(u),d&&l.push(d);let{version:f,source:m}=HC(l),p=u?.version??null,g=f?hf(f,a):!1,k=g?[]:WC({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${Ma[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${Ma[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:Ma[i],minimumVersion:a,effectiveVersion:f,effectiveSource:m,ok:g,summary:h,remediation:k}}),n=t.filter(i=>!i.ok),o=n.length===0,s=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(i=>`${i.packageName} < ${i.minimumVersion}`).join("; ")}.`;return{ok:o,summary:s,packages:t}}var Ua=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
42
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Rf(e={}){let r=yf(e);if(!r.ok)throw new Ua(r);return r}var KC=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function Et(e){let r=e?.trim();return r||null}function jC(e){return[...new Set(e.filter(r=>!!r))]}function VC(){let e=$C(),r=Et(process.env.KYNVER_OPENCLAW_NPM_ROOT)??Et(process.env.OPENCLAW_NPM_ROOT)??Fr.join(e,".openclaw","npm"),t=Et(process.env.KYNVER_NPM_GLOBAL_ROOT)??Et(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(Et(process.env.NPM_CONFIG_PREFIX)?Fr.join(Et(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Fr.join(e,".npm-global","lib","node_modules"));return jC([Fr.join(r,"lib","node_modules"),Fr.join(r,"node_modules"),t.endsWith("node_modules")?t:Fr.join(t,"lib","node_modules")])}async function GC(e){try{let r=JSON.parse(await FC(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function YC(e){let r=VC(),t=new Set,n=[];for(let o of r){let s=Fr.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function ms(e=new Date().toISOString()){let r={};for(let t of KC){let n=null;for(let o of YC(t)){let s=await GC(o);s&&(!n||ps(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{spawnSync as JC}from"node:child_process";var qC=1e4,zC=4*1024*1024,bf=(e,r,t)=>{try{let n=JC(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??qC,maxBuffer:zC});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function At(e,r,t){let n=e(r,t);if(!n.ok||!n.stdout.trim())return null;try{return JSON.parse(n.stdout)}catch{return null}}function vf(e,r,t){return`${e} ${r} ${t}`}function Bn(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function Sf(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var XC=8e3,QC=30,ZC=100,e_=400;function Ba(e){return process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function It(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function r_(e){return Array.isArray(e)?e.map(r=>It(r)).filter(r=>r!==null).slice(0,QC).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function wf(e,r,t){let n=At(e,"gh",["api",`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:r_(n.statuses)}:null}var Cf={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:Ba,collect(e,r){let t=Sf(e);if(!t)return null;let n=At(r,"gh",["api",`repos/${t.repo}/pulls/${t.number}`]);if(!n)return null;let o=It(n.head),s=typeof o?.sha=="string"?o.sha:null,i=It(n.user),a=It(It(o?.repo)?.owner),l=typeof n.body=="string"?n.body.slice(0,XC):null,c=[],u={state:null,statuses:[]};if(s){let m=At(r,"gh",["api",`repos/${t.repo}/commits/${s}/check-runs?per_page=100`]);Array.isArray(m?.check_runs)&&(c=m.check_runs.map(p=>It(p)).filter(p=>p!==null).slice(0,ZC).map(p=>({name:p.name??null,status:p.status??null,conclusion:p.conclusion??null}))),u=wf(r,t.repo,s)??u}let d=r("gh",["api","--paginate",`repos/${t.repo}/pulls/${t.number}/files?per_page=100`,"--jq",".[].filename"]),f=d.ok?d.stdout.split(`
|
|
43
|
+
`).map(m=>m.trim()).filter(Boolean).slice(0,e_):[];return{pull:{html_url:n.html_url??null,title:n.title??null,body:l,user:{login:i?.login??null},state:n.state??null,draft:n.draft??null,merged:n.merged??null,merged_at:n.merged_at??null,merge_commit_sha:n.merge_commit_sha??null,mergeable:n.mergeable??null,mergeable_state:n.mergeable_state??null,head:{sha:s,ref:o?.ref??null,repo:{owner:{login:a?.login??null}}}},checkRuns:c,combinedStatus:u,changedFiles:f}}},_f={provider:"github",kind:"commit_status",version:"1",isAvailable:Ba,collect(e,r){let t=Bn(e);return t?wf(r,t.repo,t.sha):null}},xf={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Ba,collect(e,r){let t=Bn(e);if(!t)return null;let n=At(r,"gh",["api",`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=At(r,"gh",["api",`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var t_=5,n_=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,o_=/https:\/\/[^\s]+/,Pf={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=Bn(e);if(!t)return null;let n=r("vercel",["list","--prod","--meta",`githubCommitSha=${t.sha}`]);if(!n.ok)return null;let o=[];for(let s of n.stdout.split(`
|
|
44
|
+
`)){let i=s.match(o_)?.[0];if(!i)continue;let a=s.match(n_)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=t_)break}return{found:o.length>0,deployments:o}}};var La=[];function fs(e){La.some(r=>r.provider===e.provider&&r.kind===e.kind)||La.push(e)}function Ef(e,r){return La.find(t=>t.provider===e&&t.kind===r)??null}function Af(){fs(Cf),fs(_f),fs(xf),fs(Pf)}var s_=8,i_=25e3;function If(e,r={}){Af();let t=r.run??bf,n=r.now??(()=>new Date),o=r.maxSubjects??s_,s=Date.now()+(r.deadlineMs??i_),i=new Set,a=e.filter(m=>{let p=vf(m.provider,m.kind,m.subject);return i.has(p)?!1:(i.add(p),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((m,p)=>a[(l+p)%a.length]).slice(0,o),d={attempted:0,collected:0,items:[],skipped:[]},f=new Map;for(let m of u){if(Date.now()>s){d.skipped.push({...m,reason:"budget_exhausted"});continue}let p=Ef(m.provider,m.kind);if(!p){d.skipped.push({...m,reason:"no_recipe"});continue}let g=`${p.provider} ${p.kind}`,k=f.get(g);if(k===void 0&&(k=p.isAvailable(t),f.set(g,k)),!k){d.skipped.push({...m,reason:"provider_unavailable"});continue}d.attempted+=1;let h=p.collect(m.subject,t);if(h==null){d.skipped.push({...m,reason:"collect_failed"});continue}d.collected+=1,d.items.push({provider:m.provider,kind:m.kind,subject:m.subject,payload:h,observedAt:n().toISOString(),collectorVersion:p.version})}return d}B();w();import a_ from"node:path";var l_="provider-evidence-wanted.json";function Of(e){return a_.join(x(e),l_)}function Nf(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Tf(e){let r=_(Of(e),null);return Nf(r?.wanted)}function Df(e,r){le(Of(e),{savedAt:new Date().toISOString(),wanted:r})}function Mf(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Nf(r):null}async function u_(e,r){let t=U(e),n=[];for(let o of Object.keys(t.workers||{})){let s=_(c_.join(x(t.id),"workers",R(o),"worker.json"),void 0);if(!s?.taskId||s.localOnly)continue;if(Tr(s)){n.push({worker:o,ok:!0,taskId:s.taskId??null,skipped:!0});continue}let i=T(s);if(!re(i))continue;let a=tt({alive:i.alive,finalResult:i.finalResult,changedFiles:i.changedFiles,gitAncestry:i.gitAncestry});if(!s.dispatched&&!i.finalResult&&!a?.salvageable)continue;let l=await bn({run:e,name:o,agentOsId:String(r.agentOsId||s.agentOsId||""),...r});n.push({worker:o,ok:l.ok,taskId:s.taskId??null})}return n}async function d_(e,r,t,n,o){let s=L(n.baseUrl?String(n.baseUrl):void 0),i=await K(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await ms(),c=wo(r),u=null;try{let g=Tf(r);u=g.length>0?If(g):null}catch{u=null}let d=So(r),f=await Er(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Dr(r),resourceGate:t,boxResourceSnapshot:Qo(t,{harnessRunId:r,boxKind:Be(b())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:Fe({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=Mf(f.response);if(m)try{Df(r,m)}catch{}let p=mu(f);if(p)try{pu(r,p)}catch{}return{ok:f.ok,httpStatus:f.status,response:f.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Wa(e){let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";vn({run:r});let o=await Xp(t,e),s=zp(o),i=wr({runId:r,configuredMaxWorkersOverride:s}),a=df()?uf(r):void 0,l=await d_(t,r,i,e,a),c=Ud(r,l),u=await To(r,e),d=await u_(r,e),f=wr({runId:r,configuredMaxWorkersOverride:s}),m=On(),p=await qp(r,e),g=Np(f,l),k=g.maxStarts,h=await Nn({run:r,agentOsId:t,pipeline:!0,...e}),S=null,A=0,W=Op(l),P=k;if(n&&P>0&&W.length>0){let E=Math.min(P,W.length),H=await ia({...e,run:r,agentOsId:t,targetTaskIds:W.join(",")},E),M=Ct(H);A+=M,P=Math.max(0,P-M),S={exactTargetTaskIds:W,exact:H,startedCount:A}}if(n&&P>0){let E=await ia({...e,run:r,agentOsId:t},P),H=Ct(E);A+=H,S=S&&typeof S=="object"?{...S,broad:E,startedCount:A}:E}else!n||k<=0?S||(S={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:g,...W.length?{exactTargetTaskIds:W,exactOnly:!0}:{}}):S&&typeof S=="object"&&(S={...S,broadSkipped:!0,startedCount:A});let v=!g.underutilized&&k===0&&d.length===0&&A===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:m,harnessCleanup:a,planProgressSync:p,completionAckSync:c,operatorTick:l,sweep:h,dispatchAdvice:g,dispatch:S,idle:v}}O();import I_ from"node:os";import{readFileSync as p_}from"node:fs";import{homedir as m_,platform as f_}from"node:os";import g_ from"node:path";import{execFileSync as h_}from"node:child_process";function Uf(e,r=Date.now()){try{let t=JSON.parse(e),n=t.claudeAiOauth?.accessToken,o=t.claudeAiOauth?.expiresAt;return typeof n!="string"||!n||typeof o=="number"&&o-r<6e4?null:n}catch{return null}}function k_(){if(f_()==="darwin")try{let e=h_("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Uf(e.trim())}catch{return null}try{let e=p_(g_.join(m_(),".claude",".credentials.json"),"utf8");return Uf(e)}catch{return null}}function Bf(e=process.env,r={}){let t=e.ANTHROPIC_API_KEY?.trim();if(t)return{kind:"api_key",key:t};let n=e.KYNVER_CHAT_USE_CLAUDE_OAUTH;if(r.oauthOptIn===!0||n==="1"||n==="true"||n==="yes"){let s=k_();if(s)return{kind:"oauth",token:s}}return null}var y_="You are Claude Code, Anthropic's official CLI for Claude.";function R_(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function b_(e,r){let t=r;switch(t.type){case"message_start":return e.inputTokens=t.message?.usage?.input_tokens??0,"";case"content_block_start":{let n=t.index??e.blocks.length;return e.blocks[n]={type:t.content_block?.type==="tool_use"?"tool_use":"text",text:"",id:t.content_block?.id,name:t.content_block?.name,inputJson:""},""}case"content_block_delta":{let n=e.blocks[t.index??e.blocks.length-1];return n?t.delta?.type==="text_delta"&&t.delta.text?(n.text+=t.delta.text,t.delta.text):(t.delta?.type==="input_json_delta"&&t.delta.partial_json&&(n.inputJson+=t.delta.partial_json),""):""}case"message_delta":return t.delta?.stop_reason&&(e.stopReason=t.delta.stop_reason),typeof t.usage?.output_tokens=="number"&&(e.outputTokens=t.usage.output_tokens),"";default:return""}}function v_(e){let r=[];for(let t of e.blocks)if(t)if(t.type==="tool_use"){let n={};try{n=t.inputJson?JSON.parse(t.inputJson):{}}catch{n={}}r.push({type:"tool_use",id:t.id??"",name:t.name??"",input:n})}else t.text&&r.push({type:"text",text:t.text});return{content:r,stop_reason:e.stopReason??"end_turn",usage:{input_tokens:e.inputTokens,output_tokens:e.outputTokens}}}async function*S_(e){let r=e.getReader(),t=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await r.read();if(o)break;n+=t.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
|
|
45
|
+
`))!==-1;){let a=n.slice(0,i).trim();if(n=n.slice(i+1),!a.startsWith("data:"))continue;let l=a.slice(5).trim();if(!(!l||l==="[DONE]"))try{yield JSON.parse(l)}catch{}}}}finally{r.releaseLock()}}function w_(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function Lf(e){let{creds:r,model:t,payload:n}=e,o={"Content-Type":"application/json","anthropic-version":"2023-06-01"},s=n.system;r.kind==="api_key"?o["x-api-key"]=r.key:(o.Authorization=`Bearer ${r.token}`,o["anthropic-beta"]="oauth-2025-04-20",s=[{type:"text",text:y_},{type:"text",text:n.system}]);let i=await fetch(`${w_()}/v1/messages`,{method:"POST",headers:o,signal:e.signal,body:JSON.stringify({model:t,max_tokens:n.maxTokens,system:s,messages:n.messages,...Array.isArray(n.tools)&&n.tools.length>0?{tools:n.tools}:{},...n.temperature!==void 0?{temperature:n.temperature}:{},stream:!0})});if(!i.ok||!i.body){let l=await i.text().catch(()=>"");throw new Error(`Anthropic stream failed: HTTP ${i.status}${l?` \u2014 ${l.slice(0,300)}`:""}`)}let a=R_();for await(let l of S_(i.body)){let c=b_(a,l);c&&e.onDelta(c)}return v_(a)}var Ot=class{constructor(r,t=150){this.flushFn=r;this.floorMs=t}buffer="";timer=null;closed=!1;push(r){this.closed||!r||(this.buffer+=r,this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.flushNow()},this.floorMs)))}flushNow(){if(!this.buffer)return;let r=this.buffer;this.buffer="",this.flushFn(r)}close(){this.closed||(this.closed=!0,this.timer&&(clearTimeout(this.timer),this.timer=null),this.flushNow())}};import{spawn as P_}from"node:child_process";var C_=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),__=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),x_=["--secret","--api-key","--keeper-child"];function Wf(e){if(!Array.isArray(e)||e.length===0||e.some(n=>typeof n!="string"))return{ok:!1,mutating:!1,reason:"argv must be a non-empty string array"};for(let n of e){if(x_.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
46
|
+
`)||n.includes("\0"))return{ok:!1,mutating:!1,reason:"control characters refused"}}let r=e[0],t=e.length>1&&!e[1].startsWith("--")?`${r} ${e[1]}`:r;return t==="doctor runtime-takeover"?e.includes("--remediate-default-repo")?{ok:!0,mutating:!0}:{ok:!0,mutating:!1}:r==="cleanup"?{ok:!0,mutating:e.includes("--execute")}:C_.has(t)?{ok:!0,mutating:!1}:__.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var E_=10*6e4,A_=5e3,Hf=2e5;async function Ff(e,r,t={}){let n=Wf(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??E_,i=new Ot(r);return new Promise(a=>{let l=0,c=!1,u=P_(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=Hf)return;let p=m.toString("utf8").slice(0,Hf-l);l+=p.length,i.push(p)};u.stdout?.on("data",d),u.stderr?.on("data",d);let f=setTimeout(()=>{c=!0,u.kill("SIGTERM"),setTimeout(()=>u.kill("SIGKILL"),A_).unref()},s);u.on("error",m=>{clearTimeout(f),i.push(`spawn failed: ${m.message}`),i.close(),a({exitCode:null,timedOut:!1,refused:void 0})}),u.on("close",m=>{clearTimeout(f),i.close(),a({exitCode:m,timedOut:c})})})}var O_=25e3,N_=32e3,T_=5e3,D_=6e4,$f=5*6e4,M_=5e3,U_="claude-sonnet-4-6";async function B_(e,r,t){let n=t.KYNVER_RUNTIME_CHAT_BRIDGE_URL?.trim();if(n)return n;if(!e)return null;let o=new AbortController,s=setTimeout(()=>o.abort(),M_);try{let i=await fetch(`${e.replace(/\/$/,"")}/api/runtime/chat-bridge`,{headers:{Authorization:`Bearer ${r}`},signal:o.signal});if(!i.ok)return null;let a=await i.json().catch(()=>null);return typeof a?.bridgeUrl=="string"&&a.bridgeUrl.trim()?a.bridgeUrl.trim():null}catch{return null}finally{clearTimeout(s)}}async function Kf(e=process.env){let r=b(),t=r.agentOsId?.trim(),n=Z();if(!t||!n)return null;let o=await B_(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:I_.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||U_,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function L_(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),N_),o=setInterval(()=>{r()&&t.abort()},500);try{let s=await fetch(`${e.bridgeUrl}/runtime-chat/claim`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,boxId:e.boxId,waitMs:O_}),signal:t.signal});if(s.status===204)return null;if(s.status===401||s.status===403)return"auth_error";if(!s.ok)throw new Error(`claim failed: HTTP ${s.status}`);return(await s.json().catch(()=>null))?.turn??null}catch(s){if(r())return null;throw s}finally{clearTimeout(n),clearInterval(o)}}async function $r(e,r,t){return(await fetch(`${e.bridgeUrl}/runtime-chat/turns/${encodeURIComponent(r)}/events`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},body:JSON.stringify({agentOsId:e.agentOsId,events:t})})).ok}async function W_(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Ff(n,s=>{$r(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await $r(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await $r(e,r.turnId,[{seq:t++,kind:"final",message:{exitCode:o.exitCode,timedOut:o.timedOut}}]).catch(()=>{}),console.error(JSON.stringify({event:"command_turn_done",turnId:r.turnId,argv:n.slice(0,4),exitCode:o.exitCode,timedOut:o.timedOut,refused:o.refused??null}))}async function H_(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||$r(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new Ot(s),a=Bf(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await $r(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Lf({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await $r(e,r.turnId,[{seq:t++,kind:"final",message:l}]),console.error(JSON.stringify({event:"chat_turn_done",turnId:r.turnId,model:e.model}))}catch(l){i.close(),n||await $r(e,r.turnId,[{seq:t++,kind:"error",error:l instanceof Error?l.message:String(l)}]).catch(()=>{}),console.error(JSON.stringify({event:"chat_turn_error",turnId:r.turnId,error:l instanceof Error?l.message:String(l)}))}}async function Ha(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function jf(e){let r=await Kf();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!Z()||!b().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:$f}));!r&&!e.shouldStop();){if(!Z()||!b().agentOsId?.trim()||(await Ha($f,e.shouldStop),e.shouldStop()))return;r=await Kf()}if(!(!r||e.shouldStop())){for(console.error(JSON.stringify({event:"chat_claim_loop_start",bridgeUrl:r.bridgeUrl,agentOsId:r.agentOsId,boxId:r.boxId,model:r.model,useClaudeOauth:r.useClaudeOauth}));!e.shouldStop();)try{let t=await L_(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Ha(D_,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await W_(r,t):await H_(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Ha(T_,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var F_=6e4,$_=5*6e4,K_=10,j_=250;async function Fa(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(j_,t);await or(n),t-=n}}async function gs(e){pt();let r=String(N(String(e.run||""),"--run")),t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false",o=Number(e.intervalMs)>0?Math.floor(Number(e.intervalMs)):F_,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=jc(b());a.ok||(console.error(JSON.stringify({event:"daemon_start_blocked",runId:r,agentOsId:t,errors:a.errors})),process.exit(1)),console.error(JSON.stringify({event:"daemon_start",runId:r,agentOsId:t,execute:n,intervalMs:o,boxKind:a.box.boxKind,workerCapSource:a.workerCapSource,maxConcurrentWorkers:a.maxConcurrentWorkers}));let l=Qe(),c=jf({shouldStop:()=>s}).catch(d=>{console.error(JSON.stringify({event:"chat_claim_loop_crashed",error:d instanceof Error?d.message:String(d)}))}),u=!1;for(;!s;)try{Yc({agentOsId:t,runId:r,instructionBundleVersion:an()});let d=await ni(e.secret?String(e.secret):void 0,t);if(!d.ok){u||(u=!0,console.error(JSON.stringify({event:"daemon_runner_credential_missing",agentOsId:t,reason:d.reason,remedy:`run \`kynver runner credential --agent-os-id ${t}\` (or \`kynver bootstrap\`); ticks resume automatically once the credential exists`}))),await Fa(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await $c({agentOsId:t,baseUrl:xc(e.baseUrl?String(e.baseUrl):void 0),secret:d.secret});let f=await Wa({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let k=So(r);if(k&&!k.authorized)console.error(JSON.stringify({event:"daemon_cron_tick_skipped",reason:"mesh_cron_lease_not_authorized",holderBoxId:k.holderBoxId}));else{let h=await mt({env:l,agentOsIdFilter:t});h.enabled&&(h.fired>0||h.errors>0||h.lockHeld)&&console.error(JSON.stringify({event:"daemon_cron_tick",...h}))}}f.idle?i++:i=0;let m=Math.floor(dt("daemon.maxIdleStreak",K_)),p=Math.floor(dt("daemon.idleIntervalMs",$_)),g=i>=m?p:o;await Fa(g,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await Fa(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as V_}from"node:child_process";w();var G_=15*6e4,Vf=2*6e4,Gf=1e4,Y_=5e3,J_=5*6e4,q_=30*6e4,Yf=5e3;function z_(e,r=process.env){let t=typeof e=="string"?Number.parseInt(e,10):NaN;if(Number.isFinite(t)&&t>0)return t;let n=Number.parseInt(r.KYNVER_DAEMON_STALL_MS??"",10);return Number.isFinite(n)&&n>0?n:G_}function hs(e,r=process.env){if(e.keeperChild===!0||e.keeperChild==="true"||e.noSupervise===!0||e.noSupervise==="true"||e.supervised==="false")return!1;let t=(r.KYNVER_DAEMON_SUPERVISED??"").trim().toLowerCase();return!(t==="0"||t==="false"||t==="no"||t==="off")}function X_(e,r=Y_,t=J_){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function Q_(e,r,t=q_){return r-e>=t}function Kr(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function Z_(e){let r=[];for(let t=0;t<e.length;t+=1){let n=e[t];if(!(n==="--supervised"||n==="--no-supervise"||n==="--keeper-child")){if(n==="--stall-ms"){t+1<e.length&&!e[t+1].startsWith("--")&&(t+=1);continue}n.startsWith("--stall-ms=")||n.startsWith("--supervised=")||r.push(n)}}return r.push("--keeper-child"),r}async function ks(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||b().agentOsId||""),"--agent-os-id")),n=z_(e.stallMs),o=Z_(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,Kr("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),Kr("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=V_(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),Kr("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await or(Yf),!(d||i));){if(Date.now()-u<Vf)continue;let k=Jc(t),h=k&&k.pid===a.pid?k:null;if(h&&qc(h,n)){Kr("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await or(Gf),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+Vf){Kr("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await or(Gf),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await or(Yf);if(i)break;let p=Date.now();Q_(u,p)&&(l=0),l+=1;let g=X_(l);Kr("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await or(g)}Kr("stopped",{agentOsId:t})}ye();B();import{existsSync as ax,mkdirSync as lx}from"node:fs";import cx from"node:path";B();Zr();import{existsSync as ex,readFileSync as rx}from"node:fs";import Jf from"node:path";G();w();function tx(e){if(!e||!ex(e))return 0;try{return rx(e,"utf8").trim().length}catch{return 0}}function nx(e,r){let t=Jf.join(x(e.id),"workers",R(r),"worker.json"),n=_(t,void 0);if(!n)return{worker:r,workerStatus:"missing",attention:"needs_attention",attentionReason:"worker.json missing",missingHeartbeat:!0,missingFinalResult:!0,landingBlocked:!1,completionBlocked:!1};let o=T(n,{base:e.base,baseCommit:e.baseCommit}),s=tx(n.heartbeatPath)===0,i=!o.finalResult&&!o.alive,a=typeof n.completionBlocker=="string"&&n.completionBlocker.length>0;return{worker:r,workerStatus:n.status,attention:o.attention.state,attentionReason:o.attention.reason,missingHeartbeat:s,missingFinalResult:i,landingBlocked:at(o),completionBlocked:a}}function ox(e){return e.openWorkerCount>0?"active_workers":e.workers.some(r=>r.completionBlocked)?"completion_blocked":e.workers.some(r=>r.landingBlocked)?"landing_blocked":null}function sx(e){let r={blocked:5,needs_attention:4,stale:3,done:2,ok:1},t="ok",n;for(let o of e){let s=o.attention;(r[s]??0)>=(r[t]??0)&&(t=s,n=o.attentionReason)}return{attention:t,attentionReason:n}}function ix(e){let r=0;for(let t of ve(e)){let n=Jf.join(x(e.id),"workers",R(t),"worker.json"),o=_(n,void 0);if(!o)continue;let s=T(o,{base:e.base,baseCommit:e.baseCommit});s.alive&&!s.finalResult&&(r+=1)}return r}function $a(){return On(),ee().map(e=>{let t=ve(e).map(d=>nx(e,d)),n=t.filter(d=>d.missingHeartbeat).map(d=>d.worker),o=t.filter(d=>d.missingFinalResult).map(d=>d.worker),s=t.filter(d=>d.landingBlocked).map(d=>d.worker),i=t.filter(d=>d.completionBlocked).map(d=>d.worker),{attention:a,attentionReason:l}=sx(t),c=ix(e),u=zt(e.status,t.map(d=>({attention:d.attention,status:d.workerStatus})));return{id:e.id,name:e.name,status:e.status,effectiveStatus:u,repo:e.repo,createdAt:e.createdAt,openWorkerCount:c,attention:a,attentionReason:l,finalizeBlockedReason:ox({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function qf(){console.log(JSON.stringify($a(),null,2))}w();function ux(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Ce();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function ys(e){let r=Ld(ux(e));Ml(r);let t=e.id?Ko(String(e.id)):Il(String(e.name||"run")),n=x(t);ax(n)&&dx(`run already exists: ${t}`),lx(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ce(r,["rev-parse",o]).trim(),i={id:t,name:String(e.name||t),repo:r,base:o,baseCommit:s,status:"created",createdAt:new Date().toISOString(),workers:{}};le(cx.join(n,"run.json"),i);let a={runId:t,runDir:n,repo:r,base:o,baseCommit:s};return console.log(JSON.stringify(a,null,2)),a}function zf(){qf()}function dx(e){console.error(e),process.exit(1)}B();import{existsSync as vs}from"node:fs";async function Rs(e=Qe()){let r=await Pr(e.storePath).catch(()=>[]),t=await vo(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=Ro(e),s="disabled";return o?s="kynver-cron-daemon":process.env.QSTASH_TOKEN?.trim()&&(s="qstash"),{primary:s,env:{storePath:e.storePath,statePath:e.statePath,tickEnabled:e.tickEnabled,fireBaseUrl:e.fireBaseUrl,missedRunPolicy:e.missedRunPolicy,maxCatchUpPerTick:e.maxCatchUpPerTick,maxRetries:e.maxRetries},jobCount:r.length,stateJobCount:Object.keys(t.jobs).length,credentialsReady:n,daemonPrimary:o}}import{homedir as hx}from"node:os";import kx from"node:path";import{existsSync as Xf,mkdirSync as px,readFileSync as Qf,writeFileSync as mx}from"node:fs";import{homedir as fx}from"node:os";import Zf from"node:path";var hr=Zf.join(fx(),".kynver",".env");function Ka(e){let r=new Map;for(let t of e.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<=0)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),r.set(s,i)}return r}function gx(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
39
47
|
`){let t=[r.trimEnd(),""];for(let[n,o]of[...e.entries()].sort(([s],[i])=>s.localeCompare(i))){let s=o.includes(" ")||o.includes("#")||o.includes('"')?`"${o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:o;t.push(`${n}=${s}`)}return t.push(""),t.join(`
|
|
40
|
-
`)}function
|
|
41
|
-
`)}function $f(e,r){if(!En())return{supported:!1,unitPath:null,written:!1,enabled:!1,started:!1,note:process.platform==="linux"?"systemd-run not available \u2014 install user service manually or run `kynver daemon` under your supervisor.":"systemd user units are only supported on Linux; use `kynver daemon` manually on macOS/Windows."};let t=Wx(),n=Ff.join(t,Ma),o=Lx(e);if(!r)return{supported:!0,unitPath:n,written:!1,enabled:!1,started:!1,note:"Dry-run \u2014 pass --execute to write and enable the user unit."};Dx(t,{recursive:!0});let s=Tx(n);Mx(n,o,"utf8");let i=Hf("systemctl",["--user","daemon-reload"],{encoding:"utf8"});if(i.status!==0)return{supported:!0,unitPath:n,written:!0,enabled:!1,started:!1,note:`Wrote ${n} but systemctl --user daemon-reload failed: ${i.stderr||i.stdout}`};let a=Hf("systemctl",["--user","enable","--now",Ma],{encoding:"utf8"});return{supported:!0,unitPath:n,written:!s||!0,enabled:a.status===0,started:a.status===0,note:a.status===0?`Enabled and started ${Ma}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}W();function Kf(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return jf(t)?ee().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function ms(e={}){let r=e.execute!==!1,t=v(),n=Ge(e.apiBaseUrl?.trim()||t.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||""),o=e.agentOsId?.trim()||t.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||"",s=Wf(),i=Af({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:Y(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=Ef(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:Y(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=Kf(u,e.runId);d&&(u.defaultDaemonRunId=d),qe(u),process.env.KYNVER_API_URL=n,process.env.KYNVER_CRON_SECRET=s.secret,process.env.KYNVER_CRON_STORE_PATH=i.storePath,process.env.KYNVER_CRON_TICK_ENABLED="1";let f=await Uc(i.storePath);l.storeInitialized=f.created||jf(i.storePath);let m=Z();if(m)try{let p=await Cr(o,{baseUrl:n,apiKey:m});wr(o,p)}catch{}if(!e.skipWatchdog)if(!m)l.watchdog={error:"KYNVER_API_KEY required to register watchdog on server"},a.push("login \u2014 run `kynver login --api-key \u2026` to register watchdog remotely");else try{let p=await Nf(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=Df(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:Of(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await Mc(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await If(n,o,m),S=Mf(h),A=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],B=[];if(S.length)if(e.confirmQstashRemoval){let P=Uf(h);if(!P.allowed)a.push(P.reason);else for(let b of S)await Tf(n,o,b.id,m),B.push(b.id)}else a.push(`${S.length} QStash watchdog job(s) still active \u2014 complete Vercel cutover (KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET), re-run install, then --confirm-qstash-removal`);l.qstashWatchdog={found:S.map(P=>({id:P.id,provider:P.provider,status:P.status})),removed:B,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=Kf({...t,...i.configUpdates},e.runId);if(!p)l.systemd={supported:i.systemdSupported,unitPath:null,written:!1,enabled:!1,started:!1,note:"No harness run found \u2014 run `kynver run create` first or pass --run <runId>."},a.push("harness run \u2014 create a run before installing systemd unit");else{try{U(p)}catch{a.push(`harness run ${p} not found`)}l.systemd=$f({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:ps()},r)}}if(!e.skipTestFire&&a.length===0){let p=await ct({agentOsIdFilter:o});l.testFire={fired:p.fired,errors:p.errors},p.errors>0&&a.push(`test fire reported ${p.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await Et({config:v(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var Bx=["deployment_provider","cron_secret","env_file","cron_store"];function Vf(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function Hx(e){let r=Vf(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Vf(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function Fx(e){if(!Hx(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Et({config:e})).checks.filter(n=>Bx.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function $x(e){let r=["Run `kynver cron install` on this box."];for(let t of e)t.remediation&&r.push(` \u2022 ${t.id}: ${t.remediation}`);return r}function Ua(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Gf(e){if(Ua(e.args.skipCron))return{action:"skipped"};let r=await Fx(e.config);if(!r.expectsKynverCron||r.ready)return{action:"ready"};console.log(""),console.log(" Local Kynver Cron is not ready \u2014 running `kynver cron install`\u2026");let t=Ua(e.args.installSystemd)||Ua(e.args["install-systemd"]),n=await ms({execute:!0,skipTestFire:!0,agentOsId:e.agentOsId,runId:e.runId,installSystemd:t});if(n.ok)return console.log(" Kynver Cron configured for this box."),console.log(""),{action:"installed",installOk:!0};console.log(""),console.log(" Cron install did not fully complete (daemon will still start):");for(let o of n.blockers)console.log(` ! ${o}`);if(n.plan.deploymentSteps.length){console.log(""),console.log(" Hosted deployment (complete on Vercel, then re-run install):");for(let o of n.plan.deploymentSteps)console.log(` - ${o}`)}for(let o of $x(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function jx(e,r){return e.filter(n=>n.repo===r&&!Ze.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Yf(e){lt();let r=v();(!Z()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await ao(e),r=v());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(qe({...r,chatUseClaudeOauth:!0}),r=v(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let n=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||Ce()?.repo||"";n||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let o=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";o||(o=jx(ee(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=ls({...e,repo:n,name:"agent"}).runId),await Gf({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${Kx.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${n}`),console.log(` run: ${o}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let s={...e,run:o,agentOsId:t};if(is(s)){await as(s,Vx(o,t,e));return}await ss(s)}function Vx(e,r,t){let n=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&n.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&n.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&n.push("--stall-ms",t.stallMs.trim()),n}W();W();G();import{existsSync as Gx,rmSync as Yx}from"node:fs";import Wa from"node:path";function Jx(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function qx(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function zx(e){let{runId:r,workerName:t}=$e(e),n=fe(r,t),o=[...qx(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Wa.resolve(n.worktreePath),i=[];for(let c of o){let u=Jx(c),d=Wa.resolve(s,u);if(!d.startsWith(s+Wa.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!Gx(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};Yx(d,{recursive:!0,force:!0}),i.push(u)}let a=Array.isArray(n.disposableArtifactsRemoved)?n.disposableArtifactsRemoved.filter(c=>typeof c=="string"):[];n.disposableArtifactsRemoved=[...new Set([...a,...i])],V(n.runId,n);let l=T(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function Jf(e){let r=zx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}I();import k_ from"node:path";jn();var Xx=/--max-old-space-size=(\d+)/;function Qx(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function La(){return Qx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Ba(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(Xx.test(t))return r;let o=`--max-old-space-size=${La()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function At(e=La()){return`--max-old-space-size=${e}`}I();import{spawnSync as Zx}from"node:child_process";jn();function fs(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function zf(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?fs(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?fs(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??fs(e.perWorkerMemBytes,1610612736),reserveBytes:t??fs(e.memReserveBytes,2147483648)}}var gs=0;function $a(){gs+=1}function Ka(){gs=Math.max(0,gs-1)}function Ot(e={}){let r={...zf(),...e},t=e.memAvailableBytes??Ht(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:gs,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function e_(e){e<=0||Zx(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function ja(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=Ot({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)e_(Math.min(r,n-Date.now())),o=Ot({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as f_}from"node:child_process";w();import{closeSync as t_,existsSync as Va,mkdirSync as n_,openSync as o_,readdirSync as Zf,readFileSync as s_,unlinkSync as Ya,writeFileSync as i_}from"node:fs";import Ja from"node:path";import{mkdirSync as r_}from"node:fs";import Xf from"node:path";function Qf(){return Xf.join(Bo(),"heavy-verification")}function An(){return Xf.join(Qf(),"slots")}function It(){let e=An();return r_(e,{recursive:!0}),e}var Nt=120*6e4,Ga=1;function a_(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function qa(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function On(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?a_(e,Ga):Ga}function l_(e){return`slot-${e}`}function eg(e,r=An()){return Ja.join(r,`${e}.json`)}function za(e){if(!Va(e))return null;try{let r=JSON.parse(s_(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 hs(e,r=Nt){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function c_(e,r){let t=za(e);if(hs(t,r))try{Ya(e)}catch{}}function u_(e){return n_(e,{recursive:!0}),e}function ys(e={}){let r=u_(e.slotsDir??It()),t=e.staleMs??Nt,n=0;for(let o of Zf(r)){if(!o.endsWith(".json"))continue;let s=Ja.join(r,o),i=Va(s);c_(s,t),i&&!Va(s)&&(n+=1)}return n}function rg(e={}){let r=e.slotsDir??It(),t=e.staleMs??Nt;ys({slotsDir:r,staleMs:t});let n=[];for(let o of Zf(r)){if(!o.endsWith(".json"))continue;let s=za(Ja.join(r,o));s&&!hs(s,t)&&n.push(s)}return n}function ks(e={}){return rg(e).length}function Rs(e,r={}){if(qa())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:On(),reason:null};let t=r.slotsDir??It(),n=r.staleMs??Nt,o=r.maxSlots??On();ys({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=l_(i),l=eg(a,t),c=za(l);if(c&&hs(c,n))try{Ya(l)}catch{}else if(c&&!hs(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=o_(l,"wx");i_(d,JSON.stringify(u,null,2),"utf8"),t_(d);let f=ks({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:f,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=ks({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function In(e,r={}){if(!e)return;let t=eg(e,r.slotsDir??An());try{Ya(t)}catch{}}function vs(e,r={}){if(qa())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:On(),reason:null};let t=r.slotsDir??It(),n=r.staleMs??Nt,o=r.maxSlots??On();ys({slotsDir:t,staleMs:n});let s=ks({slotsDir:t,staleMs:n}),i=s<o;return{admitted:i,slotId:null,activeSlots:s,maxSlots:o,reason:i?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}import{spawnSync as d_}from"node:child_process";function p_(e){e<=0||d_(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function bs(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=Rs(e,n);for(;!s.admitted&&Date.now()<o;)p_(Math.min(t,o-Date.now())),s=Rs(e,n);return s}ve();import Xa from"node:path";function m_(e){let r=ir(me()),t=Xa.relative(r,Xa.resolve(e));return t.length>0&&!t.startsWith("..")&&!Xa.isAbsolute(t)}function tg(e){return m_(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}function g_(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function ng(e,r){let t=f_(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function Qa(e){let r=e.waitForAdmissionMs??6e5,t=r>0?bs(e.command,r):h_(e.command);if(!t.admitted)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason??"heavy verification gate denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:Ot(),verificationGate:t,command:e.command};let n=t.slotId,o=r>0?ja(r):Ot();if(!o.admitted)return In(n),{ok:!1,exitCode:1,stdout:"",stderr:o.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:o,verificationGate:t,command:e.command};let s=tg(e.cwd);if(!s.ok)return In(n),{ok:!1,exitCode:1,stdout:"",stderr:s.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:At(),admission:o,verificationGate:t,command:e.command};let i=Ba({...process.env,...e.env}),a=At(),l=En();$a();try{let c;if(l){let u=Da({cwd:e.cwd,command:["/usr/bin/env",...g_(i),"/bin/bash","-lc",e.command]});c=ng(u,{cwd:e.cwd,env:i,timeoutMs:e.timeoutMs})}else c=ng([e.command],{cwd:e.cwd,env:i,shell:!0,timeoutMs:e.timeoutMs});return{ok:c.exitCode===0,exitCode:c.exitCode,stdout:c.stdout,stderr:c.stderr,admitted:!0,wrappedWithSystemd:l,nodeOptionsFlag:a,admission:o,verificationGate:t,command:e.command}}finally{Ka(),In(n)}}function h_(e){let r=bs(e,0);return r.admitted?r:{...vs(e),slotId:null}}var Za=["npm run typecheck","npm run test"];function Ss(e,r=Za,t={}){let n=[],o=!0;for(let s of r){let i=Qa({cwd:e,command:s,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:s,result:i}),i.ok||(o=!1)}return{passed:o,steps:n}}w();function og(e){let r=e.indexOf(":");if(r<=0)throw new Error(`invalid --evidence ${e} (expected type:value)`);return{type:e.slice(0,r),value:e.slice(r+1)}}async function sg(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let A of i)s.push(og(String(A)));else typeof i=="string"&&s.push(og(i));let a=L(e.baseUrl?String(e.baseUrl):void 0),l=await K(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=v(),f=`provider:${ho(u.workerProvider,Qe)}`,p=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),g={rowKey:e.row?String(e.row):void 0,rowId:e.rowId?String(e.rowId):void 0,taskId:e.task?String(e.task):void 0,reviewTaskId:e.reviewTask?String(e.reviewTask):void 0,roleLane:n,status:o,note:e.note?String(e.note):void 0,remainingWork:e.remaining?String(e.remaining):void 0,evidence:s.length?s:void 0,executorRef:e.executorRef?String(e.executorRef):f};p!==void 0&&(g.proposed=p);let k=await fetch(c,{method:"POST",headers:Xe(l),body:JSON.stringify(g)}),h=await k.text(),S=null;try{S=JSON.parse(h)}catch{S=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:S},null,2)),process.exit(1)),console.log(JSON.stringify(S,null,2))}function y_(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=k_.resolve(r),n=Ss(t),o=e.json===!0||e.json==="true",s={passed:n.passed,worktree:t,steps:n.steps};console.log(o?JSON.stringify(s,null,2):n.passed?"local plan verify passed":"local plan verify failed"),n.passed||process.exit(1)}async function ig(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){y_(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=L(e.baseUrl?String(e.baseUrl):void 0),s=process.env.KYNVER_API_KEY,i={"Content-Type":"application/json"};s&&(i.Authorization=`Bearer ${s}`);let a=`${o}/api/agent-os/${encodeURIComponent(n)}/plans/${encodeURIComponent(r)}/verify`,l=await fetch(a,{method:"POST",headers:i,body:JSON.stringify({worktreePath:e.worktree?String(e.worktree):void 0,taskId:e.task?String(e.task):void 0,humanOverride:e.humanOverride===!0||e.humanOverride==="true"})}),c=await l.text(),u=null;try{u=JSON.parse(c)}catch{u=c}l.ok||(console.error(JSON.stringify({httpStatus:l.status,response:u},null,2)),process.exit(1)),console.log(JSON.stringify(u,null,2))}import R_ from"node:path";w();function ag(e){let r=R_.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ss(r,n.length?n:Za,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
42
|
-
`)[0]}`)}process.exit(s.passed?0:1)}
|
|
43
|
-
`),diagnostic:
|
|
44
|
-
`),diagnostic:hr(e)}}import N_ from"node:path";W();G();w();G();w();function pg(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!hi(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>ot?{health:"stale",reason:`heartbeat older than ${Math.floor(ot/1e3)}s`}:t.alive&&r.pid&&!$(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}ve();w();import{existsSync as mg,mkdirSync as A_,readdirSync as O_,unlinkSync as I_}from"node:fs";import el from"node:path";function fg(){let{harnessRoot:e}=Jr(),r=el.join(e,"monitors");return A_(r,{recursive:!0}),r}function Tt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function rl(e){return el.join(fg(),`${e}.json`)}function Dt(e){return x(rl(e),void 0)}function Mt(e){le(rl(e.monitorId),e)}function gg(e){let r=rl(e);return mg(r)?(I_(r),!0):!1}function hg(){let e=fg();if(!mg(e))return[];let r=[];for(let t of O_(e)){if(!t.endsWith(".json"))continue;let n=x(el.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?$(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}G();function tl(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Po(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),st(t)&&n.push(t.attention.reason||"landing gate blocked");let o=re(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}I();async function kg(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=L(e.baseUrl);try{let o=await K(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await q(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}function yg(e,r){return x(N_.join(_(e),"workers",R(r),"worker.json"),void 0)}function Rg(e,r){let t=U(e),n=Object.keys(t.workers||{});if(!r)return n;let o=R(r);return n.filter(s=>R(s)===o)}function vg(e,r){let t=U(e.runId),n=T(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=pg({worker:e,status:n,taskLease:o}),i=tl({worker:e,status:n});return{runId:e.runId,worker:e.name,health:s.health,healthReason:s.reason,workerStatus:n.status,attentionState:n.attention.state,attentionReason:n.attention.reason,alive:n.alive,taskId:e.taskId,leaseOwner:o?.leaseOwner??void 0,taskStatus:o?.status,autoComplete:i,status:n}}async function Nn(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=U(r),s=Rg(r,t),i=[];for(let p of s){let g=yg(r,p);g&&i.push(g)}let a=n||i.map(p=>p.agentOsId).find(p=>typeof p=="string"&&p.trim())||void 0,l=i.map(p=>p.taskId).filter(p=>!!p),c=await kg({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>vg(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await wo(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){f.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let g=await gt({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:p.worker,outcome:g.outcome,ok:g.outcome==="completed",reason:g.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function bg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Rg(r,t),o=[];for(let s of n){let i=yg(r,s);i&&o.push(vg(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function nl(){return hg()}function Sg(e){let r=String(e.run||"");N(r,"--run");let t=Tt(r,e.name?String(e.name):void 0),n=Dt(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&$(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),Mt(n),gg(t),{monitorId:t,stopped:!0,pid:n.pid}}async function ol(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=fe(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=tl({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await gt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var T_=5e3,D_=360*60*1e3;async function wg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):T_,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):D_,o=Date.now();for(;Date.now()-o<=n;){let s=r?Dt(r):void 0;if(s?.stoppedAt)break;let i=await Nn({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=ws({monitorId:r,phase:"tick",...i});if(console.log(a.primary),a.diagnostic&&console.error(`[monitor diagnostic] ${a.diagnostic}`),i.workers.length>0&&i.workers.every(c=>c.autoComplete.terminalVerified&&(c.autoComplete.eligible||c.autoComplete.blockers.some(u=>u.includes("already acknowledged"))))&&i.autoCompleted.every(c=>c.ok||c.outcome==="skipped")){r&&s&&(s.stoppedAt=new Date().toISOString(),Mt(s));break}kr(t)}}w();ve();import{spawn as M_}from"node:child_process";import{closeSync as Cg,existsSync as U_,openSync as W_}from"node:fs";import xg from"node:path";import{fileURLToPath as L_}from"node:url";function B_(){return xg.join(L_(new URL(".",import.meta.url)),"cli.js")}function _g(e){let r=e.cliPath??B_();if(!U_(r))return;let t=Tt(e.runId,e.workerName),{harnessRoot:n}=Jr(),o=xg.join(n,"monitors",`${t}.log`),s;try{s=W_(o,"a")}catch{s=void 0}let i=e.nodeExecutable??process.execPath,a=e.pollMs??5e3,l=[r,"monitor","run-loop","--run",e.runId,"--monitor-id",t,"--poll-ms",String(a),"--auto-complete","true","--renew-leases","true"];e.workerName&&l.push("--name",e.workerName),e.agentOsId&&l.push("--agent-os-id",e.agentOsId),e.baseUrl&&l.push("--base-url",e.baseUrl),e.secret&&l.push("--secret",e.secret);let c=["ignore",s??"ignore",s??"ignore"];try{let u=M_(i,l,ae({detached:!0,stdio:c,env:process.env}));s!==void 0&&Cg(s),u.unref();let d={monitorId:t,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:u.pid,startedAt:new Date().toISOString(),pollMs:a,logPath:o};return Mt(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{Cg(s)}catch{}return}}w();async function Pg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Tt(r,t),o=Dt(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=_g({runId:r,workerName:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0});if(!s)throw new Error("failed to spawn monitor sidecar (cli.js missing or spawn error)");return{monitorId:n,session:s.session,spawned:!0,pid:s.pid}}async function Eg(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Nn({...e,autoComplete:!1}):bg(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:nl()},null,2))}function Ag(e){console.log(JSON.stringify(Sg(e),null,2))}function Og(){console.log(JSON.stringify({monitors:nl()},null,2))}async function Ig(e){await wg(e)}async function Ng(e){let r=await Nn(e);console.log(JSON.stringify(r,null,2))}import{existsSync as H_,readFileSync as F_}from"node:fs";import{dirname as sl,join as Dg}from"node:path";import{fileURLToPath as Tg}from"node:url";function $_(e){let r=sl(Tg(e));for(let t=0;t<6;t+=1){if(H_(Dg(r,"package.json")))return r;let n=sl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${sl(Tg(e))}`)}function Mg(e=import.meta.url){let r=Dg($_(e),"package.json"),t=JSON.parse(F_(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Cs=Mg();function K_(e){return e.some(r=>r==="--version"||r==="-v")}function j_(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Ug(e,r=import.meta.url,t){return K_(e)?(j_(Mg(r),t),!0):!1}function V_(e){let r={};for(let[t,n]of Object.entries(e))n?.version&&(r[t]={version:n.version,source:"installed",path:n.path});return r}async function G_(e={}){let[r,t]=await Promise.all([ns(),Promise.resolve(jm({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Cs;return n["@kynver-app/runtime"]={version:o,source:"self"},e.selfPackageName&&e.selfVersion&&e.selfPackageName!=="@kynver-app/runtime"&&(n[e.selfPackageName]={version:e.selfVersion,source:"self"}),{installed:V_(r),repo:t,self:n}}async function Wg(e={}){let r=await G_(e);return Gm(r)}function Lg(e,r){return e?e==="daemon"||e==="start"||e==="worker"||e==="monitor"||e==="run"&&(r==="dispatch"||r==="sweep"||r==="reconcile"||r==="unblock")||e==="cron"&&r==="tick":!1}w();function Y_(e){let r=e.trim();return r?Oa().find(n=>n.name===r&&n.status!=="completed")??null:null}function Bg(e){let r=String(N(String(e.name||""),"--name")),t=Y_(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}W();G();w();I();import J_ from"node:path";function Tn(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function q_(e){let r=L(e.baseUrl?String(e.baseUrl):void 0),t=e.agentOsId?String(e.agentOsId).trim():null,n=e.dryRun===!0||e.dryRun==="true",o=[],s=[],i=[];for(let a of ee())for(let l of Object.keys(a.workers??{})){let c=J_.join(_(a.id),"workers",R(l),"worker.json"),u=x(c,void 0);if(!u){s.push(Tn(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",f=u.agentOsId??"",m=u.leaseOwner??"";if(!u.dispatched||!d||!f||!m){s.push(Tn(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Tn(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(Tn(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Tn(a.id,l,d,f,m,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let g=await K(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,h=await q(k,g,{agentOsId:f,leaseOwner:m},{agentOsId:f,baseUrl:r});h.ok===!0||h.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${h.status}`})}catch(g){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"error",reason:g.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function Hg(e){let r=await q_(e),t={ok:r.errors.length===0,dryRun:r.dryRun,released:r.released.length,skipped:r.skipped.length,errors:r.errors.length,details:r};console.log(JSON.stringify(t,null,2)),r.errors.length>0&&process.exit(1)}Je();I();import z_ from"node:path";import{homedir as X_}from"node:os";var il=z_.join(X_(),".kynver","config.json");function al(e){let r=v(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(il),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:Y(il),resolved:yn(t),config:at(r)};let n=up(t.repo,r),o=yn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(il),resolved:o,config:at(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Fg(e=!1){let r=al();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function $g(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}import qg from"node:path";Je();I();import{accessSync as Q_,constants as Z_,existsSync as ll,readFileSync as eP}from"node:fs";import{homedir as xs}from"node:os";import _s from"node:path";import{spawnSync as rP}from"node:child_process";ve();function Kg(e,r){try{let t=rP(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function jg(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function tP(e){if(!ll(e))return!1;try{return Q_(e,Z_.W_OK),!0}catch{return!1}}var Vg={packageVersion:()=>Cs,commandOnPath:e=>Kg(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Kg(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>_s.join(xs(),".kynver","config.json"),credentialsFilePath:()=>_s.join(xs(),".kynver","credentials"),readCredentials:()=>{let e=_s.join(xs(),".kynver","credentials");if(!ll(e))return{hasApiKey:!1};try{let r=JSON.parse(eP(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:jg(r.runnerToken),runnerTokenAgentOsId:r.runnerTokenAgentOsId}}catch{return{hasApiKey:!1}}},envSnapshot:()=>({kynverApiUrl:process.env.KYNVER_API_URL?.trim()||void 0,openclawCronFireBaseUrl:process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||void 0,kynverRunnerTokenPrefix:jg(process.env.KYNVER_RUNNER_TOKEN),kynverRuntimeSecret:!!process.env.KYNVER_RUNTIME_SECRET?.trim(),openclawCronSecret:!!process.env.OPENCLAW_CRON_SECRET?.trim(),kynverHarnessRoot:process.env.KYNVER_HARNESS_ROOT?.trim()||void 0,opusHarnessRoot:process.env.OPUS_HARNESS_ROOT?.trim()||void 0,kynverSchedulerProvider:process.env.KYNVER_SCHEDULER_PROVIDER?.trim()||void 0,openclawCronStorePath:!!(process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim()),kynverCronDaemonPrimary:lo(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>me(),legacyOpenclawHarnessRoot:()=>_s.join(xs(),".openclaw","harness"),pathExists:e=>ll(e),pathWritable:e=>tP(e)};function Gg(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function nP(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Yg(e){return!!e.openclawCronStorePath}function oP(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Jg(e,r){let t={schedulerProvider:e.kynverSchedulerProvider??null,deploymentSchedulerProvider:r.deploymentSchedulerProvider??null,openclawCronStorePath:!!e.openclawCronStorePath,kynverCronDaemonPrimary:!!e.kynverCronDaemonPrimary},n=!!r.agentOsId?.trim()&&!!r.apiBaseUrl?.trim()&&r.hasScopedRunnerToken;if(oP(e,r)&&!Gg(e,r)){let u=e.kynverSchedulerProvider==="qstash"?"KYNVER_SCHEDULER_PROVIDER=qstash on this host":"deploymentSchedulerProvider=qstash in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler cut over to QStash (${u})`,details:t}}if(nP(e,r)&&!Gg(e,r)){if(Yg(e)&&e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=e.kynverSchedulerProvider==="kynver-cron"?"KYNVER_SCHEDULER_PROVIDER=kynver-cron on this host":"deploymentSchedulerProvider=kynver-cron in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler owned by Kynver Cron (${u})`,details:t}}if(Yg(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}function sP(e){let r={pass:0,warn:0,fail:0};for(let t of e)for(let n of t.checks)r[n.status]+=1;return r}function iP(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?Y(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function aP(e){let r=e.configFilePath(),t=Y(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=Ce({config:o}),c=l?yn(l):null,u=$g(l);s.push({id:"config_api_base_url",label:"Default API base URL",status:i?"pass":"warn",summary:i??"Not set in config (KYNVER_API_URL / --base-url required per command)",remediation:i?void 0:"Set `apiBaseUrl` via `kynver setup --api-base-url https://\u2026`.",details:{apiBaseUrl:i??null}},{id:"config_agent_os_id",label:"Default AgentOS id",status:a?"pass":"warn",summary:a??"Not set (pass --agent-os-id on daemon/dispatch/worker commands)",remediation:a?void 0:"Set `agentOsId` via `kynver setup --agent-os-id <uuid>`.",details:{agentOsId:a??null,agentOsSlug:o.agentOsSlug??null}},{id:"config_default_repo",label:"Default repo path",status:u.status,summary:l?l.persistedInConfig?`${c.defaultRepo} (config)`:`${c.defaultRepo} (${l.source}, not persisted in ~/.kynver/config.json)`:"Not set in ~/.kynver/config.json (`kynver run create` requires --repo)",remediation:u.remediation,details:{defaultRepo:c?.defaultRepo??null,source:c?.source??null,persistedInConfig:c?.persistedInConfig??!1,harnessRoot:o.harnessRoot?pe(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function lP(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=Y(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function cP(e){let r=e.commandOnPath("vercel"),t=r.ok,n=!!(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()),o=!!process.env.VERCEL_TOKEN?.trim();return{id:"vercel_deploy_evidence",label:"Vercel deploy evidence",checks:[{id:"vercel_global_cli_absent",label:"Global Vercel CLI not installed",status:t?"warn":"pass",summary:t?`Global Vercel CLI found (${r.stdout||"on PATH"}) \u2014 uninstall after operator approval`:"No global Vercel CLI on PATH",remediation:t?"Uninstall global Vercel CLI (`npm uninstall -g vercel`) \u2014 use GitHub commit status or scoped VERCEL_TOKEN + REST API instead.":void 0,details:{path:t&&r.stdout||null}},{id:"github_token_for_vercel_status",label:"GitHub token for Vercel status",status:n?"pass":"warn",summary:n?"GITHUB_TOKEN/GH_TOKEN present for GitHub Vercel StatusContext evidence":"No GITHUB_TOKEN \u2014 merge-gate Vercel evidence requires GitHub commit status API",remediation:n?void 0:"Export GITHUB_TOKEN (or GH_TOKEN) for PR head commit status lookups."},{id:"vercel_api_token_optional",label:"Vercel API token (optional fallback)",status:o?"pass":"warn",summary:o?"VERCEL_TOKEN configured for optional REST API deployment lookup":"VERCEL_TOKEN unset \u2014 GitHub status is the default path; API fallback disabled",remediation:o?void 0:"Set ephemeral/scoped VERCEL_TOKEN only when GitHub status is insufficient; avoid persistent ~/.vercel auth on runner hosts."}]}}function uP(e){let r=e.harnessRoot(),t=qg.join(r,"runs"),n=qg.join(r,"worktrees"),o=pe(r),s=pe(t),i=pe(n),a=e.pathExists(t),l=e.pathExists(n);return{id:"harness_dirs",label:"Harness / daemon directories",checks:[{id:"harness_root",label:"Harness root resolved",status:"pass",summary:o,details:{harnessRoot:o}},{id:"harness_runs_dir",label:"Runs directory ready",status:a&&e.pathWritable(t)?"pass":"warn",summary:a?e.pathWritable(t)?`Writable ${s}`:`Exists but not writable: ${s}`:`Will be created on first run: ${s}`,remediation:a&&!e.pathWritable(t)?`Fix permissions on ${s} or set KYNVER_HARNESS_ROOT to a writable path.`:void 0,details:{runsDir:s,exists:a,writable:e.pathWritable(t)}},{id:"harness_worktrees_dir",label:"Worktrees directory ready",status:l&&e.pathWritable(n)?"pass":"warn",summary:l?e.pathWritable(n)?`Writable ${i}`:`Exists but not writable: ${i}`:`Will be created on first worker: ${i}`,remediation:l&&!e.pathWritable(n)?`Fix permissions on ${i}.`:void 0,details:{worktreesDir:i,exists:l,writable:e.pathWritable(n)}}]}}function dP(e){let r=e.loadConfig(),t=e.envSnapshot(),n=t.kynverApiUrl??r.apiBaseUrl?.trim()??t.openclawCronFireBaseUrl,o=!t.kynverApiUrl&&!r.apiBaseUrl&&!!t.openclawCronFireBaseUrl,s=t.openclawCronSecret||t.kynverRuntimeSecret,i=t.kynverRunnerTokenPrefix?.startsWith("krc1."),l=e.readCredentials().runnerTokenPrefix?.startsWith("krc1.");return{id:"callback_auth",label:"Callback auth / config",checks:[{id:"callback_base_url",label:"Callback base URL configured",status:n?o?"warn":"pass":"fail",summary:n?o?`Using legacy OPENCLAW_CRON_FIRE_BASE_URL (${n})`:n:"No KYNVER_API_URL, config apiBaseUrl, or legacy OpenClaw base URL",remediation:n?o?"Migrate to KYNVER_API_URL or `kynver setup --api-base-url` and drop OPENCLAW_CRON_FIRE_BASE_URL.":void 0:"Set KYNVER_API_URL or run `kynver setup --api-base-url https://\u2026`.",details:{source:t.kynverApiUrl?"KYNVER_API_URL":r.apiBaseUrl?"config.apiBaseUrl":t.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL":"none",baseUrl:n??null}},{id:"callback_auth_mode",label:"Callback auth uses scoped runner token",status:i||l?"pass":s?"warn":"fail",summary:i?"KYNVER_RUNNER_TOKEN scoped token will be sent as X-Kynver-Runner-Token":l?"Saved krc1.* token in ~/.kynver/credentials":s?"Deployment-level KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET in use (legacy headers)":"No callback secret configured",remediation:i||l?void 0:"Mint a scoped token: `kynver runner credential --agent-os-id <id>`. Avoid shared OPENCLAW_CRON_SECRET on user runners.",details:{mode:i||l?"scoped":s?"legacy_global_secret":"missing",legacyHeadersWhenNotScoped:["X-OpenClaw-Cron-Secret","X-Kynver-Runtime-Secret"]}}]}}function pP(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=pe(o),a=pe(s),l=r.opusHarnessRoot?pe(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,m=n.runnerTokenAgentOsId,p=!!f&&(!u||!m||m===u),g=!!d?.startsWith("krc1.")||p&&!!f?.startsWith("krc1.");return{id:"openclaw_hotspots",label:"OpenClaw dependency hotspots",checks:[{id:"hotspot_legacy_harness_root",label:"Legacy ~/.openclaw/harness still active",status:c?"warn":"pass",summary:c?`Harness root is legacy ${a}`:r.opusHarnessRoot?`OPUS_HARNESS_ROOT override in use (${l})`:`Using ${i}`,remediation:c?"Set KYNVER_HARNESS_ROOT=~/.kynver/harness (or run setup), migrate artifacts, retire OPUS_HARNESS_ROOT.":r.opusHarnessRoot?"Prefer KYNVER_HARNESS_ROOT over OPUS_HARNESS_ROOT.":void 0,details:{harnessRoot:i,legacyRoot:a,opusHarnessRoot:l}},{id:"hotspot_openclaw_env_secrets",label:"OpenClaw deployment secrets in runner env",status:r.openclawCronSecret||r.openclawCronFireBaseUrl?"warn":"pass",summary:r.openclawCronSecret||r.openclawCronFireBaseUrl?[r.openclawCronSecret?"OPENCLAW_CRON_SECRET set":null,r.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL set":null].filter(Boolean).join("; "):"No OpenClaw cron env overrides on this runner",remediation:r.openclawCronSecret||r.openclawCronFireBaseUrl?"Move to KYNVER_API_URL + scoped runner tokens; unset OpenClaw cron env on user-hosted runners.":void 0},Jg(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:g,deploymentSchedulerProvider:t.deploymentSchedulerProvider==="qstash"||t.deploymentSchedulerProvider==="kynver-cron"||t.deploymentSchedulerProvider==="openclaw-cron"?t.deploymentSchedulerProvider:void 0}),{id:"hotspot_lease_source_names",label:"Harness lease/completion source names",status:"pass",summary:"Runtime uses kynver-harness:* lease owners and completion source kynver-harness (OpenClaw names retired in runtime)",details:{leaseOwnerPattern:"kynver-harness:<runId>",completionSource:"kynver-harness",note:"OpenClaw adapter remains optional in packages/kynver-openclaw-agent-os only"}}]}}function zg(e=Vg){let r=[iP(e),aP(e),lP(e),cP(e),uP(e),dP(e),pP(e)],t=sP(r),n=t.fail===0,o=n?t.warn>0?`Ready with ${t.warn} warning(s) \u2014 review remediation before retiring OpenClaw as primary runtime agent.`:"Ready \u2014 Kynver runtime can serve as primary runtime agent on this host.":`${t.fail} blocking check(s) \u2014 fix failures before OpenClaw takeover.`;return{command:"doctor runtime-takeover",ready:n,summary:o,counts:t,sections:r}}function Xg(e={}){let r;if(e.remediateDefaultRepo===!0){let n=al();if(!n.ok){console.error(n.reason??"defaultRepo remediation failed"),n.remediation&&console.error(n.remediation),process.exitCode=1;return}n.remediated?r=`Remediated defaultRepo \u2192 ${n.resolved?.defaultRepo??"unknown"}`:r=`defaultRepo already persisted (${n.resolved?.defaultRepo??"unknown"})`}let t=zg();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}I();async function Qg(e){let r=v(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=L(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await K(e.secret?String(e.secret):void 0,t,{baseUrl:n}),s=new URLSearchParams;if(typeof e.since=="string"&&e.since.trim()&&s.set("since",e.since.trim()),e.limit!=null&&String(e.limit).trim()){let c=Number(e.limit);Number.isFinite(c)&&c>0&&s.set("limit",String(Math.floor(c)))}let i=s.toString()?`?${s.toString()}`:"",a=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/command-center/dashboard-contract${i}`,l=await fo(a,o);l.ok||(console.error(`dashboard-contract GET failed: HTTP ${l.status}`),l.response&&console.error(JSON.stringify(l.response,null,2)),process.exit(1)),console.log(JSON.stringify(l.response,null,2))}Je();var cl=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],ul=["User runner: unset KYNVER_SCHEDULER_PROVIDER (scheduling is deployment-owned)","User runner: unset OPENCLAW_CRON_STORE_PATH, OPENCLAW_CRON_SECRET, OPENCLAW_CRON_FIRE_BASE_URL",'User runner: after deployment cutover, run `kynver scheduler attest-cutover` (or set deploymentSchedulerProvider to "qstash" in ~/.kynver/config.json)',"Verify: kynver doctor runtime-takeover \u2014 hotspot_openclaw_scheduler should pass"];function mP(e=process.env){return{kynverSchedulerProvider:e.KYNVER_SCHEDULER_PROVIDER?.trim()||null,kynverCronStorePath:e.KYNVER_CRON_STORE_PATH?.trim()||e.OPENCLAW_CRON_STORE_PATH?.trim()||null,kynverCronSecret:!!(e.KYNVER_CRON_SECRET?.trim()||e.OPENCLAW_CRON_SECRET?.trim()),kynverCronFireBaseUrl:e.KYNVER_CRON_FIRE_BASE_URL?.trim()||e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null,openclawCronStorePath:e.OPENCLAW_CRON_STORE_PATH?.trim()||null,openclawCronSecret:!!e.OPENCLAW_CRON_SECRET?.trim(),openclawCronFireBaseUrl:e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}}function dl(e,r=mP()){let t=[];return r.kynverSchedulerProvider==="openclaw-cron"&&t.push("Runner still has KYNVER_SCHEDULER_PROVIDER=openclaw-cron"),r.kynverCronStorePath&&r.kynverSchedulerProvider!=="kynver-cron"&&t.push("Runner has KYNVER_CRON_STORE_PATH but KYNVER_SCHEDULER_PROVIDER is not kynver-cron \u2014 use `kynver daemon` cron tick or unset the store for QStash-only runners"),r.openclawCronStorePath&&!r.kynverCronStorePath&&t.push("Runner still has legacy OPENCLAW_CRON_STORE_PATH (prefer KYNVER_CRON_STORE_PATH)"),e.deploymentSchedulerProvider==="openclaw-cron"&&t.push("~/.kynver/config.json deploymentSchedulerProvider is still openclaw-cron"),{ok:t.length===0,blockers:t,runnerEnv:r,deploymentSchedulerProvider:e.deploymentSchedulerProvider??null,deploymentSteps:[...cl],runnerSteps:[...ul]}}function Zg(e){return{...e,deploymentSchedulerProvider:"qstash"}}I();import fP from"node:path";import{homedir as gP}from"node:os";var eh=fP.join(gP(),".kynver","config.json");function rh(e=!1){let r=v(),t=dl(r),n={...t,configPath:Y(eh),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
45
|
-
`),console.log("Deployment (Vercel):");for(let o of
|
|
46
|
-
User runner:`);for(let o of
|
|
48
|
+
`)}function bs(e=hr){return Xf(e)?Ka(Qf(e,"utf8")):new Map}function eg(e,r={}){let t=r.filePath??hr,n=Xf(t)?Qf(t,"utf8"):"",o=Ka(n),s=[],i=[];for(let u of r.removeKeys??[])o.delete(u)&&i.push(u);for(let[u,d]of Object.entries(e)){if(d===void 0)continue;let f=o.get(u);o.set(u,d),f!==d&&s.push(u)}let a=Ka(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=gx(o);return l&&(px(Zf.dirname(t),{recursive:!0}),mx(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var kr="watchdog:board-sweep",yx="*/5 * * * *",Rx=["Set KYNVER_SCHEDULER_PROVIDER=kynver-cron on the hosted Kynver deployment (Vercel).","Set KYNVER_CRON_SECRET to the same value written to ~/.kynver/.env by this installer.","Unset KYNVER_CRON_STORE_PATH on Vercel \u2014 the connected box owns the local store.","Keep QSTASH_TOKEN only if other non-watchdog schedules still use QStash (analyst/market jobs)."];function rg(e){let r=e.storePath?.trim()||cr(),t=e.envFilePath?.trim()||hr,n=kx.join(hx(),".kynver","config.json"),o=`/api/agent-os/by-id/${e.agentOsId}/scheduler/fire`,s=[];e.apiBaseUrl?.trim()||s.push("apiBaseUrl \u2014 run `kynver setup --api-base-url \u2026`"),e.agentOsId?.trim()||s.push("agentOsId \u2014 run `kynver setup --agent-os-id \u2026`");let i={KYNVER_API_URL:e.apiBaseUrl,KYNVER_CRON_SECRET:e.cronSecret,KYNVER_CRON_STORE_PATH:r,KYNVER_CRON_TICK_ENABLED:"1"},a=["OPENCLAW_CRON_STORE_PATH","OPENCLAW_CRON_SECRET","OPENCLAW_CRON_FIRE_BASE_URL"],l={deploymentSchedulerProvider:"kynver-cron",apiBaseUrl:e.apiBaseUrl,agentOsId:e.agentOsId,...e.defaultDaemonRunId?{defaultDaemonRunId:e.defaultDaemonRunId}:{}};return{envFilePath:t,configPath:n,storePath:r,envUpdates:i,envRemovals:a,configUpdates:l,deploymentSteps:Rx,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:yx,dedupeKey:kr,callbackPath:o}}}async function Nt(e){let r=e.envFilePath??hr,t=[],n=Qe(),o=await Rs(n),s=bs(r);t.push({id:"config_agent_os",ok:!!e.config.agentOsId?.trim(),summary:e.config.agentOsId?`agentOsId configured (${e.config.agentOsId})`:"agentOsId missing in ~/.kynver/config.json",remediation:"Run `kynver setup --agent-os-id <id>`."}),t.push({id:"config_api_base",ok:!!(e.config.apiBaseUrl?.trim()||n.fireBaseUrl),summary:n.fireBaseUrl?`fire base URL resolved (${n.fireBaseUrl})`:"KYNVER_API_URL / apiBaseUrl not configured",remediation:"Run `kynver setup --api-base-url https://\u2026`."}),t.push({id:"deployment_provider",ok:e.config.deploymentSchedulerProvider==="kynver-cron",summary:`deploymentSchedulerProvider=${e.config.deploymentSchedulerProvider??"(unset)"}`,remediation:'Run `kynver cron install` or set deploymentSchedulerProvider to "kynver-cron".'}),t.push({id:"cron_secret",ok:!!n.secret,summary:n.secret?"KYNVER_CRON_SECRET present":"KYNVER_CRON_SECRET missing",remediation:"Run `kynver cron install` to generate and persist the shared secret."}),t.push({id:"env_file",ok:vs(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:vs(r)?`~/.kynver/.env present (${s.size} keys)`:"~/.kynver/.env missing",remediation:"Run `kynver cron install` to write ~/.kynver/.env."}),t.push({id:"cron_store",ok:vs(n.storePath),summary:vs(n.storePath)?`cron store present (${n.storePath})`:`cron store missing (${n.storePath})`,remediation:"Run `kynver cron install` to initialize the local store."});let a=(await Pr(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===kr);t.push({id:"watchdog_local",ok:!!a,summary:a?`watchdog entry in local store (${a.providerScheduleId})`:"watchdog entry not mirrored in local cron store",remediation:"Run `kynver cron install` (with API access) to register and mirror watchdog."}),t.push({id:"daemon_primary",ok:o.daemonPrimary,summary:o.daemonPrimary?"cron tick enabled with credentials (daemon-primary)":`cron primary=${o.primary}; tickEnabled=${o.env.tickEnabled}`,remediation:"Ensure KYNVER_CRON_TICK_ENABLED=1 and run `kynver daemon` (or enable the systemd user unit)."});let l=s.has("OPENCLAW_CRON_STORE_PATH")||s.has("OPENCLAW_CRON_SECRET")||s.has("OPENCLAW_CRON_FIRE_BASE_URL");return t.push({id:"legacy_openclaw_env",ok:!l,summary:l?"legacy OPENCLAW_CRON_* keys still present in ~/.kynver/.env":"no legacy OPENCLAW_CRON_* keys in env file",remediation:"Re-run `kynver cron install` to retire legacy aliases."}),{ok:t.every(u=>u.ok),checks:t}}O();qe();w();import{existsSync as hg}from"node:fs";import{createHash as bx}from"node:crypto";function tg(e){let r=JSON.stringify({cb:e.callbackPath,cron:e.cron??null,runAt:e.runAt??null,kind:e.kind,target:e.target,dedupeKey:e.dedupeKey??null});return`kc-cron:${bx("sha1").update(r).digest("hex").slice(0,16)}`}async function ja(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function ng(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await ja(s,t),a=await i.text(),l=null;try{l=JSON.parse(a)}catch{l=null}if(!i.ok)throw new Error(`list scheduler jobs failed (${i.status}): ${l?.error??a.slice(0,200)}`);return l?.items??[]}async function og(e,r,t,n,o={}){let s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/watchdog/ensure`,i={};n&&(i.cron=n),o.requireProvider&&(i.requireProvider=o.requireProvider);let a=await ja(s,t,{method:"POST",body:JSON.stringify(i)}),l=await a.text(),c=null;try{c=JSON.parse(l)}catch{c=null}if(!a.ok||!c?.job)throw new Error(`ensure watchdog failed (${a.status}): ${c?.error??l.slice(0,200)}`);return{job:c.job,route:c.route??`/api/agent-os/by-id/${r}/scheduler/fire`,dedupeKey:c.dedupeKey??kr,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function sg(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await ja(o,n,{method:"POST",body:"{}"});if(!s.ok){let i=await s.text();throw new Error(`cancel job ${t} failed (${s.status}): ${i.slice(0,200)}`)}}function ig(e,r,t=kr){return{kind:"watchdog",scheduleKind:"cron",cron:r,callbackPath:`/api/agent-os/by-id/${e}/scheduler/fire`,payload:{source:"agent-os.watchdog-schedule",agentOsId:e},target:{agentOsId:e},description:"Watchdog board sweep (repair loop)",dedupeKey:t}}function ag(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===kr&&r.provider==="qstash"&&r.status!=="cancelled")}function vx(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===kr&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function lg(e){return vx(e)?{allowed:!0}:{allowed:!1,reason:"Cannot cancel QStash watchdog until hosted KYNVER_SCHEDULER_PROVIDER=kynver-cron is live and a kynver-cron watchdog row exists. Set Vercel env, redeploy, re-run `kynver cron install`, then `--confirm-qstash-removal`."}}import{randomBytes as Sx}from"node:crypto";function wx(){return Sx(32).toString("base64url")}function cg(e=hr){let r=ai();if(r)return{secret:r,generated:!1,source:"env"};let n=bs(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:wx(),generated:!0,source:"generated"}}import{realpathSync as Cx}from"node:fs";function Ss(e=process.argv[1]){let r=process.env.KYNVER_BIN?.trim();if(r)return r;let t=e?.trim();if(!t)return"kynver";try{return Cx.native(t)}catch{return t}}function ug(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}import{existsSync as xx,mkdirSync as Px,writeFileSync as Ex}from"node:fs";import{homedir as Ax}from"node:os";import mg from"node:path";import{spawnSync as pg}from"node:child_process";import{spawnSync as _x}from"node:child_process";var Va="1.5G";var Ln;function Wn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:Ln!==void 0?Ln:process.platform!=="linux"?(Ln=!1,!1):(Ln=_x("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,Ln)}function Ga(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??Va,t=e.memorySwapMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_SWAP_MAX??"2G",n=["systemd-run","--scope","--collect","-p",`MemoryMax=${r}`,"-p",`MemorySwapMax=${t}`];return e.cwd&&n.push("--working-directory",e.cwd),n.push("--",...e.command),n}var Ya="kynver-cron-daemon.service";function Ix(){return mg.join(Ax(),".config","systemd","user")}function Ox(e){let r=ug(e.kynverBin?.trim()||Ss());return["[Unit]","Description=Kynver AgentOS daemon (pipeline + cron tick)","After=network-online.target","","[Service]","Type=simple",`EnvironmentFile=${e.envFilePath}`,`ExecStart=${r} daemon --run ${e.runId} --agent-os-id ${e.agentOsId} --execute`,"Restart=on-failure","RestartSec=10","","[Install]","WantedBy=default.target",""].join(`
|
|
49
|
+
`)}function fg(e,r){if(!Wn())return{supported:!1,unitPath:null,written:!1,enabled:!1,started:!1,note:process.platform==="linux"?"systemd-run not available \u2014 install user service manually or run `kynver daemon` under your supervisor.":"systemd user units are only supported on Linux; use `kynver daemon` manually on macOS/Windows."};let t=Ix(),n=mg.join(t,Ya),o=Ox(e);if(!r)return{supported:!0,unitPath:n,written:!1,enabled:!1,started:!1,note:"Dry-run \u2014 pass --execute to write and enable the user unit."};Px(t,{recursive:!0});let s=xx(n);Ex(n,o,"utf8");let i=pg("systemctl",["--user","daemon-reload"],{encoding:"utf8"});if(i.status!==0)return{supported:!0,unitPath:n,written:!0,enabled:!1,started:!1,note:`Wrote ${n} but systemctl --user daemon-reload failed: ${i.stderr||i.stdout}`};let a=pg("systemctl",["--user","enable","--now",Ya],{encoding:"utf8"});return{supported:!0,unitPath:n,written:!s||!0,enabled:a.status===0,started:a.status===0,note:a.status===0?`Enabled and started ${Ya}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}B();function gg(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=te().runsDir;return hg(t)?ee().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function ws(e={}){let r=e.execute!==!1,t=b(),n=Ye(e.apiBaseUrl?.trim()||t.apiBaseUrl?.trim()||process.env.KYNVER_API_URL?.trim()||""),o=e.agentOsId?.trim()||t.agentOsId?.trim()||process.env.KYNVER_AGENT_OS_ID?.trim()||"",s=cg(),i=rg({config:t,apiBaseUrl:n,agentOsId:o,cronSecret:s.secret,defaultDaemonRunId:e.runId?.trim()||t.defaultDaemonRunId,installSystemd:e.installSystemd===!0}),a=[...i.prerequisites],l={ok:!1,dryRun:!r,plan:i,secretGenerated:s.generated,configPath:Y(i.configPath),storeInitialized:!1,blockers:a};if(a.length)return l;if(r){let c=eg(i.envUpdates,{filePath:i.envFilePath,removeKeys:i.envRemovals});l.envFile={path:Y(c.path),changed:c.changed,keysWritten:c.keysWritten};let u={...t,...i.configUpdates},d=gg(u,e.runId);d&&(u.defaultDaemonRunId=d),ze(u),process.env.KYNVER_API_URL=n,process.env.KYNVER_CRON_SECRET=s.secret,process.env.KYNVER_CRON_STORE_PATH=i.storePath,process.env.KYNVER_CRON_TICK_ENABLED="1";let f=await au(i.storePath);l.storeInitialized=f.created||hg(i.storePath);let m=Z();if(m)try{let p=await xr(o,{baseUrl:n,apiKey:m});_r(o,p)}catch{}if(!e.skipWatchdog)if(!m)l.watchdog={error:"KYNVER_API_KEY required to register watchdog on server"},a.push("login \u2014 run `kynver login --api-key \u2026` to register watchdog remotely");else try{let p=await og(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=ig(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:tg(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await iu(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await ng(n,o,m),S=ag(h),A=["Phase 1 (local): `kynver cron install` writes box env/store and may fail remote watchdog until Vercel cutover.","Phase 2 (hosted): set KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET on Vercel, redeploy, re-run install.","Phase 3 (cleanup): `kynver cron install --confirm-qstash-removal` after a kynver-cron watchdog row exists.","Analyst/market QStash schedules are never touched by this installer."],W=[];if(S.length)if(e.confirmQstashRemoval){let P=lg(h);if(!P.allowed)a.push(P.reason);else for(let v of S)await sg(n,o,v.id,m),W.push(v.id)}else a.push(`${S.length} QStash watchdog job(s) still active \u2014 complete Vercel cutover (KYNVER_SCHEDULER_PROVIDER=kynver-cron + KYNVER_CRON_SECRET), re-run install, then --confirm-qstash-removal`);l.qstashWatchdog={found:S.map(P=>({id:P.id,provider:P.provider,status:P.status})),removed:W,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=gg({...t,...i.configUpdates},e.runId);if(!p)l.systemd={supported:i.systemdSupported,unitPath:null,written:!1,enabled:!1,started:!1,note:"No harness run found \u2014 run `kynver run create` first or pass --run <runId>."},a.push("harness run \u2014 create a run before installing systemd unit");else{try{U(p)}catch{a.push(`harness run ${p} not found`)}l.systemd=fg({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:Ss()},r)}}if(!e.skipTestFire&&a.length===0){let p=await mt({agentOsIdFilter:o});l.testFire={fired:p.fired,errors:p.errors},p.errors>0&&a.push(`test fire reported ${p.errors} error(s) \u2014 check server KYNVER_CRON_SECRET matches`)}else e.skipTestFire&&(l.testFire={fired:0,errors:0,skipped:!0});l.verify=await Nt({config:b(),envFilePath:i.envFilePath}),l.blockers=a,l.ok=a.length===0&&(l.verify?.ok??!1)}else l.ok=a.length===0;return l}var Nx=["deployment_provider","cron_secret","env_file","cron_store"];function kg(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function Tx(e){let r=kg(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=kg(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function Dx(e){if(!Tx(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await Nt({config:e})).checks.filter(n=>Nx.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function Mx(e){let r=["Run `kynver cron install` on this box."];for(let t of e)t.remediation&&r.push(` \u2022 ${t.id}: ${t.remediation}`);return r}function Ja(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function yg(e){if(Ja(e.args.skipCron))return{action:"skipped"};let r=await Dx(e.config);if(!r.expectsKynverCron||r.ready)return{action:"ready"};console.log(""),console.log(" Local Kynver Cron is not ready \u2014 running `kynver cron install`\u2026");let t=Ja(e.args.installSystemd)||Ja(e.args["install-systemd"]),n=await ws({execute:!0,skipTestFire:!0,agentOsId:e.agentOsId,runId:e.runId,installSystemd:t});if(n.ok)return console.log(" Kynver Cron configured for this box."),console.log(""),{action:"installed",installOk:!0};console.log(""),console.log(" Cron install did not fully complete (daemon will still start):");for(let o of n.blockers)console.log(` ! ${o}`);if(n.plan.deploymentSteps.length){console.log(""),console.log(" Hosted deployment (complete on Vercel, then re-run install):");for(let o of n.plan.deploymentSteps)console.log(` - ${o}`)}for(let o of Mx(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function Bx(e,r){return e.filter(n=>n.repo===r&&!er.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Rg(e){pt();let r=b();(!Z()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await yo(e),r=b());let t=(typeof e.agentOsId=="string"?e.agentOsId.trim():"")||r.agentOsId?.trim()||"";t||(console.error("No AgentOS workspace configured \u2014 run `kynver bootstrap` (or pass --agent-os-id)."),process.exit(1)),e.chatOauth===!0&&r.chatUseClaudeOauth!==!0&&(ze({...r,chatUseClaudeOauth:!0}),r=b(),console.log(" Chat: Claude Code OAuth opt-in saved (delegated turns may use your local subscription)."));let n=(typeof e.repo=="string"?e.repo.trim():"")||r.defaultRepo?.trim()||Ce()?.repo||"";n||(console.error("No repo configured \u2014 pass --repo /path/to/repo or run `kynver setup --discover-repo`."),process.exit(1));let o=typeof e.run=="string"&&e.run.trim()?e.run.trim():"";o||(o=Bx(ee(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=ys({...e,repo:n,name:"agent"}).runId),await yg({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${Ux.hostname()} \u2014 agent coming online`),console.log(` workspace: ${t}`),console.log(` repo: ${n}`),console.log(` run: ${o}`),console.log(" Ctrl-C stops the agent. (Advanced control: `kynver daemon --help`.)"),console.log("");let s={...e,run:o,agentOsId:t};if(hs(s)){await ks(s,Lx(o,t,e));return}await gs(s)}function Lx(e,r,t){let n=["daemon","--run",e,"--agent-os-id",r];return typeof t.intervalMs=="string"&&t.intervalMs.trim()&&n.push("--interval-ms",t.intervalMs.trim()),(t.execute===!1||t.execute==="false")&&n.push("--execute","false"),typeof t.stallMs=="string"&&t.stallMs.trim()&&n.push("--stall-ms",t.stallMs.trim()),n}B();B();G();import{existsSync as Wx,rmSync as Hx}from"node:fs";import qa from"node:path";function Fx(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function $x(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function Kx(e){let{runId:r,workerName:t}=Ke(e),n=fe(r,t),o=[...$x(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=qa.resolve(n.worktreePath),i=[];for(let c of o){let u=Fx(c),d=qa.resolve(s,u);if(!d.startsWith(s+qa.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!Wx(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};Hx(d,{recursive:!0,force:!0}),i.push(u)}let a=Array.isArray(n.disposableArtifactsRemoved)?n.disposableArtifactsRemoved.filter(c=>typeof c=="string"):[];n.disposableArtifactsRemoved=[...new Set([...a,...i])],V(n.runId,n);let l=T(n);return{ok:!0,removed:i,...l.changedFiles.length?{reason:"worktree still has other changes"}:{}}}function bg(e){let r=Kx(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import uP from"node:path";ro();var jx=/--max-old-space-size=(\d+)/;function Vx(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function za(){return Vx(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Xa(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(jx.test(t))return r;let o=`--max-old-space-size=${za()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Tt(e=za()){return`--max-old-space-size=${e}`}O();import{spawnSync as Gx}from"node:child_process";ro();function Cs(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Sg(e=b()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Cs(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Cs(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Cs(e.perWorkerMemBytes,1610612736),reserveBytes:t??Cs(e.memReserveBytes,2147483648)}}var _s=0;function el(){_s+=1}function rl(){_s=Math.max(0,_s-1)}function Dt(e={}){let r={...Sg(),...e},t=e.memAvailableBytes??jt(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:_s,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function Yx(e){e<=0||Gx(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function tl(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=Dt({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)Yx(Math.min(r,n-Date.now())),o=Dt({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as aP}from"node:child_process";w();import{closeSync as qx,existsSync as nl,mkdirSync as zx,openSync as Xx,readdirSync as _g,readFileSync as Qx,unlinkSync as sl,writeFileSync as Zx}from"node:fs";import il from"node:path";import{mkdirSync as Jx}from"node:fs";import wg from"node:path";function Cg(){return wg.join(qo(),"heavy-verification")}function Hn(){return wg.join(Cg(),"slots")}function Mt(){let e=Hn();return Jx(e,{recursive:!0}),e}var Ut=120*6e4,ol=1;function eP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function al(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function Fn(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?eP(e,ol):ol}function rP(e){return`slot-${e}`}function xg(e,r=Hn()){return il.join(r,`${e}.json`)}function ll(e){if(!nl(e))return null;try{let r=JSON.parse(Qx(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 xs(e,r=Ut){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function tP(e,r){let t=ll(e);if(xs(t,r))try{sl(e)}catch{}}function nP(e){return zx(e,{recursive:!0}),e}function Es(e={}){let r=nP(e.slotsDir??Mt()),t=e.staleMs??Ut,n=0;for(let o of _g(r)){if(!o.endsWith(".json"))continue;let s=il.join(r,o),i=nl(s);tP(s,t),i&&!nl(s)&&(n+=1)}return n}function Pg(e={}){let r=e.slotsDir??Mt(),t=e.staleMs??Ut;Es({slotsDir:r,staleMs:t});let n=[];for(let o of _g(r)){if(!o.endsWith(".json"))continue;let s=ll(il.join(r,o));s&&!xs(s,t)&&n.push(s)}return n}function Ps(e={}){return Pg(e).length}function As(e,r={}){if(al())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Fn(),reason:null};let t=r.slotsDir??Mt(),n=r.staleMs??Ut,o=r.maxSlots??Fn();Es({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=rP(i),l=xg(a,t),c=ll(l);if(c&&xs(c,n))try{sl(l)}catch{}else if(c&&!xs(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=Xx(l,"wx");Zx(d,JSON.stringify(u,null,2),"utf8"),qx(d);let f=Ps({slotsDir:t,staleMs:n});return{admitted:!0,slotId:a,activeSlots:f,maxSlots:o,reason:null}}catch(d){if(d.code==="EEXIST")continue;throw d}}let s=Ps({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function $n(e,r={}){if(!e)return;let t=xg(e,r.slotsDir??Hn());try{sl(t)}catch{}}function Is(e,r={}){if(al())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:Fn(),reason:null};let t=r.slotsDir??Mt(),n=r.staleMs??Ut,o=r.maxSlots??Fn();Es({slotsDir:t,staleMs:n});let s=Ps({slotsDir:t,staleMs:n}),i=s<o;return{admitted:i,slotId:null,activeSlots:s,maxSlots:o,reason:i?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}import{spawnSync as oP}from"node:child_process";function sP(e){e<=0||oP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Os(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=As(e,n);for(;!s.admitted&&Date.now()<o;)sP(Math.min(t,o-Date.now())),s=As(e,n);return s}be();import cl from"node:path";function iP(e){let r=ar(me()),t=cl.relative(r,cl.resolve(e));return t.length>0&&!t.startsWith("..")&&!cl.isAbsolute(t)}function Eg(e){return iP(e)?(typeof process.getuid=="function"?process.getuid():null)===0?{ok:!1,reason:"Refusing build/install as root inside a harness worktree \u2014 generated caches become root-owned and block daemon cleanup. Run kynver daemon and workers as the harness owner (never sudo kynver)."}:{ok:!0}:{ok:!0}}function lP(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Ag(e,r){let t=aP(e[0],e.slice(1),{cwd:r.cwd,env:r.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:r.shell,timeout:r.timeoutMs});return{exitCode:t.status??1,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}function ul(e){let r=e.waitForAdmissionMs??6e5,t=r>0?Os(e.command,r):cP(e.command);if(!t.admitted)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason??"heavy verification gate denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Tt(),admission:Dt(),verificationGate:t,command:e.command};let n=t.slotId,o=r>0?tl(r):Dt();if(!o.admitted)return $n(n),{ok:!1,exitCode:1,stdout:"",stderr:o.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Tt(),admission:o,verificationGate:t,command:e.command};let s=Eg(e.cwd);if(!s.ok)return $n(n),{ok:!1,exitCode:1,stdout:"",stderr:s.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:Tt(),admission:o,verificationGate:t,command:e.command};let i=Xa({...process.env,...e.env}),a=Tt(),l=Wn();el();try{let c;if(l){let u=Ga({cwd:e.cwd,command:["/usr/bin/env",...lP(i),"/bin/bash","-lc",e.command]});c=Ag(u,{cwd:e.cwd,env:i,timeoutMs:e.timeoutMs})}else c=Ag([e.command],{cwd:e.cwd,env:i,shell:!0,timeoutMs:e.timeoutMs});return{ok:c.exitCode===0,exitCode:c.exitCode,stdout:c.stdout,stderr:c.stderr,admitted:!0,wrappedWithSystemd:l,nodeOptionsFlag:a,admission:o,verificationGate:t,command:e.command}}finally{rl(),$n(n)}}function cP(e){let r=Os(e,0);return r.admitted?r:{...Is(e),slotId:null}}var dl=["npm run typecheck","npm run test"];function Ns(e,r=dl,t={}){let n=[],o=!0;for(let s of r){let i=ul({cwd:e,command:s,waitForAdmissionMs:t.waitForAdmissionMs,timeoutMs:t.timeoutMs});n.push({command:s,result:i}),i.ok||(o=!1)}return{passed:o,steps:n}}w();function Ig(e){let r=e.indexOf(":");if(r<=0)throw new Error(`invalid --evidence ${e} (expected type:value)`);return{type:e.slice(0,r),value:e.slice(r+1)}}async function Og(e){let r=N(e.plan?String(e.plan):void 0,"plan"),t=(e.agentOsId?String(e.agentOsId):b().agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=N(e.role?String(e.role):void 0,"role"),o=N(e.status?String(e.status):void 0,"status"),s=[],i=e.evidence;if(Array.isArray(i))for(let A of i)s.push(Ig(String(A)));else typeof i=="string"&&s.push(Ig(i));let a=L(e.baseUrl?String(e.baseUrl):void 0),l=await K(e.secret?String(e.secret):void 0,t,{baseUrl:a}),c=`${a}/api/agent-os/by-id/${encodeURIComponent(t)}/plans/${encodeURIComponent(r)}/progress-events`,u=b(),f=`provider:${xo(u.workerProvider,Ze)}`,p=(e.proposed===!0||e.proposed==="true"?!0:e.proposed===!1||e.proposed==="false"?!1:void 0)??(o!=="done"&&(n==="implementer"||n==="repair_implementer")),g={rowKey:e.row?String(e.row):void 0,rowId:e.rowId?String(e.rowId):void 0,taskId:e.task?String(e.task):void 0,reviewTaskId:e.reviewTask?String(e.reviewTask):void 0,roleLane:n,status:o,note:e.note?String(e.note):void 0,remainingWork:e.remaining?String(e.remaining):void 0,evidence:s.length?s:void 0,executorRef:e.executorRef?String(e.executorRef):f};p!==void 0&&(g.proposed=p);let k=await fetch(c,{method:"POST",headers:Ie(l),body:JSON.stringify(g)}),h=await k.text(),S=null;try{S=JSON.parse(h)}catch{S=h}k.ok||(console.error(JSON.stringify({httpStatus:k.status,response:S},null,2)),process.exit(1)),console.log(JSON.stringify(S,null,2))}function dP(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=uP.resolve(r),n=Ns(t),o=e.json===!0||e.json==="true",s={passed:n.passed,worktree:t,steps:n.steps};console.log(o?JSON.stringify(s,null,2):n.passed?"local plan verify passed":"local plan verify failed"),n.passed||process.exit(1)}async function Ng(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){dP(e);return}let n=b().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=L(e.baseUrl?String(e.baseUrl):void 0),s=process.env.KYNVER_API_KEY,i={"Content-Type":"application/json"};s&&(i.Authorization=`Bearer ${s}`);let a=`${o}/api/agent-os/${encodeURIComponent(n)}/plans/${encodeURIComponent(r)}/verify`,l=await fetch(a,{method:"POST",headers:i,body:JSON.stringify({worktreePath:e.worktree?String(e.worktree):void 0,taskId:e.task?String(e.task):void 0,humanOverride:e.humanOverride===!0||e.humanOverride==="true"})}),c=await l.text(),u=null;try{u=JSON.parse(c)}catch{u=c}l.ok||(console.error(JSON.stringify({httpStatus:l.status,response:u},null,2)),process.exit(1)),console.log(JSON.stringify(u,null,2))}import pP from"node:path";w();function Tg(e){let r=pP.resolve(N(e.worktree?String(e.worktree):void 0,"worktree")),t=e.json===!0||e.json==="true"||e.emitJson===!0||e.emitJson==="true",n=[],o=e.command;if(Array.isArray(o))for(let a of o)n.push(String(a));else typeof o=="string"&&n.push(o);let s=Ns(r,n.length?n:dl,{waitForAdmissionMs:e.waitForAdmissionMs?Number(e.waitForAdmissionMs):void 0,timeoutMs:e.timeoutMs?Number(e.timeoutMs):void 0}),i={passed:s.passed,worktree:r,steps:s.steps.map(a=>({command:a.command,ok:a.result.ok,exitCode:a.result.exitCode,admitted:a.result.admitted,wrappedWithSystemd:a.result.wrappedWithSystemd,nodeOptionsFlag:a.result.nodeOptionsFlag,admission:a.result.admission,verificationGate:a.result.verificationGate,stderr:a.result.stderr.slice(0,4e3)}))};if(t)console.log(JSON.stringify(i,null,2));else{console.log(s.passed?"harness verify passed":"harness verify failed");for(let a of i.steps)console.log(` ${a.ok?"\u2713":"\u2717"} ${a.command} (exit ${a.exitCode}, systemd=${a.wrappedWithSystemd})`),!a.ok&&a.stderr&&console.log(` ${a.stderr.split(`
|
|
50
|
+
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as mP}from"node:fs";w();var fP=["create","add_version","update_metadata"],gP=["approval_guard","auth","network","server","tool_interruption"];function hP(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:mP(r,"utf8"),bodyPathHint:r};let t=e.body?String(e.body):void 0;if(t)return{body:t};throw new Error("requires --body-file PATH or --body TEXT")}async function Dg(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!fP.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=b(),o=N(e.slug?String(e.slug):n.agentOsSlug,"slug (or agentOsSlug in ~/.kynver/config.json)"),s=N(e.title?String(e.title):void 0,"title"),{body:i,bodyPathHint:a}=hP(e);a&&wn(a)&&console.warn(JSON.stringify({warning:"/tmp-only body path is not durable; AgentOS persistence requires outbox or successful API write",bodyPathHint:a}));let l={operation:t,agentOsSlug:o,title:s,body:i,bodyPathHint:a,summary:e.summary?String(e.summary):void 0,planId:e.plan?String(e.plan):void 0,planSlug:e.planSlug?String(e.planSlug):void 0,changeSummary:e.changeSummary?String(e.changeSummary):void 0,author:e.author?String(e.author):void 0,model:e.model?String(e.model):void 0,maxRetries:e.maxRetries?Number(e.maxRetries):void 0,immediateFailure:kP(e)},c=await _n(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function kP(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!gP.includes(r))throw new Error(`invalid --failure-kind ${r}`);let t=e.failureMessage?String(e.failureMessage):`immediate failure (${r})`;return{kind:r,message:t}}async function Mg(){let e=wt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function Ug(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Zi({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function Bg(e){let r=e.execute===!0||e.execute==="true",t=e.skipFinalize===!0||e.skipFinalize==="true",n=e.accountBytes===!0||e.accountBytes==="true",o=e.compact===!0||e.compact==="true",s=e.nodeModulesAgeMs,i=s!=null&&s!=="",a=i?Number(s):void 0,l=e.worktreesAgeMs?Number(e.worktreesAgeMs):0,c=e.includeOrphans===!0||e.includeOrphans==="true",u=e.harnessRoot?String(e.harnessRoot):void 0,d=Da({execute:r,finalizeStaleRuns:!t,accountBytes:n,scanDependencyCaches:i,nodeModulesAgeMs:a!==void 0&&Number.isFinite(a)?a:i?216e5:void 0,worktreesAgeMs:Number.isFinite(l)?l:0,includeOrphans:c,harnessRoot:u});o&&d.compactSummary?console.log(JSON.stringify(d.compactSummary,null,2)):console.log(JSON.stringify(d,null,2)),r&&d.totals.removedPaths===0&&d.actions.length===0&&(process.exitCode=0)}function yr(e,r=2400){if(e==null)return;let n=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(n)return n.length<=r?n:`${n.slice(0,r-1).trimEnd()}\u2026`}function Ts(e){let r=[],t=typeof e.monitorId=="string"?e.monitorId:void 0;if(r.push(t?`Harness monitor tick \xB7 ${e.runId} (${t})`:`Harness monitor tick \xB7 ${e.runId}`),!e.workers.length)return r.push("No workers in scope for this poll."),{primary:r.join(`
|
|
51
|
+
`),diagnostic:yr(e)};for(let i of e.workers){let a=i.autoComplete.eligible?"eligible for auto-complete":"not auto-completing",l=i.autoComplete.blockers.length>0?` (${i.autoComplete.blockers.slice(0,2).join("; ")})`:"";r.push(`\u2022 ${i.worker}: ${i.workerStatus}, ${i.health}${i.healthReason?` \u2014 ${i.healthReason}`:""}; ${a}${l}`),i.taskStatus&&r.push(` Board task: ${i.taskStatus}${i.leaseOwner?` (lease: ${i.leaseOwner})`:""}`)}let n=e.autoCompleted?.filter(i=>i.outcome==="completed"&&i.ok)??[],o=e.autoCompleted?.filter(i=>!i.ok&&i.outcome!=="skipped")??[];n.length&&r.push(`Auto-completed: ${n.map(i=>i.worker).join(", ")} \u2014 AgentOS completion should be posted.`),o.length&&r.push(`Auto-complete blocked: ${o.map(i=>`${i.worker}${i.reason?` (${i.reason})`:""}`).join("; ")}`),e.leaseRenewal?.failed?.length&&r.push(`Lease renew failed for: ${e.leaseRenewal.failed.map(i=>i.worker).join(", ")}`);let s=e.workers.length>0&&e.workers.every(i=>i.autoComplete.terminalVerified)&&(e.autoCompleted?.every(i=>i.ok||i.outcome==="skipped")??!0);return r.push(s?"Next: monitor loop should stop \u2014 all workers terminal and handled.":"Next: monitor will poll again until workers are terminal-verified or max time elapses."),{primary:r.join(`
|
|
52
|
+
`),diagnostic:yr(e)}}import _P from"node:path";B();G();w();G();w();function Lg(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Ei(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>it?{health:"stale",reason:`heartbeat older than ${Math.floor(it/1e3)}s`}:t.alive&&r.pid&&!$(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}be();w();import{existsSync as Wg,mkdirSync as SP,readdirSync as wP,unlinkSync as CP}from"node:fs";import pl from"node:path";function Hg(){let{harnessRoot:e}=zr(),r=pl.join(e,"monitors");return SP(r,{recursive:!0}),r}function Bt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function ml(e){return pl.join(Hg(),`${e}.json`)}function Lt(e){return _(ml(e),void 0)}function Wt(e){le(ml(e.monitorId),e)}function Fg(e){let r=ml(e);return Wg(r)?(CP(r),!0):!1}function $g(){let e=Hg();if(!Wg(e))return[];let r=[];for(let t of wP(e)){if(!t.endsWith(".json"))continue;let n=_(pl.join(e,t),void 0);n?.monitorId&&r.push({monitorId:n.monitorId,runId:n.runId,workerName:n.workerName,agentOsId:n.agentOsId,pid:n.pid,alive:n.pid?$(n.pid):!1,startedAt:n.startedAt,pollMs:n.pollMs,logPath:n.logPath})}return r.sort((t,n)=>t.startedAt.localeCompare(n.startedAt))}G();function fl(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Bo(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),at(t)&&n.push(t.attention.reason||"landing gate blocked");let o=re(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}O();async function Kg(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=L(e.baseUrl);try{let o=await K(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await q(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}function jg(e,r){return _(_P.join(x(e),"workers",R(r),"worker.json"),void 0)}function Vg(e,r){let t=U(e),n=Object.keys(t.workers||{});if(!r)return n;let o=R(r);return n.filter(s=>R(s)===o)}function Gg(e,r){let t=U(e.runId),n=T(e,{base:t.base,baseCommit:t.baseCommit}),o=e.taskId?r.get(e.taskId)??null:null,s=Lg({worker:e,status:n,taskLease:o}),i=fl({worker:e,status:n});return{runId:e.runId,worker:e.name,health:s.health,healthReason:s.reason,workerStatus:n.status,attentionState:n.attention.state,attentionReason:n.attention.reason,alive:n.alive,taskId:e.taskId,leaseOwner:o?.leaseOwner??void 0,taskStatus:o?.status,autoComplete:i,status:n}}async function Kn(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=e.agentOsId?String(e.agentOsId):void 0,o=U(r),s=Vg(r,t),i=[];for(let p of s){let g=jg(r,p);g&&i.push(g)}let a=n||i.map(p=>p.agentOsId).find(p=>typeof p=="string"&&p.trim())||void 0,l=i.map(p=>p.taskId).filter(p=>!!p),c=await Kg({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>Gg(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await To(r,{...e,agentOsId:a}));let f=[];if(e.autoComplete===!0||e.autoComplete==="true")for(let p of u){if(!p.autoComplete.eligible){f.push({worker:p.worker,outcome:"skipped",ok:!1,reason:p.autoComplete.blockers.join("; ")||"not eligible"});continue}let g=await Rt({run:r,name:p.worker,...a?{agentOsId:a}:{},...e.baseUrl?{baseUrl:String(e.baseUrl)}:{},...e.secret?{secret:String(e.secret)}:{}});f.push({worker:p.worker,outcome:g.outcome,ok:g.outcome==="completed",reason:g.reason})}return{runId:r,agentOsId:a,workers:u,leaseRenewal:d,autoCompleted:f}}function Yg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Vg(r,t),o=[];for(let s of n){let i=jg(r,s);i&&o.push(Gg(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function gl(){return $g()}function Jg(e){let r=String(e.run||"");N(r,"--run");let t=Bt(r,e.name?String(e.name):void 0),n=Lt(t);if(!n)return{monitorId:t,stopped:!1};if(n.pid&&$(n.pid))try{process.kill(n.pid,"SIGTERM")}catch{}return n.stoppedAt=new Date().toISOString(),Wt(n),Fg(t),{monitorId:t,stopped:!0,pid:n.pid}}async function hl(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=fe(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=fl({worker:n,status:s});if(!i.eligible){console.log(JSON.stringify({runId:r,worker:t,outcome:"blocked",blockers:i.blockers,terminalVerified:i.terminalVerified},null,2)),process.exitCode=1;return}let a=await Rt({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var xP=5e3,PP=360*60*1e3;async function qg(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):xP,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):PP,o=Date.now();for(;Date.now()-o<=n;){let s=r?Lt(r):void 0;if(s?.stoppedAt)break;let i=await Kn({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=Ts({monitorId:r,phase:"tick",...i});if(console.log(a.primary),a.diagnostic&&console.error(`[monitor diagnostic] ${a.diagnostic}`),i.workers.length>0&&i.workers.every(c=>c.autoComplete.terminalVerified&&(c.autoComplete.eligible||c.autoComplete.blockers.some(u=>u.includes("already acknowledged"))))&&i.autoCompleted.every(c=>c.ok||c.outcome==="skipped")){r&&s&&(s.stoppedAt=new Date().toISOString(),Wt(s));break}Rr(t)}}w();be();import{spawn as EP}from"node:child_process";import{closeSync as zg,existsSync as AP,openSync as IP}from"node:fs";import Xg from"node:path";import{fileURLToPath as OP}from"node:url";function NP(){return Xg.join(OP(new URL(".",import.meta.url)),"cli.js")}function Qg(e){let r=e.cliPath??NP();if(!AP(r))return;let t=Bt(e.runId,e.workerName),{harnessRoot:n}=zr(),o=Xg.join(n,"monitors",`${t}.log`),s;try{s=IP(o,"a")}catch{s=void 0}let i=e.nodeExecutable??process.execPath,a=e.pollMs??5e3,l=[r,"monitor","run-loop","--run",e.runId,"--monitor-id",t,"--poll-ms",String(a),"--auto-complete","true","--renew-leases","true"];e.workerName&&l.push("--name",e.workerName),e.agentOsId&&l.push("--agent-os-id",e.agentOsId),e.baseUrl&&l.push("--base-url",e.baseUrl),e.secret&&l.push("--secret",e.secret);let c=["ignore",s??"ignore",s??"ignore"];try{let u=EP(i,l,ae({detached:!0,stdio:c,env:process.env}));s!==void 0&&zg(s),u.unref();let d={monitorId:t,runId:e.runId,workerName:e.workerName,agentOsId:e.agentOsId,pid:u.pid,startedAt:new Date().toISOString(),pollMs:a,logPath:o};return Wt(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{zg(s)}catch{}return}}w();async function Zg(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Bt(r,t),o=Lt(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Qg({runId:r,workerName:t,agentOsId:e.agentOsId?String(e.agentOsId):void 0,pollMs:Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):void 0,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0});if(!s)throw new Error("failed to spawn monitor sidecar (cli.js missing or spawn error)");return{monitorId:n,session:s.session,spawned:!0,pid:s.pid}}async function eh(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await Kn({...e,autoComplete:!1}):Yg(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:gl()},null,2))}function rh(e){console.log(JSON.stringify(Jg(e),null,2))}function th(){console.log(JSON.stringify({monitors:gl()},null,2))}async function nh(e){await qg(e)}async function oh(e){let r=await Kn(e);console.log(JSON.stringify(r,null,2))}import{existsSync as TP,readFileSync as DP}from"node:fs";import{dirname as kl,join as ih}from"node:path";import{fileURLToPath as sh}from"node:url";function MP(e){let r=kl(sh(e));for(let t=0;t<6;t+=1){if(TP(ih(r,"package.json")))return r;let n=kl(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${kl(sh(e))}`)}function ah(e=import.meta.url){let r=ih(MP(e),"package.json"),t=JSON.parse(DP(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var Ds=ah();function UP(e){return e.some(r=>r==="--version"||r==="-v")}function BP(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function lh(e,r=import.meta.url,t){return UP(e)?(BP(ah(r),t),!0):!1}function LP(e){let r={};for(let[t,n]of Object.entries(e))n?.version&&(r[t]={version:n.version,source:"installed",path:n.path});return r}async function WP(e={}){let[r,t]=await Promise.all([ms(),Promise.resolve(kf({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:Ds;return n["@kynver-app/runtime"]={version:o,source:"self"},e.selfPackageName&&e.selfVersion&&e.selfPackageName!=="@kynver-app/runtime"&&(n[e.selfPackageName]={version:e.selfVersion,source:"self"}),{installed:LP(r),repo:t,self:n}}async function ch(e={}){let r=await WP(e);return Rf(r)}function uh(e,r){return e?e==="daemon"||e==="start"||e==="worker"||e==="monitor"||e==="run"&&(r==="dispatch"||r==="sweep"||r==="reconcile"||r==="unblock")||e==="cron"&&r==="tick":!1}w();function HP(e){let r=e.trim();return r?$a().find(n=>n.name===r&&n.status!=="completed")??null:null}function dh(e){let r=String(N(String(e.name||""),"--name")),t=HP(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}B();G();w();O();import FP from"node:path";function jn(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function $P(e){let r=L(e.baseUrl?String(e.baseUrl):void 0),t=e.agentOsId?String(e.agentOsId).trim():null,n=e.dryRun===!0||e.dryRun==="true",o=[],s=[],i=[];for(let a of ee())for(let l of Object.keys(a.workers??{})){let c=FP.join(x(a.id),"workers",R(l),"worker.json"),u=_(c,void 0);if(!u){s.push(jn(a.id,l,"","","","worker.json missing"));continue}let d=u.taskId??"",f=u.agentOsId??"",m=u.leaseOwner??"";if(!u.dispatched||!d||!f||!m){s.push(jn(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(jn(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(jn(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(jn(a.id,l,d,f,m,"worker process is still alive"));continue}if(n){o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dry-run: would release dead dispatched worker lease"});continue}try{let g=await K(e.secret?String(e.secret):void 0,f,{baseUrl:r}),k=`${r}/api/agent-os/by-id/${encodeURIComponent(f)}/tasks/${encodeURIComponent(d)}/release`,h=await q(k,g,{agentOsId:f,leaseOwner:m},{agentOsId:f,baseUrl:r});h.ok===!0||h.response?.ok===!0?o.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"released",reason:"dead dispatched worker lease released; task requeued"}):s.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"skipped",reason:`release returned ok:false (likely owner mismatch or already released): HTTP ${h.status}`})}catch(g){i.push({runId:a.id,worker:l,taskId:d,agentOsId:f,leaseOwner:m,action:"error",reason:g.message})}}return{dryRun:n,released:o,skipped:s,errors:i}}async function ph(e){let r=await $P(e),t={ok:r.errors.length===0,dryRun:r.dryRun,released:r.released.length,skipped:r.skipped.length,errors:r.errors.length,details:r};console.log(JSON.stringify(t,null,2)),r.errors.length>0&&process.exit(1)}qe();O();import KP from"node:path";import{homedir as jP}from"node:os";var yl=KP.join(jP(),".kynver","config.json");function Rl(e){let r=b(),t=Ce({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(yl),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:Y(yl),resolved:An(t),config:ct(r)};let n=Up(t.repo,r),o=An({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(yl),resolved:o,config:ct(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function mh(e=!1){let r=Rl();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function fh(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}import vh from"node:path";qe();O();import{accessSync as VP,constants as GP,existsSync as bl,readFileSync as YP}from"node:fs";import{homedir as Ms}from"node:os";import Us from"node:path";import{spawnSync as JP}from"node:child_process";be();function gh(e,r){try{let t=JP(e,r,{encoding:"utf8"}),n=(t.stdout||"").trim(),o=(t.stderr||"").trim();return{ok:t.status===0,stdout:n,stderr:o,error:t.error?.message}}catch(t){return{ok:!1,stdout:"",stderr:"",error:t.message}}}function hh(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function qP(e){if(!bl(e))return!1;try{return VP(e,GP.W_OK),!0}catch{return!1}}var kh={packageVersion:()=>Ds,commandOnPath:e=>gh(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>gh(e,["--version"]),loadConfig:()=>b(),configFilePath:()=>Us.join(Ms(),".kynver","config.json"),credentialsFilePath:()=>Us.join(Ms(),".kynver","credentials"),readCredentials:()=>{let e=Us.join(Ms(),".kynver","credentials");if(!bl(e))return{hasApiKey:!1};try{let r=JSON.parse(YP(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:hh(r.runnerToken),runnerTokenAgentOsId:r.runnerTokenAgentOsId}}catch{return{hasApiKey:!1}}},envSnapshot:()=>({kynverApiUrl:process.env.KYNVER_API_URL?.trim()||void 0,openclawCronFireBaseUrl:process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||void 0,kynverRunnerTokenPrefix:hh(process.env.KYNVER_RUNNER_TOKEN),kynverRuntimeSecret:!!process.env.KYNVER_RUNTIME_SECRET?.trim(),openclawCronSecret:!!process.env.OPENCLAW_CRON_SECRET?.trim(),kynverHarnessRoot:process.env.KYNVER_HARNESS_ROOT?.trim()||void 0,opusHarnessRoot:process.env.OPUS_HARNESS_ROOT?.trim()||void 0,kynverSchedulerProvider:process.env.KYNVER_SCHEDULER_PROVIDER?.trim()||void 0,openclawCronStorePath:!!(process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim()),kynverCronDaemonPrimary:Ro(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>me(),legacyOpenclawHarnessRoot:()=>Us.join(Ms(),".openclaw","harness"),pathExists:e=>bl(e),pathWritable:e=>qP(e)};function yh(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function zP(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Rh(e){return!!e.openclawCronStorePath}function XP(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function bh(e,r){let t={schedulerProvider:e.kynverSchedulerProvider??null,deploymentSchedulerProvider:r.deploymentSchedulerProvider??null,openclawCronStorePath:!!e.openclawCronStorePath,kynverCronDaemonPrimary:!!e.kynverCronDaemonPrimary},n=!!r.agentOsId?.trim()&&!!r.apiBaseUrl?.trim()&&r.hasScopedRunnerToken;if(XP(e,r)&&!yh(e,r)){let u=e.kynverSchedulerProvider==="qstash"?"KYNVER_SCHEDULER_PROVIDER=qstash on this host":"deploymentSchedulerProvider=qstash in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler cut over to QStash (${u})`,details:t}}if(zP(e,r)&&!yh(e,r)){if(Rh(e)&&e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=e.kynverSchedulerProvider==="kynver-cron"?"KYNVER_SCHEDULER_PROVIDER=kynver-cron on this host":"deploymentSchedulerProvider=kynver-cron in ~/.kynver/config.json";return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`AgentOS scheduler owned by Kynver Cron (${u})`,details:t}}if(Rh(e)){if(e.kynverCronDaemonPrimary&&n)return{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"Kynver Cron local store present; `kynver daemon` owns schedule fires (kynver-cron tick loop)",details:{...t,dispatchPath:"kynver-daemon-cron-tick",kynverCronDaemonPrimary:!0}};let u=[];return e.openclawCronStorePath&&u.push("KYNVER_CRON_STORE_PATH or OPENCLAW_CRON_STORE_PATH set (local cron store)"),{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Local cron store without daemon tick (${u.join("; ")})`,remediation:"Run `kynver daemon` with KYNVER_CRON_SECRET + KYNVER_API_URL (or KYNVER_CRON_FIRE_BASE_URL) so the daemon-owned cron tick fires schedules. On hosted deploys use QStash (KYNVER_SCHEDULER_PROVIDER=qstash). Legacy OpenClaw cron env aliases still work during cutover.",details:t}}let o=e.kynverSchedulerProvider==="openclaw-cron",s=r.deploymentSchedulerProvider==="openclaw-cron",i=e.kynverSchedulerProvider==="qstash",a=!!e.qstashTokenPresent||!!e.kynverHostedDeployment,l=a&&!n,c=l&&e.kynverSchedulerProvider==="openclaw-cron";return s&&!o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"deploymentSchedulerProvider=openclaw-cron in ~/.kynver/config.json \u2014 migrate to kynver-cron or qstash",remediation:'Run `kynver scheduler attest-cutover` or set deploymentSchedulerProvider to "kynver-cron" or "qstash" in ~/.kynver/config.json.',details:t}:n&&o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 dispatch is owned by kynver daemon; unset the OpenClaw override",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:n?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:i?"Runner override qstash present; hosted dispatch still owned by kynver daemon pipeline-tick":"Hosted dispatch owned by kynver daemon (pipeline-tick \u2192 operator/tick); no OpenClaw cron on runner",details:{schedulerProvider:e.kynverSchedulerProvider??null,dispatchPath:"kynver-daemon-pipeline-tick",hostedDeployment:a}}:o?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"KYNVER_SCHEDULER_PROVIDER=openclaw-cron on this runner \u2014 hosted dispatch still depends on the OpenClaw local-cron adapter",remediation:"Unset KYNVER_SCHEDULER_PROVIDER on user runners (or set kynver-cron). Use `kynver daemon` (pipeline-tick \u2192 operator/tick). On the Kynver server set KYNVER_SCHEDULER_PROVIDER=qstash when QStash is configured.",details:{schedulerProvider:e.kynverSchedulerProvider??null,hostedDeployment:a}}:c?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment has KYNVER_SCHEDULER_PROVIDER=openclaw-cron \u2014 AgentOS scheduled ticks should use QStash or kynver-cron",remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server (or kynver-cron for Kynver-owned local scheduling). User runners use `kynver daemon` for dispatch and should not set a scheduler provider.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:l&&e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"QSTASH_TOKEN present; hosted scheduler auto-selects qstash (explicit KYNVER_SCHEDULER_PROVIDER=qstash optional)",details:{schedulerProvider:null,qstashTokenPresent:!0,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&!e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:"Hosted deployment with no QSTASH_TOKEN and no KYNVER_SCHEDULER_PROVIDER \u2014 kynver-cron is an in-process stub here and will NOT fire; no firing scheduler is configured",remediation:"Set QSTASH_TOKEN + KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server for hosted AgentOS schedules. Only use kynver-cron when a `kynver daemon` (or local cron store) actually owns firing on this box.",details:{schedulerProvider:null,resolvedFallback:"none",qstashTokenPresent:!1,hostedDeployment:a}}:l&&!e.qstashTokenPresent&&e.kynverSchedulerProvider&&e.kynverSchedulerProvider!=="qstash"&&e.kynverSchedulerProvider!=="kynver-cron"?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"warn",summary:`Hosted deployment without QSTASH_TOKEN (KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}) \u2014 use qstash or kynver-cron`,remediation:"Set QSTASH_TOKEN and KYNVER_SCHEDULER_PROVIDER=qstash on the Kynver server, or kynver-cron for Kynver-owned local scheduling. User runners use `kynver daemon` for dispatch.",details:{schedulerProvider:e.kynverSchedulerProvider??null,qstashTokenPresent:e.qstashTokenPresent??!1,hostedDeployment:a}}:e.kynverSchedulerProvider?{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:`KYNVER_SCHEDULER_PROVIDER=${e.kynverSchedulerProvider}`,details:{schedulerProvider:e.kynverSchedulerProvider??null}}:{id:"hotspot_openclaw_scheduler",label:"Scheduler provider (runtime daemon vs OpenClaw cron)",status:"pass",summary:"No KYNVER_SCHEDULER_PROVIDER on runner (expected) \u2014 finish runner setup so daemon pipeline-tick owns dispatch",details:{schedulerProvider:null,dispatchPath:"kynver-daemon-pipeline-tick-pending"}}}function QP(e){let r={pass:0,warn:0,fail:0};for(let t of e)for(let n of t.checks)r[n.status]+=1;return r}function ZP(e){let r=e.packageVersion(),t=e.commandOnPath("kynver"),n=t.ok&&t.stdout.length>0,o=n?t.stdout.split(/\r?\n/)[0]?.trim():void 0,s=o?Y(o):void 0,i=[{id:"cli_running_version",label:"Running @kynver-app/runtime version",status:"pass",summary:`@kynver-app/runtime ${r}`,details:{version:r}},{id:"cli_on_path",label:"kynver executable on PATH",status:n?"pass":"warn",summary:n?`Found ${s}`:"kynver not found on PATH (invoked via node/npx?)",remediation:n?void 0:"Install globally (`npm i -g @kynver-app/runtime`) or invoke via `npx @kynver-app/runtime`.",details:{path:s}}];if(n&&o){let a=e.kynverVersion(o),l=a.stdout.replace(/^kynver\s+/i,"").trim()||void 0,c=a.ok&&(!l||l===r);i.push({id:"cli_installed_version",label:"Installed kynver CLI version matches running package",status:c?"pass":"warn",summary:a.ok&&l?c?`Installed ${l}`:`Installed ${l} differs from running ${r}`:a.error?`Could not read installed version (${a.error})`:a.stderr||"Could not read installed version",remediation:c?void 0:"Reinstall or rebuild @kynver-app/runtime so PATH kynver matches the harness worktree version.",details:{installedVersion:l,runningVersion:r,path:s}})}return{id:"cli_package",label:"CLI / package",checks:i}}function eE(e){let r=e.configFilePath(),t=Y(r),n=e.pathExists(r),o=e.loadConfig(),s=[{id:"config_file",label:"~/.kynver/config.json present",status:n?"pass":"fail",summary:n?`Found ${t}`:`Missing ${t}`,remediation:n?void 0:"Run `kynver setup --api-base-url <url> --agent-os-id <id> --repo <path>`.",details:{configPath:t}}];if(n){let i=o.apiBaseUrl?.trim(),a=o.agentOsId?.trim(),l=Ce({config:o}),c=l?An(l):null,u=fh(l);s.push({id:"config_api_base_url",label:"Default API base URL",status:i?"pass":"warn",summary:i??"Not set in config (KYNVER_API_URL / --base-url required per command)",remediation:i?void 0:"Set `apiBaseUrl` via `kynver setup --api-base-url https://\u2026`.",details:{apiBaseUrl:i??null}},{id:"config_agent_os_id",label:"Default AgentOS id",status:a?"pass":"warn",summary:a??"Not set (pass --agent-os-id on daemon/dispatch/worker commands)",remediation:a?void 0:"Set `agentOsId` via `kynver setup --agent-os-id <uuid>`.",details:{agentOsId:a??null,agentOsSlug:o.agentOsSlug??null}},{id:"config_default_repo",label:"Default repo path",status:u.status,summary:l?l.persistedInConfig?`${c.defaultRepo} (config)`:`${c.defaultRepo} (${l.source}, not persisted in ~/.kynver/config.json)`:"Not set in ~/.kynver/config.json (`kynver run create` requires --repo)",remediation:u.remediation,details:{defaultRepo:c?.defaultRepo??null,source:c?.source??null,persistedInConfig:c?.persistedInConfig??!1,harnessRoot:o.harnessRoot?pe(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function rE(e){let t=e.loadConfig().agentOsId?.trim(),n=e.readCredentials(),o=e.envSnapshot(),s=e.credentialsFilePath(),i=Y(s),a=o.kynverRunnerTokenPrefix,l=n.runnerTokenPrefix,c=n.runnerTokenAgentOsId,u=!!l&&(!t||!c||c===t),d=!!a?.startsWith("krc1.")||u&&l?.startsWith("krc1.");return{id:"runner_token",label:"Runner token readiness",checks:[{id:"runner_token_scoped",label:"Scoped runner token (krc1.*) ready",status:d?"pass":"fail",summary:d?a?"KYNVER_RUNNER_TOKEN is set (scoped prefix shown)":`Saved scoped token for agentOsId ${c??t??"(unknown)"}`:"No scoped runner token for the configured AgentOS workspace",remediation:d?void 0:"Run `kynver login` then `kynver runner credential --agent-os-id <id>` (or `kynver setup` with API key).",details:{source:a?"env":l?"credentials":"none",tokenPrefix:a??(u?l:void 0),agentOsId:t??c??null,credentialsPath:i}},{id:"runner_token_agent_os_match",label:"Saved runner token matches configured agentOsId",status:!l||!t||!c||c===t?"pass":"warn",summary:!l||!c?"No saved token agentOsId to compare":t?c===t?"Saved token scoped to configured agentOsId":`Saved token is for ${c}, config expects ${t}`:"Config agentOsId unset \u2014 token scope not validated against config",remediation:l&&t&&c&&c!==t?"`kynver runner credential --agent-os-id <configured-id>` to mint a workspace-bound token.":void 0,details:{configuredAgentOsId:t??null,savedAgentOsId:c??null}},{id:"runner_api_key_for_refresh",label:"API key available for token refresh",status:n.hasApiKey||process.env.KYNVER_API_KEY?.trim()?"pass":"warn",summary:n.hasApiKey||process.env.KYNVER_API_KEY?"KYNVER API key present for runner credential mint/refresh":"No API key \u2014 401 callback recovery cannot auto-mint a replacement token",remediation:n.hasApiKey||process.env.KYNVER_API_KEY?void 0:"Run `kynver login --api-key \u2026`.",details:{credentialsPath:i,hasApiKey:n.hasApiKey||!!process.env.KYNVER_API_KEY}}]}}function tE(e){let r=e.commandOnPath("vercel"),t=r.ok,n=!!(process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()),o=!!process.env.VERCEL_TOKEN?.trim();return{id:"vercel_deploy_evidence",label:"Vercel deploy evidence",checks:[{id:"vercel_global_cli_absent",label:"Global Vercel CLI not installed",status:t?"warn":"pass",summary:t?`Global Vercel CLI found (${r.stdout||"on PATH"}) \u2014 uninstall after operator approval`:"No global Vercel CLI on PATH",remediation:t?"Uninstall global Vercel CLI (`npm uninstall -g vercel`) \u2014 use GitHub commit status or scoped VERCEL_TOKEN + REST API instead.":void 0,details:{path:t&&r.stdout||null}},{id:"github_token_for_vercel_status",label:"GitHub token for Vercel status",status:n?"pass":"warn",summary:n?"GITHUB_TOKEN/GH_TOKEN present for GitHub Vercel StatusContext evidence":"No GITHUB_TOKEN \u2014 merge-gate Vercel evidence requires GitHub commit status API",remediation:n?void 0:"Export GITHUB_TOKEN (or GH_TOKEN) for PR head commit status lookups."},{id:"vercel_api_token_optional",label:"Vercel API token (optional fallback)",status:o?"pass":"warn",summary:o?"VERCEL_TOKEN configured for optional REST API deployment lookup":"VERCEL_TOKEN unset \u2014 GitHub status is the default path; API fallback disabled",remediation:o?void 0:"Set ephemeral/scoped VERCEL_TOKEN only when GitHub status is insufficient; avoid persistent ~/.vercel auth on runner hosts."}]}}function nE(e){let r=e.harnessRoot(),t=vh.join(r,"runs"),n=vh.join(r,"worktrees"),o=pe(r),s=pe(t),i=pe(n),a=e.pathExists(t),l=e.pathExists(n);return{id:"harness_dirs",label:"Harness / daemon directories",checks:[{id:"harness_root",label:"Harness root resolved",status:"pass",summary:o,details:{harnessRoot:o}},{id:"harness_runs_dir",label:"Runs directory ready",status:a&&e.pathWritable(t)?"pass":"warn",summary:a?e.pathWritable(t)?`Writable ${s}`:`Exists but not writable: ${s}`:`Will be created on first run: ${s}`,remediation:a&&!e.pathWritable(t)?`Fix permissions on ${s} or set KYNVER_HARNESS_ROOT to a writable path.`:void 0,details:{runsDir:s,exists:a,writable:e.pathWritable(t)}},{id:"harness_worktrees_dir",label:"Worktrees directory ready",status:l&&e.pathWritable(n)?"pass":"warn",summary:l?e.pathWritable(n)?`Writable ${i}`:`Exists but not writable: ${i}`:`Will be created on first worker: ${i}`,remediation:l&&!e.pathWritable(n)?`Fix permissions on ${i}.`:void 0,details:{worktreesDir:i,exists:l,writable:e.pathWritable(n)}}]}}function oE(e){let r=e.loadConfig(),t=e.envSnapshot(),n=t.kynverApiUrl??r.apiBaseUrl?.trim()??t.openclawCronFireBaseUrl,o=!t.kynverApiUrl&&!r.apiBaseUrl&&!!t.openclawCronFireBaseUrl,s=t.openclawCronSecret||t.kynverRuntimeSecret,i=t.kynverRunnerTokenPrefix?.startsWith("krc1."),l=e.readCredentials().runnerTokenPrefix?.startsWith("krc1.");return{id:"callback_auth",label:"Callback auth / config",checks:[{id:"callback_base_url",label:"Callback base URL configured",status:n?o?"warn":"pass":"fail",summary:n?o?`Using legacy OPENCLAW_CRON_FIRE_BASE_URL (${n})`:n:"No KYNVER_API_URL, config apiBaseUrl, or legacy OpenClaw base URL",remediation:n?o?"Migrate to KYNVER_API_URL or `kynver setup --api-base-url` and drop OPENCLAW_CRON_FIRE_BASE_URL.":void 0:"Set KYNVER_API_URL or run `kynver setup --api-base-url https://\u2026`.",details:{source:t.kynverApiUrl?"KYNVER_API_URL":r.apiBaseUrl?"config.apiBaseUrl":t.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL":"none",baseUrl:n??null}},{id:"callback_auth_mode",label:"Callback auth uses scoped runner token",status:i||l?"pass":s?"warn":"fail",summary:i?"KYNVER_RUNNER_TOKEN scoped token will be sent as X-Kynver-Runner-Token":l?"Saved krc1.* token in ~/.kynver/credentials":s?"Deployment-level KYNVER_RUNTIME_SECRET / OPENCLAW_CRON_SECRET in use (legacy headers)":"No callback secret configured",remediation:i||l?void 0:"Mint a scoped token: `kynver runner credential --agent-os-id <id>`. Avoid shared OPENCLAW_CRON_SECRET on user runners.",details:{mode:i||l?"scoped":s?"legacy_global_secret":"missing",legacyHeadersWhenNotScoped:["X-OpenClaw-Cron-Secret","X-Kynver-Runtime-Secret"]}}]}}function sE(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=pe(o),a=pe(s),l=r.opusHarnessRoot?pe(r.opusHarnessRoot):null,c=o===s&&e.pathExists(s),u=t.agentOsId?.trim(),d=r.kynverRunnerTokenPrefix,f=n.runnerTokenPrefix,m=n.runnerTokenAgentOsId,p=!!f&&(!u||!m||m===u),g=!!d?.startsWith("krc1.")||p&&!!f?.startsWith("krc1.");return{id:"openclaw_hotspots",label:"OpenClaw dependency hotspots",checks:[{id:"hotspot_legacy_harness_root",label:"Legacy ~/.openclaw/harness still active",status:c?"warn":"pass",summary:c?`Harness root is legacy ${a}`:r.opusHarnessRoot?`OPUS_HARNESS_ROOT override in use (${l})`:`Using ${i}`,remediation:c?"Set KYNVER_HARNESS_ROOT=~/.kynver/harness (or run setup), migrate artifacts, retire OPUS_HARNESS_ROOT.":r.opusHarnessRoot?"Prefer KYNVER_HARNESS_ROOT over OPUS_HARNESS_ROOT.":void 0,details:{harnessRoot:i,legacyRoot:a,opusHarnessRoot:l}},{id:"hotspot_openclaw_env_secrets",label:"OpenClaw deployment secrets in runner env",status:r.openclawCronSecret||r.openclawCronFireBaseUrl?"warn":"pass",summary:r.openclawCronSecret||r.openclawCronFireBaseUrl?[r.openclawCronSecret?"OPENCLAW_CRON_SECRET set":null,r.openclawCronFireBaseUrl?"OPENCLAW_CRON_FIRE_BASE_URL set":null].filter(Boolean).join("; "):"No OpenClaw cron env overrides on this runner",remediation:r.openclawCronSecret||r.openclawCronFireBaseUrl?"Move to KYNVER_API_URL + scoped runner tokens; unset OpenClaw cron env on user-hosted runners.":void 0},bh(r,{agentOsId:u??null,apiBaseUrl:t.apiBaseUrl?.trim()??r.kynverApiUrl??null,hasScopedRunnerToken:g,deploymentSchedulerProvider:t.deploymentSchedulerProvider==="qstash"||t.deploymentSchedulerProvider==="kynver-cron"||t.deploymentSchedulerProvider==="openclaw-cron"?t.deploymentSchedulerProvider:void 0}),{id:"hotspot_lease_source_names",label:"Harness lease/completion source names",status:"pass",summary:"Runtime uses kynver-harness:* lease owners and completion source kynver-harness (OpenClaw names retired in runtime)",details:{leaseOwnerPattern:"kynver-harness:<runId>",completionSource:"kynver-harness",note:"OpenClaw adapter remains optional in packages/kynver-openclaw-agent-os only"}}]}}function Sh(e=kh){let r=[ZP(e),eE(e),rE(e),tE(e),nE(e),oE(e),sE(e)],t=QP(r),n=t.fail===0,o=n?t.warn>0?`Ready with ${t.warn} warning(s) \u2014 review remediation before retiring OpenClaw as primary runtime agent.`:"Ready \u2014 Kynver runtime can serve as primary runtime agent on this host.":`${t.fail} blocking check(s) \u2014 fix failures before OpenClaw takeover.`;return{command:"doctor runtime-takeover",ready:n,summary:o,counts:t,sections:r}}function wh(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Rl();if(!n.ok){console.error(n.reason??"defaultRepo remediation failed"),n.remediation&&console.error(n.remediation),process.exitCode=1;return}n.remediated?r=`Remediated defaultRepo \u2192 ${n.resolved?.defaultRepo??"unknown"}`:r=`defaultRepo already persisted (${n.resolved?.defaultRepo??"unknown"})`}let t=Sh();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function Ch(e){let r=b(),t=(e.agentOsId?String(e.agentOsId):r.agentOsId)||"";t||(console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json"),process.exit(1));let n=L(e.baseUrl?String(e.baseUrl):r.apiBaseUrl),o=await K(e.secret?String(e.secret):void 0,t,{baseUrl:n}),s=new URLSearchParams;if(typeof e.since=="string"&&e.since.trim()&&s.set("since",e.since.trim()),e.limit!=null&&String(e.limit).trim()){let c=Number(e.limit);Number.isFinite(c)&&c>0&&s.set("limit",String(Math.floor(c)))}let i=s.toString()?`?${s.toString()}`:"",a=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/command-center/dashboard-contract${i}`,l=await Co(a,o);l.ok||(console.error(`dashboard-contract GET failed: HTTP ${l.status}`),l.response&&console.error(JSON.stringify(l.response,null,2)),process.exit(1)),console.log(JSON.stringify(l.response,null,2))}qe();var vl=["Vercel/hosted: set KYNVER_SCHEDULER_PROVIDER=qstash","Vercel/hosted: ensure QSTASH_TOKEN (and QStash signing keys) are configured","Vercel/hosted: unset OPENCLAW_CRON_STORE_PATH if present"],Sl=["User runner: unset KYNVER_SCHEDULER_PROVIDER (scheduling is deployment-owned)","User runner: unset OPENCLAW_CRON_STORE_PATH, OPENCLAW_CRON_SECRET, OPENCLAW_CRON_FIRE_BASE_URL",'User runner: after deployment cutover, run `kynver scheduler attest-cutover` (or set deploymentSchedulerProvider to "qstash" in ~/.kynver/config.json)',"Verify: kynver doctor runtime-takeover \u2014 hotspot_openclaw_scheduler should pass"];function iE(e=process.env){return{kynverSchedulerProvider:e.KYNVER_SCHEDULER_PROVIDER?.trim()||null,kynverCronStorePath:e.KYNVER_CRON_STORE_PATH?.trim()||e.OPENCLAW_CRON_STORE_PATH?.trim()||null,kynverCronSecret:!!(e.KYNVER_CRON_SECRET?.trim()||e.OPENCLAW_CRON_SECRET?.trim()),kynverCronFireBaseUrl:e.KYNVER_CRON_FIRE_BASE_URL?.trim()||e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null,openclawCronStorePath:e.OPENCLAW_CRON_STORE_PATH?.trim()||null,openclawCronSecret:!!e.OPENCLAW_CRON_SECRET?.trim(),openclawCronFireBaseUrl:e.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}}function wl(e,r=iE()){let t=[];return r.kynverSchedulerProvider==="openclaw-cron"&&t.push("Runner still has KYNVER_SCHEDULER_PROVIDER=openclaw-cron"),r.kynverCronStorePath&&r.kynverSchedulerProvider!=="kynver-cron"&&t.push("Runner has KYNVER_CRON_STORE_PATH but KYNVER_SCHEDULER_PROVIDER is not kynver-cron \u2014 use `kynver daemon` cron tick or unset the store for QStash-only runners"),r.openclawCronStorePath&&!r.kynverCronStorePath&&t.push("Runner still has legacy OPENCLAW_CRON_STORE_PATH (prefer KYNVER_CRON_STORE_PATH)"),e.deploymentSchedulerProvider==="openclaw-cron"&&t.push("~/.kynver/config.json deploymentSchedulerProvider is still openclaw-cron"),{ok:t.length===0,blockers:t,runnerEnv:r,deploymentSchedulerProvider:e.deploymentSchedulerProvider??null,deploymentSteps:[...vl],runnerSteps:[...Sl]}}function _h(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import aE from"node:path";import{homedir as lE}from"node:os";var xh=aE.join(lE(),".kynver","config.json");function Ph(e=!1){let r=b(),t=wl(r),n={...t,configPath:Y(xh),configAttestationExample:{deploymentSchedulerProvider:"qstash"}};if(e){console.log(JSON.stringify(n,null,2)),t.ok||(process.exitCode=1);return}console.log(`AgentOS scheduler provider cutover checklist
|
|
53
|
+
`),console.log("Deployment (Vercel):");for(let o of vl)console.log(` - ${o}`);console.log(`
|
|
54
|
+
User runner:`);for(let o of Sl)console.log(` - ${o}`);if(console.log(`
|
|
47
55
|
This host:`),console.log(` config: ${n.configPath}`),console.log(` deploymentSchedulerProvider: ${t.deploymentSchedulerProvider??"(unset)"}`),console.log(` KYNVER_SCHEDULER_PROVIDER: ${t.runnerEnv.kynverSchedulerProvider??"(unset)"}`),console.log(` KYNVER_CRON_STORE_PATH: ${t.runnerEnv.kynverCronStorePath??"(unset)"}`),console.log(` OPENCLAW_CRON_STORE_PATH (legacy): ${t.runnerEnv.openclawCronStorePath??"(unset)"}`),t.blockers.length){console.log(`
|
|
48
56
|
Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
|
|
49
|
-
No local blockers detected on this runner.`)}function
|
|
57
|
+
No local blockers detected on this runner.`)}function Eh(e=!1){let r=b(),t=wl(r);if(!t.ok){let s={ok:!1,attested:!1,blockers:t.blockers,remediation:"Clear local OpenClaw scheduler blockers before attesting qstash cutover."};if(e)console.log(JSON.stringify(s,null,2));else{console.error("Cannot attest scheduler cutover \u2014 local blockers remain:");for(let i of t.blockers)console.error(` ! ${i}`)}process.exitCode=1;return}let n=_h(r);ze(n);let o={ok:!0,attested:!0,configPath:Y(xh),deploymentSchedulerProvider:"qstash",config:ct(n),note:"Recorded deploymentSchedulerProvider=qstash in ~/.kynver/config.json. Confirm Vercel has KYNVER_SCHEDULER_PROVIDER=qstash and QSTASH_TOKEN before relying on hosted schedules."};if(e){console.log(JSON.stringify(o,null,2));return}console.log(o.note),console.log(` config: ${o.configPath}`)}async function Ah(e){let r=await Rs();if(e){console.log(JSON.stringify(r,null,2));return}console.log(`Kynver Cron primary: ${r.primary}`),console.log(` store: ${r.env.storePath} (${r.jobCount} jobs)`),console.log(` tick state: ${r.env.statePath} (${r.stateJobCount} tracked)`),console.log(` tick enabled: ${r.env.tickEnabled}`),console.log(` fire base URL: ${r.env.fireBaseUrl??"(unset)"}`),console.log(` credentials ready: ${r.credentialsReady}`),console.log(` daemon-owned primary: ${r.daemonPrimary}`)}async function Ih(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await mt({agentOsIdFilter:r??null});if(e.json===!0){console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({event:"kynver_cron_tick",...t}))}O();function cE(e,r){if(e===void 0)return r;if(e===!0)return!0;if(e===!1)return!1;let t=String(e).trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r}async function Oh(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await ws({execute:r?!1:cE(e.execute,!0),json:e.json===!0,installSystemd:e.installSystemd===!0||e["install-systemd"]===!0,confirmQstashRemoval:e.confirmQstashRemoval===!0||e["confirm-qstash-removal"]===!0,skipWatchdog:e.skipWatchdog===!0||e["skip-watchdog"]===!0,skipTestFire:e.skipTestFire===!0||e["skip-test-fire"]===!0,agentOsId:typeof e.agentOsId=="string"?e.agentOsId:void 0,apiBaseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0,runId:typeof e.run=="string"?e.run:void 0});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}if(console.log(t.dryRun?`Kynver Cron install (dry-run)
|
|
50
58
|
`:`Kynver Cron install
|
|
51
59
|
`),console.log(` config: ${t.configPath}`),console.log(` env file: ${t.plan.envFilePath}`),console.log(` store: ${t.plan.storePath}`),t.secretGenerated&&console.log(" generated new KYNVER_CRON_SECRET"),t.envFile&&console.log(` env merge: ${t.envFile.changed?"updated":"unchanged"} (${t.envFile.keysWritten.join(", ")||"no key changes"})`),t.watchdog?.remoteJobId?console.log(` watchdog: job ${t.watchdog.remoteJobId} provider=${t.watchdog.provider} local=${t.watchdog.localProviderScheduleId}`):t.watchdog?.error&&console.log(` watchdog: ERROR ${t.watchdog.error}`),t.qstashWatchdog?.found.length){console.log(` qstash watchdog leftovers: ${t.qstashWatchdog.found.length}`);for(let n of t.qstashWatchdog.found)console.log(` - ${n.id} (${n.status})`);t.qstashWatchdog.removed.length&&console.log(` removed: ${t.qstashWatchdog.removed.join(", ")}`)}t.systemd&&console.log(` systemd: ${t.systemd.note??(t.systemd.started?"running":"not started")}`),t.testFire&&!t.testFire.skipped&&console.log(` test fire: fired=${t.testFire.fired} errors=${t.testFire.errors}`),console.log(`
|
|
52
60
|
Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
|
|
53
|
-
Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function
|
|
54
|
-
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}
|
|
55
|
-
`)),process.exit(e)}async function
|
|
61
|
+
Blockers:`);for(let n of t.blockers)console.log(` ! ${n}`);process.exitCode=1;return}console.log("\nInstall complete \u2014 run `kynver cron verify` to re-check.")}async function Nh(e){let r=b(),t=await Nt({config:r});if(e.json===!0){console.log(JSON.stringify(t,null,2)),t.ok||(process.exitCode=1);return}console.log(`Kynver Cron verify: ${t.ok?"PASS":"FAIL"}
|
|
62
|
+
`);for(let n of t.checks){let o=n.ok?"ok":"FAIL";console.log(` [${o}] ${n.id}: ${n.summary}`),!n.ok&&n.remediation&&console.log(` \u2192 ${n.remediation}`)}t.ok||(process.exitCode=1)}O();import dE from"node:os";O();Ee();en();w();var Vn={slug:"landing-maintainer",originCron:"maintain-8-blocker-and-pr-landing-workers",defaultRepo:"Totalsolutionsync/Kynver",landScript:"scripts/agent-os-land-pr.mjs",landScriptArgs:["--skip-not-ready"]};import{spawnSync as uE}from"node:child_process";import Th from"node:path";function Dh(e,r,t){let o=[Th.join(r,Vn.landScript),String(e),...Vn.landScriptArgs];if(!t)return{action:{kind:"land_pr",prNumber:e,reason:"dry-run"},executed:!1,exitCode:0,stdout:`dry-run: node ${o.join(" ")}`,stderr:""};let s=uE("node",o,{cwd:r,encoding:"utf8",timeout:600*1e3});return{action:{kind:"land_pr",prNumber:e,reason:"landing wrapper invoked"},executed:!0,exitCode:s.status,stdout:s.stdout??"",stderr:s.stderr??""}}function Mh(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?Th.resolve(r):Ce()?.repo??process.cwd()}async function Uh(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Vn.defaultRepo).trim(),n=e.fleet===!0||e.fleet==="true",o=e.execute===!0||e.execute==="true",s=e.run?String(e.run):void 0,i=wr({runId:s??"fleet-lane-tick"}),a={...Qo(i,{harnessRunId:s,boxKind:Be(b()),hostLabel:dE.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=L(e.baseUrl?String(e.baseUrl):void 0),c=await K(e.secret?String(e.secret):void 0,r,{baseUrl:l}),u=`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/tick`,f=(await Er(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=Mh(e),g=Array.isArray(f?.localActions)?f.localActions:[],k=a.boxId;for(let h of g){if(h.kind==="land_pr"&&typeof h.prNumber=="number"){let S=Dh(h.prNumber,p,o);if(m.push({action:S.action,executed:S.executed,exitCode:S.exitCode}),o&&S.executed){let A=S.exitCode===0,W=typeof h.prUrl=="string"&&h.prUrl.trim()?h.prUrl.trim():`https://github.com/${t}/pull/${h.prNumber}`;try{await Er(`${l}/api/agent-os/by-id/${encodeURIComponent(r)}/fleet-landing-maintainer/outcome`,c,{repo:t,prUrl:W,holderBoxId:k,merged:A})}catch{}}continue}m.push({action:h,executed:!1,exitCode:null})}return{repo:t,fleet:n,execute:o,coordinator:f,localOutcomes:m}}async function Bh(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await Uh(e);if(e.json===!0||e.json==="true"){console.log(JSON.stringify(n,null,2));return}console.log(["fleet landing-maintainer tick",`repo=${n.repo}`,`fleet=${n.fleet}`,`execute=${n.execute}`,`localOutcomes=${n.localOutcomes.length}`].join(" "));for(let o of n.localOutcomes)console.log(` ${o.action.kind} pr=${o.action.prNumber??"-"} executed=${o.executed}`)}function Cl(e){return e==="help"||e==="--help"||e==="-h"}function Hh(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),_l(1)}function _l(e=0){(e===0?console.log:console.error)(["Usage:"," kynver login [--api-key KEY] [--api-base-url URL] (omit --api-key to authorize in the browser)"," kynver bootstrap [--api-base-url URL] [--api-key KEY] [--repo PATH] (login + setup + runner credential in one shot)"," kynver start [--repo PATH] [--api-base-url URL] [--run RUN_ID] [--interval-ms MS] [--chat-oauth] (bring your agent online: bootstrap if needed + run + daemon; --chat-oauth lets delegated chat turns use your local Claude subscription)"," kynver runner credential [--agent-os-id ID] [--base-url URL]"," kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--box-kind forge|ghost] [--repo PATH] [--discover-repo] [--max-workers N] [--provider claude|cursor] [--chat-oauth]"," kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS] [--stall-ms MS] [--no-supervise]"," kynver status --run RUN_ID [--blocked] [--running] [--task TASK_ID] [--worker WORKER] [--full] # top-level compact run status"," kynver run create [--repo /path/repo] [--name name] [--base origin/main]"," kynver run list"," kynver run resolve --name RUN_NAME"," kynver run status --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--target-task-id TASK_ID] [--executor harness] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-8] [--disk-path /] [--reconcile-stale-blockers]"," kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]",' kynver worker start --run RUN_ID --name worker --task "..." [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID] [--wait]'," kynver worker list --run RUN_ID [--full] # defaults to compact shallow map with drill-down commands"," kynver worker status --run RUN_ID --name worker"," kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]"," kynver worker stop --run RUN_ID --name worker"," kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"," kynver worker discard-disposable --run RUN_ID --name worker --path scripts/helper.mjs[,other]"," kynver worker auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--poll-ms 5000] [--max-total-ms 21600000] [--complete-attempts 3] [--complete-backoff-ms 5000] [--base-url URL] [--secret SECRET]"," kynver run reconcile"," kynver run unblock [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET] [--dry-run]"," kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]"," kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override] [--local]"," kynver harness verify --worktree PATH [--command CMD] [--json] [--wait-for-admission-ms MS] [--timeout-ms MS]"," kynver plan persist --operation create|add_version|update_metadata --title TITLE (--body-file PATH | --body TEXT) [--slug SLUG] [--plan PLAN_ID] [--summary TEXT] [--failure-kind approval_guard|auth|network|server|tool_interruption]"," kynver plan outbox list"," kynver plan outbox drain [--max N] [--id OUTBOX_ID]"," kynver cleanup [--execute] [--compact] [--node-modules-age-ms MS] [--worktrees-age-ms MS] [--harness-root PATH] [--include-orphans] [--skip-finalize] [--account-bytes]"," --include-orphans also scans whole worktree directories (<harnessRoot>/worktrees/<runId>/<workerId>/) that no run/worker.json references; orphans pass salvage gates (recent heartbeat, dirty git, ahead of origin/main) before removal."," Dry-run defaults to fast scan (no byte accounting). Pass --account-bytes for reclaimable byte totals. Pass --compact for a bounded operator summary (no full action list)."," kynver monitor start --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS]"," kynver monitor status [--run RUN_ID] [--name worker] [--tick]"," kynver monitor stop --run RUN_ID [--name worker]"," kynver monitor list"," kynver monitor tick --run RUN_ID [--name worker] [--agent-os-id AOS_ID] [--auto-complete] [--renew-leases]"," kynver monitor auto-complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--base-url URL] [--secret SECRET]"," kynver monitor run-loop --run RUN_ID --monitor-id ID [--name worker] [--agent-os-id AOS_ID] [--poll-ms MS] [--auto-complete] [--renew-leases]"," kynver config ensure-default-repo [--json]"," kynver doctor runtime-takeover [--remediate-default-repo]"," kynver scheduler cutover-check [--json]"," kynver scheduler attest-cutover [--json]"," kynver cron install [--dry-run] [--json] [--install-systemd] [--confirm-qstash-removal] [--skip-watchdog] [--skip-test-fire] [--agent-os-id ID] [--api-base-url URL] [--run RUN_ID]"," kynver cron verify [--json]"," kynver cron status [--json]"," kynver cron tick [--agent-os-id AOS_ID] [--json]"," kynver lane tick landing-maintainer [--fleet] [--repo OWNER/NAME] [--agent-os-id AOS_ID] [--execute] [--json]"," kynver board contract [--agent-os-id ID] [--base-url URL] [--since ISO] [--limit N]"].join(`
|
|
63
|
+
`)),process.exit(e)}async function mE(e=process.argv.slice(2)){if(lh(e,import.meta.url,"kynver"))return;if(e.length===0||Cl(e[0]))return _l(0);let r=e.shift(),t,n;if((r==="run"||r==="worker"||r==="plan"||r==="runner"||r==="harness"||r==="monitor"||r==="doctor"||r==="config"||r==="scheduler"||r==="cron"||r==="lane"||r==="board")&&(t=e.shift()),n=e,t&&Cl(t)||n.some(Cl))return _l(0);let o=ho(n),{runsDir:s,worktreesDir:i}=te();if(Lh(s,{recursive:!0}),Lh(i,{recursive:!0}),r==="daemon"&&pt(),uh(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await ch({repoRoot:a,cwd:a})}if(r==="login")return void await Ic(o);if(r==="bootstrap")return void await yo(o);if(r==="start")return void await Rg(o);if(r==="status")return vn(o);if(r==="runner"&&t==="credential")return void await Ac(o);if(r==="setup")return void await ko(o);if(r==="daemon")return hs(o)?void await ks(o):void await gs(o);if(r==="plan"&&t==="progress")return void await Og(o);if(r==="plan"&&t==="verify")return void await Ng(o);if(r==="harness"&&t==="verify")return Tg(o);if(r==="plan"&&t==="persist")return void await Dg(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Mg();if(a==="drain")return void await Ug(ho(n));Hh("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return Bg(o);if(r==="config"&&t==="ensure-default-repo")return mh(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return wh(o);if(r==="scheduler"&&t==="cutover-check")return Ph(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Eh(o.json===!0);if(r==="cron"&&t==="install")return void await Oh(o);if(r==="cron"&&t==="verify")return void await Nh(o);if(r==="cron"&&t==="status")return void await Ah(o.json===!0);if(r==="cron"&&t==="tick")return void await Ih(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Bh(ho(n),a)}if(r==="board"&&t==="contract")return void await Ch(o);if(r==="run"&&t==="create")return void ys(o);if(r==="run"&&t==="list")return zf();if(r==="run"&&t==="resolve")return dh(o);if(r==="run"&&t==="status")return vn(o);if(r==="run"&&t==="dispatch")return void await Ur(o);if(r==="run"&&t==="sweep")return void await Nn(o);if(r==="run"&&t==="reconcile")return Yp();if(r==="run"&&t==="unblock")return void await ph(o);if(r==="worker"&&t==="start")return void await op(o);if(r==="worker"&&t==="list")return Vd(o);if(r==="worker"&&t==="status")return Kd(o);if(r==="worker"&&t==="tail")return Xd(o);if(r==="worker"&&t==="stop")return Qd(o);if(r==="worker"&&t==="complete")return void await ji(o);if(r==="worker"&&t==="discard-disposable")return bg(o);if(r==="worker"&&t==="auto-complete")return void await rp(o);if(r==="monitor"&&t==="start"){let a=await Zg(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await eh(o);if(r==="monitor"&&t==="stop")return rh(o);if(r==="monitor"&&t==="list")return th();if(r==="monitor"&&t==="tick")return void await oh(o);if(r==="monitor"&&t==="auto-complete")return void await hl(o);if(r==="monitor"&&t==="run-loop")return void await nh(o);Hh(r,t)}var fE=process.argv[1]&&Wh.native(process.argv[1])===Wh.native(pE(import.meta.url));fE&&mE().catch(e=>{console.error(e),process.exit(1)});export{mE as main,_l as usage};
|